diff options
author | Patrick J Volkerding <volkerdi@slackware.com> | 2016-06-30 20:26:57 +0000 |
---|---|---|
committer | Eric Hameleers <alien@slackware.com> | 2018-05-31 23:31:18 +0200 |
commit | d31c50870d0bee042ce660e445c9294a59a3a65b (patch) | |
tree | 6bfc0de3c95267b401b620c2c67859557dc60f97 /source/a/sysvinit-scripts/scripts/rc.S | |
parent | 76fc4757ac91ac7947a01fb7b53dddf9a78a01d1 (diff) | |
download | current-d31c50870d0bee042ce660e445c9294a59a3a65b.tar.gz |
Slackware 14.2slackware-14.2
Thu Jun 30 20:26:57 UTC 2016
Slackware 14.2 x86_64 stable is released!
The long development cycle (the Linux community has lately been living in
"interesting times", as they say) is finally behind us, and we're proud to
announce the release of Slackware 14.2. The new release brings many updates
and modern tools, has switched from udev to eudev (no systemd), and adds
well over a hundred new packages to the system. Thanks to the team, the
upstream developers, the dedicated Slackware community, and everyone else
who pitched in to help make this release a reality.
The ISOs are off to be replicated, a 6 CD-ROM 32-bit set and a dual-sided
32-bit/64-bit x86/x86_64 DVD. Please consider supporting the Slackware
project by picking up a copy from store.slackware.com. We're taking
pre-orders now, and offer a discount if you sign up for a subscription.
Have fun! :-)
Diffstat (limited to 'source/a/sysvinit-scripts/scripts/rc.S')
-rw-r--r-- | source/a/sysvinit-scripts/scripts/rc.S | 193 |
1 files changed, 113 insertions, 80 deletions
diff --git a/source/a/sysvinit-scripts/scripts/rc.S b/source/a/sysvinit-scripts/scripts/rc.S index 7b152e90..20064e55 100644 --- a/source/a/sysvinit-scripts/scripts/rc.S +++ b/source/a/sysvinit-scripts/scripts/rc.S @@ -32,14 +32,14 @@ if [ -x /etc/rc.d/rc.loop ]; then . /etc/rc.d/rc.loop start fi -# Initialize udev to manage /dev entries and hotplugging for 3.x kernels. +# 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, which does not promise to list -# all of them), 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. :-) +# 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 @@ -53,11 +53,11 @@ if grep -wq cgroup /proc/filesystems ; then if [ -d /sys/fs/cgroup ]; then # See linux-*/Documentation/cgroups/cgroups.txt (section 1.6) # Check if we have some tools to autodetect the available cgroup controllers - if [ -x /usr/bin/lssubsys -a -x /usr/bin/tr -a -x /usr/bin/sed ]; then + 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="$(lssubsys -a 2>/dev/null | tr '\n' ' ' | sed s/.$//)" + 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 @@ -73,6 +73,7 @@ if grep -wq cgroup /proc/filesystems ; then 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 @@ -96,7 +97,36 @@ if [ -r /etc/lvmtab -o -d /etc/lvm/backup ]; then fi fi -# Open any volumes created by cryptsetup: +# 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 @@ -113,25 +143,31 @@ if [ -f /etc/crypttab -a -x /sbin/cryptsetup ]; then 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 - echo "Unlocking LUKS crypt volume '${LUKS}' on device '$DEV':" - if [ -n "${PASS}" ]; then - if [ -f ${PASS} ]; 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 - elif [ "${PASS}" != "none" ]; then - # A password field of 'none' indicates a line for swap: + 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 on device '$DEV' mapped to '${LUKS}':" + 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 @@ -146,19 +182,41 @@ 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 -w rtc /proc/ioports ; then + if ! grep -q " : rtc" /proc/ioports ; then CLOCK_OPT="--directisa" fi - if grep -wq "^UTC" /etc/hardwareclock ; then - echo -n "Setting system time from the hardware clock (UTC): " - /sbin/hwclock $CLOCK_OPT --utc --hctosys - else - echo -n "Setting system time from the hardware clock (localtime): " + 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 @@ -224,51 +282,20 @@ if [ ! $READWRITE = yes ]; then echo "Remounting root device with read-write enabled." /sbin/mount -w -v -n -o remount / if [ $? -gt 0 ] ; then - echo - echo "Attempt to remount root device as read-write failed! This is going to" + echo "FATAL: Attempt to remount root device as read-write failed! This is going to" echo "cause serious problems." - echo - echo "If you're using the UMSDOS filesystem, you **MUST** mount the root partition" - echo "read-write! You can make sure the root filesystem is getting mounted " - echo "read-write with the 'rw' flag to Loadlin:" - echo - echo "loadlin vmlinuz root=/dev/hda1 rw (replace /dev/hda1 with your root device)" - echo - echo "Normal bootdisks can be made to mount a system read-write with the rdev command:" - echo - echo "rdev -R /dev/fd0 0" - echo - echo "You can also get into your system by using a boot disk with a command like this" - echo "on the LILO prompt line: (change the root partition name as needed)" - echo - echo "LILO: mount root=/dev/hda1 rw" - echo - echo "Please press ENTER to continue, then reboot and use one of the above methods to" - echo -n "get into your machine and start looking for the problem. " - read junk; fi else echo "Testing root filesystem status: read-write filesystem" echo - echo "*** ERROR: Root partition has already been mounted read-write. Cannot check!" + 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. Please modify your kernel with 'rdev' so that" - echo "it does this. If you're booting with LILO, add a line:" + 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." - echo - echo "If you boot from a kernel on a floppy disk, put it in the drive and type:" - echo " rdev -R /dev/fd0 1" - echo - echo "If you boot from a bootdisk, or with Loadlin, you can add the 'ro' flag." - echo - echo "This will fix the problem *AND* eliminate this annoying message. :^)" - echo - echo -n "Press ENTER to continue. " - read junk; fi # Done checking root filesystem @@ -278,12 +305,15 @@ fi # Done checking root filesystem # Add entry for / to /etc/mtab: /sbin/mount -f -w / -# Add /proc and /sys mounts to /etc/mtab: +# Add /proc, /sys, and /dev/shm mounts to /etc/mtab: if [ -d /proc/sys ]; then - /sbin/mount -f proc /proc -t proc + /sbin/mount -f -t proc proc /proc fi if [ -d /sys/bus ]; then - /sbin/mount -f sysfs /sys -t sysfs + /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: @@ -293,30 +323,20 @@ if [ -r /etc/isapnp.conf ]; then fi fi -# This loads any kernel modules that are needed. These might be required to -# use your ethernet card, sound card, or other optional hardware. -# Priority is given first to a script named "rc.modules.local", then -# to "rc.modules-$FULL_KERNEL_VERSION", and finally to the plain "rc.modules". -# Note that if /etc/rc.d/rc.modules.local is found, then that will be the ONLY -# rc.modules script the machine will run, so make sure it has everything in -# it that you need. -if [ -x /etc/rc.d/rc.modules.local -a -r /proc/modules ]; then - echo "Running /etc/rc.d/rc.modules.local:" - /bin/sh /etc/rc.d/rc.modules.local -elif [ -x /etc/rc.d/rc.modules-$(uname -r) -a -r /proc/modules ]; then - echo "Running /etc/rc.d/rc.modules-$(uname -r):" - . /etc/rc.d/rc.modules-$(uname -r) -elif [ -x /etc/rc.d/rc.modules -a -r /proc/modules -a -L /etc/rc.d/rc.modules ]; then - echo "Running /etc/rc.d/rc.modules -> $(readlink /etc/rc.d/rc.modules):" - . /etc/rc.d/rc.modules -elif [ -x /etc/rc.d/rc.modules -a -r /proc/modules ]; then - echo "Running /etc/rc.d/rc.modules:" +# 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 runtime kernel parameters: +# Configure kernel parameters: if [ -x /sbin/sysctl -a -r /etc/sysctl.conf ]; then - /sbin/sysctl -e -p /etc/sysctl.conf + 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: @@ -344,9 +364,12 @@ fi echo "Mounting non-root local filesystems:" sleep 3 if /bin/grep -wq devpts /proc/mounts ; then - /sbin/mount -a -v -t nonfs,nosmbfs,nocifs,noproc,nosysfs,nodevpts + # 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 + /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, @@ -354,6 +377,11 @@ fi # 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 \ @@ -362,6 +390,11 @@ rm -f /var/run/* /var/run/*/* /var/run/*/*/* /etc/nologin \ ( 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 |