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

Huge change in boot... we start X as soon as possible by default, for this we have to config keymap, locale, user and home before, let do that in rcS. Also some fixes such as TZ
author Christophe Lincoln <pankso@slitaz.org>
date Fri Apr 29 16:06:08 2011 +0200 (2011-04-29)
parents 9fdf071862a6
children c76406c5b7c5
rev   line source
pankso@5 1 #!/bin/sh
gokhlayeh@241 2 # /etc/init.d/rcS - Initial boot script for SliTaz GNU/Linux.
pankso@153 3 # Config file is : /etc/rcS.conf
pankso@5 4 #
pankso@153 5 # rcS is the main initialization script used to check fs, mount, clean,
pankso@153 6 # run scripts and start daemons.
pankso@5 7 #
pankso@5 8 . /etc/init.d/rc.functions
pankso@5 9 . /etc/rcS.conf
pankso@5 10
pankso@187 11 # Boot time.
pankso@187 12 bootdate=`date +%s`
pankso@187 13
pankso@246 14 if [ "$1" != "logged" ]; then # logged
pankso@246 15
pankso@234 16 # Graphical boot start.
pankso@234 17 if [ "$FBSPLASH" == "yes" ]; then
pankso@234 18 reset && fbsplash -c \
pankso@234 19 -s /etc/fbsplash/$FBSPLASH_THEME/fbsplash.ppm \
pankso@234 20 -i /etc/fbsplash/$FBSPLASH_THEME/fbsplash.cfg \
pankso@234 21 -f /etc/fbsplash/fifo &
pankso@246 22 echo "0" > /etc/fbsplash/fifo && sleep 1
pankso@234 23 fi
pankso@234 24
pankso@171 25 echo "Processing /etc/init.d/rcS..."
pankso@171 26
pankso@171 27 # Mount /proc.
pankso@171 28 echo -n "Mounting proc filesystem..."
pankso@171 29 /bin/mount proc
pankso@171 30 status
pankso@171 31
pankso@254 32 # Set time zone now to get system events at local time
pankso@254 33 if [ -s /etc/TZ ]; then
pankso@254 34 export TZ=$(cat /etc/TZ)
pankso@254 35 fi
pankso@254 36
pankso@254 37 [ "$FBSPLASH" == "yes" ] && echo "20" > /etc/fbsplash/fifo
pankso@234 38
pankso@158 39 # Parse cmdline args for earlier boot options. All other boot options
pankso@158 40 # are in /etc/init./bootopts.sh.
pankso@254 41 echo "Checking for early boot options..."
pankso@161 42 for opt in `cat /proc/cmdline`
pankso@158 43 do
pankso@158 44 case $opt in
pankso@159 45 cdrom=*)
pascal@195 46 export CDROM=${opt#cdrom=} ;;
pankso@159 47 modprobe=*)
pascal@195 48 export MODPROBE="yes" ;;
pankso@159 49 config=*)
pascal@195 50 export CONFIG=${opt#config=} ;;
pankso@254 51 xarg=*)
pankso@254 52 XARG="$XARG ${opt#xarg=}" ;;
pankso@254 53 screen=text)
pankso@254 54 echo -n "Text mode option detected..."
pankso@254 55 SCREEN=text
pankso@254 56 status ;;
pankso@254 57 screen=[0-9]*)
pankso@254 58 SCREEN=${opt#screen=} ;;
pankso@254 59 autologin)
pankso@254 60 # Autologin option to skip first graphic login prompt.
pankso@254 61 echo "auto_login yes" >> /etc/slim.conf ;;
pankso@254 62 lang=*)
pankso@254 63 # Check for a specified locale (lang=*).
pankso@254 64 LANG=${opt#lang=}
pankso@254 65 echo -n "Setting system locale to: $LANG... "
pankso@254 66 tazlocale init $LANG
pankso@254 67 status ;;
pankso@254 68 kmap=*)
pankso@254 69 # Check for a specified keymap (kmap=*).
pankso@254 70 KEYMAP=${opt#kmap=}
pankso@254 71 echo -n "Setting system keymap to: $KEYMAP..."
pankso@254 72 tazkeymap init $KEYMAP
pankso@254 73 status ;;
pankso@158 74 *)
pankso@158 75 continue ;;
pankso@158 76 esac
pankso@158 77 done
pankso@5 78
pankso@254 79 [ "$FBSPLASH" == "yes" ] && echo "40" > /etc/fbsplash/fifo
pankso@234 80
pankso@5 81 # Before mounting filesystems we check fs specified in the file
pankso@5 82 # /etc/rcS.conf and variable $CHECK_FS.
pankso@153 83 if [ -n "$CHECK_FS" ]; then
pankso@5 84 mount -o remount,ro /
pankso@5 85 for i in $CHECK_FS
pankso@5 86 do
pankso@5 87 echo "Checking filesystem on : $i"
pankso@5 88 /sbin/e2fsck -p $i
pankso@5 89 done
pankso@5 90 fi
pankso@5 91
pankso@5 92 # Remount rootfs rw.
pankso@171 93 echo "Remounting rootfs read/write..."
pankso@5 94 /bin/mount -o remount,rw /
pankso@5 95
slaxemulator@247 96 # Trigger Udev and handle hotplug events
slaxemulator@247 97 if [ "$UDEV" = "yes" ]; then
slaxemulator@247 98 echo -n "Starting udev daemon..."
slaxemulator@247 99 /sbin/udevd --daemon
slaxemulator@247 100 status
slaxemulator@247 101 echo -n "Udevadm waiting for the event queue to finish..."
slaxemulator@247 102 udevadm settle
slaxemulator@247 103 status
slaxemulator@247 104 echo -n "Using Udev for hotplugging..."
slaxemulator@247 105 echo "/sbin/udevd" > /proc/sys/kernel/hotplug
slaxemulator@247 106 status
slaxemulator@247 107 fi
slaxemulator@247 108
pankso@254 109 [ "$FBSPLASH" == "yes" ] && echo "60" > /etc/fbsplash/fifo
pankso@234 110
MikeDSmith25@107 111 # Mount filesystems in /etc/fstab.
pankso@171 112 echo "Mounting filesystems in fstab..."
pankso@5 113 /bin/mount -a
pankso@5 114
pankso@157 115 # Store boot messages to log files.
pankso@157 116 /bin/dmesg > /var/log/dmesg.log &
pascal@215 117 conspy -d | sed 's/ *$//;/^$/d;/^Processi\|^.witchi/,$!d' > /var/log/boot.log
pascal@47 118 script -a -q -c '/etc/init.d/rcS logged' /var/log/boot.log
pascal@41 119
pankso@153 120 else # logged
pascal@41 121
pankso@157 122 # Clean up the system.
pankso@157 123 if [ "$CLEAN_UP_SYSTEM" = "yes" ]; then
pankso@171 124 echo -n "Cleaning up the system..."
pascal@176 125 find /var/run -name "*.pid" -type f | xargs /bin/rm -f
pascal@176 126 /bin/rm -rf /tmp /var/run/dbus/* /var/run/hald/pid /var/lock/*
pankso@157 127 /bin/mkdir -p /tmp && /bin/chmod 1777 /tmp
pankso@157 128 status
pankso@157 129 else
pankso@171 130 echo "System clean up is disabled in /etc/rcS.conf..."
pankso@171 131 echo -n "Keeping all tmp and pid files..."
pankso@157 132 status
pankso@157 133 fi
pankso@157 134
pankso@254 135 [ "$FBSPLASH" == "yes" ] && echo "70" > /etc/fbsplash/fifo
pankso@234 136
pankso@157 137 # Set up tmp X11 and ICE dir.
pankso@171 138 echo -n "Setting up tmp X11 and ICE unix dir..."
pankso@157 139 /bin/mkdir -p /tmp/.X11-unix /tmp/.ICE-unix
pankso@157 140 /bin/chmod 1777 /tmp/.X11-unix /tmp/.ICE-unix
pankso@157 141 status
pankso@157 142
pankso@254 143 # Start DBUS and HAL deamon so we can use Xorg and a WM to configure
pankso@254 144 # system locale and keybord on first boot.
pankso@254 145 [ -x /etc/init.d/dbus ] && /etc/init.d/dbus start
pankso@254 146 [ -x /etc/init.d/hald ] && /etc/init.d/hald start
pankso@254 147
pankso@254 148 # Requested screen is not text mode and keymap.conf is empty so go
pankso@254 149 # for an i18n configuration in GUI mode. In cas of screen=text we
pankso@254 150 # configure locale and keymap just after via i18n.sh
pankso@254 151 if [ "$SCREEN" != "text" -a ! -s "/etc/locale.conf" -a -x /usr/bin/Xorg ]; then
pankso@254 152 tazbox boot
pankso@254 153 fi
pankso@254 154
pankso@254 155 [ "$FBSPLASH" == "yes" ] && echo "80" > /etc/fbsplash/fifo
pankso@254 156
pankso@254 157 # Set the console keymap and configure i18n in case of screen=text and
pankso@254 158 # no locale.conf or keymap.conf. Add default user for live mode and
pankso@254 159 # mount an eventual /home partition.
pankso@254 160 /etc/init.d/i18n.sh
pankso@254 161 /etc/init.d/user-home.sh
pankso@254 162
pankso@254 163 [ "$FBSPLASH" == "yes" ] && echo "100" > /etc/fbsplash/fifo
pankso@254 164
pankso@254 165 # Now that we have a keymap configuration we can auto configure Xorg.
pankso@254 166 # We need to set $HOME.
pankso@254 167 if [ "$SCREEN" != "text" -a ! -s /etc/X11/xorg.conf -a -x /usr/bin/Xorg ]; then
pankso@254 168 echo "Configuring Xorg..."
pankso@254 169 HOME=/root
pankso@254 170 tazx config-xorg
pankso@254 171 fi
pankso@254 172
pankso@254 173 # Here we finish bootsplash since we start Xorg session.
pankso@254 174 [ "$FBSPLASH" == "yes" ] && sleep 1 && echo "exit" > /etc/fbsplash/fifo
pankso@254 175
pankso@254 176 # No text mode requested, we have i18n and Xorg settings as well as a
pankso@254 177 # user, so start a desktop and let boot process finih in backgroud.
pankso@254 178 if [ "$screen" != "text" -a -x /etc/init.d/slim ]; then
pankso@254 179 /etc/init.d/slim start
pankso@157 180 fi
pankso@157 181
MikeDSmith25@107 182 # Create /dev/cdrom if needed (symlink does not exist on LiveCD).
MikeDSmith25@107 183 # Also add /dev/cdrom to fstab if entry does not exist.
pankso@158 184 if [ -n "$CDROM" ]; then
pankso@158 185 DRIVE_NAME=${CDROM#/dev/}
pankso@157 186 else
pankso@254 187 DRIVE_NAME=$(grep -s "drive name" /proc/sys/dev/cdrom/info | cut -f 3)
pascal@91 188 fi
pascal@45 189 if [ -n "$DRIVE_NAME" -a ! "`readlink /dev/cdrom`" ]; then
pankso@19 190 echo -n "Creating symlink : /dev/cdrom..."
pankso@19 191 ln -s /dev/$DRIVE_NAME /dev/cdrom
pankso@66 192 ln -s /dev/$DRIVE_NAME /dev/dvd
pankso@19 193 status
pankso@19 194 fi
pankso@19 195 if ! grep -q "/dev/cdrom" /etc/fstab; then
pankso@19 196 echo -n "Adding /dev/cdrom to fstab..."
pascal@63 197 echo '/dev/cdrom /media/cdrom iso9660 user,ro,noauto 0 0' \
pankso@19 198 >> /etc/fstab
pankso@19 199 status
pankso@19 200 fi
pankso@254 201
pankso@49 202 # Chmod hack on each boot for Asunder and burnbox. Allowing all users
pankso@49 203 # to burn/rip CD/DVD.
pankso@49 204 if [ -n "$DRIVE_NAME" -a "`readlink /dev/cdrom`" ]; then
pankso@49 205 echo -n "Chmoding cdrom device..."
pankso@49 206 chmod 0666 /dev/cdrom
pankso@66 207 chmod 0666 /dev/dvd
pankso@49 208 chmod 0666 /dev/$DRIVE_NAME
pankso@49 209 status
pankso@49 210 fi
pankso@19 211
gokhlayeh@241 212 # Handle kernel cmdline parameter modprobe=<module_list>
pankso@158 213 if [ -n "$MODPROBE" ]; then
pankso@15 214 MODULES=`sed -e 's/.* modprobe=\([^ ]*\).*/\1/' -e 's/,/\n/g' < /proc/cmdline`
pankso@15 215 for i in $MODULES; do
pankso@15 216 echo -n "Loading kernel module $i"
pankso@15 217 /sbin/modprobe $i
gokhlayeh@241 218 status
pankso@15 219 done
pankso@15 220 fi
pankso@15 221
gokhlayeh@241 222 # Handle kernel cmdline parameter config=<device>,<path> to source a
pankso@5 223 # disk init script
pankso@158 224 if [ -n "$CONFIG" ]; then
pankso@5 225 DEVICE=${CONFIG%,*}
pankso@5 226 SCRIPT=${CONFIG#*,}
pascal@110 227 echo "Probing $DEVICE... "
pascal@110 228 if ! /bin/mount -r $DEVICE /mnt; then
pascal@179 229 if echo $DEVICE | grep -Eq "/dev/sd|UUID=|LABEL="; then
pascal@110 230 USBDELAY=`cat /sys/module/usb_storage/parameters/delay_use`
pascal@110 231 USBDELAY=$((1+$USBDELAY))
pascal@110 232 echo "$DEVICE is potentially a USB device: sleep for $USBDELAY seconds"
pascal@110 233 sleep $USBDELAY
pascal@110 234 fi
pascal@110 235 if ! /bin/mount -r $DEVICE /mnt; then
pascal@110 236 CONFIG=""
pascal@110 237 fi
pascal@110 238 fi
pankso@171 239 echo -n "Source $SCRIPT from $DEVICE..."
pascal@110 240 if [ -n "$CONFIG" ]; then
pankso@5 241 . /mnt/$SCRIPT
pascal@177 242 /bin/umount /mnt 2> /dev/null || true
pankso@5 243 fi
gokhlayeh@241 244 status
pankso@5 245 fi
pankso@5 246
pascal@124 247 # Mount /proc/bus/usb.
pascal@124 248 if [ -d /proc/bus/usb ]; then
pankso@171 249 echo -n "Mounting /proc/bus/usb filesystem..."
pascal@124 250 /bin/mount -t usbfs usbfs /proc/bus/usb
pascal@124 251 status
pascal@124 252 fi
pascal@124 253
pankso@5 254 # Start syslogd and klogd.
pankso@5 255 if [ "$KERNEL_LOG_DAEMONS" = "yes" ]; then
pankso@171 256 echo -n "Starting system log deamon: syslogd..."
pankso@5 257 /sbin/syslogd -s $SYSLOGD_ROTATED_SIZE && status
pankso@171 258 echo -n "Starting kernel log daemon: klogd..."
pankso@5 259 /sbin/klogd && status
pankso@5 260 else
pankso@171 261 echo "Kernel log daemons are disabled in /etc/rc.conf..."
pankso@5 262 fi
pankso@5 263
pankso@5 264 # Load all modules listed in config file.
pankso@153 265 if [ -n "$LOAD_MODULES" ]; then
pankso@5 266 for mod in $LOAD_MODULES
pankso@5 267 do
pankso@5 268 modprobe $mod
pankso@5 269 done
pankso@5 270 fi
pankso@5 271
paul@181 272 # Be quiet on configuration to avoid messages overwriting ncurses dialog
pankso@143 273 echo "0 0 0 0" > /proc/sys/kernel/printk
pankso@143 274
pankso@153 275 # Detect PCI and USB devices with Tazhw from slitaz-tools. We load
paul@181 276 # kernel modules only at first boot or in LiveCD mode.
pankso@153 277 if [ ! -s /var/lib/detected-modules ]; then
pankso@153 278 /sbin/tazhw init
pankso@153 279 fi
pankso@153 280
pankso@254 281 # Auto recharge packages list (after network connection of course)
pankso@254 282 [ "$RECHARGE_PACKAGES_LIST" == "yes" ] && tazpkg recharge &
pankso@186 283
pankso@5 284 # Start all scripts specified with $RUN_SCRIPTS.
MikeDSmith25@107 285 echo "Executing all initialization scripts..."
pankso@5 286 for script in $RUN_SCRIPTS
pankso@5 287 do
pankso@55 288 if [ -x /etc/init.d/$script ]; then
pankso@32 289 /etc/init.d/$script
pankso@32 290 fi
pankso@5 291 done
pankso@5 292
pankso@5 293 # Start all daemons specified with $RUN_DAEMONS.
pankso@5 294 echo "Starting all daemons specified in /etc/rcS.conf..."
pankso@5 295 for daemon in $RUN_DAEMONS
pankso@5 296 do
pankso@32 297 if [ -x /etc/init.d/$daemon ]; then
pankso@32 298 /etc/init.d/$daemon start
pankso@32 299 fi
pankso@5 300 done
pankso@5 301
pankso@143 302 # Back to a verbose mode.
pankso@143 303 echo "7 4 1 7" > /proc/sys/kernel/printk
pankso@143 304
pankso@5 305 # Reset screen and display a bold message.
pankso@5 306 if [ -n "$MESSAGE" ]; then
pankso@5 307 /usr/bin/reset
pankso@5 308 echo -e "\033[1m$MESSAGE\033[0m"
pankso@5 309 fi
pankso@5 310
pankso@187 311 # Display and log boot time.
pankso@187 312 time=$((`date +%s` - $bootdate))
pankso@187 313 echo $time > /var/log/boot-time
pankso@187 314 echo "SliTaz boot time: ${time}s"
pankso@187 315
pankso@157 316 fi # logged