Installation on Slackware 14
From Linux-VServer
The purpose of this note is to setup a guest based on Slackware. What follows was tested on Slackware 14.1, 14.0, 13.37 and 13.1** (both 32b and 64b). I will assume that you have a Linux-Vserver box working.
Contents |
Download
wget http://notes.sagredo.eu/sites/notes.sagredo.eu/files/linux-vserver/slack_vserver.tar.gz tar xzf slack_vserver.tar.gz cd slack_vserver ls
You have downloaded the following files:
- PKG_LIST is the package list to be installed in the guest
- download_slack_pkg.sh is a script that you can use to download all the PKG_LIST. If you use this scriptlet all the package will be stored in the slackware[64]-version_pkg sub-folder.
- make_slack_vserver.sh is the shell script that you have to adjust. It installs the guest.
- rc is the startup script for the virtual server. It will be automatically copied in /etc/rc.d* /init.d/rc
- linux-vserver_slackware-14.1.patch is the patch which modify rc.0, rc.6 rc.M, rc.S, rc.inet2 and rc.syslog. It must be applyed after the creation of the vserver process. In the patch I switched off all the mounts and executable that are related to the hardware.
Download the packages
First of all select a minimal set of packages to be installed on the virtual server. This list of 110 packages is based on the Minimal System reported at http://slackwiki.org/Minimal_System without all hardware, kernel and multimedia related packages. The install leads to a guest of about 448M of size. This set fits with the installation of a complete virtual web server including apache, apache-tomcat, php, mysql, postgresql, qmail and related, ftp, named.
I assume that the packages to be installed are stored in the slackware{$ARCH}-{$VERSION}_pkg folder. If not, adjust its location editing the make_slack_vserver.sh script.
You can download my minimal set of packages running the shell script download_slack_pkg.sh. It can create a folder like slackware{$ARCH}-{$VERSION}_pkg for you, where $ARCH has to be "64" if you want to download 64b packages or empty otherwise, while $VERSION is the Slackware version, so it's something like "14.1".
#!/bin/bash # # v. 2013.12.29 # Now the script parses comments in the package list (thanks to Mark Colclough) VERSION="14.1" # Slackware version ARCH="64" # you can put 64 for 64b cpu just to separate 64/32 download folders # Put here your favourite Slackware repository SRC="ftp://ftp.slackware.no/slackware/slackware${ARCH}-${VERSION}/" # put here your pkg list LIST="${PWD}/PKG_LIST" # the directory where you unpacked slack_vserver.tar.gz # $PWD should work, otherwise put /path/to/slack_vserver SETUP=$PWD # the directory where you want to download the slackware packages PACKAGES="${SETUP}/slackware${ARCH}-${VERSION}_pkg" # create the folder where the pkg will be downloaded if [ ! -d "$PACKAGES" ]; then mkdir -p $PACKAGES fi # create the "patches" sub-folder if [ ! -d "${PACKAGES}/patches" ]; then mkdir -p "${PACKAGES}/patches" fi # download cd $PACKAGES if [ -f $LIST ]; then while read LINE do [ "$LINE" ] || continue [ "${LINE#\#}" = "$LINE" ] || continue wget "${SRC}slackware${ARCH}/${LINE}*.t?z" done < $LIST else echo "Can't find $LIST file." exit 1 fi # download packages from the patches folder cd ${PACKAGES}/patches if [ -f ${LIST} ]; then while read LINE do IFS='/' read -ra PKG <<< "$LINE" [ "${PKG#\#}" = "${PKG}" ] || continue PKG_LEN=${#PKG[@]} if [ $PKG_LEN == 2 ]; then wget "${SRC}patches/packages/${PKG[1]}*.t?z" fi done < $LIST else echo "Can't find $LIST file." exit 1 fi
NB: this script tries also to overwrite the packages downloaded from the /slackware folder with the updates belonging to the /patches dir.
Make the guest
Now let's create the guest and install the packages. As you know you must choose at least a "name", a "context" and an ip. In addition you have to modify most of the rc.* startup scripts removing all the hardware related daemons, and finally replace the /dev dir.
This is done adjusting and running the script make_slack_vserver.sh:
#!/bin/bash # # v. 2013.12.29 # Author: Roberto Puzzanghera # Thanks to Mark Colclough for corrections # # This script installs a Slackware guest into a linux-vserver host (http://linux-vserver.org) # # Comments are welcome :-) # More info here: http://notes.sagredo.eu/node/7 # adjust this to where your things live NAME=test HOSTNAME=$NAME.YOURDOMAIN.XY IP=10.0.0.182 INTERFACE=eth0:$IP/24 CONTEXT=5182 VERSION=14.1 # Slackware version ARCH="64" # you can put 64 for 64b cpu just to separate 64/32 download folders # where is the vservers dir? default is /vservers VDIR="/usr/local/vservers" # the directory where you unpacked slack_vserver.tar.gz # $PWD should work, otherwise put /path/to/slack_vserver SETUP=$PWD # the directory where you downloaded the slackware packages PACKAGES="${SETUP}/slackware${ARCH}-${VERSION}_pkg" # the path to rc script file (leave as is) RC="${SETUP}/rc" ################### end configuration # sanity check if [ ! -d "$VDIR" ]; then echo echo "Can't find VDIR dir: $VDIR" echo "Exiting" echo exit 1 fi if [ ! -d "$SETUP" ]; then echo echo "Can't find SETUP dir: $SETUP" echo "Exiting" echo exit 1 fi if [ ! -d "$PACKAGES" ]; then echo echo "Can't find PACKAGES dir: $PACKAGES" echo "Exiting" echo exit 1 fi if [ ! -f "$RC" ]; then echo echo "Can't find RC path: $RC" echo "Exiting" echo exit 1 fi # if everything is ok start the install echo read -p "press any key to make skeleton..." vserver ${NAME} build -m skeleton \ --hostname ${HOSTNAME} \ --interface ${INTERFACE} \ --context $CONTEXT \ --flags lock,virt_mem,virt_uptime,virt_cpu,virt_load,sched_hard,hide_netif \ --initstyle sysv echo "...done" echo read -p "press any key to move the /dev folder to a temp dir the /dev folder..." mv $VDIR/$NAME/dev $VDIR/$NAME/dev2 echo read -p "press any key to install packages..." cd $PACKAGES installpkg --root $VDIR/$NAME *.t?z; ROOT=$VDIR/$NAME upgradepkg patches/*.t?z; echo "...done" echo echo read -p "press any key to copy the rc script to /etc/rc.d/init.d..." echo echo "copying rc to /etc/rc.d/init.d/rc" cp -p $RC $VDIR/$NAME/etc/rc.d/init.d/ echo "...done" echo echo "removing x flag to rc.inet1 rc.loop and rc.sshd" chmod -x $VDIR/$NAME/etc/rc.d/rc.inet1 $VDIR/$NAME/etc/rc.d/rc.loop $VDIR/$NAME/etc/rc.d/rc.sshd echo "...done" echo echo "trying to adjust HOSTNAME, hosts, resolv.conf, profile. Check later..." cp /etc/resolv.conf $VDIR/$NAME/etc/ cp /etc/localtime $VDIR/$NAME/etc/ rm $VDIR/$NAME/etc/profile cp /etc/profile $VDIR/$NAME/etc/ echo $HOSTNAME > $VDIR/$NAME/etc/HOSTNAME echo "127.0.0.1 localhost" > $VDIR/$NAME/etc/hosts echo "$IP $HOSTNAME $NAME" >> $VDIR/$NAME/etc/hosts touch $VDIR/$NAME/etc/mtab touch $VDIR/$NAME/etc/fstab echo "...done" echo read -p "press any key to restore /dev2 to /dev" rm -r $VDIR/$NAME/dev mv $VDIR/$NAME/dev2 $VDIR/$NAME/dev echo echo -n "Do you want that I apply the patch for you y/n? [y] " read VAR_PATCH if [ "$VAR_PATCH" = 'y' ] || [ "$VAR_PATCH" = '' ]; then if [ ! -f "${SETUP}/linux-vserver_slackware-${VERSION}.patch" ]; then echo echo "Can't find any PATCH here: ${SETUP}/linux-vserver_slackware-${VERSION}.patch" echo "Exiting" echo exit 1 fi cd ${VDIR}/${NAME}/etc/rc.d patch -p1 < ${SETUP}/linux-vserver_slackware-${VERSION}.patch echo "patch applyed." echo echo "You can start and enter the virtual server typing: " echo echo "vserver $NAME start" echo "vserver $NAME enter" else echo echo "DON'T FORGET to patch /etc/rc.d as follows: " echo echo "cd $VDIR/$NAME/etc/rc.d" echo "patch -p1 < $SETUP/linux-vserver_slackware-$VERSION.patch" fi echo echo "More info on http://notes.sagredo.eu/node/7" echo
Apply the patch
The script itsself can install the patch for you. Anyway this is how to apply the patch by yourself:
cd /vservers/vserver_name/etc/rc.d patch -p1 < /path/to/slack_vserver/slackware-14.0.patch
Inside the tarball you can find the old patch for Slackware 13.1 and 13.37, if you like.
Post installation tasks
Put this inside your rc.local:
/usr/local/etc/rc.d/init.d/vprocunhide start
Start the new server
vserver <vserver_name> start vserver <vserver_name> enter
Patch applayed
Patch for Slackware 14.1 guest on a Linux-Vserver host ======================================================== by Roberto Puzzanghera - http://notes.sagredo.eu version: 2013.12.29 ======================================================== diff -ruN rc.d-original/rc.0 rc.d/rc.0 --- rc.d-original/rc.0 2013-09-23 01:43:20.000000000 +0200 +++ rc.d/rc.0 2013-12-29 12:13:33.000000000 +0100 @@ -37,22 +37,6 @@ ;; esac -# Save the system time to the hardware clock using hwclock --systohc. -if [ -x /sbin/hwclock ]; then - # Check for a broken motherboard RTC clock (where ioports for rtc are - # unknown) to prevent hwclock causing a hang: - if ! grep -q -w rtc /proc/ioports ; then - CLOCK_OPT="--directisa" - fi - if grep -q "^UTC" /etc/hardwareclock 2> /dev/null ; then - echo "Saving system time to the hardware clock (UTC)." - /sbin/hwclock $CLOCK_OPT --utc --systohc - else - echo "Saving system time to the hardware clock (localtime)." - /sbin/hwclock $CLOCK_OPT --localtime --systohc - fi -fi - # Run any local shutdown scripts: if [ -x /etc/rc.d/rc.local_shutdown ]; then /etc/rc.d/rc.local_shutdown stop @@ -98,24 +82,6 @@ sh /etc/rc.d/rc.messagebus stop fi -# Kill any processes (typically gam) that would otherwise prevent -# unmounting NFS volumes: -unset FUSER_DELAY -for dir in $(/bin/mount | grep 'type nfs' | cut -d ' ' -f 3 ) ; do - echo "Killing processes holding NFS mount $dir open..." - # Background this to prevent fuser from also blocking shutdown: - /usr/bin/fuser -k -m $dir & - FUSER_DELAY=5 -done -# If fuser was run, let it have some delay: -if [ ! -z "$FUSER_DELAY" ]; then - sleep $FUSER_DELAY -fi - -# Unmount any NFS, SMB, or CIFS filesystems: -echo "Unmounting remote filesystems." -/bin/umount -v -a -l -f -r -t nfs,smbfs,cifs - # Try to shut down pppd: PS="$(ps ax)" if echo "$PS" | /bin/grep -q -w pppd ; then @@ -131,45 +97,11 @@ fi fi -# Bring down the networking system, but first make sure that this -# isn't a diskless client with the / partition mounted via NFS: -if ! /bin/mount | /bin/grep -q 'on / type nfs' ; then - if [ -x /etc/rc.d/rc.inet1 ]; then - . /etc/rc.d/rc.inet1 stop - fi -fi - -# In case dhcpcd might have been manually started on the command line, -# look for the .pid file, and shut dhcpcd down if it's found: -if /bin/ls /etc/dhcpc/*.pid 1> /dev/null 2> /dev/null ; then - /sbin/dhcpcd -k 1> /dev/null 2> /dev/null - # A little time for /etc/resolv.conf and/or other files to - # restore themselves. - sleep 2 -fi - -# Shut down PCMCIA devices: -if [ -x /etc/rc.d/rc.pcmcia ]; then - . /etc/rc.d/rc.pcmcia stop - # The cards might need a little extra time here to deactivate: - /bin/sleep 5 -fi - # Turn off process accounting: if [ -x /sbin/accton -a -r /var/log/pacct ]; then /sbin/accton off fi -# Terminate acpid before syslog: -if [ -x /etc/rc.d/rc.acpid -a -r /var/run/acpid.pid ]; then # quit - . /etc/rc.d/rc.acpid stop -fi - -# Stop udev: -if [ -x /etc/rc.d/rc.udev ]; then - sh /etc/rc.d/rc.udev force-stop -fi - # Kill all remaining processes. if [ ! "$1" = "fast" ]; then echo "Sending all processes the SIGTERM signal." @@ -187,16 +119,6 @@ fi fi -# Carry a random seed between reboots. -echo "Saving random seed from /dev/urandom in /etc/random-seed." -# Use the pool size from /proc, or 4096 bits: -if [ -r /proc/sys/kernel/random/poolsize ]; then - /bin/dd if=/dev/urandom of=/etc/random-seed count=1 bs=$(expr $(cat /proc/sys/kernel/random/poolsize) / 8) 2> /dev/null -else - /bin/dd if=/dev/urandom of=/etc/random-seed count=1 bs=512 2> /dev/null -fi -/bin/chmod 600 /etc/random-seed - # Before unmounting file systems write a reboot or halt record to wtmp. $command -w @@ -205,80 +127,5 @@ rm -f /var/lock/subsys/* fi -# Turn off swap: -echo "Turning off swap." -/sbin/swapoff -a -/bin/sync - -echo "Unmounting local file systems." -/bin/umount -v -a -t no,proc,sysfs - -echo "Remounting root filesystem read-only." -/bin/mount -v -n -o remount,ro / - # This never hurts: /bin/sync - -# Close any volumes opened by cryptsetup: -if [ -f /etc/crypttab -a -x /sbin/cryptsetup ]; then - cat /etc/crypttab | grep -v "^#" | grep -v "^$" | while read line; do - # NOTE: we only support LUKS formatted volumes (except for swap)! - LUKS=$(echo $line | tr '\t' ' ' | tr -s ' ' | cut -f1 -d' ') - DEV=$(echo $line | tr '\t' ' ' | tr -s ' ' | cut -f2 -d' ') - OPTS=$(echo $line | tr '\t' ' ' | tr -s ' ' | cut -f4 -d' ') - if /sbin/cryptsetup isLuks $DEV 2>/dev/null ; then - echo "Locking LUKS crypt volume '${LUKS}':" - /sbin/cryptsetup luksClose ${LUKS} - elif echo $OPTS | grep -wq swap ; then - # If any of the volumes was used as encrypted swap, - # then run mkswap on the underlying device - - # in case other Linux installations on this computer should use it: - echo "Erasing encrypted swap '${LUKS}' and restoring normal swap on ${DEV}:" - /sbin/cryptsetup remove ${LUKS} - mkswap $DEV - fi - done -fi - -# Deactivate LVM volume groups: -if [ -r /etc/lvmtab -o -d /etc/lvm/backup ]; then - echo "Deactivating LVM volume groups:" - /sbin/vgchange -an --ignorelockingfailure -fi - -# This never hurts again (especially since root-on-LVM always fails -# to deactivate the / logical volume... but at least it was -# remounted as read-only first) -/bin/sync - -# sleep 3 fixes problems with some hard drives that don't -# otherwise finish syncing before reboot or poweroff -/bin/sleep 3 - -# This is to ensure all processes have completed on SMP machines: -wait - -if [ -x /sbin/genpowerd ]; then - # See if this is a powerfail situation: - if /bin/egrep -q "FAIL|SCRAM" /etc/upsstatus 2> /dev/null ; then - # Signal UPS to shut off the inverter: - /sbin/genpowerd -k - if [ ! $? = 0 ]; then - echo - echo "There was an error signaling the UPS." - echo "Perhaps you need to edit /etc/genpowerd.conf to configure" - echo "the serial line and UPS type." - # Wasting 15 seconds of precious power: - /bin/sleep 15 - fi - fi -fi - -# Now halt (poweroff with APM or ACPI enabled kernels) or reboot. -if [ "$command" = "reboot" ]; then - echo "Rebooting." - /sbin/reboot -else - /sbin/poweroff -fi - diff -ruN rc.d-original/rc.0.rej rc.d/rc.0.rej --- rc.d-original/rc.0.rej 1970-01-01 01:00:00.000000000 +0100 +++ rc.d/rc.0.rej 2013-12-29 12:13:33.000000000 +0100 @@ -0,0 +1,194 @@ +--- rc.0 2013-09-23 01:43:20.000000000 +0200 ++++ rc.0 2013-11-08 22:15:10.000000000 +0100 +@@ -37,22 +37,6 @@ + ;; + esac + +-# Save the system time to the hardware clock using hwclock --systohc. +-if [ -x /sbin/hwclock ]; then +- # Check for a broken motherboard RTC clock (where ioports for rtc are +- # unknown) to prevent hwclock causing a hang: +- if ! grep -q -w rtc /proc/ioports ; then +- CLOCK_OPT="--directisa" +- fi +- if grep -q "^UTC" /etc/hardwareclock 2> /dev/null ; then +- echo "Saving system time to the hardware clock (UTC)." +- /sbin/hwclock $CLOCK_OPT --utc --systohc +- else +- echo "Saving system time to the hardware clock (localtime)." +- /sbin/hwclock $CLOCK_OPT --localtime --systohc +- fi +-fi +- + # Run any local shutdown scripts: + if [ -x /etc/rc.d/rc.local_shutdown ]; then + /etc/rc.d/rc.local_shutdown stop +@@ -98,24 +82,6 @@ + sh /etc/rc.d/rc.messagebus stop + fi + +-# Kill any processes (typically gam) that would otherwise prevent +-# unmounting NFS volumes: +-unset FUSER_DELAY +-for dir in $(/bin/mount | grep 'type nfs' | cut -d ' ' -f 3 ) ; do +- echo "Killing processes holding NFS mount $dir open..." +- # Background this to prevent fuser from also blocking shutdown: +- /usr/bin/fuser -k -m $dir & +- FUSER_DELAY=5 +-done +-# If fuser was run, let it have some delay: +-if [ ! -z "$FUSER_DELAY" ]; then +- sleep $FUSER_DELAY +-fi +- +-# Unmount any NFS, SMB, or CIFS filesystems: +-echo "Unmounting remote filesystems." +-/bin/umount -v -a -l -f -r -t nfs,smbfs,cifs +- + # Try to shut down pppd: + PS="$(ps ax)" + if echo "$PS" | /bin/grep -q -w pppd ; then +@@ -131,45 +97,11 @@ + fi + fi + +-# Bring down the networking system, but first make sure that this +-# isn't a diskless client with the / partition mounted via NFS: +-if ! /bin/mount | /bin/grep -q 'on / type nfs' ; then +- if [ -x /etc/rc.d/rc.inet1 ]; then +- . /etc/rc.d/rc.inet1 stop +- fi +-fi +- +-# In case dhcpcd might have been manually started on the command line, +-# look for the .pid file, and shut dhcpcd down if it's found: +-if /bin/ls /etc/dhcpc/*.pid 1> /dev/null 2> /dev/null ; then +- /sbin/dhcpcd -k 1> /dev/null 2> /dev/null +- # A little time for /etc/resolv.conf and/or other files to +- # restore themselves. +- sleep 2 +-fi +- +-# Shut down PCMCIA devices: +-if [ -x /etc/rc.d/rc.pcmcia ]; then +- . /etc/rc.d/rc.pcmcia stop +- # The cards might need a little extra time here to deactivate: +- /bin/sleep 5 +-fi +- + # Turn off process accounting: + if [ -x /sbin/accton -a -r /var/log/pacct ]; then + /sbin/accton off + fi + +-# Terminate acpid before syslog: +-if [ -x /etc/rc.d/rc.acpid -a -r /var/run/acpid.pid ]; then # quit +- . /etc/rc.d/rc.acpid stop +-fi +- +-# Stop udev: +-if [ -x /etc/rc.d/rc.udev ]; then +- sh /etc/rc.d/rc.udev force-stop +-fi +- + # Kill all remaining processes. + if [ ! "$1" = "fast" ]; then + echo "Sending all processes the SIGTERM signal." +@@ -187,16 +119,6 @@ + fi + fi + +-# Carry a random seed between reboots. +-echo "Saving random seed from /dev/urandom in /etc/random-seed." +-# Use the pool size from /proc, or 4096 bits: +-if [ -r /proc/sys/kernel/random/poolsize ]; then +- /bin/dd if=/dev/urandom of=/etc/random-seed count=1 bs=$(expr $(cat /proc/sys/kernel/random/poolsize) / 8) 2> /dev/null +-else +- /bin/dd if=/dev/urandom of=/etc/random-seed count=1 bs=512 2> /dev/null +-fi +-/bin/chmod 600 /etc/random-seed +- + # Before unmounting file systems write a reboot or halt record to wtmp. + $command -w + +@@ -205,80 +127,5 @@ + rm -f /var/lock/subsys/* + fi + +-# Turn off swap: +-echo "Turning off swap." +-/sbin/swapoff -a +-/bin/sync +- +-echo "Unmounting local file systems." +-/bin/umount -v -a -t no,proc,sysfs +- +-echo "Remounting root filesystem read-only." +-/bin/mount -v -n -o remount,ro / +- + # This never hurts: + /bin/sync +- +-# Close any volumes opened by cryptsetup: +-if [ -f /etc/crypttab -a -x /sbin/cryptsetup ]; then +- cat /etc/crypttab | grep -v "^#" | grep -v "^$" | while read line; do +- # NOTE: we only support LUKS formatted volumes (except for swap)! +- LUKS=$(echo $line | tr '\t' ' ' | tr -s ' ' | cut -f1 -d' ') +- DEV=$(echo $line | tr '\t' ' ' | tr -s ' ' | cut -f2 -d' ') +- OPTS=$(echo $line | tr '\t' ' ' | tr -s ' ' | cut -f4 -d' ') +- if /sbin/cryptsetup isLuks $DEV 2>/dev/null ; then +- echo "Locking LUKS crypt volume '${LUKS}':" +- /sbin/cryptsetup luksClose ${LUKS} +- elif echo $OPTS | grep -wq swap ; then +- # If any of the volumes was used as encrypted swap, +- # then run mkswap on the underlying device - +- # in case other Linux installations on this computer should use it: +- echo "Erasing encrypted swap '${LUKS}' and restoring normal swap on ${DEV}:" +- /sbin/cryptsetup remove ${LUKS} +- mkswap $DEV +- fi +- done +-fi +- +-# Deactivate LVM volume groups: +-if [ -r /etc/lvmtab -o -d /etc/lvm/backup ]; then +- echo "Deactivating LVM volume groups:" +- /sbin/vgchange -an --ignorelockingfailure +-fi +- +-# This never hurts again (especially since root-on-LVM always fails +-# to deactivate the / logical volume... but at least it was +-# remounted as read-only first) +-/bin/sync +- +-# sleep 3 fixes problems with some hard drives that don't +-# otherwise finish syncing before reboot or poweroff +-/bin/sleep 3 +- +-# This is to ensure all processes have completed on SMP machines: +-wait +- +-if [ -x /sbin/genpowerd ]; then +- # See if this is a powerfail situation: +- if /bin/egrep -q "FAIL|SCRAM" /etc/upsstatus 2> /dev/null ; then +- # Signal UPS to shut off the inverter: +- /sbin/genpowerd -k +- if [ ! $? = 0 ]; then +- echo +- echo "There was an error signaling the UPS." +- echo "Perhaps you need to edit /etc/genpowerd.conf to configure" +- echo "the serial line and UPS type." +- # Wasting 15 seconds of precious power: +- /bin/sleep 15 +- fi +- fi +-fi +- +-# Now halt (poweroff with APM or ACPI enabled kernels) or reboot. +-if [ "$command" = "reboot" ]; then +- echo "Rebooting." +- /sbin/reboot +-else +- /sbin/poweroff +-fi +- diff -ruN rc.d-original/rc.6 rc.d/rc.6 --- rc.d-original/rc.6 2013-09-23 01:43:20.000000000 +0200 +++ rc.d/rc.6 2013-12-29 12:13:33.000000000 +0100 @@ -37,22 +37,6 @@ ;; esac -# Save the system time to the hardware clock using hwclock --systohc. -if [ -x /sbin/hwclock ]; then - # Check for a broken motherboard RTC clock (where ioports for rtc are - # unknown) to prevent hwclock causing a hang: - if ! grep -q -w rtc /proc/ioports ; then - CLOCK_OPT="--directisa" - fi - if grep -q "^UTC" /etc/hardwareclock 2> /dev/null ; then - echo "Saving system time to the hardware clock (UTC)." - /sbin/hwclock $CLOCK_OPT --utc --systohc - else - echo "Saving system time to the hardware clock (localtime)." - /sbin/hwclock $CLOCK_OPT --localtime --systohc - fi -fi - # Run any local shutdown scripts: if [ -x /etc/rc.d/rc.local_shutdown ]; then /etc/rc.d/rc.local_shutdown stop @@ -98,24 +82,6 @@ sh /etc/rc.d/rc.messagebus stop fi -# Kill any processes (typically gam) that would otherwise prevent -# unmounting NFS volumes: -unset FUSER_DELAY -for dir in $(/bin/mount | grep 'type nfs' | cut -d ' ' -f 3 ) ; do - echo "Killing processes holding NFS mount $dir open..." - # Background this to prevent fuser from also blocking shutdown: - /usr/bin/fuser -k -m $dir & - FUSER_DELAY=5 -done -# If fuser was run, let it have some delay: -if [ ! -z "$FUSER_DELAY" ]; then - sleep $FUSER_DELAY -fi - -# Unmount any NFS, SMB, or CIFS filesystems: -echo "Unmounting remote filesystems." -/bin/umount -v -a -l -f -r -t nfs,smbfs,cifs - # Try to shut down pppd: PS="$(ps ax)" if echo "$PS" | /bin/grep -q -w pppd ; then @@ -131,45 +97,11 @@ fi fi -# Bring down the networking system, but first make sure that this -# isn't a diskless client with the / partition mounted via NFS: -if ! /bin/mount | /bin/grep -q 'on / type nfs' ; then - if [ -x /etc/rc.d/rc.inet1 ]; then - . /etc/rc.d/rc.inet1 stop - fi -fi - -# In case dhcpcd might have been manually started on the command line, -# look for the .pid file, and shut dhcpcd down if it's found: -if /bin/ls /etc/dhcpc/*.pid 1> /dev/null 2> /dev/null ; then - /sbin/dhcpcd -k 1> /dev/null 2> /dev/null - # A little time for /etc/resolv.conf and/or other files to - # restore themselves. - sleep 2 -fi - -# Shut down PCMCIA devices: -if [ -x /etc/rc.d/rc.pcmcia ]; then - . /etc/rc.d/rc.pcmcia stop - # The cards might need a little extra time here to deactivate: - /bin/sleep 5 -fi - # Turn off process accounting: if [ -x /sbin/accton -a -r /var/log/pacct ]; then /sbin/accton off fi -# Terminate acpid before syslog: -if [ -x /etc/rc.d/rc.acpid -a -r /var/run/acpid.pid ]; then # quit - . /etc/rc.d/rc.acpid stop -fi - -# Stop udev: -if [ -x /etc/rc.d/rc.udev ]; then - sh /etc/rc.d/rc.udev force-stop -fi - # Kill all remaining processes. if [ ! "$1" = "fast" ]; then echo "Sending all processes the SIGTERM signal." @@ -187,16 +119,6 @@ fi fi -# Carry a random seed between reboots. -echo "Saving random seed from /dev/urandom in /etc/random-seed." -# Use the pool size from /proc, or 4096 bits: -if [ -r /proc/sys/kernel/random/poolsize ]; then - /bin/dd if=/dev/urandom of=/etc/random-seed count=1 bs=$(expr $(cat /proc/sys/kernel/random/poolsize) / 8) 2> /dev/null -else - /bin/dd if=/dev/urandom of=/etc/random-seed count=1 bs=512 2> /dev/null -fi -/bin/chmod 600 /etc/random-seed - # Before unmounting file systems write a reboot or halt record to wtmp. $command -w @@ -205,80 +127,5 @@ rm -f /var/lock/subsys/* fi -# Turn off swap: -echo "Turning off swap." -/sbin/swapoff -a -/bin/sync - -echo "Unmounting local file systems." -/bin/umount -v -a -t no,proc,sysfs - -echo "Remounting root filesystem read-only." -/bin/mount -v -n -o remount,ro / - # This never hurts: /bin/sync - -# Close any volumes opened by cryptsetup: -if [ -f /etc/crypttab -a -x /sbin/cryptsetup ]; then - cat /etc/crypttab | grep -v "^#" | grep -v "^$" | while read line; do - # NOTE: we only support LUKS formatted volumes (except for swap)! - LUKS=$(echo $line | tr '\t' ' ' | tr -s ' ' | cut -f1 -d' ') - DEV=$(echo $line | tr '\t' ' ' | tr -s ' ' | cut -f2 -d' ') - OPTS=$(echo $line | tr '\t' ' ' | tr -s ' ' | cut -f4 -d' ') - if /sbin/cryptsetup isLuks $DEV 2>/dev/null ; then - echo "Locking LUKS crypt volume '${LUKS}':" - /sbin/cryptsetup luksClose ${LUKS} - elif echo $OPTS | grep -wq swap ; then - # If any of the volumes was used as encrypted swap, - # then run mkswap on the underlying device - - # in case other Linux installations on this computer should use it: - echo "Erasing encrypted swap '${LUKS}' and restoring normal swap on ${DEV}:" - /sbin/cryptsetup remove ${LUKS} - mkswap $DEV - fi - done -fi - -# Deactivate LVM volume groups: -if [ -r /etc/lvmtab -o -d /etc/lvm/backup ]; then - echo "Deactivating LVM volume groups:" - /sbin/vgchange -an --ignorelockingfailure -fi - -# This never hurts again (especially since root-on-LVM always fails -# to deactivate the / logical volume... but at least it was -# remounted as read-only first) -/bin/sync - -# sleep 3 fixes problems with some hard drives that don't -# otherwise finish syncing before reboot or poweroff -/bin/sleep 3 - -# This is to ensure all processes have completed on SMP machines: -wait - -if [ -x /sbin/genpowerd ]; then - # See if this is a powerfail situation: - if /bin/egrep -q "FAIL|SCRAM" /etc/upsstatus 2> /dev/null ; then - # Signal UPS to shut off the inverter: - /sbin/genpowerd -k - if [ ! $? = 0 ]; then - echo - echo "There was an error signaling the UPS." - echo "Perhaps you need to edit /etc/genpowerd.conf to configure" - echo "the serial line and UPS type." - # Wasting 15 seconds of precious power: - /bin/sleep 15 - fi - fi -fi - -# Now halt (poweroff with APM or ACPI enabled kernels) or reboot. -if [ "$command" = "reboot" ]; then - echo "Rebooting." - /sbin/reboot -else - /sbin/poweroff -fi - diff -ruN rc.d-original/rc.inet2 rc.d/rc.inet2 --- rc.d-original/rc.inet2 2012-08-15 00:53:35.000000000 +0200 +++ rc.d/rc.inet2 2013-12-29 12:13:33.000000000 +0100 @@ -16,26 +16,6 @@ # At this point, we are ready to talk to The World... -# Mount remote (NFS) filesystems: -if cat /etc/fstab | grep -v '^#' | grep -w nfs 1> /dev/null 2> /dev/null ; then - # Start rpc.portmap, /sbin/rpc.lockd, and /sbin/rpc.statd if we find NFS - # volumes defined in /etc/fstab since these will need to be running in order - # to mount them. If they are not running, attempting to mount an NFS - # partition will cause mount to hang, or at least result in unreliable - # operation. Keep this in mind if you plan to mount unlisted NFS - # partitions... - # If you have uncommented NFS partitions in your /etc/fstab, rc.rpc is run - # whether it is set as executable or not. If you don't want to run it, - # comment the NFS partitions out in /etc/fstab or erase/rename rc.rpc. - if [ -r /etc/rc.d/rc.rpc ]; then - sh /etc/rc.d/rc.rpc start - fi - echo "Mounting remote (NFS) file systems: /sbin/mount -a -t nfs" - /sbin/mount -a -t nfs # This may be our /usr runtime! - # Show the mounted volumes: - /sbin/mount -v -t nfs -fi - # If /etc/rc.d/rc.rpc is executable, run it to load rpc.portmap, rpc.lockd, # and rpc.statd. This might be needed to mount NFS partitions that are not # listed in /etc/fstab. Starting this twice won't hurt as the script will @@ -44,23 +24,6 @@ sh /etc/rc.d/rc.rpc start fi -# Mount remote CIFS filesystems. Note that where possible, using CIFS is -# preferred over SMBFS. SMBFS is no longer actively maintained. -if cat /etc/fstab | grep -v '^#' | grep -w cifs 1> /dev/null 2> /dev/null ; then - echo "Mounting remote CIFS file systems: /sbin/mount -a -t cifs" - /sbin/mount -a -t cifs - # Show the mounted volumes: - /sbin/mount -v -t cifs -fi - -# Mount remote SMB filesystems: -if cat /etc/fstab | grep -v '^#' | grep -w smbfs 1> /dev/null 2> /dev/null ; then - echo "Mounting remote SMBFS file systems: /sbin/mount -a -t smbfs" - /sbin/mount -a -t smbfs - # Show the mounted volumes: - /sbin/mount -v -t smbfs -fi - # Start the system logger if it is not already running (maybe because /usr # is on a network partition). if [ -x /etc/rc.d/rc.syslog -a -d /var/log -a ! -r /var/run/syslogd.pid ]; then diff -ruN rc.d-original/rc.M rc.d/rc.M --- rc.d-original/rc.M 2013-10-28 06:07:17.000000000 +0100 +++ rc.d/rc.M 2013-12-29 12:14:08.000000000 +0100 @@ -20,10 +20,6 @@ /sbin/ldconfig & fi -# Screen blanks after 15 minutes idle time, and powers down in one hour -# if the kernel supports APM or ACPI power management: -/bin/setterm -blank 15 -powersave powerdown -powerdown 60 - # Set the hostname. if [ -r /etc/HOSTNAME ]; then /bin/hostname $(cat /etc/HOSTNAME | cut -f1 -d .) diff -ruN rc.d-original/rc.S rc.d/rc.S --- rc.d-original/rc.S 2013-10-28 06:06:39.000000000 +0100 +++ rc.d/rc.S 2013-12-29 12:13:33.000000000 +0100 @@ -48,31 +48,6 @@ fi fi -# Mount Control Groups filesystem interface: -if grep -wq cgroup /proc/filesystems ; then - if [ -d /sys/fs/cgroup ]; then - # See linux-*/Documentation/cgroups/cgroups.txt (section 1.6) - # Check if we have some tools to autodetect the available cgroup controllers - if [ -x /usr/bin/lssubsys -a -x /usr/bin/tr -a -x /usr/bin/sed ]; then - # Mount a tmpfs as the cgroup filesystem root - mount -t tmpfs -o mode=0755 cgroup_root /sys/fs/cgroup - # Autodetect available controllers and mount them in subfolders - controllers="$(lssubsys -a 2>/dev/null | tr '\n' ' ' | sed s/.$//)" - for i in $controllers; do - mkdir /sys/fs/cgroup/$i - mount -t cgroup -o $i $i /sys/fs/cgroup/$i - done - unset i controllers - else - # We can't use autodetection so fall back mounting them all together - mount -t cgroup cgroup /sys/fs/cgroup - fi - else - mkdir -p /dev/cgroup - mount -t cgroup cgroup /dev/cgroup - fi -fi - # Initialize the Logical Volume Manager. # This won't start unless we find /etc/lvmtab (LVM1) or # /etc/lvm/backup/ (LVM2). This is created by /sbin/vgscan, so to diff -ruN rc.d-original/rc.syslog rc.d/rc.syslog --- rc.d-original/rc.syslog 2013-06-22 22:49:03.000000000 +0200 +++ rc.d/rc.syslog 2013-12-29 12:13:33.000000000 +0100 @@ -5,7 +5,7 @@ syslogd_start() { if [ -x /usr/sbin/syslogd -a -x /usr/sbin/klogd ]; then - echo -n "Starting sysklogd daemons: " +# echo -n "Starting sysklogd daemons: " echo -n "/usr/sbin/syslogd " /usr/sbin/syslogd # prevent syslogd/klogd race condition on SMP kernels @@ -16,10 +16,10 @@ else sleep 1 fi - echo "/usr/sbin/klogd -c 3 -x" +# echo "/usr/sbin/klogd -c 3 -x" # '-c 3' = display level 'error' or higher messages on console # '-x' = turn off broken EIP translation - /usr/sbin/klogd -c 3 -x +# /usr/sbin/klogd -c 3 -x fi }
Contact
Comments and criticism can be addressed to roberto dot puzzanghera at sagredo dot eu (http://sagredo.eu)