4 PATH=$PATH:/sbin:/usr/sbin
5 IMAGEUUID=$(date +%Y%m%d%H%M)
8 echo "usage: mk-images <pkgsrc> <toplevel> <template> <imgdir> <buildarch> <productname> <version> [<productpath>]"
13 if [ "$1" == "--debug" ]; then
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
27 TOPDIR=$(echo $0 | sed "s,/[^/]*$,,")
28 if [ $TOPDIR = $0 ]; then
32 TOPDIR=$(cd $TOPDIR; pwd)
34 # Set, verify, and create paths
37 IMAGEPATH=$TOPDESTPATH/images
38 FULLMODPATH=/tmp/instimagemods.$$
39 FINALFULLMODPATH=$4/modules
40 INSTIMGPATH=$TOPDESTPATH/$PRODUCTPATH/base
43 KERNELBASE=/tmp/updboot.kernel.$$
44 MODDEPS=$KERNELBASE/moddeps
45 MODMAPS=$KERNELBASE/modules.pcimap
46 USBMAPS=$KERNELBASE/modules.usbmap
51 if [ "$BUILDARCH" = "ia64" ]; then
52 KERNELDIR="/boot/efi/EFI/redhat"
57 if [ "$BUILDARCH" = "sparc64" ]; then
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"
73 if [ ! -d "$1" ]; then
74 LATEST="rsh porkchop latest --arch $BUILDARCH"
79 if [ $BUILDARCH = x86_64 -o $BUILDARCH = s390x ]; then
87 rm -rf $FINALFULLMODPATH
91 mkdir -p $FINALFULLMODPATH
96 if [ $FONTARCH = i686 ]
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
122 REQUIREMENTS="$TRIMPCITABLE $TRIMMODMAP $TRIMPCIIDS $PCITABLE $PCIIDS $GETMODDEPS $MODINFO
123 $FILTERMODDEPS $LANGTABLE $GETKEYMAPS $TRIMUSBMAP"
126 for n in $REQUIREMENTS; do
128 echo "$n doesn't exist"
133 for n in $BOOTDISKDIR; do
135 echo "$n doesn't exist"
140 if [ -n "$dieLater" ]; then exit 1; fi
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
148 echo "Running: $GETKEYMAPS $BUILDARCH $KEYMAPS $IMGPATH"
149 $GETKEYMAPS $BUILDARCH $KEYMAPS $IMGPATH
151 echo "Unable to create keymaps and thus can't create initrd."
161 for n in $dir/$name*{$KERNELARCH,noarch}.rpm; do
162 thisName=$(rpm --nodigest --nosignature --qf '%{NAME}' -qp $n)
163 if [ -z "$thisName" ]; then
166 if [ $thisName = $name ]; then
172 echo "cannot find package $name in path $dir" >&2
176 if [ ! -f $CACHE ]; then
177 find $KERNELROOT/lib/modules/ > $CACHE
180 grep "/$1\.ko" $CACHE
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
192 cat $KERNELROOT/lib/modules/$version/modules.dep | $FILTERMODDEPS > $final
199 for mod in $what ; do
200 mod=$(echo $mod | sed 's/\.ko */|^/g;s/\.ko$//;s/.*\///')
201 egrep $mod $MODDEPS >> $final.foo
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
221 [ -n "$DEBUG" ] && echo "Module $n not found in kernel rpm" >&2
223 echo $n >> $MODULESUSED
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
237 # This loops to make sure it resolves dependencies of dependencies of...
244 while [ $before != $after ]; do
245 before=`echo $items | wc -c`
247 if [ $? != "0" ] ; then
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`
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-)
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)"
276 rm -f /tmp/emsAll.$$ /tmp/emsUsed.$$
287 MMB_MODINFO="module-info"
288 MMB_NAME="modules.cgz"
290 while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
291 if [ "$1" = "--dd" ]; then
294 MMB_MODINFO="modinfo"
296 elif [ "$1" = "--name" ]; then
301 echo "unknown option passed to $0"
306 MMB_MODULESET=$(resdeps $2)
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 \
311 mkdir -p $MMB_DIR/modules
313 MMB_MODULESET=$(intcopymodules "$MMB_MODULESET" $MMB_DIR/modules)
315 pushd $MMB_DIR/modules > /dev/null
317 $MODLIST --modinfo-file $MODINFO --ignore-missing --modinfo \
318 $MMB_MODULESET > ../$MMB_MODINFO
320 getmoddeps "$(find . -name *.ko)" ../modules.dep
322 # create the pcitable
323 $TRIMPCITABLE ignore $(find . -name *.ko -exec basename {} \;) < $PCITABLE > ../pcitable
325 # create the modules.pcimap
326 $TRIMMODMAP $PCITABLE $(find . -name *.ko -exec basename {} \;) < $MODMAPS > ../modules.pcimap
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
335 awk '!/^(\t\t|#)/ { print ;if ($0 == "ffff Illegal Vendor ID") nextfile; }' < $PCIIDS | \
336 $TRIMPCIIDS ../pcitable ../modules.pcimap > ../pci.ids
338 if [ -n "$MMB_DD" ]; then
339 echo $MMB_DD > $MMB_DIR/rhdd
342 find . -type f | cpio --quiet -H crc -o | gzip -9 > ../$MMB_NAME
350 modlist=`expandModuleSet "$1"`
353 extraargs="--name $2"
357 rm -rf $FINALFULLMODPATH
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 \;
364 makemoduleball $extraargs $FULLMODPATH "$modlist"
365 cp -ar $FULLMODPATH $FINALFULLMODPATH
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
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
389 cat > $MBD_DIR/etc/group << 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
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
402 cp -f $IMGPATH/etc/pam.d/other $MBD_DIR/etc/pam.d
403 cat > $MBD_DIR/etc/pam.d/login << EOF
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
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
417 cp -f $IMGPATH/etc/security/{limits.conf,pam_env.conf} $MBD_DIR/etc/security/
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
429 server = /sbin/in.telnetd
430 log_on_failure += USERID
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
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
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
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; )
455 cat > $MBD_DIR/etc/ssh/sshd_config <<EOF
457 HostKey /etc/ssh/ssh_host_key
458 HostKey /etc/ssh/ssh_host_rsa_key
459 HostKey /etc/ssh/ssh_host_dsa_key
466 XAuthLocation /sbin/xauth
468 SyslogFacility AUTHPRIV
469 RSAAuthentication yes
470 PasswordAuthentication yes
471 PermitEmptyPasswords yes
472 PermitUserEnvironment yes
474 chmod 600 $MBD_DIR/etc/ssh/sshd_config
476 # copy in the binaries
477 cp -f $IMGPATH/bin/login $MBD_DIR/sbin/login
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
481 cp -f $IMGPATH/bin/bash $MBD_DIR/sbin/bash
482 cp -f $IMGPATH/bin/busybox $MBD_DIR/sbin/busybox
485 ln -sf bash $MBD_DIR/bin/sh
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
494 [ -n "$DEBUG" ] && echo "Overriding busybox version of $1"
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
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
556 MODULEBALLNAME="modules.cgz"
557 MYLANGTABLE=$LANGTABLE
560 while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
561 if [ $1 = "--initrdto" ]; then
565 elif [ $1 = "--pcmcia" ]; then
569 elif [ $1 = "--keep" ]; then
573 elif [ $1 = "--initrdsize" ]; then
577 elif [ $1 = "--loaderbin" ]; then
581 elif [ $1 = "--modules" ]; then
585 elif [ $1 = "--moduleballname" ]; then
589 elif [ $1 = "--nobogl" ]; then
594 echo "Unknown option passed to makeinitrd"
597 if [ -z "$LOADERBIN" ]; then
598 echo "no loader binary specified!" >&2
601 if [ -z "$INITRDMODULES" ]; then
602 echo "warning: no loader modules specified!" >&2
604 if [ -z "$INITRDSIZE" ]; then
605 echo "I don't know how big to make the initrd image!" >&2
609 MBD_DIR=/tmp/makebootdisk.dir.$$
610 MBD_FSIMAGE=/tmp/makebootdisk.initrdimage.$$
611 MBD_BOOTTREE=/tmp/makebootdisk.tree.$$
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
627 if [ "$BUILDARCH" = "ppc" -o "$BUILDARCH" = "ppc64" ]; then
628 mkdir -p $MBD_DIR/dev/iseries
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/
641 if [ -n "$INITRDMODULES" ]; then
642 MODSET=`expandModuleSet "$INITRDMODULES"`
643 makemoduleball --name $MODULEBALLNAME $MBD_DIR/modules "$MODSET"
646 cat > $MBD_DIR/etc/passwd << EOF
647 root::0:0:root:/:/bin/bash
650 # set up the arch bits
651 echo $arch > $MBD_DIR/etc/arch
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
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
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
669 install -m 644 $MYLANGTABLE $MBD_DIR/etc/lang-table
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
677 makeproductfile $MBD_DIR
679 if [ -n "$BOGL" ]; then
680 install -m 644 $LOADERBINDIR/font.bgf.gz $MBD_DIR/etc
683 if [ -n "$PCMCIA" ]; then
684 mkdir -p $MBD_BOOTTREE/etc
685 cp -a $KERNELROOT/etc/pcmcia $MBD_DIR/etc
688 for n in insmod rmmod modprobe; do
689 ln -s loader $MBD_DIR/sbin/$n
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
697 # s390/s390x need sshd/telnet setup
698 if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then
699 setupShellEnvironment
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
708 (cd $MBD_DIR; find . |cpio --quiet -c -o) |gzip -9 > $MBD_FSIMAGE
710 size=$(du $MBD_FSIMAGE | awk '{ print $1 }')
712 echo "Wrote $MBD_FSIMAGE (${size}k compressed)"
714 if [ -n "$EXTRAINITRDPATH" ]; then
715 mkdir -p `dirname $EXTRAINITRDPATH`
716 cp -a $MBD_FSIMAGE $EXTRAINITRDPATH
719 if [ -z "$KEEP" ]; then
720 rm -rf $MBD_FSIMAGE $MBD_BOOTTREE
730 while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
731 if [ $1 = "--bootdisksize" ]; then
735 elif [ $1 = "--kernelto" ]; then
739 elif [ $1 = "--initrdflags" ]; then
743 elif [ $1 = "--initrd" ]; then
747 elif [ $1 = "--imagename" ]; then
748 MBD_FILENAME=$IMAGEPATH/$2
752 echo "Unknown option passed to makebootdisk"
756 if [ -z "$MBD_FILENAME" ]; then
757 echo "No imagename passed"
761 if [ -n "$INITRDFILE" ]; then
762 MBD_FSIMAGE="$INITRDFILE"
763 elif [ -n "$INITRDFLAGS" ]; then
764 eval makeinitrd --keep $INITRDFLAGS
767 mkdir -p $MBD_BOOTTREE
769 # provided by the mk-image.$ARCH file
772 left=$(df $MBD_BOOTTREE | tail +2)
773 left=$(echo $left | awk '{print $4'})
777 if [ -n "$EXTRAKERNELPATH" ]; then
778 mkdir -p `dirname $EXTRAKERNELPATH`
779 cp -f $KERNELROOT/$KERNELDIR/${KERNELNAME}-* $EXTRAKERNELPATH
782 mkdir -p `dirname $MBD_FILENAME`
784 mv -f $MBD_TMPIMAGE $MBD_FILENAME
785 rm -rf $MBD_TMPIMAGE $MBD_MNTPOINT $MBD_BOOTTREE
786 if [ -z "$INITRDFILE" ]; then
790 echo "Wrote $MBD_FILENAME (${left}k free)"
795 modlist=$(expandModuleSet "$2")
796 tmpdir=/tmp/instimage.dir.$$
798 rm -rf $tmpimage $tmpdir
799 mkdir -p $mntpoint $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 \;
808 makemoduleball $tmpdir/modules "$modlist"
809 makeproductfile $tmpdir
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)..."
822 echo "usage: findloopdevice image"
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
829 echo /dev/loop$devnum
835 mmi_tmpimage=/tmp/instimage.img.$$
836 mmi_mntpoint=/tmp/instimage.mnt.$$
838 rm -rf $mmi_tmpimage $mmi_mntpoint
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)
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
852 (cd $IMGPATH; find . | fgrep -v "./usr/lib/anaconda-runtime" |
853 cpio -H crc -o) | (cd $mmi_mntpoint; cpio -iumd)
854 makeproductfile $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)
864 cp $mmi_tmpimage $INSTIMGPATH/${imagename}.img
865 chmod 644 $INSTIMGPATH/${imagename}.img
867 echo "Wrote $INSTIMGPATH/${imagename}.img (${SIZE}k)"
875 while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
876 if [ $1 = "--padsize" ]; then
882 echo "Unknown option passed to makedriverdisk"
888 modlist=$(expandModuleSet "$3")
889 diskpath=/tmp/makedriverdisk.$$
894 makemoduleball --dd "$modlabel" $diskpath "$modlist"
896 size=$(expr 60 + $(du -sk $diskpath | awk '{print $1}'))
897 if [ $size -lt 57 ]; then
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 -)
909 diff -upr $diskpath /tmp/mkdd.$$ > /dev/null 2>&1
911 echo copy to disk image failed
913 echo "disk size: $size"
920 if [ -n "$DIE" ]; then
924 cp /tmp/${diskname}.img $IMAGEPATH/${diskname}.img
925 rm /tmp/${diskname}.img
928 size=$(ls -l $IMAGEPATH/${diskname}.img | awk '{ print $5 }')
929 size=$(expr $size / 1024)
931 echo "Wrote $IMAGEPATH/${diskname}.img (${size}k)"
932 echo "${diskname}.img - ${modlabel}" >> $IMAGEPATH/README
934 if [ -n "$PADSIZE" ]; then
935 padfile $IMAGEPATH/${diskname}.img $PADSIZE
939 # source the architecture specific mk-images file so we can call functions
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
947 source $TOPDIR/mk-images.${BUILDARCH}
950 # Find the kernel, unpack it, and verify it
952 if [ "$BUILDARCH" = "ppc" -o "$BUILDARCH" = "ppc64" ]; then
953 arches="ppc64pseries ppc64 ppc64iseries ppc"
954 elif [ "$BUILDARCH" = "i686" ]; then
955 arches="i386 i586 i686"
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)
969 if [ "$KERNELARCH" = "i586" -a ! -f "$kpackage" ]; then
970 echo "No i586 kernel, trying i686..."
972 kpackage=$($LATEST $KERNELPATH kernel)
975 if [ ! -f "$kpackage" ]; then
976 echo "kernel doesn't exist for $KERNELARCH. skipping arch"
980 KERNELROOT=$KERNELBASE/$KERNELARCH
985 ppackage=$($LATEST $KERNELPATH hwdata)
986 if [ ! -f "$ppackage" ]; then
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"
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
1001 thepackage=$($LATEST $KERNELPATH kernel-${kaddpackage})
1002 if [ -f $thepackage ]; then
1003 echo "unpacking $thepackage.$arch"
1004 rpm2cpio $thepackage | (cd $KERNELROOT; cpio --quiet -iumd)
1007 if [ ! -z $ppackage ]; then
1008 rpm2cpio $ppackage | (cd $KERNELROOT; cpio --quiet -iumd etc/pcmcia/* ./etc/pcmcia/*)
1011 if [ ! -d "$KERNELROOT/lib/modules/$version" ]; then
1012 echo "$KERNELROOT/lib/modules/$version is not a valid modules directory" 2>&1
1016 if [ ! -f "$KERNELROOT/$KERNELDIR/${KERNELNAME}-$version" ]; then
1017 echo "$KERNELROOT/$KERNELDIR/${KERNELNAME}-$version does not exist"
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)
1027 allmods=$(find $KERNELROOT/lib/modules/$version -name *.ko)
1029 rundepmod "$allmods" $MODDEPS
1030 find $KERNELROOT/lib/modules/$version > $CACHE
1032 # make the boot images
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
1040 if [ -n "$foundakernel" ]; then
1041 # make the second stage
1042 find $KERNELBASE/*/lib/modules/ > $CACHE