If you are replacing your existing print spooling spooling system, you must shut down and remove the existing print spooler software before installing the LPRng software. This process is fairly system dependent, and requires a small amount of system expertise.
To assist in this process the LPRng installation has a set of preinstall, postinstall, preremove, and postremove scripts in the distribution that may be suitable for your local system use. If these fail to work during the system installation, you will need to carry out the steps described here by hand.
The SunOS, Linux, and BSD derived systems such as BSDi, FreeBSD, OpenBSD, and others use a version of the legacy or vintage lpd print server and the lpr, lprm, lpq, and lpc client programs. By convention, most of the printing related programs are in the /usr/bin, /usr/sbin, /usr/libexec, and /usr/ucb directories.
The lpd print spooler is started by either the rc startup script or by a startup script file in the /etc/rc.d/init.d or /etc/init.d directory. You can first locate the startup commands as follows.
Use the find(1) utility to search the /etc directory for the file that contains the startup command.
Examine each of the files found find the one that starts the lpd print spooler. You can simply comment out the command or change it to start the LPRng lpd print server.
h4: {25} # more /etc/rc.local if [ -f /etc/printcap -a -f /usr/libexec/lpd ] ; then /usr/libexec/lpd ; fi --- change this to if [ -f /etc/printcap -a -f /usr/sbin/lpd ] ; then /usr/sbin/lpd ; fi
If you have an existing printcap file, then you should either copy this to the location used by LPRng or make a symbolic link to it.
Next we kill the currently running lpd process.
h4: {26} # ps -auxw |grep lpd papowell 23932 0.0 0.3 224 184 p3 S+ 10:40AM 0:00.01 grep lpd daemon 17763 0.0 0.2 448 120 ?? IWs 29Mar99 0:01.35 (lpd) h4: {27} % kill 135 h4: {28} % kill 135 135: No such process
Next, you should remove or rename the existing print system executables. The following example shows how to use the find utility to track down candidates.
h4: {29} # find /usr -type f -name lp\* -print >/tmp/candidates h4: {30} # find /sbin -type f -name lp\* -print >>/tmp/candidates h4: {31} # cat /tmp/candidates /usr/bin/lpunlock /usr/bin/lpqall.faces /usr/bin/lpq <---- old /usr/bin/lpr <---- old /usr/bin/lprm <---- old /usr/bin/lptest /usr/doc/samba-1.9.18p10/examples/printer-accounting/lp-acct /usr/man/man1/lpq.1 /usr/man/man1/lpr.1 /usr/man/man1/lprm.1 /usr/man/man1/lptest.1 /usr/man/man4/lp.4 /usr/man/man8/lpc.8 /usr/man/man8/lpd.8 /usr/sbin/lpc <--- old /usr/sbin/lpd <--- old /usr/sbin/lpf <--- old h4: {32} # mv /usr/bin/lpq /usr/bin/lpq.old h4: {33} # mv /usr/bin/lpr /usr/bin/lpr.old h4: {34} # mv /usr/bin/lprm /usr/bin/lprm.old h4: {35} # mv /usr/sbin/lpc /usr/sbin/lpc.old h4: {36} # mv /usr/sbin/lpd /usr/sbin/lpd.old h4: {37} # mv /usr/sbin/lpf /usr/sbin/lpf.old
After all this, you should now run checkpc -f (as root) to make sure that the LPRng configuration is present and correctly set up, and then start lpd by hand. You should try to use lpq to see if the spool queues are present and set up correctly and the system is functional.
h4: {38} # checkpc -f h4: {39} # lpd h4: {40} # lpq Printer: lw4@h2 'Hp : LaserWriter' Queue: no printable jobs in queue Status: job 'root@h2+884' removed at 11:27:25.864 Filter_status: done at 11:27:25.766 h4: {41} # lpr /etc/motd h4: {42} # lpq Printer: lw4@h2 'Hp : LaserWriter' Queue: no printable jobs in queue Status: job 'root@h2+888' removed at 11:27:25.864 Filter_status: done at 11:33:17.020
Finally, you should reboot your machine and make sure that the lpd print server starts correctly.
The original SysVR4 (System V, Release 4) software did not have any support for RFC1179 network printing (Berkeley lpd). Support for this was added in a wide variety of different ways. There are a wide range of different ways that this was done, but most are based on the following system or process structure.
The lpsched process (/usr/lib/lp/lpsched/) process performs many of the functions of the LPRng and BSD lpd server. This process is responsible for overseeing job printing and starting processes for handling the print queues on the local host. This process must be shut down and the running print spooling servers terminated before LPRng can be correctly installed. While there is no simple and reliable method of shutting down a running lpsched process and the associated network services, it is simple to prevent the process from being started.
The preinstall.solaris script is a file in the LPRng distribution that contains most of the commands needed to remove the Solaris System V printing software. These are explained in detail in the sections below. The procedures outlined below can be used on other SystemVR4 systems.
#!/bin/sh # This is an effort to automate the setup # needed to install the LPRng software on the # Solaris OS. This is effectively a one way path. # You are warned. PATH=/etc:/usr/etc:/usr/bin:/bin:/sbin:/usr/sbin:$PATH # remove the init.d entry and links for i in /etc/rc*.d/*lp ; do b=`basename $i`; d=`dirname $i`; mv $i $d/UNUSED.$b.UNUSED done # rename files renameit () { for i in $* ; do if [ -f $i -a '!' -f $i.old ] ; then echo "renaming $i $i.old"; mv $i $i.old fi done } renameit /usr/bin/lp /usr/bin/lpstat /usr/sbin/lpadmin \ /usr/sbin/lpfilter /usr/sbin/lpforms /usr/sbin/lpmove \ /usr/sbin/lpshut /usr/sbin/lpsystem /usr/sbin/lpusers \ /usr/ucb/lpc /usr/ucb/lpq /usr/ucb/lpr /usr/ucb/lprm \ /usr/ucb/lptest /usr/lib/lp/lpsched /usr/lib/lp/lpNet # remove the cron entry if [ -f /var/spool/cron/crontabs/lp ] ; then mv /var/spool/cron/crontabs/lp \ /var/spool/cron/UNUSED.crontabs.lp fi # comment out inetd.conf entry if egrep '^printer' /etc/inetd.conf >/dev/null 2>& ; then mv /etc/inetd.conf /etc/inetd.conf.bak sed -e 's/^printer/# printer/' </etc/inetd.conf.bak \ >/etc/inetd.conf fi # remove the nlsadmin entry nlsadmin -r lpd tcp nlsadmin -r lp tcp echo REBOOT SYSTEM and then install LPRng
First, you will need to remove the /etc/rc startup files in the /etc/rc*.d directories that start the lpsched process; see the init program man page for details. You can find these files by using:
h4: {43} # cd / h4: {44} # find . -type f -exec grep -l lpsched {} \; -print >/tmp/files h4: {45} # cat /tmp/files /etc/rc0.d/K20lp /etc/rc2.d/K20lp /etc/rc2.d/S80lp /etc/init.d/lp h4: {46} # ls -l ` cat /tmp/files ` lrwxrwxr-x 1 root bin 1 Dec 29 23:39 /etc/rc0.d/K20lp -> ../../init.d/lp lrwxrwxr-x 1 root bin 1 Dec 29 23:39 /etc/rc2.d/K20lp -> ../../init.d/lp lrwxrwxr-x 1 root bin 1 Dec 29 23:39 /etc/rc2.d/S80lp -> ../../init.d/lp -rwxr--r-- 5 root sys 460 Sep 1 1998 /etc/rcS.d/K39lp
You can remove these files, or simply comment out all of the executable commands in the /etc/init.d/lp file. Next, find all of the printing related commands and rename them. For example:
h4: {47} # find /usr -type f -name lp\* -print >/etc/printingfiles h4: {48} # cat /tmp/printingfiles /usr/bin/lp /usr/bin/lpstat /usr/lib/lp/bin/lp.cat /usr/lib/lp/bin/lp.set /usr/lib/lp/bin/lp.tell /usr/lib/lp/lpNet /usr/lib/lp/lpsched /usr/lib/lp/lpdata /usr/sbin/lpadmin /usr/sbin/lpfilter /usr/sbin/lpforms /usr/sbin/lpmove /usr/sbin/lpshut /usr/sbin/lpsystem /usr/sbin/lpusers /usr/ucb/lpc /usr/ucb/lpq /usr/ucb/lpr /usr/ucb/lprm /usr/ucb/lptest h4: {49} # vi /tmp/printingfiles # remove ones you want to save h4: {50} # for i in ` cat /tmp/printingfiles ` ; do > if [ -f $i -a '!' -f $i.old ] ; then mv $i $i.old ; fi; > done
On some systems there may be a cron file /var/spool/cron/crontabs/lp which is used to to periodically update and roll over error logs. You may want to remove this file or comment out its contents.
Check the /etc/inetd.conf file for a line like the one below and comment it out. This line is not present on all systems.
Use nlsadmin to force the TCP/IP listener to release the port, as illustrated below. This may not be present on all system.
h4: {51} # nlsadmin -v tcp lpd \x00020203000000000000000000000000 ENABLED \ NORPC root NOMODULES /var/spool/lp/fifos/listenBSD # 0 \x00020ACE000000000000000000000000 ENABLED \ NORPC root NOMODULES /usr/lib/saf/nlps_server # lp NOADDR ENABLED NORPC root NOMODULES \ /var/spool/lp/fifos/listenS5 # h4: {52} # nlsadmin -r lpd tcp h4: {53} # nlsadmin -r lp tcp
Run pmadm -l as shown below.
h2.private: {2} # pmadm -l PMTAG PMTYPE SVCTAG FLGS ID <PMSPECIFIC> zsmon ttymon ttya u root /dev/term/a I - /usr/bin/login ... zsmon ttymon ttyb u root /dev/term/b I - /usr/bin/login ...
You must now reboot the host.
When the system reboots, make sure that there is no process listening on port 515 (printer port) by using:
If you can connect, then there is a problem beyond the scope of these instructions.
Compile and/or install the LPRng software. Make sure that the LPRng startup files have been installed correctly in /etc/init.d/lprng and that the symbolic links to the file have been made correctly. The LPRng startup file will usually have the following contents and you should use the same filename formats that the lp startup files had for the links to the /etc/init.d/lprng startup file:
LPD_PATH=/usr/sbin/lpd SHOWALL=-e case "$1" in start) # Start daemons. /bin/echo "Starting lpd: \c" ${LPD_PATH} /bin/echo "" ;; stop) # Stop daemons. /bin/echo "Shutting down lpd: \c" kill -INT `ps ${SHOWALL} \ | awk '/lpd/{ print $1;}'` >/dev/null 2>&1 /bin/echo " server stopped"; ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac
h4: {56} # checkpc -f h4: {57} # /usr/sbin/lpd (or /usr/local/sbin/lpd) h4: {58} # lpq Printer: lp Queue: no printable jobs in queue