#!/bin/sh

LIBS="libc libext2fs.so libnsl libnss_files libuuid libnss_compat libcom_err
      libe2p"
# chmod could be a VIRTBIN, but the runinstall2 script uses it to set things up
BINS="bzip2 mke2fs ash badblocks rm chmod gpm"
VIRTBINS="cat lsmod mkdir mknod mount rm umount ln uncpio ls"
ZBINS="install2 fdisk"

CDLIBS="libc libcom_err libcrypt libdb libdl libe2p libext2fs libm libnsl
        libnss_compat libnss_dns libnss_files libresolv libtermcap libutil
        libuuid libproc"
CDBINS="ash badblocks bash cp df e2fsck fdisk fsck fsck.ext2 gdb grep gzip
        ifconfig ldd ln ls mke2fs ping ps route rpm vim wc"
CDVIRTBINS="cat chmod lsmod mkdir mknod mount rm umount"

PCMCIA_SBINS="cardmgr"
MODLINKS="block cdrom misc net scsi"
KERNELROOT=/tmp/updsupp.kernel-$$

export PATH=$PATH:/sbin:/usr/sbin

usage () {
    echo "updsupp: <imagetree> <rpm-tree> <kernel-version> [dep]" 2>&1
    exit 1
}

if [ -z "$1" -o -z "$2" -o -z "$3" ]; then
    usage
fi

mkdir -p $KERNELROOT
#rpm2cpio $2/kernel-pcmcia-cs-$3.i386.rpm | (cd $KERNELROOT; cpio -id)
#rpm2cpio $2/kernel-$3.i386.rpm | (cd $KERNELROOT; cpio -id)

if [ ! -d "$1/misc/src/install" ]; then
    echo "$1 is not a valid directory" 2>&1
    usage
fi

#if [ ! -d "$KERNELROOT/lib/modules/$3/pcmcia" ]; then
#    echo "$3 is not a valid modules directory" 2>&1
#    usage
#fi

#if [ ! -f "$KERNELROOT/boot/vmlinuz-$3" ]; then
#    echo "$KERNELROOT/boot/vmlinuz-$3 does not exist"
#    usage
#fi

PATH=$1/misc/src/install:/usr/sbin:/usr/bin:/bin:/sbin

rm -rf supp
rm -rf ../../../RedHat/instimage/lib
rm -rf ../../../RedHat/instimage/usr
mkdir -p ../../../RedHat/instimage/lib
mkdir -p ../../../RedHat/instimage/usr/bin
mkdir -p ../../../RedHat/instimage/usr/etc
mkdir -p supp/lib
mkdir -p supp/usr/bin
mkdir -p supp/usr/etc
mkdir -p supp/var
ln -s ../tmp supp/var/tmp
ln -s /tmp supp/lib/modules

cp -a /lib/ld-2*.so supp/lib
cp -a /lib/ld-linux.so.2* supp/lib

cp -a /lib/ld-2*.so ../../../RedHat/instimage/lib
cp -a /lib/ld-linux.so.2* ../../../RedHat/instimage/lib

for n in $CDLIBS; do
	(cd /lib; tar cSpf - ${n}[-.]*) | (cd ../../../RedHat/instimage/lib; tar xSpf -)
done

for n in $LIBS; do
	# this preserves hard links
	(cd /lib; tar cSpf - ${n}[-.]*) | (cd supp/lib; tar xSpf -)
done

(cd supp/lib; file * | grep 'shared object' | cut -d: -f1 | xargs strip)

cat > supp/usr/bin/runinstall2 <<EOF
#!/bin/sh

PATH=/usr/bin:/bin

echo "" > /sbin/install

> /sbin/install2
chmod 755 /sbin/install2

bunzip2 < /usr/bin/install2.bz2 > /sbin/install2
bunzip2 < /usr/bin/fdisk.bz2 > /tmp/fdisk
chmod 755 /tmp/fdisk

