Contents of /tags/mkinitrd-6_3_4/livecd/linuxrc.sh
Parent Directory | Revision Log
Revision 1189 -
(show annotations)
(download)
(as text)
Thu Dec 16 01:27:43 2010 UTC (13 years, 9 months ago) by niro
File MIME type: application/x-sh
File size: 5053 byte(s)
Thu Dec 16 01:27:43 2010 UTC (13 years, 9 months ago) by niro
File MIME type: application/x-sh
File size: 5053 byte(s)
tagged 'mkinitrd-6_3_4'
1 | #!/bin/sh |
2 | # $Id$ |
3 | |
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 | FSTYPE="${fs}" |
49 | break |
50 | fi |
51 | fi |
52 | done |
53 | } |
54 | |
55 | ## some defaults ## |
56 | DOSCSI=no |
57 | DOUSB=no |
58 | DOSATA=yes |
59 | DOFB=no |
60 | DOPATA=yes |
61 | FORCED_ROOTFS="" |
62 | INITEXEC="/sbin/init" |
63 | BREAK_ENABLED=no |
64 | |
65 | ## starts here ## |
66 | |
67 | # mount essential filesystems |
68 | mount -t proc proc /proc |
69 | mount -t sysfs sysfs /sys |
70 | mount -t tmpfs tmpfs /dev -o rw,mode=0644,size=1024 |
71 | |
72 | # install all busybox applets |
73 | busybox --install -s |
74 | |
75 | # 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 | 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 | init=*) INITEXEC="${i#*=}";; |
94 | break) BREAK_ENABLED=yes ;; |
95 | esac |
96 | done |
97 | |
98 | # now load all needed modules |
99 | [ "${DOFB}" = "yes" ] && load_kernel_modules "framebuffer" |
100 | load_kernel_modules "generic" |
101 | [ "${DOPATA}" = "yes" ] && load_kernel_modules "pata" |
102 | [ "${DOSCSI}" = "yes" ] && load_kernel_modules "scsi" |
103 | [ "${DOUSB}" = "yes" ] && load_kernel_modules "usb" |
104 | [ "${DOSATA}" = "yes" ] && load_kernel_modules "sata" |
105 | |
106 | # populate dev |
107 | mdev -s |
108 | # handle hotplug events properly |
109 | echo /sbin/mdev > /proc/sys/kernel/hotplug |
110 | |
111 | # 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 | ROOTFS="vfat" |
136 | [[ ! -z ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}" |
137 | check_drives "/dev/sd*" "${ROOTFS}" |
138 | check_drives "/dev/sg*" "${ROOTFS}" |
139 | fi |
140 | |
141 | # for cdrom_device in $CDROM_LIST (ide) |
142 | ROOTFS="iso9660" |
143 | [[ ! -z ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}" |
144 | check_drives "/dev/cdroms/*" "${ROOTFS}" |
145 | check_drives "/dev/hd*" "${ROOTFS}" |
146 | |
147 | # scsi cdroms |
148 | if [ "${DOSCSI}" = "yes" ] || [ "${DOSATA}" = "yes" ]; then |
149 | ROOTFS="iso9660" |
150 | [[ ! -z ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}" |
151 | check_drives "/dev/sr*" "${ROOTFS}" |
152 | check_drives "/dev/sg*" "${ROOTFS}" |
153 | check_drives "/dev/scd*" "${ROOTFS}" |
154 | 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 | for x in bin sbin lib lib64 boot usr opt |
180 | do |
181 | [ -d mnt/cloop/${x} ] && ln -s mnt/cloop/${x} ${x} |
182 | 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 | # only to be safe and to have a log channel |
189 | [ ! -e /sysroot/dev/tty ] && mknod /sysroot/dev/tty c 5 0 |
190 | # busybox needs this one |
191 | [ ! -e /sysroot/dev/tty5 ] && mknod /sysroot/dev/tty5 c 4 5 |
192 | |
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 | # unset hotplug event-manager |
203 | echo > /proc/sys/kernel/hotplug |
204 | |
205 | # de-silencio |
206 | echo 3 > /proc/sys/kernel/printk |
207 | |
208 | if [[ ${BREAK_ENABLED} = yes ]] |
209 | then |
210 | echo "-- Break requested, type 'exit' to resume operation ..." |
211 | ash |
212 | fi |
213 | |
214 | echo "-- Switching to real sysroot ..." |
215 | umount /dev |
216 | umount /sys |
217 | umount /proc |
218 | |
219 | exec run-init /sysroot ${INITEXEC} $@ </sysroot/dev/console >/sysroot/dev/console |