Magellan Linux

Contents of /trunk/mkinitrd-magellan/livecd/linuxrc.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 663 - (show annotations) (download) (as text)
Mon Jan 14 19:32:52 2008 UTC (16 years, 3 months ago) by niro
File MIME type: application/x-sh
File size: 4424 byte(s)
-added support for frambuffer modules and a variable rootfs wich kann be forced via kernel cmdline (e.g. rootfs=ext2)

1 #!/bin/sh
2 # $Header: /home/cvsd/magellan-cvs/magellan-src/mkinitrd-magellan/livecd/linuxrc.sh,v 1.3 2008-01-14 19:32:52 niro Exp $
3
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 FSTYPE="${fs}"
49 break
50 fi
51 fi
52 done
53 }
54
55 ## some defaults ##
56 DOSCSI=no
57 DOUSB=no
58 DOSATA=no
59 DOFB=no
60 NOPATA=no
61 FORCED_ROOTFS=""
62
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 dofb)
86 DOFB=yes
87 ;;
88 nopata)
89 NOPATA=yes
90 ;;
91 rootfs=*)
92 shift
93 FORCED_ROOTFS="${1#*=}"
94 ;;
95 esac
96 done
97
98 # now load all needed modules
99 load_kernel_modules "generic"
100 [ "${NOPATA}" != "yes" ] && load_kernel_modules "pata"
101 [ "${DOSCSI}" = "yes" ] && load_kernel_modules "scsi"
102 [ "${DOUSB}" = "yes" ] && load_kernel_modules "usb"
103 [ "${DOSATA}" = "yes" ] && load_kernel_modules "sata"
104 [ "${DOFB}" = "yes" ] && load_kernel_modules "framebuffer"
105
106 # create newroot mount point
107 mkdir -p /sysroot
108 # fake a new filesystem (also needed with an initramfs!!)
109 mount -t tmpfs tmpfs /sysroot
110
111 mkdir -p /sysroot/mnt/cdrom
112 mkdir -p /sysroot/mnt/cloop
113 mkdir -p /sysroot/mnt/magellan
114
115
116 # needed for the usbstick, the timeout maybe to short
117 if [ "${DOUSB}" = "yes" ]; then
118 echo "-- Waiting 8 seconds for possible usb mount ..."
119 sleep 8
120 fi
121
122 # searching cdrom with cdid
123 BOOT_DEVICE=""
124 FSTYPE=""
125
126 echo "Searching for a boot device ..."
127
128 # searching usbstick
129 if [ "${DOUSB}" = "yes" ]; then
130 ROOTFS="vfat"
131 [[ -n ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}"
132 check_drives "/dev/sd*" "${ROOTFS}"
133 check_drives "/dev/sg*" "${ROOTFS}"
134 fi
135
136 # for cdrom_device in $CDROM_LIST (ide)
137 ROOTFS="iso9660"
138 [[ -n ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}"
139 check_drives "/dev/cdroms/*" "${ROOTFS}"
140 check_drives "/dev/hd*" "${ROOTFS}"
141
142 # scsi cdroms
143 if [ "${DOSCSI}" = "yes" ] || [ "${DOSATA}" = "yes" ]; then
144 ROOTFS="iso9660"
145 [[ -n ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}"
146 check_drives "/dev/sr*" "${ROOTFS}"
147 check_drives "/dev/sg*" "${ROOTFS}"
148 check_drives "/dev/scd*" "${ROOTFS}"
149 fi
150
151 # mount our rootfs from cdrom
152 if [ "${BOOT_DEVICE}" = "" ]
153 then
154 echo "No Magellan boot CD/USBStick found!!!"
155 ash
156 exit 1
157 else
158 echo -e "Booting from: $BOOT_DEVICE ..."
159 mount -o ro -t "${FSTYPE}" "${BOOT_DEVICE}" /sysroot/mnt/cdrom >/dev/null 2>&1
160
161 # write our boot_device to /mnt/.bootdev for later use (mtab)
162 echo "BOOTDEV=${BOOT_DEVICE}" > /sysroot/.bootdev
163 echo "FSTYPE=${FSTYPE}" >> /sysroot/.bootdev
164
165 # mount squashfs
166 echo -e "Mounting squashfs system image ..."
167 echo
168 [ ! -e /dev/loop0 ] && mknod /dev/loop0 b 7 0
169 mount -o loop,ro -t squashfs /sysroot/mnt/cdrom/livecdrootfs.sqsh /sysroot/mnt/cloop
170
171 # symlinking cloop rootfs to /mnt as newroot
172 cd /sysroot
173
174 for x in bin sbin lib lib64 boot usr opt
175 do
176 [ -d mnt/cloop/${x} ] && ln -s mnt/cloop/${x} ${x}
177 done
178 mkdir -p initrd proc tmp sys var/tmp dev media
179
180 # make /sysroot/dev/console & /mnt/dev/null
181 [ ! -e /sysroot/dev/console ] && mknod -m 600 /sysroot/dev/console c 5 1
182 [ ! -e /sysroot/dev/null ] && mknod -m 666 /sysroot/dev/null c 1 3
183
184 (cd /sysroot/mnt/cloop; cp -a etc root home var /sysroot)
185
186 # ensure the right permissions
187 chmod 1777 /sysroot/tmp
188 chmod 1777 /sysroot/var/tmp
189 fi
190
191 cd /
192
193 # de-silencio
194 echo 3 > /proc/sys/kernel/printk
195
196 echo "-- Switching to real sysroot ..."
197 umount /sys
198 umount /proc
199
200 exec run-init /sysroot /sbin/init $@ </sysroot/dev/console >/sysroot/dev/console