Magellan Linux

Annotation of /trunk/mlivecdbuild/files/linuxrc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 27 - (hide annotations) (download)
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 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 *