Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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