Contents of /tags/before_split/mlivecdbuild/files/linuxrc
Parent Directory | Revision Log
Revision 465 -
(show annotations)
(download)
Sat Apr 14 15:23:28 2007 UTC (17 years, 5 months ago) by (unknown author)
File size: 7361 byte(s)
Sat Apr 14 15:23:28 2007 UTC (17 years, 5 months ago) by (unknown author)
File size: 7361 byte(s)
This commit was manufactured by cvs2svn to create tag 'before_split'.
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 | 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 | echo "BOOTDEV=${BOOT_DEVICE}" > /mnt/.bootdev |
260 | echo "FSTYPE=${FSTYPE}" >> /mnt/.bootdev |
261 | |
262 | if [ -f /mnt/mnt/cdrom/livecdrootfs.cloop ] |
263 | then |
264 | # mount rootfs (cloop) |
265 | 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 | # mount squashfs |
273 | 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 | |
279 | # symlinking cloop rootfs to /mnt as newroot |
280 | cd /mnt |
281 | |
282 | 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 | |
289 | # make /mnt/dev/console & /mnt/dev/null |
290 | [ ! -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 | |
293 | (cd /mnt/mnt/cloop; cp -a etc root home var /mnt) |
294 | |
295 | # shurely change to correct permissions |
296 | chmod 1777 /mnt/tmp |
297 | chmod 1777 /mnt/var/tmp |
298 | |
299 | #ash |
300 | |
301 | # set default verbose level for kernel messages |
302 | [ -z "${RC_VERBOSE_LEVEL}" ] && RC_VERBOSE_LEVEL=3 |
303 | echo "${RC_VERBOSE_LEVEL}" > /proc/sys/kernel/printk |
304 | |
305 | cd /mnt |
306 | |
307 | pivot_root . initrd |
308 | |
309 | # dirty but working |
310 | # umount devpts |
311 | umount -n /initrd/dev/pts &> /dev/null |
312 | # wait a little bit to be safe |
313 | sleep 1 |
314 | # umount devfs or udev |
315 | umount -n /initrd/dev &> /dev/null |
316 | # umount sysfs |
317 | umount -n /initrd/sys &> /dev/null |
318 | # umount proc |
319 | umount -n /initrd/proc &> /dev/null |
320 | |
321 | #debug |
322 | #/initrd/bin/busybox ash |
323 | |
324 | #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 | * |