summaryrefslogtreecommitdiffstats
path: root/source/ap/lxc/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'source/ap/lxc/scripts')
-rw-r--r--source/ap/lxc/scripts/README11
-rw-r--r--source/ap/lxc/scripts/rc.6.lxc316
-rw-r--r--source/ap/lxc/scripts/rc.6.orig299
-rw-r--r--source/ap/lxc/scripts/rc.M.lxc397
-rw-r--r--source/ap/lxc/scripts/rc.M.orig386
-rw-r--r--source/ap/lxc/scripts/rc.S.lxc474
-rw-r--r--source/ap/lxc/scripts/rc.S.orig445
-rw-r--r--source/ap/lxc/scripts/rc.inet1.lxc331
-rw-r--r--source/ap/lxc/scripts/rc.inet1.orig320
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 000000000..f7d1f5c7d
--- /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 000000000..5dde949a8
--- /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 000000000..76895aca8
--- /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 000000000..a86eb62dd
--- /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 000000000..1d480cac9
--- /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 000000000..eb804e878
--- /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 000000000..20064e558
--- /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 000000000..2306a2fc9
--- /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 000000000..f2d85a6d0
--- /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