Annotation of /tags/mkinitrd-6_2_2/livecd/linuxrc.sh
Parent Directory | Revision Log
Revision 753 -
(hide annotations)
(download)
(as text)
Thu Jun 26 22:21:36 2008 UTC (16 years, 3 months ago) by niro
Original Path: trunk/mkinitrd-magellan/livecd/linuxrc.sh
File MIME type: application/x-sh
File size: 4627 byte(s)
Thu Jun 26 22:21:36 2008 UTC (16 years, 3 months ago) by niro
Original Path: trunk/mkinitrd-magellan/livecd/linuxrc.sh
File MIME type: application/x-sh
File size: 4627 byte(s)
-create tty device to be able to log the boot process and busybox need tty5 or it complains
1 | niro | 532 | #!/bin/sh |
2 | niro | 753 | # $Header: /home/cvsd/magellan-cvs/magellan-src/mkinitrd-magellan/livecd/linuxrc.sh,v 1.7 2008-06-26 22:21:36 niro Exp $ |
3 | niro | 532 | |
4 | # loads given kernel modules | ||
5 | load_kernel_modules() | ||
6 | { | ||
7 | local type="$1" | ||
8 | local module | ||
9 | local args | ||
10 | |||
11 | echo -e "-- Loading ${type} modules:" | ||
12 | ( cat /etc/modules.${type}; echo) | while read module args | ||
13 | do | ||
14 | case "${module}" in | ||
15 | \#*|"") continue ;; | ||
16 | esac | ||
17 | |||
18 | if [ -e /lib/${module}.ko ] | ||
19 | then | ||
20 | insmod -f /lib/${module}.ko ${args} > /dev/null 2>&1 | ||
21 | [ $? -eq 0 ] && echo -e "-- ${module}" | ||
22 | fi | ||
23 | done | ||
24 | echo | ||
25 | } | ||
26 | |||
27 | # check_drives $devices $fstype | ||
28 | check_drives() | ||
29 | { | ||
30 | local devices="$1" | ||
31 | local fs="$2" | ||
32 | |||
33 | for dev in ${devices} | ||
34 | do | ||
35 | mount -t ${fs} ${dev} /sysroot/mnt/cdrom >/dev/null 2>&1 | ||
36 | media_found=$? | ||
37 | |||
38 | # if mount was ok check if cdid exists | ||
39 | if [ "${media_found}" -eq 0 ] | ||
40 | then | ||
41 | [ -e /sysroot/mnt/cdrom/livecdrootfs.sqsh ] && media_id_ok=$? | ||
42 | umount /sysroot/mnt/cdrom | ||
43 | |||
44 | if [ "${media_id_ok}" -eq 0 ] | ||
45 | then | ||
46 | echo -e "Magellan boot device found." | ||
47 | BOOT_DEVICE="${dev}" | ||
48 | niro | 663 | FSTYPE="${fs}" |
49 | niro | 532 | break |
50 | fi | ||
51 | fi | ||
52 | done | ||
53 | } | ||
54 | |||
55 | ## some defaults ## | ||
56 | DOSCSI=no | ||
57 | DOUSB=no | ||
58 | DOSATA=no | ||
59 | niro | 663 | DOFB=no |
60 | niro | 673 | DOPATA=no |
61 | niro | 663 | FORCED_ROOTFS="" |
62 | niro | 532 | |
63 | ## starts here ## | ||
64 | |||
65 | # mount essential filesystems | ||
66 | mount -t proc proc /proc | ||
67 | mount -t sysfs sysfs /sys | ||
68 | |||
69 | # silencio | ||
70 | echo 0 > /proc/sys/kernel/printk | ||
71 | |||
72 | # check command line for params | ||
73 | for i in $(cat /proc/cmdline) | ||
74 | do | ||
75 | case "${i}" in | ||
76 | doscsi) | ||
77 | DOSCSI=yes | ||
78 | ;; | ||
79 | dousb) | ||
80 | DOUSB=yes | ||
81 | ;; | ||
82 | dosata) | ||
83 | DOSATA=yes | ||
84 | ;; | ||
85 | niro | 663 | dofb) |
86 | DOFB=yes | ||
87 | ;; | ||
88 | niro | 673 | dopata) |
89 | DOPATA=yes | ||
90 | niro | 532 | ;; |
91 | niro | 663 | rootfs=*) |
92 | niro | 671 | FORCED_ROOTFS="${i#*=}" |
93 | niro | 663 | ;; |
94 | niro | 532 | esac |
95 | done | ||
96 | |||
97 | # now load all needed modules | ||
98 | niro | 671 | [ "${DOFB}" = "yes" ] && load_kernel_modules "framebuffer" |
99 | niro | 532 | load_kernel_modules "generic" |
100 | niro | 673 | [ "${DOPATA}" = "yes" ] && load_kernel_modules "pata" |
101 | niro | 532 | [ "${DOSCSI}" = "yes" ] && load_kernel_modules "scsi" |
102 | [ "${DOUSB}" = "yes" ] && load_kernel_modules "usb" | ||
103 | [ "${DOSATA}" = "yes" ] && load_kernel_modules "sata" | ||
104 | |||
105 | # create newroot mount point | ||
106 | mkdir -p /sysroot | ||
107 | # fake a new filesystem (also needed with an initramfs!!) | ||
108 | mount -t tmpfs tmpfs /sysroot | ||
109 | |||
110 | mkdir -p /sysroot/mnt/cdrom | ||
111 | mkdir -p /sysroot/mnt/cloop | ||
112 | mkdir -p /sysroot/mnt/magellan | ||
113 | |||
114 | |||
115 | # needed for the usbstick, the timeout maybe to short | ||
116 | if [ "${DOUSB}" = "yes" ]; then | ||
117 | echo "-- Waiting 8 seconds for possible usb mount ..." | ||
118 | sleep 8 | ||
119 | fi | ||
120 | |||
121 | # searching cdrom with cdid | ||
122 | BOOT_DEVICE="" | ||
123 | FSTYPE="" | ||
124 | |||
125 | echo "Searching for a boot device ..." | ||
126 | |||
127 | # searching usbstick | ||
128 | if [ "${DOUSB}" = "yes" ]; then | ||
129 | niro | 663 | ROOTFS="vfat" |
130 | niro | 706 | [[ ! -z ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}" |
131 | niro | 663 | check_drives "/dev/sd*" "${ROOTFS}" |
132 | check_drives "/dev/sg*" "${ROOTFS}" | ||
133 | niro | 532 | fi |
134 | |||
135 | # for cdrom_device in $CDROM_LIST (ide) | ||
136 | niro | 663 | ROOTFS="iso9660" |
137 | niro | 706 | [[ ! -z ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}" |
138 | niro | 663 | check_drives "/dev/cdroms/*" "${ROOTFS}" |
139 | check_drives "/dev/hd*" "${ROOTFS}" | ||
140 | niro | 532 | |
141 | # scsi cdroms | ||
142 | if [ "${DOSCSI}" = "yes" ] || [ "${DOSATA}" = "yes" ]; then | ||
143 | niro | 663 | ROOTFS="iso9660" |
144 | niro | 706 | [[ ! -z ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}" |
145 | niro | 663 | check_drives "/dev/sr*" "${ROOTFS}" |
146 | check_drives "/dev/sg*" "${ROOTFS}" | ||
147 | check_drives "/dev/scd*" "${ROOTFS}" | ||
148 | niro | 532 | fi |
149 | |||
150 | # mount our rootfs from cdrom | ||
151 | if [ "${BOOT_DEVICE}" = "" ] | ||
152 | then | ||
153 | echo "No Magellan boot CD/USBStick found!!!" | ||
154 | ash | ||
155 | exit 1 | ||
156 | else | ||
157 | echo -e "Booting from: $BOOT_DEVICE ..." | ||
158 | mount -o ro -t "${FSTYPE}" "${BOOT_DEVICE}" /sysroot/mnt/cdrom >/dev/null 2>&1 | ||
159 | |||
160 | # write our boot_device to /mnt/.bootdev for later use (mtab) | ||
161 | echo "BOOTDEV=${BOOT_DEVICE}" > /sysroot/.bootdev | ||
162 | echo "FSTYPE=${FSTYPE}" >> /sysroot/.bootdev | ||
163 | |||
164 | # mount squashfs | ||
165 | echo -e "Mounting squashfs system image ..." | ||
166 | echo | ||
167 | [ ! -e /dev/loop0 ] && mknod /dev/loop0 b 7 0 | ||
168 | mount -o loop,ro -t squashfs /sysroot/mnt/cdrom/livecdrootfs.sqsh /sysroot/mnt/cloop | ||
169 | |||
170 | # symlinking cloop rootfs to /mnt as newroot | ||
171 | cd /sysroot | ||
172 | |||
173 | niro | 605 | for x in bin sbin lib lib64 boot usr opt |
174 | niro | 532 | do |
175 | niro | 605 | [ -d mnt/cloop/${x} ] && ln -s mnt/cloop/${x} ${x} |
176 | niro | 532 | done |
177 | mkdir -p initrd proc tmp sys var/tmp dev media | ||
178 | |||
179 | # make /sysroot/dev/console & /mnt/dev/null | ||
180 | [ ! -e /sysroot/dev/console ] && mknod -m 600 /sysroot/dev/console c 5 1 | ||
181 | [ ! -e /sysroot/dev/null ] && mknod -m 666 /sysroot/dev/null c 1 3 | ||
182 | niro | 753 | # only to be safe and to have a log channel |
183 | [ ! -e /sysroot/dev/tty ] && mknod ${BINDIR}/dev/tty c 5 0 || die | ||
184 | # busybox needs this one | ||
185 | [ ! -e /sysroot/dev/tty5 ] && mknod ${BINDIR}/dev/tty5 c 4 5 || die | ||
186 | niro | 532 | |
187 | (cd /sysroot/mnt/cloop; cp -a etc root home var /sysroot) | ||
188 | |||
189 | # ensure the right permissions | ||
190 | chmod 1777 /sysroot/tmp | ||
191 | chmod 1777 /sysroot/var/tmp | ||
192 | fi | ||
193 | |||
194 | cd / | ||
195 | |||
196 | # de-silencio | ||
197 | echo 3 > /proc/sys/kernel/printk | ||
198 | |||
199 | echo "-- Switching to real sysroot ..." | ||
200 | umount /sys | ||
201 | umount /proc | ||
202 | |||
203 | exec run-init /sysroot /sbin/init $@ </sysroot/dev/console >/sysroot/dev/console |