# Settings !!!*** PLEASE MODIFY THESE ***!!! export MIRROR="ftp://ftp.mirror.ac.uk/sites/fedora.redhat.com/4/x86_64/os/Fedora/RPMS/" export TMPDIR=`pwd`"/tmp" export ROOT_FS=`pwd`"/FedoraCore4-AMD64-root_fs" export RPM_DIR=`pwd`"/RPMS" export CHROOTCMD="chroot" export RPMCMD="rpm" function fetch() { local=$RPM_DIR"/$1.rpm" if [ ! -e "$local" ]; then echo "Downloading $1" wget -c -O $local "$MIRROR$1.rpm" fi } function rpminstall() { fetch $1 stripped=`echo $1 | sed 's+\.noarch++g' | sed 's+\.x86_64++g'` exists=`$RPMCMD -qa --root $TMPDIR | grep $stripped | wc -l` if [ "$exists" -ne "0" ]; then echo "skipped: $stripped" else $RPMCMD -ivh --root $TMPDIR $local fi } function rpminstallgroup() { list="" while [ $# -ne 0 ] do package=$1 fetch $package stripped=`echo $1 | sed 's+\.noarch++g' | sed 's+\.x86_64++g'` exists=`$RPMCMD -qa --root $TMPDIR | grep $stripped | wc -l` if [ "$exists" -ne "0" ]; then echo "skipped: $stripped" else list="$list $local" fi shift done echo "installing list=$list" $RPMCMD -ivh --root $TMPDIR $list } # Making the filesystem if [ ! -e "$ROOT_FS" ]; then dd if=/dev/zero of=$ROOT_FS bs=1024 count=1 seek=1572864 mkfs.ext3 $ROOT_FS else echo "Filesystem already created" fi if [ ! -e "$TMPDIR" ]; then mkdir $TMPDIR mount -o loop $ROOT_FS $TMPDIR else echo "Filesystem already mounted" fi mkdir -p $RPM_DIR if [ ! -e "$TMPDIR/var/lib/rpm" ]; then $RPMCMD --initdb --root $TMPDIR fi if [ ! -e "$TMPDIR/dev" ]; then mkdir $TMPDIR/dev mknod $TMPDIR/dev/null c 1 3 fi # pretend to have a kernel (we don't need one): fetch kernel-2.6.11-1.1369_FC4.x86_64 $RPMCMD -Uvh --justdb --force --nodeps --root $TMPDIR $local mkdir -p $TMPDIR/etc # copy the fstab (root=/dev/ubda) cp fstab $TMPDIR/etc/ # Installing the packages # no deps for these packages="setup-2.5.44-1.noarch filesystem-2.3.4-1.x86_64 basesystem-8.0-5.noarch libgcc-4.0.0-8.x86_64 tzdata-2005i-2.noarch glibc-common-2.3.5-10.x86_64 glibc-2.3.5-10.x86_64 termcap-5.4-4.noarch libtermcap-2.0.8-41.x86_64 zlib-1.2.2.2-3.x86_64 zip-2.3-30.x86_64 man-pages-1.67-7.noarch mktemp-1.5-23.x86_64 bash-3.0-31.x86_64 ncurses-5.4-17.x86_64 info-4.8-4.x86_64 gawk-3.1.4-5.x86_64 vim-common-6.3.071-3.x86_64 libattr-2.4.16-5.x86_64 libacl-2.2.23-8.x86_64 libselinux-1.23.10-2.x86_64 vim-minimal-6.3.071-3.x86_64 pcre-5.0-4.x86_64 grep-2.5.1-48.x86_64 findutils-4.2.20-1.x86_64 cracklib-2.8.2-1.x86_64 cracklib-dicts-2.8.2-1.x86_64 glib2-2.6.4-1.x86_64 fedora-release-4-2.noarch chkconfig-1.3.20-1.x86_64 sed-4.1.4-1.x86_64 iputils-20020927-22.x86_64 rootfiles-8.1-1.noarch e2fsprogs-1.37-4.x86_64 ethtool-3-1.x86_64 audit-libs-0.8.2-1.x86_64 libsepol-1.5.9-2.x86_64 popt-1.10.1-21.x86_64 net-tools-1.60-52.x86_64 shadow-utils-4.0.7-9.x86_64 sysfsutils-1.2.0-4.x86_64 cpio-2.6-7.x86_64 less-382-7.x86_64 gzip-1.3.5-6.x86_64 device-mapper-1.01.02-1.0.x86_64 readline-5.0-3.x86_64 lvm2-2.01.08-2.1.x86_64 tar-1.15.1-5.x86_64 MAKEDEV-3.19-1.x86_64 hwdata-0.158-1.noarch psmisc-21.5-4.x86_64 libstdc++-4.0.0-8.x86_64 db4-4.3.27-3.x86_64 iproute-2.6.11-1.x86_64 mingetty-1.07-5.x86_64 lvm2-2.01.08-2.1.x86_64" for package in $packages; do rpminstall $package done packages="pam-0.79-8.x86_64 coreutils-5.2.1-48.x86_64 SysVinit-2.85-39.x86_64 module-init-tools-3.1-3.x86_64 util-linux-2.12p-9.3.x86_64 initscripts-8.11.1-1.x86_64 sysklogd-1.4.1-30.x86_64 mkinitrd-4.2.15-1.x86_64 hotplug-2004_09_23-7.x86_64 udev-058-1.x86_64 procps-3.2.5-6.x86_64 db4-4.3.27-3.x86_64" rpminstallgroup $packages #depend on the above: packages="" for package in $packages; do rpminstall $package done # some extras packages="which-2.16-6.x86_64 vixie-cron-4.1-33.x86_64 bzip2-libs-1.0.2-16.x86_64 gdbm-1.8.0-25.x86_64 krb5-libs-1.4-3.x86_64 openssl-0.9.7f-7.x86_64 python-2.4.1-2.x86_64 libxml2-2.6.19-1.x86_64 libxml2-python-2.6.19-1.x86_64 python-urlgrabber-2.9.6-1.noarch beecrypt-4.1.2-8.x86_64 expat-1.95.8-6.x86_64 neon-0.24.7-6.x86_64 elfutils-libelf-0.108-1.x86_64 sqlite-3.1.2-3.x86_64 rpm-libs-4.4.1-21.x86_64 rpm-4.4.1-21.x86_64 openssh-4.0p1-3.x86_64 openssh-clients-4.0p1-3.x86_64 tcp_wrappers-7.6-39.x86_64 openssh-server-4.0p1-3.x86_64 wget-1.9.1-22.x86_64 python-elementtree-1.2.6-4.x86_64 python-sqlite-1.1.6-1.x86_64 elfutils-0.108-1.x86_64 rpm-python-4.4.1-21.x86_64" for package in $packages; do rpminstall $package done # rpm gets confused by these: rm -f $TMPDIR/var/lib/rpm/__db* # yum needs to be installed by the real rpm... fetch yum-2.3.2-7.noarch cp $local $TMPDIR/root $CHROOTCMD $TMPDIR rpm -ivh /root/yum-2.3.2-7.noarch*rpm rm $TMPDIR/root/yum-2.3.2-7.noarch*rpm # install things using yum: $CHROOTCMD $TMPDIR yum install policycoreutils # ldconfig the newly installed libraries ldconfig -r $TMPDIR # create the ubd devices if [ ! -e "$TMPDIR/dev/ubda" ]; then if [ -e "$TMPDIR/dev" ]; then for ((i=0; i<8; i++)) do let=$(echo $i|tr '0-7' 'a-z') mknod $TMPDIR/dev/ubd$let b 98 $[16 * $i] for ((p=1; p<=16; p++)) do mknod $TMPDIR/dev/ubd$let$p b 98 $[16 * $i + $p] done done else echo "/dev not found!" exit 1 fi fi # basic devices so we can boot without an initrd: cp -avpr /dev/console /dev/null /dev/zero $TMPDIR/dev mkdir $TMPDIR/dev/pts # copy current resolv cp /etc/resolv.conf $TMPDIR/etc # use slapt-get to update the system $CHROOTCMD tmp yum update # tweak the inittab to only use tty0 and add it to securetty tweaked=`grep tty0 $TMPDIR/etc/inittab | wc -l` if [ "$tweaked" -eq "0" ]; then cp $TMPDIR/etc/inittab $TMPDIR/etc/inittab.save grep -v "mingetty" $TMPDIR/etc/inittab.save > $TMPDIR/etc/inittab echo "# We launch just one console for UML:" >> $TMPDIR/etc/inittab echo "c0:1235:respawn:/sbin/mingetty tty0" >> $TMPDIR/etc/inittab echo "# UML modification: use tty0" >> $TMPDIR/etc/securetty echo "tty0" >> $TMPDIR/etc/securetty fi # make the first network interface start with dhcp #cp $TMPDIR/etc/rc.d/rc.inet1.conf $TMPDIR/etc/rc.d/rc.inet1.conf.save #sed 's+USE_DHCP\[0\]=""+USE_DHCP\[0\]="yes"+' < $TMPDIR/etc/rc.d/rc.inet1.conf.save > $TMPDIR/etc/rc.d/rc.inet1.conf umount $TMPDIR/proc umount $TMPDIR rmdir $TMPDIR echo "Done!"