#!/bin/bash
# $Id: make_minimal,v 1.14 2009-01-28 23:50:10 tim Exp $

DIST=$1

if [[ $( id -u ) -ne 0 ]]; then echo "You must be root to run $0"; exit 1; fi

LOOPDEV=$(losetup.orig -f)
TMPDIR1=tmp-build1

rm -fr ${TMPDIR1}
rm -f install.ext2 install.dmp
mkdir ${TMPDIR1}

#Build an empty filesystem
dd if=/dev/zero of=install.ext2 bs=1k count=350k

losetup ${LOOPDEV} install.ext2
mke2fs ${LOOPDEV}
mount -t ext2 ${LOOPDEV} ${TMPDIR1}

#install a minimal system
debootstrap --variant=minbase ${DIST} ${TMPDIR1} ftp://einstein/debian

#setup sources.list
echo "deb ftp://einstein/debian ${DIST} main" >${TMPDIR1}/etc/apt/sources.list
echo "deb ftp://einstein/debian-security ${DIST}/updates main" >>${TMPDIR1}/etc/apt/sources.list

#setup resolv.conf
rm -f ${TMPDIR1}/etc/resolv.conf
echo "nameserver 192.168.100.100" >${TMPDIR1}/etc/resolv.conf
echo "search home.woodall.me.uk" >>${TMPDIR1}/etc/resolv.conf

#Bring the system up to date and remove any non compulsory packages
chroot ${TMPDIR1} /bin/bash <<CHROOT

cat <<EOF >/etc/apt/apt.conf
// /usr/share/doc/apt/examples/configure-index.gz is a configuration
// file showing example values for all possible options.

// Options for APT in general
APT
{
  Install-Recommends "false";
}
EOF

export LANG=C
apt-get -qy update
apt-get -qy upgrade

cd /var/lib/dpkg/info

for i in *.list; do
    j=\${i%.list}
    apt-get -y remove --purge \$j
done

apt-get clean

cat <<EOF >/etc/hosts
127.0.0.1       localhost

# The following lines are desirable for IPv6 capable hosts
# (added automatically by netbase upgrade)

::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
EOF

CHROOT

#Turn on shadow passwords.
IFS=":"

if [ ! -f ${TMPDIR1}/etc/shadow ]; then
    mv ${TMPDIR1}/etc/passwd ${TMPDIR1}/etc/passwd.old

    while read a b c; do
	echo "$a:x:$c" >>${TMPDIR1}/etc/passwd
	echo "$a:$b:$[ `date "+%s"`/86400 ]:0:99999:7:::" >>${TMPDIR1}/etc/shadow
    done <${TMPDIR1}/etc/passwd.old

    rm ${TMPDIR1}/etc/passwd.old
    chmod 640 ${TMPDIR1}/etc/shadow
fi

if [ ! -f ${TMPDIR1}/etc/gshadow ]; then
    mv ${TMPDIR1}/etc/group ${TMPDIR1}/etc/group.old

    while read a b c d; do
	echo "$a:x:$c:$d" >>${TMPDIR1}/etc/group
	echo "$a:*::$d" >>${TMPDIR1}/etc/gshadow
    done <${TMPDIR1}/etc/group.old

    rm ${TMPDIR1}/etc/group.old
    chmod 640 ${TMPDIR1}/etc/gshadow
fi

chmod 700 ${TMPDIR1}/root
chmod 555 ${TMPDIR1}/proc

#Remove our sources.list and resolve.conf
rm -f ${TMPDIR1}/etc/apt/sources.list
rm -f ${TMPDIR1}/etc/resolv.conf
rm -fr ${TMPDIR1}/media
rm -fr ${TMPDIR1}/srv
rm -f ${TMPDIR1}/var/lib/dpkg/*-old
rm -f ${TMPDIR1}/etc/mailname
rm -f ${TMPDIR1}/etc/group-
rm -f ${TMPDIR1}/etc/passwd-
rm -f ${TMPDIR1}/etc/aliases
rm -fr ${TMPDIR1}/var/backups/*
rm -fr ${TMPDIR1}/var/cache/debconf/*-old
rm -fr ${TMPDIR1}/dev/*
rm -fr ${TMPDIR1}/initrd
rm -fr ${TMPDIR1}/lost+found
rm -f $TMPDIR1/var/log/bootstrap.log
rm -f $TMPDIR1/var/log/dpkg.log
mv $TMPDIR1/var/lib/apt/lists/partial $TMPDIR1/var/lib/apt/lists/.partial
rm -f $TMPDIR1/var/lib/apt/lists/*
mv $TMPDIR1/var/lib/apt/lists/.partial $TMPDIR1/var/lib/apt/lists/partial
rm -fr $TMPDIR1/var/cache/locate/
rm -f $TMPDIR1/var/cache/apt/*.bin
rm -f $TMPDIR1/var/cache/debconf/*old

echo install >${TMPDIR1}/etc/hostname

#Unmount the filesystem
umount ${TMPDIR1}

#Dump the filesystem
/sbin/dump -0 -f install.dmp ${LOOPDEV} || rm -f install.dmp

#Delete our workfile
losetup -d ${LOOPDEV}
rm -f install.ext2
rm -fr ${TMPDIR1}

exit 0
