--- /dev/null
+#!/bin/bash
+LANG=C
+
+PATH=$PATH:/sbin:/usr/sbin
+IMAGEUUID=$(date +%Y%m%d%H%M)
+
+usage () {
+ echo "usage: mk-images <pkgsrc> <toplevel> <template> <imgdir> <buildarch> <productname> <version> [<productpath>]"
+ exit 0
+}
+
+DEBUG=""
+if [ "$1" == "--debug" ]; then
+ DEBUG="--debug"
+ shift
+fi
+
+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
+
+PRODUCT=$6
+VERSION=$7
+PRODUCTPATH=$8
+if [ -n "$9" ]; then
+ BUGURL=$9
+fi
+
+TOPDIR=$(echo $0 | sed "s,/[^/]*$,,")
+if [ $TOPDIR = $0 ]; then
+ $TOPDIR="."
+fi
+
+TOPDIR=$(cd $TOPDIR; pwd)
+
+# Set, verify, and create paths
+ KERNELPATH=$1
+ TOPDESTPATH=$2
+ IMAGEPATH=$TOPDESTPATH/images
+ FULLMODPATH=/tmp/instimagemods.$$
+ FINALFULLMODPATH=$4/modules
+ INSTIMGPATH=$TOPDESTPATH/$PRODUCTPATH/base
+ INSTIMGTEMPLATE=$3
+ IMGPATH=$4
+ KERNELBASE=/tmp/updboot.kernel.$$
+ MODDEPS=$KERNELBASE/moddeps
+ MODMAPS=$KERNELBASE/modules.pcimap
+ USBMAPS=$KERNELBASE/modules.usbmap
+ BUILDARCH=$5
+
+ KERNELNAME=vmlinuz
+
+ if [ "$BUILDARCH" = "ia64" ]; then
+ KERNELDIR="/boot/efi/EFI/redhat"
+ else
+ KERNELDIR="/boot"
+ fi
+
+ if [ "$BUILDARCH" = "sparc64" ]; then
+ BASEARCH=sparc
+ else
+ BASEARCH=$BUILDARCH
+ fi
+
+ # explicit block size setting for some arches (FIXME: we compose
+ # ppc64-ish trees as ppc, so we have to set the "wrong" block size)
+ if [ "$BUILDARCH" = "sparc64" ]; then
+ CRAMBS="--blocksize 8192"
+ elif [ "$BUILDARCH" = "sparc" ]; then
+ CRAMBS="--blocksize 4096"
+ else
+ CRAMBS=""
+ fi
+
+ if [ ! -d "$1" ]; then
+ LATEST="rsh porkchop latest --arch $BUILDARCH"
+ else
+ LATEST=findPackage
+ fi
+
+ if [ $BUILDARCH = x86_64 -o $BUILDARCH = s390x ]; then
+ LIBDIR=lib64
+ else
+ LIBDIR=lib
+ fi
+
+ rm -rf $IMAGEPATH
+ rm -rf $FULLMODPATH
+ rm -rf $FINALFULLMODPATH
+ rm -rf $KERNELBASE
+ mkdir -p $IMAGEPATH
+ mkdir -p $FULLMODPATH
+ mkdir -p $FINALFULLMODPATH
+ mkdir -p $KERNELBASE
+ mkdir -p $INSTIMGPATH
+
+ FONTARCH=${BASEARCH}
+ if [ $FONTARCH = i686 ]
+ then
+ FONTARCH=i386
+ fi
+# Stuff that we need
+ TRIMPCITABLE=$IMGPATH/usr/lib/anaconda-runtime/trimpcitable
+ TRIMMODMAP=$IMGPATH/usr/lib/anaconda-runtime/trimmodmap
+ TRIMPCIIDS=$IMGPATH/usr/lib/anaconda-runtime/trimpciids
+ TRIMUSBMAP=$IMGPATH/usr/lib/anaconda-runtime/trimusbmap
+ GETKEYMAPS=$IMGPATH/usr/lib/anaconda-runtime/getkeymaps
+ KEYMAPS=/tmp/keymaps-$BUILDARCH.$$
+ SCREENFONT=$IMGPATH/usr/lib/anaconda-runtime/screenfont-${FONTARCH}.gz
+ GETMODDEPS=$IMGPATH/usr/lib/anaconda-runtime/moddeps
+ MODLIST=$IMGPATH/usr/lib/anaconda-runtime/modlist
+ MODINFO=$IMGPATH/usr/lib/anaconda-runtime/loader/module-info
+ FILTERMODDEPS=$IMGPATH/usr/lib/anaconda-runtime/filtermoddeps
+ LOADERBINDIR=$IMGPATH/usr/lib/anaconda-runtime/loader
+ BOOTDISKDIR=$IMGPATH/usr/lib/anaconda-runtime/boot
+ LANGTABLE=$IMGPATH/usr/lib/anaconda/lang-table
+ PCITABLE=$IMGPATH/usr/share/hwdata/pcitable
+ PCIIDS=$IMGPATH/usr/share/hwdata/pci.ids
+ CACHE=$KERNELBASE/.cache
+ MODULESUSED=$KERNELBASE/modules-used
+
+ touch $MODULESUSED
+
+ REQUIREMENTS="$TRIMPCITABLE $TRIMMODMAP $TRIMPCIIDS $PCITABLE $PCIIDS $GETMODDEPS $MODINFO
+ $FILTERMODDEPS $LANGTABLE $GETKEYMAPS $TRIMUSBMAP"
+
+ dieLater=
+ for n in $REQUIREMENTS; do
+ if [ ! -f $n ]; then
+ echo "$n doesn't exist"
+ dieLater=1
+ fi
+ done
+
+ for n in $BOOTDISKDIR; do
+ if [ ! -d $n ]; then
+ echo "$n doesn't exist"
+ dieLater=1
+ fi
+ done
+
+ if [ -n "$dieLater" ]; then exit 1; fi
+
+ if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then
+ # go ahead and create the keymaps so we only have to do it once
+ if [ -f $IMGPATH/usr/lib/anaconda-runtime/keymaps-override-$BUILDARCH ]; then
+ echo "Found keymap override, using it"
+ cp $IMGPATH/usr/lib/anaconda-runtime/keymaps-override-$BUILDARCH $KEYMAPS
+ else
+ echo "Running: $GETKEYMAPS $BUILDARCH $KEYMAPS $IMGPATH"
+ $GETKEYMAPS $BUILDARCH $KEYMAPS $IMGPATH
+ if [ $? != 0 ]; then
+ echo "Unable to create keymaps and thus can't create initrd."
+ exit 1
+ fi
+ fi
+ fi
+
+findPackage() {
+ dir=$1
+ name=$2
+
+ for n in $dir/$name*{$KERNELARCH,noarch}.rpm; do
+ thisName=$(rpm --nodigest --nosignature --qf '%{NAME}' -qp $n)
+ if [ -z "$thisName" ]; then
+ continue
+ fi
+ if [ $thisName = $name ]; then
+ echo $n
+ return
+ fi
+ done
+
+ echo "cannot find package $name in path $dir" >&2
+}
+
+findmodule () {
+ if [ ! -f $CACHE ]; then
+ find $KERNELROOT/lib/modules/ > $CACHE
+ fi
+
+ grep "/$1\.ko" $CACHE
+}
+
+rundepmod () {
+ what=$1
+ final=$2
+
+ $FAKEARCH /sbin/depmod -a -F $KERNELROOT/boot/System.map-$version \
+ -b $KERNELROOT $version
+ mv $KERNELROOT/lib/modules/$version/modules.pcimap $MODMAPS
+ mv $KERNELROOT/lib/modules/$version/modules.usbmap $USBMAPS
+
+ cat $KERNELROOT/lib/modules/$version/modules.dep | $FILTERMODDEPS > $final
+}
+
+getmoddeps () {
+ what=$1
+ final=$2
+
+ for mod in $what ; do
+ mod=$(echo $mod | sed 's/\.ko */|^/g;s/\.ko$//;s/.*\///')
+ egrep $mod $MODDEPS >> $final.foo
+ done
+ mv $final.foo $final
+}
+
+padfile () {
+ PS_FILE=$1
+ PS_SIZE=$2
+
+ size=`cat $PS_FILE | wc -c`
+ filler=`expr $PS_SIZE "*" 1024 - $size`
+ dd if=/dev/zero bs=$filler count=1 >> $PS_FILE 2> /dev/null
+}
+
+intcopymodules () {
+ dir=$2
+
+ for n in $1; do
+ m=$(findmodule $n)
+ if [ -z "$m" ]; then
+ [ -n "$DEBUG" ] && echo "Module $n not found in kernel rpm" >&2
+ else
+ echo $n >> $MODULESUSED
+ for o in $m ; do
+ echo $n
+ ver=$(echo $o |cut -d / -f 7)
+ myarch=$(echo $o |cut -d / -f 4)
+ if ! [ -d $dir/$ver/$myarch ] ; then mkdir -p $dir/$ver/$myarch ; fi
+ if ! cp $o $dir/$ver/$myarch; then
+ echo "Failed to copy $o to $dir/$ver/$myarch (for module $n)" >&2
+ fi
+ done
+ fi
+ done
+}
+
+# This loops to make sure it resolves dependencies of dependencies of...
+resdeps () {
+ items="$*"
+
+ before=1
+ after=2
+
+ while [ $before != $after ]; do
+ before=`echo $items | wc -c`
+
+ if [ $? != "0" ] ; then
+ kill -9 $$
+ fi
+ list=`$GETMODDEPS -m $MODDEPS $items`
+ items=$(for n in $items $list; do echo $n; done | sort -u)
+ after=`echo $items | wc -c`
+ done
+
+ echo $items
+}
+
+expandModuleSet() {
+ SET=""
+ for name in $1; do
+ char=$(echo $name | cut -c1)
+ if [ $char = '=' ]; then
+ NAME=$(echo $name | cut -c2-)
+ SET="$SET $($MODLIST --modinfo-file $MODINFO $NAME)"
+ elif [ $char = '+' ]; then
+ NAME=$(echo $name | cut -c2-)
+
+ # all of the modules of this type
+ $MODLIST --modinfo-file $MODINFO $NAME > /tmp/emsAll.$$
+ # the modules used that are of this type
+ sort -u $MODULESUSED | cat - /tmp/emsAll.$$ | sort |
+ uniq -d > /tmp/emsUsed.$$
+ # the modules that are of this type, but not used
+ SET="$SET $(cat /tmp/emsAll.$$ /tmp/emsUsed.$$ | sort | uniq -u)"
+
+ rm -f /tmp/emsAll.$$ /tmp/emsUsed.$$
+ else
+ SET="$SET $name"
+ fi
+ done
+
+ echo $SET
+}
+
+makemoduleball() {
+ unset MMB_DD
+ MMB_MODINFO="module-info"
+ MMB_NAME="modules.cgz"
+
+ while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
+ if [ "$1" = "--dd" ]; then
+ MMB_DD="$2"
+ shift; shift
+ MMB_MODINFO="modinfo"
+ continue
+ elif [ "$1" = "--name" ]; then
+ MMB_NAME="$2"
+ shift; shift
+ continue
+ fi
+ echo "unknown option passed to $0"
+ exit 1
+ done
+
+ MMB_DIR=$1
+ MMB_MODULESET=$(resdeps $2)
+
+ rm -rf $MMB_DIR/modules $MMB_DIR/$MMB_NAME $MMB_DIR/modules.dep \
+ $MMB_DIR/modules.pcimap $MMB_DIR/pcitable $MMB_DIR/$MMB_MODINFO \
+ $MMB_DIR/pci.ids
+ mkdir -p $MMB_DIR/modules
+
+ MMB_MODULESET=$(intcopymodules "$MMB_MODULESET" $MMB_DIR/modules)
+
+ pushd $MMB_DIR/modules > /dev/null
+
+ $MODLIST --modinfo-file $MODINFO --ignore-missing --modinfo \
+ $MMB_MODULESET > ../$MMB_MODINFO
+
+ getmoddeps "$(find . -name *.ko)" ../modules.dep
+
+ # create the pcitable
+ $TRIMPCITABLE ignore $(find . -name *.ko -exec basename {} \;) < $PCITABLE > ../pcitable
+
+ # create the modules.pcimap
+ $TRIMMODMAP $PCITABLE $(find . -name *.ko -exec basename {} \;) < $MODMAPS > ../modules.pcimap
+
+ # create the modules.usbmap
+ $TRIMUSBMAP $(find . -name *.ko -exec basename {} \;) < $USBMAPS > ../modules.usbmap
+ # remove a zero-byte modules.usbmap
+ if [ "$(ls -s ../modules.usbmap |cut -f 1 -d ' ')" = "0" ]; then
+ rm -f ../modules.usbmap
+ fi
+ # create the pci.ids
+ awk '!/^(\t\t|#)/ { print ;if ($0 == "ffff Illegal Vendor ID") nextfile; }' < $PCIIDS | \
+ $TRIMPCIIDS ../pcitable ../modules.pcimap > ../pci.ids
+
+ if [ -n "$MMB_DD" ]; then
+ echo $MMB_DD > $MMB_DIR/rhdd
+ fi
+
+ find . -type f | cpio --quiet -H crc -o | gzip -9 > ../$MMB_NAME
+ cd ..
+ rm -rf modules
+ chmod 644 *
+ popd > /dev/null
+}
+
+makemainmodules() {
+ modlist=`expandModuleSet "$1"`
+
+ if [ -n "$2" ]; then
+ extraargs="--name $2"
+ fi
+
+ rm -rf $FULLMODPATH
+ rm -rf $FINALFULLMODPATH
+
+ if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then
+ mkdir -p $KERNELROOT/lib/modules/misc
+ find $KERNELROOT/lib/modules/*/kernel/drivers/s390/ -name "*.ko" \
+ -exec cp -f {} $KERNELROOT/lib/modules/misc \;
+ fi
+ makemoduleball $extraargs $FULLMODPATH "$modlist"
+ cp -ar $FULLMODPATH $FINALFULLMODPATH
+ rm -rf $FULLMODPATH
+}
+
+makeproductfile() {
+ root=$1
+
+ rm -f $root/.buildstamp
+ echo $IMAGEUUID > $root/.buildstamp
+ echo $PRODUCT >> $root/.buildstamp
+ echo $VERSION >> $root/.buildstamp
+ echo $PRODUCTPATH >> $root/.buildstamp
+ if [ -n "$BUGURL" ]; then
+ echo $BUGURL >> $root/.buildstamp
+ fi
+}
+
+setupShellEnvironment() {
+ # setup password/group entries
+ cat > $MBD_DIR/etc/passwd << EOF
+root::0:0::/:/sbin/loader
+debug::0:0:debug shell:/:/bin/bash
+sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
+EOF
+ cat > $MBD_DIR/etc/group << EOF
+root:x:0:root
+tty:x:5:
+EOF
+ echo "sshd:x:74:" >> $MBD_DIR/etc/group
+ echo "telnet 23/tcp" > $MBD_DIR/etc/services
+ echo "tcp 6 TCP" > $MBD_DIR/etc/protocols
+
+ # PAM configuration
+ for i in pam_limits.so pam_env.so pam_unix.so pam_deny.so; do
+ cp -f $IMGPATH/$LIBDIR/security/$i $MBD_DIR/$LIBDIR/security
+ done
+
+ cp -f $IMGPATH/etc/pam.d/other $MBD_DIR/etc/pam.d
+ cat > $MBD_DIR/etc/pam.d/login << EOF
+#%PAM-1.0
+auth required pam_env.so
+auth sufficient pam_unix.so likeauth nullok
+auth required pam_deny.so
+account required pam_unix.so
+password sufficient pam_unix.so nullok use_authtok md5 shadow
+password required pam_deny.so
+session required pam_limits.so
+session required pam_unix.so
+EOF
+ cp -f $MBD_DIR/etc/pam.d/login $MBD_DIR/etc/pam.d/sshd
+ cp -f $MBD_DIR/etc/pam.d/login $MBD_DIR/etc/pam.d/remote
+
+ cp -f $IMGPATH/etc/security/{limits.conf,pam_env.conf} $MBD_DIR/etc/security/
+
+ # setup xinetd for telnet
+ cp -f $IMGPATH/etc/xinetd.conf $MBD_DIR/etc/xinetd.conf
+ mkdir -p $MBD_DIR/etc/xinetd.d
+ cat > $MBD_DIR/etc/xinetd.d/telnet <<EOF
+service telnet
+{
+ flags = REUSE
+ socket_type = stream
+ wait = no
+ user = root
+ server = /sbin/in.telnetd
+ log_on_failure += USERID
+ disable = no
+}
+EOF
+
+ # key generation takes ages on s390, you really don't want this for every
+ # installation attempt. These are NOT the keys of the installed system!
+ mkdir -m 0700 -p $MBD_DIR/etc/ssh
+ echo -n "Generating SSH1 RSA host key: "
+ /usr/bin/ssh-keygen -q -t rsa1 -f $MBD_DIR/etc/ssh/ssh_host_key \
+ -C '' -N '' >&/dev/null
+ echo
+ echo -n "Generating SSH2 RSA host key: "
+ /usr/bin/ssh-keygen -q -t rsa -f $MBD_DIR/etc/ssh/ssh_host_rsa_key \
+ -C '' -N '' >&/dev/null
+ echo
+ echo -n "Generating SSH2 DSA host key: "
+ /usr/bin/ssh-keygen -q -t dsa -f $MBD_DIR/etc/ssh/ssh_host_dsa_key \
+ -C '' -N '' >&/dev/null
+ echo
+ (cd $MBD_DIR/etc/ssh; \
+ chmod 600 ssh_host_key ssh_host_rsa_key ssh_host_dsa_key; \
+ chmod 644 ssh_host_key.pub ssh_host_rsa_key.pub ssh_host_dsa_key.pub; )
+
+
+ cat > $MBD_DIR/etc/ssh/sshd_config <<EOF
+Port 22
+HostKey /etc/ssh/ssh_host_key
+HostKey /etc/ssh/ssh_host_rsa_key
+HostKey /etc/ssh/ssh_host_dsa_key
+PermitRootLogin yes
+IgnoreRhosts yes
+StrictModes yes
+X11Forwarding yes
+X11DisplayOffset 10
+PrintMotd yes
+XAuthLocation /sbin/xauth
+KeepAlive yes
+SyslogFacility AUTHPRIV
+RSAAuthentication yes
+PasswordAuthentication yes
+PermitEmptyPasswords yes
+PermitUserEnvironment yes
+EOF
+ chmod 600 $MBD_DIR/etc/ssh/sshd_config
+
+ # copy in the binaries
+ cp -f $IMGPATH/usr/bin/login $MBD_DIR/sbin/login
+ cp -f $IMGPATH/usr/sbin/sshd $MBD_DIR/sbin/sshd
+ cp -f $IMGPATH/usr/sbin/xinetd $MBD_DIR/sbin/xinetd
+ cp -f $IMGPATH/usr/sbin/in.telnetd $MBD_DIR/sbin/in.telnetd
+ cp -f $IMGPATH/usr/bin/bash $MBD_DIR/sbin/bash
+ cp -f $IMGPATH/usr/bin/busybox $MBD_DIR/sbin/busybox
+
+ # make some symlinks
+ ln -sf bash $MBD_DIR/bin/sh
+ (cd $MBD_DIR/sbin;
+ set $(./busybox 2>&1| awk '/^\t([[:alnum:]_\[]+,)+/' | sed 's/,//g' | sed 's/ +//');
+ while [ -n "$1" ]; do
+ if [ $1 != "busybox" -a $1 != "sh" ]; then
+ # if file doesnt already exist, link to busybox
+ if [ ! -f "$1" ]; then
+ ln -sf ./busybox $1
+ else
+ [ -n "$DEBUG" ] && echo "Overriding busybox version of $1"
+ fi
+ fi
+ shift
+ done )
+
+ # and copy libraries too
+ mkdir -p $MBD_DIR/$LIBDIR
+ for lib in $IMGPATH/$LIBDIR/libc.so* \
+ $IMGPATH/$LIBDIR/libc-*.so* \
+ $IMGPATH/$LIBDIR/ld-*.so* \
+ $IMGPATH/$LIBDIR/ld.so* \
+ $IMGPATH/$LIBDIR/ld64.so* \
+ $IMGPATH/$LIBDIR/libtermcap.so* \
+ $IMGPATH/$LIBDIR/libpam.so* \
+ $IMGPATH/$LIBDIR/libdl.so* \
+ $IMGPATH/$LIBDIR/libdl-*.so* \
+ $IMGPATH/$LIBDIR/libnss_files* \
+ $IMGPATH/$LIBDIR/libnsl* \
+ $IMGPATH/$LIBDIR/libutil.so* \
+ $IMGPATH/$LIBDIR/libutil-*.so* \
+ $IMGPATH/$LIBDIR/libcrypt*so* \
+ $IMGPATH/$LIBDIR/libselinux*so* \
+ $IMGPATH/$LIBDIR/libsepol*so* \
+ $IMGPATH/$LIBDIR/libattr*so* \
+ $IMGPATH/$LIBDIR/libresolv.so* \
+ $IMGPATH/$LIBDIR/libresolv-*.so* \
+ $IMGPATH/$LIBDIR/libm.so* \
+ $IMGPATH/$LIBDIR/libm-*.so* \
+ $IMGPATH/usr/$LIBDIR/libz.so* \
+ $IMGPATH/$LIBDIR/libssl* \
+ $IMGPATH/$LIBDIR/libcom_err* \
+ $IMGPATH/$LIBDIR/libe2p* \
+ $IMGPATH/$LIBDIR/libuuid* \
+ $IMGPATH/usr/$LIBDIR/libwrap*.so* \
+ $IMGPATH/usr/X11R6/$LIBDIR/libX11.so* \
+ $IMGPATH/usr/X11R6/$LIBDIR/libXmuu.so* \
+ $IMGPATH/usr/X11R6/$LIBDIR/libXext.so* \
+ $IMGPATH/usr/X11R6/$LIBDIR/libXt.so* \
+ $IMGPATH/usr/X11R6/$LIBDIR/libSM.so* \
+ $IMGPATH/usr/X11R6/$LIBDIR/libICE.so* ; do
+ if [ -e $lib ]; then cp -df $lib $MBD_DIR/$LIBDIR/ ; fi
+ done
+
+ mkdir -p $MBD_DIR/usr/$LIBDIR
+ for lib in $IMGPATH/usr/$LIBDIR/libkrb5.so* \
+ $IMGPATH/usr/$LIBDIR/libkrb5support.so* \
+ $IMGPATH/usr/$LIBDIR/libgssapi_krb5.so* \
+ $IMGPATH/usr/$LIBDIR/libk5crypto.so* \
+ $IMGPATH/usr/$LIBDIR/libcom_err.so* ; do
+ if [ -e $lib ]; then cp -df $lib $MBD_DIR/usr/$LIBDIR/ ; fi
+ done
+}
+
+makeinitrd() {
+ EXTRAINITRDPATH=""
+ PCMCIA=""
+ INITRDSIZE=""
+ KEEP=""
+ PADSIZE=""
+ LOADERBIN=""
+ INITRDMODULES=""
+ MODULEBALLNAME="modules.cgz"
+ MYLANGTABLE=$LANGTABLE
+ MYLOADERTR=loader.tr
+ BOGL=yes
+ while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
+ if [ $1 = "--initrdto" ]; then
+ EXTRAINITRDPATH=$2
+ shift; shift
+ continue
+ elif [ $1 = "--pcmcia" ]; then
+ PCMCIA=yes
+ shift
+ continue
+ elif [ $1 = "--keep" ]; then
+ KEEP=yes
+ shift
+ continue
+ elif [ $1 = "--initrdsize" ]; then
+ INITRDSIZE=$2
+ shift; shift
+ continue
+ elif [ $1 = "--loaderbin" ]; then
+ LOADERBIN=$2
+ shift; shift
+ continue
+ elif [ $1 = "--modules" ]; then
+ INITRDMODULES=$2
+ shift; shift
+ continue
+ elif [ $1 = "--moduleballname" ]; then
+ MODULEBALLNAME=$2
+ shift; shift
+ continue
+ elif [ $1 = "--nobogl" ]; then
+ BOGL=""
+ shift
+ continue
+ fi
+ echo "Unknown option passed to makeinitrd"
+ exit 1
+ done
+ if [ -z "$LOADERBIN" ]; then
+ echo "no loader binary specified!" >&2
+ exit 1
+ fi
+ if [ -z "$INITRDMODULES" ]; then
+ echo "warning: no loader modules specified!" >&2
+ fi
+ if [ -z "$INITRDSIZE" ]; then
+ echo "I don't know how big to make the initrd image!" >&2
+ exit 1
+ fi
+
+ MBD_DIR=/tmp/makebootdisk.dir.$$
+ MBD_FSIMAGE=/tmp/makebootdisk.initrdimage.$$
+ MBD_BOOTTREE=/tmp/makebootdisk.tree.$$
+
+ rm -rf $MBD_DIR MBD_FSIMAGE
+ mkdir -p $MBD_DIR/modules
+ mkdir -p $MBD_DIR/sbin
+ mkdir -p $MBD_DIR/dev
+ mkdir -p $MBD_DIR/etc
+ mkdir -p $MBD_DIR/proc
+ mkdir -p $MBD_DIR/selinux
+ mkdir -p $MBD_DIR/sys
+ mkdir -p $MBD_DIR/tmp
+ mkdir -p $MBD_DIR/etc/terminfo/{a,b,d,l,s,v,x}
+ mkdir -p $MBD_DIR/var/state
+ mkdir -p $MBD_DIR/var/run
+ mkdir -p $MBD_DIR/var/lock/rpm
+
+ if [ "$BUILDARCH" = "ppc" -o "$BUILDARCH" = "ppc64" ]; then
+ mkdir -p $MBD_DIR/dev/iseries
+ fi
+
+ if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then
+ mkdir -m 111 -p $MBD_DIR/var/empty/sshd
+ mkdir -p $MBD_DIR/etc/{pam.d,security}
+ mkdir -p $MBD_DIR/$LIBDIR/security
+ cp $IMGPATH/$LIBDIR/libpam_misc.so.0.* $MBD_DIR/$LIBDIR/libpam_misc.so.0
+ ln -s /tmp $MBD_DIR/var/state/xkb
+ cp $IMGPATH/usr/X11R6/bin/xauth $MBD_DIR/sbin/xauth
+ cp $IMGPATH/usr/sbin/cmsfs* $MBD_DIR/sbin/
+ fi
+
+ if [ -n "$INITRDMODULES" ]; then
+ MODSET=`expandModuleSet "$INITRDMODULES"`
+ makemoduleball --name $MODULEBALLNAME $MBD_DIR/modules "$MODSET"
+ fi
+
+ cat > $MBD_DIR/etc/passwd << EOF
+ root::0:0:root:/:/bin/bash
+EOF
+
+ # set up the arch bits
+ echo $arch > $MBD_DIR/etc/arch
+
+ install -s -m 755 $LOADERBINDIR/$LOADERBIN $MBD_DIR/sbin/loader
+ if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then
+ install -s -m 755 $LOADERBINDIR/init $MBD_DIR/sbin
+ ln -s ./init $MBD_DIR/sbin/shutdown
+ ln -s ./init $MBD_DIR/sbin/halt
+ ln -s ./init $MBD_DIR/sbin/poweroff
+ else
+ install -s -m 755 $LOADERBINDIR/shutdown $MBD_DIR/sbin/shutdown
+ install -m 755 $IMGPATH/usr/lib/anaconda-runtime/loader/linuxrc.s390 $MBD_DIR/sbin/init
+ install -m 755 $IMGPATH/usr/sbin/dasdfmt $MBD_DIR/sbin/dasdfmt
+ fi
+
+ if [ "$BUILDARCH" != "s390" -a "$BUILDARCH" != "s390x" ]; then
+ install -m 644 $KEYMAPS $MBD_DIR/etc/keymaps.gz
+ install -m 644 $SCREENFONT $MBD_DIR/etc/screenfont.gz
+ fi
+ install -m 644 $MYLANGTABLE $MBD_DIR/etc/lang-table
+
+ install -m 644 $LOADERBINDIR/$MYLOADERTR $MBD_DIR/etc/loader.tr
+ 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
+ [ -f $IMGPATH/usr/share/terminfo/$i ] && \
+ install -m 644 $IMGPATH/usr/share/terminfo/$i $MBD_DIR/etc/terminfo/$i
+ done
+
+ makeproductfile $MBD_DIR
+
+ if [ -n "$BOGL" ]; then
+ install -m 644 $LOADERBINDIR/font.bgf.gz $MBD_DIR/etc
+ fi
+
+ if [ -n "$PCMCIA" ]; then
+ mkdir -p $MBD_BOOTTREE/etc
+ cp -a $KERNELROOT/etc/pcmcia $MBD_DIR/etc
+ fi
+
+ for n in insmod rmmod modprobe; do
+ ln -s loader $MBD_DIR/sbin/$n
+ done
+
+ ln -s /usr/bin/sh $MBD_DIR/sbin/sh
+ ln -s /sbin/init $MBD_DIR/init
+ ln -s /proc/mounts $MBD_DIR/etc/mtab
+ ln -s sbin $MBD_DIR/bin
+
+ # s390/s390x need sshd/telnet setup
+ if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then
+ setupShellEnvironment
+ fi
+
+cat > $MBD_DIR/.profile <<EOF
+PATH=/bin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/mnt/sysimage/sbin:/mnt/sysimage/usr/sbin:/mnt/sysimage/bin:/mnt/sysimage/usr/bin
+export PATH
+EOF
+
+ rm -f $MBD_FSIMAGE
+ (cd $MBD_DIR; find . |cpio --quiet -c -o) |gzip -9 > $MBD_FSIMAGE
+
+ size=$(du $MBD_FSIMAGE | awk '{ print $1 }')
+
+ echo "Wrote $MBD_FSIMAGE (${size}k compressed)"
+
+ if [ -n "$EXTRAINITRDPATH" ]; then
+ mkdir -p `dirname $EXTRAINITRDPATH`
+ cp -a $MBD_FSIMAGE $EXTRAINITRDPATH
+ fi
+
+ if [ -z "$KEEP" ]; then
+ rm -rf $MBD_FSIMAGE $MBD_BOOTTREE
+ fi
+}
+
+makebootdisk() {
+ BOOTDISKSIZE=""
+ EXTRAKERNELPATH=""
+ INITRDFLAGS=""
+ MBD_FILENAME=""
+ INITRDFILE=""
+ while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
+ if [ $1 = "--bootdisksize" ]; then
+ BOOTDISKSIZE=$2
+ shift; shift
+ continue
+ elif [ $1 = "--kernelto" ]; then
+ EXTRAKERNELPATH=$2
+ shift; shift
+ continue
+ elif [ $1 = "--initrdflags" ]; then
+ INITRDFLAGS=$2
+ shift; shift
+ continue
+ elif [ $1 = "--initrd" ]; then
+ INITRDFILE=$2
+ shift; shift
+ continue
+ elif [ $1 = "--imagename" ]; then
+ MBD_FILENAME=$IMAGEPATH/$2
+ shift; shift
+ continue
+ fi
+ echo "Unknown option passed to makebootdisk"
+ exit 1
+ done
+
+ if [ -z "$MBD_FILENAME" ]; then
+ echo "No imagename passed"
+ exit 1
+ fi
+
+ if [ -n "$INITRDFILE" ]; then
+ MBD_FSIMAGE="$INITRDFILE"
+ elif [ -n "$INITRDFLAGS" ]; then
+ eval makeinitrd --keep $INITRDFLAGS
+ fi
+
+ mkdir -p $MBD_BOOTTREE
+
+ # provided by the mk-image.$ARCH file
+ prepareBootImage
+
+ left=$(df $MBD_BOOTTREE | tail +2)
+ left=$(echo $left | awk '{print $4'})
+
+ umount $MBD_BOOTTREE
+
+ if [ -n "$EXTRAKERNELPATH" ]; then
+ mkdir -p `dirname $EXTRAKERNELPATH`
+ cp -f $KERNELROOT/$KERNELDIR/${KERNELNAME}-* $EXTRAKERNELPATH
+ fi
+
+ mkdir -p `dirname $MBD_FILENAME`
+ rm -f $MBD_FILENAME
+ mv -f $MBD_TMPIMAGE $MBD_FILENAME
+ rm -rf $MBD_TMPIMAGE $MBD_MNTPOINT $MBD_BOOTTREE
+ if [ -z "$INITRDFILE" ]; then
+ rm -f $MBD_FSIMAGE
+ fi
+
+ echo "Wrote $MBD_FILENAME (${left}k free)"
+}
+
+makeinstimage () {
+ imagename=$1
+ modlist=$(expandModuleSet "$2")
+ tmpdir=/tmp/instimage.dir.$$
+
+ rm -rf $tmpimage $tmpdir
+ mkdir -p $mntpoint $tmpdir
+
+ mkdir -p $tmpdir
+ (cd $INSTIMGTEMPLATE; find . | cpio --quiet -p $tmpdir)
+ if [ "$BUILDARCH" = "s390" -o "$BUILDARCH" = "s390x" ]; then
+ mkdir -p $KERNELROOT/lib/modules/misc
+ find $KERNELROOT/lib/modules/*/kernel/drivers/s390/ -name "*.ko" \
+ -exec cp -f {} $KERNELROOT/lib/modules/misc \;
+ fi
+ makemoduleball $tmpdir/modules "$modlist"
+ makeproductfile $tmpdir
+
+ echo "Running mkcramfs $CRAMBS $tmpdir $INSTIMGPATH/${imagename}2.img"
+ mkcramfs $CRAMBS $tmpdir /tmp/${imagename}2.img.$$
+ cp /tmp/${imagename}2.img.$$ $INSTIMGPATH/${imagename}2.img
+ size=$(ls -l $INSTIMGPATH/${imagename}2.img | awk '{print $5}')
+ size=$(expr $size / 1024)
+ echo "Wrote $INSTIMGPATH/${imagename}2.img (${size}k)..."
+ rm -rf $tmpdir
+}
+
+findloopdevice () {
+ if [ -z "$1" ]; then
+ echo "usage: findloopdevice image"
+ exit 1
+ fi
+
+ for devnum in 0 1 2 3 4 5 6 7 8; do
+ if losetup /dev/loop$devnum $1 2>/dev/null ; then break; fi
+ done
+ echo /dev/loop$devnum
+}
+
+makemainimage () {
+ imagename=$1
+ type=$2
+ mmi_tmpimage=/tmp/instimage.img.$$
+ mmi_mntpoint=/tmp/instimage.mnt.$$
+
+ rm -rf $mmi_tmpimage $mmi_mntpoint
+ mkdir $mmi_mntpoint
+
+ if [ $type = "ext2" ]; then
+ SIZE=$(du -sk $IMGPATH | awk '{ print int($1 * 1.1) }')
+ if [ -d $IMGPATH/usr/lib/anaconda-runtime ]; then
+ ERROR=$(du -sk $IMGPATH/usr/lib/anaconda-runtime | awk '{ print $1 }')
+ SIZE=$(expr $SIZE - $ERROR)
+ fi
+ dd if=/dev/zero bs=1k count=${SIZE} of=$mmi_tmpimage 2>/dev/null
+ mke2fs -q -F $mmi_tmpimage > /dev/null
+ tune2fs -c0 -i0 $mmi_tmpimage >/dev/null
+ mount -o loop $mmi_tmpimage $mmi_mntpoint
+
+ (cd $IMGPATH; find . | fgrep -v "./usr/lib/anaconda-runtime" |
+ cpio -H crc -o) | (cd $mmi_mntpoint; cpio -iumd)
+ makeproductfile $mmi_mntpoint
+ umount $mmi_mntpoint
+ rmdir $mmi_mntpoint
+ elif [ $type = "cramfs" ]; then
+ makeproductfile $IMGPATH
+ echo "Running mkcramfs $CRAMBS $IMGPATH $mmi_tmpimage"
+ mkcramfs $CRAMBS $IMGPATH $mmi_tmpimage
+ SIZE=$(expr `cat $mmi_tmpimage | wc -c` / 1024)
+ fi
+
+ cp $mmi_tmpimage $INSTIMGPATH/${imagename}.img
+ chmod 644 $INSTIMGPATH/${imagename}.img
+
+ echo "Wrote $INSTIMGPATH/${imagename}.img (${SIZE}k)"
+
+ rm $mmi_tmpimage
+}
+
+makedriverdisk () {
+ PADSIZE=""
+
+ while [ x$(echo $1 | cut -c1-2) = x"--" ]; do
+ if [ $1 = "--padsize" ]; then
+ PADSIZE=$2
+ shift; shift
+ continue
+ fi
+
+ echo "Unknown option passed to makedriverdisk"
+ exit 1
+ done
+
+ modlabel=$1
+ diskname=$2
+ modlist=$(expandModuleSet "$3")
+ diskpath=/tmp/makedriverdisk.$$
+
+ rm -rf $diskpath
+ mkdir -p $diskpath
+
+ makemoduleball --dd "$modlabel" $diskpath "$modlist"
+
+ size=$(expr 60 + $(du -sk $diskpath | awk '{print $1}'))
+ if [ $size -lt 57 ]; then
+ size=64
+ fi
+
+ dd if=/dev/zero of=/tmp/$diskname.img bs=1k count=$size 2> /dev/null
+ /sbin/mke2fs -q -F -i 4096 /tmp/$diskname.img > /dev/null 2>/dev/null
+ /sbin/tune2fs -c0 -i0 /tmp/$diskname.img >/dev/null
+ mkdir -p /tmp/mkdd.$$
+ mount -t ext2 -o loop /tmp/$diskname.img /tmp/mkdd.$$
+ rmdir /tmp/mkdd.$$/lost+found
+ (cd $diskpath; tar cSpf - .) | (cd /tmp/mkdd.$$; tar xSpf -)
+ DIE=""
+ diff -upr $diskpath /tmp/mkdd.$$ > /dev/null 2>&1
+ if [ $? != 0 ]; then
+ echo copy to disk image failed
+ ls -l /tmp/mkdd.$$
+ echo "disk size: $size"
+ ls -l $diskpath
+ DIE=1
+ fi
+ umount /tmp/mkdd.$$
+ rm -rf /tmp/mkdd.$$
+
+ if [ -n "$DIE" ]; then
+ kill -9 $$
+ fi
+
+ cp /tmp/${diskname}.img $IMAGEPATH/${diskname}.img
+ rm /tmp/${diskname}.img
+ rm -rf $diskpath
+
+ size=$(ls -l $IMAGEPATH/${diskname}.img | awk '{ print $5 }')
+ size=$(expr $size / 1024)
+
+ echo "Wrote $IMAGEPATH/${diskname}.img (${size}k)"
+ echo "${diskname}.img - ${modlabel}" >> $IMAGEPATH/README
+
+ if [ -n "$PADSIZE" ]; then
+ padfile $IMAGEPATH/${diskname}.img $PADSIZE
+ fi
+}
+
+# source the architecture specific mk-images file so we can call functions
+# in it
+if [ ${BUILDARCH} = s390x ]; then
+ # FIXME: this is a bad hack for s390, but better than copying for now
+ source $TOPDIR/mk-images.s390
+elif [ ${BUILDARCH} = i686 ]; then
+ source $TOPDIR/mk-images.i386
+else
+ source $TOPDIR/mk-images.${BUILDARCH}
+fi
+
+# Find the kernel, unpack it, and verify it
+vertag="BOOT"
+if [ "$BUILDARCH" = "ppc" -o "$BUILDARCH" = "ppc64" ]; then
+ arches="ppc64pseries ppc64 ppc64iseries ppc"
+elif [ "$BUILDARCH" = "i686" ]; then
+ arches="i386 i586 i686"
+else
+ arches="$BUILDARCH"
+fi
+foundakernel=""
+for KERNELARCH in $arches; do
+ for kernelvers in $vertag; do
+ kpackage=$($LATEST $KERNELPATH kernel-$kernelvers)
+ if [ ! -f "$kpackage" ]; then
+ echo "kernel-$kernelvers does not exist for $KERNELARCH -- using kernel package"
+ kpackage=$($LATEST $KERNELPATH kernel)
+ kernelvers=""
+ fi
+
+ if [ "$KERNELARCH" = "i586" -a ! -f "$kpackage" ]; then
+ echo "No i586 kernel, trying i686..."
+ KERNELARCH="i686"
+ kpackage=$($LATEST $KERNELPATH kernel)
+ fi
+
+ if [ ! -f "$kpackage" ]; then
+ echo "kernel doesn't exist for $KERNELARCH. skipping arch"
+ continue
+ fi
+
+ KERNELROOT=$KERNELBASE/$KERNELARCH
+ mkdir -p $KERNELROOT
+
+ foundakernel="yes"
+
+ ppackage=$($LATEST $KERNELPATH hwdata)
+ if [ ! -f "$ppackage" ]; then
+ ppackage=""
+ fi
+
+ version=$(rpm --nodigest --nosignature --qf '%{VERSION}-%{RELEASE}' -qp $kpackage)${kernelvers}
+ arch=$(rpm --nodigest --nosignature --qf '%{ARCH}\n' -qp $kpackage)
+ echo "unpacking $kpackage.$arch"
+
+ rpm2cpio $kpackage | (cd $KERNELROOT; cpio --quiet -iumd)
+# mv -f $KERNELROOT/usr/lib/bootdisk/lib $KERNELROOT/
+# mv -f $KERNELROOT/usr/lib/bootdisk/boot $KERNELROOT/
+# rm -rf $KERNELROOT/usr/lib/bootdisk
+ mkdir -p $KERNELROOT/lib/modules/misc
+ for kaddpackage in pcmcia
+ do
+ thepackage=$($LATEST $KERNELPATH kernel-${kaddpackage})
+ if [ -f $thepackage ]; then
+ echo "unpacking $thepackage.$arch"
+ rpm2cpio $thepackage | (cd $KERNELROOT; cpio --quiet -iumd)
+ fi
+ done
+ if [ ! -z $ppackage ]; then
+ rpm2cpio $ppackage | (cd $KERNELROOT; cpio --quiet -iumd etc/pcmcia/* ./etc/pcmcia/*)
+ fi
+
+ if [ ! -d "$KERNELROOT/lib/modules/$version" ]; then
+ echo "$KERNELROOT/lib/modules/$version is not a valid modules directory" 2>&1
+ exit 1
+ fi
+
+ if [ ! -f "$KERNELROOT/$KERNELDIR/${KERNELNAME}-$version" ]; then
+ echo "$KERNELROOT/$KERNELDIR/${KERNELNAME}-$version does not exist"
+ exit 1
+ fi
+
+ if [ -f $KERNELROOT/etc/pcmcia/config ]; then
+ # This gets everything mentioned in /etc/pcmcia/config. We probably
+ # want to do some module-info stuff here too
+ 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)
+ fi
+
+ allmods=$(find $KERNELROOT/lib/modules/$version -name *.ko)
+
+ rundepmod "$allmods" $MODDEPS
+ find $KERNELROOT/lib/modules/$version > $CACHE
+
+ # make the boot images
+ makeBootImages
+ done
+done
+
+# do some clean up before making the cramfs of the second stage
+rm -rf $INSTIMGTEMPLATE/usr/lib/anaconda-runtime $INSTIMGTEMPLATE/usr/lib/syslinux $IMGPATH/usr/lib/syslinux
+
+if [ -n "$foundakernel" ]; then
+ # make the second stage
+ find $KERNELBASE/*/lib/modules/ > $CACHE
+ makeSecondStage
+ rm -rf $KERNELBASE
+fi
+
+cd $TOPDIR
--- /dev/null
+#!/bin/bash
+
+ORIGDIR=`pwd`
+COMPONENT=""
+DEBUG=""
+
+if [ "$1" == "--debug" ]; then
+ DEBUG="--debug"
+ shift
+fi
+
+if [ "$1" == "--comp" ]; then
+ COMPONENT=$2
+ shift; shift
+fi
+
+if [ -z "$1" ]; then
+ echo "upd-instroot: updates instimage from a Red Hat RPMS directory"
+ echo "usage: $0 --comp <comp> <packagedir> [templatedir] [instroot]"
+ exit 1
+fi
+
+if [ ! -d $1 ]; then
+ if [ -z "$ARCH" ]; then
+ echo "ARCH must be set" >&2
+ exit 1
+ fi
+ LATEST="latest --arch $ARCH"
+fi
+
+PACKAGEDIR=$1
+
+if [ -z "$ARCH" ]; then
+ ARCH=`rpm --nodigest --nosignature -qp --qf "%{ARCH}" $PACKAGEDIR/anaconda-runtime*.rpm`
+fi
+
+if [ $ARCH = x86_64 -o $ARCH = s390x ]; then
+ LIBDIR=lib64
+else
+ LIBDIR=lib
+fi
+
+NEEDGR=yes
+
+prunePackageList() {
+ PACKAGEPATH=$1
+ PACKAGES="$2"
+
+ if [ -n "$LATEST" ]; then
+ $LATEST $PACKAGEPATH $PACKAGES
+ if [ $? != 0 ]; then
+ $LATEST $PACKAGEPATH $PACKAGES >&2
+ kill -9 $$
+ fi
+
+ return
+ fi
+
+ PATTERN=""
+ PACKAGEFILES=""
+ for PKG in $PACKAGES; do
+ PATTERN="${PATTERN:+${PATTERN}|}(^$PKG )"
+ PACKAGEFILES="$PACKAGEFILES $(ls $PACKAGEPATH/$PKG*{$ARCH,noarch}.rpm 2>/dev/null)"
+ done
+
+ # gtk+, enough said
+ PATTERN=$(echo $PATTERN | sed 's,[\+\*],\\&,g')
+
+ PACKAGEFILES=$(ls $PACKAGEFILES | sort -u)
+
+ rpm --nodigest --nosignature --qf "%{NAME} $PACKAGEPATH/%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm\n" \
+ -qp $PACKAGEFILES | egrep "$PATTERN" | sed 's/.* //'
+}
+
+expandPackageSet() {
+ RPMS=$1
+ PKGDEST=$2
+ KEEPFILES=$3
+
+ [ -d $PKGDEST ] || die "ERROR: directory missing: $PKGDEST"
+ for n in $RPMS; do
+ [ -n "$DEBUG" ] && echo -ne "\rExpanding packages..." $(basename $n)
+ if [ "$(rpm --nosignature --nodigest -qp --qf '%{NAME}' $n)" = "glibc-misc" ] ; then
+ TZDATA=$n
+ fi
+ rpm2cpio $n | (cd $PKGDEST; cpio -E $KEEPFILES --quiet -iumd)
+ [ -n "$DEBUG" ] && echo -ne "\rExpanding packages..." "$(basename $n | sed 's/./ /g')"
+ done
+ pushd $PKGDEST/$LIBDIR >/dev/null 2>&1
+ if [ -d obsolete/linuxthreads/ ]; then
+ for x in obsolete/linuxthreads/*-* ; do
+ lib_base=$(basename $x | cut -d- -f1)
+ rm -f ./$lib_base[.-]*
+ mv -f obsolete/linuxthreads/$lib_base[.-]* .
+ done
+ rmdir obsolete/linuxthreads obsolete
+ fi
+ popd >/dev/null 2>&1
+}
+
+die () {
+ echo "$@"
+ echo "Aborting instroot creation..."
+ exit 1
+}
+
+if [ -z "$2" ]; then
+ DEST=/tmp/upd-instroot
+else
+ DEST=$2
+fi
+
+if [ -z "$3" ]; then
+ DESTGR=/tmp/upd-instroot
+else
+ DESTGR=$3
+fi
+
+rm -rf $DEST $DESTGR
+mkdir -p $DEST
+mkdir -p $DESTGR
+
+# glibc-misc for timezone data (was tzdata)
+# libtermcap
+
+PACKAGES="acl anaconda anaconda-runtime ash attr
+ bash beecrypt bogl bogl-bterm busybox-anaconda bzip2 bzip2-libs
+ device-mapper dmapi dosfstools
+ e2fsprogs elfutils-libelf expat
+ fedora-logos
+ glib2 glibc glibc-misc
+ hdparm hwdata
+ jfsutils
+ kudzu
+ libgcc libselinux libsepol libstdc++ libxml2 lvm2
+ mdadm
+ ncurses neon newt
+ openssl
+ parted pciutils policy policycoreutils popt procps python python-booty python-libs python-libxml2 python-parted python-rhpl python-rpm python-urlgrabber python-xf86config
+ readline reiserfsprogs rpm rpm-lib
+ sed setup slang sqlite
+ util-linux
+ xfsdump xfsprogs
+ zlib
+ X11 X11-tools"
+
+if [ $ARCH = i686 -o $ARCH = x86_64 ]; then
+ PACKAGES="$PACKAGES pcmcia-cs kernel-utils"
+fi
+
+if [ $ARCH = ia64 ]; then
+ PACKAGES="$PACKAGES elilo"
+fi
+
+if [ $ARCH = s390 -o $ARCH = s390x ]; then
+ PACKAGES="$PACKAGES s390utils binutils libgcc tcp_wrappers
+ sed net-tools xinetd openssl openssh openssh-server coreutils
+ login initscripts XFree86-xauth bash portmap pam
+ telnet-server login mount grep modutils gawk
+ XFree86-libs strace xorg-x11-xauth xorg-x11-libs"
+fi
+
+if [ $ARCH = ppc -o $ARCH = ppc64 ]; then
+ PACKAGES="$PACKAGES kernel-pcmcia-cs pdisk yaboot hfsutils"
+fi
+
+# xpm is missing
+
+# Some packages are listed twice, but that's okay
+#
+# The packages in this list are needed for the graphical installer to run
+#
+# Extra stuff we want for rescue mode should go in PACKAGESRESCUE
+#
+PACKAGESGR="anaconda X11-libs libpng X11-fonts-75dpi
+ X11-fonts-75dpi-ISO8859-2 gtk+2 libglade2
+ X11-fonts-75dpi-ISO8859-9
+ X11-fonts-100dpi fonts-ISO8859-2 fonts-ISO8859-9
+ X11-xfs e2fsprogs coreutils glibc glibc-misc
+ popt specspo util-linux rpm rpm-libs
+ procps bash cpio gpm python-pygtk-libglade
+ X11 Xconfigurator python-pygtk gdk-pixbuf
+ X11-fonts-KOI8-R X11-fonts-75dpi-KOI8-R pam
+ reiserfs-utils atk pango freetype python-gnome-canvas
+ libgnomecanvas libart_lgpl libgcc libacl libattr libstdc++ expat
+ anaconda-images anaconda-help X11-fonts-base
+ ttfonts-ko taipeifonts X11-fonts-75dpi-ISO8859-15 python-rhpl
+ system-config-keyboard Xft fontconfig gtk2-engines gnome-themes
+ ttfonts-ja ttfonts-zh_TW bitmap-fonts-cjk urw-fonts fonts-arabic
+ comps-extras X11-libs convertdb1 fonts-bengali
+ vnc-server libjpeg tcp_wrappers system-config-date
+ xfsprogs xfsdump dmapi attr acl policy policycoreutils
+ selinux-policy-targeted ttfonts-zh_CN redhat-artwork audit-libs
+ bogl-bterm
+ prelink redhat-logos fedora-logos
+ ttfonts-ta ttfonts-bn ttfonts-gu ttfonts-hi ttfonts-pa bogl-devel
+ fonts-japanese fonts-chinese fonts-korean fonts-indic
+ fonts-gujarati fonts-hindi fonts-punjabi fonts-tamil"
+
+#
+# stuff ONLY included for rescue mode
+#
+# these packages are combined with the PACKAGES and PACKAGESGR for big stage 2
+#
+PACKAGESRESCUE="bzip2 bzip2-libs dump
+ findutils ftp gzip iputils joe krb5-libs less man
+ modutils mtools mt-st mtr net-tools open
+ openssh openssh-clients pciutils rsh traceroute tar"
+
+if [ $ARCH = i386 ]; then
+ PACKAGESRESCUE="$PACKAGESRESCUE"
+fi
+
+# turn off options we dont want, ie. set package list to something harmless
+if [ -z "$NEEDGR" ]; then
+ PACKAGESGR="bash"
+ PACKAGESRESCUE="bash"
+fi
+
+#
+# add bootloader for particular arch
+#
+if [ $ARCH = sparc ]; then
+ PACKAGESGR="$PACKAGESGR tilo silo"
+fi
+
+if [ $ARCH = i686 -o $ARCH = x86_64 ]; then
+ PACKAGESGR="$PACKAGESGR syslinux memtest86+"
+fi
+
+if [ $ARCH = alpha ]; then
+ PACKAGESGR="$PACKAGESGR aboot"
+fi
+
+if [ $ARCH = ia64 ]; then
+ PACKAGESGR="$PACKAGESGR elilo"
+fi
+
+if [ $ARCH = ppc ]; then
+ PACKAGESGR="$PACKAGESGR fbset yaboot ppc64-utils"
+fi
+
+#
+# KEEPFILE is all files to keep from the packages in PACKAGES
+#
+# This is what is present in http, ftp, and hard drive installs, and is
+# supposed to be a small image because these methods keep it in RAM.
+#
+# It also is the base on which the other install images build on top of,
+# so if something is needed by all images it should go here
+#
+KEEPFILE=/tmp/keepfile.$$
+
+cat > $KEEPFILE <<EOF
+boot/efi/EFI/redhat/elilo.efi
+bin/ash
+bin/fdisk*
+bin/mkfs*
+bin/sed
+etc/group
+etc/passwd
+etc/protocols
+etc/services
+etc/selinux/targeted/booleans
+etc/selinux/targeted/policy/policy.*
+etc/selinux/targeted/contexts/files/file_contexts
+etc/security/selinux/policy.*
+etc/security/selinux/file_contexts
+$LIBDIR/libc[-.]*
+$LIBDIR/libm[-.]*
+$LIBDIR/libpthread*
+$LIBDIR/librt[-.]*
+$LIBDIR/ld*.so*
+$LIBDIR/libblkid*
+$LIBDIR/libcom_err*
+$LIBDIR/libcrypt*
+$LIBDIR/libdevmapper*
+$LIBDIR/libdl*
+$LIBDIR/libe2p*
+$LIBDIR/libext2fs*
+$LIBDIR/liblvm-10.so*
+$LIBDIR/libgcc_s*
+$LIBDIR/libnsl*
+$LIBDIR/libnss_dns*
+$LIBDIR/libnss_files*
+$LIBDIR/libresolv*
+$LIBDIR/libselinux*
+$LIBDIR/libsepol*
+$LIBDIR/libss*
+$LIBDIR/libtermcap*
+$LIBDIR/libhandle*
+$LIBDIR/libattr*
+$LIBDIR/libdm*
+$LIBDIR/libutil*
+$LIBDIR/libuuid*
+sbin/badblocks
+sbin/busybox.anaconda
+sbin/clock
+sbin/debugfs
+sbin/e2fsck
+sbin/e2fsadm
+sbin/e2label
+sbin/fsck.ext2
+sbin/fsck.ext3
+sbin/fsck.jfs
+sbin/fsck.xfs
+sbin/fdisk
+sbin/hdparm
+sbin/hwclock
+sbin/jfs_tune
+sbin/ldconfig
+sbin/lvm*
+sbin/mdadm
+sbin/mkdosfs
+sbin/mke2fs
+sbin/mkfs.ext2
+sbin/mkfs.ext3
+sbin/mkfs.jfs
+sbin/mkfs.xfs
+sbin/mkfs.msdos
+sbin/mkfs.vfat
+sbin/mkreiserfs
+sbin/mkraid
+sbin/mkswap
+sbin/parted
+sbin/pdisk
+sbin/probe
+sbin/resize2fs
+sbin/sfdisk
+sbin/tune2fs
+sbin/xfsdump
+sbin/xfsrestore
+sbin/xfs_repair
+usr/sbin/xfs_db
+usr/sbin/xfs_check
+usr/sbin/xfs_copy
+usr/X11R6/share/Xconfigurator/MonitorsDB
+usr/bin/python
+usr/bin/python?.?
+usr/bin/hmount
+usr/bin/humount
+usr/bin/hcopy
+usr/bin/hattrib
+usr/bin/hformat
+usr/lib/anaconda-runtime/*
+usr/lib/anaconda/*
+usr/lib/anaconda/installclasses/*
+usr/lib/anaconda/textw/*
+usr/$LIBDIR/bogl/font.bgf.gz
+usr/lib/booty/*
+usr/kerberos/$LIBDIR/libkrb5.so*
+usr/kerberos/$LIBDIR/libkrb5support.so*
+usr/kerberos/$LIBDIR/libk5crypto.so*
+usr/kerberos/$LIBDIR/libcom_err.so*
+usr/kerberos/$LIBDIR/libgssapi_krb5.so*
+usr/$LIBDIR/libkrb5.so*
+usr/$LIBDIR/libkrb5support.so*
+usr/$LIBDIR/libk5crypto.so*
+usr/$LIBDIR/libcom_err.so*
+usr/$LIBDIR/libgssapi_krb5.so*
+usr/$LIBDIR/gconv/ISO8859-1.so
+usr/$LIBDIR/gconv/gconv-modules
+usr/$LIBDIR/libbeecrypt*
+usr/$LIBDIR/libexpat*
+usr/$LIBDIR/libglib*
+usr/$LIBDIR/libgmodule*
+usr/$LIBDIR/libgobject*
+usr/$LIBDIR/libgthread*
+usr/$LIBDIR/libssl*
+usr/$LIBDIR/libcrypto*
+usr/$LIBDIR/libbz2*
+usr/$LIBDIR/libelf*
+usr/$LIBDIR/libncurses*
+usr/$LIBDIR/libnewt*
+usr/$LIBDIR/libparted*
+usr/$LIBDIR/libpopt*
+usr/$LIBDIR/libpython*
+usr/$LIBDIR/libneon*
+usr/$LIBDIR/libsqlite3*
+usr/$LIBDIR/librpm-*4.?.so*
+usr/$LIBDIR/librpmbuild-*4.?.so*
+usr/$LIBDIR/librpmdb*4.?.so*
+usr/$LIBDIR/librpmio*4.?.so*
+usr/$LIBDIR/libslang*
+usr/$LIBDIR/libstdc++.so.6*
+usr/$LIBDIR/libxml2.so*
+usr/$LIBDIR/libz.*
+usr/$LIBDIR/libbogl.so*
+usr/$LIBDIR/libreadline*
+usr/$LIBDIR/python?.?/*
+usr/$LIBDIR/python?.?/site-packages/libxml2*
+usr/$LIBDIR/python?.?/site-packages/*kudzu*
+usr/$LIBDIR/python?.?/site-packages/rpmmodule.so
+usr/$LIBDIR/python?.?/site-packages/partedmodule.so
+usr/$LIBDIR/python?.?/site-packages/ixf86configmodule.so
+usr/$LIBDIR/python?.?/site-packages/xf86config.py
+usr/$LIBDIR/python?.?/site-packages/rhpl
+usr/share/locale/*
+usr/lib/python?.?/site-packages/urlgrabber/*
+usr/lib/rpm/macros
+usr/lib/rpm/rpmpopt
+usr/lib/rpm/rpmrc
+usr/lib/yaboot/addnote
+usr/lib/yaboot/ofboot
+usr/lib/yaboot/yaboot
+usr/libexec/convertdb1
+usr/share/locale/*/LC_MESSAGES/anaconda.mo
+usr/share/locale/locale.alias
+usr/sbin/anaconda
+usr/sbin/ddcprobe
+usr/sbin/dmidecode
+usr/sbin/mkofboot
+usr/sbin/ofpath
+usr/sbin/ybin
+usr/sbin/load_policy
+usr/sbin/lvm
+usr/sbin/build-locale-archive
+usr/share/anaconda/locale-list
+usr/share/anaconda/anaconda.conf
+usr/share/terminfo/b/bterm
+usr/share/terminfo/l/linux
+usr/share/terminfo/v/vt100
+usr/share/terminfo/v/vt100-nav
+usr/share/hwdata/pcitable
+usr/share/hwdata/pci.ids
+usr/share/hwdata/Cards
+usr/share/hwdata/MonitorsDB
+usr/share/rhpl/extramodes
+usr/share/rhpl/vesamodes
+EOF
+
+if [ $ARCH = s390 -o $ARCH = s390x ]; then
+ cat >> $KEEPFILE <<EOF
+usr/share/terminfo/a/ansi
+usr/share/terminfo/d/dumb
+usr/share/terminfo/k/kterm
+usr/share/terminfo/s/screen
+usr/share/terminfo/v/vt100
+usr/share/terminfo/v/vt100-nav
+usr/share/terminfo/v/vt102
+usr/share/terminfo/x/xterm
+usr/share/terminfo/x/xterm-color
+usr/bin/strace
+usr/bin/ldd
+usr/sbin/chroot
+usr/sbin/sshd
+usr/sbin/glibc_post_upgrade
+usr/sbin/in.telnetd
+usr/sbin/xinetd
+sbin/cmsfslst
+sbin/cmsfscat
+sbin/busybox.anaconda
+sbin/ifconfig
+sbin/route
+sbin/portmap
+sbin/fdasd
+sbin/dasdfmt
+sbin/swapon
+sbin/swapoff
+sbin/mkswap
+bin/bash
+bin/dd
+bin/gawk
+bin/mount
+bin/umount
+bin/mknod
+bin/sleep
+bin/login
+bin/cat
+bin/chmod
+bin/sort
+$LIBDIR/libpam.so*
+$LIBDIR/libdl.so*
+$LIBDIR/libdl-*.so*
+usr/$LIBDIR/libz.so*
+$LIBDIR/libnsl.so*
+$LIBDIR/libnsl-*.so*
+$LIBDIR/libnss*
+$LIBDIR/libutil.so*
+$LIBDIR/libutil-*.so*
+$LIBDIR/libcrypt*
+$LIBDIR/libc.so*
+$LIBDIR/libc-*so*
+lib/ld*.so*
+$LIBDIR/ld*.so*
+$LIBDIR/libresolv.so*
+$LIBDIR/libresolv-*.so*
+$LIBDIR/libvtoc*.so*
+lib/modules/ibm/*
+etc/xinetd.conf
+etc/pam.d/sshd
+etc/pam.d/other
+etc/security/limits.conf
+etc/security/pam_env.conf
+lib/security
+$LIBDIR/security/pam_*
+usr/$LIBDIR/libwrap.so*
+usr/X11R6/$LIBDIR/libXmuu.so*
+usr/X11R6/$LIBDIR/libX11.so*
+usr/X11R6/$LIBDIR/libXext.so*
+usr/X11R6/$LIBDIR/libXxf86misc.so*
+usr/X11R6/bin/xauth
+EOF
+fi
+
+#
+# KEEPFILEGR is all files to keep from the packages in PACKAGESGR
+#
+# This defines the files in addition to KEEPFILE that make up the install
+# images for NFS and CD/DVD based installs. This image is not loaded into
+# memory so it can be considerably larger.
+#
+# The rescue mode of anaconda uses these files as well as those defined
+# by KEEPFILERESCUE below. The total size of this image should be
+# under the size of the miniature CD used for the rescue CD (around 68MB).
+#
+KEEPFILEGR=/tmp/keepfilegr.$$
+cp $KEEPFILE $KEEPFILEGR
+cat >> $KEEPFILEGR <<EOF
+boot/efi/EFI/redhat/elilo.efi
+boot/memtest86*
+bin/bash
+bin/cat
+bin/chmod
+bin/cp
+bin/cpio
+bin/dd
+bin/df
+bin/du
+bin/ln
+bin/ls
+bin/mkdir
+bin/mv
+bin/ps
+bin/rm
+bin/rpm
+bin/touch
+boot/*.b
+boot/bootlx
+etc/fb.modes
+etc/gtk-2.0/gtkrc*
+etc/im_palette.pal
+etc/imrc
+etc/man.config
+etc/pango/*
+etc/fonts/*
+etc/prelink.conf
+etc/rpm/macros.prelink
+$LIBDIR/libacl*
+$LIBDIR/libattr*
+$LIBDIR/libaudit*.so*
+$LIBDIR/libgcc*
+$LIBDIR/libnss_dns*
+$LIBDIR/libpam*
+$LIBDIR/libproc*
+sbin/addRamDisk
+sbin/addSystemMap
+sbin/debugfs
+sbin/e2fsck
+sbin/e2label
+sbin/reiserfsck
+sbin/fsck
+sbin/fsck.ext2
+sbin/fsck.ext3
+sbin/fsck.jfs
+sbin/fsck.reiserfs
+sbin/parted
+sbin/silo
+sbin/tune2fs
+usr/X11R6/bin/XFree86
+usr/X11R6/bin/Xorg
+usr/X11R6/bin/setxkbmap
+usr/X11R6/bin/xsetroot
+usr/X11R6/lib/X11/XKeysymDB
+usr/X11R6/lib/X11/fonts/misc/6x13*
+usr/X11R6/lib/X11/fonts/misc/fonts*
+usr/X11R6/lib/X11/fonts/misc/cursor*
+usr/X11R6/lib/X11/fonts/misc/olcursor*
+usr/X11R6/lib/X11/fonts/Type1/l047013t*
+usr/X11R6/lib/X11/fonts/Type1/*
+usr/X11R6/lib/X11/locale/*
+usr/X11R6/lib/X11/rgb*
+usr/X11R6/lib/X11/xkb/*
+usr/X11R6/lib/X11/xserver/SecurityPolicy
+usr/X11R6/$LIBDIR/libICE*
+usr/X11R6/$LIBDIR/libSM*
+usr/X11R6/$LIBDIR/libXaw.so*
+usr/X11R6/$LIBDIR/libX11*
+usr/X11R6/$LIBDIR/libXcursor*
+usr/X11R6/$LIBDIR/libXext*
+usr/X11R6/$LIBDIR/libXfixes*
+usr/X11R6/$LIBDIR/libXft*
+usr/X11R6/$LIBDIR/libXi*
+usr/X11R6/$LIBDIR/libxkbfile*
+usr/X11R6/$LIBDIR/libXmu*
+usr/X11R6/$LIBDIR/libXpm*
+usr/X11R6/$LIBDIR/libXrandr*
+usr/X11R6/$LIBDIR/libXrender*
+usr/X11R6/$LIBDIR/libXt*
+usr/X11R6/$LIBDIR/libXxf86misc*
+usr/X11R6/$LIBDIR/modules/*
+usr/X11R6/share/Xconfigurator/pixmaps/*
+usr/bin/chattr*
+usr/bin/fc-cache
+usr/bin/gtk-query*
+usr/bin/gdk-pixbuf-query-loaders*
+usr/bin/head
+usr/bin/lsattr*
+usr/bin/maketilo
+usr/bin/mini-wm
+usr/bin/pango*
+usr/bin/syslinux
+usr/bin/mkzimage
+usr/bin/tac
+usr/bin/tail
+usr/bin/tilo
+usr/bin/uniq
+usr/bin/Xvnc
+usr/bin/vncconfig
+usr/bin/vncpasswd
+usr/bin/reduce-font
+usr/bin/bdftobogl
+usr/lib/anaconda/iw
+usr/lib/bogl/font.bdf.gz
+usr/$LIBDIR/gconv/*
+usr/$LIBDIR/gdk-pixbuf/loaders/*png*
+usr/$LIBDIR/gdk-pixbuf/loaders/*la*
+usr/$LIBDIR/gtk-2.0/*/engines/libclearlooks.so
+usr/$LIBDIR/gtk-2.0/*/loaders/*png*
+usr/$LIBDIR/gtk-2.0/*/loaders/*la*
+usr/$LIBDIR/gtk-2.0/immodules/
+usr/$LIBDIR/libImlib*
+usr/$LIBDIR/libXft*
+usr/$LIBDIR/libart*
+usr/$LIBDIR/libatk*
+usr/$LIBDIR/libaudio*
+usr/$LIBDIR/libesd*
+usr/$LIBDIR/libfontconfig*
+usr/$LIBDIR/libfreetype*
+usr/$LIBDIR/libgdk*
+usr/$LIBDIR/libglade*
+usr/$LIBDIR/libgnomecanvas*
+usr/$LIBDIR/libgnomeui*
+usr/$LIBDIR/libgpm*
+usr/$LIBDIR/libgtk*
+usr/$LIBDIR/libjpeg*
+usr/$LIBDIR/libpango*
+usr/$LIBDIR/libpng.so.3*
+usr/$LIBDIR/libpng12.so*
+usr/$LIBDIR/libstdc++.so.*
+usr/$LIBDIR/libwrap*
+usr/$LIBDIR/pango/*
+usr/$LIBDIR/python?.?/site-packages/gtk*/gtk/*
+usr/$LIBDIR/rpm/rpmpopt
+usr/lib/syslinux/*
+usr/lib/yaboot/*
+usr/sbin/chroot
+usr/sbin/ddcprobe
+usr/sbin/fbset
+usr/sbin/prelink
+usr/sbin/smartctl
+usr/share/anaconda/*
+usr/share/icons/default/*
+usr/share/icons/gnome/cursors/*
+usr/share/icons/gnome/*/stock/*
+usr/share/icons/gnome/index.theme
+usr/share/fonts/default/Type1/n019003l*
+usr/share/fonts/default/Type1/n019004l*
+usr/share/fonts/default/Type1/n019023l*
+usr/share/fonts/default/Type1/n019024l*
+usr/share/fonts/default/Type1/n021003l*
+usr/share/fonts/default/Type1/n021004l*
+usr/share/fonts/default/Type1/n021023l*
+usr/share/fonts/default/Type1/n021024l*
+usr/share/fonts/korean/TrueType/dotum.ttf
+usr/share/fonts/japanese/TrueType/kochi-gothic-subst.ttf
+usr/share/fonts/chinese/TrueType/gbsn00lp.ttf
+usr/share/fonts/chinese/TrueType/bsmi00lp.ttf
+usr/share/fonts/bengali/MuktiNarrow.ttf
+usr/share/fonts/arabic/KacstFarsi.ttf
+usr/share/fonts/arabic/KacstQura.ttf
+usr/share/fonts/tamil/lohit_ta.ttf
+usr/share/fonts/gujarati/lohit_gu.ttf
+usr/share/fonts/bengali/lohit_bn.ttf
+usr/share/fonts/hindi/lohit_hi.ttf
+usr/share/fonts/panjabi/lohit_pa.ttf
+usr/share/fonts/punjabi/lohit_pa.ttf
+usr/share/locale/*/LC_MESSAGES/anaconda.mo
+usr/share/locale/*/LC_MESSAGES/system-config-date.mo
+usr/share/locale/*/LC_MESSAGES/redhat-dist.mo
+usr/share/locale/*/LC_MESSAGES/system-config-keyboard.mo
+usr/share/locale/*/LC_MESSAGES/gtk20.mo
+usr/share/locale/*/LC_MESSAGES/libc.mo
+usr/share/locale/*/LC_MESSAGES/rhpl.mo
+usr/share/locale/*/LC_MESSAGES/parted.mo
+usr/share/pixmaps/comps/*.png
+usr/share/pixmaps/gnome-default-dlg.png
+usr/share/pixmaps/gnome-error.png
+usr/share/pixmaps/gnome-info.png
+usr/share/pixmaps/gnome-question.png
+usr/share/pixmaps/gnome-warning.png
+usr/share/pixmaps/no.xpm
+usr/share/pixmaps/yes.xpm
+usr/share/ppc64-utils/zImage.lds
+usr/share/system-config-keyboard/*
+usr/share/terminfo/l/linux
+usr/share/terminfo/x/xterm
+usr/share/terminfo/v/vt100
+usr/share/terminfo/v/vt100-nav
+usr/share/themes/Clearlooks/gtk-2.0/*
+usr/share/themes/Clearlooks/index.theme
+usr/share/vte/termcap/xterm
+usr/share/zoneinfo/zone.tab
+EOF
+
+TIMEZONES="
+usr/share/zoneinfo/Africa
+usr/share/zoneinfo/America
+usr/share/zoneinfo/Antarctica
+usr/share/zoneinfo/Arctic
+usr/share/zoneinfo/Asia
+usr/share/zoneinfo/Atlantic
+usr/share/zoneinfo/Australia
+usr/share/zoneinfo/Canada
+usr/share/zoneinfo/Europe
+usr/share/zoneinfo/Indian
+usr/share/zoneinfo/Japan
+usr/share/zoneinfo/Mideast
+usr/share/zoneinfo/Pacific
+usr/share/zoneinfo/US
+"
+
+# sparc needs 100dpi fonts as well, otherwise
+# things look ugly
+
+if [ $ARCH = sparc ]; then
+ cat >> $KEEPFILEGR <<-EOF
+usr/X11R6/lib/X11/fonts/100dpi/cour*
+usr/X11R6/lib/X11/fonts/100dpi/helv*
+usr/X11R6/lib/X11/fonts/100dpi/tim*
+usr/X11R6/lib/X11/fonts/100dpi/fonts*
+usr/share/fonts/ISO8859-2/100dpi/cour*
+usr/share/fonts/ISO8859-2/100dpi/helv*
+usr/share/fonts/ISO8859-2/100dpi/tim*
+usr/share/fonts/ISO8859-2/100dpi/fonts*
+EOF
+fi
+
+#
+# KEEPFILERESCUE is all files to keep from the packages in PACKAGESRESCUE
+#
+# This defines the files in addition to KEEPFILE and KEEPFILEGR that make up
+# the install images for NFS and CD/DVD based rescue mode installs. This
+# image is not loaded into memory so it can be considerably larger.
+#
+# NOTE: hd, ftp, and http rescue mode use and image based on KEEPFILE since
+# it has to be much smaller due to memory usage.
+#
+KEEPFILERESCUE=/tmp/keepfilerescue.$$
+cat > $KEEPFILERESCUE <<EOF
+bin/gunzip
+bin/gzip
+bin/mt
+bin/ping
+bin/sync
+bin/tar
+bin/zcat
+etc/joe/*
+sbin/arp
+sbin/depmod
+sbin/dump
+sbin/ifconfig
+sbin/insmod
+sbin/lsmod
+sbin/lspci
+sbin/modinfo
+sbin/modprobe
+sbin/netstat
+sbin/restore
+sbin/rrestore
+sbin/rmmod
+sbin/route
+usr/bin/bunzip2
+usr/bin/bzcat
+usr/bin/bzip2
+usr/bin/emacs
+usr/bin/find
+usr/bin/ftp
+usr/bin/jmacs
+usr/bin/joe
+usr/bin/jpico
+usr/bin/less
+usr/bin/mattrib
+usr/bin/mbadblocks
+usr/bin/mcd
+usr/bin/mcopy
+usr/bin/mdel
+usr/bin/mdeltree
+usr/bin/mdir
+usr/bin/mdu
+usr/bin/mformat
+usr/bin/minfo
+usr/bin/mlabel
+usr/bin/mmd
+usr/bin/mmount
+usr/bin/mmove
+usr/bin/mpartition
+usr/bin/mrd
+usr/bin/mread
+usr/bin/mren
+usr/bin/mshowfat
+usr/bin/mtools
+usr/bin/mtype
+usr/bin/mzip
+usr/bin/open
+usr/bin/rcp
+usr/bin/rlogin
+usr/bin/rsh
+usr/bin/scp
+usr/bin/sftp
+usr/bin/shred
+usr/bin/ssh
+usr/bin/termidx
+usr/bin/xargs
+usr/kerberos/$LIBDIR/libgssapi*
+usr/kerberos/$LIBDIR/libkrb5*
+usr/kerberos/$LIBDIR/libk5crypto*
+usr/kerberos/$LIBDIR/libcom_err*
+usr/sbin/mtr
+usr/sbin/traceroute
+EOF
+
+echo "Assembling package list..."
+RPMS=$(prunePackageList $PACKAGEDIR "$PACKAGES")
+[ -n "$DEBUG" ] && echo "RPMS are $RPMS"
+RPMSGR=$(prunePackageList $PACKAGEDIR "$PACKAGESGR $PACKAGESRESCUE")
+[ -n "$DEBUG" ] && echo "RPMSGR are $RPMSGR"
+
+rm -rf $DEST; mkdir -p $DEST/usr/sbin
+rm -rf $DESTGR; mkdir -p $DESTGR/usr/sbin $DESTGR/var/lib $DESTGR/boot
+ln -s /tmp $DESTGR/var/lib/xkb
+
+#
+# concat KEEPFILEGR and KEEPFILERESCUE lists
+#
+cat $KEEPFILERESCUE >> $KEEPFILEGR
+
+#
+# filter paths in keepfile lists for use by cpio
+#
+for file in $KEEPFILE $KEEPFILEGR; do
+ cat $file | awk '{print $1 "\n./" $1}' > $file-
+ mv -f $file- $file
+done
+
+echo "Expanding text packages..."
+expandPackageSet "$RPMS" $DEST $KEEPFILE
+
+(cd $DEST; tar cSpf - .) | (cd $DESTGR; tar xSpf -)
+
+echo "Expanding graphical packages..."
+expandPackageSet "$RPMSGR" $DESTGR $KEEPFILEGR
+
+echo "retrieving timezones"
+TZDIR=/tmp/glibc-timezone-$$
+mkdir -p $TZDIR/usr/share/zoneinfo
+rpm2cpio $TZDATA | (cd $TZDIR; cpio --quiet -iumd usr/share/zoneinfo ./usr/share/zoneinfo ./usr/share/zoneinfo/* usr/share/zoneinfo/*)
+[ $? = 0 ] || die "ERROR: Unable to expand timezone data ($TZDATA)"
+(cd $TZDIR; tar cSpf - $TIMEZONES) | (cd $DEST; tar xSpf -)
+(cd $TZDIR; tar cSpf - $TIMEZONES) | (cd $DESTGR; tar xSpf -)
+
+chown -R root:root $DEST $DESTGR
+chmod -R a+rX-w $DEST $DESTGR
+if [ $ARCH = s390 -o $ARCH = s390x ]; then
+ for i in $DEST $DESTGR; do
+ mv $i/bin/sed $i/bin/sed_save
+ mv $i/bin/sort $i/bin/sort_save
+ done
+fi
+
+# change mtimes to 0 (to match what happens on the cramfs)
+for p in $DEST $DESTGR; do
+ if [ -x /usr/bin/runroot -a -n "$COMPONENT" ]; then
+ runroot $COMPONENT --onlyone --arch $ARCH "cd $p\; usr/lib/anaconda-runtime/fixmtime.py $DEBUG $p"
+ else
+ $p/usr/lib/anaconda-runtime/fixmtime.py $DEBUG $p
+ fi
+done
+
+# Remove locales unused during the install
+cat $DESTGR/usr/lib/anaconda/lang-table* | awk '
+{ gsub("-", "", $4);
+ print $4;
+ print gensub(/\..*$/,"","",$4);
+ print gensub(/_.*$/,"","",$4);
+ if (split ($4, a, ".") > 1) {
+ print gensub(/\..*$/,tolower("." a[2]),"",$4);
+ };
+ gsub("-", "", $7);
+ print $7;
+ print gensub(/\..*$/,"","",$7);
+ print gensub(/_.*$/,"","",$7);
+ if (split ($7, a, ".") > 1) {
+ print gensub(/\..*$/,tolower("." a[2]),"",$7);
+ };
+}
+' | LC_ALL=C sort -u > $DESTGR/locales
+# lib not used below
+for p in share; do (
+cd $DESTGR/usr/$p/locale && {
+ls | grep -v locale.alias | LC_ALL=C sort > $DESTGR/locales.list
+LC_ALL=C comm -13 $DESTGR/locales $DESTGR/locales.list | xargs rm -rf
+}
+); done
+rm -f $DESTGR/locales $DESTGR/locales.list
+
+# now, create a locale archive and nuke the locale dirs since
+# that ends up taking less space
+#for p in $DEST $DESTGR; do
+# echo "Building locale archive"
+# if [ -x /usr/bin/runroot -a -n "$COMPONENT" ]; then
+# runroot $COMPONENT --onlyone --arch $ARCH "/usr/sbin/chroot $p /usr/sbin/build-locale-archive"
+# else
+# /usr/sbin/chroot $p /usr/sbin/build-locale-archive
+# fi
+# mv $p/usr/lib/locale/locale-archive $p/usr/lib/locale-archive
+# rm -rf $p/usr/lib/locale/*
+# rm -f $p/usr/sbin/build-locale-archive
+# mv $p/usr/lib/locale-archive $p/usr/lib/locale/locale-archive
+#done
+
+# Remove unneeded XFree86 modules
+rm -rf $DESTGR/usr/X11R6/$LIBDIR/modules/dri
+rm -f $DESTGR/usr/X11R6/$LIBDIR/modules/libscanpci.a
+rm -f $DESTGR/usr/X11R6/$LIBDIR/modules/libxf1bpp.a
+rm -f $DESTGR/usr/X11R6/$LIBDIR/modules/fonts/libspeedo.a
+rm -f $DESTGR/usr/X11R6/$LIBDIR/modules/drivers/linux/v4l_drv.o
+rm -f $DESTGR/usr/X11R6/$LIBDIR/modules/extensions/libdri.a
+rm -f $DESTGR/usr/X11R6/$LIBDIR/modules/extensions/libxtrap.a
+rm -f $DESTGR/usr/X11R6/$LIBDIR/modules/extensions/librecord.a
+
+rm -f $DESTGR/usr/X11R6/$LIBDIR/modules/extensions/lib{GLcore,glx,pex5}*
+
+# fixup joe links
+ln -fs jpicorc $DESTGR/etc/joe/picorc
+ln -fs jmacsrc $DESTGR/etc/joe/emacsrc
+ln -fs jmacs $DESTGR/usr/bin/emacs
+ln -fs jpico $DESTGR/usr/bin/pico
+
+echo "Creating nsswitch.conf"
+cat > $DEST/etc/nsswitch.conf <<EOF
+# munged nsswitch.conf with just what anaconda needs
+# created by upd-instroot
+#
+passwd: files
+shadow: files
+group: files
+hosts: files dns
+ethers: files
+netmasks: files
+networks: files
+protocols: files
+rpc: files
+services: files
+netgroup: files
+automount: files
+aliases: files
+EOF
+
+cp $DEST/etc/nsswitch.conf $DESTGR/etc/nsswitch.conf
+
+# fixup man.config to point into /mnt/sysimage for rescue
+echo "Fixing up /etc/man.config to point into /mnt/sysimage"
+if [ -n "$NEEDGR" ]; then
+ mv $DESTGR/etc/man.config $DESTGR/etc/man.config-old
+ cat $DESTGR/etc/man.config-old | sed 's^/usr/bin^/mnt/sysimage/usr/bin^' | sed 's^/bin/cat^/mnt/sysimage/usr/bin/cat^' > $DESTGR/etc/man.config
+ rm -f $DESTGR/etc/man.config-old
+fi
+
+echo "Creating bogl font..."
+OLDLANG=$LANG
+export LANG=en_US.UTF-8
+zcat $DESTGR/usr/lib/bogl/font.bdf.gz > $DESTGR/usr/lib/bogl/font.bdf
+(cat $DESTGR/usr/lib/anaconda-runtime/loader/unicode-linedraw-chars.txt ; for i in $(find $DESTGR/usr/share/locale -name '*.mo'); do msgunfmt $i 2>/dev/null | msgconv -t utf-8 -o - - ; done) | $DESTGR/usr/bin/reduce-font $DESTGR/usr/lib/bogl/font.bdf > $DESTGR/usr/lib/anaconda-runtime/loader/font-reduced.bdf
+$DESTGR/usr/bin/bdftobogl -b $DESTGR/usr/lib/anaconda-runtime/loader/font-reduced.bdf > $DESTGR/usr/lib/anaconda-runtime/loader/font.bgf
+rm -f $DESTGR/usr/lib/anaconda-runtime/loader/font-reduced.bdf $DESTGR/usr/lib/bogl/font.bdf $DESTGR/usr/bin/reduce-font $DESTGR/usr/bin/bdftobogl $DESTGR/usr/lib/bogl/font.bdf.gz
+gzip -9 -f $DESTGR/usr/lib/anaconda-runtime/loader/font.bgf
+export LANG=$OLDLANG
+
+echo "Running mkfontdir..."
+if [ -n "$NEEDGR" ]; then
+ /usr/X11R6/bin/mkfontdir $DESTGR/usr/X11R6/lib/X11/fonts/*
+ rm -f $DESTGR/usr/X11R6/bin/mkfontdir
+fi
+
+echo "Getting pango modules"
+if [ -n "$NEEDGR" ]; then
+ # sick sick sick hack for pango-querymodules being -32 or -64
+ mv $DESTGR/usr/bin/pango-querymodules* $DESTGR/usr/bin/pango-querymodules
+ if [ -x /usr/bin/runroot -a -n "$COMPONENT" ]; then
+ runroot $COMPONENT --onlyone --arch $ARCH "LD_LIBRARY_PATH=/usr/X11R6/$LIBDIR:$LD_LIBRARY_PATH /usr/sbin/chroot $DESTGR /usr/bin/pango-querymodules 2> $DESTGR/etc/pango/pango.modules"
+ else
+ LD_LIBRARY_PATH=/usr/X11R6/$LIBDIR:$LD_LIBRARY_PATH /usr/sbin/chroot $DESTGR /usr/bin/pango-querymodules > $DESTGR/etc/pango/pango.modules
+ fi
+ rm -f $DESTGR/usr/bin/pango-querymodules
+ # more sick hackery since it doesn't fall back to this like owen thought
+ cat > $DESTGR/etc/pango/pangorc <<EOF
+[Pango]
+ModuleFiles=/etc/pango/pango.modules
+EOF
+fi
+
+host=`rpm --nodigest --nosignature -qp --qf "%{POSTIN}\n" $PACKAGEDIR/gtk2*.$ARCH.rpm |grep update-gdk-pixbuf |awk {'print $2;'}`
+
+case "$host" in
+ *linux) canonhost="$host-gnu"
+ ;;
+ *) canonhost=$host
+ ;;
+esac
+
+# autoconf uses powerpc not ppc
+HOSTTRIPLET=`echo $canonhost | sed "s/^ppc/powerpc/"`
+
+
+mkdir -p $DESTGR/etc/gtk-2.0/$HOSTTRIPLET
+
+echo "Getting gtk2 input method modules"
+if [ -n "$NEEDGR" ]; then
+ mv $DESTGR/usr/bin/gtk-query-immodules-2.0* $DESTGR/usr/bin/gtk-query-immodules-2.0
+ if [ -x /usr/bin/runroot -a -n "$COMPONENT" ]; then
+ runroot $COMPONENT --onlyone --arch $ARCH "LD_LIBRARY_PATH=/usr/X11R6/$LIBDIR:$LD_LIBRARY_PATH /usr/sbin/chroot $DESTGR /usr/bin/gtk-query-immodules-2.0 2> $DESTGR/etc/gtk-2.0/$HOSTTRIPLET/gtk.immodules"
+ else
+ LD_LIBRARY_PATH=/usr/X11R6/$LIBDIR:$LD_LIBRARY_PATH /usr/sbin/chroot $DESTGR /usr/bin/gtk-query-immodules-2.0 > $DESTGR/etc/gtk-2.0/$HOSTTRIPLET/gtk.immodules
+ fi
+ rm -f $DESTGR/usr/bin/gtk-query-immodules-2.0
+fi
+
+echo "Getting gtk2 gdk-pixbuf loaders"
+if [ -n "$NEEDGR" ]; then
+ mv $DESTGR/usr/bin/gdk-pixbuf-query-loaders* $DESTGR/usr/bin/gdk-pixbuf-query-loaders
+ if [ -x /usr/bin/runroot -a -n "$COMPONENT" ]; then
+ runroot $COMPONENT --onlyone --arch $ARCH "LD_LIBRARY_PATH=/usr/X11R6/$LIBDIR:$LD_LIBRARY_PATH /usr/sbin/chroot $DESTGR /usr/bin/gdk-pixbuf-query-loaders 2> $DESTGR/etc/gtk-2.0/$HOSTTRIPLET/gdk-pixbuf.loaders"
+ else
+ LD_LIBRARY_PATH=/usr/X11R6/$LIBDIR:$LD_LIBRARY_PATH /usr/sbin/chroot $DESTGR /usr/bin/gdk-pixbuf-query-loaders > $DESTGR/etc/gtk-2.0/$HOSTTRIPLET/gdk-pixbuf.loaders
+ fi
+ rm -f $DESTGR/usr/bin/gdk-pixbuf-query-loaders
+fi
+
+rm -f $KEEPFILE $KEEPFILEGR $KEEPFILERESCUE
+
+for p in $DEST $DESTGR; do
+ echo "Scrubbing trees..." "$p"
+ cp $p/usr/lib/anaconda/raidstart-stub $p/usr/bin/raidstart
+ cp $p/usr/lib/anaconda/raidstop-stub $p/usr/bin/raidstop
+ cp $p/usr/lib/anaconda/losetup-stub $p/usr/bin/losetup
+ cp $p/usr/lib/anaconda/pump-stub $p/usr/bin/pump
+ cp $p/usr/lib/anaconda/list-harddrives-stub $p/usr/bin/list-harddrives
+ cp $p/usr/lib/anaconda/kudzu-probe-stub $p/usr/bin/kudzu-probe
+ cp $p/usr/lib/anaconda/loadkeys-stub $p/usr/bin/loadkeys
+ cp $p/usr/lib/anaconda/mknod-stub $p/usr/bin/mknod
+ cp $p/usr/lib/anaconda/rescue-startx-stub $p/usr/bin/rescue-startx
+ mv $p/usr/sbin/anaconda $p/usr/bin/anaconda
+ mv $p/usr/lib/anaconda-runtime/lib* $p/usr/$LIBDIR
+
+ # we only want the libunicode-lite stuff on the minimal image
+ if [ $p = $DESTGR ]; then
+ rm -f $p/usr/$LIBDIR/libunicode-lite*
+ fi
+
+ find $p -type d | xargs chmod 755
+
+ if [ -f $p/bin/bash ]; then
+ rm -f $p/bin/ash
+ ln -s bash $p/bin/sh
+ else
+ ln -sf busybox $p/bin/sh
+ fi
+
+ [ -d $p/bin ] || die "ERROR: directory missing: $p/bin"
+ [ -d $p/sbin ] || die "ERROR: directory missing: $p/sbin"
+ (cd $p/bin; find) | (cd $p/bin; /bin/cpio --quiet -pdmu $p/usr/bin)
+ (cd $p/sbin; find) | (cd $p/sbin; /bin/cpio --quiet -pdmu $p/usr/sbin)
+ rm -rf $p/bin
+ rm -rf $p/sbin
+
+ # copy bootloader files for sparc
+ if [ $ARCH = sparc -a $p = $DESTGR ]; then
+ mkdir -p $p/usr/lib/anaconda-runtime/boot
+ [ -d $p/boot ] || die "ERROR: directory missing: $p/boot"
+ (cd $p/boot; find -name "*.b") | (cd $p/boot; /bin/cpio --quiet -pdmu $p/usr/lib/anaconda-runtime/boot)
+ fi
+
+ # copy bootloader file for alpha
+ if [ $ARCH = alpha -a $p = $DESTGR ]; then
+ mkdir -p $p/usr/lib/anaconda-runtime/boot
+ cp -af $p/boot/bootlx $p/usr/lib/anaconda-runtime/boot
+ fi
+
+ # copy bootloader files for ia64
+ if [ $ARCH = ia64 -a $p = $DESTGR ]; then
+ mkdir -p $p/usr/lib/anaconda-runtime/boot
+ cp -af $p/boot/efi/EFI/redhat//* $p/usr/lib/anaconda-runtime/boot
+ fi
+
+ # copy bootloader files for i386/x86_64
+ if [ $ARCH = i386 -o $ARCH = x86_64 ]; then
+ if [ $p = $DESTGR ]; then
+ mkdir -p $p/usr/lib/anaconda-runtime/boot
+ cp -af $p/boot/memtest* $p/usr/lib/anaconda-runtime/boot
+ fi
+ fi
+
+ rm -rf $p/boot $p/home $p/root $p/tmp
+
+ find $p -name "*.a" | grep -v "usr/X11R6/$LIBDIR/modules" | xargs rm -rf
+ find $p -name "lib*.la" |grep -v "usr/$LIBDIR/gtk-2.0" | xargs rm -rf
+ for f in newt popt rpm rpmio; do
+ rm -f $p/usr/$LIBDIR/lib$f.so
+ done
+
+ # nuke some python stuff we don't need
+ for d in idle distutils email bsddb lib-old hotshot doctest.py pydoc.py site-packages/japanese site-packages/japanese.pth ; do
+ rm -rf $p/$d
+ done
+
+ if [ "$ARCH" != "s390" -a "$ARCH" != "s390x" ]; then
+ (cd $p/lib && rm -f libnss_files.so.1 libnss_dns.so.1)
+ fi
+
+ if [ -d $DEST/usr/share/zoneinfo ]; then
+ (cd $DEST/usr/share/zoneinfo; find . -type f -or -type l |
+ grep '^./[A-Z]' | sort | sed 's/^..//' |
+ gzip -9) > $p/usr/lib/timezones.gz
+ else
+ echo "ERROR: unable to explode tzdata for small images"
+ fi
+
+ if [ -x /usr/bin/runroot -a -n "$COMPONENT" ]; then
+ runroot $COMPONENT --onlyone --arch $ARCH "cd $p\; usr/lib/anaconda-runtime/scrubtree $DEBUG $p"
+ else
+ $p/usr/lib/anaconda-runtime/scrubtree $p
+ fi
+done
+
+echo "Compressing .mo files in stage2 images..."
+if [ -d $DEST/usr/share/locale ]; then
+ for i in `find $DEST/usr/share/locale -name anaconda.mo`; do
+ gzip -9 $i
+ mv -f $i.gz $i
+ done
+fi
+
+echo "Creating fontconfig cache"
+if [ -n "$NEEDGR" ]; then
+ if [ -x /usr/bin/runroot -a -n "$COMPONENT" ]; then
+ runroot $COMPONENT --onlyone --arch $ARCH "LD_LIBRARY_PATH=/usr/X11R6/$LIBDIR:$LD_LIBRARY_PATH /usr/sbin/chroot $DESTGR /usr/bin/fc-cache"
+ else
+ LD_LIBRARY_PATH=/usr/X11R6/$LIBDIR:$LD_LIBRARY_PATH /usr/sbin/chroot $DESTGR /usr/bin/fc-cache
+ fi
+ rm -f $DESTGR/usr/bin/fc-cache
+fi
+
+echo "Creating debug dir"
+for p in $DEST $DESTGR ; do
+ mkdir -p $p/usr/lib/debug
+done
+
+if [ $ARCH = "alpha" ]; then
+ rm -rf $DEST/usr/share/locale
+ rm -rf $DEST/usr/$LIBDIR/locale
+fi
+
+echo "Patching python library..."
+
+# always use passive mode for ftp installs
+cd $DEST/usr/$LIBDIR/python2.4
+patch -p0 > /dev/null <<EOF
+--- urllib.py.orig Thu Oct 25 17:05:06 2001
++++ urllib.py Thu Oct 25 17:05:34 2001
+@@ -453,6 +453,7 @@
+ path, attrs = splitattr(path)
+ path = unquote(path)
+ dirs = path.split('/')
++ dirs[0] = '/' + dirs[0]
+ dirs, file = dirs[:-1], dirs[-1]
+ if dirs and not dirs[0]: dirs = dirs[1:]
+ if dirs and not dirs[0]: dirs[0] = '/'
+@@ -707,6 +708,7 @@
+ self.ftp = ftplib.FTP()
+ self.ftp.connect(self.host, self.port)
+ self.ftp.login(self.user, self.passwd)
++ self.ftp.set_pasv(1)
+ for dir in self.dirs:
+ self.ftp.cwd(dir)
+EOF
+cd -
+
+echo -n -e "Removing unused python files in hdimage... "
+
+if [ -x /usr/bin/runroot -a -n "$COMPONENT" ]; then
+ runroot $COMPONENT --onlyone --arch $ARCH "cd $DEST\; usr/lib/anaconda-runtime/pythondeps $DEST"
+else
+ $DEST/usr/lib/anaconda-runtime/pythondeps $DEST
+fi
+echo "done."
+
+for p in $DEST $DESTGR; do
+ find $p -name "*.py" | while read fn; do
+ rm -f ${fn}o
+ rm -f ${fn}c
+ ln -sf /dev/null ${fn}c
+ done
+done
+
+# do some stripping of debugging symbols
+if [ -x /usr/bin/runroot -a -n "$COMPONENT" ]; then
+ runroot $COMPONENT --onlyone --arch $ARCH "\"find $DEST -type f -name '*.so' -exec strip -g '{}' ';'\""
+ runroot $COMPONENT --onlyone --arch $ARCH "\"find $DESTGR -type f -name '*.so' -exec strip -g '{}' ';'\""
+else
+ find $DEST -type f -name '*.so' |xargs strip -g
+ find $DESTGR -type f -name '*.so' |xargs strip -g
+fi
+
+# some python stuff we don't need for stage2
+rm -f $DESTGR/usr/$LIBDIR/python?.?/site-packages/distutils/
+rm -f $DESTGR/usr/$LIBDIR/python?.?/site-packages/lib-dynload/japanese
+rm -f $DESTGR/usr/$LIBDIR/python?.?/site-packages/encodings/
+rm -f $DESTGR/usr/$LIBDIR/python?.?/site-packages/compiler/
+rm -f $DESTGR/usr/$LIBDIR/python?.?/site-packages/email/
+rm -f $DESTGR/usr/$LIBDIR/python?.?/site-packages/curses/
+rm -f $DESTGR/usr/$LIBDIR/python?.?/site-packages/pydoc.py
+
+# clean up tzdata
+rm -rf $TZDIR
+
+# this is only for the minimal second stage
+echo "Cleaning ramdisk install images..."
+rm -rf $DEST/usr/lib/anaconda-runtime
+
+if [ "$ARCH" != "s390" -a "$ARCH" != "s390x" ]; then
+ if [ $NEEDGR ]; then
+ # Xserver needs a place to put the compiled xkb maps.
+ rm -rf $DESTGR/usr/X11R6/lib/X11/xkb/compiled
+ ln -s /tmp $DESTGR/usr/X11R6/lib/X11/xkb/compiled
+ fi
+
+ if [ -n "$NEEDGR" ]; then
+ cd $ORIGDIR
+ $DESTGR/usr/lib/anaconda-runtime/checkcards.py $DESTGR/usr/share/hwdata/pcitable $DESTGR/usr/share/hwdata/Cards
+ fi
+fi