rm /sbin/install
ln -sf /sbin/install2 /sbin/insmod
ln -sf /sbin/install2 /sbin/rmmod

exec /sbin/install2 \$*
EOF
chmod 755 supp/usr/bin/runinstall2

cat > ../../../RedHat/instimage//usr/bin/runinstall2 <<EOF
#!/bin/sh

rm /sbin/install
ln -sf /usr/bin/install2 /sbin/insmod
ln -sf /usr/bin/install2 /sbin/rmmod

exec /usr/bin/install2 \$*
EOF
chmod 755 ../../../RedHat/instimage//usr/bin/runinstall2

for n in $BINS; do
	rm -f supp/usr/bin/$n
	cp -af `which $n` supp/usr/bin
done

ln -sf bzip2 supp/usr/bin/bunzip2
ln -sf ash supp/usr/bin/sh

for n in $VIRTBINS; do
	ln -sf /sbin/install2 supp/usr/bin/$n
done

for n in $ZBINS; do
	rm -f supp/usr/bin/$n
	rm -f ../../../RedHat/instimage/usr/bin/$n
	cp -af `which $n` ../../../RedHat/instimage/usr/bin
	strip `which $n`
	bzip2 -9 < `which $n` > supp/usr/bin/$n.bz2
	ln -sf /tmp/$n supp/usr/bin/$n
done

for n in $CDBINS; do
	rm -f ../../../RedHat/instimage/usr/bin/$n
	cp -af `which $n` ../../../RedHat/instimage/usr/bin
done

ln -sf bash ../../../RedHat/instimage/usr/bin/sh
ln -sf gzip ../../../RedHat/instimage/usr/bin/gunzip
ln -sf vim ../../../RedHat/instimage/usr/bin/vi

for n in $CDVIRTBINS; do
	ln -sf install2 ../../../RedHat/instimage/usr/bin/$n
done

cp ../install/install2.tr supp/usr/etc
cp ../install/install2.tr ../../../RedHat/instimage/usr/etc

if echo $3 | grep -s -e -; then
    shortname=`echo $3 | sed 's/-.*//'`
else
    shortname=$3
fi

rm -rf pcmcia/lib/modules
mkdir -p pcmcia/lib/modules/${shortname}/pcmcia
mkdir -p pcmcia/etc/pcmcia
mkdir -p pcmcia/sbin

#cp $KERNELROOT/lib/modules/$3/pcmcia/* pcmcia/lib/modules/${shortname}/pcmcia

rm -f pcmcia/etc/pcmcia/*
#cp -av $KERNELROOT/etc/pcmcia/* pcmcia/etc/pcmcia

# unfotunately, this breaks things
# strip --strip-unneeded pcmcia/lib/modules/$2/pcmcia/*.o

for n in $MODLINKS; do 
	ln -s /modules pcmcia/lib/modules/${shortname}/$n
done

(cd pcmcia/lib/modules; ln -s * preferred) 

#for n in $PCMCIA_SBINS; do
#	rm -f pcmcia/sbin/$n
#	cp -af $KERNELROOT/sbin/$n pcmcia/sbin/$n
#done

rm -rf pcmcia-disk
mkdir pcmcia-disk
echo "Letting NFS settle down"
sleep 5
(cd pcmcia; find . -type f -o -type l | cpio -H crc -o) | gzip -9 > \
     pcmcia-disk/pcmcia.cgz

mkdir -p pcmcia-disk/lib
cp -a /lib/ld-2*.so pcmcia-disk/lib
cp -a /lib/ld-linux.so.2* pcmcia-disk/lib
(cd /lib; tar cSpf - libc[-.]*) | (cd pcmcia-disk/lib; tar xSpf -)
(cd pcmcia-disk/lib; strip *)

(cd ../../../RedHat/instimage/; tar cSpf - modules) | (cd supp; tar xSpf -)

