#!/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 </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 </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