Contents of /trunk/mlivecdbuild/files/linuxrc
Parent Directory | Revision Log
Revision 27 -
(show annotations)
(download)
Wed Jan 5 05:36:10 2005 UTC (19 years, 4 months ago) by niro
File size: 9218 byte(s)
Wed Jan 5 05:36:10 2005 UTC (19 years, 4 months ago) by niro
File size: 9218 byte(s)
mlivecdbuild-0.3.6-r7 import
1 | #!/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 | * |