Annotation of /trunk/mlivecdbuild/files/linuxrc
Parent Directory | Revision Log
Revision 96 -
(hide annotations)
(download)
Fri Jul 1 16:41:55 2005 UTC (18 years, 10 months ago) by niro
File size: 7361 byte(s)
Fri Jul 1 16:41:55 2005 UTC (18 years, 10 months ago) by niro
File size: 7361 byte(s)
fixed lots of whitespaces nd some minor fixes
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 | niro | 96 | |
39 | # not provided by sysfs but needed | ||
40 | niro | 27 | 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 | niro | 96 | # create problematic directories |
48 | niro | 27 | mkdir -p /dev/pts |
49 | mkdir -p /dev/shm | ||
50 | |||
51 | #same as /dev/.devfsd | ||
52 | touch /dev/.udev | ||
53 | niro | 96 | |
54 | niro | 27 | 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 | niro | 96 | echo -e ${COLWHITE}"-- ${i} not found."${COLDEFAULT} |
90 | niro | 27 | 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 | niro | 96 | |
117 | niro | 27 | 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 | niro | 96 | # first of all read in kernel-config params |
130 | niro | 27 | . /etc/conf.d/kernel |
131 | |||
132 | niro | 96 | # remount / writeable |
133 | niro | 27 | mount -n -oremount,rw /dev/ram0 / -t cramfs |
134 | |||
135 | niro | 96 | # mount proc |
136 | niro | 27 | 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 | niro | 96 | # kernel 2.6-x needs sysfs |
144 | niro | 27 | 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 | niro | 96 | # mount devfs only with a 2.4 kernel or its really wanted with a 2.6 |
153 | niro | 27 | if [ "$(kernel_major_version)" = "2.4" -o "${RC_USED_DEV}" = "devfs" ] |
154 | then | ||
155 | [ ! -d "/dev" ] && mkdir -p /dev | ||
156 | niro | 96 | |
157 | niro | 27 | 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 | niro | 96 | # load udev only with a 2.6 kernel |
166 | niro | 27 | if [ "$(kernel_major_version)" = "2.6" -a "${RC_USED_DEV}" = "udev" ] |
167 | then | ||
168 | niro | 96 | # create a ramdisk for populating udev |
169 | niro | 27 | echo -e ${COLOREDSTAR}"${COLWHITE}Mounting ramfs at /dev ...${COLDEFAULT}" |
170 | mount -n -t ramfs none /dev | ||
171 | niro | 96 | |
172 | # if a device tarball exists load it and if it is activated | ||
173 | niro | 27 | echo -e ${COLOREDSTAR}"${COLWHITE}Configurating system to use udev ...${COLDEFAULT}" |
174 | niro | 96 | |
175 | # now load udev | ||
176 | niro | 27 | populate_udev |
177 | niro | 96 | |
178 | # if hotplug support exists in the kernel use it to manage udev | ||
179 | niro | 27 | echo -e ${COLOREDSTAR}"${COLWHITE} Setting /sbin/udev as hotplug agent ...${COLDEFAULT}" |
180 | echo "/sbin/udev" > /proc/sys/kernel/hotplug | ||
181 | fi | ||
182 | |||
183 | niro | 96 | # kernel2.6 needs again devpts |
184 | niro | 27 | 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 | niro | 96 | # disable kernel messages to console |
192 | niro | 27 | echo "0" > /proc/sys/kernel/printk |
193 | |||
194 | niro | 96 | # check command line for params |
195 | niro | 27 | 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 | niro | 96 | # now load all needed modules |
208 | niro | 27 | 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 | niro | 96 | # create newroot mount point with tmpfs |
222 | niro | 27 | 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 | niro | 96 | # needed for the usbstick, the timeout maybe to short |
231 | niro | 27 | echo -e ${COLOREDSTAR}"${COLWHITE}Waiting 3 seconds for possible usb mount ..." |
232 | sleep 3 | ||
233 | |||
234 | niro | 96 | # searching cdrom with cdid |
235 | niro | 27 | BOOT_DEVICE="" |
236 | FSTYPE="" | ||
237 | |||
238 | echo -e ${COLOREDSTAR}"${COLWHITE}Searching for a boot device ..." | ||
239 | niro | 96 | # searching usbstick |
240 | niro | 27 | check_drives "/dev/scsi/host[0-99]/bus[0-99]/target[0-99]/lun[0-99]/part[0-99]" "vfat" |
241 | |||
242 | niro | 96 | # for cdrom_device in $CDROM_LIST (ide) |
243 | niro | 27 | check_drives "/dev/cdroms/*" iso9660 |
244 | |||
245 | niro | 96 | # scsi cdroms |
246 | niro | 27 | check_drives "/dev/sr*" iso9660 |
247 | |||
248 | niro | 96 | # mount our rootfs from cdrom |
249 | niro | 27 | 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 | niro | 96 | mount -o ro -t "${FSTYPE}" "${BOOT_DEVICE}" /mnt/mnt/cdrom >/dev/null 2>&1 |
257 | |||
258 | # write our boot_device to /mnt/.bootdev for later use (mtab) | ||
259 | niro | 27 | echo "BOOTDEV=${BOOT_DEVICE}" > /mnt/.bootdev |
260 | echo "FSTYPE=${FSTYPE}" >> /mnt/.bootdev | ||
261 | |||
262 | if [ -f /mnt/mnt/cdrom/livecdrootfs.cloop ] | ||
263 | then | ||
264 | niro | 96 | # mount rootfs (cloop) |
265 | niro | 27 | echo -e ${COLOREDSTAR}"${COLWHITE}Mounting cloop system image ...${COLDEFAULT}" |
266 | echo | ||
267 | [ ! -e /dev/cloop ] && mknod /dev/cloop b 240 0 | ||
268 | insmod /lib/modules/misc/cloop.o file=/mnt/mnt/cdrom/livecdrootfs.cloop > /dev/null | ||
269 | mkdir -p /mnt/mnt/cloop | ||
270 | mount -o ro -t ext2 /dev/cloop /mnt/mnt/cloop | ||
271 | else | ||
272 | niro | 96 | # mount squashfs |
273 | niro | 27 | echo -e ${COLOREDSTAR}"${COLWHITE}Mounting squashfs system image ...${COLDEFAULT}" |
274 | echo | ||
275 | [ ! -e /dev/loop0 ] && mknod /dev/loop0 b 7 0 | ||
276 | mount -o loop,ro -t squashfs /mnt/mnt/cdrom/livecdrootfs.sqsh /mnt/mnt/cloop | ||
277 | fi | ||
278 | niro | 96 | |
279 | # symlinking cloop rootfs to /mnt as newroot | ||
280 | niro | 27 | cd /mnt |
281 | niro | 96 | |
282 | niro | 27 | for x in bin sbin lib boot usr opt |
283 | do | ||
284 | ln -s mnt/cloop/${x} ${x} | ||
285 | done | ||
286 | mkdir -p initrd proc tmp sys var/tmp dev | ||
287 | chmod 1777 tmp var/tmp | ||
288 | niro | 96 | |
289 | # make /mnt/dev/console & /mnt/dev/null | ||
290 | niro | 27 | [ ! -e /mnt/dev/console ] && mknod -m 600 /mnt/dev/console c 5 1 |
291 | [ ! -e /mnt/dev/null ] && mknod -m 666 /mnt/dev/null c 1 3 | ||
292 | niro | 96 | |
293 | niro | 27 | (cd /mnt/mnt/cloop; cp -a etc root home var /mnt) |
294 | niro | 96 | |
295 | # shurely change to correct permissions | ||
296 | chmod 1777 /mnt/tmp | ||
297 | niro | 27 | chmod 1777 /mnt/var/tmp |
298 | niro | 96 | |
299 | niro | 27 | #ash |
300 | niro | 96 | |
301 | # set default verbose level for kernel messages | ||
302 | niro | 27 | [ -z "${RC_VERBOSE_LEVEL}" ] && RC_VERBOSE_LEVEL=3 |
303 | echo "${RC_VERBOSE_LEVEL}" > /proc/sys/kernel/printk | ||
304 | |||
305 | cd /mnt | ||
306 | niro | 96 | |
307 | niro | 27 | pivot_root . initrd |
308 | |||
309 | niro | 96 | # dirty but working |
310 | # umount devpts | ||
311 | niro | 27 | umount -n /initrd/dev/pts &> /dev/null |
312 | niro | 96 | # wait a little bit to be safe |
313 | niro | 27 | sleep 1 |
314 | niro | 96 | # umount devfs or udev |
315 | niro | 27 | umount -n /initrd/dev &> /dev/null |
316 | niro | 96 | # umount sysfs |
317 | niro | 27 | umount -n /initrd/sys &> /dev/null |
318 | niro | 96 | # umount proc |
319 | niro | 27 | umount -n /initrd/proc &> /dev/null |
320 | |||
321 | #debug | ||
322 | #/initrd/bin/busybox ash | ||
323 | niro | 96 | |
324 | niro | 27 | #enter chroot and umount /initrd |
325 | exec chroot . sh -c 'umount -n /initrd >/dev/null 2>&1;\ | ||
326 | exec -a init.new /sbin/init'\ | ||
327 | </dev/console >/dev/console 2>&1 | ||
328 | fi |
Properties
Name | Value |
---|---|
svn:executable | * |