Magellan Linux

Contents of /trunk/mkinitrd/lib/linuxrc.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 334 - (show annotations) (download) (as text)
Thu Feb 23 12:02:04 2006 UTC (18 years, 2 months ago) by niro
File MIME type: application/x-sh
File size: 4744 byte(s)
set permission once is enough :)

1 #!/bin/sh
2 # $Header: /home/cvsd/magellan-cvs/magellan-src/mkinitrd/lib/linuxrc.sh,v 1.2 2006-02-23 12:02:04 niro Exp $
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=no
59
60 ## starts here ##
61
62 # mount essential filesystems
63 mount -t proc proc /proc
64 mount -t sysfs sysfs /sys
65
66 # silencio
67 echo 0 > /proc/sys/kernel/printk
68
69 echo "-- Creating inital device nodes ..."
70 mount -o mode=0755 -t tmpfs udev /dev
71 mkdir /dev/pts
72 mkdir /dev/shm
73 mkdir /dev/mapper
74 mknod /dev/console c 5 1
75 mknod /dev/null c 1 3
76 mknod /dev/ram b 1 1
77 mknod /dev/rtc c 10 135
78 mknod /dev/systty c 4 0
79 mknod /dev/tty c 5 0
80 mknod /dev/zero c 1 5
81 mknod /dev/tty0 c 4 0
82 mknod /dev/tty1 c 4 1
83 mknod /dev/tty2 c 4 2
84 mknod /dev/tty3 c 4 3
85 mknod /dev/tty4 c 4 4
86 mknod /dev/tty5 c 4 5
87 mknod /dev/tty6 c 4 6
88 mknod /dev/tty7 c 4 7
89 mknod /dev/tty8 c 4 8
90 mknod /dev/tty9 c 4 9
91 mknod /dev/tty10 c 4 10
92 mknod /dev/tty11 c 4 11
93 mknod /dev/tty12 c 4 12
94 mknod /dev/ttyS0 c 4 64
95 mknod /dev/ttyS1 c 4 65
96 mknod /dev/ttyS2 c 4 66
97 mknod /dev/ttyS3 c 4 67
98
99 echo "-- Starting udevd ..."
100 ln -snf bin /sbin
101 /sbin/udevstart
102 ln -snf /proc/self/fd /dev/fd
103 ln -snf fd/0 /dev/stdin
104 ln -snf fd/1 /dev/stdout
105 ln -snf fd/2 /dev/stderr
106 ln -snf /proc/kcore /dev/core
107 touch /dev/.udev
108
109 echo "-- Setting up hotplug ..."
110 #echo "/sbin/hotplug" > /proc/sys/kernel/hotplug
111 echo "/sbin/udev" > /proc/sys/kernel/hotplug
112
113 # check command line for params
114 for i in $(cat /proc/cmdline)
115 do
116 case "${i}" in
117 doscsi)
118 DOSCSI=yes
119 ;;
120 dousb)
121 DOUSB=yes
122 ;;
123 dosata)
124 DOSATA=yes
125 ;;
126 esac
127 done
128
129 # now load all needed modules
130 load_kernel_modules "generic"
131 [ "${DOSCSI}" = "yes" ] && load_kernel_modules "scsi"
132 [ "${DOUSB}" = "yes" ] && load_kernel_modules "usb"
133 [ "${DOSATA}" = "yes" ] && load_kernel_modules "sata"
134
135 # create newroot mount point
136 mkdir -p /sysroot
137 # fake a new filesystem (also needed with an initramfs!!)
138 mount -t tmpfs tmpfs /sysroot
139
140 mkdir -p /sysroot/mnt/cdrom
141 mkdir -p /sysroot/mnt/cloop
142 mkdir -p /sysroot/mnt/magellan
143
144
145 # needed for the usbstick, the timeout maybe to short
146 if [ "${DOUSB}" = "yes" ]; then
147 echo "-- Waiting 3 seconds for possible usb mount ..."
148 sleep 3
149 fi
150
151 # searching cdrom with cdid
152 BOOT_DEVICE=""
153 FSTYPE=""
154
155 echo "Searching for a boot device ..."
156
157 # searching usbstick
158 check_drives "/dev/scsi/host[0-99]/bus[0-99]/target[0-99]/lun[0-99]/part[0-99]" "vfat"
159
160 # for cdrom_device in $CDROM_LIST (ide)
161 check_drives "/dev/cdroms/*" iso9660
162 check_drives "/dev/hd*" iso9660
163
164 # scsi cdroms
165 check_drives "/dev/sr*" iso9660
166
167 # mount our rootfs from cdrom
168 if [ "${BOOT_DEVICE}" = "" ]
169 then
170 echo "No Magellan boot CD/USBStick found!!!"
171 ash
172 exit 1
173 else
174 echo -e "Booting from: $BOOT_DEVICE ..."
175 mount -o ro -t "${FSTYPE}" "${BOOT_DEVICE}" /sysroot/mnt/cdrom >/dev/null 2>&1
176
177 # write our boot_device to /mnt/.bootdev for later use (mtab)
178 echo "BOOTDEV=${BOOT_DEVICE}" > /sysroot/.bootdev
179 echo "FSTYPE=${FSTYPE}" >> /sysroot/.bootdev
180
181 # mount squashfs
182 echo -e "Mounting squashfs system image ..."
183 echo
184 [ ! -e /dev/loop0 ] && mknod /dev/loop0 b 7 0
185 mount -o loop,ro -t squashfs /sysroot/mnt/cdrom/livecdrootfs.sqsh /sysroot/mnt/cloop
186
187 # symlinking cloop rootfs to /mnt as newroot
188 cd /sysroot
189
190 for x in bin sbin lib boot usr opt
191 do
192 ln -s mnt/cloop/${x} ${x}
193 done
194 mkdir -p initrd proc tmp sys var/tmp dev
195
196 # make /sysroot/dev/console & /mnt/dev/null
197 [ ! -e /sysroot/dev/console ] && mknod -m 600 /sysroot/dev/console c 5 1
198 [ ! -e /sysroot/dev/null ] && mknod -m 666 /sysroot/dev/null c 1 3
199
200 (cd /sysroot/mnt/cloop; cp -a etc root home var /sysroot)
201
202 # ensure the right permissions
203 chmod 1777 /sysroot/tmp
204 chmod 1777 /sysroot/var/tmp
205 fi
206
207 cd /
208
209 # de-silencio
210 echo 3 > /proc/sys/kernel/printk
211
212 echo "-- Switching to real sysroot ..."
213 umount /sys
214 umount /proc
215
216 exec run-init /sysroot /sbin/init $@ </sysroot/dev/console >/sysroot/dev/console