]>
Commit | Line | Data |
---|---|---|
bb529f94 JK |
1 | #!/bin/sh |
2 | ||
3 | # geninitrd | |
4 | # | |
4e9eb79c | 5 | # by Jacek Konieczny <jajcus@pld-linux.org> |
bb529f94 | 6 | # |
413878f8 | 7 | # based on mkinitrd from RedHat |
c31050f3 | 8 | |
28eec2b1 | 9 | RCSID='$Id$' |
bb529f94 JK |
10 | PATH=/sbin:$PATH |
11 | export PATH | |
12 | ||
2b649ae0 | 13 | VERSION="`echo "$RCSID"|awk '{print $3}'`" |
bb529f94 JK |
14 | |
15 | . /etc/rc.d/init.d/functions | |
16 | ||
17 | COMPRESS="yes" | |
2ad94d8a AF |
18 | # INITRDFS is set later (catch obsoleted FS option) |
19 | #INITRDFS="rom" | |
6bd433bc | 20 | USERAIDSTART="yes" |
d3fa6ec7 | 21 | USEMDADMSTATIC="no" |
b2e62ae1 | 22 | USEINSMODSTATIC="no" |
4ef98747 | 23 | USE_SUSPEND="yes" |
335cd101 | 24 | USE_SUSPEND2="yes" |
7c38b114 | 25 | uselvm="no" |
6fe19d5b | 26 | usenfs="no" |
10c3df06 MM |
27 | # it should be safe to remove scsi_mod from here, but I'm not sure... |
28 | PRESCSIMODS="-scsi_mod unknown -sd_mod" | |
64497ebb AM |
29 | PREIDEMODS="-ide-core unknown -ide-detect -ide-disk" |
30 | PREIDEMODSOLD="-ide-probe -ide-probe-mod -ide-disk" | |
bb529f94 JK |
31 | target="" |
32 | kernel="" | |
33 | force="" | |
34 | verbose="" | |
35 | MODULES="" | |
36 | img_vers="" | |
f121024f | 37 | modulefile="" |
bb529f94 | 38 | fstab="/etc/fstab" |
0868f49f AF |
39 | insmod="insmod" |
40 | modext=".o" | |
4e9eb79c | 41 | rootdev_nr=0 |
5b71959c AM |
42 | # default bootsplash is off, if it have to be on, install bootsplash package |
43 | BOOT_SPLASH=no | |
bb529f94 | 44 | |
326d9c3a | 45 | if [ -f /etc/udev/udev.conf -a -x /sbin/initrd-udev ]; then |
1606e343 AM |
46 | USE_UDEV="yes" |
47 | UDEV_TMPFS="yes" | |
48 | . /etc/udev/udev.conf | |
49 | fi | |
882472ae ER |
50 | |
51 | if [ -x /sbin/dmraid-initrd ]; then | |
52 | USE_DMRAID="yes" | |
53 | fi | |
ac085800 | 54 | |
bb529f94 | 55 | usage () { |
ac085800 ER |
56 | echo "usage: `basename $0` [--version] [-v] [-f] [--ifneeded] [--preload <module>]" |
57 | echo " [--with=<module>] [--image-version] [--fstab=<fstab>] [--nocompress]" | |
58 | echo " [--initrdfs=rom|ext2|cram] [--modules-conf=<modules.conf>]" | |
59 | echo " [--with-raidstart] [--without-raidstart] [--with-insmod-static]" | |
1606e343 | 60 | echo " [--without-bootsplash] [--lvmtoolsversion=1|2] [--without-udev]" |
4ef98747 | 61 | echo " [--without-suspend] [--without-suspend2] [--without-dmraid]" |
ac085800 ER |
62 | echo " <initrd-image> <kernel-version>" |
63 | echo " (ex: `basename $0` /boot/initrd-2.2.5-15.img 2.2.5-15)" | |
7d2fc5eb | 64 | exit 1 |
bb529f94 JK |
65 | } |
66 | ||
aa69da6e | 67 | |
10c3df06 MM |
68 | my_dirname() { |
69 | echo $1|awk -F/ '{print substr($0, 0, length($0) - length($NF));}' | |
70 | } | |
71 | ||
72 | find_depmod () { | |
73 | typeset mods module f level depfile first | |
74 | ||
75 | depfile=/lib/modules/$kernel/modules.dep | |
ac085800 | 76 | |
b2e62ae1 | 77 | if [ -f $depfile ] ; then |
f6de9380 MM |
78 | : ok |
79 | else | |
c83257bc AF |
80 | echo "Error: no $depfile ! Run depmod and rerun geninitrd." 1>&2 |
81 | exit 1 | |
f6de9380 | 82 | fi |
ac085800 | 83 | |
0868f49f | 84 | # prepend / if no path given, append $modext.gz if not given, |
10c3df06 | 85 | # quote / |
3b00e899 | 86 | origmodule="$2" |
10c3df06 | 87 | module=$(echo "$2" | \ |
ac085800 ER |
88 | awk '/\// {print;next} {print "/" $0}' | \ |
89 | awk '/\./ {print;next} {print $0 "'$modext'.gz"}' | | |
90 | awk '{gsub("/","\\/");print}') | |
10c3df06 MM |
91 | mods=$(awk ' |
92 | BEGIN { here = 0 } | |
93 | /'"$module"':(.*)/ { gsub(/:/," "); gsub(/\\/," "); print; here = 1; next } | |
94 | /:/ { here = 0 } | |
95 | /(.*)/ { gsub(/\\/," "); if (here) print } | |
4fd11db9 AF |
96 | ' $depfile | xargs) |
97 | ||
0868f49f | 98 | # fallback to $modext |
4fd11db9 | 99 | if [ "$mods" = "" ] ; then |
ac085800 ER |
100 | module=$(echo "$module" | \ |
101 | awk '{gsub("\'$modext'\.gz$","\'$modext'",$0);print}') | |
102 | fi | |
4fd11db9 AF |
103 | mods=$(awk ' |
104 | BEGIN { here = 0 } | |
105 | /'"$module"':(.*)/ { gsub(/:/," "); gsub(/\\/," "); print; here = 1; next } | |
106 | /:/ { here = 0 } | |
107 | /(.*)/ { gsub(/\\/," "); if (here) print } | |
10c3df06 MM |
108 | ' $depfile | xargs) |
109 | ||
110 | if [ "$mods" = "" ] ; then | |
111 | if [ "$1" != silent ] ; then | |
3b00e899 | 112 | echo "$origmodule: module not found in $depfile" 1>&2 |
10c3df06 | 113 | fi |
ac085800 | 114 | if ! is_no "$EXIT_IF_MISSING" ; then |
fd2dc249 AF |
115 | exit 1 |
116 | else | |
3b00e899 | 117 | echo "If $origmodule isn't compiled in kernel then this initrd may not start your system". 1>&2 |
fd2dc249 | 118 | fi |
10c3df06 | 119 | fi |
ac085800 | 120 | |
10c3df06 MM |
121 | level=$3 |
122 | if [ "$level" = "" ] ; then | |
123 | level=0 | |
124 | fi | |
125 | level=$(awk "BEGIN{print $level + 1}") | |
126 | if [ $level -gt 20 ] ; then | |
3b00e899 | 127 | echo "$origmodule: cycle in $depfile" 1>&2 |
10c3df06 MM |
128 | exit 1 |
129 | fi | |
ac085800 | 130 | |
10c3df06 MM |
131 | first= |
132 | for f in $mods ; do | |
133 | if [ "$first" = "" ] ; then | |
134 | first=$f | |
413878f8 | 135 | else |
10c3df06 | 136 | find_depmod $1 $f $level |
9c9f7cdb | 137 | fi |
aa69da6e | 138 | done |
ac085800 | 139 | |
10c3df06 | 140 | echo $first |
aa69da6e | 141 | } |
142 | ||
10c3df06 MM |
143 | addmodule() { |
144 | fmPath=$1 | |
145 | skiperrors=$2 | |
146 | ||
147 | if [ ! -f "/lib/modules/$kernel/$fmPath" ]; then | |
148 | if [ -n "$skiperrors" ]; then | |
149 | return | |
150 | fi | |
151 | ||
152 | echo "module $fmPath present in modules.dep, but not in filesystem (kernel = $kernel)" 1>&2 | |
153 | exit 1 | |
154 | fi | |
155 | ||
156 | # only need to add each module once | |
157 | # quote / | |
158 | tmpFmPath=$(echo $fmPath | awk '{gsub(/\//,"\\/");print}') | |
159 | if echo "$MODULES" | awk '/'"$tmpFmPath"'/ {exit 1}' ; then | |
160 | MODULES="$MODULES $fmPath" | |
161 | fi | |
81de8443 AF |
162 | } |
163 | ||
bb529f94 | 164 | findmodule() { |
413878f8 | 165 | skiperrors="" |
166 | modName=$1 | |
10c3df06 | 167 | |
413878f8 | 168 | if [ "$(echo $modName | awk '{print(substr($0,1,1));}')" = "-" ]; then |
169 | skiperrors=1 | |
170 | modName="$(echo $modName | awk '{print(substr($0,2));}')" | |
171 | fi | |
bb529f94 | 172 | |
10c3df06 | 173 | # what's that? |
413878f8 | 174 | if [ "$modName" = "pluto" ]; then |
175 | findmodule fc4 | |
176 | findmodule soc | |
177 | fi | |
178 | if [ "$modName" = "fcal" ]; then | |
179 | findmodule fc4 | |
180 | findmodule socal | |
181 | fi | |
bb529f94 | 182 | |
10c3df06 MM |
183 | if [ -n "$skiperrors" ]; then |
184 | allModulesToFind=`find_depmod silent $modName` | |
185 | else | |
186 | allModulesToFind=`find_depmod normal $modName` | |
187 | if [ $? != 0 ] ; then | |
188 | exit 1 | |
413878f8 | 189 | fi |
413878f8 | 190 | fi |
ac085800 | 191 | |
10c3df06 | 192 | for mod in $allModulesToFind ; do |
ac085800 | 193 | mod=$(echo $mod | awk '{sub(/^\/lib\/modules\/[^\/]*\//,"");print}') |
10c3df06 MM |
194 | addmodule $mod "$skiperrors" |
195 | done | |
bb529f94 JK |
196 | } |
197 | ||
198 | inst() { | |
413878f8 | 199 | if [ "$#" != "2" ];then |
200 | echo "usage: inst <file> <destination>" | |
201 | return | |
c31050f3 | 202 | fi |
413878f8 | 203 | [ -n "$verbose" ] && echo "$1 -> $2" |
204 | cp "$1" "$2" | |
bb529f94 JK |
205 | } |
206 | ||
a2c2980f AF |
207 | get_label_ext2 () { |
208 | /sbin/e2label $1 2> /dev/null | |
209 | } | |
210 | ||
211 | get_uuid_ext2 () { | |
c31050f3 | 212 | /sbin/tune2fs -l $1 2> /dev/null | awk -F: '/UUID:/ {gsub(" ",""); print $2}' |
a2c2980f AF |
213 | } |
214 | ||
215 | get_label_xfs () { | |
3b9c8219 | 216 | /usr/sbin/xfs_db -x -p xfs_admin -c label -r "$1"|awk -F= '{sub("^\"","", $2); sub("\"$", "", $2); print $2}' |
c31050f3 | 217 | |
a2c2980f AF |
218 | } |
219 | ||
220 | get_uuid_xfs () { | |
3b9c8219 | 221 | /usr/sbin/xfs_db -x -p xfs_admin -c uuid -r "$1"|awk -F= '{print $2}' |
a2c2980f AF |
222 | } |
223 | ||
c31050f3 | 224 | find_root() { |
a2c2980f AF |
225 | eval `awk '/^[\t ]*#/ {next} {if ( $2 == "/" ) {print "rootdev=\"" $1 "\"\nrootFs=\"" $3 "\""}}' $fstab` |
226 | case $rootdev in | |
227 | LABEL=*) | |
4fd11db9 AF |
228 | if [ -x /sbin/findfs -a \( "$rootFs." = "ext2." -o "$rootFs." = "ext3." \) ] ; then |
229 | rootdev2="`/sbin/findfs $rootdev 2>/dev/null`" | |
230 | if [ -n "$rootdev2" ] ; then | |
231 | rootdev=$rootdev2 | |
232 | rootdev_found=1 | |
a2c2980f | 233 | fi |
4fd11db9 AF |
234 | fi |
235 | if [ "$rootdev_found." != "1." ] ; then | |
236 | case $rootFs in | |
237 | ext2|ext3) | |
238 | if [ ! -x /sbin/e2label ] ; then | |
239 | echo "/sbin/e2label is missing" 1>&2 | |
240 | exit 1 | |
241 | fi | |
242 | get_label="get_label_ext2" | |
243 | ;; | |
244 | xfs) | |
245 | if [ ! -x /usr/sbin/xfs_db ] ; then | |
246 | echo "/usr/sbin/xfs_db is missing" 1>&2 | |
247 | exit 1 | |
248 | fi | |
249 | get_label="get_label_xfs" | |
250 | ;; | |
251 | *) | |
252 | echo "LABEL on $rootFs in not supported by geninitrd" 1>&2 | |
253 | exit 1 | |
254 | ;; | |
255 | esac | |
256 | if [ ! -r /proc/partitions ] ; then | |
257 | echo '/proc/partitions is not readable'; 1>&2 | |
3b9c8219 AF |
258 | exit 1 |
259 | fi | |
4fd11db9 AF |
260 | label=${rootdev#"LABEL="} |
261 | for dev in `awk 'BEGIN {getline;getline} {print "/dev/" $4}' /proc/partitions` ; do | |
262 | if [ -r $dev ] && [ "$label" = "`$get_label $dev`" ] ; then | |
263 | if [ -n "$verbose" ] ; then | |
264 | echo "Using $dev as device for rootfs" | |
265 | fi | |
266 | rootdev=$dev | |
267 | rootdev_found=1 | |
268 | break | |
a2c2980f | 269 | fi |
4fd11db9 AF |
270 | done |
271 | if [ "$rootdev_found." != "1." ] ; then | |
272 | echo "geninitrd can't find real device for LABEL=$label" 1>&2 | |
273 | exit 1 | |
274 | fi | |
a2c2980f AF |
275 | fi |
276 | ;; | |
277 | UUID=*) | |
4fd11db9 AF |
278 | if [ -x /sbin/findfs -a \( "$rootFs." = "ext2." -o "$rootFs." = "ext3." \) ] ; then |
279 | rootdev2="`/sbin/findfs $rootdev 2>/dev/null`" | |
280 | if [ -n "$rootdev2" ] ; then | |
281 | rootdev=$rootdev2 | |
282 | rootdev_found=1 | |
a2c2980f | 283 | fi |
4fd11db9 AF |
284 | fi |
285 | if [ "$rootdev_found." != "1." ] ; then | |
286 | case $rootFs in | |
287 | ext2|ext3) | |
288 | if [ ! -x /sbin/tune2fs ] ; then | |
289 | echo "/sbin/tune2fs is missing" 1>&2 | |
290 | exit 1 | |
291 | fi | |
292 | get_uuid="get_uuid_ext2" | |
293 | ;; | |
294 | xfs) | |
295 | if [ ! -x /usr/sbin/xfs_db ] ; then | |
296 | echo "/usr/sbin/xfs_db is missing" 1>&2 | |
297 | exit 1 | |
298 | fi | |
299 | get_label="get_uuid_xfs" | |
300 | ;; | |
301 | *) | |
302 | echo "UUID on $rootFs in not supported by geninitrd" 1>&2 | |
303 | exit 1 | |
304 | ;; | |
305 | esac | |
306 | if [ ! -r /proc/partitions ] ; then | |
307 | echo '/proc/partitions is not readable'; 1>&2 | |
3b9c8219 AF |
308 | exit 1 |
309 | fi | |
4fd11db9 AF |
310 | uuid=${rootdev#"UUID="} |
311 | for dev in `awk 'BEGIN {getline;getline} {print "/dev/" $4}' /proc/partitions` ; do | |
312 | if [ -r $dev ] && [ "$uuid" = "`$get_uuid $dev`" ] ; then | |
313 | if [ -n "$verbose" ] ; then | |
314 | echo "Using $dev as device for rootfs" | |
315 | fi | |
316 | rootdev=$dev | |
317 | rootdev_found=1 | |
318 | break | |
a2c2980f | 319 | fi |
4fd11db9 AF |
320 | done |
321 | if [ "$rootdev_found" != 1 ] ; then | |
322 | echo "geninitrd can't find real device for UUID=$uuid" 1>&2 | |
323 | exit 1 | |
324 | fi | |
a2c2980f AF |
325 | fi |
326 | ;; | |
327 | esac | |
4e9eb79c | 328 | rootdev1=${rootdev} |
a2c2980f | 329 | } |
bb529f94 | 330 | |
7c38b114 | 331 | find_modules_softraid() { |
ac085800 ER |
332 | if [ -f /etc/mdadm.conf ]; then |
333 | [ -n "$verbose" ] && echo "Finding RAID details using mdadm for rootdev=$1" | |
334 | eval `/sbin/mdadm -v --examine --scan --config=/etc/mdadm.conf | awk -v rootdev="$1" ' | |
335 | BEGIN { | |
336 | found = "no"; | |
337 | dev_list = ""; | |
338 | raidlevel = "" | |
339 | rootdev_devfs = rootdev; | |
340 | if (rootdev ~ /\/dev\/md\/[0-9]/) { | |
341 | gsub(/\/dev\/md\//,"/dev/md",rootdev_devfs); | |
342 | } | |
514a668a | 343 | } |
ac085800 ER |
344 | |
345 | /^ARRAY/ { | |
346 | if (($2 == rootdev) || ($2 == rootdev_devfs)) { | |
347 | raidlevel=$3; | |
348 | gsub(/level=/,NUL,raidlevel); | |
349 | if (raidlevel ~ /^raid([0-6]|10)/) { | |
350 | gsub(/raid/,NUL,raidlevel); | |
351 | }; | |
352 | found="yes"; | |
353 | getline x; | |
354 | if (x ~ /devices=/) { | |
355 | dev_list = x; | |
356 | gsub(".*devices=", NUL, dev_list); | |
357 | gsub(",", " ", dev_list); | |
358 | } | |
359 | } | |
56946560 | 360 | } |
ac085800 ER |
361 | |
362 | END { | |
363 | print "raidfound=" found; | |
364 | print "raidlevel=" raidlevel; | |
365 | print "dev_list=\"" dev_list "\""; | |
366 | }'` | |
367 | fi | |
7c38b114 | 368 | |
59846acb AM |
369 | if [ "$raidfound" != "yes" -a -f /etc/raidtab ]; then |
370 | echo "ERROR: raidtools are not longer supported. Please migrate to mdadm setup!" 1>&2 | |
371 | exit 1 | |
809cc4cc | 372 | fi |
ac085800 | 373 | |
7c38b114 AF |
374 | if is_yes "$raidfound" ; then |
375 | case "$raidlevel" in | |
dc9a3d8d | 376 | [01456]|10) |
7c38b114 AF |
377 | findmodule "raid$raidlevel" |
378 | ;; | |
379 | linear) | |
380 | findmodule "linear" | |
381 | ;; | |
382 | *) | |
59846acb | 383 | echo "raid level $number (in mdadm config) not recognized" 1>&2 |
7c38b114 AF |
384 | ;; |
385 | esac | |
88614cd1 | 386 | else |
ac085800 | 387 | echo "ERROR: RAID devices not found for \"$1\", check your configuration!" 1>&2 |
88614cd1 | 388 | exit 1 |
7c38b114 | 389 | fi |
4e9eb79c AM |
390 | |
391 | rootdev_nr=$(( $rootdev_nr + 1 )) | |
392 | eval "rootdev${rootdev_nr}=\"$1\"" | |
393 | eval "dev_list${rootdev_nr}=\"${dev_list}\"" | |
ac085800 | 394 | |
7c38b114 AF |
395 | for device in $dev_list; do |
396 | find_modules_for $device | |
397 | done | |
398 | } | |
399 | ||
400 | find_modules_scsi() { | |
401 | for n in $PRESCSIMODS; do | |
402 | if [ "X$n" = "Xunknown" ] ; then | |
7c38b114 | 403 | if [ -f "$modulefile" ]; then |
d4a15d5f | 404 | scsimodules="`awk '/scsi_hostadapter/ && ! /^[\t ]*#/ { print $3; }' $modulefile`" |
7c38b114 AF |
405 | for n in $scsimodules; do |
406 | # for now allow scsi modules to come from anywhere. There are some | |
407 | # RAID controllers with drivers in block | |
408 | findmodule "$n" | |
409 | done | |
410 | fi | |
411 | else | |
412 | findmodule "$n" | |
413 | fi | |
414 | done | |
415 | } | |
416 | ||
417 | find_modules_ide() { | |
ac085800 ER |
418 | typeset rootdev |
419 | ||
420 | rootdev="$(echo "$1" | awk ' { gsub(/\/dev\//,NUL); gsub(/[0-9].*/, NUL); print $0 } ')" | |
421 | if [ "$pack_version_long" -lt "002004021" ]; then | |
422 | [ -n "$verbose" ] && echo "Finding IDE modules for kernels <= 2.4.20" | |
423 | for n in $PREIDEMODSOLD; do | |
424 | findmodule "$n" | |
425 | done | |
64497ebb | 426 | else |
ac085800 ER |
427 | tryauto=1 |
428 | for n in $PREIDEMODS; do | |
429 | if [ "X$n" = "Xunknown" ] ; then | |
430 | if [ -f "$modulefile" ]; then | |
431 | [ -n "$verbose" ] && echo "Finding IDE modules using ide_hostadapter" | |
432 | idemodules="`awk '/ide_hostadapter/ && ! /^[\t ]*#/ { print $3; }' $modulefile`" | |
433 | for na in $idemodules; do | |
434 | tryauto=0; | |
435 | findmodule "$na" | |
436 | done | |
437 | fi | |
64497ebb | 438 | |
ac085800 ER |
439 | if [ "$tryauto" -eq 1 ]; then |
440 | # If tryauto {{{ | |
441 | if [ -r /usr/share/pci-database/ide.pci -a -r /proc/bus/pci/devices ]; then | |
442 | [ -n "$verbose" ] && echo "Finding IDE modules using PCI ID database" | |
443 | # Finding IDE modules using PCI ID database {{{ | |
444 | if is_yes "${ide_only_root}"; then | |
445 | if [ -f /sys/block/${rootdev}/device/../../vendor -a -f /sys/block/${rootdev}/device/../../device ]; then | |
446 | vendorid="$(awk ' { gsub(/0x/,NUL); print $0 } ' /sys/block/${rootdev}/device/../../vendor)" | |
447 | deviceid="$(awk ' { gsub(/0x/,NUL); print $0 } ' /sys/block/${rootdev}/device/../../device)" | |
448 | searchpciid="${vendorid}${deviceid}" | |
449 | elif [ -f /proc/ide/${rootdev}/../config ]; then | |
450 | searchpciid="$(awk ' /pci bus/ { print $7$9 } ' /proc/ide/${rootdev}/../config)" | |
451 | fi | |
452 | fi | |
453 | ||
454 | if [ -z "${searchpciid}" ]; then | |
455 | searchpciid="$(awk ' { print $2 } ' /proc/bus/pci/devices)" | |
456 | fi | |
457 | ||
458 | idemodules="" | |
459 | ||
460 | for nb in $searchpciid; do | |
461 | eval `awk -v pciid="$nb" '{ | |
462 | gsub("\t"," "); | |
463 | gsub(" +", " "); | |
464 | gsub("^ ",""); | |
465 | if (/^[\t ]*#/) | |
466 | next; | |
467 | compmod = $1 ""; # make sure comparison type will be string | |
468 | # cause pci IDs are hexadecimal numeric | |
469 | if (compmod == pciid) { | |
470 | module=$2; | |
471 | # min_kernel=$3; # now in ide.pci $3,$4 = vendor and device name | |
472 | # max_kernel=$4; # | |
473 | exit 0; | |
474 | } | |
475 | } | |
476 | ||
477 | END { | |
478 | print "module=" module "\nmin_kernel=" min_kernel "\nmax_kernel=\"" max_kernel "\"\n"; | |
479 | }' /usr/share/pci-database/ide.pci` | |
480 | [ -n "$module" ] && idemodules="$idemodules $module" | |
481 | done | |
482 | if is_yes "$(awk ' /ide=reverse/ { print "yes" } ' /proc/cmdline)"; then | |
483 | new_idemodules="" | |
484 | for nc in idemodules; do | |
485 | new_idemodules="$nc $new_idemodules" | |
486 | done | |
487 | idemodules="${new_idemodules}" | |
488 | fi | |
489 | ||
490 | if [ -z "$idemodules" ]; then | |
491 | echo "WARNING: rootfs on IDE device but no related modules found, loading ide-generic." | |
492 | idemodules="ide-generic" | |
493 | fi | |
494 | ||
495 | # }}} | |
496 | for nd in $idemodules; do | |
497 | findmodule "-$nd" | |
498 | done | |
499 | # }}} | |
500 | # else tryauto {{{ | |
501 | else | |
502 | [ -r /usr/share/pci-database/ide.pci ] || echo "WARNING: /usr/share/pci-database/ide.pci missing." | |
503 | [ -r /proc/bus/pci/devices ] || echo "WARNING: /proc/bus/pci/devices missing." | |
504 | echo "Automatic IDE modules finding not available." | |
505 | fi | |
506 | # }}} | |
507 | fi | |
508 | else | |
509 | findmodule "$n" | |
5de40f1f | 510 | fi |
ac085800 | 511 | done |
64497ebb | 512 | fi |
7c38b114 AF |
513 | } |
514 | ||
a7fce633 ER |
515 | # return true if node is lvm node |
516 | _check_lvm() { | |
517 | local node="$1" | |
518 | if [ ! -e "$node" ]; then | |
519 | return 1 | |
520 | fi | |
521 | ||
522 | # block-major-58 is lvm1 | |
523 | ls -lL "$node" 2> /dev/null | awk '{if (/^b/) { if ($5 == "58,") { exit 0; } else { exit 1; } } else { exit 1; }}' | |
524 | rc=$? | |
525 | ||
526 | if [ $rc = 0 ]; then | |
527 | [ -n "$verbose" ] && echo "$node is LVM1 node" | |
528 | # is lvm1 | |
529 | return 0 | |
530 | fi | |
531 | ||
532 | /sbin/lvm lvdisplay "$node" > /dev/null 2>&1 | |
533 | rc=$? | |
534 | if [ $rc -gt 127 ]; then | |
535 | # lvdisplay terminated by signal! most likely it segfaulted. | |
536 | echo >&2 "ERROR: Unexpected exit from 'lvdisplay $node': $rc - are your lvm tools broken?" | |
537 | exit 1 | |
538 | fi | |
539 | ||
540 | if [ $rc = 0 ]; then | |
541 | [ -n "$verbose" ] && echo "$node is lvm2 node" | |
542 | else | |
543 | [ -n "$verbose" ] && echo "$node is not any lvm node" | |
544 | fi | |
545 | return $rc | |
546 | } | |
547 | ||
7c38b114 | 548 | find_modules_for() { |
ac085800 ER |
549 | if [ -z "$1" ]; then |
550 | echo "ERROR: no argument passed to find_modules_for() - is your /etc/fstab correct?" >&2 | |
4e9eb79c | 551 | exit |
ac085800 | 552 | |
5c4cec75 AM |
553 | elif is_yes "`echo "$1" | awk '/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:|\/dev\/nfs)/ { print "yes"; }'`"; then |
554 | if [ ! -x /usr/bin/pcidev -a -z "$NFS_ETH_MODULES" ] ; then | |
ac085800 ER |
555 | echo "ERROR: root on NFS but /usr/bin/pcidev not found." >&2 |
556 | echo "Please install correct pci-database package and rerun $0." >&2 | |
557 | exit 1 | |
6fe19d5b | 558 | fi |
5c4cec75 AM |
559 | [ -z "$NFS_ETH_MODULES" ] && NFS_ETH_MODULES=$(/usr/bin/pcidev /m net | xargs) |
560 | for m in $NFS_ETH_MODULES; do | |
ac085800 | 561 | findmodule "$m" |
6fe19d5b AM |
562 | done |
563 | findmodule "-ipv4" | |
ac085800 | 564 | findmodule "nfs" |
6fe19d5b | 565 | usenfs="yes" |
d024196b | 566 | echo "Remember to use \`root=/dev/ram0 init=/linuxrc' when starting kernel" >&2 |
ac085800 | 567 | echo "or you will have problems like init(xx) being child process of swapper(1)." >&2 |
4e9eb79c | 568 | elif is_yes "`echo "$1" | awk '/^\/dev\/md/ { print "yes"; }'`"; then |
7c38b114 AF |
569 | find_modules_softraid "$1" |
570 | elif is_yes "$(echo "$1" | awk '/^\/dev\/(sd|scsi)/ { print "yes"; }')" ; then | |
571 | find_modules_scsi | |
5d27006d | 572 | elif is_yes "`echo "$1" | awk '/^\/dev\/(hd|ide)/ { print "yes"; }'`" ; then |
afa3d7a8 | 573 | find_modules_ide "$1" |
7c38b114 AF |
574 | elif is_yes "`echo "$1" | awk '/\/dev\/rd\// { print "yes"; }'`" ; then |
575 | findmodule "DAC960" | |
576 | elif is_yes "`echo "$1" | awk '/\/dev\/ida\// { print "yes"; }'`" ; then | |
577 | findmodule "cpqarray" | |
578 | elif is_yes "`echo "$1" | awk '/\/dev\/cciss\// { print "yes"; }'`" ; then | |
579 | findmodule "cciss" | |
580 | elif is_yes "`echo "$1" | awk '/\/dev\/ataraid\// { print "yes"; }'`"; then | |
ac085800 | 581 | find_modules_ide |
7c38b114 | 582 | findmodule "ataraid" |
d4a15d5f | 583 | ataraidmodules="`awk '/ataraid_hostadapter/ && ! /^[\t ]*#/ { print $3; }' $modulefile`" |
7c38b114 AF |
584 | if -n "$ataraidmodules" ; then |
585 | # FIXME: think about modules compiled in kernel | |
586 | echo "ERROR: ataraid_hostadapter alias not defined in $modulefile !" | |
587 | echo "Please set it and run $0 again." | |
588 | exit 1 | |
589 | fi | |
590 | for n in $ataraidmodules; do | |
591 | findmodule "$n" | |
592 | done | |
593 | # check to see if we need to set up a loopback filesystem | |
38228bb7 | 594 | elif is_yes "`echo "$1" | awk -F/ '{print($3);}' | awk '/loop/ { print "yes"; }'`" ; then |
7c38b114 AF |
595 | echo "Sorry, root on loop device isn't supported." 1>&2 |
596 | exit 1 | |
597 | # TODO: rewrite for bsp and make nfs ready | |
598 | if [ ! -x /sbin/losetup ]; then | |
599 | echo "losetup is missing" | |
600 | exit 1 | |
601 | fi | |
602 | key="^# $(echo $1 | awk -F/ '{print($3);}' | tr '[a-z]' '[A-Z]'):" | |
603 | if ! is_yes "`awk '/'$key'/ { print( "yes"); }' $fstab`" ; then | |
604 | echo "The root filesystem is on a $1, but there is no magic entry in $fstab" 1>&2 | |
605 | echo "for this device. Consult the geninitrd man page for more information" 1>&2 | |
606 | exit 1 | |
607 | fi | |
608 | ||
609 | line="`awk '/'$key'/ { print $0; }' $fstab`" | |
610 | loopDev="$(echo $line | awk '{print $3}')" | |
611 | loopFs="$(echo $line | awk '{print $4}')" | |
612 | loopFile="$(echo $line | awk '{print $5}')" | |
613 | ||
614 | BASICMODULES="$BASICMODULES -loop" | |
615 | findmodule "-$loopFs" | |
616 | BASICMODULES="$BASICMODULES -${loopFs}" | |
a7fce633 | 617 | elif _check_lvm "$1"; then |
9f2d32ed AM |
618 | if [ ! -f /sbin/initrd-lvm -o ! -x /sbin/lvdisplay -o ! -x /sbin/pvdisplay ] ; then |
619 | echo "ERROR: root on LVM but /sbin/initrd-lvm, /sbin/lvdisplay and /sbin/pvdisplay not found." >&2 | |
cff3058d | 620 | echo "Please install lvm(2) and lvm(2)-initrd package and rerun $0." >&2 |
7c38b114 AF |
621 | exit 1 |
622 | fi | |
ac085800 ER |
623 | if [ -z "$LVMTOOLSVERSION" ] ; then |
624 | LVMTOOLSVERSION=$(/sbin/initrd-lvm vgchange --version 2>/dev/null|head -n 1|awk '{gsub("vgchange: Logical Volume Manager ",NIL); gsub("LVM version: ",NIL); gsub(/\..*/,NIL); print $1}') | |
625 | if [ -z "$LVMTOOLSVERSION" ] ; then | |
626 | echo "ERROR: Can't determine LVM tools version. Please set LVMTOOLSVERSION" >&2 | |
627 | echo "and rerun $0." >&2 | |
628 | exit 1 | |
629 | fi | |
77bcfc68 | 630 | fi |
decd277c | 631 | if [ -z "$PVDEVICES" ] ; then |
ac085800 ER |
632 | VGVOLUME=$(/sbin/lvdisplay -c "$1" 2> /dev/null | awk -F":" ' { print $2 } ') |
633 | PVDEVICES=$(/sbin/pvdisplay -c | awk -F":" -v vg="$VGVOLUME" ' BEGIN { devices="" } { if ($2 == vg) { devices = devices " " $1 } } END { print devices } ') | |
decd277c | 634 | fi |
7c38b114 AF |
635 | if [ -n "$PVDEVICES" ] ; then |
636 | for device in $PVDEVICES; do | |
637 | find_modules_for $device | |
638 | done | |
639 | else | |
ac085800 | 640 | echo "ERROR: I wasn't able to find PV (via lvdisplay and pvdisplay)." >&2 |
b78e6497 | 641 | echo "You can try to set PVDEVICES in /etc/sysconfig/geninitrd." >&2 |
7c38b114 AF |
642 | exit 1 |
643 | fi | |
e0c502bb | 644 | if [ "$LVMTOOLSVERSION" = "2" ]; then |
ac085800 | 645 | findmodule "-dm-mod" |
e0c502bb | 646 | elif [ "$LVMTOOLSVERSION" = "1" ]; then |
ac085800 ER |
647 | findmodule "-lvm" |
648 | findmodule "-lvm-mod" | |
93d781d1 | 649 | else |
e0c502bb | 650 | echo "ERROR: LVM version $LVMTOOLSVERSION is not supported yet." >&2 |
cff3058d | 651 | exit 1 |
93d781d1 | 652 | fi |
a7fce633 | 653 | [ -n "$verbose" ] && echo "LVM $LVMTOOLSVERSION enabled" |
7c38b114 AF |
654 | uselvm="yes" |
655 | fi | |
656 | } | |
657 | ||
2a5bcca9 AM |
658 | modules_install() { |
659 | modules="$1" | |
660 | ||
661 | for mod in $modules; do | |
ac085800 ER |
662 | MODULEDIR="`my_dirname "$mod"`" |
663 | mkdir -p "$MNTIMAGE/lib/modules/$kernel/$MODULEDIR" | |
664 | cp $verbose -a "/lib/modules/$kernel/$mod" "$MNTIMAGE/lib/modules/$kernel/$mod" | |
665 | gunzip "$MNTIMAGE/lib/modules/$kernel/$mod" 2> /dev/null | |
2a5bcca9 AM |
666 | done |
667 | } | |
668 | ||
669 | modules_add_linuxrc() { | |
670 | modules="$1" | |
671 | linuxrc="$2" | |
ac085800 | 672 | |
2a5bcca9 | 673 | for mod in $modules; do |
ac085800 ER |
674 | MODULE2="`my_dirname "$mod"`" |
675 | NAME2=`basename "$mod" .gz` | |
676 | MODULE2=$MODULE2/$NAME2 | |
677 | module="`echo $mod | awk -F/ '{ $0=$NF } /'$modext'.*$/ { gsub(/'$modext'.*/, NIL, $0); } { print $0; }'`" | |
678 | options="`awk '{ if($1 == "options" && $2 == "'${module}'") { for(i=3;i<=NF;i++) printf("%s ",$i); }}' "$modulefile"`" | |
ffa1b198 | 679 | |
7bdf23ec | 680 | sleep_module=$(echo "${module}" | awk ' { gsub("-", "_", $0) } { print $0; } ') |
ffa1b198 | 681 | sleep_var="$(eval echo \$MODULE_${sleep_module}_USLEEP)" |
2a5bcca9 | 682 | |
ac085800 ER |
683 | if [ -n "$verbose" ]; then |
684 | echo -n "Loading module [$module] " | |
685 | if [ -n "$options" ] ; then | |
686 | echo -n "with options [$options]" | |
687 | else | |
688 | echo -n "without options" | |
689 | fi | |
8e598759 | 690 | if [ -n "$sleep_var" ]; then |
ba0552ce | 691 | echo " and $sleep_var usleep." |
8e598759 AM |
692 | else |
693 | echo "." | |
694 | fi | |
ac085800 ER |
695 | fi |
696 | ||
697 | echo "$insmod /lib/modules/$kernel/$MODULE2 $options" >> "$linuxrc" | |
8e598759 AM |
698 | if [ -n "${sleep_var}" ]; then |
699 | echo "usleep $sleep_var" >> "$linuxrc" | |
700 | fi | |
2a5bcca9 AM |
701 | done |
702 | } | |
703 | ||
5dc785c7 | 704 | if [ -r /etc/sysconfig/geninitrd ] ; then |
705 | . /etc/sysconfig/geninitrd | |
706 | fi | |
707 | ||
5b71959c AM |
708 | if [ -r /etc/sysconfig/bootsplash ] ; then |
709 | . /etc/sysconfig/bootsplash | |
710 | fi | |
711 | ||
ac085800 | 712 | if [ ! -x /bin/initrd-busybox ] ; then |
2baa76b4 | 713 | echo "/bin/initrd-busybox is missing !" |
fd2dc249 | 714 | exit 1 |
5dc785c7 | 715 | fi |
901afd79 | 716 | case "$(uname -m)" in |
ac085800 ER |
717 | ia64|amd64|x86_64|sparc64) |
718 | IMAGESIZE=3000 | |
901afd79 | 719 | ;; |
ac085800 ER |
720 | *) |
721 | IMAGESIZE=1500 | |
901afd79 AM |
722 | ;; |
723 | esac | |
724 | ||
bb529f94 | 725 | while [ $# -gt 0 ]; do |
413878f8 | 726 | case $1 in |
6bd433bc AF |
727 | --fstab=*) |
728 | fstab="`echo $1 | awk -F= '{print $2;}'`" | |
729 | ;; | |
730 | --fstab) | |
731 | fstab="$2" | |
732 | shift | |
413878f8 | 733 | ;; |
cd670d83 AF |
734 | --modules-conf=*) |
735 | modulefile="`echo $1 | awk -F= '{print $2;}'`" | |
736 | ;; | |
57188d60 | 737 | --modules-conf) |
cd670d83 AF |
738 | modulefile="$2" |
739 | shift | |
740 | ;; | |
6bd433bc AF |
741 | --use-raidstart|--with-raidstart) |
742 | USERAIDSTART="yes" | |
743 | ;; | |
744 | --without-raidstart) | |
745 | USERAIDSTART="no" | |
746 | ;; | |
57227e0a AF |
747 | --use-insmod-static|--with-insmod-static) |
748 | USEINSMODSTATIC="yes" | |
749 | ;; | |
750 | --without-insmod-static) | |
751 | USEINSMODSTATIC="no" | |
752 | ;; | |
5b71959c AM |
753 | --without-bootsplash) |
754 | BOOT_SPLASH="no" | |
755 | ;; | |
4ef98747 AM |
756 | --without-suspend) |
757 | USE_SUSPEND="no"; | |
22b0c9f4 | 758 | ;; |
335cd101 JR |
759 | --without-suspend2) |
760 | USE_SUSPEND2="no"; | |
2c52f208 | 761 | ;; |
e0c502bb AM |
762 | --lvmtoolsversion=|--lvmversion=) |
763 | LVMTOOLSVERSION="`echo $1 | awk -F= '{print $2;}'`" | |
77bcfc68 | 764 | ;; |
e0c502bb AM |
765 | --lvmtoolsversion|--lvmversion) |
766 | LVMTOOLSVERSION="$2" | |
77bcfc68 AF |
767 | shift |
768 | ;; | |
1606e343 AM |
769 | --without-udev) |
770 | USE_UDEV= | |
771 | ;; | |
882472ae ER |
772 | --without-dmraid) |
773 | USE_DMRAID= | |
774 | ;; | |
6bd433bc AF |
775 | --with=*) |
776 | BASICMODULES="$BASICMODULES `echo $1 | awk -F= '{print $2;}'`" | |
777 | ;; | |
778 | --with) | |
779 | BASICMODULES="$BASICMODULES $2" | |
780 | shift | |
413878f8 | 781 | ;; |
bb529f94 | 782 | --version) |
413878f8 | 783 | echo "geninitrd: version $VERSION" |
784 | exit 0 | |
785 | ;; | |
bb529f94 | 786 | -v) |
413878f8 | 787 | verbose=-v |
788 | ;; | |
bb529f94 | 789 | --nocompress) |
413878f8 | 790 | COMPRESS="no" |
791 | ;; | |
bb529f94 | 792 | --ifneeded) |
413878f8 | 793 | ifneeded=1 |
794 | ;; | |
bb529f94 | 795 | -f) |
413878f8 | 796 | force=1 |
797 | ;; | |
6bd433bc AF |
798 | --preload=*) |
799 | PREMODS="$PREMODS `echo $1 | awk -F= '{print $2;}'`" | |
800 | ;; | |
801 | --preload) | |
72623c13 | 802 | PREMODS="$PREMODS $2" |
6bd433bc | 803 | shift |
413878f8 | 804 | ;; |
2ad94d8a AF |
805 | --fs=*) |
806 | echo "Warning: --fs option is obsoleted. Use --initrdfs instead" 1>&2 | |
807 | INITRDFS="`echo $1 | awk -F= '{print $2;}'`" | |
808 | ;; | |
2ad94d8a AF |
809 | --fs) |
810 | echo "Warning: --fs option is obsoleted. Use --initrdfs instead" 1>&2 | |
811 | INITRDFS="$2" | |
812 | shift | |
cd670d83 | 813 | ;; |
6bd433bc AF |
814 | --initrdfs=*) |
815 | INITRDFS="`echo $1 | awk -F= '{print $2;}'`" | |
816 | ;; | |
fd2dc249 | 817 | --initrdfs) |
2ad94d8a | 818 | INITRDFS="$2" |
413878f8 | 819 | shift |
820 | ;; | |
bb529f94 | 821 | --image-version) |
413878f8 | 822 | img_vers=yes |
823 | ;; | |
4f4e832d AM |
824 | --ide-only-root) |
825 | ide_only_root="yes" | |
826 | ;; | |
bb529f94 | 827 | *) |
413878f8 | 828 | if [ -z "$target" ]; then |
829 | target="$1" | |
830 | elif [ -z "$kernel" ]; then | |
831 | kernel="$1" | |
832 | else | |
833 | usage | |
834 | fi | |
835 | ;; | |
836 | esac | |
837 | ||
838 | shift | |
bb529f94 JK |
839 | done |
840 | ||
06ac05d6 | 841 | if [ -z "$target" -o -z "$kernel" ]; then |
413878f8 | 842 | usage |
06ac05d6 AF |
843 | fi |
844 | ||
0868f49f | 845 | pack_version="`echo "$kernel"|awk -F. '{print sprintf("%03d%03d",$1,$2)}'`" |
64497ebb | 846 | pack_version_long="`echo "$kernel"|awk -F. '{print sprintf("%03d%03d%03d",$1,$2,$3)}'`" |
0868f49f | 847 | |
48413b7f AM |
848 | if [ "x" = "x$INITRDFS" ] ; then |
849 | if [ "x" = "x$FS" ] ; then | |
850 | # default value | |
f8f9e56d AM |
851 | # XXX: initramfs blocked for now |
852 | if [ "1" = " 0" -a "$pack_version" -ge "002005" ] ; then | |
ac085800 | 853 | INITRDFS="initramfs" |
f8f9e56d | 854 | else |
ac085800 | 855 | INITRDFS="rom" |
f8f9e56d | 856 | fi |
48413b7f AM |
857 | else |
858 | echo "Warning: FS configuration options is obsoleted. Use INITRDFS instead" 1>&2 | |
859 | INITRDFS="$FS" | |
860 | fi | |
861 | fi | |
862 | ||
1606e343 | 863 | if [ "$pack_version" -lt "002006" ] ; then |
882472ae ER |
864 | USE_UDEV= |
865 | USE_DMRAID= | |
1606e343 AM |
866 | fi |
867 | [ -z "$USE_UDEV" ] && UDEV_TMPFS= | |
ac085800 | 868 | |
0868f49f AF |
869 | if [ "$pack_version" -ge "002005" ] ; then |
870 | modext=".ko" | |
0b6536f5 | 871 | insmod="insmod" |
0868f49f AF |
872 | fi |
873 | ||
57227e0a AF |
874 | if is_yes "$USEINSMODSTATIC" ; then |
875 | insmod="insmod.static" | |
b2e62ae1 | 876 | INSMOD="/sbin/insmod.static" |
f7c18703 AM |
877 | if [ "$pack_version" -lt "002005" -a -f /sbin/insmod.static.modutils ] ; then |
878 | INSMOD="/sbin/insmod.static.modutils" | |
b2e62ae1 AF |
879 | fi |
880 | if [ ! -f "$INSMOD" ] ; then | |
881 | echo "insmod.static requested but /sbin/insmod.static not found !" >&2 | |
882 | exit 1 | |
883 | fi | |
57227e0a AF |
884 | fi |
885 | ||
2ad94d8a | 886 | case "$INITRDFS" in |
8b1e4ac7 | 887 | ext2) |
722b45a4 | 888 | IMAGESIZE=$((IMAGESIZE + 100)) |
f5d71bb2 | 889 | if [ ! -x /sbin/mke2fs ]; then |
a2c2980f | 890 | echo "/sbin/mke2fs is missing" 1>&2 |
8b1e4ac7 AF |
891 | exit 1 |
892 | fi | |
893 | ;; | |
894 | rom) | |
895 | if [ ! -x /sbin/genromfs ]; then | |
a2c2980f | 896 | echo "/sbin/genromfs is missing" 1>&2 |
8b1e4ac7 AF |
897 | exit 1 |
898 | fi | |
899 | ;; | |
900 | cram) | |
901 | if [ ! -x /sbin/mkcramfs ]; then | |
a2c2980f | 902 | echo "/sbin/mkcramfs is missing" 1>&2 |
8b1e4ac7 AF |
903 | exit 1 |
904 | fi | |
c31050f3 | 905 | ;; |
48413b7f AM |
906 | initramfs) |
907 | if [ ! -x /bin/cpio ]; then | |
ac085800 | 908 | echo "/bin/cpio is missing" 1>&2 |
48413b7f AM |
909 | exit 1 |
910 | fi | |
911 | if [ ! -x /usr/bin/find ]; then | |
ac085800 | 912 | echo "/usr/bin/find is missing" 1>&2 |
48413b7f AM |
913 | exit 1 |
914 | fi | |
915 | ;; | |
8b1e4ac7 | 916 | *) |
2ad94d8a | 917 | echo "Filesystem $INITRDFS on initrd is not supported" 1>&2 |
8b1e4ac7 AF |
918 | exit 1 |
919 | ;; | |
920 | esac | |
bb529f94 | 921 | |
bb529f94 | 922 | if [ -n "$img_vers" ]; then |
413878f8 | 923 | target="$target-$kernel" |
bb529f94 JK |
924 | fi |
925 | ||
35164381 | 926 | if [ -z "$force" -a -f "$target" ]; then |
a2c2980f | 927 | echo "$target already exists." 1>&2 |
413878f8 | 928 | exit 1 |
bb529f94 JK |
929 | fi |
930 | ||
35164381 | 931 | if [ ! -d "/lib/modules/$kernel" ]; then |
a2c2980f | 932 | echo "/lib/modules/$kernel is not a directory." 1>&2 |
413878f8 | 933 | exit 1 |
bb529f94 JK |
934 | fi |
935 | ||
2ce7656a AM |
936 | if is_yes "$USE_SUSPEND"; then |
937 | if is_yes "$USE_SUSPEND2"; then | |
22b0c9f4 AM |
938 | echo "Suspend2 shouldn't be used in parallel with mainline suspend!." 1>&2 |
939 | exit 1 | |
940 | fi | |
941 | fi | |
942 | ||
48762878 | 943 | if [ ! -f /proc/mounts ]; then |
ac085800 | 944 | echo "WARNING: /proc filesystem not mounted, may cause wrong results or failure." 1>&2 |
48762878 | 945 | fi |
f121024f AM |
946 | |
947 | if [ "$pack_version" -lt "002005" ]; then | |
948 | modulefile=/etc/modules.conf | |
949 | if [ ! -f "$modulefile" -a -f /etc/conf.modules ]; then | |
950 | modulefile=/etc/conf.modules | |
951 | fi | |
952 | else | |
953 | modulefile=/etc/modprobe.conf | |
954 | fi | |
ac085800 | 955 | |
bb529f94 | 956 | for n in $PREMODS; do |
35164381 | 957 | findmodule "$n" |
bb529f94 JK |
958 | done |
959 | ||
7c38b114 AF |
960 | # allow forcing loading SCSI and/or IDE modules |
961 | if is_yes "$ADDSCSI" ; then | |
962 | find_modules_scsi | |
bb529f94 JK |
963 | fi |
964 | ||
7c38b114 AF |
965 | if is_yes "$ADDIDE" ; then |
966 | find_modules_ide | |
cd670d83 AF |
967 | fi |
968 | ||
7c38b114 | 969 | find_root |
cd670d83 | 970 | |
4e1e40bd AM |
971 | org_rootdev="$rootdev1" |
972 | ||
4e9eb79c | 973 | find_modules_for "$rootdev1" |
cd670d83 | 974 | |
7c38b114 | 975 | findmodule "-$rootFs" |
bb529f94 | 976 | |
c31050f3 | 977 | for n in $BASICMODULES; do |
7d2fc5eb | 978 | findmodule "$n" |
bb529f94 JK |
979 | done |
980 | ||
335cd101 JR |
981 | if is_yes "$USE_SUSPEND2"; then |
982 | findmodule "-lzf" | |
983 | fi | |
984 | ||
bb529f94 | 985 | if [ -n "$ifneeded" -a -z "$MODULES" ]; then |
7d2fc5eb | 986 | if [ -n "$verbose" ]; then |
987 | echo "No modules are needed -- not building initrd image." | |
988 | fi | |
989 | exit 0 | |
bb529f94 JK |
990 | fi |
991 | ||
992 | if [ -n "$verbose" ]; then | |
7d2fc5eb | 993 | echo "Using modules: $MODULES" |
bb529f94 JK |
994 | fi |
995 | ||
35164381 SZ |
996 | MNTIMAGE="`mktemp -d /tmp/initrd.XXXXXX`" |
997 | IMAGE="`mktemp -u /tmp/initrd.img-XXXXXX`" | |
998 | MNTPOINT="`mktemp -d /tmp/initrd.mnt-XXXXXX`" | |
999 | RCFILE="$MNTIMAGE/linuxrc" | |
bb529f94 | 1000 | |
35164381 | 1001 | if [ -f "$MNTIMAGE" ]; then |
c31050f3 | 1002 | echo "$MNTIMAGE already exists. Remove it and try again" 1>&2 |
7d2fc5eb | 1003 | exit 1 |
bb529f94 JK |
1004 | fi |
1005 | ||
35164381 | 1006 | if [ -f "$IMAGE" ]; then |
a2c2980f | 1007 | echo "$IMAGE already exists. Remove it and try again" 1>&2 |
7d2fc5eb | 1008 | exit 1 |
bb529f94 JK |
1009 | fi |
1010 | ||
2ad94d8a | 1011 | if [ "$INITRDFS" = "ext2" ] ; then |
35164381 | 1012 | dd if=/dev/zero of="$IMAGE" bs=1k count="$IMAGESIZE" 2> /dev/null |
bb529f94 | 1013 | |
bb529f94 JK |
1014 | # We have to "echo y |" so that it doesn't complain about $IMAGE not |
1015 | # being a block device | |
35164381 | 1016 | echo y | mke2fs -F "$IMAGE" "$IMAGESIZE" >/dev/null 2>/dev/null |
bb529f94 | 1017 | |
35164381 SZ |
1018 | mkdir -p "$MNTPOINT" |
1019 | mount -o loop -t ext2 "$IMAGE" "$MNTPOINT" | |
bb529f94 | 1020 | else |
35164381 | 1021 | mkdir -p "$MNTPOINT" |
bb529f94 JK |
1022 | fi |
1023 | ||
8b1e4ac7 | 1024 | |
cff3058d | 1025 | mkdir -p "$MNTIMAGE"/{lib,bin,etc,dev,loopfs,var} |
8b1e4ac7 | 1026 | |
bb529f94 JK |
1027 | |
1028 | # We don't need this directory, so let's save space | |
35164381 | 1029 | rm -rf "$MNTPOINT"/lost+found |
bb529f94 | 1030 | |
2a5bcca9 | 1031 | modules_install "$MODULES" |
bb529f94 JK |
1032 | |
1033 | # mknod'ing the devices instead of copying them works both with and | |
1034 | # without devfs... | |
35164381 | 1035 | mknod "$MNTIMAGE/dev/console" c 5 1 |
eb6e37ff MM |
1036 | mknod "$MNTIMAGE/dev/null" c 1 3 |
1037 | mknod "$MNTIMAGE/dev/zero" c 1 5 | |
bb529f94 | 1038 | |
84670990 | 1039 | s="$RCFILE" |
566ad08b | 1040 | ln -s /linuxrc $MNTIMAGE/init |
ef66f232 | 1041 | |
7543158a | 1042 | inst /bin/initrd-busybox "$MNTIMAGE/bin/sh" |
ee3a3416 | 1043 | ln -s sh "$MNTIMAGE/bin/busybox" |
ef66f232 | 1044 | |
b2e62ae1 AF |
1045 | if is_yes "$USEINSMODSTATIC" ; then |
1046 | inst "$INSMOD" $MNTIMAGE/bin/insmod.static | |
57227e0a AF |
1047 | fi |
1048 | ||
84670990 MM |
1049 | cat > "$s" <<EOF |
1050 | #! /bin/sh | |
1051 | ||
d70364fa | 1052 | set -x |
84670990 MM |
1053 | EOF |
1054 | chmod 755 "$s" | |
c31050f3 | 1055 | |
2a5bcca9 | 1056 | modules_add_linuxrc "$MODULES" "$s" |
fd2dc249 | 1057 | |
4e9eb79c | 1058 | # TODO: rewrite for busybox |
fd2dc249 AF |
1059 | #if [ -n "$loopDev" ]; then |
1060 | # if [ ! -d /initrd ]; then | |
1061 | # mkdir /initrd | |
1062 | # fi | |
1063 | # | |
1064 | # cp -a "$loopDev" "$MNTIMAGE/dev" | |
4e9eb79c | 1065 | # cp -a "$rootdev1" "$MNTIMAGE/dev" |
fd2dc249 AF |
1066 | # echo "echo Mounting device containing loopback root filesystem" >> "$RCFILE" |
1067 | # echo "mount -t $loopFs $loopDev /loopfs" >> "$RCFILE" | |
4e9eb79c AM |
1068 | # echo "echo Setting up loopback device $rootdev1" >> $RCFILE |
1069 | # echo "losetup $rootdev1 /loopfs$loopFile" >> "$RCFILE" | |
fd2dc249 | 1070 | #fi |
bb529f94 | 1071 | |
22b0c9f4 AM |
1072 | initrd_gen_suspend() { |
1073 | if [ ! -x /usr/sbin/resume ]; then | |
1074 | echo "/usr/sbin/resume is missing !" | |
1075 | exit 1 | |
1076 | fi | |
1077 | mkdir -p $MNTIMAGE/etc | |
1078 | mkdir -p $MNTIMAGE/dev | |
1079 | resume_dev="$(awk '/^resume device =/ { print $4 } ' /etc/suspend.conf)" | |
1080 | cp -HR /dev/snapshot $resume_dev $MNTIMAGE/dev | |
1081 | inst /etc/suspend.conf $MNTIMAGE/etc/suspend.conf | |
1082 | inst /usr/sbin/resume "$MNTIMAGE/bin/resume" | |
1083 | echo "resume" >> "$s" | |
1084 | } | |
1085 | ||
9426259f | 1086 | initrd_gen_suspend2() { |
ac085800 ER |
1087 | mkdir -p $MNTIMAGE/sys |
1088 | mkdir -p $MNTIMAGE/proc | |
5a61a17c | 1089 | cat << 'EOF' >> "$s" |
2b1a3707 | 1090 | mount -t proc none /proc |
5a61a17c | 1091 | if [ "$(awk ' /resume2=/ { print "yes"; } ' /proc/cmdline)" = "yes" ]; then |
2b1a3707 | 1092 | EOF |
2b1a3707 | 1093 | cat << EOF >> "$s" |
21c802bf | 1094 | echo > /proc/suspend2/do_resume |
2b1a3707 AM |
1095 | fi |
1096 | umount /proc | |
1097 | EOF | |
2df2e995 | 1098 | } |
2c52f208 | 1099 | |
1606e343 | 1100 | initrd_gen_udev() { |
ac085800 | 1101 | [ -n "$verbose" ] && echo "Setting up udev..." |
1606e343 | 1102 | mkdir -p $MNTIMAGE/sbin |
d152a29d | 1103 | mkdir -p $MNTIMAGE/proc |
1606e343 | 1104 | mkdir -p $MNTIMAGE/etc/udev |
ac085800 | 1105 | |
1606e343 AM |
1106 | inst /sbin/initrd-udev $MNTIMAGE/sbin/udev |
1107 | ln -s udev $MNTIMAGE/sbin/udevstart | |
1108 | inst /etc/udev/udev.conf $MNTIMAGE/etc/udev/udev.conf | |
1109 | ||
1110 | ln -s udev $MNTIMAGE/sbin/hotplug | |
1111 | ||
1112 | if is_yes "$USE_UDEV"; then | |
1113 | if is_yes "$UDEV_TMPFS"; then | |
ac085800 | 1114 | cat >> "$s" <<-EOF |
1606e343 AM |
1115 | echo Creating /dev |
1116 | mount -o mode=0755 -t tmpfs none /dev | |
1117 | mknod /dev/console c 5 1 | |
1118 | mknod /dev/null c 1 3 | |
1119 | mknod /dev/zero c 1 5 | |
1120 | mkdir /dev/pts | |
1121 | mkdir /dev/shm | |
1122 | EOF | |
1123 | fi | |
882472ae | 1124 | cat >> "$s" <<-EOF |
b161812e | 1125 | mount -t proc none /proc |
1606e343 AM |
1126 | echo Starting udev |
1127 | /sbin/udevstart | |
1128 | echo -n "/sbin/hotplug" > /proc/sys/kernel/hotplug | |
b161812e | 1129 | umount /proc |
1606e343 AM |
1130 | EOF |
1131 | fi | |
1132 | } | |
1133 | ||
882472ae | 1134 | initrd_gen_dmraid() { |
ac085800 ER |
1135 | if [ ! -x /sbin/dmraid-initrd ] ; then |
1136 | echo "/sbin/dmraid-initrd is missing missing !" | |
1137 | exit 1 | |
1138 | fi | |
1139 | ||
1140 | if [ ! -x $MNTIMAGE/sbin/udev ]; then | |
1141 | echo "udev is needed on target initrd for dmraid to work!" | |
1142 | exit 1 | |
1143 | fi | |
1144 | ||
1145 | mkdir -p "$MNTIMAGE/sbin" | |
1146 | inst /sbin/dmraid-initrd $MNTIMAGE/sbin/dmraid | |
882472ae ER |
1147 | cat <<-EOF >> "$s" |
1148 | mount -t proc none /proc | |
1149 | mount -t sysfs none /sys | |
1150 | # 2 secs was enough for my system to initialize. but really this is udev issue? | |
1151 | usleep 2000000 | |
1152 | /sbin/dmraid -ay -i | |
1153 | umount /sys | |
1154 | umount /proc | |
1155 | EOF | |
1156 | } | |
1157 | ||
1158 | ||
2df2e995 | 1159 | initrd_gen_softraid() { |
4e9eb79c | 1160 | [ -n "$verbose" ] && echo "Setting up mdadm..." |
ac085800 | 1161 | |
6cca3165 | 1162 | if [ ! -x /sbin/mdadm -o ! -x /sbin/initrd-mdassemble ] ; then |
ac085800 | 1163 | echo "/sbin/mdadm or /sbin/initrd-mdassemble is missing !" |
8c4ce35e | 1164 | exit 1 |
d3fa6ec7 | 1165 | fi |
994eb509 | 1166 | |
6cca3165 AM |
1167 | inst /sbin/initrd-mdassemble "$MNTIMAGE/bin/mdassemble" |
1168 | ||
4e9eb79c | 1169 | # LVM on RAID case |
6cca3165 AM |
1170 | dev_list_extra=$(awk '/^DEVICE / { for (i=2; i<=NF; i++) { printf "%s ", $i; }; } ' /etc/mdadm.conf) |
1171 | for ex_dev in $dev_list_extra; do | |
1172 | echo "DEVICE $ex_dev" >> "$MNTIMAGE/etc/mdadm.conf" | |
1173 | done | |
ac085800 | 1174 | do_md0=1 |
4e9eb79c | 1175 | for nr in `seq 1 $rootdev_nr`; do |
ac085800 ER |
1176 | eval cr_rootdev="\$rootdev${nr}" |
1177 | eval cr_dev_list="\$dev_list${nr}" | |
1178 | [ -n "$verbose" ] && echo "Setting up array ($cr_rootdev = $cr_dev_list)" | |
1179 | ||
1180 | [ "$cr_rootdev" = "/dev/md0" ] && do_md0=0 | |
1181 | ||
1182 | echo "DEVICE $cr_dev_list" >> "$MNTIMAGE/etc/mdadm.conf" | |
1183 | cr_dev_list_md="$(echo "$cr_dev_list" | xargs | awk ' { gsub(/ +/,",",$0); print $0; }')" | |
1184 | cr_md_conf=$(/sbin/mdadm --detail --brief --config=/etc/mdadm.conf $cr_rootdev) | |
1185 | if [ -n "$cr_md_conf" ]; then | |
1186 | echo "$cr_md_conf" >> "$MNTIMAGE/etc/mdadm.conf" | |
1187 | else | |
1188 | echo "ARRAY $cr_rootdev devices=$cr_dev_list_md" >> "$MNTIMAGE/etc/mdadm.conf" | |
1189 | fi | |
1190 | ||
1191 | for f in $cr_dev_list $cr_rootdev $dev_list_extra; do | |
1192 | # mkdir in case of devfs name | |
1193 | mkdir -p $MNTIMAGE/`my_dirname $f` | |
1194 | [ -e "$MNTIMAGE/$f" ] && continue | |
1195 | [ -n "$verbose" ] && echo "copying $f" | |
1196 | # this works fine with and without devfs | |
1197 | cp -HR $f $MNTIMAGE/$f | |
1198 | done | |
ef66f232 | 1199 | done |
4e9eb79c | 1200 | |
6cca3165 | 1201 | echo "mdassemble" >> "$s" |
33d24e12 | 1202 | |
4e9eb79c AM |
1203 | # needed to determine md-version |
1204 | if [ "$do_md0" -eq 1 ] ; then | |
1205 | mknod $MNTIMAGE/dev/md0 b 9 0 | |
1206 | fi | |
2df2e995 | 1207 | } |
2968c9dd | 1208 | |
2df2e995 | 1209 | initrd_gen_nfs() { |
5a61a17c | 1210 | # use root=/dev/ram0 init=/linuxrc when starting kernel or you will |
51447ab3 | 1211 | # have problems like init(XX) being child process of swapper(1). |
5a61a17c | 1212 | [ -n "$verbose" ] && echo "Adding rootfs on NFS support to initrd (dhcp)" |
53623c90 | 1213 | mknod "$MNTIMAGE/dev/urandom" c 1 8 |
5c4cec75 | 1214 | mkdir "$MNTIMAGE/newroot" |
7d400dbe | 1215 | mkdir "$MNTIMAGE/proc" |
5c4cec75 AM |
1216 | echo "ifconfig lo 127.0.0.1 up" >> "$s" |
1217 | echo "route add -net 127.0.0.0 netmask 255.0.0.0 lo" >> "$s" | |
1218 | echo "ifconfig eth0 0.0.0.0 up" >> "$s" | |
ac085800 | 1219 | echo "udhcpc -i eth0 -f -q -s /bin/setdhcp" >> "$s" |
5a61a17c | 1220 | cat << 'EOF' > "$MNTIMAGE/bin/setdhcp" |
5c4cec75 | 1221 | #!/bin/sh |
5a61a17c ER |
1222 | [ "$1" != "bound" ] && exit |
1223 | [ -n "$broadcast" ] && BROADCAST="broadcast $broadcast" | |
1224 | [ -n "$subnet" ] && NETMASK="netmask $subnet" | |
5c4cec75 | 1225 | set -x |
5a61a17c | 1226 | ifconfig $interface $ip $BROADCAST $NETMASK up |
5c4cec75 | 1227 | set +x |
5a61a17c | 1228 | if [ -n "$router" ]; then |
ac085800 ER |
1229 | for r in $router; do |
1230 | set -x | |
1231 | route add default gw $r dev $interface | |
1232 | set +x | |
1233 | done | |
5c4cec75 | 1234 | fi |
7d400dbe ER |
1235 | |
1236 | mount -t proc none /proc | |
5a61a17c ER |
1237 | for o in $(cat /proc/cmdline); do |
1238 | case $o in | |
7d400dbe | 1239 | nfsroot=*) |
5a61a17c | 1240 | rootpath=${o#nfsroot=} |
7d400dbe ER |
1241 | ;; |
1242 | esac | |
1243 | done | |
1244 | umount /proc | |
1245 | ||
5a61a17c | 1246 | if [ -n "$rootpath" ]; then |
ac085800 ER |
1247 | set -x |
1248 | mount -n -t nfs -o ro,nolock,posix,tcp,wsize=8192,rsize=8192 $rootpath /newroot | |
1249 | set +x | |
5c4cec75 | 1250 | else |
ac085800 ER |
1251 | set +x |
1252 | echo "Missing rootpath in what DHCP server sent to us. Failing..." | |
1253 | echo "All seen variables are listed below:" | |
1254 | set | |
1255 | set -x | |
5c4cec75 AM |
1256 | fi |
1257 | EOF | |
1258 | chmod 755 "$MNTIMAGE/bin/setdhcp" | |
1259 | echo "cd /newroot" >> "$s" | |
c52ba2fe | 1260 | echo "pivot_root . initrd" >> "$s" |
d4a8e40e | 1261 | echo "[ -x /sbin/chroot ] && exec /sbin/chroot . /sbin/init -i < dev/console > dev/console 2>&1" >> "$s" |
c52ba2fe | 1262 | echo "exec /usr/sbin/chroot . /sbin/init -i < dev/console > dev/console 2>&1" >> "$s" |
2df2e995 | 1263 | } |
6fe19d5b | 1264 | |
2df2e995 | 1265 | initrd_gen_lvm() { |
7c38b114 AF |
1266 | [ -n "$verbose" ] && echo "Adding LVM support to initrd" |
1267 | inst /sbin/initrd-lvm $MNTIMAGE/bin/lvm | |
f34c76a3 AM |
1268 | mkdir -p $MNTIMAGE/etc |
1269 | mkdir -p $MNTIMAGE/tmp | |
1270 | mkdir -p $MNTIMAGE/proc | |
4e1e40bd | 1271 | mkdir -p $MNTIMAGE/newroot |
afaefcb5 AM |
1272 | if ! is_yes "$USE_UDEV"; then |
1273 | mkdir -p $MNTIMAGE/dev/mapper | |
1274 | mknod $MNTIMAGE/dev/mapper/control c 10 63 | |
b007399c | 1275 | for device in $PVDEVICES; do |
13b29c8f ER |
1276 | # if LVM on RAID then device might be copied already in gen_softraid |
1277 | [ -e "$MNTIMAGE/dev/$(basename $device)" ] && continue | |
7bdf23ec | 1278 | cp -HR $device $MNTIMAGE/dev/ |
b007399c | 1279 | done |
afaefcb5 | 1280 | fi |
84670990 | 1281 | echo "mount -t proc none /proc" >> "$s" |
b78e6497 | 1282 | echo "mount -t tmpfs none /tmp" >> "$s" |
e0c502bb | 1283 | if [ "$LVMTOOLSVERSION" = "1" ] ; then |
cff3058d | 1284 | echo "lvm vgscan -T" >> "$s" |
90b5b05a | 1285 | echo "lvm vgchange -T -a y $VGVOLUME" >> "$s" |
4e1e40bd | 1286 | echo "umount /tmp" >> "$s" |
ac085800 ER |
1287 | # fail to umount |
1288 | echo "umount /dev" >> "$s" | |
1289 | echo "umount /proc" >> "$s" | |
cff3058d | 1290 | else |
ac085800 ER |
1291 | echo "cat /etc/lvm.conf > /tmp/lvm.conf" >> "$s" |
1292 | echo "global {" > "$MNTIMAGE/etc/lvm.conf" | |
f34c76a3 AM |
1293 | echo " locking_type = 0" >> "$MNTIMAGE/etc/lvm.conf" |
1294 | echo " locking_dir = \"/tmp\"" >> "$MNTIMAGE/etc/lvm.conf" | |
1295 | echo "}" >> "$MNTIMAGE/etc/lvm.conf" | |
ac085800 | 1296 | echo "devices {" >> "$MNTIMAGE/etc/lvm.conf" |
8fb0a4d2 | 1297 | echo " sysfs_scan=0" >> "$MNTIMAGE/etc/lvm.conf" |
f34c76a3 | 1298 | if is_yes "$raidfound"; then |
ac085800 | 1299 | echo " md_component_detection = 1" >> "$MNTIMAGE/etc/lvm.conf" |
f34c76a3 AM |
1300 | fi |
1301 | lvm dumpconfig | awk '/filter=/' >> "$MNTIMAGE/etc/lvm.conf" | |
1302 | echo "}" >> "$MNTIMAGE/etc/lvm.conf" | |
4e1e40bd | 1303 | echo "LVM_SYSTEM_DIR=/tmp lvm vgscan --ignorelockingfailure" >> "$s" |
90b5b05a | 1304 | echo "LVM_SYSTEM_DIR=/tmp lvm vgchange --ignorelockingfailure -a y $VGVOLUME" >> "$s" |
d152a29d | 1305 | echo "LVM_SYSTEM_DIR=/tmp lvm vgscan --ignorelockingfailure --mknodes" >> "$s" |
91ed0242 AM |
1306 | # Find out major/minor |
1307 | echo "majmin=\"\`LVM_SYSTEM_DIR=/tmp lvm lvdisplay --ignorelockingfailure -c $org_rootdev\`\"" >> "$s" | |
1308 | echo "majmin=\"\${majmin#*/}\"" >> "$s" | |
1309 | echo "majmin=\"\${majmin#*:*:*:*:*:*:*:*:*:*:*:*}\"" >> "$s" | |
1310 | echo "major=\"\${majmin%:*}\"" >> "$s" | |
1311 | echo "minor=\"\${majmin#*:}\"" >> "$s" | |
1312 | # Pass it to kernel | |
1313 | echo "val=\$((256 * \$major + \$minor))" >> "$s" | |
1314 | echo "echo \$val > /proc/sys/kernel/real-root-dev" >> "$s" | |
4e1e40bd | 1315 | echo "umount /tmp" >> "$s" |
4e1e40bd | 1316 | echo "umount /proc" >> "$s" |
cff3058d | 1317 | fi |
2df2e995 AM |
1318 | } |
1319 | ||
2b1a3707 | 1320 | initrd_gen_procdata() { |
ac085800 | 1321 | [ -n "$verbose" ] && echo "Adding rootfs finding based on root= option support." |
2b1a3707 | 1322 | mkdir -p $MNTIMAGE/proc |
5a61a17c | 1323 | cat << 'EOF' >> "$s" |
2b1a3707 AM |
1324 | set +x |
1325 | mount -t proc none /proc | |
5a61a17c ER |
1326 | root="$(busybox awk ' /root=\/dev\// { gsub(/.*root=\/dev\//,NIL,$0); gsub(/ .*/,NIL,$0); print $0; } ' /proc/cmdline)" |
1327 | if [ -n "$root" ]; then | |
ac085800 ER |
1328 | rootnr="$(busybox awk -v root="$root" ' { if ($4 == root) { print 256*$1+$2; } } ' /proc/partitions)" |
1329 | if [ -n "$rootnr" ]; then | |
1330 | echo "$rootnr" > /proc/sys/kernel/real-root-dev | |
1331 | fi | |
2b1a3707 | 1332 | fi |
9d949203 | 1333 | umount /proc |
2b1a3707 AM |
1334 | set -x |
1335 | EOF | |
1336 | } | |
1337 | ||
2df2e995 | 1338 | # main generation |
1606e343 AM |
1339 | |
1340 | if is_yes "$USE_UDEV"; then | |
1341 | initrd_gen_udev | |
1342 | fi | |
1343 | ||
2ce7656a | 1344 | if is_yes "$USE_SUSPEND"; then |
22b0c9f4 AM |
1345 | initrd_gen_suspend |
1346 | fi | |
1347 | ||
2ce7656a | 1348 | if is_yes "$USE_SUSPEND2"; then |
9426259f | 1349 | initrd_gen_suspend2 |
2df2e995 AM |
1350 | fi |
1351 | ||
882472ae ER |
1352 | if is_yes "$USE_DMRAID"; then |
1353 | initrd_gen_dmraid | |
1354 | fi | |
1355 | ||
2df2e995 AM |
1356 | if is_yes "$usenfs" ; then |
1357 | initrd_gen_nfs | |
1358 | elif is_yes "$USERAIDSTART" && is_yes "$raidfound" ; then | |
1359 | initrd_gen_softraid | |
1360 | if is_yes "$uselvm" ; then | |
1361 | initrd_gen_lvm | |
bfea009a AM |
1362 | else |
1363 | initrd_gen_procdata | |
2df2e995 AM |
1364 | fi |
1365 | elif is_yes "$uselvm" ; then | |
1366 | initrd_gen_lvm | |
2b1a3707 AM |
1367 | else |
1368 | initrd_gen_procdata | |
7c38b114 AF |
1369 | fi |
1370 | ||
f8f9e56d AM |
1371 | if [ "$INITRDFS" = "initramfs" ]; then |
1372 | mkdir -p $MNTIMAGE/newroot | |
1373 | cp -HR $org_rootdev $MNTIMAGE/dev | |
1374 | echo "mount -t $rootFs $org_rootdev /newroot" >> "$s" | |
1375 | echo "switch_root /newroot /sbin/init" >> "$s" | |
1376 | # we need real file, not symlink | |
1377 | rm -f $MNTIMAGE/init | |
1378 | cp -a $MNTIMAGE/linuxrc $MNTIMAGE/init | |
1379 | fi | |
1380 | ||
35164381 | 1381 | chmod +x "$RCFILE" |
bb529f94 | 1382 | |
35164381 | 1383 | (cd "$MNTIMAGE"; tar cf - .) | (cd "$MNTPOINT"; tar xf -) |
bb529f94 | 1384 | |
2ad94d8a | 1385 | case "$INITRDFS" in |
8b1e4ac7 | 1386 | ext2) |
35164381 | 1387 | umount "$IMAGE" |
8b1e4ac7 AF |
1388 | ;; |
1389 | rom) | |
1390 | genromfs -f "$IMAGE" -d "$MNTPOINT" -V "PLD initrd for kernel $kernel" | |
1391 | ;; | |
1392 | cram) | |
1393 | mkcramfs "$MNTPOINT" "$IMAGE" | |
8b1e4ac7 | 1394 | ;; |
48413b7f | 1395 | initramfs) |
566ad08b | 1396 | (cd $MNTPOINT ; find . | cpio -H newc -o > "$IMAGE") |
48413b7f | 1397 | ;; |
8b1e4ac7 | 1398 | *) |
2ad94d8a | 1399 | echo "Filesystem $INITRDFS not supported by $0"; |
c31050f3 | 1400 | esac |
bb529f94 JK |
1401 | |
1402 | if is_yes "$COMPRESS" ; then | |
7d2fc5eb | 1403 | gzip -9 < "$IMAGE" > "$target" |
bb529f94 | 1404 | else |
7d2fc5eb | 1405 | cp -a "$IMAGE" "$target" |
bb529f94 | 1406 | fi |
5b71959c AM |
1407 | |
1408 | if is_yes "$BOOT_SPLASH"; then | |
1409 | if [ ! -x /bin/splash.bin ]; then | |
1410 | echo "Failed to execute /bin/splash.bin. Is bootsplash package installed?" 1>&2 | |
1411 | elif [ -z "$THEME" ]; then | |
1412 | echo "Please configure your /etc/sysconfig/bootsplash first." 1>&2 | |
1413 | echo "Generating bootsplashes skipped." 1>&2 | |
1414 | else | |
ac085800 ER |
1415 | if [ -n "$BOOT_SPLASH_RESOLUTIONS" ]; then |
1416 | for res in $BOOT_SPLASH_RESOLUTIONS; do | |
1417 | if [ -f "/etc/bootsplash/themes/$THEME/config/bootsplash-$res.cfg" ]; then | |
1418 | /bin/splash.bin -s -f "/etc/bootsplash/themes/$THEME/config/bootsplash-$res.cfg" >> "$target" && \ | |
1419 | [ -n "$verbose" ] && echo "Added $res $THEME theme to initrd." | |
1420 | else | |
1421 | echo "/etc/bootsplash/themes/$THEME/config/bootsplash-$res.cfg doesn't exist, skipped" 1>&2 | |
1422 | fi | |
1423 | done | |
1424 | else | |
1425 | echo "No BOOT_SPLASH_RESOLUTIONS specified in /etc/sysconfig/bootsplash." 1>&2 | |
1426 | echo "Not adding bootsplash to initrd." 1>&2 | |
1427 | fi | |
5b71959c AM |
1428 | fi |
1429 | fi | |
1430 | ||
35164381 | 1431 | rm -rf "$MNTIMAGE" "$MNTPOINT" "$IMAGE" |
ac085800 ER |
1432 | |
1433 | # vim:ts=4:sw=4:noet:fdm=marker |