Magellan Linux

Annotation of /trunk/mlivecdbuild/files/linuxrc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 96 - (hide 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 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 niro 96
39     # not provided by sysfs but needed
40 niro 27 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 niro 96 # create problematic directories
48 niro 27 mkdir -p /dev/pts
49     mkdir -p /dev/shm
50    
51     #same as /dev/.devfsd
52     touch /dev/.udev
53 niro 96
54 niro 27 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 niro 96 echo -e ${COLWHITE}"-- ${i} not found."${COLDEFAULT}
90 niro 27 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 niro 96
117 niro 27 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 niro 96 # first of all read in kernel-config params
130 niro 27 . /etc/conf.d/kernel
131    
132 niro 96 # remount / writeable
133 niro 27 mount -n -oremount,rw /dev/ram0 / -t cramfs
134    
135 niro 96 # mount proc
136 niro 27 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 niro 96 # kernel 2.6-x needs sysfs
144 niro 27 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 niro 96 # mount devfs only with a 2.4 kernel or its really wanted with a 2.6
153 niro 27 if [ "$(kernel_major_version)" = "2.4" -o "${RC_USED_DEV}" = "devfs" ]
154     then
155     [ ! -d "/dev" ] && mkdir -p /dev
156 niro 96
157 niro 27 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 niro 96 # load udev only with a 2.6 kernel
166 niro 27 if [ "$(kernel_major_version)" = "2.6" -a "${RC_USED_DEV}" = "udev" ]
167     then
168 niro 96 # create a ramdisk for populating udev
169 niro 27 echo -e ${COLOREDSTAR}"${COLWHITE}Mounting ramfs at /dev ...${COLDEFAULT}"
170     mount -n -t ramfs none /dev
171 niro 96
172     # if a device tarball exists load it and if it is activated
173 niro 27 echo -e ${COLOREDSTAR}"${COLWHITE}Configurating system to use udev ...${COLDEFAULT}"
174 niro 96
175     # now load udev
176 niro 27 populate_udev
177 niro 96
178     # if hotplug support exists in the kernel use it to manage udev
179 niro 27 echo -e ${COLOREDSTAR}"${COLWHITE} Setting /sbin/udev as hotplug agent ...${COLDEFAULT}"
180     echo "/sbin/udev" > /proc/sys/kernel/hotplug
181     fi
182    
183 niro 96 # kernel2.6 needs again devpts
184 niro 27 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 niro 96 # disable kernel messages to console
192 niro 27 echo "0" > /proc/sys/kernel/printk
193    
194 niro 96 # check command line for params
195 niro 27 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 niro 96 # now load all needed modules
208 niro 27 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 niro 96 # create newroot mount point with tmpfs
222 niro 27 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 niro 96 # needed for the usbstick, the timeout maybe to short
231 niro 27 echo -e ${COLOREDSTAR}"${COLWHITE}Waiting 3 seconds for possible usb mount ..."
232     sleep 3
233    
234 niro 96 # searching cdrom with cdid
235 niro 27 BOOT_DEVICE=""
236     FSTYPE=""
237    
238     echo -e ${COLOREDSTAR}"${COLWHITE}Searching for a boot device ..."
239 niro 96 # searching usbstick
240 niro 27 check_drives "/dev/scsi/host[0-99]/bus[0-99]/target[0-99]/lun[0-99]/part[0-99]" "vfat"
241    
242 niro 96 # for cdrom_device in $CDROM_LIST (ide)
243 niro 27 check_drives "/dev/cdroms/*" iso9660
244    
245 niro 96 # scsi cdroms
246 niro 27 check_drives "/dev/sr*" iso9660
247    
248 niro 96 # mount our rootfs from cdrom
249 niro 27 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 niro 96 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 niro 27 echo "BOOTDEV=${BOOT_DEVICE}" > /mnt/.bootdev
260     echo "FSTYPE=${FSTYPE}" >> /mnt/.bootdev
261    
262     if [ -f /mnt/mnt/cdrom/livecdrootfs.cloop ]
263     then
264 niro 96 # mount rootfs (cloop)
265 niro 27 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 niro 96 # mount squashfs
273 niro 27 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 niro 96
279     # symlinking cloop rootfs to /mnt as newroot
280 niro 27 cd /mnt
281 niro 96
282 niro 27 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 niro 96
289     # make /mnt/dev/console & /mnt/dev/null
290 niro 27 [ ! -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 niro 96
293 niro 27 (cd /mnt/mnt/cloop; cp -a etc root home var /mnt)
294 niro 96
295     # shurely change to correct permissions
296     chmod 1777 /mnt/tmp
297 niro 27 chmod 1777 /mnt/var/tmp
298 niro 96
299 niro 27 #ash
300 niro 96
301     # set default verbose level for kernel messages
302 niro 27 [ -z "${RC_VERBOSE_LEVEL}" ] && RC_VERBOSE_LEVEL=3
303     echo "${RC_VERBOSE_LEVEL}" > /proc/sys/kernel/printk
304    
305     cd /mnt
306 niro 96
307 niro 27 pivot_root . initrd
308    
309 niro 96 # dirty but working
310     # umount devpts
311 niro 27 umount -n /initrd/dev/pts &> /dev/null
312 niro 96 # wait a little bit to be safe
313 niro 27 sleep 1
314 niro 96 # umount devfs or udev
315 niro 27 umount -n /initrd/dev &> /dev/null
316 niro 96 # umount sysfs
317 niro 27 umount -n /initrd/sys &> /dev/null
318 niro 96 # umount proc
319 niro 27 umount -n /initrd/proc &> /dev/null
320    
321     #debug
322     #/initrd/bin/busybox ash
323 niro 96
324 niro 27 #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 *