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
|