slitaz-boot-scripts annotate etc/init.d/rcS @ rev 302

Huge clean, colored rcS, faster, fix sound and other devices (used need a devtmpfs mounted on /dev) disabled logging for now
author Christophe Lincoln <pankso@slitaz.org>
date Fri Jun 01 21:46:07 2012 +0200 (2012-06-01)
parents e507111d6d32
children 445b09ea0b07
rev   line source
pankso@5 1 #!/bin/sh
pankso@302 2 #
pankso@302 3 # /etc/init.d/rcS : Initial boot script for SliTaz GNU/Linux
pankso@302 4 # Configuration file : /etc/rcS.conf
pankso@5 5 #
pankso@153 6 # rcS is the main initialization script used to check fs, mount, clean,
pankso@153 7 # run scripts and start daemons.
pankso@5 8 #
pankso@5 9 . /etc/init.d/rc.functions
pankso@5 10 . /etc/rcS.conf
pankso@5 11
pankso@302 12 # Set PATH, TZ and boot time.
pankso@302 13 export PATH=/bin:/sbin:/usr/bin:/usr/sbin
pankso@262 14 [ -s /etc/TZ ] && export TZ="$(cat /etc/TZ)"
pankso@302 15 [ -n "$bootdate" ] || bootdate=$(date +%s)
pankso@187 16
pascal@276 17 case "$1" in
pascal@276 18
pascal@276 19 readonly)
pankso@246 20
pankso@302 21 colorize 34 "Processing /etc/init.d/rcS..."
pankso@171 22
pankso@171 23 # Mount /proc.
pankso@171 24 echo -n "Mounting proc filesystem..."
pankso@302 25 mount proc && status
pankso@302 26
pankso@302 27 # Mount /run as tmpfs to avoid pidfile and other runtime data behing
pankso@302 28 # writting to disk.
pankso@302 29 echo -n "Mounting tmpfs filesystem on: /run"
pankso@302 30 mount -t tmpfs tmpfs /run
pankso@171 31 status
pankso@171 32
pankso@5 33 # Before mounting filesystems we check fs specified in the file
pankso@5 34 # /etc/rcS.conf and variable $CHECK_FS.
pankso@302 35 if [ "$CHECK_FS" ]; then
pankso@5 36 mount -o remount,ro /
pankso@302 37 for i in $CHECK_FS; do
pankso@302 38 colorize 36 "Checking filesystem: $i"
pankso@302 39 e2fsck -p $i
pankso@5 40 done
pankso@5 41 fi
pankso@5 42
pankso@5 43 # Remount rootfs rw.
pankso@171 44 echo "Remounting rootfs read/write..."
pankso@302 45 mount -o remount,rw /
pascal@276 46 ;;
pascal@276 47
pascal@276 48 readwrite)
pankso@5 49
slaxemulator@247 50 # Trigger Udev and handle hotplug events
slaxemulator@247 51 if [ "$UDEV" = "yes" ]; then
pankso@302 52 echo -n "Mounting devtmpfs filesystem..."
pankso@302 53 mount -t devtmpfs devtmpfs /dev
pankso@302 54 status
pankso@269 55 echo "Starting udev daemon..."
pankso@302 56 mkdir -p /run/udev
pankso@302 57 udevd --daemon 2>/dev/null
pankso@269 58 echo "Udevadm requesting events from the Kernel..."
slaxemulator@260 59 udevadm trigger
pankso@269 60 echo "Udevadm waiting for the event queue to finish..."
pankso@302 61 udevadm settle --timeout=120
pankso@302 62 # Disable hotplug helper since udevd listen to netlink
pankso@302 63 echo "" > /proc/sys/kernel/hotplug
slaxemulator@247 64 fi
slaxemulator@247 65
MikeDSmith25@107 66 # Mount filesystems in /etc/fstab.
pankso@171 67 echo "Mounting filesystems in fstab..."
pankso@302 68 mount -a
pankso@302 69
pankso@302 70 # Be quiet
pankso@302 71 echo "0 0 0 0" > /proc/sys/kernel/printk
pascal@297 72 ;;
pascal@297 73
pascal@297 74 logged)
pankso@5 75
pankso@157 76 # Store boot messages to log files.
pankso@302 77 dmesg > /var/log/dmesg.log &
pascal@276 78
pascal@276 79 # Parse cmdline args for earlier boot options. All other boot options
pascal@276 80 # are in /etc/init./bootopts.sh.
pascal@276 81 echo -n "Searching for early boot options..."
pankso@302 82 for opt in $(cat /proc/cmdline)
pascal@276 83 do
pascal@276 84 case $opt in
pascal@276 85 cdrom=*)
pascal@276 86 export CDROM=${opt#cdrom=} ;;
pascal@276 87 modprobe=*)
pascal@276 88 export MODPROBE="yes" ;;
pascal@276 89 config=*)
pascal@276 90 export CONFIG=${opt#config=} ;;
pascal@276 91 *)
pascal@276 92 continue ;;
pascal@276 93 esac
pascal@276 94 done
pascal@276 95 status
pascal@41 96
pankso@302 97 # Clean up the system and set up tmp X11 and ICE dir
pankso@157 98 if [ "$CLEAN_UP_SYSTEM" = "yes" ]; then
pankso@171 99 echo -n "Cleaning up the system..."
pascal@176 100 find /var/run -name "*.pid" -type f | xargs /bin/rm -f
pankso@302 101 rm -rf /tmp /var/run/dbus/* /var/run/hald/pid /var/lock/*
pankso@302 102 mkdir -p /tmp/.X11-unix /tmp/.ICE-unix
pankso@302 103 chmod -R 1777 /tmp
pankso@157 104 status
pankso@157 105 else
pankso@302 106 echo "System clean up is disabled in: /etc/rcS.conf"
pankso@262 107 fi
pankso@262 108
MikeDSmith25@107 109 # Create /dev/cdrom if needed (symlink does not exist on LiveCD).
MikeDSmith25@107 110 # Also add /dev/cdrom to fstab if entry does not exist.
pankso@302 111 if [ "$CDROM" ]; then
pankso@158 112 DRIVE_NAME=${CDROM#/dev/}
pankso@157 113 else
pankso@263 114 DRIVE_NAME=$(fgrep -s "drive name" /proc/sys/dev/cdrom/info | cut -f 3)
pascal@91 115 fi
pankso@302 116 if [ "$DRIVE_NAME" -a ! "$(readlink /dev/cdrom)" ]; then
pankso@19 117 echo -n "Creating symlink : /dev/cdrom..."
pankso@19 118 ln -s /dev/$DRIVE_NAME /dev/cdrom
pankso@66 119 ln -s /dev/$DRIVE_NAME /dev/dvd
pankso@19 120 status
pankso@19 121 fi
pankso@262 122
gokhlayeh@241 123 # Handle kernel cmdline parameter modprobe=<module_list>
pankso@302 124 if [ "$MODPROBE" ]; then
pankso@302 125 MODULES=$(sed -e 's/.* modprobe=\([^ ]*\).*/\1/' -e 's/,/\n/g' < /proc/cmdline)
pankso@15 126 for i in $MODULES; do
pankso@302 127 echo -n "Loading kernel module: $i"
pankso@302 128 modprobe $i
gokhlayeh@241 129 status
pankso@15 130 done
pankso@15 131 fi
pankso@15 132
gokhlayeh@241 133 # Handle kernel cmdline parameter config=<device>,<path> to source a
pankso@5 134 # disk init script
pankso@158 135 if [ -n "$CONFIG" ]; then
pankso@5 136 DEVICE=${CONFIG%,*}
pankso@5 137 SCRIPT=${CONFIG#*,}
pascal@110 138 echo "Probing $DEVICE... "
pankso@302 139 if ! mount -r $DEVICE /mnt; then
pascal@179 140 if echo $DEVICE | grep -Eq "/dev/sd|UUID=|LABEL="; then
pankso@302 141 USBDELAY=$(cat /sys/module/usb_storage/parameters/delay_use)
pascal@110 142 USBDELAY=$((1+$USBDELAY))
pascal@110 143 echo "$DEVICE is potentially a USB device: sleep for $USBDELAY seconds"
pascal@110 144 sleep $USBDELAY
pascal@110 145 fi
pankso@302 146 if ! mount -r $DEVICE /mnt; then
pascal@110 147 CONFIG=""
pascal@110 148 fi
pascal@110 149 fi
pankso@171 150 echo -n "Source $SCRIPT from $DEVICE..."
pascal@110 151 if [ -n "$CONFIG" ]; then
pankso@5 152 . /mnt/$SCRIPT
pankso@302 153 umount /mnt 2> /dev/null || true
pankso@5 154 fi
gokhlayeh@241 155 status
pankso@5 156 fi
pankso@5 157
pankso@302 158 # Mount /proc/bus/usb
pascal@124 159 if [ -d /proc/bus/usb ]; then
pankso@171 160 echo -n "Mounting /proc/bus/usb filesystem..."
pankso@302 161 mount -t usbfs usbfs /proc/bus/usb
pascal@124 162 status
pascal@124 163 fi
pascal@124 164
pankso@302 165 # Start syslogd and klogd
pankso@302 166 echo -n "Starting system log deamon: syslogd..."
pankso@302 167 syslogd -s $SYSLOGD_ROTATED_SIZE && status
pankso@302 168 echo -n "Starting kernel log daemon: klogd..."
pankso@302 169 klogd && status
pankso@262 170
pankso@302 171 # Load all modules listed in config file
pankso@302 172 if [ "$LOAD_MODULES" ]; then
pankso@302 173 colorize 33 "Loading Kernel modules..."
pankso@302 174 for mod in $LOAD_MODULES; do
pankso@302 175 echo -n "Loading module: $mod"
pankso@5 176 modprobe $mod
pankso@302 177 status
pankso@5 178 done
pankso@5 179 fi
pankso@5 180
pankso@153 181 # Detect PCI and USB devices with Tazhw from slitaz-tools. We load
paul@181 182 # kernel modules only at first boot or in LiveCD mode.
pankso@153 183 if [ ! -s /var/lib/detected-modules ]; then
pankso@302 184 tazhw init
pankso@153 185 fi
pankso@153 186
pankso@302 187 # Call udevadm trigger to ensure /dev is fully populate now that all
pankso@262 188 # modules are loaded.
slaxemulator@260 189 if [ "$UDEV" = "yes" ]; then
pankso@302 190 echo -n "Triggering udev events: --action=add"
pankso@302 191 udevadm trigger --action=add
slaxemulator@260 192 status
slaxemulator@260 193 fi
slaxemulator@260 194
pankso@302 195 # Start all scripts specified with $RUN_SCRIPTS
pankso@302 196 for script in $RUN_SCRIPTS; do
pankso@302 197 echo $(colorize 34 "Processing: /etc/init.d/$script")
pankso@302 198 /etc/init.d/$script
pankso@5 199 done
pankso@5 200
pankso@302 201 # Start all daemons specified with $RUN_DAEMONS
pankso@302 202 if [ "$RUN_DAEMONS" ]; then
pankso@302 203 colorize 33 "Starting all daemons..."
pankso@302 204 for daemon in $RUN_DAEMONS; do
pankso@32 205 /etc/init.d/$daemon start
pankso@302 206 done
pankso@5 207 fi
pankso@5 208
pankso@302 209 # Back to a verbose mode
pankso@302 210 (sleep 6 && echo "7 4 1 7" > /proc/sys/kernel/printk) &
pankso@302 211
pankso@302 212 if [ "$MESSAGE" ]; then
pankso@302 213 newline
pankso@302 214 colorize 32 "$MESSAGE"
pankso@302 215 fi
pankso@302 216
pankso@302 217 # Display and log boot time
pankso@187 218 time=$((`date +%s` - $bootdate))
pankso@187 219 echo $time > /var/log/boot-time
pankso@187 220 echo "SliTaz boot time: ${time}s"
pascal@276 221 ;;
pankso@187 222
pascal@276 223 *)
pankso@302 224 # --> readonly --> readwrite --> logged.
pankso@302 225 #if [ ! -s /run/boot.log ]; then
pankso@302 226 #mount -t devpts devpts /dev/pts
pankso@302 227 #mount -t tmpfs tmpfs /run
pankso@302 228 #fi
pankso@302 229 #script -aqc '/etc/init.d/rcS readonly' /run/boot.log
pankso@302 230 #script -aqc '/etc/init.d/rcS readwrite' /run/boot.log
pankso@302 231 /etc/init.d/rcS readonly
pankso@302 232 /etc/init.d/rcS readwrite
pankso@302 233 # Lograde boot.log
pankso@302 234 #last=.9
pankso@302 235 #for i in .8 .7 .6 .5 .4 .3 .2 .1 .0 '' ; do
pankso@302 236 #mv -f /var/log/boot.log$i /var/log/boot.log$last 2>/dev/null
pankso@302 237 #last=$i
pankso@302 238 #done
pankso@302 239 #mv -f /run/boot.log /var/log/boot.log
pankso@302 240 #script -aqc '/etc/init.d/rcS logged' /var/log/boot.log
pankso@302 241 /etc/init.d/rcS logged ;;
pascal@276 242 esac