1 |
#!/bin/sh |
#!/bin/sh |
2 |
# $Header: /home/cvsd/magellan-cvs/magellan-src/mkinitrd-magellan/livecd/linuxrc.sh,v 1.8 2008-06-26 22:48:31 niro Exp $ |
# $Id$ |
3 |
|
|
4 |
# loads given kernel modules |
# loads given kernel modules |
5 |
load_kernel_modules() |
load_kernel_modules() |
55 |
## some defaults ## |
## some defaults ## |
56 |
DOSCSI=no |
DOSCSI=no |
57 |
DOUSB=no |
DOUSB=no |
58 |
DOSATA=no |
DOSATA=yes |
59 |
DOFB=no |
DOFB=no |
60 |
DOPATA=no |
DOPATA=yes |
61 |
FORCED_ROOTFS="" |
FORCED_ROOTFS="" |
62 |
|
INITEXEC="/sbin/init" |
63 |
|
BREAK_ENABLED=no |
64 |
|
UNIONFS=no |
65 |
|
UNIONFS_FILE="" |
66 |
|
CLOOPMOUNTDIR="/sysroot/mnt/cloop" |
67 |
|
|
68 |
## starts here ## |
## starts here ## |
69 |
|
|
70 |
# mount essential filesystems |
# mount essential filesystems |
71 |
mount -t proc proc /proc |
mount -t proc proc /proc |
72 |
mount -t sysfs sysfs /sys |
mount -t sysfs sysfs /sys |
73 |
|
mount -t tmpfs tmpfs /dev -o rw,mode=0644,size=1024 |
74 |
|
|
75 |
|
# install all busybox applets |
76 |
|
busybox --install -s |
77 |
|
|
78 |
# silencio |
# silencio |
79 |
echo 0 > /proc/sys/kernel/printk |
echo 0 > /proc/sys/kernel/printk |
82 |
for i in $(cat /proc/cmdline) |
for i in $(cat /proc/cmdline) |
83 |
do |
do |
84 |
case "${i}" in |
case "${i}" in |
85 |
doscsi) |
doscsi) DOSCSI=yes;; |
86 |
DOSCSI=yes |
noscsi) DOSCSI=no;; |
87 |
;; |
dousb) DOUSB=yes;; |
88 |
dousb) |
nousb) DOUSB=no;; |
89 |
DOUSB=yes |
dosata) DOSATA=yes ;; |
90 |
;; |
nosata) DOSATA=no ;; |
91 |
dosata) |
dofb) DOFB=yes;; |
92 |
DOSATA=yes |
nofb) DOFB=no;; |
93 |
;; |
dopata) DOPATA=yes;; |
94 |
dofb) |
nopata) DOPATA=no;; |
95 |
DOFB=yes |
rootfs=*) FORCED_ROOTFS="${i#*=}";; |
96 |
;; |
init=*) INITEXEC="${i#*=}";; |
97 |
dopata) |
break) BREAK_ENABLED=yes ;; |
98 |
DOPATA=yes |
unionfs) UNIONFS=yes;; |
99 |
;; |
unionfs_file=*) UNIONFS_FILE="${i#*=}";; |
|
rootfs=*) |
|
|
FORCED_ROOTFS="${i#*=}" |
|
|
;; |
|
100 |
esac |
esac |
101 |
done |
done |
102 |
|
|
108 |
[ "${DOUSB}" = "yes" ] && load_kernel_modules "usb" |
[ "${DOUSB}" = "yes" ] && load_kernel_modules "usb" |
109 |
[ "${DOSATA}" = "yes" ] && load_kernel_modules "sata" |
[ "${DOSATA}" = "yes" ] && load_kernel_modules "sata" |
110 |
|
|
111 |
|
# populate dev |
112 |
|
mdev -s |
113 |
|
# handle hotplug events properly |
114 |
|
echo /sbin/mdev > /proc/sys/kernel/hotplug |
115 |
|
|
116 |
# create newroot mount point |
# create newroot mount point |
117 |
mkdir -p /sysroot |
mkdir -p /sysroot |
118 |
# fake a new filesystem (also needed with an initramfs!!) |
# fake a new filesystem (also needed with an initramfs!!) |
176 |
echo -e "Mounting squashfs system image ..." |
echo -e "Mounting squashfs system image ..." |
177 |
echo |
echo |
178 |
[ ! -e /dev/loop0 ] && mknod /dev/loop0 b 7 0 |
[ ! -e /dev/loop0 ] && mknod /dev/loop0 b 7 0 |
179 |
mount -o loop,ro -t squashfs /sysroot/mnt/cdrom/livecdrootfs.sqsh /sysroot/mnt/cloop |
mount -o loop,ro -t squashfs /sysroot/mnt/cdrom/livecdrootfs.sqsh "${CLOOPMOUNTDIR}" |
180 |
|
|
181 |
|
# mount unionfs if enabled |
182 |
|
if [[ ${UNIONFS} = yes ]] |
183 |
|
then |
184 |
|
echo -e "Mounting writeable cdbuffer (unionfs) ..." |
185 |
|
|
186 |
|
# default setting |
187 |
|
CLOOPMOUNTDIR="/sysroot/mnt/unionfs" |
188 |
|
[[ -z ${UNIONFS_FILE} ]] && UNIONFS_FILE="/sysroot/mnt/cdrom/unionfs" |
189 |
|
|
190 |
|
[[ ! -d /sysroot/mnt/unionfs ]] && install -d /sysroot/mnt/unionfs |
191 |
|
mount -t unionfs dirs=${UNIONFS_FILE}=rw:/sysroot/mnt/cloop=ro ${CLOOPMOUNTDIR} |
192 |
|
fi |
193 |
|
|
194 |
# symlinking cloop rootfs to /mnt as newroot |
# symlinking cloop rootfs to /mnt as newroot |
195 |
cd /sysroot |
cd /sysroot |
196 |
|
|
197 |
for x in bin sbin lib lib64 boot usr opt |
for x in bin sbin lib lib64 boot usr opt |
198 |
do |
do |
199 |
[ -d mnt/cloop/${x} ] && ln -s mnt/cloop/${x} ${x} |
[ -d ${CLOOPMOUNTDIR/\/sysroot\//}/${x} ] && ln -s ${CLOOPMOUNTDIR/\/sysroot\//}/${x} ${x} |
200 |
done |
done |
201 |
mkdir -p initrd proc tmp sys var/tmp dev media |
mkdir -p initrd proc tmp sys var/tmp dev media |
202 |
|
|
204 |
[ ! -e /sysroot/dev/console ] && mknod -m 600 /sysroot/dev/console c 5 1 |
[ ! -e /sysroot/dev/console ] && mknod -m 600 /sysroot/dev/console c 5 1 |
205 |
[ ! -e /sysroot/dev/null ] && mknod -m 666 /sysroot/dev/null c 1 3 |
[ ! -e /sysroot/dev/null ] && mknod -m 666 /sysroot/dev/null c 1 3 |
206 |
# only to be safe and to have a log channel |
# only to be safe and to have a log channel |
207 |
[ ! -e /sysroot/dev/tty ] && mknod ${BINDIR}/dev/tty c 5 0 |
[ ! -e /sysroot/dev/tty ] && mknod /sysroot/dev/tty c 5 0 |
208 |
# busybox needs this one |
# busybox needs this one |
209 |
[ ! -e /sysroot/dev/tty5 ] && mknod ${BINDIR}/dev/tty5 c 4 5 |
[ ! -e /sysroot/dev/tty5 ] && mknod /sysroot/dev/tty5 c 4 5 |
210 |
|
|
211 |
(cd /sysroot/mnt/cloop; cp -a etc root home var /sysroot) |
(cd ${CLOOPMOUNTDIR}; cp -a etc root home var /sysroot) |
212 |
|
|
213 |
# ensure the right permissions |
# ensure the right permissions |
214 |
chmod 1777 /sysroot/tmp |
chmod 1777 /sysroot/tmp |
217 |
|
|
218 |
cd / |
cd / |
219 |
|
|
220 |
|
# unset hotplug event-manager |
221 |
|
echo > /proc/sys/kernel/hotplug |
222 |
|
|
223 |
# de-silencio |
# de-silencio |
224 |
echo 3 > /proc/sys/kernel/printk |
echo 3 > /proc/sys/kernel/printk |
225 |
|
|
226 |
|
if [[ ${BREAK_ENABLED} = yes ]] |
227 |
|
then |
228 |
|
echo "-- Break requested, type 'exit' to resume operation ..." |
229 |
|
ash |
230 |
|
fi |
231 |
|
|
232 |
echo "-- Switching to real sysroot ..." |
echo "-- Switching to real sysroot ..." |
233 |
|
umount /dev |
234 |
umount /sys |
umount /sys |
235 |
umount /proc |
umount /proc |
236 |
|
|
237 |
exec run-init /sysroot /sbin/init $@ </sysroot/dev/console >/sysroot/dev/console |
exec run-init /sysroot ${INITEXEC} $@ </sysroot/dev/console >/sysroot/dev/console |