#!/bin/bash

ORIGDIR=`pwd`
COMPONENT=""

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 -qp --qf "%{ARCH}" $PACKAGEDIR/anaconda-runtime*.rpm`
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 --qf "%{NAME} $PACKAGEPATH/%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm\n" \
		-qp $PACKAGEFILES  | egrep "$PATTERN"  | sed 's/.* //' 
}

expandPackageSet() {
    RPMS=$1
    PKGDEST=$2
    KEEPFILES=$3

    for n in $RPMS; do 
	echo -ne "\rExpanding packages..." $(basename $n)
	if [ $(rpm -qp --qf '%{NAME}' $n) = "glibc-common" ] ; then
	    GLIBC=$n
	fi 
	rpm2cpio $n | (cd $PKGDEST; cpio -E $KEEPFILES --quiet -iumd)
	echo -ne "\rExpanding packages..." "$(basename $n | sed 's/./ /g')"
    done
}

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

PACKAGES="glibc glibc-common setup openssl python python2 newt libtermcap zlib
	 ash kon2 e2fsprogs util-linux raidtools popt mount procps rpm
	 XFree86 Xconfigurator anaconda anaconda-runtime kudzu-devel
	 kudzu hwdata db3 bzip2 bzip2-libs dosfstools pciutils 
	 reiserfs-utils parted busybox-anaconda rpm404-python anaconda-help booty
         hdparm lvm jfsutils librpm404 rhpl slang libxml2 libxml2-python"

if [ $ARCH = i386 ]; then
    PACKAGES="$PACKAGES kernel-pcmcia-cs kernel-utils"
fi

if [ $ARCH = ia64 ]; then
    PACKAGES="$PACKAGES elilo slang"
fi

if [ $ARCH = s390 -o $ARCH = s390x ]; then
    PACKAGES="$PACKAGES s390utils oco binutils s390installer pdksh wget 
	sed net-tools inetd openssh openssh-server fileutils modutils
	initscripts mount gawk xauth
	portmap textutils sh-utils telnet-server login ssh_keys"
fi

# xpm is missing

# Some packages are listed twice, but that's okay

PACKAGESGR="anaconda XFree86-libs imlib libpng libtiff libjpeg
           XFree86-S3 XFree86-SVGA XFree86-75dpi-fonts
           XFree86-ISO8859-2-75dpi-fonts glib2 gtk2
           XFree86-ISO8859-9-75dpi-fonts esound audiofile libgnome
           XFree86-100dpi-fonts fonts-ISO8859-2 fonts-ISO8859-9
           XFree86-xfs e2fsprogs fileutils glibc glibc-common rsh less
           ftp readline gzip popt specspo util-linux rpm librpm404
           open grep net-tools traceroute tar procps textutils sed
           ncurses bash cpio mt-st iputils sh-utils
           XFree86 Xconfigurator gnome-python2 pygtk2 gdk-pixbuf 
           XFree86-KOI8-R XFree86-KOI8-R-75dpi-fonts pciutils pam 
           reiserfs-utils atk pango freetype gnome-python2-canvas 
           libgnomecanvas libart_lgpl vte
           anaconda-images anaconda-help hdparm XFree86-base-fonts
           ttfonts-ko taipeifonts XFree86-ISO8859-15-75dpi-fonts rhpl
           redhat-config-keyboard Xft fontconfig expat redhat-artwork
           ttfonts-ja ttfonts-zh_CN ttfonts-zh_TW"

if [ -z "$NEEDGR" ]; then
    PACKAGESGR="bash"
fi

PACKAGES="$PACKAGES db1 db2"
if [ $ARCH != ia64 ]; then
    PACKAGESGR="$PACKAGESGR mtools pine modutils"
fi

if [ $ARCH = sparc ]; then
    PACKAGESGR="$PACKAGESGR XFree86-3DLabs XFree86-Mach64 tilo silo"
fi

if [ $ARCH = i386 ]; then
    PACKAGESGR="$PACKAGESGR XFree86-3DLabs XFree86-8514 XFree86-AGX
	       XFree86-FBDev XFree86-I128 XFree86-Mach32
	       XFree86-Mach64 XFree86-Mach8 XFree86-Mono XFree86-P9000
	       XFree86-S3 XFree86-S3V XFree86-SVGA XFree86-VGA16
	       XFree86-W32 syslinux" 
fi

if [ $ARCH = alpha ]; then
    PACKAGESGR="$PACKAGESGR XFree86-3DLabs XFree86-Mono XFree86-P9000
                XFree86-S3 XFree86-SVGA aboot"
fi

if [ $ARCH = ia64 ]; then
    PACKAGESGR="$PACKAGESGR elilo slang"
fi

if [ $ARCH = s390 -o $ARCH = s390x ]; then
    PACKAGESGR="$PACKAGESGR s390utils oco binutils s390installer pdksh 
	sed net-tools inetd openssh openssh-server fileutils login 
	wget initscripts xauth
	modutils portmap textutils openssl telnet-server strace ssh_keys"
fi

KEEPFILE=/tmp/keepfile.$$
cat > $KEEPFILE <<EOF
boot/efi/elilo.efi
boot/efi/efi/boot/bootia64.efi
bin/ash
bin/fdisk*
bin/mkfs*
etc/group
etc/nsswitch.conf
etc/passwd
etc/protocols
etc/services
lib/ld-*
lib/libc*
lib/libcom_err*
lib/libcrypt*
lib/libdb-*
lib/libdb-3.0
lib/libdb.so.2
lib/libdb.so.3
lib/libdb1*
lib/libdl*
lib/libe2p*
lib/libext2fs*
lib/liblvm-10.so*
lib/libm[-.]*
lib/libnsl*
lib/libnss_dns*
lib/libnss_files*
lib/libpthread*
lib/libresolv*
lib/librt[-.]*
lib/libss*
lib/libtermcap*
lib/libutil*
lib/libuuid*
sbin/badblocks
sbin/clock
sbin/debugfs
sbin/e2fsadm
sbin/e2label
sbin/fdisk
sbin/hdparm
sbin/hwclock
sbin/ldconfig
sbin/lvchange
sbin/lvcreate
sbin/lvdisplay
sbin/lvextend
sbin/lvmchange
sbin/lvmcreate_initrd
sbin/lvmdiskscan
sbin/lvmsadc
sbin/lvmsar
sbin/lvreduce
sbin/lvremove
sbin/lvrename
sbin/lvscan
sbin/mkdosfs
sbin/mke2fs
sbin/busybox.anaconda
sbin/mkfs.ext2
sbin/mkfs.ext3
sbin/mkfs.jfs
sbin/mkfs.msdos
sbin/mkfs.vfat
sbin/mkreiserfs
sbin/mkraid
sbin/mkswap
sbin/parted
sbin/pvchange
sbin/pvcreate
sbin/pvdata
sbin/pvdisplay
sbin/pvmove
sbin/pvscan
sbin/probe
sbin/sfdisk
sbin/tune2fs
sbin/vgcfgbackup
sbin/vgcfgrestore
sbin/vgchange
sbin/vgck
sbin/vgcreate
sbin/vgdisplay
sbin/vgexport
sbin/vgextend
sbin/vgimport
sbin/vgmerge
sbin/vgmknodes
sbin/vgreduce
sbin/vgremove
sbin/vgrename
sbin/vgscan
sbin/vgsplit
usr/X11R6/lib/X11/Cards
usr/X11R6/share/Xconfigurator/MonitorsDB
usr/bin/python
usr/bin/python2.2
usr/lib/anaconda-runtime/*
usr/lib/anaconda/*
usr/lib/anaconda/installclasses/*
usr/lib/anaconda/textw/*
usr/lib/booty/*
usr/lib/gconv/ISO8859-1.so
usr/lib/gconv/gconv-modules
usr/lib/libssl*
usr/lib/libcrypto*
usr/lib/libbz2*
usr/lib/libdb.so.2
usr/lib/libdb.so.3
usr/lib/libdb1*
usr/lib/libnewt*
usr/lib/libparted*
usr/lib/libpopt*
usr/lib/librpm-*4.0.4.so*
usr/lib/librpmdb*4.0.4.so*
usr/lib/librpmio*4.0.4.so*
usr/lib/libslang*
usr/lib/libxml2.so*
usr/lib/libz.*
usr/lib/python2.2/*
usr/lib/python2.2/site-packages/libxml2*
usr/lib/python2.2/site-packages/*vte*
usr/lib/python2.2/site-packages/*kudzu*
usr/lib/python2.2/site-packages/rpmmodule.so
usr/lib/python2.2/site-packages/partedmodule.so
usr/lib/python2.2/site-packages/rhpl
usr/lib/rpm/macros
usr/lib/rpm/rpmpopt
usr/lib/rpm/rpmrc
usr/share/locale/*/LC_MESSAGES/anaconda.mo
usr/sbin/anaconda
usr/sbin/ddcprobe
usr/sbin/dmidecode
usr/share/anaconda/locale-list
usr/share/anaconda/anaconda.conf
usr/share/terminfo/l/linux
usr/share/doc/kon2*/terminfo.kon
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
linuxrc
usr/share/terminfo/a/ansi
usr/share/terminfo/d/dumb
usr/share/terminfo/s/screen
usr/share/terminfo/v/vt100
usr/share/terminfo/v/vt102
usr/share/terminfo/x/xterm
usr/share/terminfo/x/xterm-color
usr/bin/strace
usr/bin/ldd
usr/bin/wget
usr/bin/printf
usr/bin/dasdformat
usr/bin/formatmnt
usr/bin/mountpoint
usr/bin/netsetup
usr/bin/pkgselect
usr/bin/pkgsrc
usr/sbin/chroot
usr/sbin/sshd
usr/sbin/glibc_post_upgrade
usr/sbin/inetd
usr/sbin/in.telnetd
sbin/busybox.anaconda
sbin/consoletype
sbin/rhsetup
sbin/ifconfig
sbin/route
sbin/portmap
sbin/fdasd
sbin/dasdfmt
sbin/swapon
sbin/swapoff
sbin/mkswap
sbin/tune2fs
bin/dd
bin/gawk-3.1.0
bin/mknod
bin/login
bin/ksh
bin/cat
bin/chmod
bin/sed
bin/sort
bin/mount
bin/umount
bin/rpm
lib/libpam.so*
lib/libdl.so*
lib/libdl-*.so*
usr/lib/libz.so*
lib/libnsl.so*
lib/libnsl-*.so*
lib/libnss*
lib/libutil.so*
lib/libutil-*.so*
lib/libcrypt*
lib/libc.so*
lib/libc-*so*
lib/ld.so*
lib/ld-*.so*
lib/libresolv.so*
lib/libresolv-*.so*
lib/libvtoc*.so*
lib/modules/ibm*
etc/inetd.conf
etc/ssh/*
etc/motd
etc/issue.net
usr/X11R6/bin/xauth
EOF
fi
      

KEEPFILEGR=/tmp/keepfilegr.$$
cp $KEEPFILE $KEEPFILEGR
cat >> $KEEPFILEGR <<EOF
boot/efi/elilo.efi
boot/efi/efi/boot/bootia64.efi
bin/bash
bin/cat
bin/chmod
bin/cp
bin/cpio
bin/dd
bin/df
bin/du
bin/grep
bin/gunzip
bin/gzip
bin/ln
bin/ls
bin/mkdir
bin/mt
bin/mv
bin/ping
bin/ps
bin/rm
bin/rpm
bin/sed
bin/sync
bin/tar
bin/touch
bin/umount
bin/zcat
boot/*.b
boot/bootlx
etc/gtk-2.0/gtkrc*
etc/im_palette.pal
etc/imrc
etc/pango/*
etc/fonts/*
lib/libnss_dns*
lib/libpam*
lib/libproc*
sbin/depmod
sbin/debugfs
sbin/e2fsck
sbin/e2label
sbin/reiserfsck
sbin/fsck
sbin/fsck.ext2
sbin/fsck.ext3
sbin/fsck.jfs
sbin/ifconfig
sbin/insmod
sbin/lsmod
sbin/lspci
sbin/modprobe
sbin/parted
sbin/rmmod
sbin/route
sbin/silo
sbin/tune2fs
usr/X11R6/bin/XF86_3DLabs
usr/X11R6/bin/XF86_FBDev
usr/X11R6/bin/XF86_I128
usr/X11R6/bin/XF86_Mach32
usr/X11R6/bin/XF86_Mach64
usr/X11R6/bin/XF86_S3
usr/X11R6/bin/XF86_S3V
usr/X11R6/bin/XF86_SVGA
usr/X11R6/bin/XF86_TGA
usr/X11R6/bin/XF86_VGA16
usr/X11R6/bin/XFree86
usr/X11R6/bin/Xsun
usr/X11R6/bin/Xsun24
usr/X11R6/bin/XsunMono
usr/X11R6/bin/Xtest
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/lib/libICE*
usr/X11R6/lib/libSM*
usr/X11R6/lib/libX11*
usr/X11R6/lib/libXext*
usr/X11R6/lib/libXft*
usr/X11R6/lib/libXi*
usr/X11R6/lib/libXmu*
usr/X11R6/lib/libXpm*
usr/X11R6/lib/libXrender*
usr/X11R6/lib/libXt*
usr/X11R6/lib/modules/*
usr/X11R6/share/Xconfigurator/pixmaps/*
usr/bin/chattr*
usr/bin/ftp
usr/bin/gtk-query*
usr/bin/head
usr/bin/less
usr/bin/lsattr*
usr/bin/maketilo
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/mwrite
usr/bin/mzip
usr/bin/open
usr/bin/pango*
usr/bin/pico
usr/bin/rcp
usr/bin/rlogin
usr/bin/rsh
usr/bin/syslinux
usr/bin/tac
usr/bin/tail
usr/bin/tilo
usr/bin/uniq
usr/lib/anaconda/iw
usr/lib/gconv/*
usr/lib/gdk-pixbuf/loaders/*png*
usr/lib/gdk-pixbuf/loaders/*la*
usr/lib/gdkimlib*
usr/lib/gtk-2.0/*/engines/libwonderland.so
usr/lib/gtk-2.0/*/loaders/*png*
usr/lib/gtk-2.0/*/loaders/*la*
usr/lib/gtk-2.0/immodules/
usr/lib/libImlib*
usr/lib/libXft*
usr/lib/libart*
usr/lib/libatk*
usr/lib/libaudio*
usr/lib/libesd*
usr/lib/libexpat*
usr/lib/libfontconfig*
usr/lib/libfreetype*
usr/lib/libgdk*
usr/lib/libglib*
usr/lib/libgmodule*
usr/lib/libgnome*
usr/lib/libgnomesupport*
usr/lib/libgnomeui*
usr/lib/libgnorba*
usr/lib/libgnorbagtk*
usr/lib/libgobject*
usr/lib/libgthread*
usr/lib/libgtk*
usr/lib/libgtkxmhtml*
usr/lib/libimlib-png*
usr/lib/libimlib-pnm*
usr/lib/libimlib-xpm*
usr/lib/libjpeg*
usr/lib/libncurses*
usr/lib/libpango*
usr/lib/libpng.so.3*
usr/lib/libpng12*
usr/lib/libreadline*
usr/lib/libthread*
usr/lib/libtiff*
usr/lib/libvte*
usr/lib/locale/*
usr/lib/pango/*
usr/lib/rpm/rpmpopt
usr/lib/syslinux/*
usr/sbin/chroot
usr/sbin/ddcprobe
usr/sbin/gnome-pty-helper
usr/sbin/traceroute
usr/share/anaconda/*
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/ko/TrueType/dotum.ttf
usr/share/fonts/ja/TrueType/kochi-gothic.ttf
usr/share/fonts/zh_CN/TrueType/gkai00mp.ttf
usr/share/fonts/zh_TW/TrueType/bsmi00lp.ttf
usr/share/locale/*
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/redhat-config-keyboard/*
usr/share/terminfo/l/linux
usr/share/terminfo/x/xterm
usr/share/terminfo/k/kon
usr/share/themes/Wonderland/gtk-2.0/*
usr/share/vte/termcap/xterm
usr/share/zoneinfo/zone.tab
EOF

TIMEZONES="
usr/share/zoneinfo/US
usr/share/zoneinfo/Europe
usr/share/zoneinfo/Japan
usr/share/zoneinfo/America
"

# 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

echo "Assembling package list..."
RPMS=$(prunePackageList $PACKAGEDIR "$PACKAGES")
RPMSGR=$(prunePackageList $PACKAGEDIR "$PACKAGESGR")

rm -rf $DEST; mkdir -p $DEST/usr/sbin
rm -rf $DESTGR; mkdir -p $DESTGR/usr/sbin $DESTGR/var/lib
ln -s /tmp $DESTGR/var/lib/xkb 

for file in $KEEPFILE $KEEPFILEGR; do
   cat $file | awk '{print $1 "\n./" $1}' > $file-
   mv -f $file- $file
done

echo -n "Expanding packages..."
expandPackageSet "$RPMS" $DEST $KEEPFILE

(cd $DEST; tar cSpf - .) | (cd $DESTGR; tar xSpf -)

expandPackageSet "$RPMSGR" $DESTGR $KEEPFILEGR
echo -e "\rExpanding packages..."

if [ -f $DEST/usr/share/doc/kon2*/terminfo.kon ]; then
   tic $DEST/usr/share/doc/kon2*/terminfo.kon -o $DEST/usr/share/terminfo
   tic $DEST/usr/share/doc/kon2*/terminfo.kon -o $DESTGR/usr/share/terminfo
   rm $DEST/usr/share/doc/kon2*/terminfo.kon
fi

echo "retrieving timezones"
TZDIR=/tmp/glibc-timezone-$$
mkdir -p $TZDIR/usr/share/zoneinfo
rpm2cpio $GLIBC | (cd $TZDIR; cpio --quiet -iumd usr/share/zoneinfo ./usr/share/zoneinfo ./usr/share/zoneinfo/* usr/share/zoneinfo/*)
(cd $TZDIR; tar cSpf - $TIMEZONES) | (cd $DEST; tar xSpf -)
(cd $TZDIR; tar cSpf - $TIMEZONES) | (cd $DESTGR; tar xSpf -)
rm -rf $TZDIR

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
	(cd $i/etc/ssh; chmod og-r ssh_host*key primes sshd_config)
	mv $i/bin/sed $i/bin/sed_save
	mv $i/bin/mount $i/bin/mount_save
	mv $i/bin/sort $i/bin/sort_save
	mv $i/bin/mknod $i/bin/mknod_save
    done
fi

if [ $ARCH = sparc ]; then
    rm -f $DESTGR/usr/X11R6/bin/XF86_VGA16
fi

# Remove locales unused during the install
cat $DESTGR/usr/lib/anaconda/lang-table* | awk '
{ print $5;
  print gensub(/\..*$/,"","",$5);
  print gensub(/_.*$/,"","",$5);
  if (split ($5, a, "\.") > 1) {
    print gensub(/\..*$/,tolower("." a[2]),"",$5);
  };
}
' | LC_ALL=C sort -u > $DESTGR/locales
for p in lib 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

# Remove unneeded XFree86 modules
rm -rf $DESTGR/usr/X11R6/lib/modules/dri
rm -f $DESTGR/usr/X11R6/lib/modules/extensions/lib{GLcore,glx,pex5}*

echo "Running mkfontdir..."
if [ -n "$NEEDGR" ]; then
    /usr/X11R6/bin/mkfontdir -p /usr/X11R6/lib/X11/fonts/encodings/ -e $DESTGR/usr/X11R6/lib/X11/fonts/encodings $DESTGR/usr/X11R6/lib/X11/fonts/* $DESTGR/usr/share/fonts/ISO8859-2/* $DESTGR/usr/share/fonts/ISO8859-9/*
    rm -f $DESTGR/usr/X11R6/bin/mkfontdir
fi

echo "Getting pango modules"
if [ -n "$NEEDGR" ]; then
    if [ -x /usr/bin/runroot -a -n "$COMPONENT" ]; then
    	REALPATH=`(cd $DESTGR; /bin/pwd | sed 's,/md1/,/,g')`
    	runroot $COMPONENT --onlyone --arch $ARCH "LD_LIBRARY_PATH=/usr/X11R6/lib:$LD_LIBRARY_PATH /usr/sbin/chroot $REALPATH /usr/bin/pango-querymodules 2> $REALPATH/etc/pango/pango.modules"
    else
	/usr/sbin/chroot $DESTGR /usr/bin/pango-querymodules > $DESTGR/etc/pango/pango.modules
    fi
    rm -f $DESTGR/usr/bin/pango-querymodules
fi

echo "Getting gtk2 input method modules"
if [ -n "$NEEDGR" ]; then
    if [ -x /usr/bin/runroot -a -n "$COMPONENT" ]; then
    	REALPATH=`(cd $DESTGR; /bin/pwd | sed 's,/md1/,/,g')`
	runroot $COMPONENT --onlyone --arch $ARCH "LD_LIBRARY_PATH=/usr/X11R6/lib:$LD_LIBRARY_PATH /usr/sbin/chroot $REALPATH /usr/bin/gtk-query-immodules-2.0 2> $REALPATH/etc/gtk-2.0/gtk.immodules"
    else
	/usr/sbin/chroot $DESTGR /usr/bin/gtk-query-immodules-2.0 > $DESTGR/etc/gtk-2.0/gtk.immodules
    fi
    rm -f $DESTGR/usr/bin/gtk-query-immodules-2.0
fi

rm -f $KEEPFILE $KEEPFILEGR

echo -n "Scrubbing trees..."
for p in $DEST $DESTGR; do
	echo -n -e "\rScrubbing trees..." "$p"
	ln -s ../lib/anaconda/raidstart-stub $p/usr/bin/raidstart
	ln -s ../lib/anaconda/raidstop-stub $p/usr/bin/raidstop
	ln -s ../lib/anaconda/losetup-stub $p/usr/bin/losetup
	ln -s ../lib/anaconda/pump-stub $p/usr/bin/pump

	mv $p/usr/sbin/anaconda $p/usr/bin/anaconda
	mv $p/usr/lib/anaconda-runtime/lib* $p/usr/lib

	mv $p/usr/lib/anaconda-runtime/collage $p/usr/bin

	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 -s ash $p/bin/sh
	fi

	(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
	    (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/* $p/usr/lib/anaconda-runtime/boot
	fi    

	rm -rf $p/boot $p/home $p/root $p/tmp

	find $p -name "*.a" | grep -v "usr/X11R6/lib/modules" | xargs rm -rf
	find $p -name "lib*.la" |grep -v "usr/lib/gtk-2.0" | xargs rm -rf
	for f in newt popt rpm rpmio; do
	    rm -f $p/usr/lib/lib$f.so
	done

	if [ "$ARCH" != "s390" -a "$ARCH" != "s390x" ]; then
	   (cd $p/lib; rm -f libnss_files.so.1 libnss_dns.so.1)
	fi

	(cd /usr/share/zoneinfo; find . -type f -or -type l | 
		grep '^./[A-Z]' | sort | sed 's/^..//' | 
		gzip -9) > $p/usr/lib/timezones.gz

	if [ -x /usr/bin/runroot -a -n "$COMPONENT" ]; then
	    REALPATH=`(cd $p; /bin/pwd | sed 's,/md1/,/,g')`
            runroot $COMPONENT --onlyone --arch $ARCH "cd $REALPATH\; usr/lib/anaconda-runtime/scrubtree $REALPATH"
	else
	    $p/usr/lib/anaconda-runtime/scrubtree $p
	fi
	echo -n -e "\rScrubbing trees..." "$(echo $p | sed 's/./ /g')"
done

echo -e "\nCompressing .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

if [ $ARCH = "alpha" ]; then
    rm -rf $DEST/usr/share/locale
    rm -rf $DEST/usr/lib/locale
fi

echo "Patching python library..."

# always use passive mode for ftp installs
cd $DEST/usr/lib/python2.2
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
    REALPATH=`(cd $DEST; /bin/pwd | sed 's,/md1/,/,g')`
    runroot $COMPONENT --onlyone --arch $ARCH "cd $REALPATH\; usr/lib/anaconda-runtime/pythondeps $REALPATH"
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
	    if [ $p = $DEST ]; then
		rm -f ${fn}c
		ln -sf /dev/null ${fn}c
	    fi
	done
done

# 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/X11R6/lib/X11/Cards
   fi
fi