#!/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 Vine Linux 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-vine-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)" = "tzdata" ] ; 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
}

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

PACKAGES="filesystem glibc glibc-common setup openssl python newt slang
	 libtermcap zlib dash dash-static e2fsprogs raidtools popt
	 mdadm dmraid libnih pcre file
	 util-linux libblkid libmount libuuid uuidd
	 procps rpm rpm-libs rpm-build anaconda-vine tzdata libedit
	 anaconda-vine-runtime kudzu hwdata bzip2 beecrypt ncurses readline
	 bzip2-libs dosfstools pciutils pciutils-libs reiserfs-utils reiserfsprogs parted sed libexpat
	 busybox-anaconda rpm-python booty hdparm lvm2 lvm2-libs beecrypt 
	 device-mapper device-mapper-libs device-mapper-event device-mapper-event-libs
	 rhpl rhpxl pyxf86config libxml2 libxml2-python glib2 sqlite3 neon
	 elfutils-libelf bogl-bterm bogl krb5-libs convertdb1 jfsutils
 	 xfsprogs xfsdump dmapi libacl libattr attr acl libstdc++ libgcc
         pyparted xorg-x11 polkit polkit-gnome kbd
	 mouseconfig gnutls libtasn1 libgcrypt libgpg-error keyutils-libs
	 PolicyKit db4 libcap open-iscsi vconfig nss nspr lv lua xz-libs
	 udev libudev libgudev1"

if [ $ARCH = i386 -o $ARCH = i686 -o $ARCH = x86_64 ]; then
    PACKAGES="$PACKAGES pcmciautils"
fi

if [ $ARCH = i386 -o $ARCH = i686 -o $ARCH = x86_64 -o $ARCH = ia64 ]; then
    PACKAGES="$PACKAGES dmidecode"
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 XOrg-xauth bash portmap pam 
              telnet-server login util-linux grep module-init-tools gawk
              XOrg-libs strace xorg-x11-xauth xorg-x11-libs"
fi

if [ $ARCH = ppc -o $ARCH = ppc64 ]; then
    PACKAGES="$PACKAGES pcmciautils pdisk yaboot hfsutils powerpc-utils libjconv"
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-vine anaconda-vine-runtime XOrg-libs libpng libtiff XOrg-75dpi-fonts
           gtk2 esound audiofile libgnome libbonobo libbonoboui
	   libgnomeui GConf2 gnome-keyring XOrg-cursors librsvg2
           XOrg-xfs e2fsprogs coreutils glibc glibc-common ORBit2
           readline popt specspo util-linux-ng rpm rpm-libs rpm-build tzdata
           procps ncurses bash cpio gpm gpm-libs gnome-vfs2
           xorg-x11 gnome-python pygtk2 pygobject pycairo python-numeric gdk-pixbuf gdk-pixbuf2
	   gobject-introspection
           pam TrueType-vlgothic xorg-x11-font-utils libexpat
           reiserfs-utils reiserfsprogs atk pango cairo freetype2 gnome-python-canvas
           libgnomecanvas libart_lgpl libgcc libacl libattr libstdc++ libstdc++3 libstdc++34 expat
           anaconda-vine-images anaconda-vine-help XOrg-base-fonts
           ttfonts-ko taipeifonts XOrg-ISO8859-15-75dpi-fonts rhpl rhpxl
           system-config-keyboard Xft fontconfig redhat-artwork vine-artwrok audit-libs
           ttfonts-ja ttfonts-zh_TW bitmap-fonts-cjk urw-fonts fonts-arabic
           comps-extras XOrg-libs-data convertdb1 fonts-bengali
           vnc-server libjpeg tcp_wrappers system-config-date
           xfsprogs xfsdump dmapi attr acl policy policycoreutils
           selinux-policy-targeted ttfonts-zh_CN
	   libXrender libXext glib2 libX11 libgsf
           xorg-x11-libs xorg-x11-ISO8859-2-75dpi-fonts
           xorg-x11-ISO8859-9-75dpi-fonts xorg-x11-100dpi-fonts
           xorg-x11-xfs xorg-x11 xorg-x11-KOI8-R xorg-x11-KOI8-R-75dpi-fonts
           xorg-x11-base-fonts xorg-x11-ISO8859-15-75dpi-fonts
           fonts-xorg-ISO8859-2-75dpi fonts-xorg-ISO8859-15-75dpi
           fonts-xorg-ISO8859-9-75dpi fonts-xorg-100dpi libXft fontconfig
           fonts-xorg-KOI8-R fonts-xorg-KOI8-R-75dpi fonts-xorg-base
           xorg-x11-base xorg-x11-ISO8859-15-75dpi 
           xorg-x11-libs-data xorg-x11-xfs prelink redhat-logos fedora-logos
           ttfonts-ta ttfonts-bn ttfonts-gu ttfonts-hi ttfonts-pa
	   vine-logos gnome-themes gtk2-engines
	   avahi avahi-glib dbus dbus-glib dbus-python hal alsa-lib
	   gnutls libtasn1 libgcrypt libgpg-error krb5-libs keyutils-libs
	   libffi shared-mime-info nano open-iscsi vconfig"

