Magellan Linux

Contents of /trunk/mlivecdbuild/files/linuxrc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 27 - (show 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 #!/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 *