]> git.pld-linux.org Git - packages/anaconda.git/commitdiff
- things to make anaconda PLD-friendly
authorPatryk Zawadzki <patrys@room-303.com>
Thu, 28 Apr 2005 22:34:14 +0000 (22:34 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    anaconda-mk-images -> 1.1
    anaconda-pld.patch -> 1.1
    anaconda-upd-instroot -> 1.1

anaconda-mk-images [new file with mode: 0644]
anaconda-pld.patch [new file with mode: 0644]
anaconda-upd-instroot [new file with mode: 0644]

diff --git a/anaconda-mk-images b/anaconda-mk-images
new file mode 100644 (file)
index 0000000..db0a704
--- /dev/null
@@ -0,0 +1,1047 @@
+#!/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
diff --git a/anaconda-pld.patch b/anaconda-pld.patch
new file mode 100644 (file)
index 0000000..f8906bf
--- /dev/null
@@ -0,0 +1,12 @@
+diff -r -u anaconda-10.2.0.52-old/scripts/getkeymaps anaconda-10.2.0.52/scripts/getkeymaps
+--- anaconda-10.2.0.52-old/scripts/getkeymaps  2004-05-20 03:00:03.000000000 +0200
++++ anaconda-10.2.0.52/scripts/getkeymaps      2005-04-24 16:34:23.401958968 +0200
+@@ -37,7 +37,7 @@
+ for map in $MAPS ; do 
+  eval find /lib/kbd/keymaps/$PATTERN -name "$map.map*" | while read n; do
+-    /bin/loadkeys `basename $n .gz` >/dev/null
++    /usr/bin/loadkeys `basename $n .gz` >/dev/null
+     $READMAP $TMPDIR/`basename $n .map.gz`.map
+   done
+ done
diff --git a/anaconda-upd-instroot b/anaconda-upd-instroot
new file mode 100644 (file)
index 0000000..229078c
--- /dev/null
@@ -0,0 +1,1252 @@
+#!/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
This page took 0.435724 seconds and 4 git commands to generate.