# modular xorg...
XORGLIBS="libICE libSM libX11 libXcursor libXext libXfixes libXft libXi libxkbfile libXmu libXpm libXrandr libXrender libXt libXxf86misc libXaw liblbxutil libXfont libfontenc libXau libXdmcp libXfont libXinerama libXcomposite libxcb libcroco libXdamage pixman libpciaccess xkeyboard-config libdrm"
XORGDRIVERS="xorg-x11-drv-acecad xorg-x11-drv-aiptek xorg-x11-drv-elographics xorg-x11-drv-evdev xorg-x11-drv-fpit xorg-x11-drv-hyperpen xorg-x11-drv-keyboard xorg-x11-drv-mouse xorg-x11-drv-mutouch xorg-x11-drv-penmount xorg-x11-drv-synaptics xorg-x11-drv-void xorg-x11-drv-wacom xorg-x11-drv-vmmouse xorg-x11-drv-apm xorg-x11-drv-ast xorg-x11-drv-ati xorg-x11-drv-cirrus xorg-x11-drv-dummy xorg-x11-drv-fbdev xorg-x11-drv-glint xorg-x11-drv-i128 xorg-x11-drv-i740 xorg-x11-drv-mach64 xorg-x11-drv-mga xorg-x11-drv-nv xorg-x11-drv-nouveau xorg-x11-drv-r128 xorg-x11-drv-rendition xorg-x11-drv-s3virge xorg-x11-drv-savage xorg-x11-drv-siliconmotion xorg-x11-drv-sis xorg-x11-drv-sisusb xorg-x11-drv-tdfx xorg-x11-drv-trident xorg-x11-drv-v4l xorg-x11-drv-vesa xorg-x11-drv-voodoo xorg-x11-drv-geode xorg-x11-drv-intel xorg-x11-drv-neomagic xorg-x11-drv-openchrome xorg-x11-drv-vmware"
XORGFONTS="xorg-x11-fonts-75dpi xorg-x11-fonts-base xorg-x11-fonts-cyrillic xorg-x11-fonts-ISO8859-15-75dpi xorg-x11-fonts-ISO8859-1-75dpi xorg-x11-fonts-ISO8859-2-75dpi xorg-x11-fonts-ISO8859-9-75dpi xorg-x11-fonts-misc xorg-x11-fonts-ethiopic"
XORG="$XORGLIBS $XORGDRIVERS $XORGFONTS xorg-x11-server-Xorg xorg-x11-xauth xorg-x11-font-utils xorg-x11-xkb-utils xorg-x11-xkbdata xorg-x11-server-utils"

PACKAGESGR="$PACKAGESGR $XORG"

#
# 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-db
                module-init-tools mtools mt-st mtr net-tools open 
                openssh openssh-clients pciutils pciutils-libs rsh traceroute tar"

