]>
Commit | Line | Data |
---|---|---|
3e6a3a30 PZ |
1 | #!/bin/bash |
2 | LANG=C | |
3 | ||
4 | PATH=$PATH:/sbin:/usr/sbin | |
5 | IMAGEUUID=$(date +%Y%m%d%H%M) | |
6 | ||
7 | usage () { | |
8 | echo "usage: mk-images <pkgsrc> <toplevel> <template> <imgdir> <buildarch> <productname> <version> [<productpath>]" | |
9 | exit 0 | |
10 | } | |
11 | ||
12 | DEBUG="" | |
13 | if [ "$1" == "--debug" ]; then | |
14 | DEBUG="--debug" | |
15 | shift | |
16 | fi | |
17 | ||
18 | if [ -z "$1" -o -z "$2" -o -z "$3" -o -z "$4" -o -z "$5" -o -z "$6" -o -z "$7" -o -z "$8" ]; then usage; fi | |
19 | ||
20 | PRODUCT=$6 | |
21 | VERSION=$7 | |
22 | PRODUCTPATH=$8 | |
23 | if [ -n "$9" ]; then | |
24 | BUGURL=$9 | |
25 | fi | |
26 | ||
27 | TOPDIR=$(echo $0 | sed "s,/[^/]*$,,") | |
28 | if [ $TOPDIR = $0 ]; then | |
29 | $TOPDIR="." | |
30 | fi | |
31 | ||
32 | TOPDIR=$(cd $TOPDIR; pwd) | |
33 | ||
34 | # Set, verify, and create paths | |
35 | KERNELPATH=$1 | |
36 | TOPDESTPATH=$2 | |
37 | IMAGEPATH=$TOPDESTPATH/images | |
38 | FULLMODPATH=/tmp/instimagemods.$$ | |
39 | FINALFULLMODPATH=$4/modules | |
40 | INSTIMGPATH=$TOPDESTPATH/$PRODUCTPATH/base | |
41 | INSTIMGTEMPLATE=$3 | |
42 | IMGPATH=$4 | |
43 | KERNELBASE=/tmp/updboot.kernel.$$ | |
44 | MODDEPS=$KERNELBASE/moddeps | |
45 | MODMAPS=$KERNELBASE/modules.pcimap | |
46 | USBMAPS=$KERNELBASE/modules.usbmap | |
47 | BUILDARCH=$5 | |
48 | ||
49 | KERNELNAME=vmlinuz | |
50 | ||
51 | if [ "$BUILDARCH" = "ia64" ]; then | |
52 | KERNELDIR="/boot/efi/EFI/redhat" | |
53 | else | |
54 | KERNELDIR="/boot" | |
55 | fi | |
56 | ||
57 | if [ "$BUILDARCH" = "sparc64" ]; then | |
58 | BASEARCH=sparc | |
59 | else | |
60 | BASEARCH=$BUILDARCH | |
61 | fi | |
62 | ||
63 | # explicit block size setting for some arches (FIXME: we compose | |
64 | # ppc64-ish trees as ppc, so we have to set the "wrong" block size) | |
65 | if [ "$BUILDARCH" = "sparc64" ]; then | |
66 | CRAMBS="--blocksize 8192" | |
67 | elif [ "$BUILDARCH" = "sparc" ]; then | |
68 | CRAMBS="--blocksize 4096" | |
69 | else | |
70 | CRAMBS="" | |
71 | fi | |
72 | ||
73 | if [ ! -d "$1" ]; then | |
74 | LATEST="rsh porkchop latest --arch $BUILDARCH" | |
75 | else | |
76 | LATEST=findPackage | |
77 | fi | |
78 | ||
79 | if [ $BUILDARCH = x86_64 -o $BUILDARCH = s390x ]; then | |
80 | LIBDIR=lib64 | |
81 | else | |
82 | LIBDIR=lib | |
83 | fi | |
84 | ||
85 | rm -rf $IMAGEPATH | |
86 | rm -rf $FULLMODPATH | |
87 | rm -rf $FINALFULLMODPATH | |
88 | rm -rf $KERNELBASE | |
89 | mkdir -p $IMAGEPATH | |
90 | mkdir -p $FULLMODPATH | |
91 | mkdir -p $FINALFULLMODPATH | |
92 | mkdir -p $KERNELBASE | |
93 | mkdir -p $INSTIMGPATH | |
94 | ||
95 | FONTARCH=${BASEARCH} | |
96 | if [ $FONTARCH = i686 ] | |
97 | then | |
98 | FONTARCH=i386 | |
99 | fi | |
100 | # Stuff that we need | |
101 | TRIMPCITABLE=$IMGPATH/usr/lib/anaconda-runtime/trimpcitable | |
102 | TRIMMODMAP=$IMGPATH/usr/lib/anaconda-runtime/trimmodmap | |
103 | TRIMPCIIDS=$IMGPATH/usr/lib/anaconda-runtime/trimpciids | |
104 | TRIMUSBMAP=$IMGPATH/usr/lib/anaconda-runtime/trimusbmap | |
105 | GETKEYMAPS=$IMGPATH/usr/lib/anaconda-runtime/getkeymaps | |
106 | KEYMAPS=/tmp/keymaps-$BUILDARCH.$$ | |
107 | SCREENFONT=$IMGPATH/usr/lib/anaconda-runtime/screenfont-${FONTARCH}.gz | |
108 | GETMODDEPS=$IMGPATH/usr/lib/anaconda-runtime/moddeps | |
109 | MODLIST=$IMGPATH/usr/lib/anaconda-runtime/modlist | |
110 | MODINFO=$IMGPATH/usr/lib/anaconda-runtime/loader/module-info | |
111 | FILTERMODDEPS=$IMGPATH/usr/lib/anaconda-runtime/filtermoddeps | |
112 | LOADERBINDIR=$IMGPATH/usr/lib/anaconda-runtime/loader | |
113 | BOOTDISKDIR=$IMGPATH/usr/lib/anaconda-runtime/boot | |
114 | LANGTABLE=$IMGPATH/usr/lib/anaconda/lang-table | |
115 | PCITABLE=$IMGPATH/usr/share/hwdata/pcitable | |
116 | PCIIDS=$IMGPATH/usr/share/hwdata/pci.ids | |
117 | CACHE=$KERNELBASE/.cache | |
118 | MODULESUSED=$KERNELBASE/modules-used | |
119 | ||
120 | touch $MODULESUSED | |
121 | ||
122 | REQUIREMENTS="$TRIMPCITABLE $TRIMMODMAP $TRIMPCIIDS $PCITABLE $PCIIDS $GETMODDEPS $MODINFO | |
123 | $FILTERMODDEPS $LANGTABLE $GETKEYMAPS $TRIMUSBMAP" | |
124 | ||
125 | dieLater= | |
126 | for n in $REQUIREMENTS; do | |
127 | if [ ! -f $n ]; then | |
128 | echo "$n doesn't exist" | |
129 | dieLater=1 | |
130 | fi | |
131 | done | |
132 | ||
133 | for n in $BOOTDISKDIR; do | |
134 | if [ ! -d $n ]; then | |
135 | echo "$n doesn't exist" | |
136 | dieLater=1 | |
137 | fi | |
138 | done | |
139 | ||
140 | if [ -n "$dieLater" ]; then exit 1; fi | |
141 | ||
142 | if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then | |
143 | # go ahead and create the keymaps so we only have to do it once | |
144 | if [ -f $IMGPATH/usr/lib/anaconda-runtime/keymaps-override-$BUILDARCH ]; then | |
145 | echo "Found keymap override, using it" | |
146 | cp $IMGPATH/usr/lib/anaconda-runtime/keymaps-override-$BUILDARCH $KEYMAPS | |
147 | else | |
148 | echo "Running: $GETKEYMAPS $BUILDARCH $KEYMAPS $IMGPATH" | |
149 | $GETKEYMAPS $BUILDARCH $KEYMAPS $IMGPATH | |
150 | if [ $? != 0 ]; then | |
151 | echo "Unable to create keymaps and thus can't create initrd." | |
152 | exit 1 | |
153 | fi | |
154 | fi | |
155 | fi | |
156 | ||
157 | findPackage() { | |
158 | dir=$1 | |
159 | name=$2 | |
160 | ||
161 | for n in $dir/$name*{$KERNELARCH,noarch}.rpm; do | |
162 | thisName=$(rpm --nodigest --nosignature --qf '%{NAME}' -qp $n) | |
163 | if [ -z "$thisName" ]; then | |
164 | continue | |
165 | fi | |
166 | if [ $thisName = $name ]; then | |
167 | echo $n | |
168 | return | |
169 | fi | |
170 | done | |
171 | ||
172 | echo "cannot find package $name in path $dir" >&2 | |
173 | } | |
174 | ||
175 | findmodule () { | |
176 | if [ ! -f $CACHE ]; then | |
177 | find $KERNELROOT/lib/modules/ > $CACHE | |
178 | fi | |
179 | ||
180 | grep "/$1\.ko" $CACHE | |
181 | } | |
182 | ||
183 | rundepmod () { | |
184 | what=$1 | |
185 | final=$2 | |
186 | ||
187 | $FAKEARCH /sbin/depmod -a -F $KERNELROOT/boot/System.map-$version \ | |
188 | -b $KERNELROOT $version | |
189 | mv $KERNELROOT/lib/modules/$version/modules.pcimap $MODMAPS | |
190 | mv $KERNELROOT/lib/modules/$version/modules.usbmap $USBMAPS | |
191 | ||
192 | cat $KERNELROOT/lib/modules/$version/modules.dep | $FILTERMODDEPS > $final | |
193 | } | |
194 | ||
195 | getmoddeps () { | |
196 | what=$1 | |
197 | final=$2 | |
198 | ||
199 | for mod in $what ; do | |
200 | mod=$(echo $mod | sed 's/\.ko */|^/g;s/\.ko$//;s/.*\///') | |
201 | egrep $mod $MODDEPS >> $final.foo | |
202 | done | |
203 | mv $final.foo $final | |
204 | } | |
205 | ||
206 | padfile () { | |
207 | PS_FILE=$1 | |
208 | PS_SIZE=$2 | |
209 | ||
210 | size=`cat $PS_FILE | wc -c` | |
211 | filler=`expr $PS_SIZE "*" 1024 - $size` | |
212 | dd if=/dev/zero bs=$filler count=1 >> $PS_FILE 2> /dev/null | |
213 | } | |
214 | ||
215 | intcopymodules () { | |
216 | dir=$2 | |
217 | ||
218 | for n in $1; do | |
219 | m=$(findmodule $n) | |
220 | if [ -z "$m" ]; then | |
221 | [ -n "$DEBUG" ] && echo "Module $n not found in kernel rpm" >&2 | |
222 | else | |
223 | echo $n >> $MODULESUSED | |
224 | for o in $m ; do | |
225 | echo $n | |
226 | ver=$(echo $o |cut -d / -f 7) | |
227 | myarch=$(echo $o |cut -d / -f 4) | |
228 | if ! [ -d $dir/$ver/$myarch ] ; then mkdir -p $dir/$ver/$myarch ; fi | |
229 | if ! cp $o $dir/$ver/$myarch; then | |
230 | echo "Failed to copy $o to $dir/$ver/$myarch (for module $n)" >&2 | |
231 | fi | |
232 | done | |
233 | fi | |
234 | done | |
235 | } | |
236 | ||
237 | # This loops to make sure it resolves dependencies of dependencies of... | |
238 | resdeps () { | |
239 | items="$*" | |
240 | ||
241 | before=1 | |
242 | after=2 | |
243 | ||
244 | while [ $before != $after ]; do | |
245 | before=`echo $items | wc -c` | |
246 | ||
247 | if [ $? != "0" ] ; then | |
248 | kill -9 $$ | |
249 | fi | |
250 | list=`$GETMODDEPS -m $MODDEPS $items` | |
251 | items=$(for n in $items $list; do echo $n; done | sort -u) | |
252 | after=`echo $items | wc -c` | |
253 | done | |
254 | ||
255 | echo $items | |
256 | } | |
257 | ||
258 | expandModuleSet() { | |
259 | SET="" | |
260 | for name in $1; do | |
261 | char=$(echo $name | cut -c1) | |
262 | if [ $char = '=' ]; then | |
263 | NAME=$(echo $name | cut -c2-) | |
264 | SET="$SET $($MODLIST --modinfo-file $MODINFO $NAME)" | |
265 | elif [ $char = '+' ]; then | |
266 | NAME=$(echo $name | cut -c2-) | |
267 | ||
268 | # all of the modules of this type | |
269 | $MODLIST --modinfo-file $MODINFO $NAME > /tmp/emsAll.$$ | |
270 | # the modules used that are of this type | |
271 | sort -u $MODULESUSED | cat - /tmp/emsAll.$$ | sort | | |
272 | uniq -d > /tmp/emsUsed.$$ | |
273 | # the modules that are of this type, but not used | |
274 | SET="$SET $(cat /tmp/emsAll.$$ /tmp/emsUsed.$$ | sort | uniq -u)" | |
275 | ||
276 | rm -f /tmp/emsAll.$$ /tmp/emsUsed.$$ | |
277 | else | |
278 | SET="$SET $name" | |
279 | fi | |
280 | done | |
281 | ||
282 | echo $SET | |
283 | } | |
284 | ||
285 | makemoduleball() { | |
286 | unset MMB_DD | |
287 | MMB_MODINFO="module-info" | |
288 | MMB_NAME="modules.cgz" | |
289 | ||
290 | while [ x$(echo $1 | cut -c1-2) = x"--" ]; do | |
291 | if [ "$1" = "--dd" ]; then | |
292 | MMB_DD="$2" | |
293 | shift; shift | |
294 | MMB_MODINFO="modinfo" | |
295 | continue | |
296 | elif [ "$1" = "--name" ]; then | |
297 | MMB_NAME="$2" | |
298 | shift; shift | |
299 | continue | |
300 | fi | |
301 | echo "unknown option passed to $0" | |
302 | exit 1 | |
303 | done | |
304 | ||
305 | MMB_DIR=$1 | |
306 | MMB_MODULESET=$(resdeps $2) | |
307 | ||
308 | rm -rf $MMB_DIR/modules $MMB_DIR/$MMB_NAME $MMB_DIR/modules.dep \ | |
309 | $MMB_DIR/modules.pcimap $MMB_DIR/pcitable $MMB_DIR/$MMB_MODINFO \ | |
310 | $MMB_DIR/pci.ids | |
311 | mkdir -p $MMB_DIR/modules | |
312 | ||
313 | MMB_MODULESET=$(intcopymodules "$MMB_MODULESET" $MMB_DIR/modules) | |
314 | ||
315 | pushd $MMB_DIR/modules > /dev/null | |
316 | ||
317 | $MODLIST --modinfo-file $MODINFO --ignore-missing --modinfo \ | |
318 | $MMB_MODULESET > ../$MMB_MODINFO | |
319 | ||
320 | getmoddeps "$(find . -name *.ko)" ../modules.dep | |
321 | ||
322 | # create the pcitable | |
323 | $TRIMPCITABLE ignore $(find . -name *.ko -exec basename {} \;) < $PCITABLE > ../pcitable | |
324 | ||
325 | # create the modules.pcimap | |
326 | $TRIMMODMAP $PCITABLE $(find . -name *.ko -exec basename {} \;) < $MODMAPS > ../modules.pcimap | |
327 | ||
328 | # create the modules.usbmap | |
329 | $TRIMUSBMAP $(find . -name *.ko -exec basename {} \;) < $USBMAPS > ../modules.usbmap | |
330 | # remove a zero-byte modules.usbmap | |
331 | if [ "$(ls -s ../modules.usbmap |cut -f 1 -d ' ')" = "0" ]; then | |
332 | rm -f ../modules.usbmap | |
333 | fi | |
334 | # create the pci.ids | |
335 | awk '!/^(\t\t|#)/ { print ;if ($0 == "ffff Illegal Vendor ID") nextfile; }' < $PCIIDS | \ | |
336 | $TRIMPCIIDS ../pcitable ../modules.pcimap > ../pci.ids | |
337 | ||
338 | if [ -n "$MMB_DD" ]; then | |
339 | echo $MMB_DD > $MMB_DIR/rhdd | |
340 | fi | |
341 | ||
342 | find . -type f | cpio --quiet -H crc -o | gzip -9 > ../$MMB_NAME | |
343 | cd .. | |
344 | rm -rf modules | |
345 | chmod 644 * | |
346 | popd > /dev/null | |
347 | } | |
348 | ||
349 | makemainmodules() { | |
350 | modlist=`expandModuleSet "$1"` | |
351 | ||
352 | if [ -n "$2" ]; then | |
353 | extraargs="--name $2" | |
354 | fi | |
355 | ||
356 | rm -rf $FULLMODPATH | |
357 | rm -rf $FINALFULLMODPATH | |
358 | ||
359 | if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then | |
360 | mkdir -p $KERNELROOT/lib/modules/misc | |
361 | find $KERNELROOT/lib/modules/*/kernel/drivers/s390/ -name "*.ko" \ | |
362 | -exec cp -f {} $KERNELROOT/lib/modules/misc \; | |
363 | fi | |
364 | makemoduleball $extraargs $FULLMODPATH "$modlist" | |
365 | cp -ar $FULLMODPATH $FINALFULLMODPATH | |
366 | rm -rf $FULLMODPATH | |
367 | } | |
368 | ||
369 | makeproductfile() { | |
370 | root=$1 | |
371 | ||
372 | rm -f $root/.buildstamp | |
373 | echo $IMAGEUUID > $root/.buildstamp | |
374 | echo $PRODUCT >> $root/.buildstamp | |
375 | echo $VERSION >> $root/.buildstamp | |
376 | echo $PRODUCTPATH >> $root/.buildstamp | |
377 | if [ -n "$BUGURL" ]; then | |
378 | echo $BUGURL >> $root/.buildstamp | |
379 | fi | |
380 | } | |
381 | ||
382 | setupShellEnvironment() { | |
383 | # setup password/group entries | |
384 | cat > $MBD_DIR/etc/passwd << EOF | |
385 | root::0:0::/:/sbin/loader | |
386 | debug::0:0:debug shell:/:/bin/bash | |
387 | sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin | |
388 | EOF | |
389 | cat > $MBD_DIR/etc/group << EOF | |
390 | root:x:0:root | |
391 | tty:x:5: | |
392 | EOF | |
393 | echo "sshd:x:74:" >> $MBD_DIR/etc/group | |
394 | echo "telnet 23/tcp" > $MBD_DIR/etc/services | |
395 | echo "tcp 6 TCP" > $MBD_DIR/etc/protocols | |
396 | ||
397 | # PAM configuration | |
398 | for i in pam_limits.so pam_env.so pam_unix.so pam_deny.so; do | |
399 | cp -f $IMGPATH/$LIBDIR/security/$i $MBD_DIR/$LIBDIR/security | |
400 | done | |
401 | ||
402 | cp -f $IMGPATH/etc/pam.d/other $MBD_DIR/etc/pam.d | |
403 | cat > $MBD_DIR/etc/pam.d/login << EOF | |
404 | #%PAM-1.0 | |
405 | auth required pam_env.so | |
406 | auth sufficient pam_unix.so likeauth nullok | |
407 | auth required pam_deny.so | |
408 | account required pam_unix.so | |
409 | password sufficient pam_unix.so nullok use_authtok md5 shadow | |
410 | password required pam_deny.so | |
411 | session required pam_limits.so | |
412 | session required pam_unix.so | |
413 | EOF | |
414 | cp -f $MBD_DIR/etc/pam.d/login $MBD_DIR/etc/pam.d/sshd | |
415 | cp -f $MBD_DIR/etc/pam.d/login $MBD_DIR/etc/pam.d/remote | |
416 | ||
417 | cp -f $IMGPATH/etc/security/{limits.conf,pam_env.conf} $MBD_DIR/etc/security/ | |
418 | ||
419 | # setup xinetd for telnet | |
420 | cp -f $IMGPATH/etc/xinetd.conf $MBD_DIR/etc/xinetd.conf | |
421 | mkdir -p $MBD_DIR/etc/xinetd.d | |
422 | cat > $MBD_DIR/etc/xinetd.d/telnet <<EOF | |
423 | service telnet | |
424 | { | |
425 | flags = REUSE | |
426 | socket_type = stream | |
427 | wait = no | |
428 | user = root | |
429 | server = /sbin/in.telnetd | |
430 | log_on_failure += USERID | |
431 | disable = no | |
432 | } | |
433 | EOF | |
434 | ||
435 | # key generation takes ages on s390, you really don't want this for every | |
436 | # installation attempt. These are NOT the keys of the installed system! | |
437 | mkdir -m 0700 -p $MBD_DIR/etc/ssh | |
438 | echo -n "Generating SSH1 RSA host key: " | |
439 | /usr/bin/ssh-keygen -q -t rsa1 -f $MBD_DIR/etc/ssh/ssh_host_key \ | |
440 | -C '' -N '' >&/dev/null | |
441 | echo | |
442 | echo -n "Generating SSH2 RSA host key: " | |
443 | /usr/bin/ssh-keygen -q -t rsa -f $MBD_DIR/etc/ssh/ssh_host_rsa_key \ | |
444 | -C '' -N '' >&/dev/null | |
445 | echo | |
446 | echo -n "Generating SSH2 DSA host key: " | |
447 | /usr/bin/ssh-keygen -q -t dsa -f $MBD_DIR/etc/ssh/ssh_host_dsa_key \ | |
448 | -C '' -N '' >&/dev/null | |
449 | echo | |
450 | (cd $MBD_DIR/etc/ssh; \ | |
451 | chmod 600 ssh_host_key ssh_host_rsa_key ssh_host_dsa_key; \ | |
452 | chmod 644 ssh_host_key.pub ssh_host_rsa_key.pub ssh_host_dsa_key.pub; ) | |
453 | ||
454 | ||
455 | cat > $MBD_DIR/etc/ssh/sshd_config <<EOF | |
456 | Port 22 | |
457 | HostKey /etc/ssh/ssh_host_key | |
458 | HostKey /etc/ssh/ssh_host_rsa_key | |
459 | HostKey /etc/ssh/ssh_host_dsa_key | |
460 | PermitRootLogin yes | |
461 | IgnoreRhosts yes | |
462 | StrictModes yes | |
463 | X11Forwarding yes | |
464 | X11DisplayOffset 10 | |
465 | PrintMotd yes | |
466 | XAuthLocation /sbin/xauth | |
467 | KeepAlive yes | |
468 | SyslogFacility AUTHPRIV | |
469 | RSAAuthentication yes | |
470 | PasswordAuthentication yes | |
471 | PermitEmptyPasswords yes | |
472 | PermitUserEnvironment yes | |
473 | EOF | |
474 | chmod 600 $MBD_DIR/etc/ssh/sshd_config | |
475 | ||
476 | # copy in the binaries | |
573a92cd | 477 | cp -f $IMGPATH/bin/login $MBD_DIR/sbin/login |
3e6a3a30 PZ |
478 | cp -f $IMGPATH/usr/sbin/sshd $MBD_DIR/sbin/sshd |
479 | cp -f $IMGPATH/usr/sbin/xinetd $MBD_DIR/sbin/xinetd | |
480 | cp -f $IMGPATH/usr/sbin/in.telnetd $MBD_DIR/sbin/in.telnetd | |
bd688d0c PZ |
481 | cp -f $IMGPATH/bin/bash $MBD_DIR/sbin/bash |
482 | cp -f $IMGPATH/bin/busybox $MBD_DIR/sbin/busybox | |
3e6a3a30 PZ |
483 | |
484 | # make some symlinks | |
485 | ln -sf bash $MBD_DIR/bin/sh | |
486 | (cd $MBD_DIR/sbin; | |
487 | set $(./busybox 2>&1| awk '/^\t([[:alnum:]_\[]+,)+/' | sed 's/,//g' | sed 's/ +//'); | |
488 | while [ -n "$1" ]; do | |
489 | if [ $1 != "busybox" -a $1 != "sh" ]; then | |
490 | # if file doesnt already exist, link to busybox | |
491 | if [ ! -f "$1" ]; then | |
492 | ln -sf ./busybox $1 | |
493 | else | |
494 | [ -n "$DEBUG" ] && echo "Overriding busybox version of $1" | |
495 | fi | |
496 | fi | |
497 | shift | |
498 | done ) | |
499 | ||
500 | # and copy libraries too | |
501 | mkdir -p $MBD_DIR/$LIBDIR | |
502 | for lib in $IMGPATH/$LIBDIR/libc.so* \ | |
503 | $IMGPATH/$LIBDIR/libc-*.so* \ | |
504 | $IMGPATH/$LIBDIR/ld-*.so* \ | |
505 | $IMGPATH/$LIBDIR/ld.so* \ | |
506 | $IMGPATH/$LIBDIR/ld64.so* \ | |
507 | $IMGPATH/$LIBDIR/libtermcap.so* \ | |
508 | $IMGPATH/$LIBDIR/libpam.so* \ | |
509 | $IMGPATH/$LIBDIR/libdl.so* \ | |
510 | $IMGPATH/$LIBDIR/libdl-*.so* \ | |
511 | $IMGPATH/$LIBDIR/libnss_files* \ | |
512 | $IMGPATH/$LIBDIR/libnsl* \ | |
513 | $IMGPATH/$LIBDIR/libutil.so* \ | |
514 | $IMGPATH/$LIBDIR/libutil-*.so* \ | |
515 | $IMGPATH/$LIBDIR/libcrypt*so* \ | |
516 | $IMGPATH/$LIBDIR/libselinux*so* \ | |
517 | $IMGPATH/$LIBDIR/libsepol*so* \ | |
518 | $IMGPATH/$LIBDIR/libattr*so* \ | |
519 | $IMGPATH/$LIBDIR/libresolv.so* \ | |
520 | $IMGPATH/$LIBDIR/libresolv-*.so* \ | |
521 | $IMGPATH/$LIBDIR/libm.so* \ | |
522 | $IMGPATH/$LIBDIR/libm-*.so* \ | |
523 | $IMGPATH/usr/$LIBDIR/libz.so* \ | |
524 | $IMGPATH/$LIBDIR/libssl* \ | |
525 | $IMGPATH/$LIBDIR/libcom_err* \ | |
526 | $IMGPATH/$LIBDIR/libe2p* \ | |
527 | $IMGPATH/$LIBDIR/libuuid* \ | |
528 | $IMGPATH/usr/$LIBDIR/libwrap*.so* \ | |
529 | $IMGPATH/usr/X11R6/$LIBDIR/libX11.so* \ | |
530 | $IMGPATH/usr/X11R6/$LIBDIR/libXmuu.so* \ | |
531 | $IMGPATH/usr/X11R6/$LIBDIR/libXext.so* \ | |
532 | $IMGPATH/usr/X11R6/$LIBDIR/libXt.so* \ | |
533 | $IMGPATH/usr/X11R6/$LIBDIR/libSM.so* \ | |
534 | $IMGPATH/usr/X11R6/$LIBDIR/libICE.so* ; do | |
535 | if [ -e $lib ]; then cp -df $lib $MBD_DIR/$LIBDIR/ ; fi | |
536 | done | |
537 | ||
538 | mkdir -p $MBD_DIR/usr/$LIBDIR | |
539 | for lib in $IMGPATH/usr/$LIBDIR/libkrb5.so* \ | |
540 | $IMGPATH/usr/$LIBDIR/libkrb5support.so* \ | |
541 | $IMGPATH/usr/$LIBDIR/libgssapi_krb5.so* \ | |
542 | $IMGPATH/usr/$LIBDIR/libk5crypto.so* \ | |
543 | $IMGPATH/usr/$LIBDIR/libcom_err.so* ; do | |
544 | if [ -e $lib ]; then cp -df $lib $MBD_DIR/usr/$LIBDIR/ ; fi | |
545 | done | |
546 | } | |
547 | ||
548 | makeinitrd() { | |
549 | EXTRAINITRDPATH="" | |
550 | PCMCIA="" | |
551 | INITRDSIZE="" | |
552 | KEEP="" | |
553 | PADSIZE="" | |
554 | LOADERBIN="" | |
555 | INITRDMODULES="" | |
556 | MODULEBALLNAME="modules.cgz" | |
557 | MYLANGTABLE=$LANGTABLE | |
558 | MYLOADERTR=loader.tr | |
559 | BOGL=yes | |
560 | while [ x$(echo $1 | cut -c1-2) = x"--" ]; do | |
561 | if [ $1 = "--initrdto" ]; then | |
562 | EXTRAINITRDPATH=$2 | |
563 | shift; shift | |
564 | continue | |
565 | elif [ $1 = "--pcmcia" ]; then | |
566 | PCMCIA=yes | |
567 | shift | |
568 | continue | |
569 | elif [ $1 = "--keep" ]; then | |
570 | KEEP=yes | |
571 | shift | |
572 | continue | |
573 | elif [ $1 = "--initrdsize" ]; then | |
574 | INITRDSIZE=$2 | |
575 | shift; shift | |
576 | continue | |
577 | elif [ $1 = "--loaderbin" ]; then | |
578 | LOADERBIN=$2 | |
579 | shift; shift | |
580 | continue | |
581 | elif [ $1 = "--modules" ]; then | |
582 | INITRDMODULES=$2 | |
583 | shift; shift | |
584 | continue | |
585 | elif [ $1 = "--moduleballname" ]; then | |
586 | MODULEBALLNAME=$2 | |
587 | shift; shift | |
588 | continue | |
589 | elif [ $1 = "--nobogl" ]; then | |
590 | BOGL="" | |
591 | shift | |
592 | continue | |
593 | fi | |
594 | echo "Unknown option passed to makeinitrd" | |
595 | exit 1 | |
596 | done | |
597 | if [ -z "$LOADERBIN" ]; then | |
598 | echo "no loader binary specified!" >&2 | |
599 | exit 1 | |
600 | fi | |
601 | if [ -z "$INITRDMODULES" ]; then | |
602 | echo "warning: no loader modules specified!" >&2 | |
603 | fi | |
604 | if [ -z "$INITRDSIZE" ]; then | |
605 | echo "I don't know how big to make the initrd image!" >&2 | |
606 | exit 1 | |
607 | fi | |
608 | ||
609 | MBD_DIR=/tmp/makebootdisk.dir.$$ | |
610 | MBD_FSIMAGE=/tmp/makebootdisk.initrdimage.$$ | |
611 | MBD_BOOTTREE=/tmp/makebootdisk.tree.$$ | |
612 | ||
613 | rm -rf $MBD_DIR MBD_FSIMAGE | |
614 | mkdir -p $MBD_DIR/modules | |
615 | mkdir -p $MBD_DIR/sbin | |
616 | mkdir -p $MBD_DIR/dev | |
617 | mkdir -p $MBD_DIR/etc | |
618 | mkdir -p $MBD_DIR/proc | |
619 | mkdir -p $MBD_DIR/selinux | |
620 | mkdir -p $MBD_DIR/sys | |
621 | mkdir -p $MBD_DIR/tmp | |
622 | mkdir -p $MBD_DIR/etc/terminfo/{a,b,d,l,s,v,x} | |
623 | mkdir -p $MBD_DIR/var/state | |
624 | mkdir -p $MBD_DIR/var/run | |
625 | mkdir -p $MBD_DIR/var/lock/rpm | |
626 | ||
627 | if [ "$BUILDARCH" = "ppc" -o "$BUILDARCH" = "ppc64" ]; then | |
628 | mkdir -p $MBD_DIR/dev/iseries | |
629 | fi | |
630 | ||
631 | if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then | |
632 | mkdir -m 111 -p $MBD_DIR/var/empty/sshd | |
633 | mkdir -p $MBD_DIR/etc/{pam.d,security} | |
634 | mkdir -p $MBD_DIR/$LIBDIR/security | |
635 | cp $IMGPATH/$LIBDIR/libpam_misc.so.0.* $MBD_DIR/$LIBDIR/libpam_misc.so.0 | |
636 | ln -s /tmp $MBD_DIR/var/state/xkb | |
637 | cp $IMGPATH/usr/X11R6/bin/xauth $MBD_DIR/sbin/xauth | |
638 | cp $IMGPATH/usr/sbin/cmsfs* $MBD_DIR/sbin/ | |
639 | fi | |
640 | ||
641 | if [ -n "$INITRDMODULES" ]; then | |
642 | MODSET=`expandModuleSet "$INITRDMODULES"` | |
643 | makemoduleball --name $MODULEBALLNAME $MBD_DIR/modules "$MODSET" | |
644 | fi | |
645 | ||
646 | cat > $MBD_DIR/etc/passwd << EOF | |
647 | root::0:0:root:/:/bin/bash | |
648 | EOF | |
649 | ||
650 | # set up the arch bits | |
651 | echo $arch > $MBD_DIR/etc/arch | |
652 | ||
653 | install -s -m 755 $LOADERBINDIR/$LOADERBIN $MBD_DIR/sbin/loader | |
654 | if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then | |
655 | install -s -m 755 $LOADERBINDIR/init $MBD_DIR/sbin | |
656 | ln -s ./init $MBD_DIR/sbin/shutdown | |
657 | ln -s ./init $MBD_DIR/sbin/halt | |
658 | ln -s ./init $MBD_DIR/sbin/poweroff | |
659 | else | |
660 | install -s -m 755 $LOADERBINDIR/shutdown $MBD_DIR/sbin/shutdown | |
661 | install -m 755 $IMGPATH/usr/lib/anaconda-runtime/loader/linuxrc.s390 $MBD_DIR/sbin/init | |
662 | install -m 755 $IMGPATH/usr/sbin/dasdfmt $MBD_DIR/sbin/dasdfmt | |
663 | fi | |
664 | ||
665 | if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then | |
666 | install -m 644 $KEYMAPS $MBD_DIR/etc/keymaps.gz | |
667 | install -m 644 $SCREENFONT $MBD_DIR/etc/screenfont.gz | |
668 | fi | |
669 | install -m 644 $MYLANGTABLE $MBD_DIR/etc/lang-table | |
670 | ||
671 | install -m 644 $LOADERBINDIR/$MYLOADERTR $MBD_DIR/etc/loader.tr | |
672 | for i in a/ansi d/dumb l/linux s/screen v/vt100 v/vt100-nav v/vt102 x/xterm x/xterm-color b/bterm g/gnome ; do | |
673 | [ -f $IMGPATH/usr/share/terminfo/$i ] && \ | |
674 | install -m 644 $IMGPATH/usr/share/terminfo/$i $MBD_DIR/etc/terminfo/$i | |
675 | done | |
676 | ||
677 | makeproductfile $MBD_DIR | |
678 | ||
679 | if [ -n "$BOGL" ]; then | |
680 | install -m 644 $LOADERBINDIR/font.bgf.gz $MBD_DIR/etc | |
681 | fi | |
682 | ||
683 | if [ -n "$PCMCIA" ]; then | |
684 | mkdir -p $MBD_BOOTTREE/etc | |
685 | cp -a $KERNELROOT/etc/pcmcia $MBD_DIR/etc | |
686 | fi | |
687 | ||
688 | for n in insmod rmmod modprobe; do | |
689 | ln -s loader $MBD_DIR/sbin/$n | |
690 | done | |
691 | ||
692 | ln -s /usr/bin/sh $MBD_DIR/sbin/sh | |
693 | ln -s /sbin/init $MBD_DIR/init | |
694 | ln -s /proc/mounts $MBD_DIR/etc/mtab | |
695 | ln -s sbin $MBD_DIR/bin | |
696 | ||
697 | # s390/s390x need sshd/telnet setup | |
698 | if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then | |
699 | setupShellEnvironment | |
700 | fi | |
701 | ||
702 | cat > $MBD_DIR/.profile <<EOF | |
703 | PATH=/bin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/mnt/sysimage/sbin:/mnt/sysimage/usr/sbin:/mnt/sysimage/bin:/mnt/sysimage/usr/bin | |
704 | export PATH | |
705 | EOF | |
706 | ||
707 | rm -f $MBD_FSIMAGE | |
708 | (cd $MBD_DIR; find . |cpio --quiet -c -o) |gzip -9 > $MBD_FSIMAGE | |
709 | ||
710 | size=$(du $MBD_FSIMAGE | awk '{ print $1 }') | |
711 | ||
712 | echo "Wrote $MBD_FSIMAGE (${size}k compressed)" | |
713 | ||
714 | if [ -n "$EXTRAINITRDPATH" ]; then | |
715 | mkdir -p `dirname $EXTRAINITRDPATH` | |
716 | cp -a $MBD_FSIMAGE $EXTRAINITRDPATH | |
717 | fi | |
718 | ||
719 | if [ -z "$KEEP" ]; then | |
720 | rm -rf $MBD_FSIMAGE $MBD_BOOTTREE | |
721 | fi | |
722 | } | |
723 | ||
724 | makebootdisk() { | |
725 | BOOTDISKSIZE="" | |
726 | EXTRAKERNELPATH="" | |
727 | INITRDFLAGS="" | |
728 | MBD_FILENAME="" | |
729 | INITRDFILE="" | |
730 | while [ x$(echo $1 | cut -c1-2) = x"--" ]; do | |
731 | if [ $1 = "--bootdisksize" ]; then | |
732 | BOOTDISKSIZE=$2 | |
733 | shift; shift | |
734 | continue | |
735 | elif [ $1 = "--kernelto" ]; then | |
736 | EXTRAKERNELPATH=$2 | |
737 | shift; shift | |
738 | continue | |
739 | elif [ $1 = "--initrdflags" ]; then | |
740 | INITRDFLAGS=$2 | |
741 | shift; shift | |
742 | continue | |
743 | elif [ $1 = "--initrd" ]; then | |
744 | INITRDFILE=$2 | |
745 | shift; shift | |
746 | continue | |
747 | elif [ $1 = "--imagename" ]; then | |
748 | MBD_FILENAME=$IMAGEPATH/$2 | |
749 | shift; shift | |
750 | continue | |
751 | fi | |
752 | echo "Unknown option passed to makebootdisk" | |
753 | exit 1 | |
754 | done | |
755 | ||
756 | if [ -z "$MBD_FILENAME" ]; then | |
757 | echo "No imagename passed" | |
758 | exit 1 | |
759 | fi | |
760 | ||
761 | if [ -n "$INITRDFILE" ]; then | |
762 | MBD_FSIMAGE="$INITRDFILE" | |
763 | elif [ -n "$INITRDFLAGS" ]; then | |
764 | eval makeinitrd --keep $INITRDFLAGS | |
765 | fi | |
766 | ||
767 | mkdir -p $MBD_BOOTTREE | |
768 | ||
769 | # provided by the mk-image.$ARCH file | |
770 | prepareBootImage | |
771 | ||
772 | left=$(df $MBD_BOOTTREE | tail +2) | |
773 | left=$(echo $left | awk '{print $4'}) | |
774 | ||
775 | umount $MBD_BOOTTREE | |
776 | ||
777 | if [ -n "$EXTRAKERNELPATH" ]; then | |
778 | mkdir -p `dirname $EXTRAKERNELPATH` | |
779 | cp -f $KERNELROOT/$KERNELDIR/${KERNELNAME}-* $EXTRAKERNELPATH | |
780 | fi | |
781 | ||
782 | mkdir -p `dirname $MBD_FILENAME` | |
783 | rm -f $MBD_FILENAME | |
784 | mv -f $MBD_TMPIMAGE $MBD_FILENAME | |
785 | rm -rf $MBD_TMPIMAGE $MBD_MNTPOINT $MBD_BOOTTREE | |
786 | if [ -z "$INITRDFILE" ]; then | |
787 | rm -f $MBD_FSIMAGE | |
788 | fi | |
789 | ||
790 | echo "Wrote $MBD_FILENAME (${left}k free)" | |
791 | } | |
792 | ||
793 | makeinstimage () { | |
794 | imagename=$1 | |
795 | modlist=$(expandModuleSet "$2") | |
796 | tmpdir=/tmp/instimage.dir.$$ | |
797 | ||
798 | rm -rf $tmpimage $tmpdir | |
799 | mkdir -p $mntpoint $tmpdir | |
800 | ||
801 | mkdir -p $tmpdir | |
802 | (cd $INSTIMGTEMPLATE; find . | cpio --quiet -p $tmpdir) | |
803 | if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then | |
804 | mkdir -p $KERNELROOT/lib/modules/misc | |
805 | find $KERNELROOT/lib/modules/*/kernel/drivers/s390/ -name "*.ko" \ | |
806 | -exec cp -f {} $KERNELROOT/lib/modules/misc \; | |
807 | fi | |
808 | makemoduleball $tmpdir/modules "$modlist" | |
809 | makeproductfile $tmpdir | |
810 | ||
811 | echo "Running mkcramfs $CRAMBS $tmpdir $INSTIMGPATH/${imagename}2.img" | |
812 | mkcramfs $CRAMBS $tmpdir /tmp/${imagename}2.img.$$ | |
813 | cp /tmp/${imagename}2.img.$$ $INSTIMGPATH/${imagename}2.img | |
814 | size=$(ls -l $INSTIMGPATH/${imagename}2.img | awk '{print $5}') | |
815 | size=$(expr $size / 1024) | |
816 | echo "Wrote $INSTIMGPATH/${imagename}2.img (${size}k)..." | |
817 | rm -rf $tmpdir | |
818 | } | |
819 | ||
820 | findloopdevice () { | |
821 | if [ -z "$1" ]; then | |
822 | echo "usage: findloopdevice image" | |
823 | exit 1 | |
824 | fi | |
825 | ||
826 | for devnum in 0 1 2 3 4 5 6 7 8; do | |
827 | if losetup /dev/loop$devnum $1 2>/dev/null ; then break; fi | |
828 | done | |
829 | echo /dev/loop$devnum | |
830 | } | |
831 | ||
832 | makemainimage () { | |
833 | imagename=$1 | |
834 | type=$2 | |
835 | mmi_tmpimage=/tmp/instimage.img.$$ | |
836 | mmi_mntpoint=/tmp/instimage.mnt.$$ | |
837 | ||
838 | rm -rf $mmi_tmpimage $mmi_mntpoint | |
839 | mkdir $mmi_mntpoint | |
840 | ||
841 | if [ $type = "ext2" ]; then | |
842 | SIZE=$(du -sk $IMGPATH | awk '{ print int($1 * 1.1) }') | |
843 | if [ -d $IMGPATH/usr/lib/anaconda-runtime ]; then | |
844 | ERROR=$(du -sk $IMGPATH/usr/lib/anaconda-runtime | awk '{ print $1 }') | |
845 | SIZE=$(expr $SIZE - $ERROR) | |
846 | fi | |
847 | dd if=/dev/zero bs=1k count=${SIZE} of=$mmi_tmpimage 2>/dev/null | |
848 | mke2fs -q -F $mmi_tmpimage > /dev/null | |
849 | tune2fs -c0 -i0 $mmi_tmpimage >/dev/null | |
850 | mount -o loop $mmi_tmpimage $mmi_mntpoint | |
851 | ||
852 | (cd $IMGPATH; find . | fgrep -v "./usr/lib/anaconda-runtime" | | |
853 | cpio -H crc -o) | (cd $mmi_mntpoint; cpio -iumd) | |
854 | makeproductfile $mmi_mntpoint | |
855 | umount $mmi_mntpoint | |
856 | rmdir $mmi_mntpoint | |
857 | elif [ $type = "cramfs" ]; then | |
858 | makeproductfile $IMGPATH | |
859 | echo "Running mkcramfs $CRAMBS $IMGPATH $mmi_tmpimage" | |
860 | mkcramfs $CRAMBS $IMGPATH $mmi_tmpimage | |
861 | SIZE=$(expr `cat $mmi_tmpimage | wc -c` / 1024) | |
862 | fi | |
863 | ||
864 | cp $mmi_tmpimage $INSTIMGPATH/${imagename}.img | |
865 | chmod 644 $INSTIMGPATH/${imagename}.img | |
866 | ||
867 | echo "Wrote $INSTIMGPATH/${imagename}.img (${SIZE}k)" | |
868 | ||
869 | rm $mmi_tmpimage | |
870 | } | |
871 | ||
872 | makedriverdisk () { | |
873 | PADSIZE="" | |
874 | ||
875 | while [ x$(echo $1 | cut -c1-2) = x"--" ]; do | |
876 | if [ $1 = "--padsize" ]; then | |
877 | PADSIZE=$2 | |
878 | shift; shift | |
879 | continue | |
880 | fi | |
881 | ||
882 | echo "Unknown option passed to makedriverdisk" | |
883 | exit 1 | |
884 | done | |
885 | ||
886 | modlabel=$1 | |
887 | diskname=$2 | |
888 | modlist=$(expandModuleSet "$3") | |
889 | diskpath=/tmp/makedriverdisk.$$ | |
890 | ||
891 | rm -rf $diskpath | |
892 | mkdir -p $diskpath | |
893 | ||
894 | makemoduleball --dd "$modlabel" $diskpath "$modlist" | |
895 | ||
896 | size=$(expr 60 + $(du -sk $diskpath | awk '{print $1}')) | |
897 | if [ $size -lt 57 ]; then | |
898 | size=64 | |
899 | fi | |
900 | ||
901 | dd if=/dev/zero of=/tmp/$diskname.img bs=1k count=$size 2> /dev/null | |
902 | /sbin/mke2fs -q -F -i 4096 /tmp/$diskname.img > /dev/null 2>/dev/null | |
903 | /sbin/tune2fs -c0 -i0 /tmp/$diskname.img >/dev/null | |
904 | mkdir -p /tmp/mkdd.$$ | |
905 | mount -t ext2 -o loop /tmp/$diskname.img /tmp/mkdd.$$ | |
906 | rmdir /tmp/mkdd.$$/lost+found | |
907 | (cd $diskpath; tar cSpf - .) | (cd /tmp/mkdd.$$; tar xSpf -) | |
908 | DIE="" | |
909 | diff -upr $diskpath /tmp/mkdd.$$ > /dev/null 2>&1 | |
910 | if [ $? != 0 ]; then | |
911 | echo copy to disk image failed | |
912 | ls -l /tmp/mkdd.$$ | |
913 | echo "disk size: $size" | |
914 | ls -l $diskpath | |
915 | DIE=1 | |
916 | fi | |
917 | umount /tmp/mkdd.$$ | |
918 | rm -rf /tmp/mkdd.$$ | |
919 | ||
920 | if [ -n "$DIE" ]; then | |
921 | kill -9 $$ | |
922 | fi | |
923 | ||
924 | cp /tmp/${diskname}.img $IMAGEPATH/${diskname}.img | |
925 | rm /tmp/${diskname}.img | |
926 | rm -rf $diskpath | |
927 | ||
928 | size=$(ls -l $IMAGEPATH/${diskname}.img | awk '{ print $5 }') | |
929 | size=$(expr $size / 1024) | |
930 | ||
931 | echo "Wrote $IMAGEPATH/${diskname}.img (${size}k)" | |
932 | echo "${diskname}.img - ${modlabel}" >> $IMAGEPATH/README | |
933 | ||
934 | if [ -n "$PADSIZE" ]; then | |
935 | padfile $IMAGEPATH/${diskname}.img $PADSIZE | |
936 | fi | |
937 | } | |
938 | ||
939 | # source the architecture specific mk-images file so we can call functions | |
940 | # in it | |
941 | if [ ${BUILDARCH} = s390x ]; then | |
942 | # FIXME: this is a bad hack for s390, but better than copying for now | |
943 | source $TOPDIR/mk-images.s390 | |
944 | elif [ ${BUILDARCH} = i686 ]; then | |
945 | source $TOPDIR/mk-images.i386 | |
946 | else | |
947 | source $TOPDIR/mk-images.${BUILDARCH} | |
948 | fi | |
949 | ||
950 | # Find the kernel, unpack it, and verify it | |
951 | vertag="BOOT" | |
952 | if [ "$BUILDARCH" = "ppc" -o "$BUILDARCH" = "ppc64" ]; then | |
953 | arches="ppc64pseries ppc64 ppc64iseries ppc" | |
954 | elif [ "$BUILDARCH" = "i686" ]; then | |
955 | arches="i386 i586 i686" | |
956 | else | |
957 | arches="$BUILDARCH" | |
958 | fi | |
959 | foundakernel="" | |
960 | for KERNELARCH in $arches; do | |
961 | for kernelvers in $vertag; do | |
962 | kpackage=$($LATEST $KERNELPATH kernel-$kernelvers) | |
963 | if [ ! -f "$kpackage" ]; then | |
964 | echo "kernel-$kernelvers does not exist for $KERNELARCH -- using kernel package" | |
965 | kpackage=$($LATEST $KERNELPATH kernel) | |
966 | kernelvers="" | |
967 | fi | |
968 | ||
969 | if [ "$KERNELARCH" = "i586" -a ! -f "$kpackage" ]; then | |
970 | echo "No i586 kernel, trying i686..." | |
971 | KERNELARCH="i686" | |
972 | kpackage=$($LATEST $KERNELPATH kernel) | |
973 | fi | |
974 | ||
975 | if [ ! -f "$kpackage" ]; then | |
976 | echo "kernel doesn't exist for $KERNELARCH. skipping arch" | |
977 | continue | |
978 | fi | |
979 | ||
980 | KERNELROOT=$KERNELBASE/$KERNELARCH | |
981 | mkdir -p $KERNELROOT | |
982 | ||
983 | foundakernel="yes" | |
984 | ||
985 | ppackage=$($LATEST $KERNELPATH hwdata) | |
986 | if [ ! -f "$ppackage" ]; then | |
987 | ppackage="" | |
988 | fi | |
989 | ||
990 | version=$(rpm --nodigest --nosignature --qf '%{VERSION}-%{RELEASE}' -qp $kpackage)${kernelvers} | |
991 | arch=$(rpm --nodigest --nosignature --qf '%{ARCH}\n' -qp $kpackage) | |
992 | echo "unpacking $kpackage.$arch" | |
993 | ||
994 | rpm2cpio $kpackage | (cd $KERNELROOT; cpio --quiet -iumd) | |
995 | # mv -f $KERNELROOT/usr/lib/bootdisk/lib $KERNELROOT/ | |
996 | # mv -f $KERNELROOT/usr/lib/bootdisk/boot $KERNELROOT/ | |
997 | # rm -rf $KERNELROOT/usr/lib/bootdisk | |
998 | mkdir -p $KERNELROOT/lib/modules/misc | |
999 | for kaddpackage in pcmcia | |
1000 | do | |
1001 | thepackage=$($LATEST $KERNELPATH kernel-${kaddpackage}) | |
1002 | if [ -f $thepackage ]; then | |
1003 | echo "unpacking $thepackage.$arch" | |
1004 | rpm2cpio $thepackage | (cd $KERNELROOT; cpio --quiet -iumd) | |
1005 | fi | |
1006 | done | |
1007 | if [ ! -z $ppackage ]; then | |
1008 | rpm2cpio $ppackage | (cd $KERNELROOT; cpio --quiet -iumd etc/pcmcia/* ./etc/pcmcia/*) | |
1009 | fi | |
1010 | ||
1011 | if [ ! -d "$KERNELROOT/lib/modules/$version" ]; then | |
1012 | echo "$KERNELROOT/lib/modules/$version is not a valid modules directory" 2>&1 | |
1013 | exit 1 | |
1014 | fi | |
1015 | ||
1016 | if [ ! -f "$KERNELROOT/$KERNELDIR/${KERNELNAME}-$version" ]; then | |
1017 | echo "$KERNELROOT/$KERNELDIR/${KERNELNAME}-$version does not exist" | |
1018 | exit 1 | |
1019 | fi | |
1020 | ||
1021 | if [ -f $KERNELROOT/etc/pcmcia/config ]; then | |
1022 | # This gets everything mentioned in /etc/pcmcia/config. We probably | |
1023 | # want to do some module-info stuff here too | |
1024 | PCMCIAMODULES=$((perl -e 'while (<>) { s/^.*class.*(network|scsi|ide).*module +"// || next; s/[" ]//g; s/,/\n/g; print }' $KERNELROOT/etc/pcmcia/config | sed 's/\.ko//g') | sort -u) | |
1025 | fi | |
1026 | ||
1027 | allmods=$(find $KERNELROOT/lib/modules/$version -name *.ko) | |
1028 | ||
1029 | rundepmod "$allmods" $MODDEPS | |
1030 | find $KERNELROOT/lib/modules/$version > $CACHE | |
1031 | ||
1032 | # make the boot images | |
1033 | makeBootImages | |
1034 | done | |
1035 | done | |
1036 | ||
1037 | # do some clean up before making the cramfs of the second stage | |
1038 | rm -rf $INSTIMGTEMPLATE/usr/lib/anaconda-runtime $INSTIMGTEMPLATE/usr/lib/syslinux $IMGPATH/usr/lib/syslinux | |
1039 | ||
1040 | if [ -n "$foundakernel" ]; then | |
1041 | # make the second stage | |
1042 | find $KERNELBASE/*/lib/modules/ > $CACHE | |
1043 | makeSecondStage | |
1044 | rm -rf $KERNELBASE | |
1045 | fi | |
1046 | ||
1047 | cd $TOPDIR |