4 PATH=$PATH:/sbin:/usr/sbin
5 IMAGEUUID=$(date +%Y%m%d%H%M).$(uname -i)
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
31 TOPDIR=$(cd $TOPDIR; pwd)
33 # modules that are needed. this is the generic "needed for every arch" stuff
34 COMMONMODS="fat vfat nfs sunrpc lockd floppy cramfs loop edd pcspkr squashfs"
35 USBMODS="ohci-hcd uhci-hcd ehci-hcd hid mousedev usb-storage sd_mod sr_mod ub"
36 FIREWIREMODS="ieee1394 ohci1394 sbp2"
38 SCSIMODS="sr_mod sg st sd_mod scsi_mod iscsi_tcp"
39 FSMODS="fat msdos vfat ext3 reiserfs jfs xfs"
40 LVMMODS="dm-mod dm-zero dm-snapshot dm-mirror"
41 RAIDMODS="md raid0 raid1 raid5 raid6"
42 SECSTAGE="$RAIDMODS $LVMMODS $FSMODS $IDEMODS $SCSIMODS"
44 PCMCIASOCKMODS="yenta_socket i82365 tcic pcmcia"
45 INITRDMODS="$USBMODS $FIREWIREMODS $IDEMODS $SCSIMODS $FSMODS $LVMMODS $RAIDMODS $BTERMMODS $COMMONMODS $PCMCIASOCKMODS =scsi =net"
47 # Set, verify, and create paths
50 IMAGEPATH=$TOPDESTPATH/images
51 FULLMODPATH=/tmp/instimagemods.$$
52 FINALFULLMODPATH=$4/modules
53 INSTIMGPATH=$TOPDESTPATH/$PRODUCTPATH/base
56 KERNELBASE=/tmp/updboot.kernel.$$
57 MODDEPS=$KERNELBASE/moddeps
58 MODALIAS=$KERNELBASE/modules.alias
63 if [ "$BUILDARCH" = "ia64" ]; then
64 KERNELDIR="/boot/efi/EFI/redhat"
69 if [ "$BUILDARCH" = "sparc64" ]; then
75 # explicit block size setting for some arches (FIXME: we compose
76 # ppc64-ish trees as ppc, so we have to set the "wrong" block size)
77 if [ "$BUILDARCH" = "sparc64" ]; then
78 CRAMBS="--blocksize 8192"
79 elif [ "$BUILDARCH" = "sparc" ]; then
80 CRAMBS="--blocksize 4096"
85 if [ $BUILDARCH = x86_64 -o $BUILDARCH = s390x ]; then
93 rm -rf $FINALFULLMODPATH
97 mkdir -p $FINALFULLMODPATH
102 TRIMMODALIAS=$IMGPATH/usr/lib/anaconda-runtime/trimmodalias
103 TRIMPCIIDS=$IMGPATH/usr/lib/anaconda-runtime/trimpciids
104 GETKEYMAPS=$IMGPATH/usr/lib/anaconda-runtime/getkeymaps
105 KEYMAPS=/tmp/keymaps-$BUILDARCH.$$
106 SCREENFONT=$IMGPATH/usr/lib/anaconda-runtime/screenfont-${BASEARCH}.gz
107 GETMODDEPS=$IMGPATH/usr/lib/anaconda-runtime/moddeps
108 MODLIST=$IMGPATH/usr/lib/anaconda-runtime/modlist
109 MODINFO=$IMGPATH/usr/lib/anaconda-runtime/loader/module-info
110 FILTERMODDEPS=$IMGPATH/usr/lib/anaconda-runtime/filtermoddeps
111 LOADERBINDIR=$IMGPATH/usr/lib/anaconda-runtime/loader
112 BOOTDISKDIR=$IMGPATH/usr/lib/anaconda-runtime/boot
113 LANGTABLE=$IMGPATH/usr/lib/anaconda/lang-table
114 PCIIDS=$IMGPATH/usr/share/hwdata/pci.ids
115 XDRIVERS=$IMGPATH/usr/share/hwdata/videoaliases
116 XDRIVERDESCS=$IMGPATH/usr/share/hwdata/videodrivers
117 CACHE=$KERNELBASE/.cache
118 MODULESUSED=$KERNELBASE/modules-used
122 REQUIREMENTS="$TRIMMODALIAS $TRIMPCIIDS $PCIIDS $XDRIVERDESCS $GETMODDEPS $MODINFO
123 $FILTERMODDEPS $LANGTABLE $GETKEYMAPS"
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.alias $MODALIAS
191 cat $KERNELROOT/lib/modules/$version/modules.dep | $FILTERMODDEPS > $final
198 for mod in $what ; do
199 mod=$(echo $mod | sed 's/\.ko */|^/g;s/\.ko$//;s/.*\///')
200 egrep $mod $MODDEPS >> $final.foo
211 [ -n "$DEBUG" ] && echo "Module $n not found in kernel rpm" >&2
213 echo $n >> $MODULESUSED
216 ver=$(echo $o |cut -d / -f 7)
217 myarch=$(echo $o |cut -d / -f 4)
218 if ! [ -d $dir/$ver/$myarch ] ; then mkdir -p $dir/$ver/$myarch ; fi
219 if ! cp $o $dir/$ver/$myarch; then
220 echo "Failed to copy $o to $dir/$ver/$myarch (for module $n)" >&2
227 # This loops to make sure it resolves dependencies of dependencies of...
234 while [ $before != $after ]; do
235 before=`echo $items | wc -c`
237 if [ $? != "0" ] ; then
240 list=`$GETMODDEPS -m $MODDEPS $items`
241 items=$(for n in $items $list; do echo $n; done | sort -u)
242 after=`echo $items | wc -c`
251 char=$(echo $name | cut -c1)
252 if [ $char = '=' ]; then
253 NAME=$(echo $name | cut -c2-)
254 SET="$SET $($MODLIST --modinfo-file $MODINFO $NAME)"
255 elif [ $char = '+' ]; then
256 NAME=$(echo $name | cut -c2-)
258 # all of the modules of this type
259 $MODLIST --modinfo-file $MODINFO $NAME > /tmp/emsAll.$$
260 # the modules used that are of this type
261 sort -u $MODULESUSED | cat - /tmp/emsAll.$$ | sort |
262 uniq -d > /tmp/emsUsed.$$
263 # the modules that are of this type, but not used
264 SET="$SET $(cat /tmp/emsAll.$$ /tmp/emsUsed.$$ | sort | uniq -u)"
266 rm -f /tmp/emsAll.$$ /tmp/emsUsed.$$
277 MMB_MODINFO="module-info"
278 MMB_NAME="modules.cgz"
280 while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
281 if [ "$1" = "--dd" ]; then
284 MMB_MODINFO="modinfo"
286 elif [ "$1" = "--name" ]; then
291 echo "unknown option passed to $0"
296 MMB_MODULESET=$(resdeps $2)
298 rm -rf $MMB_DIR/modules $MMB_DIR/$MMB_NAME $MMB_DIR/modules.dep $MMB_DIR/modules.alias \
299 $MMB_DIR/modules.pcimap $MMB_DIR/pcitable $MMB_DIR/$MMB_MODINFO \
301 mkdir -p $MMB_DIR/modules
303 MMB_MODULESET=$(intcopymodules "$MMB_MODULESET" $MMB_DIR/modules)
305 pushd $MMB_DIR/modules > /dev/null
307 $MODLIST --modinfo-file $MODINFO --ignore-missing --modinfo \
308 $MMB_MODULESET > ../$MMB_MODINFO
310 getmoddeps "$(find . -name *.ko)" ../modules.dep
312 # create the modules.alias file
313 $TRIMMODALIAS $(find . -name *.ko -exec basename {} \;) < $MODALIAS > ../modules.alias
315 # create the pci.ids, from modules.alias and the X driver aliases
316 awk '!/^(\t\t|#)/ { print ;if ($0 == "ffff Illegal Vendor ID") nextfile; }' < $PCIIDS | \
317 $TRIMPCIIDS ../modules.alias $XDRIVERS/* > ../pci.ids
319 if [ -n "$MMB_DD" ]; then
320 echo $MMB_DD > $MMB_DIR/rhdd
323 find . -type f | cpio --quiet -H crc -o | gzip -9 > ../$MMB_NAME
333 rm -f $root/.buildstamp
334 echo $IMAGEUUID > $root/.buildstamp
335 echo $PRODUCT >> $root/.buildstamp
336 echo $VERSION >> $root/.buildstamp
337 echo $PRODUCTPATH >> $root/.buildstamp
338 if [ -n "$BUGURL" ]; then
339 echo $BUGURL >> $root/.buildstamp
343 setupShellEnvironment() {
344 # setup password/group entries
345 cat > $MBD_DIR/etc/passwd << EOF
346 root::0:0::/:/sbin/loader
347 debug::0:0:debug shell:/:/bin/bash
348 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
350 cat > $MBD_DIR/etc/group << EOF
354 echo "sshd:x:74:" >> $MBD_DIR/etc/group
355 echo "telnet 23/tcp" > $MBD_DIR/etc/services
356 echo "tcp 6 TCP" > $MBD_DIR/etc/protocols
359 for i in pam_limits.so pam_env.so pam_unix.so pam_deny.so; do
360 cp -f $IMGPATH/$LIBDIR/security/$i $MBD_DIR/$LIBDIR/security
363 cp -f $IMGPATH/etc/pam.d/other $MBD_DIR/etc/pam.d
364 cat > $MBD_DIR/etc/pam.d/login << EOF
366 auth required pam_env.so
367 auth sufficient pam_unix.so likeauth nullok
368 auth required pam_deny.so
369 account required pam_unix.so
370 password sufficient pam_unix.so nullok use_authtok md5 shadow
371 password required pam_deny.so
372 session required pam_limits.so
373 session required pam_unix.so
375 cp -f $MBD_DIR/etc/pam.d/login $MBD_DIR/etc/pam.d/sshd
376 cp -f $MBD_DIR/etc/pam.d/login $MBD_DIR/etc/pam.d/remote
378 cp -f $IMGPATH/etc/security/{limits.conf,pam_env.conf} $MBD_DIR/etc/security/
380 # setup xinetd for telnet
381 cp -f $IMGPATH/etc/xinetd.conf $MBD_DIR/etc/xinetd.conf
382 mkdir -p $MBD_DIR/etc/xinetd.d
383 cat > $MBD_DIR/etc/xinetd.d/telnet <<EOF
390 server = /sbin/in.telnetd
391 log_on_failure += USERID
396 # key generation takes ages on s390, you really don't want this for every
397 # installation attempt. These are NOT the keys of the installed system!
398 mkdir -m 0700 -p $MBD_DIR/etc/ssh
399 echo -n "Generating SSH1 RSA host key: "
400 /usr/bin/ssh-keygen -q -t rsa1 -f $MBD_DIR/etc/ssh/ssh_host_key \
401 -C '' -N '' >&/dev/null
403 echo -n "Generating SSH2 RSA host key: "
404 /usr/bin/ssh-keygen -q -t rsa -f $MBD_DIR/etc/ssh/ssh_host_rsa_key \
405 -C '' -N '' >&/dev/null
407 echo -n "Generating SSH2 DSA host key: "
408 /usr/bin/ssh-keygen -q -t dsa -f $MBD_DIR/etc/ssh/ssh_host_dsa_key \
409 -C '' -N '' >&/dev/null
411 (cd $MBD_DIR/etc/ssh; \
412 chmod 600 ssh_host_key ssh_host_rsa_key ssh_host_dsa_key; \
413 chmod 644 ssh_host_key.pub ssh_host_rsa_key.pub ssh_host_dsa_key.pub; )
416 cat > $MBD_DIR/etc/ssh/sshd_config <<EOF
418 HostKey /etc/ssh/ssh_host_key
419 HostKey /etc/ssh/ssh_host_rsa_key
420 HostKey /etc/ssh/ssh_host_dsa_key
427 XAuthLocation /sbin/xauth
429 SyslogFacility AUTHPRIV
430 RSAAuthentication yes
431 PasswordAuthentication yes
432 PermitEmptyPasswords yes
433 PermitUserEnvironment yes
435 chmod 600 $MBD_DIR/etc/ssh/sshd_config
437 # copy in the binaries
438 cp -f $IMGPATH/usr/bin/login $MBD_DIR/sbin/login
439 cp -f $IMGPATH/usr/sbin/sshd $MBD_DIR/sbin/sshd
440 cp -f $IMGPATH/usr/sbin/xinetd $MBD_DIR/sbin/xinetd
441 cp -f $IMGPATH/usr/sbin/in.telnetd $MBD_DIR/sbin/in.telnetd
442 cp -f $IMGPATH/usr/bin/bash $MBD_DIR/sbin/bash
443 cp -f $IMGPATH/usr/bin/busybox $MBD_DIR/sbin/busybox
446 ln -sf bash $MBD_DIR/sbin/sh
448 set $(./busybox 2>&1| awk '/^\t([[:alnum:]_\[]+,)+/' | sed 's/,//g' | sed 's/ +//');
449 while [ -n "$1" ]; do
450 if [ $1 != "busybox" -a $1 != "sh" ]; then
451 # if file doesnt already exist, link to busybox
452 if [ ! -f "$1" ]; then
455 [ -n "$DEBUG" ] && echo "Overriding busybox version of $1"
461 # and copy libraries too
462 mkdir -p $MBD_DIR/$LIBDIR
463 for lib in $IMGPATH/$LIBDIR/libc.so* \
464 $IMGPATH/$LIBDIR/libc-*.so* \
465 $IMGPATH/$LIBDIR/ld-*.so* \
466 $IMGPATH/$LIBDIR/ld.so* \
467 $IMGPATH/$LIBDIR/ld64.so* \
468 $IMGPATH/$LIBDIR/libtermcap.so* \
469 $IMGPATH/$LIBDIR/libpam.so* \
470 $IMGPATH/$LIBDIR/libdl.so* \
471 $IMGPATH/$LIBDIR/libdl-*.so* \
472 $IMGPATH/$LIBDIR/libnss_files* \
473 $IMGPATH/$LIBDIR/libnsl* \
474 $IMGPATH/$LIBDIR/libutil.so* \
475 $IMGPATH/$LIBDIR/libutil-*.so* \
476 $IMGPATH/$LIBDIR/libcrypt*so* \
477 $IMGPATH/$LIBDIR/libselinux*so* \
478 $IMGPATH/$LIBDIR/libsepol*so* \
479 $IMGPATH/$LIBDIR/libattr*so* \
480 $IMGPATH/$LIBDIR/libresolv.so* \
481 $IMGPATH/$LIBDIR/libresolv-*.so* \
482 $IMGPATH/$LIBDIR/libm.so* \
483 $IMGPATH/$LIBDIR/libm-*.so* \
484 $IMGPATH/usr/$LIBDIR/libz.so* \
485 $IMGPATH/$LIBDIR/libssl* \
486 $IMGPATH/$LIBDIR/libcom_err* \
487 $IMGPATH/$LIBDIR/libe2p* \
488 $IMGPATH/$LIBDIR/libuuid* \
489 $IMGPATH/usr/$LIBDIR/libwrap*.so* \
490 $IMGPATH/usr/X11R6/$LIBDIR/libX11.so* \
491 $IMGPATH/usr/X11R6/$LIBDIR/libXmuu.so* \
492 $IMGPATH/usr/X11R6/$LIBDIR/libXext.so* \
493 $IMGPATH/usr/X11R6/$LIBDIR/libXt.so* \
494 $IMGPATH/usr/X11R6/$LIBDIR/libSM.so* \
495 $IMGPATH/usr/X11R6/$LIBDIR/libICE.so* ; do
496 if [ -e $lib ]; then cp -df $lib $MBD_DIR/$LIBDIR/ ; fi
499 mkdir -p $MBD_DIR/usr/$LIBDIR
500 for lib in $IMGPATH/usr/$LIBDIR/libkrb5.so* \
501 $IMGPATH/usr/$LIBDIR/libkrb5support.so* \
502 $IMGPATH/usr/$LIBDIR/libgssapi_krb5.so* \
503 $IMGPATH/usr/$LIBDIR/libk5crypto.so* \
504 $IMGPATH/usr/$LIBDIR/libcom_err.so* ; do
505 if [ -e $lib ]; then cp -df $lib $MBD_DIR/usr/$LIBDIR/ ; fi
516 MODULEBALLNAME="modules.cgz"
517 MYLANGTABLE=$LANGTABLE
519 while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
520 if [ $1 = "--initrdto" ]; then
524 elif [ $1 = "--keep" ]; then
528 elif [ $1 = "--initrdsize" ]; then
532 elif [ $1 = "--loaderbin" ]; then
536 elif [ $1 = "--modules" ]; then
540 elif [ $1 = "--moduleballname" ]; then
545 echo "Unknown option passed to makeinitrd"
548 if [ -z "$LOADERBIN" ]; then
549 echo "no loader binary specified!" >&2
552 if [ -z "$INITRDMODULES" ]; then
553 echo "warning: no loader modules specified!" >&2
555 if [ -z "$INITRDSIZE" ]; then
556 echo "I don't know how big to make the initrd image!" >&2
560 MBD_DIR=/tmp/makebootdisk.dir.$$
561 MBD_FSIMAGE=/tmp/makebootdisk.initrdimage.$$
562 MBD_BOOTTREE=/tmp/makebootdisk.tree.$$
564 rm -rf $MBD_DIR MBD_FSIMAGE
565 mkdir -p $MBD_DIR/modules
566 mkdir -p $MBD_DIR/sbin
567 mkdir -p $MBD_DIR/dev
568 mkdir -p $MBD_DIR/etc
569 mkdir -p $MBD_DIR/proc
570 mkdir -p $MBD_DIR/selinux
571 mkdir -p $MBD_DIR/sys
572 mkdir -p $MBD_DIR/tmp
573 mkdir -p $MBD_DIR/etc/terminfo/{a,b,d,l,s,v,x}
574 mkdir -p $MBD_DIR/var/state
575 mkdir -p $MBD_DIR/var/run
576 mkdir -p $MBD_DIR/var/lock/rpm
578 if [ "$BUILDARCH" = "ppc" -o "$BUILDARCH" = "ppc64" ]; then
579 mkdir -p $MBD_DIR/dev/iseries
582 if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then
583 mkdir -m 111 -p $MBD_DIR/var/empty/sshd
584 mkdir -p $MBD_DIR/etc/{pam.d,security}
585 mkdir -p $MBD_DIR/$LIBDIR/security
586 cp $IMGPATH/$LIBDIR/libpam_misc.so.0.* $MBD_DIR/$LIBDIR/libpam_misc.so.0
587 ln -s /tmp $MBD_DIR/var/state/xkb
588 cp $IMGPATH/usr/X11R6/bin/xauth $MBD_DIR/sbin/xauth
589 cp $IMGPATH/usr/sbin/cmsfs* $MBD_DIR/sbin/
592 if [ -n "$INITRDMODULES" ]; then
593 MODSET=`expandModuleSet "$INITRDMODULES"`
594 makemoduleball --name $MODULEBALLNAME $MBD_DIR/modules "$MODSET"
597 cat > $MBD_DIR/etc/passwd << EOF
598 root::0:0:root:/:/bin/bash
601 # set up the arch bits
602 echo $arch > $MBD_DIR/etc/arch
604 install -s -m 755 $LOADERBINDIR/$LOADERBIN $MBD_DIR/sbin/loader
605 strip $MBD_DIR/sbin/loader
606 if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then
607 install -s -m 755 $LOADERBINDIR/init $MBD_DIR/sbin
608 strip $MBD_DIR/sbin/init
609 ln -s ./init $MBD_DIR/sbin/shutdown
610 ln -s ./init $MBD_DIR/sbin/halt
611 ln -s ./init $MBD_DIR/sbin/poweroff
613 install -s -m 755 $LOADERBINDIR/shutdown $MBD_DIR/sbin/shutdown
614 install -m 755 $IMGPATH/usr/lib/anaconda-runtime/loader/linuxrc.s390 $MBD_DIR/sbin/init
615 install -m 755 $IMGPATH/usr/sbin/dasdfmt $MBD_DIR/sbin/dasdfmt
618 if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then
619 install -m 644 $KEYMAPS $MBD_DIR/etc/keymaps.gz
620 install -m 644 $SCREENFONT $MBD_DIR/etc/screenfont.gz
622 install -m 644 $MYLANGTABLE $MBD_DIR/etc/lang-table
624 install -m 644 $LOADERBINDIR/$MYLOADERTR $MBD_DIR/etc/loader.tr
625 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
626 [ -f $IMGPATH/usr/share/terminfo/$i ] && \
627 install -m 644 $IMGPATH/usr/share/terminfo/$i $MBD_DIR/etc/terminfo/$i
630 makeproductfile $MBD_DIR
632 for n in insmod rmmod modprobe; do
633 ln -s loader $MBD_DIR/sbin/$n
636 ln -s /usr/bin/sh $MBD_DIR/sbin/sh
637 ln -s /sbin/init $MBD_DIR/init
638 ln -s /proc/mounts $MBD_DIR/etc/mtab
639 ln -s sbin $MBD_DIR/bin
640 mkdir -p $MBD_DIR/var/lib
641 ln -s ../../tmp $MBD_DIR/var/lib/xkb
643 # s390/s390x need sshd/telnet setup
644 if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then
645 setupShellEnvironment
648 cat > $MBD_DIR/.profile <<EOF
649 PATH=/bin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/mnt/sysimage/sbin:/mnt/sysimage/usr/sbin:/mnt/sysimage/bin:/mnt/sysimage/usr/bin
654 (cd $MBD_DIR; find . |cpio --quiet -c -o) |gzip -9 > $MBD_FSIMAGE
656 size=$(du $MBD_FSIMAGE | awk '{ print $1 }')
658 echo "Wrote $MBD_FSIMAGE (${size}k compressed)"
660 if [ -n "$EXTRAINITRDPATH" ]; then
661 mkdir -p `dirname $EXTRAINITRDPATH`
662 cp -a $MBD_FSIMAGE $EXTRAINITRDPATH
665 if [ -z "$KEEP" ]; then
666 rm -rf $MBD_FSIMAGE $MBD_BOOTTREE
673 tmpdir=/tmp/instimage.dir.$$
675 rm -rf $tmpimage $tmpdir
676 mkdir -p $mntpoint $tmpdir
679 (cd $INSTIMGTEMPLATE; find . | cpio --quiet -p $tmpdir)
680 makeproductfile $tmpdir
682 if [ -z "$type" -o "$type" = "cramfs" ]; then
683 echo "Running mkcramfs $CRAMBS $tmpdir $INSTIMGPATH/${imagename}2.img"
684 mkfs.cramfs $CRAMBS $tmpdir /tmp/${imagename}2.img.$$
685 elif [ "$type" = "squashfs" ]; then
686 echo "Running mksquashfs $tmpdir /tmp/${imagename}2.img -all-root"
687 mksquashfs $tmpdir /tmp/${imagename}2.img.$$ -all-root
688 chmod 0644 /tmp/${imagename}2.img.$$
690 cp /tmp/${imagename}2.img.$$ $INSTIMGPATH/${imagename}2.img
691 size=$(ls -l $INSTIMGPATH/${imagename}2.img | awk '{print $5}')
692 size=$(expr $size / 1024)
693 echo "Wrote $INSTIMGPATH/${imagename}2.img (${size}k)..."
700 mmi_tmpimage=/tmp/instimage.img.$$
701 mmi_mntpoint=/tmp/instimage.mnt.$$
703 rm -rf $mmi_tmpimage $mmi_mntpoint
706 if [ $type = "ext2" ]; then
707 SIZE=$(du -sk $IMGPATH | awk '{ print int($1 * 1.1) }')
708 if [ -d $IMGPATH/usr/lib/anaconda-runtime ]; then
709 ERROR=$(du -sk $IMGPATH/usr/lib/anaconda-runtime | awk '{ print $1 }')
710 SIZE=$(expr $SIZE - $ERROR)
712 dd if=/dev/zero bs=1k count=${SIZE} of=$mmi_tmpimage 2>/dev/null
713 mke2fs -q -F $mmi_tmpimage > /dev/null
714 tune2fs -c0 -i0 $mmi_tmpimage >/dev/null
715 mount -o loop $mmi_tmpimage $mmi_mntpoint
717 (cd $IMGPATH; find . | fgrep -v "./usr/lib/anaconda-runtime" |
718 cpio -H crc -o) | (cd $mmi_mntpoint; cpio -iumd)
719 makeproductfile $mmi_mntpoint
722 elif [ $type = "squashfs" ]; then
723 makeproductfile $IMGPATH
724 echo "Running mksquashfs $IMGPATH $mmi_tmpimage -all-root"
725 mksquashfs $IMGPATH $mmi_tmpimage -all-root
726 chmod 0644 $mmi_tmpimage
727 SIZE=$(expr `cat $mmi_tmpimage | wc -c` / 1024)
728 elif [ $type = "cramfs" ]; then
729 makeproductfile $IMGPATH
730 echo "Running mkcramfs $CRAMBS $IMGPATH $mmi_tmpimage"
731 mkfs.cramfs $CRAMBS $IMGPATH $mmi_tmpimage
732 SIZE=$(expr `cat $mmi_tmpimage | wc -c` / 1024)
735 cp $mmi_tmpimage $INSTIMGPATH/${imagename}.img
736 chmod 644 $INSTIMGPATH/${imagename}.img
738 echo "Wrote $INSTIMGPATH/${imagename}.img (${SIZE}k)"
744 echo "Building minstg.img"
745 makeinstimage "minstg" "squashfs"
747 echo "Building stage2.img"
748 makemainimage "stage2" "squashfs"
756 # source the architecture specific mk-images file so we can call functions
758 if [ ${BUILDARCH} = s390x ]; then
759 # FIXME: this is a bad hack for s390, but better than copying for now
760 source $TOPDIR/mk-images.s390
762 source $TOPDIR/mk-images.${BUILDARCH}
765 # Find the kernel, unpack it, and verify it
767 if [ "$BUILDARCH" = "ppc" -o "$BUILDARCH" = "ppc64" ]; then
768 arches="ppc64pseries ppc64 ppc64iseries ppc"
769 elif [ "$BUILDARCH" = "i386" ]; then
771 kerneltags="kernel kernel-xenU"
772 elif [ "$BUILDARCH" = "x86_64" ]; then
774 kerneltags="kernel kernel-xenU"
780 for KERNELARCH in $arches; do
781 for kernelvers in $kerneltags; do
782 kpackage=$(findPackage $KERNELPATH $kernelvers)
783 if [ "$KERNELARCH" = "i586" -a ! -f "$kpackage" ]; then
784 echo "No i586 kernel, trying i686..."
786 kpackage=$(findPackage $KERNELPATH $kernelvers)
789 if [ ! -f "$kpackage" ]; then
790 echo "kernel ($kernelvers) doesn't exist for $KERNELARCH. skipping"
794 KERNELROOT=$KERNELBASE/$KERNELARCH
795 mkdir -p $KERNELROOT/lib/modules/misc
799 if [ "${kernelvers}" = "kernel-xenU" ]; then kerneltag="xenU" ; fi
801 version=$(rpm --nodigest --nosignature --qf '%{VERSION}-%{RELEASE}' -qp $kpackage)${kerneltag}
802 arch=$(rpm --nodigest --nosignature --qf '%{ARCH}\n' -qp $kpackage)
803 echo "unpacking $kpackage.$arch"
805 rpm2cpio $kpackage | (cd $KERNELROOT; cpio --quiet -iumd)
807 if [ ! -d "$KERNELROOT/lib/modules/$version" ]; then
808 echo "$KERNELROOT/lib/modules/$version is not a valid modules directory" 2>&1
812 if [ ! -f "$KERNELROOT/$KERNELDIR/${KERNELNAME}-$version" ]; then
813 echo "$KERNELROOT/$KERNELDIR/${KERNELNAME}-$version does not exist"
817 allmods=$(find $KERNELROOT/lib/modules/$version -name *.ko)
819 rundepmod "$allmods" $MODDEPS
820 find $KERNELROOT/lib/modules/$version > $CACHE
822 # make the boot images
829 # do some clean up before making the cramfs of the second stage
830 rm -rf $INSTIMGTEMPLATE/usr/lib/anaconda-runtime $INSTIMGTEMPLATE/usr/lib/syslinux $IMGPATH/usr/lib/syslinux
832 if [ -n "$foundakernel" ]; then
833 # make the second stage
834 find $KERNELBASE/*/lib/modules/ > $CACHE