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@187
|
15
|
pascal@276
|
16 case "$1" in
|
pascal@276
|
17
|
pascal@276
|
18 readonly)
|
pankso@246
|
19
|
al@393
|
20 colorize 34 'Processing: /etc/init.d/rcS...'
|
pankso@171
|
21
|
pankso@306
|
22 # Mount /proc
|
al@416
|
23 action 'Mounting proc filesystem on /proc'
|
al@416
|
24 mount proc
|
al@416
|
25 status
|
pankso@302
|
26
|
slaxemulator@247
|
27 # Trigger Udev and handle hotplug events
|
pankso@305
|
28 if [ "$UDEV" == "yes" ]; then
|
al@416
|
29 action 'Mounting devtmpfs filesystem on: /dev'
|
pankso@302
|
30 mount -t devtmpfs devtmpfs /dev
|
pankso@302
|
31 status
|
al@393
|
32
|
al@393
|
33 echo 'Starting udev daemon...'
|
pankso@302
|
34 udevd --daemon 2>/dev/null
|
al@393
|
35
|
al@393
|
36 echo 'Udevadm requesting events from the Kernel...'
|
slaxemulator@260
|
37 udevadm trigger
|
al@393
|
38
|
al@393
|
39 echo 'Udevadm waiting for the event queue to finish...'
|
pankso@302
|
40 udevadm settle --timeout=120
|
pankso@302
|
41 # Disable hotplug helper since udevd listen to netlink
|
al@393
|
42 echo '' > /proc/sys/kernel/hotplug
|
pankso@356
|
43 else
|
al@416
|
44 action 'Executing mdev -s to populate /dev...'
|
al@393
|
45 mdev -s && echo 'mdev' > /proc/sys/kernel/hotplug
|
pankso@305
|
46 status
|
pankso@305
|
47 fi
|
pankso@305
|
48
|
pankso@305
|
49 # Before mounting filesystems we check fs specified in the file
|
pankso@305
|
50 # /etc/rcS.conf and variable $CHECK_FS. WE need udev started to
|
pankso@305
|
51 # have /dev/* populated
|
pankso@305
|
52 if [ "$CHECK_FS" ]; then
|
pankso@305
|
53 mount -o remount,ro /
|
pankso@305
|
54 for i in $CHECK_FS; do
|
pankso@305
|
55 colorize 36 "Checking filesystem: $i"
|
pankso@305
|
56 e2fsck -p $i
|
pankso@305
|
57 done
|
pankso@305
|
58 fi
|
pankso@305
|
59
|
pankso@305
|
60 # Remount rootfs rw.
|
al@393
|
61 echo 'Remounting rootfs read/write...'
|
pankso@305
|
62 mount -o remount,rw /
|
pascal@381
|
63 sync # ensure rw state
|
pankso@305
|
64
|
MikeDSmith25@107
|
65 # Mount filesystems in /etc/fstab.
|
al@393
|
66 echo 'Mounting filesystems in fstab...'
|
pankso@302
|
67 mount -a
|
pankso@305
|
68 ;;
|
pankso@305
|
69
|
al@393
|
70
|
pankso@305
|
71 readwrite)
|
pankso@302
|
72
|
pankso@302
|
73 # Be quiet
|
al@393
|
74 echo '0 0 0 0' > /proc/sys/kernel/printk
|
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.
|
al@416
|
81 action 'Searching for early boot options...'
|
al@393
|
82 for opt in $(cat /proc/cmdline); do
|
pascal@276
|
83 case $opt in
|
pascal@276
|
84 modprobe=*)
|
al@393
|
85 export MODPROBE='yes' ;;
|
pascal@276
|
86 config=*)
|
pascal@276
|
87 export CONFIG=${opt#config=} ;;
|
pankso@349
|
88 screen=*)
|
pankso@349
|
89 export SCREEN=${opt#screen=} ;;
|
pascal@276
|
90 *)
|
pascal@276
|
91 continue ;;
|
pascal@276
|
92 esac
|
pascal@276
|
93 done
|
pascal@276
|
94 status
|
pascal@41
|
95
|
paul@351
|
96 # Clean up the system and set up tmp dirs. */run/* are tmpfs so they are
|
paul@351
|
97 # cleaned up at shutdown.
|
al@393
|
98 if [ "$CLEAN_UP_SYSTEM" == 'yes' ]; then
|
al@416
|
99 action 'Cleaning up the system...'
|
pankso@345
|
100 rm -rf /tmp
|
pankso@345
|
101 mkdir -p /tmp/.X11-unix /tmp/.ICE-unix
|
pankso@302
|
102 chmod -R 1777 /tmp
|
pankso@157
|
103 status
|
pankso@157
|
104 else
|
al@393
|
105 echo 'System clean up is disabled in: /etc/rcS.conf'
|
pankso@262
|
106 fi
|
pankso@262
|
107
|
gokhlayeh@241
|
108 # Handle kernel cmdline parameter modprobe=<module_list>
|
pankso@302
|
109 if [ "$MODPROBE" ]; then
|
pankso@306
|
110 mods=$(sed -e 's/.* modprobe=\([^ ]*\).*/\1/' -e 's/,/\n/g' < /proc/cmdline)
|
pankso@306
|
111 for i in $mods; do
|
al@416
|
112 action 'Loading kernel module: $i'
|
pankso@302
|
113 modprobe $i
|
gokhlayeh@241
|
114 status
|
pankso@15
|
115 done
|
pankso@15
|
116 fi
|
pankso@15
|
117
|
gokhlayeh@241
|
118 # Handle kernel cmdline parameter config=<device>,<path> to source a
|
pankso@5
|
119 # disk init script
|
pankso@158
|
120 if [ -n "$CONFIG" ]; then
|
pankso@5
|
121 DEVICE=${CONFIG%,*}
|
pankso@5
|
122 SCRIPT=${CONFIG#*,}
|
pascal@110
|
123 echo "Probing $DEVICE... "
|
pankso@302
|
124 if ! mount -r $DEVICE /mnt; then
|
al@393
|
125 if echo $DEVICE | grep -Eq '/dev/sd|UUID=|LABEL='; then
|
pankso@302
|
126 USBDELAY=$(cat /sys/module/usb_storage/parameters/delay_use)
|
pascal@110
|
127 USBDELAY=$((1+$USBDELAY))
|
pascal@110
|
128 echo "$DEVICE is potentially a USB device: sleep for $USBDELAY seconds"
|
pascal@110
|
129 sleep $USBDELAY
|
pascal@110
|
130 fi
|
pankso@302
|
131 if ! mount -r $DEVICE /mnt; then
|
pascal@110
|
132 CONFIG=""
|
pascal@110
|
133 fi
|
pascal@110
|
134 fi
|
al@416
|
135 action 'Source $SCRIPT from $DEVICE...'
|
pascal@110
|
136 if [ -n "$CONFIG" ]; then
|
pankso@5
|
137 . /mnt/$SCRIPT
|
pankso@302
|
138 umount /mnt 2> /dev/null || true
|
pankso@5
|
139 fi
|
gokhlayeh@241
|
140 status
|
pankso@5
|
141 fi
|
pankso@5
|
142
|
pankso@302
|
143 # Mount /proc/bus/usb
|
pascal@124
|
144 if [ -d /proc/bus/usb ]; then
|
al@416
|
145 action 'Mounting usbfs filesystem on: /proc/bus/usb'
|
pankso@302
|
146 mount -t usbfs usbfs /proc/bus/usb
|
pascal@124
|
147 status
|
pascal@124
|
148 fi
|
pascal@124
|
149
|
pankso@302
|
150 # Start syslogd and klogd
|
al@416
|
151 action 'Starting system log daemon: syslogd...'
|
al@416
|
152 syslogd -s $SYSLOGD_ROTATED_SIZE; status
|
al@416
|
153 action 'Starting kernel log daemon: klogd...'
|
al@416
|
154 klogd; status
|
pankso@262
|
155
|
pankso@302
|
156 # Load all modules listed in config file
|
pankso@302
|
157 if [ "$LOAD_MODULES" ]; then
|
al@393
|
158 colorize 33 'Loading Kernel modules...'
|
pankso@302
|
159 for mod in $LOAD_MODULES; do
|
al@416
|
160 action 'Loading module: $mod'
|
pankso@5
|
161 modprobe $mod
|
pankso@302
|
162 status
|
pankso@5
|
163 done
|
pankso@5
|
164 fi
|
pankso@5
|
165
|
pankso@153
|
166 # Detect PCI and USB devices with Tazhw from slitaz-tools. We load
|
paul@181
|
167 # kernel modules only at first boot or in LiveCD mode.
|
pankso@153
|
168 if [ ! -s /var/lib/detected-modules ]; then
|
pankso@302
|
169 tazhw init
|
pankso@153
|
170 fi
|
pankso@153
|
171
|
paul@344
|
172 # Call udevadm trigger to ensure /dev is fully populated now that all
|
pankso@262
|
173 # modules are loaded.
|
al@393
|
174 if [ "$UDEV" == 'yes' ]; then
|
al@416
|
175 action 'Triggering udev events: --action=add'
|
pankso@302
|
176 udevadm trigger --action=add
|
slaxemulator@260
|
177 status
|
slaxemulator@260
|
178 fi
|
slaxemulator@260
|
179
|
pankso@302
|
180 # Start all scripts specified with $RUN_SCRIPTS
|
pankso@302
|
181 for script in $RUN_SCRIPTS; do
|
pankso@302
|
182 echo $(colorize 34 "Processing: /etc/init.d/$script")
|
pankso@302
|
183 /etc/init.d/$script
|
pankso@5
|
184 done
|
pankso@5
|
185
|
pankso@365
|
186 # Start X session. Dbus must be started before Xorg and other daemons.
|
pankso@365
|
187 # We started it here because X is run before RUN_DAEMONS. Sleep, in
|
paul@395
|
188 # some live modes we boot too fast and X can't initialize.
|
al@393
|
189 if [ "$SCREEN" != 'text' ] && [ "$LOGIN_MANAGER" ] &&
|
pascal@385
|
190 [ -x /usr/bin/tazx ] && [ -s /etc/slitaz/applications.conf ] &&
|
pankso@365
|
191 [ -x "/etc/init.d/$LOGIN_MANAGER" ]; then
|
al@393
|
192 colorize 36 'Starting X environment...'
|
pankso@359
|
193 # We need Xorg 40-Keyboard.conf and SliTaz applications.conf
|
al@393
|
194 if [ ! -s '/etc/X11/xorg.conf.d/40-Keyboard.conf' ]; then
|
al@393
|
195 echo 'Configuring Xorg server...' && HOME='/root'
|
pankso@359
|
196 tazx init
|
pankso@359
|
197 fi
|
pankso@365
|
198 /etc/init.d/dbus start
|
pankso@359
|
199 (sleep 2; /etc/init.d/${LOGIN_MANAGER} start >/dev/null) &
|
pankso@359
|
200 fi
|
pankso@359
|
201
|
pankso@302
|
202 # Start all daemons specified with $RUN_DAEMONS
|
pankso@302
|
203 if [ "$RUN_DAEMONS" ]; then
|
pankso@302
|
204 colorize 33 "Starting all daemons..."
|
pankso@302
|
205 for daemon in $RUN_DAEMONS; do
|
pascal@385
|
206 [ -x /etc/init.d/$daemon ] &&
|
pankso@32
|
207 /etc/init.d/$daemon start
|
pankso@302
|
208 done
|
pankso@5
|
209 fi
|
pankso@5
|
210
|
pankso@302
|
211 # Back to a verbose mode
|
al@393
|
212 (sleep 6 && echo '7 4 1 7' > /proc/sys/kernel/printk) &
|
pankso@302
|
213
|
pankso@302
|
214 if [ "$MESSAGE" ]; then
|
pankso@302
|
215 newline
|
pankso@302
|
216 colorize 32 "$MESSAGE"
|
pankso@302
|
217 fi
|
pascal@276
|
218 ;;
|
pankso@187
|
219
|
pascal@276
|
220 *)
|
pankso@305
|
221 # --> readonly --> readwrite
|
pascal@310
|
222 if [ ! -s /run/boot.log ]; then
|
pascal@310
|
223 # Mount /run as tmpfs runtime data are not written to disk
|
pascal@310
|
224 mount -t tmpfs tmpfs /run
|
pascal@338
|
225 # cp -a in tazpkg does not support /var/run symlink
|
pascal@338
|
226 mount --bind /run /var/run
|
pankso@306
|
227 fi
|
pascal@310
|
228 /etc/init.d/rcS readonly 2>&1 | tee -a /run/boot.log
|
pascal@309
|
229 # Logrotate boot.log
|
pankso@305
|
230 last=.9
|
pankso@305
|
231 for i in .8 .7 .6 .5 .4 .3 .2 .1 .0 '' ; do
|
pankso@306
|
232 mv -f /var/log/boot.log${i} /var/log/boot.log${last} 2>/dev/null
|
pankso@305
|
233 last=$i
|
pankso@305
|
234 done
|
pascal@310
|
235 mv -f /run/boot.log /var/log/boot.log
|
pascal@308
|
236 /etc/init.d/rcS readwrite 2>&1 | tee -a /var/log/boot.log ;;
|
pascal@276
|
237 esac
|
pascal@435
|
238 busybox ps | sed '/tee -a .*boot.log/!d;s/ root.*//' | xargs kill 2> /dev/null
|