diff options
Diffstat (limited to 'source/ap/lxc/scripts')
-rw-r--r-- | source/ap/lxc/scripts/README | 11 | ||||
-rw-r--r-- | source/ap/lxc/scripts/rc.6.lxc | 316 | ||||
-rw-r--r-- | source/ap/lxc/scripts/rc.6.orig | 299 | ||||
-rw-r--r-- | source/ap/lxc/scripts/rc.M.lxc | 397 | ||||
-rw-r--r-- | source/ap/lxc/scripts/rc.M.orig | 386 | ||||
-rw-r--r-- | source/ap/lxc/scripts/rc.S.lxc | 474 | ||||
-rw-r--r-- | source/ap/lxc/scripts/rc.S.orig | 445 | ||||
-rw-r--r-- | source/ap/lxc/scripts/rc.inet1.lxc | 331 | ||||
-rw-r--r-- | source/ap/lxc/scripts/rc.inet1.orig | 320 |
9 files changed, 2979 insertions, 0 deletions
diff --git a/source/ap/lxc/scripts/README b/source/ap/lxc/scripts/README new file mode 100644 index 00000000..f7d1f5c7 --- /dev/null +++ b/source/ap/lxc/scripts/README @@ -0,0 +1,11 @@ +These are modified versions of some sysvinit-scripts and network-scripts for +Slackware for use in a container (although they should also work for a regular +non-container system as well). + +Versions ending in .lxc are the scripts to be used in a container. +Versions ending in .orig are the scripts from the sysvinit-scripts and +network-scripts packages that the .lxc scripts are based on. + +Any changes made to the original scripts in sysvinit-scripts or network-scripts +*may* need to be ported to these versions. + diff --git a/source/ap/lxc/scripts/rc.6.lxc b/source/ap/lxc/scripts/rc.6.lxc new file mode 100644 index 00000000..5dde949a --- /dev/null +++ b/source/ap/lxc/scripts/rc.6.lxc @@ -0,0 +1,316 @@ +#! /bin/sh +# +# rc.6 This file is executed by init when it goes into runlevel +# 0 (halt) or runlevel 6 (reboot). It kills all processes, +# unmounts file systems and then either halts or reboots. +# +# Version: @(#)/etc/rc.d/rc.6 2.47 Sat Jan 13 13:37:26 PST 2001 +# +# Author: Miquel van Smoorenburg <miquels@drinkel.nl.mugnet.org> +# Modified by: Patrick J. Volkerding, <volkerdi@slackware.com> +# + +# Set the path. +PATH=/sbin:/etc:/bin:/usr/bin + +# Set $container variable since this is a modified version of rc.6 with +# changes for running in an lxc container. A check to see if this variable +# is set will be used to skip parts of the script that we don't want to run +# in a container. Thanks to Matteo Bernardini <ponce@slackbuilds.org> and +# Chris Willing for the initial work making this script lxc compatible. +container="lxc" + +# If there are SystemV init scripts for this runlevel, run them. +if [ -x /etc/rc.d/rc.sysvinit ]; then + . /etc/rc.d/rc.sysvinit +fi + +# Set linefeed mode to avoid staircase effect. +/bin/stty onlcr + +echo "Running shutdown script $0:" + +# Find out how we were called. +case "$0" in + *0) + shutdown_command="halt" + ;; + *6) + shutdown_command=reboot + ;; + *) + echo "$0: call me as \"rc.0\" or \"rc.6\" please!" + exit 1 + ;; +esac + +# Save the system time to the hardware clock using hwclock --systohc. +# This will also create or update the timestamps in /etc/adjtime. +if [ -x /sbin/hwclock -a -z "$container" ]; then + # Check for a broken motherboard RTC clock (where ioports for rtc are + # unknown) to prevent hwclock causing a hang: + if ! grep -q " : rtc" /proc/ioports ; then + CLOCK_OPT="--directisa" + fi + if [ /etc/adjtime -nt /etc/hardwareclock ]; then + if grep -q "^LOCAL" /etc/adjtime ; then + echo "Saving system time to the hardware clock (localtime)." + else + echo "Saving system time to the hardware clock (UTC)." + fi + /sbin/hwclock $CLOCK_OPT --systohc + elif grep -q "^UTC" /etc/hardwareclock 2> /dev/null ; then + echo "Saving system time to the hardware clock (UTC)." + if [ ! -r /etc/adjtime ]; then + echo "Creating system time correction file /etc/adjtime." + fi + /sbin/hwclock $CLOCK_OPT --utc --systohc + else + echo "Saving system time to the hardware clock (localtime)." + if [ ! -r /etc/adjtime ]; then + echo "Creating system time correction file /etc/adjtime." + fi + /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 +fi + +# Stop the Apache web server: +if [ -x /etc/rc.d/rc.httpd ]; then + /etc/rc.d/rc.httpd stop +fi + +# Stop the MySQL database: +if [ -r /var/run/mysql/mysql.pid ]; then + . /etc/rc.d/rc.mysqld stop +fi + +# Stop the Samba server: +if [ -x /etc/rc.d/rc.samba ]; then + . /etc/rc.d/rc.samba stop +fi + +# Shut down the NFS server: +if [ -x /etc/rc.d/rc.nfsd ]; then + /etc/rc.d/rc.nfsd stop +fi + +# Shut down the SSH server: +if [ -x /etc/rc.d/rc.sshd ]; then + /etc/rc.d/rc.sshd stop +fi + +# Shut down the SASL authentication daemon: +if [ -x /etc/rc.d/rc.saslauthd ]; then + /etc/rc.d/rc.saslauthd stop +fi + +# Shut down OpenLDAP: +if [ -x /etc/rc.d/rc.openldap ]; then + /etc/rc.d/rc.openldap stop +fi + +# Stop D-Bus: +if [ -x /etc/rc.d/rc.messagebus ]; then + 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 | tr -d ' ' | grep successfully | sed "s/:successfullyunmounted/ has been successfully unmounted./g" + +# Try to shut down pppd: +PS="$(ps ax)" +if echo "$PS" | /bin/grep -q -w pppd ; then + if [ -x /usr/sbin/ppp-off ]; then + /usr/sbin/ppp-off + fi +fi + +# Shut down YP services: +if [ -x /etc/rc.d/rc.yp ]; then + if grep -wq stop /etc/rc.d/rc.yp ; then + /etc/rc.d/rc.yp stop + 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 -a -z "$container" ]; 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 -a -z "$container" ]; then # quit + . /etc/rc.d/rc.acpid stop +fi + +# Stop udev: +if [ -x /etc/rc.d/rc.udev -a -z "$container" ]; then + sh /etc/rc.d/rc.udev force-stop +fi + +# Kill all remaining processes. +OMITPIDS="$(for p in $(pgrep mdmon); do echo -o $p; done)" # Don't kill mdmon +if [ ! "$1" = "fast" ]; then + echo "Sending all processes the SIGTERM signal." + /sbin/killall5 -15 $OMITPIDS + /bin/sleep 5 + echo "Sending all processes the SIGKILL signal." + /sbin/killall5 -9 $OMITPIDS +fi + +# Try to turn off quota. +if /bin/grep -q quota /etc/fstab ; then + if [ -x /sbin/quotaoff -a -z "$container" ]; then + echo "Turning off filesystem quotas." + /sbin/quotaoff -a + 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. +$shutdown_command -w + +# Turn off swap: +if [ -z "$container" ]; then + echo "Turning off swap." + /sbin/swapoff -a + /bin/sync +fi + +# Stop cgmanager and cgproxy: +if [ -x /etc/rc.d/rc.cgmanager -a -z "$container" ]; then + sh /etc/rc.d/rc.cgmanager stop +fi + +if [ -z "$container" ]; then + echo "Unmounting local file systems:" + /bin/umount -v -a -t no,proc,sysfs | tr -d ' ' | grep successfully | sed "s/:successfullyunmounted/ has been successfully unmounted./g" 2> /dev/null + echo "Remounting root filesystem read-only:" + /bin/mount -v -n -o remount,ro / +fi + +# 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 [ -z "$container" ]; then + if [ -r /etc/lvmtab -o -d /etc/lvm/backup ]; then + echo "Deactivating LVM volume groups:" + /sbin/vgchange -an --ignorelockingfailure + fi +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 -a -z "$container" ]; 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 + +if [ "$container" = "lxc" ]; then + # confirm successful shutdown of the container + echo "LXC container stopped." +fi + +# Now halt (poweroff with APM or ACPI enabled kernels) or reboot. +if [ "$shutdown_command" = "reboot" ]; then + echo "Rebooting." + /sbin/reboot +else + /sbin/poweroff +fi + diff --git a/source/ap/lxc/scripts/rc.6.orig b/source/ap/lxc/scripts/rc.6.orig new file mode 100644 index 00000000..76895aca --- /dev/null +++ b/source/ap/lxc/scripts/rc.6.orig @@ -0,0 +1,299 @@ +#! /bin/sh +# +# rc.6 This file is executed by init when it goes into runlevel +# 0 (halt) or runlevel 6 (reboot). It kills all processes, +# unmounts file systems and then either halts or reboots. +# +# Version: @(#)/etc/rc.d/rc.6 2.47 Sat Jan 13 13:37:26 PST 2001 +# +# Author: Miquel van Smoorenburg <miquels@drinkel.nl.mugnet.org> +# Modified by: Patrick J. Volkerding, <volkerdi@slackware.com> +# + +# Set the path. +PATH=/sbin:/etc:/bin:/usr/bin + +# If there are SystemV init scripts for this runlevel, run them. +if [ -x /etc/rc.d/rc.sysvinit ]; then + . /etc/rc.d/rc.sysvinit +fi + +# Set linefeed mode to avoid staircase effect. +/bin/stty onlcr + +echo "Running shutdown script $0:" + +# Find out how we were called. +case "$0" in + *0) + shutdown_command="halt" + ;; + *6) + shutdown_command=reboot + ;; + *) + echo "$0: call me as \"rc.0\" or \"rc.6\" please!" + exit 1 + ;; +esac + +# Save the system time to the hardware clock using hwclock --systohc. +# This will also create or update the timestamps in /etc/adjtime. +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 " : rtc" /proc/ioports ; then + CLOCK_OPT="--directisa" + fi + if [ /etc/adjtime -nt /etc/hardwareclock ]; then + if grep -q "^LOCAL" /etc/adjtime ; then + echo "Saving system time to the hardware clock (localtime)." + else + echo "Saving system time to the hardware clock (UTC)." + fi + /sbin/hwclock $CLOCK_OPT --systohc + elif grep -q "^UTC" /etc/hardwareclock 2> /dev/null ; then + echo "Saving system time to the hardware clock (UTC)." + if [ ! -r /etc/adjtime ]; then + echo "Creating system time correction file /etc/adjtime." + fi + /sbin/hwclock $CLOCK_OPT --utc --systohc + else + echo "Saving system time to the hardware clock (localtime)." + if [ ! -r /etc/adjtime ]; then + echo "Creating system time correction file /etc/adjtime." + fi + /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 +fi + +# Stop the Apache web server: +if [ -x /etc/rc.d/rc.httpd ]; then + /etc/rc.d/rc.httpd stop +fi + +# Stop the MySQL database: +if [ -r /var/run/mysql/mysql.pid ]; then + . /etc/rc.d/rc.mysqld stop +fi + +# Stop the Samba server: +if [ -x /etc/rc.d/rc.samba ]; then + . /etc/rc.d/rc.samba stop +fi + +# Shut down the NFS server: +if [ -x /etc/rc.d/rc.nfsd ]; then + /etc/rc.d/rc.nfsd stop +fi + +# Shut down the SSH server: +if [ -x /etc/rc.d/rc.sshd ]; then + /etc/rc.d/rc.sshd stop +fi + +# Shut down the SASL authentication daemon: +if [ -x /etc/rc.d/rc.saslauthd ]; then + /etc/rc.d/rc.saslauthd stop +fi + +# Shut down OpenLDAP: +if [ -x /etc/rc.d/rc.openldap ]; then + /etc/rc.d/rc.openldap stop +fi + +# Stop D-Bus: +if [ -x /etc/rc.d/rc.messagebus ]; then + 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 | tr -d ' ' | grep successfully | sed "s/:successfullyunmounted/ has been successfully unmounted./g" + +# Try to shut down pppd: +PS="$(ps ax)" +if echo "$PS" | /bin/grep -q -w pppd ; then + if [ -x /usr/sbin/ppp-off ]; then + /usr/sbin/ppp-off + fi +fi + +# Shut down YP services: +if [ -x /etc/rc.d/rc.yp ]; then + if grep -wq stop /etc/rc.d/rc.yp ; then + /etc/rc.d/rc.yp stop + 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. +OMITPIDS="$(for p in $(pgrep mdmon); do echo -o $p; done)" # Don't kill mdmon +if [ ! "$1" = "fast" ]; then + echo "Sending all processes the SIGTERM signal." + /sbin/killall5 -15 $OMITPIDS + /bin/sleep 5 + echo "Sending all processes the SIGKILL signal." + /sbin/killall5 -9 $OMITPIDS +fi + +# Try to turn off quota. +if /bin/grep -q quota /etc/fstab ; then + if [ -x /sbin/quotaoff ]; then + echo "Turning off filesystem quotas." + /sbin/quotaoff -a + 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. +$shutdown_command -w + +# Turn off swap: +echo "Turning off swap." +/sbin/swapoff -a +/bin/sync + +# Stop cgmanager and cgproxy: +if [ -x /etc/rc.d/rc.cgmanager ]; then + sh /etc/rc.d/rc.cgmanager stop +fi + +echo "Unmounting local file systems:" +/bin/umount -v -a -t no,proc,sysfs | tr -d ' ' | grep successfully | sed "s/:successfullyunmounted/ has been successfully unmounted./g" 2> /dev/null + +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 [ "$shutdown_command" = "reboot" ]; then + echo "Rebooting." + /sbin/reboot +else + /sbin/poweroff +fi + diff --git a/source/ap/lxc/scripts/rc.M.lxc b/source/ap/lxc/scripts/rc.M.lxc new file mode 100644 index 00000000..a86eb62d --- /dev/null +++ b/source/ap/lxc/scripts/rc.M.lxc @@ -0,0 +1,397 @@ +#!/bin/sh +# +# rc.M This file is executed by init(8) when the system is being +# initialized for one of the "multi user" run levels (i.e. +# levels 1 through 6). It usually does mounting of file +# systems et al. +# +# Version: @(#)/etc/rc.d/rc.M 2.23 Wed Feb 26 19:20:58 PST 2003 +# +# Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org> +# Heavily modified by Patrick Volkerding <volkerdi@slackware.com> +# + +# Tell the viewers what's going to happen. +echo "Going multiuser..." + +# Set $container variable since this is a modified version of rc.M with +# changes for running in an lxc container. A check to see if this variable +# is set will be used to skip parts of the script that we don't want to run +# in a container. Thanks to Matteo Bernardini <ponce@slackbuilds.org> and +# Chris Willing for the initial work making this script lxc compatible. +container="lxc" + +# Update all the shared library links: +if [ -x /sbin/ldconfig ]; then + echo "Updating shared library links: /sbin/ldconfig &" + /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: +if [ -z "$container" ]; then + /bin/setterm -blank 15 -powersave powerdown -powerdown 60 +fi + +# Set the hostname. +if [ -z "$container" ]; then + if [ -r /etc/HOSTNAME ]; then + /bin/hostname $(cat /etc/HOSTNAME | cut -f1 -d .) + else + # fall back on this old default: + echo "darkstar.example.net" > /etc/HOSTNAME + /bin/hostname darkstar + fi +fi + +# Set the permissions on /var/log/dmesg according to whether the kernel +# permits non-root users to access kernel dmesg information: +if [ -r /proc/sys/kernel/dmesg_restrict ]; then + if [ $(cat /proc/sys/kernel/dmesg_restrict) = 1 ]; then + touch /var/log/dmesg + chmod 640 /var/log/dmesg + fi +else + touch /var/log/dmesg + chmod 644 /var/log/dmesg +fi +# Save the contents of 'dmesg': +/bin/dmesg -s 65536 > /var/log/dmesg + +# Initialize PCMCIA devices: +# +# NOTE: This used to be started near the top of rc.S so that PCMCIA devices +# could be fsck'ed along with the other drives. This had some unfortunate +# side effects, however, since root isn't yet read-write, and /var might not +# even be mounted the .pid files can't be correctly written in /var/run and +# the pcmcia system can't be correctly shut down. If you want some PCMCIA +# partition to be mounted at boot (or when the card is inserted) then add +# the appropriate lines to /etc/pcmcia/scsi.opts. +# +# Note that the stuff in /etc/pcmcia/ is only for 2.4.x kernels using +# 16-bit PCMCIA cards (not 32-bit Cardbus cards!). For example, with a +# wireless card you might need to set options in /etc/pcmcia OR in +# /etc/rc.d/rc.wireless.conf, or even in /etc/rc.d/rc.inet1.conf (with +# extra options if needed for the encryption key, ESSID, etc.) +# +# Hopefully this situation will be unified in the future, but for now +# that's how it is... +# +if [ -x /etc/rc.d/rc.pcmcia -a -z "$container" ]; then + . /etc/rc.d/rc.pcmcia start + # The cards might need a little extra time here to initialize. + sleep 5 +fi + +# Start the system logger. +if [ -x /etc/rc.d/rc.syslog -a -x /usr/sbin/syslogd -a -d /var/log ]; then + . /etc/rc.d/rc.syslog start +fi + +# Update the X font indexes: +if [ -x /usr/bin/fc-cache ]; then + echo "Updating X font indexes: /usr/bin/fc-cache -f &" + /usr/bin/fc-cache -f & +fi + +# Run rc.udev again. This will start udev if it is not already running +# (for example, upon return from runlevel 1), otherwise it will trigger it +# to look for device changes and to generate persistent rules if needed. +if grep -wq sysfs /proc/mounts && grep -q devtmpfs /proc/filesystems ; then + if ! grep -wq nohotplug /proc/cmdline ; then + if [ -x /etc/rc.d/rc.udev -a -z "$container" ]; then + /bin/sh /etc/rc.d/rc.udev start + fi + fi +fi + +# Initialize the networking hardware. +if [ -x /etc/rc.d/rc.inet1 ]; then + . /etc/rc.d/rc.inet1 +fi + +# Start D-Bus: +if [ -x /etc/rc.d/rc.messagebus ]; then + sh /etc/rc.d/rc.messagebus start +fi + +# Start Bluetooth: +if [ -x /etc/rc.d/rc.bluetooth ]; then + sh /etc/rc.d/rc.bluetooth start +fi + +# Start wicd or networkmanager: +if [ -x /etc/rc.d/rc.wicd -a -x /usr/sbin/wicd ]; then + sh /etc/rc.d/rc.wicd start +elif [ -x /etc/rc.d/rc.networkmanager ]; then + sh /etc/rc.d/rc.networkmanager start +fi + +# Start networking daemons: +if [ -x /etc/rc.d/rc.inet2 ]; then + . /etc/rc.d/rc.inet2 +fi + +# Look for additional USB/SCSI/IEEE1394/etc devices on multiple LUNs: +if [ -x /etc/rc.d/rc.scanluns ]; then + . /etc/rc.d/rc.scanluns +fi + +# Mount any additional filesystem types that haven't already been mounted: +mount -a -v 2> /dev/null | grep -v -e "already mounted" -e "ignored" | cut -f 1 -d : | tr -d ' ' | while read dev ; do mount | grep "${dev} " ; done + +# Start the Control Script for automounter: +if [ -x /etc/rc.d/rc.autofs ]; then + sh /etc/rc.d/rc.autofs start +fi + +# Start the Network Time Protocol daemon: +if [ -x /etc/rc.d/rc.ntpd ]; then + sh /etc/rc.d/rc.ntpd start +fi + +# Remove stale locks and junk files (must be done after mount -a!) +/bin/rm -f /var/lock/* /var/spool/uucp/LCK..* /tmp/.X*lock /tmp/core /core 2> /dev/null +/bin/rm -rf /var/spool/cron/cron.?????? 2> /dev/null + +# Remove stale hunt sockets so the game can start. +if [ -r /tmp/hunt -o -r /tmp/hunt.stats ]; then + echo "Removing your stale hunt sockets from /tmp." + /bin/rm -f /tmp/hunt* +fi + +# Ensure basic filesystem permissions sanity. +chmod 755 / 2> /dev/null +chmod 1777 /tmp /var/tmp + +# Start ACPI daemon. +if [ -x /etc/rc.d/rc.acpid -a -z "$container" ]; then + . /etc/rc.d/rc.acpid start +fi + +# Enable CPU frequency scaling: +if [ -x /etc/rc.d/rc.cpufreq -a -z "$container" ]; then + . /etc/rc.d/rc.cpufreq start +fi + +# Update any existing icon cache files: +if find /usr/share/icons -maxdepth 2 2> /dev/null | grep -q icon-theme.cache ; then + for theme_dir in /usr/share/icons/* ; do + if [ -r ${theme_dir}/icon-theme.cache ]; then + echo "Updating icon-theme.cache in ${theme_dir}..." + /usr/bin/gtk-update-icon-cache -t -f ${theme_dir} 1> /dev/null 2> /dev/null & + fi + done + # This would be a large file and probably shouldn't be there. + if [ -r /usr/share/icons/icon-theme.cache ]; then + echo "Deleting icon-theme.cache in /usr/share/icons..." + #/usr/bin/gtk-update-icon-cache -t -f /usr/share/icons 1> /dev/null 2> /dev/null & + rm -f /usr/share/icons/icon-theme.cache + fi +fi + +# Update mime database: +if [ -x /usr/bin/update-mime-database -a -d /usr/share/mime ]; then + echo "Updating MIME database: /usr/bin/update-mime-database /usr/share/mime &" + /usr/bin/update-mime-database /usr/share/mime 1> /dev/null 2> /dev/null & +fi + +# Start console-kit-daemon: +if [ -x /etc/rc.d/rc.consolekit ]; then + sh /etc/rc.d/rc.consolekit start +fi + +# Start HAL: +if [ -x /etc/rc.d/rc.hald ]; then + sh /etc/rc.d/rc.hald start +fi + +# Start system-wide PulseAudio daemon (not recommended, nor required in +# order to use PulseAudio -- see the script for details): +if [ -x /etc/rc.d/rc.pulseaudio ]; then + . /etc/rc.d/rc.pulseaudio start +fi + +# These GTK+/pango files need to be kept up to date for +# proper input method, pixbuf loaders, and font support. +if [ -x /usr/bin/update-gtk-immodules ]; then + echo "Updating gtk.immodules:" + echo " /usr/bin/update-gtk-immodules &" + /usr/bin/update-gtk-immodules > /dev/null 2>&1 & +fi +if [ -x /usr/bin/update-gdk-pixbuf-loaders ]; then + echo "Updating gdk-pixbuf.loaders:" + echo " /usr/bin/update-gdk-pixbuf-loaders &" + /usr/bin/update-gdk-pixbuf-loaders > /dev/null 2>&1 & +fi +if [ -x /usr/bin/update-pango-querymodules ]; then + echo "Updating pango.modules:" + echo " /usr/bin/update-pango-querymodules &" + /usr/bin/update-pango-querymodules > /dev/null 2>&1 & +fi +if [ -x /usr/bin/glib-compile-schemas ]; then + echo "Compiling GSettings XML schema files:" + echo " /usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas &" + /usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas >/dev/null 2>&1 & +fi + +# Start dnsmasq, a simple DHCP/DNS server: +if [ -x /etc/rc.d/rc.dnsmasq ]; then + /etc/rc.d/rc.dnsmasq start +fi + +# Start snmpd: +if [ -x /etc/rc.d/rc.snmpd ]; then + /etc/rc.d/rc.snmpd start +fi + +# Start the print spooling system. This will usually be LPRng (lpd) or CUPS. +if [ -x /etc/rc.d/rc.cups ]; then + # Start CUPS: + /etc/rc.d/rc.cups start +elif [ -x /etc/rc.d/rc.lprng ]; then + # Start LPRng (lpd): + . /etc/rc.d/rc.lprng start +fi + +# Start netatalk. (a file/print server for Macs using Appletalk) +if [ -x /etc/rc.d/rc.atalk ]; then + /etc/rc.d/rc.atalk start +fi + +# Start smartd, which monitors the status of S.M.A.R.T. compatible +# hard drives and reports any problems. Note some devices (which aren't +# smart, I guess ;) will hang if probed by smartd, so it's commented out +# by default. +#if [ -x /usr/sbin/smartd ]; then +# /usr/sbin/smartd +#fi + +# Monitor the UPS with genpowerd. +# To use this, uncomment this section and edit your settings in +# /etc/genpowerd.conf (serial device, UPS type, etc). For more information, +# see "man genpowerd" or the extensive documentation in the +# /usr/doc/genpower-*/ directory. +# You'll also need to configure a similar block in /etc/rc.d/rc.6 if you want +# support for stopping the UPS's inverter after the machine halts. +#if [ -x /sbin/genpowerd ]; then +# echo "Starting genpowerd daemon..." +# /sbin/genpowerd +#fi + +# Turn on process accounting. To enable process accounting, make sure the +# option for BSD process accounting is enabled in your kernel, and then +# create the file /var/log/pacct (touch /var/log/pacct). By default, process +# accounting is not enabled (since /var/log/pacct does not exist). This is +# because the log file can get VERY large. +if [ -x /sbin/accton -a -r /var/log/pacct ]; then + chmod 640 /var/log/pacct + /sbin/accton /var/log/pacct +fi + +# Start crond (Dillon's crond): +# If you want cron to actually log activity to /var/log/cron, then change +# -l notice to -l info to increase the logging level. +if [ -x /usr/sbin/crond ]; then + /usr/sbin/crond -l notice +fi + +# Start atd (manages jobs scheduled with 'at'): +if [ -x /usr/sbin/atd ]; then + /usr/sbin/atd -b 15 -l 1 +fi + +# Slackware-Mini-Quota-HOWTO: +# To really activate quotas, you'll need to add 'usrquota' and/or 'grpquota' to +# the appropriate partitions as listed in /etc/fstab. Here's an example: +# +# /dev/hda2 /home ext3 defaults,usrquota 1 1 +# +# You'll then need to setup initial quota files at the top of the partitions +# to support quota, like this: +# touch /home/aquota.user /home/aquota.group +# chmod 600 /home/aquota.user /home/aquota.group +# +# Then, reboot to activate the system. +# To edit user quotas, use 'edquota'. See 'man edquota'. Also, the +# official Quota Mini-HOWTO has lots of useful information. That can be found +# here: /usr/doc/Linux-HOWTOs/Quota + +# Check quotas and then turn quota system on: +if grep -q quota /etc/fstab ; then + for quotafs in $(awk '/quota/ {print $2}' /etc/fstab) ; do + /bin/rm -f $quotafs/{a,}quota.{group,user}.new + done + if [ -x /sbin/quotacheck ]; then + echo "Checking filesystem quotas: /sbin/quotacheck -avugm" + /sbin/quotacheck -avugm + fi + if [ -x /sbin/quotaon ]; then + echo "Activating filesystem quotas: /sbin/quotaon -avug" + /sbin/quotaon -avug + fi +fi + +# Start the SASL authentication server. This provides SASL +# authentication services for sendmail: +if [ -x /etc/rc.d/rc.saslauthd ]; then + . /etc/rc.d/rc.saslauthd start +fi + +# Start the sendmail daemon: +if [ -x /etc/rc.d/rc.sendmail ]; then + . /etc/rc.d/rc.sendmail start +fi + +# Load ALSA (sound) defaults: +if [ -x /etc/rc.d/rc.alsa -a -z "$container" ]; then + . /etc/rc.d/rc.alsa +fi + +# Load a custom screen font if the user has an rc.font script. +if [ -x /etc/rc.d/rc.font ]; then + . /etc/rc.d/rc.font +fi + +# Load a custom keymap if the user has an rc.keymap script. +if [ -x /etc/rc.d/rc.keymap ]; then + . /etc/rc.d/rc.keymap +fi + +# Start the MySQL database: +if [ -x /etc/rc.d/rc.mysqld ]; then + . /etc/rc.d/rc.mysqld start +fi + +# Start Apache web server: +if [ -x /etc/rc.d/rc.httpd ]; then + . /etc/rc.d/rc.httpd start +fi + +# Start OpenLDAP: +if [ -x /etc/rc.d/rc.openldap ]; then + . /etc/rc.d/rc.openldap start +fi + +# Start Samba (a file/print server for Win95/NT machines). +# Samba can be started in /etc/inetd.conf instead. +if [ -x /etc/rc.d/rc.samba ]; then + . /etc/rc.d/rc.samba start +fi + +# Start the GPM mouse server: +if [ -x /etc/rc.d/rc.gpm ]; then + . /etc/rc.d/rc.gpm start +fi + +# If there are SystemV init scripts for this runlevel, run them. +if [ -x /etc/rc.d/rc.sysvinit ]; then + . /etc/rc.d/rc.sysvinit +fi + +# Start the local setup procedure. +if [ -x /etc/rc.d/rc.local ]; then + . /etc/rc.d/rc.local +fi + +# All done. diff --git a/source/ap/lxc/scripts/rc.M.orig b/source/ap/lxc/scripts/rc.M.orig new file mode 100644 index 00000000..1d480cac --- /dev/null +++ b/source/ap/lxc/scripts/rc.M.orig @@ -0,0 +1,386 @@ +#!/bin/sh +# +# rc.M This file is executed by init(8) when the system is being +# initialized for one of the "multi user" run levels (i.e. +# levels 1 through 6). It usually does mounting of file +# systems et al. +# +# Version: @(#)/etc/rc.d/rc.M 2.23 Wed Feb 26 19:20:58 PST 2003 +# +# Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org> +# Heavily modified by Patrick Volkerding <volkerdi@slackware.com> +# + +# Tell the viewers what's going to happen. +echo "Going multiuser..." + +# Update all the shared library links: +if [ -x /sbin/ldconfig ]; then + echo "Updating shared library links: /sbin/ldconfig &" + /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 .) +else + # fall back on this old default: + echo "darkstar.example.net" > /etc/HOSTNAME + /bin/hostname darkstar +fi + +# Set the permissions on /var/log/dmesg according to whether the kernel +# permits non-root users to access kernel dmesg information: +if [ -r /proc/sys/kernel/dmesg_restrict ]; then + if [ $(cat /proc/sys/kernel/dmesg_restrict) = 1 ]; then + touch /var/log/dmesg + chmod 640 /var/log/dmesg + fi +else + touch /var/log/dmesg + chmod 644 /var/log/dmesg +fi +# Save the contents of 'dmesg': +/bin/dmesg -s 65536 > /var/log/dmesg + +# Initialize PCMCIA devices: +# +# NOTE: This used to be started near the top of rc.S so that PCMCIA devices +# could be fsck'ed along with the other drives. This had some unfortunate +# side effects, however, since root isn't yet read-write, and /var might not +# even be mounted the .pid files can't be correctly written in /var/run and +# the pcmcia system can't be correctly shut down. If you want some PCMCIA +# partition to be mounted at boot (or when the card is inserted) then add +# the appropriate lines to /etc/pcmcia/scsi.opts. +# +# Note that the stuff in /etc/pcmcia/ is only for 2.4.x kernels using +# 16-bit PCMCIA cards (not 32-bit Cardbus cards!). For example, with a +# wireless card you might need to set options in /etc/pcmcia OR in +# /etc/rc.d/rc.wireless.conf, or even in /etc/rc.d/rc.inet1.conf (with +# extra options if needed for the encryption key, ESSID, etc.) +# +# Hopefully this situation will be unified in the future, but for now +# that's how it is... +# +if [ -x /etc/rc.d/rc.pcmcia ]; then + . /etc/rc.d/rc.pcmcia start + # The cards might need a little extra time here to initialize. + sleep 5 +fi + +# Start the system logger. +if [ -x /etc/rc.d/rc.syslog -a -x /usr/sbin/syslogd -a -d /var/log ]; then + . /etc/rc.d/rc.syslog start +fi + +# Update the X font indexes: +if [ -x /usr/bin/fc-cache ]; then + echo "Updating X font indexes: /usr/bin/fc-cache -f &" + /usr/bin/fc-cache -f & +fi + +# Run rc.udev again. This will start udev if it is not already running +# (for example, upon return from runlevel 1), otherwise it will trigger it +# to look for device changes and to generate persistent rules if needed. +if grep -wq sysfs /proc/mounts && grep -q devtmpfs /proc/filesystems ; then + if ! grep -wq nohotplug /proc/cmdline ; then + if [ -x /etc/rc.d/rc.udev ]; then + /bin/sh /etc/rc.d/rc.udev start + fi + fi +fi + +# Initialize the networking hardware. +if [ -x /etc/rc.d/rc.inet1 ]; then + . /etc/rc.d/rc.inet1 +fi + +# Start D-Bus: +if [ -x /etc/rc.d/rc.messagebus ]; then + sh /etc/rc.d/rc.messagebus start +fi + +# Start Bluetooth: +if [ -x /etc/rc.d/rc.bluetooth ]; then + sh /etc/rc.d/rc.bluetooth start +fi + +# Start wicd or networkmanager: +if [ -x /etc/rc.d/rc.wicd -a -x /usr/sbin/wicd ]; then + sh /etc/rc.d/rc.wicd start +elif [ -x /etc/rc.d/rc.networkmanager ]; then + sh /etc/rc.d/rc.networkmanager start +fi + +# Start networking daemons: +if [ -x /etc/rc.d/rc.inet2 ]; then + . /etc/rc.d/rc.inet2 +fi + +# Look for additional USB/SCSI/IEEE1394/etc devices on multiple LUNs: +if [ -x /etc/rc.d/rc.scanluns ]; then + . /etc/rc.d/rc.scanluns +fi + +# Mount any additional filesystem types that haven't already been mounted: +mount -a -v 2> /dev/null | grep -v -e "already mounted" -e "ignored" | cut -f 1 -d : | tr -d ' ' | while read dev ; do mount | grep "${dev} " ; done + +# Start the Control Script for automounter: +if [ -x /etc/rc.d/rc.autofs ]; then + sh /etc/rc.d/rc.autofs start +fi + +# Start the Network Time Protocol daemon: +if [ -x /etc/rc.d/rc.ntpd ]; then + sh /etc/rc.d/rc.ntpd start +fi + +# Remove stale locks and junk files (must be done after mount -a!) +/bin/rm -f /var/lock/* /var/spool/uucp/LCK..* /tmp/.X*lock /tmp/core /core 2> /dev/null +/bin/rm -rf /var/spool/cron/cron.?????? 2> /dev/null + +# Remove stale hunt sockets so the game can start. +if [ -r /tmp/hunt -o -r /tmp/hunt.stats ]; then + echo "Removing your stale hunt sockets from /tmp." + /bin/rm -f /tmp/hunt* +fi + +# Ensure basic filesystem permissions sanity. +chmod 755 / 2> /dev/null +chmod 1777 /tmp /var/tmp + +# Start ACPI daemon. +if [ -x /etc/rc.d/rc.acpid ]; then + . /etc/rc.d/rc.acpid start +fi + +# Enable CPU frequency scaling: +if [ -x /etc/rc.d/rc.cpufreq ]; then + . /etc/rc.d/rc.cpufreq start +fi + +# Update any existing icon cache files: +if find /usr/share/icons -maxdepth 2 2> /dev/null | grep -q icon-theme.cache ; then + for theme_dir in /usr/share/icons/* ; do + if [ -r ${theme_dir}/icon-theme.cache ]; then + echo "Updating icon-theme.cache in ${theme_dir}..." + /usr/bin/gtk-update-icon-cache -t -f ${theme_dir} 1> /dev/null 2> /dev/null & + fi + done + # This would be a large file and probably shouldn't be there. + if [ -r /usr/share/icons/icon-theme.cache ]; then + echo "Deleting icon-theme.cache in /usr/share/icons..." + #/usr/bin/gtk-update-icon-cache -t -f /usr/share/icons 1> /dev/null 2> /dev/null & + rm -f /usr/share/icons/icon-theme.cache + fi +fi + +# Update mime database: +if [ -x /usr/bin/update-mime-database -a -d /usr/share/mime ]; then + echo "Updating MIME database: /usr/bin/update-mime-database /usr/share/mime &" + /usr/bin/update-mime-database /usr/share/mime 1> /dev/null 2> /dev/null & +fi + +# Start console-kit-daemon: +if [ -x /etc/rc.d/rc.consolekit ]; then + sh /etc/rc.d/rc.consolekit start +fi + +# Start HAL: +if [ -x /etc/rc.d/rc.hald ]; then + sh /etc/rc.d/rc.hald start +fi + +# Start system-wide PulseAudio daemon (not recommended, nor required in +# order to use PulseAudio -- see the script for details): +if [ -x /etc/rc.d/rc.pulseaudio ]; then + . /etc/rc.d/rc.pulseaudio start +fi + +# These GTK+/pango files need to be kept up to date for +# proper input method, pixbuf loaders, and font support. +if [ -x /usr/bin/update-gtk-immodules ]; then + echo "Updating gtk.immodules:" + echo " /usr/bin/update-gtk-immodules &" + /usr/bin/update-gtk-immodules > /dev/null 2>&1 & +fi +if [ -x /usr/bin/update-gdk-pixbuf-loaders ]; then + echo "Updating gdk-pixbuf.loaders:" + echo " /usr/bin/update-gdk-pixbuf-loaders &" + /usr/bin/update-gdk-pixbuf-loaders > /dev/null 2>&1 & +fi +if [ -x /usr/bin/update-pango-querymodules ]; then + echo "Updating pango.modules:" + echo " /usr/bin/update-pango-querymodules &" + /usr/bin/update-pango-querymodules > /dev/null 2>&1 & +fi +if [ -x /usr/bin/glib-compile-schemas ]; then + echo "Compiling GSettings XML schema files:" + echo " /usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas &" + /usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas >/dev/null 2>&1 & +fi + +# Start dnsmasq, a simple DHCP/DNS server: +if [ -x /etc/rc.d/rc.dnsmasq ]; then + /etc/rc.d/rc.dnsmasq start +fi + +# Start snmpd: +if [ -x /etc/rc.d/rc.snmpd ]; then + /etc/rc.d/rc.snmpd start +fi + +# Start the print spooling system. This will usually be LPRng (lpd) or CUPS. +if [ -x /etc/rc.d/rc.cups ]; then + # Start CUPS: + /etc/rc.d/rc.cups start +elif [ -x /etc/rc.d/rc.lprng ]; then + # Start LPRng (lpd): + . /etc/rc.d/rc.lprng start +fi + +# Start netatalk. (a file/print server for Macs using Appletalk) +if [ -x /etc/rc.d/rc.atalk ]; then + /etc/rc.d/rc.atalk start +fi + +# Start smartd, which monitors the status of S.M.A.R.T. compatible +# hard drives and reports any problems. Note some devices (which aren't +# smart, I guess ;) will hang if probed by smartd, so it's commented out +# by default. +#if [ -x /usr/sbin/smartd ]; then +# /usr/sbin/smartd +#fi + +# Monitor the UPS with genpowerd. +# To use this, uncomment this section and edit your settings in +# /etc/genpowerd.conf (serial device, UPS type, etc). For more information, +# see "man genpowerd" or the extensive documentation in the +# /usr/doc/genpower-*/ directory. +# You'll also need to configure a similar block in /etc/rc.d/rc.6 if you want +# support for stopping the UPS's inverter after the machine halts. +#if [ -x /sbin/genpowerd ]; then +# echo "Starting genpowerd daemon..." +# /sbin/genpowerd +#fi + +# Turn on process accounting. To enable process accounting, make sure the +# option for BSD process accounting is enabled in your kernel, and then +# create the file /var/log/pacct (touch /var/log/pacct). By default, process +# accounting is not enabled (since /var/log/pacct does not exist). This is +# because the log file can get VERY large. +if [ -x /sbin/accton -a -r /var/log/pacct ]; then + chmod 640 /var/log/pacct + /sbin/accton /var/log/pacct +fi + +# Start crond (Dillon's crond): +# If you want cron to actually log activity to /var/log/cron, then change +# -l notice to -l info to increase the logging level. +if [ -x /usr/sbin/crond ]; then + /usr/sbin/crond -l notice +fi + +# Start atd (manages jobs scheduled with 'at'): +if [ -x /usr/sbin/atd ]; then + /usr/sbin/atd -b 15 -l 1 +fi + +# Slackware-Mini-Quota-HOWTO: +# To really activate quotas, you'll need to add 'usrquota' and/or 'grpquota' to +# the appropriate partitions as listed in /etc/fstab. Here's an example: +# +# /dev/hda2 /home ext3 defaults,usrquota 1 1 +# +# You'll then need to setup initial quota files at the top of the partitions +# to support quota, like this: +# touch /home/aquota.user /home/aquota.group +# chmod 600 /home/aquota.user /home/aquota.group +# +# Then, reboot to activate the system. +# To edit user quotas, use 'edquota'. See 'man edquota'. Also, the +# official Quota Mini-HOWTO has lots of useful information. That can be found +# here: /usr/doc/Linux-HOWTOs/Quota + +# Check quotas and then turn quota system on: +if grep -q quota /etc/fstab ; then + for quotafs in $(awk '/quota/ {print $2}' /etc/fstab) ; do + /bin/rm -f $quotafs/{a,}quota.{group,user}.new + done + if [ -x /sbin/quotacheck ]; then + echo "Checking filesystem quotas: /sbin/quotacheck -avugm" + /sbin/quotacheck -avugm + fi + if [ -x /sbin/quotaon ]; then + echo "Activating filesystem quotas: /sbin/quotaon -avug" + /sbin/quotaon -avug + fi +fi + +# Start the SASL authentication server. This provides SASL +# authentication services for sendmail: +if [ -x /etc/rc.d/rc.saslauthd ]; then + . /etc/rc.d/rc.saslauthd start +fi + +# Start the sendmail daemon: +if [ -x /etc/rc.d/rc.sendmail ]; then + . /etc/rc.d/rc.sendmail start +fi + +# Load ALSA (sound) defaults: +if [ -x /etc/rc.d/rc.alsa ]; then + . /etc/rc.d/rc.alsa +fi + +# Load a custom screen font if the user has an rc.font script. +if [ -x /etc/rc.d/rc.font ]; then + . /etc/rc.d/rc.font +fi + +# Load a custom keymap if the user has an rc.keymap script. +if [ -x /etc/rc.d/rc.keymap ]; then + . /etc/rc.d/rc.keymap +fi + +# Start the MySQL database: +if [ -x /etc/rc.d/rc.mysqld ]; then + . /etc/rc.d/rc.mysqld start +fi + +# Start Apache web server: +if [ -x /etc/rc.d/rc.httpd ]; then + . /etc/rc.d/rc.httpd start +fi + +# Start OpenLDAP: +if [ -x /etc/rc.d/rc.openldap ]; then + . /etc/rc.d/rc.openldap start +fi + +# Start Samba (a file/print server for Win95/NT machines). +# Samba can be started in /etc/inetd.conf instead. +if [ -x /etc/rc.d/rc.samba ]; then + . /etc/rc.d/rc.samba start +fi + +# Start the GPM mouse server: +if [ -x /etc/rc.d/rc.gpm ]; then + . /etc/rc.d/rc.gpm start +fi + +# If there are SystemV init scripts for this runlevel, run them. +if [ -x /etc/rc.d/rc.sysvinit ]; then + . /etc/rc.d/rc.sysvinit +fi + +# Start the local setup procedure. +if [ -x /etc/rc.d/rc.local ]; then + . /etc/rc.d/rc.local +fi + +# All done. diff --git a/source/ap/lxc/scripts/rc.S.lxc b/source/ap/lxc/scripts/rc.S.lxc new file mode 100644 index 00000000..eb804e87 --- /dev/null +++ b/source/ap/lxc/scripts/rc.S.lxc @@ -0,0 +1,474 @@ +#!/bin/sh +# +# /etc/rc.d/rc.S: System initialization script. +# +# Mostly written by: Patrick J. Volkerding, <volkerdi@slackware.com> +# + +# Set $container variable since this is a modified version of rc.S with +# changes for running in an lxc container. A check to see if this variable +# is set will be used to skip parts of the script that we don't want to run +# in a container. Thanks to Matteo Bernardini <ponce@slackbuilds.org> and +# Chris Willing for the initial work making this script lxc compatible. +container="lxc" + +PATH=/sbin:/usr/sbin:/bin:/usr/bin + +# Try to mount /proc: +if [ -z "$container" ]; then +/sbin/mount -v proc /proc -n -t proc 2> /dev/null +fi + +# Mount sysfs next, if the kernel supports it: +if [ -d /sys -a -z "$container" ]; then + if grep -wq sysfs /proc/filesystems ; then + if ! grep -wq sysfs /proc/mounts ; then + /sbin/mount -v sysfs /sys -n -t sysfs + fi + fi +fi + +# If /run exists, mount a tmpfs on it (unless the +# initrd has already done so): +if [ -d /run -a -z "$container" ]; then + if ! grep -wq "tmpfs /run tmpfs" /proc/mounts ; then + /sbin/mount -v -n -t tmpfs tmpfs /run -o mode=0755 + fi +fi + +# Load the loop device kernel module: +if [ -x /etc/rc.d/rc.loop -a -z "$container" ]; then + . /etc/rc.d/rc.loop start +fi + +# Initialize udev to manage /dev entries and hotplugging. +# You may turn off udev by making the /etc/rc.d/rc.udev file non-executable +# or giving the "nohotplug" option at boot, but realize that if you turn off +# udev that you will have to load all the kernel modules that you need +# yourself (possibly in /etc/rc.d/rc.modules.local), and make any additional +# device nodes that you need in the /dev directory. Even USB and IEEE1394 +# devices will need to have the modules loaded by hand if udev is not used. +# So use it. :-) +if grep -wq sysfs /proc/mounts && grep -q devtmpfs /proc/filesystems ; then + if ! grep -wq nohotplug /proc/cmdline ; then + if [ -x /etc/rc.d/rc.udev -a -z "$container" ]; then + /bin/sh /etc/rc.d/rc.udev start + fi + fi +fi + +# Mount Control Groups filesystem interface: +if [ -z "$container" ]; then + 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 /bin/cut -a -x /bin/tail ]; 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="$(/bin/cut -f 1 /proc/cgroups | /bin/tail -n +2)" + 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 +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 +# use LVM you must run /sbin/vgscan yourself the first time (and +# create some VGs and LVs). +if [ -z "$container" ]; then + # Create LVM lock/run directories: + mkdir -p -m 0700 /run/lvm /run/lock /run/lock/lvm + if [ -r /etc/lvmtab -o -d /etc/lvm/backup ]; then + echo "Initializing LVM (Logical Volume Manager):" + # Check for device-mapper support. + if ! grep -wq device-mapper /proc/devices ; then + # Try to load a device-mapper kernel module: + /sbin/modprobe -q dm-mod + fi + # Scan for new volume groups: + /sbin/vgscan --mknodes --ignorelockingfailure 2> /dev/null + if [ $? = 0 ]; then + # Make volume groups available to the kernel. + # This should also make logical volumes available. + /sbin/vgchange -ay --ignorelockingfailure + fi + fi +fi + +# Open any volumes created by cryptsetup. +# +# Some notes on /etc/crypttab in Slackware: +# Only LUKS formatted volumes are supported (except for swap) +# crypttab follows the following format: +# <luks_name> <device> <password> <options> +# +# <luks_name>: This is the name of your LUKS volume. +# For example: crypt-home +# +# <device>: This is the device containing your LUKS volume. +# For example: /dev/sda2 +# +# <password>: This is either the volume password in plain text, or the name of +# a key file. Use 'none' to interactively enter password on boot. +# +# <options>: Comma-separated list of options. Note that there must be a +# password field for any options to be picked up (use a password of 'none' to +# get a password prompt at boot). The following options are supported: +# +# discard -- this will cause --allow-discards to be passed to the cryptsetup +# program while opening the LUKS volume. +# +# ro -- this will cause --readonly to be passed to the cryptsetup program while +# opening the LUKS volume. +# +# swap -- this option cannot be used with other options. The device given will +# be formatted as a new encrypted volume with a random key on boot, and used as +# swap. +# +if [ -f /etc/crypttab -a -x /sbin/cryptsetup -a -z "$container" ]; then + # First, check for device-mapper support. + if ! grep -wq device-mapper /proc/devices ; then + # If device-mapper exists as a module, try to load it. + # Try to load a device-mapper kernel module: + /sbin/modprobe -q dm-mod + fi + # NOTE: we only support LUKS formatted volumes (except for swap)! + cat /etc/crypttab | grep -v "^#" | grep -v "^$" | while read line; do + eval LUKSARRAY=( $line ) + LUKS="${LUKSARRAY[0]}" + DEV="${LUKSARRAY[1]}" + PASS="${LUKSARRAY[2]}" + OPTS="${LUKSARRAY[3]}" + LUKSOPTS="" + if echo $OPTS | grep -wq ro ; then LUKSOPTS="${LUKSOPTS} --readonly" ; fi + if echo $OPTS | grep -wq discard ; then LUKSOPTS="${LUKSOPTS} --allow-discards" ; fi + # Skip LUKS volumes that were already unlocked (in the initrd): + /sbin/cryptsetup status $LUKS 2>/dev/null | head -n 1 | grep -q "is active" && continue + if /sbin/cryptsetup isLuks $DEV 2>/dev/null ; then + if [ -z "${LUKSOPTS}" ]; then + echo "Unlocking LUKS encrypted volume '${LUKS}' on device '$DEV':" + else + echo "Unlocking LUKS encrypted volume '${LUKS}' on device '$DEV' with options '${LUKSOPTS}':" + fi + if [ -n "${PASS}" -a "${PASS}" != "none" ]; then + if [ -f "${PASS}" ]; then + # A password was given a key-file filename + /sbin/cryptsetup ${LUKSOPTS} --key-file=${PASS} luksOpen $DEV $LUKS + else + # A password was provided in plain text + echo "${PASS}" | /sbin/cryptsetup ${LUKSOPTS} luksOpen $DEV $LUKS + fi + else + # No password was given, or a password of 'none' was given + /sbin/cryptsetup ${LUKSOPTS} luksOpen $DEV $LUKS </dev/tty0 >/dev/tty0 2>&1 + fi + elif echo $OPTS | grep -wq swap ; then + # If any of the volumes is to be used as encrypted swap, + # then encrypt it using a random key and run mkswap: + echo "Creating encrypted swap volume '${LUKS}' on device '$DEV':" + /sbin/cryptsetup --cipher=aes --key-file=/dev/urandom --key-size=256 create $LUKS $DEV + mkswap /dev/mapper/$LUKS + fi + done +fi + +# Enable swapping: +if [ -z "$container" ]; then + /sbin/swapon -a 2> /dev/null +fi + +# Start FUSE, if requested: +if [ -x /etc/rc.d/rc.fuse -a -z "$container" ]; then + sh /etc/rc.d/rc.fuse start +fi + +# Set the tick and frequency for the system clock. +# Default values are: TICK=10000 and FREQ=0 +if [ -z "$container" ]; then + TICK=10000 + FREQ=0 + # If there's a /etc/default/adjtimex config file, source it to override + # the default TICK and FREQ: + if [ -r /etc/default/adjtimex ]; then + . /etc/default/adjtimex + fi + if /sbin/adjtimex --tick $TICK --frequency $FREQ; then + echo "Setting the system clock rate: /sbin/adjtimex --tick $TICK --frequency $FREQ" + else + echo "Failed to set system clock with adjtimex, possibly invalid parameters? (TICK=$TICK FREQ=$FREQ)" + fi +fi + +# Set the system time from the hardware clock using hwclock --hctosys. +if [ -x /sbin/hwclock -a -z "$container" ]; then + # Check for a broken motherboard RTC clock (where ioports for rtc are + # unknown) to prevent hwclock causing a hang: + if ! grep -q " : rtc" /proc/ioports ; then + CLOCK_OPT="--directisa" + fi + if [ /etc/adjtime -nt /etc/hardwareclock ]; then + if grep -q "^LOCAL" /etc/adjtime ; then + echo -n "Setting system time from the hardware clock (localtime): " + else + echo -n "Setting system time from the hardware clock (UTC): " + fi + /sbin/hwclock $CLOCK_OPT --hctosys + elif grep -wq "^localtime" /etc/hardwareclock 2> /dev/null ; then + echo -n "Setting system time from the hardware clock (localtime): " + /sbin/hwclock $CLOCK_OPT --localtime --hctosys + else + echo -n "Setting system time from the hardware clock (UTC): " + /sbin/hwclock $CLOCK_OPT --utc --hctosys + fi + date +fi + +# Test to see if the root partition is read-only, like it ought to be. +if [ -z "$container" ]; then + READWRITE=no + if touch /fsrwtestfile 2>/dev/null; then + rm -f /fsrwtestfile + READWRITE=yes + else + echo "Testing root filesystem status: read-only filesystem" + fi +fi + +# See if a forced filesystem check was requested at shutdown: +if [ -r /etc/forcefsck -a -z "$container" ]; then + FORCEFSCK="-f" +fi + +# Check the root filesystem: +if [ -z "$container" ]; then + if [ ! $READWRITE = yes ]; then + RETVAL=0 + if [ ! -r /etc/fastboot ]; then + echo "Checking root filesystem:" + /sbin/fsck $FORCEFSCK -C -a / + RETVAL=$? + fi + # An error code of 2 or higher will require a reboot. + if [ $RETVAL -ge 2 ]; then + # An error code equal to or greater than 4 means that some errors + # could not be corrected. This requires manual attention, so we + # offer a chance to try to fix the problem in single-user mode: + if [ $RETVAL -ge 4 ]; then + echo + echo "***********************************************************" + echo "*** An error occurred during the root filesystem check. ***" + echo "*** You will now be given a chance to log into the ***" + echo "*** system in single-user mode to fix the problem. ***" + echo "*** ***" + echo "*** If you are using the ext2 filesystem, running ***" + echo "*** 'e2fsck -v -y <partition>' might help. ***" + echo "***********************************************************" + echo + echo "Once you exit the single-user shell, the system will reboot." + echo + PS1="(Repair filesystem) \#"; export PS1 + sulogin + else # With an error code of 2 or 3, reboot the machine automatically: + echo + echo "***********************************" + echo "*** The filesystem was changed. ***" + echo "*** The system will now reboot. ***" + echo "***********************************" + echo + fi + echo "Unmounting file systems." + /sbin/umount -a -r + /sbin/mount -n -o remount,ro / + echo "Rebooting system." + sleep 2 + reboot -f + fi + # Remount the root filesystem in read-write mode + echo "Remounting root device with read-write enabled." + /sbin/mount -w -v -n -o remount / + if [ $? -gt 0 ] ; then + echo "FATAL: Attempt to remount root device as read-write failed! This is going to" + echo "cause serious problems." + fi + else + echo "Testing root filesystem status: read-write filesystem" + echo + echo "ERROR: Root partition has already been mounted read-write. Cannot check!" + echo + echo "For filesystem checking to work properly, your system must initially mount" + echo "the root partition as read only. If you're booting with LILO, add a line:" + echo + echo " read-only" + echo + echo "to the Linux section in your /etc/lilo.conf and type 'lilo' to reinstall it." + fi +fi # Done checking root filesystem + +# Any /etc/mtab that exists here is old, so we start with a new one: +/bin/rm -f /etc/mtab{,~,.tmp} && /bin/touch /etc/mtab + +# Add entry for / to /etc/mtab: +if [ -z "$container" ]; then + /sbin/mount -f -w / +fi + +# Add /proc, /sys, and /dev/shm mounts to /etc/mtab: +if [ -z "$container" ]; then + if [ -d /proc/sys ]; then + /sbin/mount -f -t proc proc /proc + fi + if [ -d /sys/bus ]; then + /sbin/mount -f -t sysfs sysfs /sys + fi + if grep -q '^[^ ]\+ /dev/shm ' /proc/mounts 2> /dev/null ; then + /sbin/mount -f -t tmpfs tmpfs /dev/shm + fi +fi + +# Configure ISA Plug-and-Play devices: +if [ -r /etc/isapnp.conf -a -z "$container" ]; then + if [ -x /sbin/isapnp ]; then + /sbin/isapnp /etc/isapnp.conf + fi +fi + +# Run the kernel module script. This updates the module dependencies and +# also supports manually loading kernel modules through rc.modules.local. +if [ -x /etc/rc.d/rc.modules -a -z "$container" ]; then + . /etc/rc.d/rc.modules +fi + +# Configure kernel parameters: +if [ -x /sbin/sysctl -a -r /etc/sysctl.conf -a -z "$container" ]; then + echo "Configuring kernel parameters: /sbin/sysctl -e --system" + /sbin/sysctl -e --system +elif [ -x /sbin/sysctl -a -z "$container" ]; then + echo "Configuring kernel parameters: /sbin/sysctl -e --system" + # Don't say "Applying /etc/sysctl.conf" or complain if the file doesn't exist + /sbin/sysctl -e --system 2> /dev/null | grep -v "Applying /etc/sysctl.conf" +fi + +# Check all the non-root filesystems: +if [ ! -r /etc/fastboot -a -z "$container" ]; then + echo "Checking non-root filesystems:" + /sbin/fsck $FORCEFSCK -C -R -A -a +fi + +# Mount usbfs only if it is found in /etc/fstab: +if [ -z "$container" ]; then + if grep -wq usbfs /proc/filesystems; then + if ! grep -wq usbfs /proc/mounts ; then + if grep -wq usbfs /etc/fstab; then + /sbin/mount -v /proc/bus/usb + fi + fi + fi +fi + +# Mount non-root file systems in fstab, but not NFS or SMB +# because TCP/IP is not yet configured, and not proc or sysfs +# because those have already been mounted. Also check that +# devpts is not already mounted before attempting to mount +# it. With a 2.6.x or newer kernel udev mounts devpts. +# We also need to wait a little bit to let USB and other +# hotplugged devices settle (sorry to slow down the boot): +if [ -z "$container" ]; then + echo "Mounting non-root local filesystems:" + sleep 3 + if /bin/grep -wq devpts /proc/mounts ; then + # This pipe after the mount command is just to convert the new + # mount verbose output back to the old format that contained + # more useful information: + /sbin/mount -a -v -t nonfs,nosmbfs,nocifs,noproc,nosysfs,nodevpts | grep successfully | cut -f 1 -d : | tr -d ' ' | while read dev ; do mount | grep "${dev} " ; done + else + /sbin/mount -a -v -t nonfs,nosmbfs,nocifs,noproc,nosysfs | grep successfully | cut -f 1 -d : | tr -d ' ' | while read dev ; do mount | grep "${dev} " ; done + fi +fi + +# Enable swapping again. This is needed in case a swapfile is used, +# as it can't be enabled until the filesystem it resides on has been +# mounted read-write. +if [ -z "$container" ]; then + /sbin/swapon -a 2> /dev/null +fi + +# Start cgmanager (or cgproxy in a container): +if [ -x /etc/rc.d/rc.cgmanager -a -d /sys/fs/cgroup ]; then + sh /etc/rc.d/rc.cgmanager start +fi + +# Clean up some temporary files: +rm -f /var/run/* /var/run/*/* /var/run/*/*/* /etc/nologin \ + /etc/dhcpc/*.pid /etc/forcefsck /etc/fastboot \ + /var/state/saslauthd/saslauthd.pid \ + /tmp/.Xauth* 1> /dev/null 2> /dev/null + ( cd /var/log/setup/tmp && rm -rf * ) + ( cd /tmp && rm -rf kde-[a-zA-Z]* ksocket-[a-zA-Z]* hsperfdata_[a-zA-Z]* plugtmp* ) + +# Clear /var/lock/subsys: +if [ -d /var/lock/subsys ]; then + rm -f /var/lock/subsys/* +fi + +# Create /tmp/{.ICE-unix,.X11-unix} if they are not present: +if [ ! -e /tmp/.ICE-unix ]; then + mkdir -p /tmp/.ICE-unix + chmod 1777 /tmp/.ICE-unix +fi +if [ ! -e /tmp/.X11-unix ]; then + mkdir -p /tmp/.X11-unix + chmod 1777 /tmp/.X11-unix +fi + +# Create a fresh utmp file: +touch /var/run/utmp +chown root:utmp /var/run/utmp +chmod 664 /var/run/utmp + +# Update the current kernel level in the /etc/motd (Message Of The Day) file, +# if the first line of that file begins with the word 'Linux'. +# You are free to modify the rest of the file as you see fit. +if [ -x /bin/sed ]; then + /bin/sed -i "{1s/^Linux.*/$(/bin/uname -sr)\./}" /etc/motd +fi + +# If there are SystemV init scripts for this runlevel, run them. +if [ -x /etc/rc.d/rc.sysvinit ]; then + . /etc/rc.d/rc.sysvinit +fi + +# Run serial port setup script: +# CAREFUL! This can make some systems hang if the rc.serial script isn't +# set up correctly. If this happens, you may have to edit the file from a +# boot disk, and/or set it as non-executable: +if [ -x /etc/rc.d/rc.serial -a -z "$container" ]; then + sh /etc/rc.d/rc.serial start +fi + +# Carry an entropy pool between reboots to improve randomness. +if [ -f /etc/random-seed ]; then + echo "Using /etc/random-seed to initialize /dev/urandom." + cat /etc/random-seed > /dev/urandom +fi +# Use the pool size from /proc, or 4096 bits: +if [ -r /proc/sys/kernel/random/poolsize ]; then + dd if=/dev/urandom of=/etc/random-seed count=1 bs=$(expr $(cat /proc/sys/kernel/random/poolsize) / 8) 2> /dev/null +else + dd if=/dev/urandom of=/etc/random-seed count=1 bs=512 2> /dev/null +fi +chmod 600 /etc/random-seed + diff --git a/source/ap/lxc/scripts/rc.S.orig b/source/ap/lxc/scripts/rc.S.orig new file mode 100644 index 00000000..20064e55 --- /dev/null +++ b/source/ap/lxc/scripts/rc.S.orig @@ -0,0 +1,445 @@ +#!/bin/sh +# +# /etc/rc.d/rc.S: System initialization script. +# +# Mostly written by: Patrick J. Volkerding, <volkerdi@slackware.com> +# + +PATH=/sbin:/usr/sbin:/bin:/usr/bin + +# Try to mount /proc: +/sbin/mount -v proc /proc -n -t proc 2> /dev/null + +# Mount sysfs next, if the kernel supports it: +if [ -d /sys ]; then + if grep -wq sysfs /proc/filesystems ; then + if ! grep -wq sysfs /proc/mounts ; then + /sbin/mount -v sysfs /sys -n -t sysfs + fi + fi +fi + +# If /run exists, mount a tmpfs on it (unless the +# initrd has already done so): +if [ -d /run ]; then + if ! grep -wq "tmpfs /run tmpfs" /proc/mounts ; then + /sbin/mount -v -n -t tmpfs tmpfs /run -o mode=0755 + fi +fi + +# Load the loop device kernel module: +if [ -x /etc/rc.d/rc.loop ]; then + . /etc/rc.d/rc.loop start +fi + +# Initialize udev to manage /dev entries and hotplugging. +# You may turn off udev by making the /etc/rc.d/rc.udev file non-executable +# or giving the "nohotplug" option at boot, but realize that if you turn off +# udev that you will have to load all the kernel modules that you need +# yourself (possibly in /etc/rc.d/rc.modules.local), and make any additional +# device nodes that you need in the /dev directory. Even USB and IEEE1394 +# devices will need to have the modules loaded by hand if udev is not used. +# So use it. :-) +if grep -wq sysfs /proc/mounts && grep -q devtmpfs /proc/filesystems ; then + if ! grep -wq nohotplug /proc/cmdline ; then + if [ -x /etc/rc.d/rc.udev ]; then + /bin/sh /etc/rc.d/rc.udev start + fi + 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 /bin/cut -a -x /bin/tail ]; 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="$(/bin/cut -f 1 /proc/cgroups | /bin/tail -n +2)" + 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 +# use LVM you must run /sbin/vgscan yourself the first time (and +# create some VGs and LVs). +# Create LVM lock/run directories: +mkdir -p -m 0700 /run/lvm /run/lock /run/lock/lvm +if [ -r /etc/lvmtab -o -d /etc/lvm/backup ]; then + echo "Initializing LVM (Logical Volume Manager):" + # Check for device-mapper support. + if ! grep -wq device-mapper /proc/devices ; then + # Try to load a device-mapper kernel module: + /sbin/modprobe -q dm-mod + fi + # Scan for new volume groups: + /sbin/vgscan --mknodes --ignorelockingfailure 2> /dev/null + if [ $? = 0 ]; then + # Make volume groups available to the kernel. + # This should also make logical volumes available. + /sbin/vgchange -ay --ignorelockingfailure + fi +fi + +# Open any volumes created by cryptsetup. +# +# Some notes on /etc/crypttab in Slackware: +# Only LUKS formatted volumes are supported (except for swap) +# crypttab follows the following format: +# <luks_name> <device> <password> <options> +# +# <luks_name>: This is the name of your LUKS volume. +# For example: crypt-home +# +# <device>: This is the device containing your LUKS volume. +# For example: /dev/sda2 +# +# <password>: This is either the volume password in plain text, or the name of +# a key file. Use 'none' to interactively enter password on boot. +# +# <options>: Comma-separated list of options. Note that there must be a +# password field for any options to be picked up (use a password of 'none' to +# get a password prompt at boot). The following options are supported: +# +# discard -- this will cause --allow-discards to be passed to the cryptsetup +# program while opening the LUKS volume. +# +# ro -- this will cause --readonly to be passed to the cryptsetup program while +# opening the LUKS volume. +# +# swap -- this option cannot be used with other options. The device given will +# be formatted as a new encrypted volume with a random key on boot, and used as +# swap. +# +if [ -f /etc/crypttab -a -x /sbin/cryptsetup ]; then + # First, check for device-mapper support. + if ! grep -wq device-mapper /proc/devices ; then + # If device-mapper exists as a module, try to load it. + # Try to load a device-mapper kernel module: + /sbin/modprobe -q dm-mod + fi + # NOTE: we only support LUKS formatted volumes (except for swap)! + cat /etc/crypttab | grep -v "^#" | grep -v "^$" | while read line; do + eval LUKSARRAY=( $line ) + LUKS="${LUKSARRAY[0]}" + DEV="${LUKSARRAY[1]}" + PASS="${LUKSARRAY[2]}" + OPTS="${LUKSARRAY[3]}" + LUKSOPTS="" + if echo $OPTS | grep -wq ro ; then LUKSOPTS="${LUKSOPTS} --readonly" ; fi + if echo $OPTS | grep -wq discard ; then LUKSOPTS="${LUKSOPTS} --allow-discards" ; fi + # Skip LUKS volumes that were already unlocked (in the initrd): + /sbin/cryptsetup status $LUKS 2>/dev/null | head -n 1 | grep -q "is active" && continue + if /sbin/cryptsetup isLuks $DEV 2>/dev/null ; then + if [ -z "${LUKSOPTS}" ]; then + echo "Unlocking LUKS encrypted volume '${LUKS}' on device '$DEV':" + else + echo "Unlocking LUKS encrypted volume '${LUKS}' on device '$DEV' with options '${LUKSOPTS}':" + fi + if [ -n "${PASS}" -a "${PASS}" != "none" ]; then + if [ -f "${PASS}" ]; then + # A password was given a key-file filename + /sbin/cryptsetup ${LUKSOPTS} --key-file=${PASS} luksOpen $DEV $LUKS + else + # A password was provided in plain text + echo "${PASS}" | /sbin/cryptsetup ${LUKSOPTS} luksOpen $DEV $LUKS + fi + else + # No password was given, or a password of 'none' was given + /sbin/cryptsetup ${LUKSOPTS} luksOpen $DEV $LUKS </dev/tty0 >/dev/tty0 2>&1 + fi + elif echo $OPTS | grep -wq swap ; then + # If any of the volumes is to be used as encrypted swap, + # then encrypt it using a random key and run mkswap: + echo "Creating encrypted swap volume '${LUKS}' on device '$DEV':" + /sbin/cryptsetup --cipher=aes --key-file=/dev/urandom --key-size=256 create $LUKS $DEV + mkswap /dev/mapper/$LUKS + fi + done +fi + +# Enable swapping: +/sbin/swapon -a 2> /dev/null + +# Start FUSE, if requested: +if [ -x /etc/rc.d/rc.fuse ]; then + sh /etc/rc.d/rc.fuse start +fi + +# Set the tick and frequency for the system clock. +# Default values are: TICK=10000 and FREQ=0 +TICK=10000 +FREQ=0 +# If there's a /etc/default/adjtimex config file, source it to override +# the default TICK and FREQ: +if [ -r /etc/default/adjtimex ]; then + . /etc/default/adjtimex +fi +if /sbin/adjtimex --tick $TICK --frequency $FREQ; then + echo "Setting the system clock rate: /sbin/adjtimex --tick $TICK --frequency $FREQ" +else + echo "Failed to set system clock with adjtimex, possibly invalid parameters? (TICK=$TICK FREQ=$FREQ)" +fi + +# Set the system time from the hardware clock using hwclock --hctosys. +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 " : rtc" /proc/ioports ; then + CLOCK_OPT="--directisa" + fi + if [ /etc/adjtime -nt /etc/hardwareclock ]; then + if grep -q "^LOCAL" /etc/adjtime ; then + echo -n "Setting system time from the hardware clock (localtime): " + else + echo -n "Setting system time from the hardware clock (UTC): " + fi + /sbin/hwclock $CLOCK_OPT --hctosys + elif grep -wq "^localtime" /etc/hardwareclock 2> /dev/null ; then + echo -n "Setting system time from the hardware clock (localtime): " + /sbin/hwclock $CLOCK_OPT --localtime --hctosys + else + echo -n "Setting system time from the hardware clock (UTC): " + /sbin/hwclock $CLOCK_OPT --utc --hctosys + fi + date +fi + +# Test to see if the root partition is read-only, like it ought to be. +READWRITE=no +if touch /fsrwtestfile 2>/dev/null; then + rm -f /fsrwtestfile + READWRITE=yes +else + echo "Testing root filesystem status: read-only filesystem" +fi + +# See if a forced filesystem check was requested at shutdown: +if [ -r /etc/forcefsck ]; then + FORCEFSCK="-f" +fi + +# Check the root filesystem: +if [ ! $READWRITE = yes ]; then + RETVAL=0 + if [ ! -r /etc/fastboot ]; then + echo "Checking root filesystem:" + /sbin/fsck $FORCEFSCK -C -a / + RETVAL=$? + fi + # An error code of 2 or higher will require a reboot. + if [ $RETVAL -ge 2 ]; then + # An error code equal to or greater than 4 means that some errors + # could not be corrected. This requires manual attention, so we + # offer a chance to try to fix the problem in single-user mode: + if [ $RETVAL -ge 4 ]; then + echo + echo "***********************************************************" + echo "*** An error occurred during the root filesystem check. ***" + echo "*** You will now be given a chance to log into the ***" + echo "*** system in single-user mode to fix the problem. ***" + echo "*** ***" + echo "*** If you are using the ext2 filesystem, running ***" + echo "*** 'e2fsck -v -y <partition>' might help. ***" + echo "***********************************************************" + echo + echo "Once you exit the single-user shell, the system will reboot." + echo + PS1="(Repair filesystem) \#"; export PS1 + sulogin + else # With an error code of 2 or 3, reboot the machine automatically: + echo + echo "***********************************" + echo "*** The filesystem was changed. ***" + echo "*** The system will now reboot. ***" + echo "***********************************" + echo + fi + echo "Unmounting file systems." + /sbin/umount -a -r + /sbin/mount -n -o remount,ro / + echo "Rebooting system." + sleep 2 + reboot -f + fi + # Remount the root filesystem in read-write mode + echo "Remounting root device with read-write enabled." + /sbin/mount -w -v -n -o remount / + if [ $? -gt 0 ] ; then + echo "FATAL: Attempt to remount root device as read-write failed! This is going to" + echo "cause serious problems." + fi +else + echo "Testing root filesystem status: read-write filesystem" + echo + echo "ERROR: Root partition has already been mounted read-write. Cannot check!" + echo + echo "For filesystem checking to work properly, your system must initially mount" + echo "the root partition as read only. If you're booting with LILO, add a line:" + echo + echo " read-only" + echo + echo "to the Linux section in your /etc/lilo.conf and type 'lilo' to reinstall it." +fi # Done checking root filesystem + + +# Any /etc/mtab that exists here is old, so we start with a new one: +/bin/rm -f /etc/mtab{,~,.tmp} && /bin/touch /etc/mtab + +# Add entry for / to /etc/mtab: +/sbin/mount -f -w / + +# Add /proc, /sys, and /dev/shm mounts to /etc/mtab: +if [ -d /proc/sys ]; then + /sbin/mount -f -t proc proc /proc +fi +if [ -d /sys/bus ]; then + /sbin/mount -f -t sysfs sysfs /sys +fi +if grep -q '^[^ ]\+ /dev/shm ' /proc/mounts 2> /dev/null ; then + /sbin/mount -f -t tmpfs tmpfs /dev/shm +fi + +# Configure ISA Plug-and-Play devices: +if [ -r /etc/isapnp.conf ]; then + if [ -x /sbin/isapnp ]; then + /sbin/isapnp /etc/isapnp.conf + fi +fi + +# Run the kernel module script. This updates the module dependencies and +# also supports manually loading kernel modules through rc.modules.local. +if [ -x /etc/rc.d/rc.modules ]; then + . /etc/rc.d/rc.modules +fi + +# Configure kernel parameters: +if [ -x /sbin/sysctl -a -r /etc/sysctl.conf ]; then + echo "Configuring kernel parameters: /sbin/sysctl -e --system" + /sbin/sysctl -e --system +elif [ -x /sbin/sysctl ]; then + echo "Configuring kernel parameters: /sbin/sysctl -e --system" + # Don't say "Applying /etc/sysctl.conf" or complain if the file doesn't exist + /sbin/sysctl -e --system 2> /dev/null | grep -v "Applying /etc/sysctl.conf" +fi + +# Check all the non-root filesystems: +if [ ! -r /etc/fastboot ]; then + echo "Checking non-root filesystems:" + /sbin/fsck $FORCEFSCK -C -R -A -a +fi + +# Mount usbfs only if it is found in /etc/fstab: +if grep -wq usbfs /proc/filesystems; then + if ! grep -wq usbfs /proc/mounts ; then + if grep -wq usbfs /etc/fstab; then + /sbin/mount -v /proc/bus/usb + fi + fi +fi + +# Mount non-root file systems in fstab, but not NFS or SMB +# because TCP/IP is not yet configured, and not proc or sysfs +# because those have already been mounted. Also check that +# devpts is not already mounted before attempting to mount +# it. With a 2.6.x or newer kernel udev mounts devpts. +# We also need to wait a little bit to let USB and other +# hotplugged devices settle (sorry to slow down the boot): +echo "Mounting non-root local filesystems:" +sleep 3 +if /bin/grep -wq devpts /proc/mounts ; then + # This pipe after the mount command is just to convert the new + # mount verbose output back to the old format that contained + # more useful information: + /sbin/mount -a -v -t nonfs,nosmbfs,nocifs,noproc,nosysfs,nodevpts | grep successfully | cut -f 1 -d : | tr -d ' ' | while read dev ; do mount | grep "${dev} " ; done +else + /sbin/mount -a -v -t nonfs,nosmbfs,nocifs,noproc,nosysfs | grep successfully | cut -f 1 -d : | tr -d ' ' | while read dev ; do mount | grep "${dev} " ; done +fi + +# Enable swapping again. This is needed in case a swapfile is used, +# as it can't be enabled until the filesystem it resides on has been +# mounted read-write. +/sbin/swapon -a 2> /dev/null + +# Start cgmanager (or cgproxy in a container): +if [ -x /etc/rc.d/rc.cgmanager -a -d /sys/fs/cgroup ]; then + sh /etc/rc.d/rc.cgmanager start +fi + +# Clean up some temporary files: +rm -f /var/run/* /var/run/*/* /var/run/*/*/* /etc/nologin \ + /etc/dhcpc/*.pid /etc/forcefsck /etc/fastboot \ + /var/state/saslauthd/saslauthd.pid \ + /tmp/.Xauth* 1> /dev/null 2> /dev/null + ( cd /var/log/setup/tmp && rm -rf * ) + ( cd /tmp && rm -rf kde-[a-zA-Z]* ksocket-[a-zA-Z]* hsperfdata_[a-zA-Z]* plugtmp* ) + +# Clear /var/lock/subsys: +if [ -d /var/lock/subsys ]; then + rm -f /var/lock/subsys/* +fi + +# Create /tmp/{.ICE-unix,.X11-unix} if they are not present: +if [ ! -e /tmp/.ICE-unix ]; then + mkdir -p /tmp/.ICE-unix + chmod 1777 /tmp/.ICE-unix +fi +if [ ! -e /tmp/.X11-unix ]; then + mkdir -p /tmp/.X11-unix + chmod 1777 /tmp/.X11-unix +fi + +# Create a fresh utmp file: +touch /var/run/utmp +chown root:utmp /var/run/utmp +chmod 664 /var/run/utmp + +# Update the current kernel level in the /etc/motd (Message Of The Day) file, +# if the first line of that file begins with the word 'Linux'. +# You are free to modify the rest of the file as you see fit. +if [ -x /bin/sed ]; then + /bin/sed -i "{1s/^Linux.*/$(/bin/uname -sr)\./}" /etc/motd +fi + +# If there are SystemV init scripts for this runlevel, run them. +if [ -x /etc/rc.d/rc.sysvinit ]; then + . /etc/rc.d/rc.sysvinit +fi + +# Run serial port setup script: +# CAREFUL! This can make some systems hang if the rc.serial script isn't +# set up correctly. If this happens, you may have to edit the file from a +# boot disk, and/or set it as non-executable: +if [ -x /etc/rc.d/rc.serial ]; then + sh /etc/rc.d/rc.serial start +fi + +# Carry an entropy pool between reboots to improve randomness. +if [ -f /etc/random-seed ]; then + echo "Using /etc/random-seed to initialize /dev/urandom." + cat /etc/random-seed > /dev/urandom +fi +# Use the pool size from /proc, or 4096 bits: +if [ -r /proc/sys/kernel/random/poolsize ]; then + dd if=/dev/urandom of=/etc/random-seed count=1 bs=$(expr $(cat /proc/sys/kernel/random/poolsize) / 8) 2> /dev/null +else + dd if=/dev/urandom of=/etc/random-seed count=1 bs=512 2> /dev/null +fi +chmod 600 /etc/random-seed + diff --git a/source/ap/lxc/scripts/rc.inet1.lxc b/source/ap/lxc/scripts/rc.inet1.lxc new file mode 100644 index 00000000..2306a2fc --- /dev/null +++ b/source/ap/lxc/scripts/rc.inet1.lxc @@ -0,0 +1,331 @@ +#! /bin/sh +# /etc/rc.d/rc.inet1 +# This script is used to bring up the various network interfaces. +# +# @(#)/etc/rc.d/rc.inet1 10.2 Sun Jul 24 12:45:56 PDT 2005 (pjv) + +# Set $container variable since this is a modified version of rc.inet1 with +# changes for running in an lxc container. A check to see if this variable +# is set will be used to skip parts of the script that we don't want to run +# in a container. Thanks to Matteo Bernardini <ponce@slackbuilds.org> and +# Chris Willing for the initial work making this script lxc compatible. +container="lxc" + +############################ +# READ NETWORK CONFIG FILE # +############################ + +# Get the configuration information from /etc/rc.d/rc.inet1.conf: +. /etc/rc.d/rc.inet1.conf + +########### +# LOGGING # +########### + +# If possible, log events in /var/log/messages: +if [ -f /var/run/syslogd.pid -a -x /usr/bin/logger ]; then + LOGGER=/usr/bin/logger +else # output to stdout/stderr: + LOGGER=/bin/cat +fi + +############################ +# DETERMINE INTERFACE LIST # +############################ + +# Compose a list of interfaces from /etc/rc.d/rc.inet1.conf (with a maximum +# of 6 interfaces, but you can easily enlarge the interface limit +# - send me a picture of such a box :-). +# If a value for IFNAME[n] is not set, we assume it is an eth'n' interface. +# This way, the new script is compatible with older rc.inet1.conf files. +# The IFNAME array will be used to determine which interfaces to bring up/down. +MAXNICS=${MAXNICS:-6} +i=0 +while [ $i -lt $MAXNICS ]; +do + IFNAME[$i]=${IFNAME[$i]:=eth${i}} + i=$(($i+1)) +done +if [ "$DEBUG_ETH_UP" = "yes" ]; then + echo "/etc/rc.d/rc.inet1: List of interfaces: '${IFNAME[@]}'" | $LOGGER +fi + +###################### +# LOOPBACK FUNCTIONS # +###################### + +# Function to bring up the loopback interface. If loopback is +# already up, do nothing. +lo_up() { + if grep lo: /proc/net/dev 1> /dev/null ; then + if ! /sbin/ifconfig | grep "^lo" 1> /dev/null ; then + echo "/etc/rc.d/rc.inet1: /sbin/ifconfig lo 127.0.0.1" | $LOGGER + /sbin/ifconfig lo 127.0.0.1 + echo "/etc/rc.d/rc.inet1: /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo" | $LOGGER + /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo + fi + fi +} + +# Function to take down the loopback interface: +lo_down() { + if grep lo: /proc/net/dev 1> /dev/null ; then + echo "/etc/rc.d/rc.inet1: /sbin/ifconfig lo down" | $LOGGER + /sbin/ifconfig lo down + fi +} + +####################### +# INTERFACE FUNCTIONS # +####################### + +# Function to assemble a bridge interface. +br_open() { + # argument is 'i' - the position of this interface in the IFNAME array. + /sbin/brctl addbr ${IFNAME[$1]} + for BRIF in $(echo ${BRNICS[$1]}); do + /sbin/ifconfig $BRIF down + /sbin/ifconfig $BRIF 0.0.0.0 promisc up + /sbin/brctl addif ${IFNAME[$1]} $BRIF + done +} + +# Function to disassemble a bridge interface. +br_close() { + # argument is 'i' - the position of this interface in the IFNAME array. + #for BRIF in $(echo ${BRNICS[$1]}); do + for BRIF in $(ls --indicator-style=none /sys/class/net/${IFNAME[$1]}/brif/) + do + /sbin/brctl delif ${IFNAME[$1]} $BRIF + done + /sbin/ifconfig ${IFNAME[$1]} down + /sbin/brctl delbr ${IFNAME[$1]} +} + +# Function to bring up a network interface. If the interface is +# already up or does not yet exist (perhaps because the kernel driver +# is not loaded yet), do nothing. +if_up() { + # Determine position 'i' of this interface in the IFNAME array: + i=0 + while [ $i -lt $MAXNICS ]; do + [ "${IFNAME[$i]}" = "${1}" ] && break + i=$(($i+1)) + done + + if [ -z "$container" ]; then + # If the interface is a bridge, then create it first: + [ -n "${BRNICS[$i]}" ] && br_open $i + # If the interface isn't in the kernel yet (but there's an alias for it in + # modules.conf), then it should be loaded first: + if ! grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then # no interface yet + if /sbin/modprobe -c | grep -v "^#" | grep -w "alias ${1}" | grep -vw "alias ${1} off" > /dev/null ; then + echo "/etc/rc.d/rc.inet1: /sbin/modprobe ${1}" | $LOGGER + /sbin/modprobe ${1} + fi + fi + fi # end check container + + if grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then # interface exists + if ! /sbin/ifconfig | grep -w "${1}" 1>/dev/null || \ + ! /sbin/ifconfig ${1} | grep -w inet 1> /dev/null ; then # interface not up or not configured + if [ ! "${HWADDR[$i]}" = "" ]; then # Set hardware address _before_ the interface goes up: + echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} hw ether ${HWADDR[$i]}" | $LOGGER + /sbin/ifconfig ${1} hw ether ${HWADDR[$i]} + fi + if [ ! "${MTU[$i]}" = "" ]; then # Set MTU to something else than 1500 + echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} mtu ${MTU[$i]}" | $LOGGER + /sbin/ifconfig ${1} mtu ${MTU[$i]} + fi + if [ -x /etc/rc.d/rc.wireless ]; then + . /etc/rc.d/rc.wireless ${1} start # Initialize any wireless parameters + fi + if [ "${USE_DHCP[$i]}" = "yes" ]; then # use DHCP to bring interface up + # Clear DHCP_OPTIONS before adding new options to it: + unset DHCP_OPTIONS + # Set DHCP_OPTIONS for this interface: + [ ${DHCP_HOSTNAME[$i]} ] && DHCP_OPTIONS="-h ${DHCP_HOSTNAME[$i]}" + [ "${DHCP_KEEPRESOLV[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -C resolv.conf" + [ "${DHCP_KEEPNTP[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -C ntp.conf" + [ "${DHCP_KEEPGW[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -G" + [ "${DHCP_DEBUG[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -d" + [ "${DHCP_NOIPV4LL[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -L" + [ ${DHCP_IPADDR[$i]} ] && DHCP_OPTIONS="$DHCP_OPTIONS -r ${DHCP_IPADDR[$i]}" + echo "Polling for DHCP server on interface ${1}:" + # If you set a timeout, you get one, even if the kernel doesn't think that + # your device is connected, in case /sys isn't right (which it usually isn't + # except right after the device is loaded, when it usually is): + #### (start commented out) + # This is deactivated for now since the kernel has been returning incorrect + # results concerning whether the interface carrier is detected. + #if [ "${DHCP_TIMEOUT[$i]}" = "" ]; then + # ifconfig ${1} up && sleep 1 + # CONNSTATUS="$(cat /sys/class/net/${1}/carrier 2> /dev/null)" + # ifconfig ${1} down + # if [ "$CONNSTATUS" = "0" ]; then + # # The kernel has just told us the cable isn't even plugged in, but we will + # # give any DHCP server a short chance to reply anyway: + # echo "No carrier detected on ${1}. Reducing DHCP timeout to 10 seconds." + # DHCP_TIMEOUT[$i]=10 + # fi + #fi + #### (end commented out) + # 10 seconds should be a reasonable default DHCP timeout. 30 was too much. + echo "/etc/rc.d/rc.inet1: /sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1}" | $LOGGER + /sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1} + else # bring up interface using a static IP address + if [ ! "${IPADDR[$i]}" = "" ]; then # skip unconfigured interfaces + # Determine broadcast address from the IP address and netmask: + BROADCAST[$i]=`/bin/ipmask ${NETMASK[$i]} ${IPADDR[$i]}|cut -f1 -d' '` + # Set up the network card: + echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} ${IPADDR[$i]} broadcast ${BROADCAST[$i]} netmask ${NETMASK[$i]}" | $LOGGER + /sbin/ifconfig ${1} ${IPADDR[$i]} broadcast ${BROADCAST[$i]} netmask ${NETMASK[$i]} + else + if [ "$DEBUG_ETH_UP" = "yes" ]; then + echo "/etc/rc.d/rc.inet1: ${1} interface is not configured in /etc/rc.d/rc.inet1.conf" | $LOGGER + fi + fi + fi + else + if [ "$DEBUG_ETH_UP" = "yes" ]; then + echo "/etc/rc.d/rc.inet1: ${1} is already up, skipping" | $LOGGER + fi + fi + else + if [ "$DEBUG_ETH_UP" = "yes" ]; then + echo "/etc/rc.d/rc.inet1: ${1} interface does not exist (yet)" | $LOGGER + fi + fi +} + +# Function to take down a network interface: +if_down() { + # Determine position 'i' of this interface in the IFNAME array: + i=0 + while [ $i -lt $MAXNICS ]; do + [ "${IFNAME[$i]}" = "${1}" ] && break + i=$(($i+1)) + done + if grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then + if [ "${USE_DHCP[$i]}" = "yes" ]; then + echo "/etc/rc.d/rc.inet1: /sbin/dhcpcd -k -d ${1}" | $LOGGER + /sbin/dhcpcd -k -d ${1} 2> /dev/null || /sbin/ifconfig ${1} down + sleep 1 + else + echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} down" | $LOGGER + /sbin/ifconfig ${1} down + fi + if [ -x /etc/rc.d/rc.wireless ]; then + . /etc/rc.d/rc.wireless ${1} stop # Kill wireless daemons if any. + fi + # If the interface is a bridge, then destroy it now: + if [ -n "${BRNICS[$i]}" ]; then + br_close $i + fi + fi +} + +##################### +# GATEWAY FUNCTIONS # +##################### + +# Function to bring up the gateway if there is not yet a default route: +gateway_up() { + if ! /sbin/route -n | grep "^0.0.0.0" 1> /dev/null ; then + if [ ! "$GATEWAY" = "" ]; then + echo "/etc/rc.d/rc.inet1: /sbin/route add default gw ${GATEWAY} metric 1" | $LOGGER + /sbin/route add default gw ${GATEWAY} metric 1 2>&1 | $LOGGER + fi + fi +} + +# Function to take down an existing default gateway: +gateway_down() { + if /sbin/route -n | grep "^0.0.0.0" 1> /dev/null ; then + echo "/etc/rc.d/rc.inet1: /sbin/route del default" | $LOGGER + /sbin/route del default + fi +} + +# Function to start the network: +start() { + lo_up + for i in ${IFNAME[@]} ; do + if_up $i + done + gateway_up +} + +# Function to stop the network: +stop() { + gateway_down + for i in ${IFNAME[@]} ; do + if_down $i + done + lo_down +} + + +############ +### MAIN ### +############ + +case "$1" in +'start') # "start" brings up all configured interfaces: + start + ;; +'stop') # "stop" takes down all configured interfaces: + stop + ;; +'restart') # "restart" restarts the network: + stop + start + ;; +'lo_start') # Start the loopback interface: + lo_up + ;; +*_start) # Example: "eth1_start" will start the specified interface 'eth1' + INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` + if_up $INTERFACE + gateway_up + ;; +'lo_stop') # Stop the loopback interface: + lo_down + ;; +*_stop) # Example: "eth0_stop" will stop the specified interface 'eth0' + INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` + if_down $INTERFACE + ;; +*_restart) # Example: "wlan0_restart" will take 'wlan0' down and up again + INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` + if_down $INTERFACE + sleep 1 + if_up $INTERFACE + gateway_up + ;; +'up') # "up" does the same thing as "start" + start + ;; +'down') # "down" does the same thing as "stop" + stop + ;; +'lo_up') # Start the loopback interface: + lo_up + ;; +*_up) # "*_up" does the same thing as "*_start" + INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` + if_up $INTERFACE + gateway_up + ;; +'lo_down') # Stop the loopback interface: + lo_down + ;; +*_down) # "*_down" does the same thing as "*_stop" + INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` + if_down $INTERFACE + ;; +*) # The default is to bring up all configured interfaces: + start +esac + +# End of /etc/rc.d/rc.inet1 diff --git a/source/ap/lxc/scripts/rc.inet1.orig b/source/ap/lxc/scripts/rc.inet1.orig new file mode 100644 index 00000000..f2d85a6d --- /dev/null +++ b/source/ap/lxc/scripts/rc.inet1.orig @@ -0,0 +1,320 @@ +#! /bin/sh +# /etc/rc.d/rc.inet1 +# This script is used to bring up the various network interfaces. +# +# @(#)/etc/rc.d/rc.inet1 10.2 Sun Jul 24 12:45:56 PDT 2005 (pjv) + +############################ +# READ NETWORK CONFIG FILE # +############################ + +# Get the configuration information from /etc/rc.d/rc.inet1.conf: +. /etc/rc.d/rc.inet1.conf + +########### +# LOGGING # +########### + +# If possible, log events in /var/log/messages: +if [ -f /var/run/syslogd.pid -a -x /usr/bin/logger ]; then + LOGGER=/usr/bin/logger +else # output to stdout/stderr: + LOGGER=/bin/cat +fi + +############################ +# DETERMINE INTERFACE LIST # +############################ + +# Compose a list of interfaces from /etc/rc.d/rc.inet1.conf (with a maximum +# of 6 interfaces, but you can easily enlarge the interface limit +# - send me a picture of such a box :-). +# If a value for IFNAME[n] is not set, we assume it is an eth'n' interface. +# This way, the new script is compatible with older rc.inet1.conf files. +# The IFNAME array will be used to determine which interfaces to bring up/down. +MAXNICS=${MAXNICS:-6} +i=0 +while [ $i -lt $MAXNICS ]; +do + IFNAME[$i]=${IFNAME[$i]:=eth${i}} + i=$(($i+1)) +done +if [ "$DEBUG_ETH_UP" = "yes" ]; then + echo "/etc/rc.d/rc.inet1: List of interfaces: '${IFNAME[@]}'" | $LOGGER +fi + +###################### +# LOOPBACK FUNCTIONS # +###################### + +# Function to bring up the loopback interface. If loopback is +# already up, do nothing. +lo_up() { + if grep lo: /proc/net/dev 1> /dev/null ; then + if ! /sbin/ifconfig | grep "^lo" 1> /dev/null ; then + echo "/etc/rc.d/rc.inet1: /sbin/ifconfig lo 127.0.0.1" | $LOGGER + /sbin/ifconfig lo 127.0.0.1 + echo "/etc/rc.d/rc.inet1: /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo" | $LOGGER + /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo + fi + fi +} + +# Function to take down the loopback interface: +lo_down() { + if grep lo: /proc/net/dev 1> /dev/null ; then + echo "/etc/rc.d/rc.inet1: /sbin/ifconfig lo down" | $LOGGER + /sbin/ifconfig lo down + fi +} + +####################### +# INTERFACE FUNCTIONS # +####################### + +# Function to assemble a bridge interface. +br_open() { + # argument is 'i' - the position of this interface in the IFNAME array. + /sbin/brctl addbr ${IFNAME[$1]} + for BRIF in $(echo ${BRNICS[$1]}); do + /sbin/ifconfig $BRIF down + /sbin/ifconfig $BRIF 0.0.0.0 promisc up + /sbin/brctl addif ${IFNAME[$1]} $BRIF + done +} + +# Function to disassemble a bridge interface. +br_close() { + # argument is 'i' - the position of this interface in the IFNAME array. + #for BRIF in $(echo ${BRNICS[$1]}); do + for BRIF in $(ls --indicator-style=none /sys/class/net/${IFNAME[$1]}/brif/) + do + /sbin/brctl delif ${IFNAME[$1]} $BRIF + done + /sbin/ifconfig ${IFNAME[$1]} down + /sbin/brctl delbr ${IFNAME[$1]} +} + +# Function to bring up a network interface. If the interface is +# already up or does not yet exist (perhaps because the kernel driver +# is not loaded yet), do nothing. +if_up() { + # Determine position 'i' of this interface in the IFNAME array: + i=0 + while [ $i -lt $MAXNICS ]; do + [ "${IFNAME[$i]}" = "${1}" ] && break + i=$(($i+1)) + done + # If the interface is a bridge, then create it first: + [ -n "${BRNICS[$i]}" ] && br_open $i + # If the interface isn't in the kernel yet (but there's an alias for it in + # modules.conf), then it should be loaded first: + if ! grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then # no interface yet + if /sbin/modprobe -c | grep -v "^#" | grep -w "alias ${1}" | grep -vw "alias ${1} off" > /dev/null ; then + echo "/etc/rc.d/rc.inet1: /sbin/modprobe ${1}" | $LOGGER + /sbin/modprobe ${1} + fi + fi + if grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then # interface exists + if ! /sbin/ifconfig | grep -w "${1}" 1>/dev/null || \ + ! /sbin/ifconfig ${1} | grep -w inet 1> /dev/null ; then # interface not up or not configured + if [ ! "${HWADDR[$i]}" = "" ]; then # Set hardware address _before_ the interface goes up: + echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} hw ether ${HWADDR[$i]}" | $LOGGER + /sbin/ifconfig ${1} hw ether ${HWADDR[$i]} + fi + if [ ! "${MTU[$i]}" = "" ]; then # Set MTU to something else than 1500 + echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} mtu ${MTU[$i]}" | $LOGGER + /sbin/ifconfig ${1} mtu ${MTU[$i]} + fi + if [ -x /etc/rc.d/rc.wireless ]; then + . /etc/rc.d/rc.wireless ${1} start # Initialize any wireless parameters + fi + if [ "${USE_DHCP[$i]}" = "yes" ]; then # use DHCP to bring interface up + # Clear DHCP_OPTIONS before adding new options to it: + unset DHCP_OPTIONS + # Set DHCP_OPTIONS for this interface: + [ ${DHCP_HOSTNAME[$i]} ] && DHCP_OPTIONS="-h ${DHCP_HOSTNAME[$i]}" + [ "${DHCP_KEEPRESOLV[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -C resolv.conf" + [ "${DHCP_KEEPNTP[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -C ntp.conf" + [ "${DHCP_KEEPGW[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -G" + [ "${DHCP_DEBUG[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -d" + [ "${DHCP_NOIPV4LL[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -L" + [ ${DHCP_IPADDR[$i]} ] && DHCP_OPTIONS="$DHCP_OPTIONS -r ${DHCP_IPADDR[$i]}" + echo "Polling for DHCP server on interface ${1}:" + # If you set a timeout, you get one, even if the kernel doesn't think that + # your device is connected, in case /sys isn't right (which it usually isn't + # except right after the device is loaded, when it usually is): + #### (start commented out) + # This is deactivated for now since the kernel has been returning incorrect + # results concerning whether the interface carrier is detected. + #if [ "${DHCP_TIMEOUT[$i]}" = "" ]; then + # ifconfig ${1} up && sleep 1 + # CONNSTATUS="$(cat /sys/class/net/${1}/carrier 2> /dev/null)" + # ifconfig ${1} down + # if [ "$CONNSTATUS" = "0" ]; then + # # The kernel has just told us the cable isn't even plugged in, but we will + # # give any DHCP server a short chance to reply anyway: + # echo "No carrier detected on ${1}. Reducing DHCP timeout to 10 seconds." + # DHCP_TIMEOUT[$i]=10 + # fi + #fi + #### (end commented out) + # 10 seconds should be a reasonable default DHCP timeout. 30 was too much. + echo "/etc/rc.d/rc.inet1: /sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1}" | $LOGGER + /sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1} + else # bring up interface using a static IP address + if [ ! "${IPADDR[$i]}" = "" ]; then # skip unconfigured interfaces + # Determine broadcast address from the IP address and netmask: + BROADCAST[$i]=`/bin/ipmask ${NETMASK[$i]} ${IPADDR[$i]}|cut -f1 -d' '` + # Set up the network card: + echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} ${IPADDR[$i]} broadcast ${BROADCAST[$i]} netmask ${NETMASK[$i]}" | $LOGGER + /sbin/ifconfig ${1} ${IPADDR[$i]} broadcast ${BROADCAST[$i]} netmask ${NETMASK[$i]} + else + if [ "$DEBUG_ETH_UP" = "yes" ]; then + echo "/etc/rc.d/rc.inet1: ${1} interface is not configured in /etc/rc.d/rc.inet1.conf" | $LOGGER + fi + fi + fi + else + if [ "$DEBUG_ETH_UP" = "yes" ]; then + echo "/etc/rc.d/rc.inet1: ${1} is already up, skipping" | $LOGGER + fi + fi + else + if [ "$DEBUG_ETH_UP" = "yes" ]; then + echo "/etc/rc.d/rc.inet1: ${1} interface does not exist (yet)" | $LOGGER + fi + fi +} + +# Function to take down a network interface: +if_down() { + # Determine position 'i' of this interface in the IFNAME array: + i=0 + while [ $i -lt $MAXNICS ]; do + [ "${IFNAME[$i]}" = "${1}" ] && break + i=$(($i+1)) + done + if grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then + if [ "${USE_DHCP[$i]}" = "yes" ]; then + echo "/etc/rc.d/rc.inet1: /sbin/dhcpcd -k -d ${1}" | $LOGGER + /sbin/dhcpcd -k -d ${1} 2> /dev/null || /sbin/ifconfig ${1} down + sleep 1 + else + echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} down" | $LOGGER + /sbin/ifconfig ${1} down + fi + if [ -x /etc/rc.d/rc.wireless ]; then + . /etc/rc.d/rc.wireless ${1} stop # Kill wireless daemons if any. + fi + # If the interface is a bridge, then destroy it now: + if [ -n "${BRNICS[$i]}" ]; then + br_close $i + fi + fi +} + +##################### +# GATEWAY FUNCTIONS # +##################### + +# Function to bring up the gateway if there is not yet a default route: +gateway_up() { + if ! /sbin/route -n | grep "^0.0.0.0" 1> /dev/null ; then + if [ ! "$GATEWAY" = "" ]; then + echo "/etc/rc.d/rc.inet1: /sbin/route add default gw ${GATEWAY} metric 1" | $LOGGER + /sbin/route add default gw ${GATEWAY} metric 1 2>&1 | $LOGGER + fi + fi +} + +# Function to take down an existing default gateway: +gateway_down() { + if /sbin/route -n | grep "^0.0.0.0" 1> /dev/null ; then + echo "/etc/rc.d/rc.inet1: /sbin/route del default" | $LOGGER + /sbin/route del default + fi +} + +# Function to start the network: +start() { + lo_up + for i in ${IFNAME[@]} ; do + if_up $i + done + gateway_up +} + +# Function to stop the network: +stop() { + gateway_down + for i in ${IFNAME[@]} ; do + if_down $i + done + lo_down +} + + +############ +### MAIN ### +############ + +case "$1" in +'start') # "start" brings up all configured interfaces: + start + ;; +'stop') # "stop" takes down all configured interfaces: + stop + ;; +'restart') # "restart" restarts the network: + stop + start + ;; +'lo_start') # Start the loopback interface: + lo_up + ;; +*_start) # Example: "eth1_start" will start the specified interface 'eth1' + INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` + if_up $INTERFACE + gateway_up + ;; +'lo_stop') # Stop the loopback interface: + lo_down + ;; +*_stop) # Example: "eth0_stop" will stop the specified interface 'eth0' + INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` + if_down $INTERFACE + ;; +*_restart) # Example: "wlan0_restart" will take 'wlan0' down and up again + INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` + if_down $INTERFACE + sleep 1 + if_up $INTERFACE + gateway_up + ;; +'up') # "up" does the same thing as "start" + start + ;; +'down') # "down" does the same thing as "stop" + stop + ;; +'lo_up') # Start the loopback interface: + lo_up + ;; +*_up) # "*_up" does the same thing as "*_start" + INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` + if_up $INTERFACE + gateway_up + ;; +'lo_down') # Stop the loopback interface: + lo_down + ;; +*_down) # "*_down" does the same thing as "*_stop" + INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` + if_down $INTERFACE + ;; +*) # The default is to bring up all configured interfaces: + start +esac + +# End of /etc/rc.d/rc.inet1 |