Magellan Linux

Contents of /trunk/mlivecdbuild/files/linuxrc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 96 - (show annotations) (download)
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 #!/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 *