if [ $ARCH = i386 -o $ARCH = i686 ]; 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 = i386 -o $ARCH = i586 -o $ARCH = i686 -o $ARCH = x86_64 ]; then
    PACKAGESGR="$PACKAGESGR syslinux memtest86+ grub"
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/vine/elilo.efi
bin/ash
bin/fdisk*
bin/mkfs*
bin/sed
bin/dbus-daemon
bin/dbus-uuidgen
etc/group
etc/iscsi/iscsid.conf
etc/libjconv/*
etc/passwd
etc/pcmcia/*
etc/pki/*
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
etc/dbus-1/*
etc/dbus-1/system.d/*
etc/PolicyKit/*
etc/polkit-1/*
etc/ConsoleKit/*
etc/ConsoleKit/seats.d/*
etc/mke2fs.conf
lib/terminfo/l/linux
$LIBDIR/ld*.so*
$LIBDIR/libblkid*
$LIBDIR/libc*
$LIBDIR/libcom_err*
$LIBDIR/libcrypt*
$LIBDIR/libdevmapper*
$LIBDIR/libdl*
$LIBDIR/libe2p*
$LIBDIR/libext2fs*
$LIBDIR/libgss*
$LIBDIR/liblvm2*
$LIBDIR/libm[-.]*
$LIBDIR/libmount*
$LIBDIR/libnsl*
$LIBDIR/libnss_dns*
$LIBDIR/libnss_files*
$LIBDIR/libnih*
$LIBDIR/libpthread*
$LIBDIR/libresolv*
$LIBDIR/librt[-.]*
$LIBDIR/libselinux*
$LIBDIR/libsepol*
$LIBDIR/libss*
$LIBDIR/libtermcap*
$LIBDIR/libtinfo*
$LIBDIR/libthread*
$LIBDIR/libhandle*
$LIBDIR/libattr*
$LIBDIR/libaudit*.so*
$LIBDIR/libdm*
$LIBDIR/libutil*
$LIBDIR/libuuid*
$LIBDIR/libgcc_s*
$LIBDIR/libssl*
$LIBDIR/libcrypto*
$LIBDIR/libpopt*
$LIBDIR/libkeyutils*
$LIBDIR/libreadline*
$LIBDIR/libncurses*
$LIBDIR/libtinfo*
$LIBDIR/libdbus*
$LIBDIR/libdb4*
$LIBDIR/libdb-*
$LIBDIR/libcap*
$LIBDIR/libudev*
$LIBDIR/dbus-1/*
$LIBDIR/bogl/*
sbin/badblocks
sbin/busybox.anaconda
sbin/clock
sbin/debugfs
sbin/dmraid.static
sbin/dmsetup
sbin/dumpe2fs
sbin/e2fsck
sbin/e2fsadm
sbin/e2image
sbin/e2label
sbin/fsck.ext2
sbin/fsck.ext3
sbin/fsck.ext4
sbin/fsck.jfs
sbin/fsck.xfs
sbin/fdisk
sbin/hdparm
sbin/hwclock
sbin/iscsiadm
sbin/iscsid
sbin/iscsistart
sbin/jfs_tune
sbin/ldconfig
sbin/lvm*
sbin/mdadm
sbin/mkdosfs
sbin/mke2fs
sbin/mkfs.ext2
sbin/mkfs.ext3
sbin/mkfs.ext4
sbin/mkfs.jfs
sbin/mkfs.xfs
sbin/mkfs.msdos
sbin/mkfs.vfat
sbin/mkreiserfs
sbin/mkraid
sbin/mkswap
sbin/parted
sbin/pcmcia-socket-startup
sbin/pdisk
sbin/probe
sbin/reiserfstune
sbin/resize2fs
sbin/sfdisk
sbin/tune2fs
sbin/vconfig
sbin/xfsdump
sbin/xfsrestore
sbin/xfs_repair
sbin/mkofboot
sbin/ofpath
sbin/yabootconfig
sbin/ybin
usr/sbin/xfs_db
usr/sbin/xfs_check
usr/sbin/xfs_copy
usr/sbin/gptsync
usr/sbin/hald
usr/bin/Xautoconfig
usr/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/bin/lshal
usr/bin/ck-*
usr/bin/ldd
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/lib/locale/*
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/libbdevid.so*
usr/$LIBDIR/libdmraid.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/EUC-JP.so
usr/$LIBDIR/gconv/libJIS.so
usr/$LIBDIR/gconv/gconv-modules
usr/$LIBDIR/libbeecrypt*
usr/$LIBDIR/libglib*
usr/$LIBDIR/libgmodule*
usr/$LIBDIR/libgio*
usr/$LIBDIR/libgobject*
usr/$LIBDIR/libgthread*
usr/$LIBDIR/libssl*
usr/$LIBDIR/libsqlite3*
usr/$LIBDIR/libcrypto*
usr/$LIBDIR/libbz2*
usr/$LIBDIR/libelf*
usr/$LIBDIR/libexpat*
usr/$LIBDIR/libmagic*
usr/$LIBDIR/libneon*
usr/$LIBDIR/libnewt*
usr/$LIBDIR/libnspr*
usr/$LIBDIR/libnss*
usr/$LIBDIR/libpcre*
usr/$LIBDIR/libplc4*
usr/$LIBDIR/libplds4*
usr/$LIBDIR/libsmime3*
usr/$LIBDIR/libfreebl3.so
usr/$LIBDIR/libfreebl3.chk
usr/$LIBDIR/libsoftokn3.so
usr/$LIBDIR/libsoftokn3.chk
usr/$LIBDIR/libssl3*
usr/$LIBDIR/libparted*
usr/$LIBDIR/libpopt*
usr/$LIBDIR/libpolkit*
usr/$LIBDIR/libpython*
usr/$LIBDIR/libreadline*
usr/$LIBDIR/librpm*.so*
usr/$LIBDIR/libslang*
usr/$LIBDIR/libxml2.so*
usr/$LIBDIR/libz.*
usr/$LIBDIR/liblzma.*
usr/$LIBDIR/liblua-*.so
usr/$LIBDIR/libbogl.so*
usr/$LIBDIR/libbterm.so*
usr/$LIBDIR/libstdc++*
usr/$LIBDIR/libgnutls*
usr/$LIBDIR/libtasn1*
usr/$LIBDIR/libgcrypt*
usr/$LIBDIR/libgpg-error*
usr/$LIBDIR/libpolkit*
usr/$LIBDIR/libdb4*
usr/$LIBDIR/libdb-*
usr/$LIBDIR/libpci*
usr/$LIBDIR/libgudev*
usr/$LIBDIR/python?.?/*
usr/$LIBDIR/python?.?/site-packages/libxml2*
usr/$LIBDIR/python?.?/site-packages/*kudzu*
usr/$LIBDIR/python?.?/site-packages/*snack*
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/rpm
usr/$LIBDIR/python?.?/site-packages/rhpl
usr/$LIBDIR/python?.?/site-packages/rhpxl
usr/$LIBDIR/python?.?/site-packages/dbus
usr/$LIBDIR/python?.?/site-packages/*dbus*
usr/lib/python?.?/site-packages/*dbus*
usr/lib/python?.?/site-packages/*dbus*
usr/$LIBDIR/ConsoleKit/*
usr/$LIBDIR/ConsoleKit/scripts/*
usr/lib/rpm/macros
usr/lib/rpm/rpmpopt
usr/lib/rpm/rpmrc
usr/lib/polkit-1/*
usr/lib/yaboot/addnote
usr/lib/yaboot/ofboot
usr/lib/yaboot/yaboot
usr/libexec/convertdb1
usr/libexec/polkit*
usr/share/locale/*/LC_MESSAGES/anaconda.mo
usr/sbin/anaconda
usr/share/bogl/*
usr/sbin/ddcprobe
usr/sbin/dmidecode
usr/sbin/load_policy
usr/sbin/mouseconfig
usr/sbin/gptsync
usr/sbin/showpart
usr/sbin/console-kit-daemon
usr/sbin/ck-*
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/hal
usr/share/hwdata/MonitorsDB
usr/share/hwdata/pci.ids
usr/share/hwdata/usb.ids
usr/share/hwdata/videoaliases/*
usr/share/hwdata/videodrivers
usr/share/file/magic
usr/share/magic
usr/share/misc/magic*
usr/share/rhpl/extramodes
usr/share/rhpl/vesamodes
usr/share/dbus-1/system-services/*
usr/share/PolicyKit/policy/*
var/cache/hald
var/lib/dbus
var/lib/hal
var/lib/PolicyKit*
var/lib/polkit*
var/lib/misc/PolicyKit/*
var/run/PolicyKit
var/run/ConsoleKit
var/run/dbus
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/$LIBDIR/libXmuu.so*
usr/$LIBDIR/libX11.so*
usr/$LIBDIR/libXext.so*
usr/$LIBDIR/libXxf86misc.so*
usr/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/vine/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/X11/xkb/*
etc/X11/fontpath.d/*
etc/fb.modes
etc/gtk-2.0/gtkrc*
etc/im_palette.pal
etc/imrc
etc/libjconv/*
etc/man_db.conf
etc/pango/*
etc/fonts/*
etc/prelink.conf
etc/hal
etc/rpm/macros.prelink
$LIBDIR/libacl*
$LIBDIR/libattr*
$LIBDIR/libgcc*
$LIBDIR/libnss_dns*
$LIBDIR/libpam*
$LIBDIR/libproc*
$LIBDIR/libdbus*
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/bin/XOrg
usr/bin/Xorg
usr/bin/setxkbmap
usr/bin/xsetroot
usr/share/X11/XKeysymDB
usr/share/X11/fonts/misc/6x13*
usr/share/X11/fonts/misc/fonts*
usr/share/X11/fonts/misc/cursor*
usr/share/X11/fonts/misc/olcursor*
usr/share/X11/fonts/Type1/l047013t*
usr/share/X11/fonts/Type1/*
usr/share/X11/locale/*
usr/share/X11/rgb*
usr/share/X11/xkb/*
usr/share/X11/xserver/SecurityPolicy
usr/share/X11/icons/default/*
usr/lib/X11/icons/Vine/*
usr/share/X11/xorg.conf.d/*
usr/share/icons/Vine/cursors/*
usr/share/icons/Vine/stock/*
usr/share/icons/Vine/status/*
usr/share/icons/Vine/actions/*
usr/share/icons/Vine/index.theme
usr/$LIBDIR/xserver/SecurityPolicy
usr/$LIBDIR/libICE*
usr/$LIBDIR/libSM*
usr/$LIBDIR/libXaw.so*
usr/$LIBDIR/libX11*
usr/$LIBDIR/libXcursor*
usr/$LIBDIR/libXext*
usr/$LIBDIR/libXfixes*
usr/$LIBDIR/libXft*
usr/$LIBDIR/libXi*
usr/$LIBDIR/libxkbfile*
usr/$LIBDIR/libXmu*
usr/$LIBDIR/libXpm*
usr/$LIBDIR/libXrandr*
usr/$LIBDIR/libXrender*
usr/$LIBDIR/libXt*
usr/$LIBDIR/libXxf86misc*
usr/$LIBDIR/liblbxutil*
usr/$LIBDIR/libXfont*
usr/$LIBDIR/libfontenc*
usr/$LIBDIR/libXau*
usr/$LIBDIR/libXdmcp*
usr/$LIBDIR/libxcb*
usr/$LIBDIR/libXcomposite*
usr/$LIBDIR/libXdamage*
usr/$LIBDIR/libcroco*
usr/$LIBDIR/libpixman*
usr/$LIBDIR/libpciaccess*
usr/$LIBDIR/libdrm*
usr/$LIBDIR/xorg/modules/*
usr/$LIBDIR/xorg/modules/drivers/*
usr/$LIBDIR/xorg/modules/input/*
usr/$LIBDIR/xorg/modules/linux/*
usr/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/xkbcomp
usr/bin/xrandr
usr/bin/vncconfig
usr/bin/vncpasswd
usr/bin/update-mime-database
usr/lib/anaconda/iw
usr/$LIBDIR/gconv/*
usr/$LIBDIR/gdk-pixbuf/loaders/*xpm*.*
usr/$LIBDIR/gdk-pixbuf/loaders/*png*.*
usr/$LIBDIR/gtk-2.0/*/engines/libclearlooks.so
usr/$LIBDIR/gtk-2.0/*/engines/libsvg.*
usr/$LIBDIR/gtk-2.0/*/loaders/*xpm*.so
usr/$LIBDIR/gtk-2.0/*/loaders/*png*.so
usr/$LIBDIR/gtk-2.0/*/loaders/svg_loader.so
usr/$LIBDIR/gtk-2.0/immodules/
usr/$LIBDIR/gdk-pixbuf-2.0/*/loaders/*svg*.so
usr/$LIBDIR/gdk-pixbuf-2.0/*/loaders/*jpeg*.so
usr/$LIBDIR/gdk-pixbuf-2.0/*/loaders/*xpm*.so
usr/$LIBDIR/libImlib*
usr/$LIBDIR/libXft*
usr/$LIBDIR/libart*
usr/$LIBDIR/libatk*
usr/$LIBDIR/libasound*
usr/$LIBDIR/libavahi*
usr/$LIBDIR/libdbus*
usr/$LIBDIR/libhal*
usr/$LIBDIR/libaudio*
usr/$LIBDIR/libpixman*
usr/$LIBDIR/libcairo*
usr/$LIBDIR/libesd*
usr/$LIBDIR/libexpat*
usr/$LIBDIR/libfontconfig*
usr/$LIBDIR/libfreetype*
usr/$LIBDIR/libgailutil*
usr/$LIBDIR/libgdk*
usr/$LIBDIR/libgnomecanvas*
usr/$LIBDIR/libgnomeui*
usr/$LIBDIR/libgnome*
usr/$LIBDIR/libbonobo*
usr/$LIBDIR/libgconf*
usr/$LIBDIR/libORBit*
usr/$LIBDIR/libgpm*
usr/$LIBDIR/libgtk*
usr/$LIBDIR/libjpeg*
usr/$LIBDIR/libncurses*
usr/$LIBDIR/libpango*
usr/$LIBDIR/libpng.so.3*
usr/$LIBDIR/libpng12.so*
usr/$LIBDIR/libreadline*
usr/$LIBDIR/librsvg-2*
usr/$LIBDIR/libstdc++.so.*
usr/$LIBDIR/libtiff*
usr/$LIBDIR/libwrap*
usr/$LIBDIR/libgsf*
usr/$LIBDIR/libpyglib*
usr/$LIBDIR/libffi*
usr/$LIBDIR/bonobo/servers/*
usr/$LIBDIR/hal
usr/$LIBDIR/libuser/*
usr/libexec/bonobo*
usr/libexec/hal*
usr/lib/locale/*
usr/$LIBDIR/pango/*
usr/$LIBDIR/python?.?/site-packages/cairo/*
usr/$LIBDIR/python?.?/site-packages/gtk*/gtk/*
usr/$LIBDIR/python?.?/site-packages/gtk*/gio/*
usr/$LIBDIR/python?.?/site-packages/gtk*/glib/*
usr/$LIBDIR/python?.?/site-packages/gtk*/gobject/*
usr/$LIBDIR/python?.?/site-packages/gtk*/*
usr/$LIBDIR/python?.?/site-packages/dbus*/*
usr/$LIBDIR/python?.?/site-packages/pygtk*
usr/$LIBDIR/rpm/rpmpopt
usr/$LIBDIR/syslinux/*
usr/lib/yaboot/*
usr/sbin/chroot
usr/sbin/ddcprobe
usr/sbin/fbset
usr/sbin/prelink
usr/sbin/smartctl
usr/share/anaconda/*
usr/share/hal
usr/share/icons/default/*
usr/share/icons/Vine/*
usr/share/icons/Vine/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/TrueType-vlgothic/VL-PGothic-Regular.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/vine-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/rhpxl.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/syslinux/*
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/Vine/gtk-2.0/*
usr/share/themes/ClearVine/gtk-2.0/*
usr/share/themes/Vine/index.theme
usr/share/themes/ClearVine/index.theme
usr/share/vte/termcap/xterm
usr/share/zoneinfo/zone.tab
usr/share/mime
usr/share/mime/packages/*
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/share/X11/fonts/100dpi/cour*
usr/share/X11/fonts/100dpi/helv*
usr/share/X11/fonts/100dpi/tim*
usr/share/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/*
etc/libjconv/*
sbin/arp
sbin/depmod
sbin/dump
sbin/ifconfig
sbin/insmod
sbin/lsmod
sbin/lspci
sbin/modinfo
sbin/modprobe
sbin/netstat
sbin/pdisk
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/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/nano
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

if [ $ARCH = i386 -o $ARCH = x86_64 ]; then
    cat >> $KEEPFILERESCUE <<-EOF
boot/grub
sbin/grub
sbin/grub-install
sbin/grub-md5-crypt
sbin/grub-set-default
usr/bin/mbchk
usr/share/grub/*
EOF
fi

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

# dmraid
for i in $DEST $DESTGR; do
    # there's never a case with only one of these...
    for tool in dmraid dmsetup ; do
        if [ -f $i/sbin/$tool.static ]; then
            mv $i/sbin/$tool.static $i/sbin/$tool
        fi
    done
done

# 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
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 XOrg modules
rm -rf $DESTGR/usr/$LIBDIR/modules/dri
rm -f $DESTGR/usr/$LIBDIR/modules/libscanpci.a
rm -f $DESTGR/usr/$LIBDIR/modules/libxf1bpp.a
rm -f $DESTGR/usr/$LIBDIR/modules/fonts/libspeedo.a
rm -f $DESTGR/usr/$LIBDIR/xorg/modules/drivers/linux/v4l_drv.so
rm -f $DESTGR/usr/$LIBDIR/modules/extensions/libdri.a
rm -f $DESTGR/usr/$LIBDIR/modules/extensions/libxtrap.a
rm -f $DESTGR/usr/$LIBDIR/modules/extensions/librecord.a

rm -f $DESTGR//usr/$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

# increase stack limit
echo "Creating limits.conf"
mkdir -p $DEST/etc/security
mkdir -p $DESTGR/etc/security
cat > $DEST/etc/security/limits.conf <<EOF
* soft stack 16384
* hard stack 16384
EOF
cp -f $DEST/etc/security/limits.conf $DESTGR/etc/security/

echo "Running mkfontdir..."
if [ -n "$NEEDGR" ]; then
    [ -f $DESTGR/usr/share/X11/fonts/ ] && /usr/bin/mkfontdir $DESTGR/usr/share/X11/fonts/* 
    [ -f $DESTGR/usr/share/fonts/ ] && /usr/bin/mkfontdir $DESTGR/usr/share/fonts/*
    rm -f $DESTGR/usr/bin/mkfontdir
fi

# autoconf uses powerpc not ppc
_ARCH=`uname -i | sed "s/^ppc/powerpc/"`

mkdir -p $DESTGR/etc/pango/$_ARCH
mkdir -p $DESTGR/etc/gtk-2.0/$_ARCH

# at least Vine/ppc uses ppc not powerpc, so here is a dirty hack
# (should be fixed in the more recent anaconda I hope)
if [ $ARCH = ppc -o $ARCH = ppc64 ]; then
    ln -sf powerpc $DESTGR/etc/pango/ppc
    ln -sf powerpc $DESTGR/etc/gtk-2.0/ppc
fi

echo "Getting pango moodules"
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
    LD_LIBRARY_PATH=//usr/$LIBDIR:$LD_LIBRARY_PATH /usr/sbin/chroot $DESTGR /usr/bin/pango-querymodules > $DESTGR/etc/pango/$_ARCH/pango.modules
    rm -f $DESTGR/usr/bin/pango-querymodules
    # more sick hackery since it doesn't fall back to this like owen thought
fi

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
    LD_LIBRARY_PATH=//usr/$LIBDIR:$LD_LIBRARY_PATH /usr/sbin/chroot $DESTGR /usr/bin/gtk-query-immodules-2.0 > $DESTGR/etc/gtk-2.0/$_ARCH/gtk.immodules
    rm -f $DESTGR/usr/bin/gtk-query-immodules-2.0
fi

# XXX
cat >> $DESTGR/etc/passwd <<EOF 
dbus:*:81:81:System message bus:/:/sbin/nologin
haldaemon:*:68:68:HAL daemon:/:/sbin/nologin
polkituser:*:87:87:PolicyKit:/:/sbin/nologin
EOF
cat >> $DESTGR/etc/group <<EOF
dbus::81:
haldaemon::68:
polkituser::87:
EOF

# default xorg.conf
mkdir -p $DESTGR/etc/X11
cat >> $DESTGR/etc/X11/xorg.conf <<EOF

Section "ServerFlags"
	Option "AllowEmptyInput" "off"
        Option "AllowMouseOpenFail"  "true"
EndSection

Section "ServerLayout"
	Identifier     "single head configuration"
	Screen      0  "Screen0" 0 0
	InputDevice    "Keyboard0" "CoreKeyboard"
        InputDevice    "Evdev0" "CorePointer"
        InputDevice    "Evdev1" "SendCoreEvents"
        InputDevice    "Evdev2" "SendCoreEvents"
        InputDevice    "Evdev3" "SendCoreEvents"
        InputDevice    "Evdev4" "SendCoreEvents"
        InputDevice    "Evdev5" "SendCoreEvents"
        InputDevice    "Evdev6" "SendCoreEvents"
        InputDevice    "Evdev7" "SendCoreEvents"
EndSection

Section "InputDevice"
	Identifier  "Keyboard0"
	Driver      "kbd"
	Option	    "XkbModel" "jp106"
	Option	    "XkbLayout" "jp"
EndSection

Section "InputDevice"
        Identifier  "Evdev0"
        Driver      "evdev"
        Option      "Device" "/dev/input/event0"
        #Option      "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
        Identifier  "Evdev1"
        Driver      "evdev"
        Option      "Device" "/dev/input/event1"
        #Option      "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
        Identifier  "Evdev2"
        Driver      "evdev"
        Option      "Device" "/dev/input/event2"
        #Option      "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
        Identifier  "Evdev3"
        Driver      "evdev"
        Option      "Device" "/dev/input/event3"
        #Option      "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
        Identifier  "Evdev4"
        Driver      "evdev"
        Option      "Device" "/dev/input/event4"
        #Option      "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
        Identifier  "Evdev5"
        Driver      "evdev"
        Option      "Device" "/dev/input/event5"
        #Option      "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
        Identifier  "Evdev6"
        Driver      "evdev"
        Option      "Device" "/dev/input/event6"
        #Option      "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
        Identifier  "Evdev7"
        Driver      "evdev"
        Option      "Device" "/dev/input/event7"
        #Option      "ZAxisMapping" "4 5"
EndSection

Section "Device"
	Identifier "Videocard0"
	# Driver "vesa"
EndSection

Section "Screen"
        Identifier "Screen0"
	Device     "Videocard0"
        DefaultDepth     24
EndSection
									
EOF
cp -f $DESTGR/etc/X11/xorg.conf $DESTGR/etc/X11/xorg.conf.dist


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
    LD_LIBRARY_PATH=//usr/$LIBDIR:$LD_LIBRARY_PATH /usr/sbin/chroot $DESTGR /usr/bin/gdk-pixbuf-query-loaders > $DESTGR/etc/gtk-2.0/$_ARCH/gdk-pixbuf.loaders
    LD_LIBRARY_PATH=//usr/$LIBDIR:$LD_LIBRARY_PATH /usr/sbin/chroot $DESTGR /usr/bin/gdk-pixbuf-query-loaders --update-cache
    rm -f $DESTGR/usr/bin/gdk-pixbuf-query-loaders
fi

echo "Getting mime database"
if [ -n "$NEEDGR" ]; then
    mkdir -p $DESTGR/usr/share/mime
    /usr/bin/update-mime-database $DESTGR/usr/share/mime
    rm -f $DESTGR/usr/bin/update-mime-database
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 -s ash $p/bin/sh
	fi
	ln -s /usr/bin/echo $p/bin/echo

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

	# copy bootloader files for i386/x86_64
	if [ $ARCH = i386 -o $ARCH = i686 -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/$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

	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
	
	mkdir -p $p/usr/lib/locale
	/usr/bin/localedef -f UTF-8 -i en_US --prefix=$p en_US.UTF-8
	/usr/bin/localedef -f UTF-8 -i ja_JP --prefix=$p ja_JP.UTF-8
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/$LIBDIR:$LD_LIBRARY_PATH /usr/sbin/chroot $DESTGR /usr/bin/fc-cache"
    else
	LD_LIBRARY_PATH=//usr/$LIBDIR:$LD_LIBRARY_PATH /usr/sbin/chroot $DESTGR /usr/bin/fc-cache
    fi
    rm -f $DESTGR/usr/bin/fc-cache
fi

echo "Creating gtkrc"
if [ -n "$NEEDGR" ]; then
    cat > $DESTGR/etc/gtk-2.0/gtkrc <<EOF
gtk-theme-name = "Vine"
gtk-icon-theme-name = "Vine"
EOF
fi

echo "default icon theme"
if [ -n "$NEEDGR" ]; then
    mkdir -p $DESTGR/usr/share/icons/default/
    cat > $DESTGR/usr/share/icons/default/index.theme <<EOF
[Icon Theme]
Inherits=Vine
EOF
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.6
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
	    if [ $p = $DEST ]; then
		rm -f ${fn}c
		ln -sf /dev/null ${fn}c
	    fi
	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
