]> git.pld-linux.org Git - packages/anaconda.git/blame - anaconda-mk-images
- merge deps from FC, part2
[packages/anaconda.git] / anaconda-mk-images
CommitLineData
3e6a3a30
PZ
1#!/bin/bash
2LANG=C
3
4PATH=$PATH:/sbin:/usr/sbin
5IMAGEUUID=$(date +%Y%m%d%H%M)
6
7usage () {
8 echo "usage: mk-images <pkgsrc> <toplevel> <template> <imgdir> <buildarch> <productname> <version> [<productpath>]"
9 exit 0
10}
11
12DEBUG=""
13if [ "$1" == "--debug" ]; then
14 DEBUG="--debug"
15 shift
16fi
17
18if [ -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
20PRODUCT=$6
21VERSION=$7
22PRODUCTPATH=$8
23if [ -n "$9" ]; then
24 BUGURL=$9
25fi
26
27TOPDIR=$(echo $0 | sed "s,/[^/]*$,,")
28if [ $TOPDIR = $0 ]; then
29 $TOPDIR="."
30fi
31
32TOPDIR=$(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
157findPackage() {
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
175findmodule () {
176 if [ ! -f $CACHE ]; then
177 find $KERNELROOT/lib/modules/ > $CACHE
178 fi
179
180 grep "/$1\.ko" $CACHE
181}
182
183rundepmod () {
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
195getmoddeps () {
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
206padfile () {
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
215intcopymodules () {
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...
238resdeps () {
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
258expandModuleSet() {
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
285makemoduleball() {
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
349makemainmodules() {
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
369makeproductfile() {
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
382setupShellEnvironment() {
383 # setup password/group entries
384 cat > $MBD_DIR/etc/passwd << EOF
385root::0:0::/:/sbin/loader
386debug::0:0:debug shell:/:/bin/bash
387sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
388EOF
389 cat > $MBD_DIR/etc/group << EOF
390root:x:0:root
391tty:x:5:
392EOF
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
405auth required pam_env.so
406auth sufficient pam_unix.so likeauth nullok
407auth required pam_deny.so
408account required pam_unix.so
409password sufficient pam_unix.so nullok use_authtok md5 shadow
410password required pam_deny.so
411session required pam_limits.so
412session required pam_unix.so
413EOF
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
423service 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}
433EOF
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
456Port 22
457HostKey /etc/ssh/ssh_host_key
458HostKey /etc/ssh/ssh_host_rsa_key
459HostKey /etc/ssh/ssh_host_dsa_key
460PermitRootLogin yes
461IgnoreRhosts yes
462StrictModes yes
463X11Forwarding yes
464X11DisplayOffset 10
465PrintMotd yes
466XAuthLocation /sbin/xauth
467KeepAlive yes
468SyslogFacility AUTHPRIV
469RSAAuthentication yes
470PasswordAuthentication yes
471PermitEmptyPasswords yes
472PermitUserEnvironment yes
473EOF
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
548makeinitrd() {
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
648EOF
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
702cat > $MBD_DIR/.profile <<EOF
703PATH=/bin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/mnt/sysimage/sbin:/mnt/sysimage/usr/sbin:/mnt/sysimage/bin:/mnt/sysimage/usr/bin
704export PATH
705EOF
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
724makebootdisk() {
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
793makeinstimage () {
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
820findloopdevice () {
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
832makemainimage () {
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
872makedriverdisk () {
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
941if [ ${BUILDARCH} = s390x ]; then
942 # FIXME: this is a bad hack for s390, but better than copying for now
943 source $TOPDIR/mk-images.s390
944elif [ ${BUILDARCH} = i686 ]; then
945 source $TOPDIR/mk-images.i386
946else
947 source $TOPDIR/mk-images.${BUILDARCH}
948fi
949
950# Find the kernel, unpack it, and verify it
951vertag="BOOT"
952if [ "$BUILDARCH" = "ppc" -o "$BUILDARCH" = "ppc64" ]; then
953 arches="ppc64pseries ppc64 ppc64iseries ppc"
954elif [ "$BUILDARCH" = "i686" ]; then
955 arches="i386 i586 i686"
956else
957 arches="$BUILDARCH"
958fi
959foundakernel=""
960for 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
1035done
1036
1037# do some clean up before making the cramfs of the second stage
1038rm -rf $INSTIMGTEMPLATE/usr/lib/anaconda-runtime $INSTIMGTEMPLATE/usr/lib/syslinux $IMGPATH/usr/lib/syslinux
1039
1040if [ -n "$foundakernel" ]; then
1041 # make the second stage
1042 find $KERNELBASE/*/lib/modules/ > $CACHE
1043 makeSecondStage
1044 rm -rf $KERNELBASE
1045fi
1046
1047cd $TOPDIR
This page took 0.173674 seconds and 4 git commands to generate.