Annotation of /trunk/mlivecdbuild/files/linuxrc
Parent Directory | Revision Log
Revision 27 -
(hide annotations)
(download)
Wed Jan 5 05:36:10 2005 UTC (19 years, 5 months ago) by niro
File size: 9218 byte(s)
Wed Jan 5 05:36:10 2005 UTC (19 years, 5 months ago) by niro
File size: 9218 byte(s)
mlivecdbuild-0.3.6-r7 import
1 | niro | 27 | #!/bin/sh |
2 | |||
3 | #some nice colors: | ||
4 | COLRED="\033[1;6m\033[31m" | ||
5 | COLGREEN="\033[1;6m\033[32m" | ||
6 | COLYELLOW="\033[1;6m\033[33m" | ||
7 | COLBLUE="\033[1;6m\033[34m" | ||
8 | COLMAGENTA="\033[1;6m\033[35m" | ||
9 | COLWHITE="\033[1;6m\033[37m" | ||
10 | COLDEFAULT="\033[0m" | ||
11 | |||
12 | COLOREDSTAR="${COLBLUE}(${COLGREEN}*${COLBLUE})${COLDEFAULT} " | ||
13 | |||
14 | CDID=cdid | ||
15 | PATH="/bin:/sbin:/usr/bin:/usr/sbin" | ||
16 | |||
17 | DOSCSI=no | ||
18 | DOUSB=no | ||
19 | |||
20 | if [ -e /mods_scsi ] | ||
21 | then | ||
22 | MODS_SCSI="$(cat /mods_scsi)" | ||
23 | else | ||
24 | MODS_SCSI="" | ||
25 | fi | ||
26 | |||
27 | if [ -e /mods_usb ] | ||
28 | then | ||
29 | MODS_USB="$(cat mods_usb)" | ||
30 | else | ||
31 | MODS_USB="" | ||
32 | fi | ||
33 | |||
34 | #some needed functions | ||
35 | populate_udev() | ||
36 | { | ||
37 | /sbin/udevstart | ||
38 | |||
39 | #not provided by sysfs but needed | ||
40 | ln -snf /proc/self/fd /dev/fd | ||
41 | ln -snf fd/0 /dev/stdin | ||
42 | ln -snf fd/1 /dev/stdout | ||
43 | ln -snf fd/2 /dev/stderr | ||
44 | ln -snf /proc/kcore /dev/core | ||
45 | ln -snf /proc/asound/oss/sndstat /dev/sndstat | ||
46 | |||
47 | #create problematic directories | ||
48 | mkdir -p /dev/pts | ||
49 | mkdir -p /dev/shm | ||
50 | |||
51 | #same as /dev/.devfsd | ||
52 | touch /dev/.udev | ||
53 | |||
54 | return 0 | ||
55 | } | ||
56 | |||
57 | kernel_major_version() | ||
58 | { | ||
59 | local KV | ||
60 | KV="$(uname -r|cut -d. -f1-2)" | ||
61 | echo "${KV}" | ||
62 | } | ||
63 | |||
64 | |||
65 | scan_kernel_modules() | ||
66 | { | ||
67 | local MODS | ||
68 | TYPE="$1" | ||
69 | MODS="$2" | ||
70 | |||
71 | if [ "$(kernel_major_version)" = "2.6" ] | ||
72 | then | ||
73 | MOD_SUFFIX="ko" | ||
74 | else | ||
75 | MOD_SUFFIX="o" | ||
76 | fi | ||
77 | |||
78 | echo -e ${COLWHITE}"-- Loading ${TYPE} modules:"${COLDEFAULT} | ||
79 | for i in ${MODS} | ||
80 | do | ||
81 | if [ -e /modules/${TYPE}/${i}.${MOD_SUFFIX} ] | ||
82 | then | ||
83 | insmod.static -f /modules/${TYPE}/${i}.${MOD_SUFFIX} > /dev/null 2>&1 | ||
84 | if [ $? -eq 0 ] | ||
85 | then | ||
86 | echo -e ${COLWHITE}"-- ${i}"${COLDEFAULT} | ||
87 | fi | ||
88 | else | ||
89 | echo -e ${COLWHITE}"-- ${i} not found."${COLDEFAULT} | ||
90 | fi | ||
91 | done | ||
92 | } | ||
93 | |||
94 | #check_drives $devices $fstype | ||
95 | check_drives() | ||
96 | { | ||
97 | local devices | ||
98 | local fs | ||
99 | |||
100 | devices="$1" | ||
101 | fs="$2" | ||
102 | |||
103 | for dev in ${devices} | ||
104 | do | ||
105 | mount -t ${fs} ${dev} /mnt/mnt/tmp >/dev/null 2>&1 | ||
106 | media_found=$? | ||
107 | |||
108 | #if mount was ok check if cdid exists | ||
109 | if [ "${media_found}" -eq 0 ] | ||
110 | then | ||
111 | if [ -e /mnt/mnt/tmp/${CDID} ] | ||
112 | then | ||
113 | media_id_ok=$? | ||
114 | fi | ||
115 | umount /mnt/mnt/tmp | ||
116 | |||
117 | if [ "${media_id_ok}" -eq 0 ] | ||
118 | then | ||
119 | echo -e ${COLOREDSTAR}"${COLGREEN}Magellan boot device found.${COLDEFAULT}" | ||
120 | BOOT_DEVICE="${dev}" | ||
121 | FSTYPE=${fs} | ||
122 | break; | ||
123 | fi | ||
124 | fi | ||
125 | done | ||
126 | |||
127 | } | ||
128 | |||
129 | #first of all read in kernel-config params | ||
130 | . /etc/conf.d/kernel | ||
131 | |||
132 | #remount / writeable | ||
133 | mount -n -oremount,rw /dev/ram0 / -t cramfs | ||
134 | |||
135 | #mount proc | ||
136 | if [ ! -e /proc/mounts ] | ||
137 | then | ||
138 | [ ! -d "/proc" ] && mkdir -p /proc | ||
139 | echo -e ${COLOREDSTAR}"${COLWHITE}Mounting proc file system ...${COLDEFAULT}" | ||
140 | mount -t proc proc /proc | ||
141 | fi | ||
142 | |||
143 | #kernel 2.6-x needs sysfs | ||
144 | if [ "$(kernel_major_version)" = "2.6" ] | ||
145 | then | ||
146 | [ ! -d /sys ] && mkdir /sys | ||
147 | echo -e ${COLOREDSTAR}"${COLWHITE}Mounting sysfs file system ...${COLDEFAULT}" | ||
148 | mount -t sysfs none /sys | ||
149 | fi | ||
150 | |||
151 | ### load devfs ### | ||
152 | #mount devfs only with a 2.4 kernel or its really wanted with a 2.6 | ||
153 | if [ "$(kernel_major_version)" = "2.4" -o "${RC_USED_DEV}" = "devfs" ] | ||
154 | then | ||
155 | [ ! -d "/dev" ] && mkdir -p /dev | ||
156 | |||
157 | if [ ! -e /dev/.devfsd ] | ||
158 | then | ||
159 | echo -e ${COLOREDSTAR}"${COLWHITE}Mounting devfs file system ...${COLDEFAULT}" | ||
160 | mount -t devfs devfs /dev | ||
161 | fi | ||
162 | fi | ||
163 | |||
164 | #### load udev #### | ||
165 | #load udev only with a 2.6 kernel | ||
166 | if [ "$(kernel_major_version)" = "2.6" -a "${RC_USED_DEV}" = "udev" ] | ||
167 | then | ||
168 | #create a ramdisk for populating udev | ||
169 | echo -e ${COLOREDSTAR}"${COLWHITE}Mounting ramfs at /dev ...${COLDEFAULT}" | ||
170 | mount -n -t ramfs none /dev | ||
171 | |||
172 | #if a device tarball exists load it and if it is activated | ||
173 | echo -e ${COLOREDSTAR}"${COLWHITE}Configurating system to use udev ...${COLDEFAULT}" | ||
174 | |||
175 | #now load udev | ||
176 | populate_udev | ||
177 | |||
178 | #if hotplug support exists in the kernel use it to manage udev | ||
179 | echo -e ${COLOREDSTAR}"${COLWHITE} Setting /sbin/udev as hotplug agent ...${COLDEFAULT}" | ||
180 | echo "/sbin/udev" > /proc/sys/kernel/hotplug | ||
181 | fi | ||
182 | |||
183 | #kernel2.6 needs again devpts | ||
184 | if [ "$(kernel_major_version)" = "2.6" ] | ||
185 | then | ||
186 | echo -e ${COLOREDSTAR}"${COLWHITE}Mounting devpts at /dev/pts ...${COLDEFAULT}" | ||
187 | [ ! -d "/dev/pts" ] && mkdir -p /dev/pts | ||
188 | mount -n -t devpts -o gid=4,mode=0620 none /dev/pts | ||
189 | fi | ||
190 | |||
191 | #disable kernel messages to console | ||
192 | echo "0" > /proc/sys/kernel/printk | ||
193 | |||
194 | #check command line for params | ||
195 | for i in $(cat /proc/cmdline) | ||
196 | do | ||
197 | case "${i}" in | ||
198 | doscsi) | ||
199 | DOSCSI=yes | ||
200 | ;; | ||
201 | dousb) | ||
202 | DOUSB=yes | ||
203 | ;; | ||
204 | esac | ||
205 | done | ||
206 | |||
207 | #now load all needed modules | ||
208 | if [ -n "${MODS_SCSI}" -a "${DOSCSI}" = "yes" ] | ||
209 | then | ||
210 | scan_kernel_modules "scsi" "${MODS_SCSI}" | ||
211 | echo | ||
212 | fi | ||
213 | |||
214 | if [ -n "${MODS_USB}" -a "${DOUSB}" = "yes" ] | ||
215 | then | ||
216 | scan_kernel_modules "usb" "${MODS_USB}" | ||
217 | echo | ||
218 | fi | ||
219 | |||
220 | |||
221 | #create newroot mount point with tmpfs | ||
222 | mkdir -p /mnt | ||
223 | mount -t tmpfs tmpfs /mnt | ||
224 | |||
225 | mkdir -p /mnt/mnt/tmp | ||
226 | mkdir -p /mnt/mnt/cdrom | ||
227 | mkdir -p /mnt/mnt/cloop | ||
228 | mkdir -p /mnt/mnt/magellan | ||
229 | |||
230 | #needed for the usbstick, the timeout maybe to short | ||
231 | echo -e ${COLOREDSTAR}"${COLWHITE}Waiting 3 seconds for possible usb mount ..." | ||
232 | sleep 3 | ||
233 | |||
234 | #searching cdrom with cdid | ||
235 | BOOT_DEVICE="" | ||
236 | FSTYPE="" | ||
237 | |||
238 | echo -e ${COLOREDSTAR}"${COLWHITE}Searching for a boot device ..." | ||
239 | #searching usbstick | ||
240 | check_drives "/dev/scsi/host[0-99]/bus[0-99]/target[0-99]/lun[0-99]/part[0-99]" "vfat" | ||
241 | |||
242 | #for cdrom_device in $CDROM_LIST (ide) | ||
243 | check_drives "/dev/cdroms/*" iso9660 | ||
244 | |||
245 | #scsi cdroms | ||
246 | check_drives "/dev/sr*" iso9660 | ||
247 | |||
248 | #mount our rootfs from cdrom | ||
249 | if [ "${BOOT_DEVICE}" = "" ] | ||
250 | then | ||
251 | echo -e ${COLREDSTAR}"${COLRED}No Magellan boot CD/USBStick found!!!${COLDEFAULT}" | ||
252 | ash | ||
253 | exit 1 | ||
254 | else | ||
255 | echo -e ${COLOREDSTAR}"${COLWHITE}Booting from: $BOOT_DEVICE ...${COLDEFAULT}" | ||
256 | |||
257 | #mount cdrom | ||
258 | #mkdir -p /mnt/mnt/cdrom | ||
259 | if [ "${FSTYPE}" = "iso9660" ] | ||
260 | then | ||
261 | mount -o ro -t iso9660 ${BOOT_DEVICE} /mnt/mnt/cdrom >/dev/null 2>&1 | ||
262 | fi | ||
263 | |||
264 | if [ "${FSTYPE}" = "vfat" ] | ||
265 | then | ||
266 | mount -o ro -t vfat ${BOOT_DEVICE} /mnt/mnt/cdrom >/dev/null 2>&1 | ||
267 | fi | ||
268 | |||
269 | #mount -o ro -t ${FSTYPE} ${BOOT_DEVICE} /mnt/mnt/cdrom >/dev/null 2>&1 | ||
270 | |||
271 | #write our boot_device to /mnt/.bootdev for later use (mtab) | ||
272 | echo "BOOTDEV=${BOOT_DEVICE}" > /mnt/.bootdev | ||
273 | echo "FSTYPE=${FSTYPE}" >> /mnt/.bootdev | ||
274 | |||
275 | #mount rootfs (loopback) | ||
276 | #mknod /dev/loop0 b 7 0 | ||
277 | #losetup /dev/loop0 /mnt/mnt/cdrom/livecdrootfs | ||
278 | #mount -o ro -t ext2 /dev/loop0 /mnt | ||
279 | |||
280 | |||
281 | if [ -f /mnt/mnt/cdrom/livecdrootfs.cloop ] | ||
282 | then | ||
283 | #mount rootfs (cloop) | ||
284 | echo -e ${COLOREDSTAR}"${COLWHITE}Mounting cloop system image ...${COLDEFAULT}" | ||
285 | echo | ||
286 | [ ! -e /dev/cloop ] && mknod /dev/cloop b 240 0 | ||
287 | insmod /lib/modules/misc/cloop.o file=/mnt/mnt/cdrom/livecdrootfs.cloop > /dev/null | ||
288 | mkdir -p /mnt/mnt/cloop | ||
289 | mount -o ro -t ext2 /dev/cloop /mnt/mnt/cloop | ||
290 | else | ||
291 | #mount squashfs | ||
292 | echo -e ${COLOREDSTAR}"${COLWHITE}Mounting squashfs system image ...${COLDEFAULT}" | ||
293 | echo | ||
294 | [ ! -e /dev/loop0 ] && mknod /dev/loop0 b 7 0 | ||
295 | mount -o loop,ro -t squashfs /mnt/mnt/cdrom/livecdrootfs.sqsh /mnt/mnt/cloop | ||
296 | fi | ||
297 | |||
298 | #symlinking cloop rootfs to /mnt as newroot | ||
299 | cd /mnt | ||
300 | #if [ ! -e /mnt/dev/.devfsd ] | ||
301 | #then | ||
302 | # mkdir -p dev | ||
303 | # mount -t devfs devfs /mnt/dev | ||
304 | #fi | ||
305 | |||
306 | for x in bin sbin lib boot usr opt | ||
307 | do | ||
308 | ln -s mnt/cloop/${x} ${x} | ||
309 | done | ||
310 | mkdir -p initrd proc tmp sys var/tmp dev | ||
311 | chmod 1777 tmp var/tmp | ||
312 | |||
313 | #make /mnt/dev/console & /mnt/dev/null | ||
314 | [ ! -e /mnt/dev/console ] && mknod -m 600 /mnt/dev/console c 5 1 | ||
315 | [ ! -e /mnt/dev/null ] && mknod -m 666 /mnt/dev/null c 1 3 | ||
316 | |||
317 | #(cd /mnt/mnt/cloop/fake/needwrite; cp -a etc root home var /mnt) | ||
318 | (cd /mnt/mnt/cloop; cp -a etc root home var /mnt) | ||
319 | #cp -aR /mnt/mnt/cloop/fake/needwrite/etc /mnt | ||
320 | #cp -aR /mnt/mnt/cloop/fake/needwrite/root /mnt | ||
321 | #cp -aR /mnt/mnt/cloop/fake/needwrite/home /mnt | ||
322 | #cp -aR /mnt/mnt/cloop/fake/needwrite/var /mnt | ||
323 | |||
324 | #coping all fake/needwrite files to tmpfs | ||
325 | #cp -aR /mnt/mnt/cloop/fake/needwrite/* /mnt | ||
326 | |||
327 | #shurely change | ||
328 | chmod 1777 /mnt/tmp | ||
329 | chmod 1777 /mnt/var/tmp | ||
330 | |||
331 | #ash | ||
332 | |||
333 | #enable kernel messages to console | ||
334 | #echo "6" > /proc/sys/kernel/printk | ||
335 | #set default verbose level for kernel messages | ||
336 | [ -z "${RC_VERBOSE_LEVEL}" ] && RC_VERBOSE_LEVEL=3 | ||
337 | echo "${RC_VERBOSE_LEVEL}" > /proc/sys/kernel/printk | ||
338 | |||
339 | cd /mnt | ||
340 | |||
341 | #needed to check whether something else is mounted | ||
342 | #proc isn't needed anymore | ||
343 | #umount /proc | ||
344 | |||
345 | |||
346 | pivot_root . initrd | ||
347 | #umount -n /mnt/proc >/dev/null 2>&1 | ||
348 | #exec chroot . sh -c 'umount -n /mnt >/dev/null 2>&1;\ | ||
349 | # exec -a init.new /sbin/init 3'\ | ||
350 | # </dev/console >/dev/console 2>&1 | ||
351 | |||
352 | # #umount devpts | ||
353 | # DEVPTS_MOUNTED="$(cat /initrd/proc/mounts | grep /initrd/dev/pts | cut -d ' ' -f2)" | ||
354 | # if [ -n "${DEVPTS_MOUNTED}" ] | ||
355 | # then | ||
356 | # umount -n /initrd/dev/pts | ||
357 | # fi | ||
358 | # | ||
359 | # #umount devfs or udev | ||
360 | # DEVFS_MOUNTED="$(cat /initrd/proc/mounts | grep /initrd/dev | cut -d ' ' -f2)" | ||
361 | # if [ -n "${DEVFS_MOUNTED}" ] | ||
362 | # then | ||
363 | # umount -n /initrd/dev | ||
364 | # fi | ||
365 | # | ||
366 | # #umount sysfs | ||
367 | # SYSFS_MOUNTED="$(cat /initrd/proc/mounts | grep /initrd/sys | cut -d ' ' -f2)" | ||
368 | # if [ -n "${SYSFS_MOUNTED}" ] | ||
369 | # then | ||
370 | # umount -n /initrd/sys | ||
371 | # fi | ||
372 | # | ||
373 | # #umount proc | ||
374 | # PROC_MOUNTED="$(cat /initrd/proc/mounts | grep /initrd/proc | cut -d ' ' -f2)" | ||
375 | # if [ "${PROC_MOUNTED}" = "/initrd/proc" ] | ||
376 | # then | ||
377 | # umount -n /initrd/proc | ||
378 | # fi | ||
379 | |||
380 | #dirty but working | ||
381 | #umount devpts | ||
382 | umount -n /initrd/dev/pts &> /dev/null | ||
383 | #wait a little bit to be safe | ||
384 | sleep 1 | ||
385 | #umount devfs or udev | ||
386 | umount -n /initrd/dev &> /dev/null | ||
387 | #umount sysfs | ||
388 | umount -n /initrd/sys &> /dev/null | ||
389 | #umount proc | ||
390 | umount -n /initrd/proc &> /dev/null | ||
391 | |||
392 | #debug | ||
393 | #/initrd/bin/busybox ash | ||
394 | |||
395 | #enter chroot and umount /initrd | ||
396 | exec chroot . sh -c 'umount -n /initrd >/dev/null 2>&1;\ | ||
397 | exec -a init.new /sbin/init'\ | ||
398 | </dev/console >/dev/console 2>&1 | ||
399 | fi |
Properties
Name | Value |
---|---|
svn:executable | * |