Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1188 - (hide annotations) (download) (as text)
Thu Dec 16 01:24:51 2010 UTC (13 years, 4 months ago) by niro
File MIME type: application/x-sh
File size: 5053 byte(s)
-added shell drop-in support into the initrd when 'break' was given on the cmdline
1 niro 532 #!/bin/sh
2 niro 809 # $Id$
3 niro 532
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 niro 663 FSTYPE="${fs}"
49 niro 532 break
50     fi
51     fi
52     done
53     }
54    
55     ## some defaults ##
56     DOSCSI=no
57     DOUSB=no
58 niro 894 DOSATA=yes
59 niro 663 DOFB=no
60 niro 894 DOPATA=yes
61 niro 663 FORCED_ROOTFS=""
62 niro 1180 INITEXEC="/sbin/init"
63 niro 1188 BREAK_ENABLED=no
64 niro 532
65     ## starts here ##
66    
67     # mount essential filesystems
68     mount -t proc proc /proc
69     mount -t sysfs sysfs /sys
70 niro 894 mount -t tmpfs tmpfs /dev -o rw,mode=0644,size=1024
71 niro 532
72 niro 894 # install all busybox applets
73     busybox --install -s
74    
75 niro 532 # silencio
76     echo 0 > /proc/sys/kernel/printk
77    
78     # check command line for params
79     for i in $(cat /proc/cmdline)
80     do
81     case "${i}" in
82 niro 894 doscsi) DOSCSI=yes;;
83     noscsi) DOSCSI=no;;
84     dousb) DOUSB=yes;;
85     nousb) DOUSB=no;;
86     dosata) DOSATA=yes ;;
87     nosata) DOSATA=no ;;
88     dofb) DOFB=yes;;
89     nofb) DOFB=no;;
90     dopata) DOPATA=yes;;
91     nopata) DOPATA=no;;
92     rootfs=*) FORCED_ROOTFS="${i#*=}";;
93 niro 1180 init=*) INITEXEC="${i#*=}";;
94 niro 1188 break) BREAK_ENABLED=yes ;;
95 niro 532 esac
96     done
97    
98     # now load all needed modules
99 niro 671 [ "${DOFB}" = "yes" ] && load_kernel_modules "framebuffer"
100 niro 532 load_kernel_modules "generic"
101 niro 673 [ "${DOPATA}" = "yes" ] && load_kernel_modules "pata"
102 niro 532 [ "${DOSCSI}" = "yes" ] && load_kernel_modules "scsi"
103     [ "${DOUSB}" = "yes" ] && load_kernel_modules "usb"
104     [ "${DOSATA}" = "yes" ] && load_kernel_modules "sata"
105    
106 niro 894 # populate dev
107     mdev -s
108     # handle hotplug events properly
109     echo /sbin/mdev > /proc/sys/kernel/hotplug
110    
111 niro 532 # create newroot mount point
112     mkdir -p /sysroot
113     # fake a new filesystem (also needed with an initramfs!!)
114     mount -t tmpfs tmpfs /sysroot
115    
116     mkdir -p /sysroot/mnt/cdrom
117     mkdir -p /sysroot/mnt/cloop
118     mkdir -p /sysroot/mnt/magellan
119    
120    
121     # needed for the usbstick, the timeout maybe to short
122     if [ "${DOUSB}" = "yes" ]; then
123     echo "-- Waiting 8 seconds for possible usb mount ..."
124     sleep 8
125     fi
126    
127     # searching cdrom with cdid
128     BOOT_DEVICE=""
129     FSTYPE=""
130    
131     echo "Searching for a boot device ..."
132    
133     # searching usbstick
134     if [ "${DOUSB}" = "yes" ]; then
135 niro 663 ROOTFS="vfat"
136 niro 706 [[ ! -z ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}"
137 niro 663 check_drives "/dev/sd*" "${ROOTFS}"
138     check_drives "/dev/sg*" "${ROOTFS}"
139 niro 532 fi
140    
141     # for cdrom_device in $CDROM_LIST (ide)
142 niro 663 ROOTFS="iso9660"
143 niro 706 [[ ! -z ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}"
144 niro 663 check_drives "/dev/cdroms/*" "${ROOTFS}"
145     check_drives "/dev/hd*" "${ROOTFS}"
146 niro 532
147     # scsi cdroms
148     if [ "${DOSCSI}" = "yes" ] || [ "${DOSATA}" = "yes" ]; then
149 niro 663 ROOTFS="iso9660"
150 niro 706 [[ ! -z ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}"
151 niro 663 check_drives "/dev/sr*" "${ROOTFS}"
152     check_drives "/dev/sg*" "${ROOTFS}"
153     check_drives "/dev/scd*" "${ROOTFS}"
154 niro 532 fi
155    
156     # mount our rootfs from cdrom
157     if [ "${BOOT_DEVICE}" = "" ]
158     then
159     echo "No Magellan boot CD/USBStick found!!!"
160     ash
161     exit 1
162     else
163     echo -e "Booting from: $BOOT_DEVICE ..."
164     mount -o ro -t "${FSTYPE}" "${BOOT_DEVICE}" /sysroot/mnt/cdrom >/dev/null 2>&1
165    
166     # write our boot_device to /mnt/.bootdev for later use (mtab)
167     echo "BOOTDEV=${BOOT_DEVICE}" > /sysroot/.bootdev
168     echo "FSTYPE=${FSTYPE}" >> /sysroot/.bootdev
169    
170     # mount squashfs
171     echo -e "Mounting squashfs system image ..."
172     echo
173     [ ! -e /dev/loop0 ] && mknod /dev/loop0 b 7 0
174     mount -o loop,ro -t squashfs /sysroot/mnt/cdrom/livecdrootfs.sqsh /sysroot/mnt/cloop
175    
176     # symlinking cloop rootfs to /mnt as newroot
177     cd /sysroot
178    
179 niro 605 for x in bin sbin lib lib64 boot usr opt
180 niro 532 do
181 niro 605 [ -d mnt/cloop/${x} ] && ln -s mnt/cloop/${x} ${x}
182 niro 532 done
183     mkdir -p initrd proc tmp sys var/tmp dev media
184    
185     # make /sysroot/dev/console & /mnt/dev/null
186     [ ! -e /sysroot/dev/console ] && mknod -m 600 /sysroot/dev/console c 5 1
187     [ ! -e /sysroot/dev/null ] && mknod -m 666 /sysroot/dev/null c 1 3
188 niro 753 # only to be safe and to have a log channel
189 niro 757 [ ! -e /sysroot/dev/tty ] && mknod /sysroot/dev/tty c 5 0
190 niro 753 # busybox needs this one
191 niro 757 [ ! -e /sysroot/dev/tty5 ] && mknod /sysroot/dev/tty5 c 4 5
192 niro 532
193     (cd /sysroot/mnt/cloop; cp -a etc root home var /sysroot)
194    
195     # ensure the right permissions
196     chmod 1777 /sysroot/tmp
197     chmod 1777 /sysroot/var/tmp
198     fi
199    
200     cd /
201    
202 niro 894 # unset hotplug event-manager
203     echo > /proc/sys/kernel/hotplug
204    
205 niro 532 # de-silencio
206     echo 3 > /proc/sys/kernel/printk
207    
208 niro 1188 if [[ ${BREAK_ENABLED} = yes ]]
209     then
210     echo "-- Break requested, type 'exit' to resume operation ..."
211     ash
212     fi
213    
214 niro 532 echo "-- Switching to real sysroot ..."
215 niro 894 umount /dev
216 niro 532 umount /sys
217     umount /proc
218    
219 niro 1180 exec run-init /sysroot ${INITEXEC} $@ </sysroot/dev/console >/sysroot/dev/console