# Settings !!!*** PLEASE MODIFY THESE ***!!! export MIRROR="ftp://ftp.mirror.ac.uk/sites/sunsite.uio.no/ftp/linux/mdl/official/2006.0/i586/media/main/" export TMPDIR=`pwd`"/tmp" export RPMCMD="linux32 rpm" export RPM_DIR=`pwd`"/rpm" export ROOT_FS="./Mandriva-2006-root_fs" 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+\.i386++g' | sed 's+\.i586++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+\.i386++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 dd if=/dev/zero of=./Mandriva-2006-root_fs bs=1024 count=1 seek=1572864 mkfs.ext3 ./Mandriva-2006-root_fs # Making the filesystem if [ ! -e "$ROOT_FS" ]; then dd if=/dev/zero of=$ROOT_FS bs=1024 count=1 seek=1572864 mkfs.ext3 -f $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 # Installing the packages # no deps for these for package in ash-0.3.8-8mdk.i586 dhcp-common-3.0.3-3mdk.i586 ldconfig-2.3.5-5mdk.i586 mandrake-mime-0.4-10mdk.noarch termcap-11.0.1-9mdk.noarch; do rpminstall $package done # base needed by others for package in glibc-2.3.5-5mdk.i586 iputils-20020927-5mdk.i586 ld.so1-1.9.11-10mdk.i586 lsof-4.74-1mdk.i586 mount-2.12q-7mdk.i586 shadow-utils-4.0.12-1mdk.i586 libtermcap2-2.0.8-36mdk.i586 bash-3.0-6mdk.i586 chkconfig-1.3.20-4mdk.i586 libgcc1-4.0.1-5mdk.i586 libstdc++6-4.0.1-5mdk.i586; do rpminstall $package done # pam and crack libs for package in libcrack2-2.8.3-1mdk.i586 cracklib-dicts-2.8.3-1mdk.i586 libpcre0-6.3-1mdk.i586 grep-2.5.1a-1mdk.i586 pwdb-conf-0.62-2mdk.i586 libpwdb0-0.62-2mdk.i586 libglib1.2-1.2.10-15mdk.i586 libdb4.2-4.2.52-7mdk.i586 libselinux1-1.21.11-1mdk.i586 libpam0-0.77-31mdk.i586 libattr1-2.4.23-1mdk.i586 libacl1-2.2.31-1mdk.i586; do rpminstall $package done # these need to be done in one transaction: rpminstallgroup pam-0.77-31mdk.i586 coreutils-5.2.1-8mdk.i586 rpm-helper-0.14-1mdk.noarch for package in dhcp-client-3.0.3-3mdk.i586 setup-2.7-2mdk.i586 slocate-2.7-4mdk.i586 time-1.7-27mdk.i586 unzip-5.52-1mdk.i586 SysVinit-2.86-3mdk.i586 crontabs-1.10-5mdk.noarch filesystem-2.1.6-1mdk.i586 common-licenses-1.0-10mdk.noarch libelfutils1-0.109-1mdk.i586 mktemp-1.5-12mdk.i586 at-3.1.8-16mdk.i586 libbzip2_1-1.0.3-1mdk.i586 bzip2-1.0.3-1mdk.i586 mingetty-1.07-3mdk.i586 zlib1-1.2.3-1mdk.i586 libslang1-1.4.9-7mdk.i586 info-install-4.8-1mdk.i586 gawk-3.1.4-1mdk.i586 which-2.16-2mdk.i586 sed-4.1.4-2mdk.i586; do rpminstall $package done # ncurses as group rpminstallgroup ncurses-5.4-1.20050108.1mdk.i586 libncurses5-5.4-1.20050108.1mdk.i586 for package in procps-3.2.5-2mdk.i586 diffutils-2.8.7-2mdk.i586; do rpminstall $package done # ext2 as group rpminstallgroup e2fsprogs-1.38-3mdk.i586 libext2fs2-1.38-3mdk.i586 for package in util-linux-2.12q-7mdk.i586 rmt-0.4b40-3mdk.i586 cpio-2.6-5mdk.i586 libmagic1-4.14-2mdk.i586 libexpat0-1.95.8-1mdk.i586 file-4.14-2mdk.i586 less-382-12mdk.i586 gzip-1.2.4a-15mdk.i586 ifmetric-0.3-3mdk.i586 perl-base-5.8.7-3mdk.i586 libiw28-28-0.pre6.1mdk.i586 wireless-tools-28-0.pre6.1mdk.i586 udev-068-34mdk.i586 update-alternatives-1.8.3-2mdk.noarch module-init-tools-3.2-0.pre8.2mdk.i586 vim-minimal-6.3-21mdk.i586 libintl3-0.14.5-2mdk.i586 gettext-base-0.14.5-2mdk.i586 libgdbm3-1.8.3-2mdk.i586 perl-5.8.7-3mdk.i586 vim-common-6.3-21mdk.i586 libgpm1-1.20.1-11mdk.i586 libpython2.4-2.4.1-3mdk.i586 libopenssl0.9.7-0.9.7g-2mdk.i586 vim-enhanced-6.3-21mdk.i586 wget-1.10-1mdk.i586 libdaemon0-0.8-1mdk.i586 groff-for-man-1.19.1-1mdk.i586 perl-MDK-Common-1.1.24-1mdk.i586 ifplugd-0.28-2mdk.i586 makedev-4.4-1mdk.noarch man-1.5m2-3mdk.i586 man-pages-2.07-1mdk.noarch libutempter0-0.5.5-1mdk.i586 utempter-0.5.5-1mdk.i586 openssl-0.9.7g-2mdk.i586 findutils-4.2.24-1mdk.i586 libusb0.1_4-0.1.8-7mdk.i586 usbutils-0.70-4mdk.i586 popt-data-1.10.2-4mdk.i586 libpopt0-1.10.2-4mdk.i586 logrotate-3.7.1-2mdk.i586 losetup-2.12q-7mdk.i586 eject-2.0.13-6mdk.i586 libgpg-error0-1.1-1mdk.i586 libgcrypt11-1.2.1-1mdk.i586 libksba8-0.9.11-2mdk.i586 libreadline5-5.0-2mdk.i586 psmisc-21.5-3mdk.i586 libcap1-1.10-4mdk.i586 pinentry-0.7.2-2mdk.i586 libglib2.0_0-2.8.1-1mdk.i586 libuser1-0.53.2-6mdk.i586 libuser-0.53.2-6mdk.i586 passwd-0.68-3mdk.i586 libkrb53-1.4.2-1mdk.i586 openssh-4.2p1-1mdk.i586 openssh-clients-4.2p1-1mdk.i586 openssh-server-4.2p1-1mdk.i586 aumix-text-2.8-12mdk.i586 sound-scripts-0.35-1mdk.noarch ldetect-lst-0.1.114-1mdk.i586 dmidecode-2.6-1mdk.i586 libldetect0.6-0.6.3-1mdk.i586 drakxtools-backend-10.3-0.64mdk.i586 iproute2-2.6.10-2mdk.i586; do rpminstall $package done # init: rpminstallgroup initscripts-7.61.1-50mdk.i586 bootloader-utils-1.9-3mdk.i586 for package in sysklogd-1.4.1-7mdk.i586 vixie-cron-3.0.1-57mdk.i586 etcskel-1.63-17mdk.noarch net-tools-1.60-13mdk.i586 rootfiles-10.2-2mdk.noarch sash-3.7-3mdk.i586 tar-1.15.1-5mdk.i586 timezone-2.3.5-5mdk.i586 rpm-mandriva-setup-1.5-1mdk.i586 libbeecrypt6-3.1.0-5mdk.i586 libxml2-2.6.21-3mdk.i586 libneon0.24-0.24.7-12mdk.i586 libsqlite3_0-3.2.2-2mdk.i586 librpm4.4-4.4.2-4mdk.i586 librpm4.4-4.4.2-4mdk.i586 rpm-4.4.2-4mdk.i586; do rpminstall $package done # URPMI (and deps): rpminstall libsasl2-2.1.22-11mdk.i586 rpminstallgroup libldap2.3_0-2.3.6-4mdk.i586 openldap-2.3.6-4mdk.i586 for package in gnupg-1.4.2-2mdk.i586 packdrake-5.0.24-1mdk.i586 perl-URPM-1.27-1mdk.i586 perl-Config-IniFiles-2.38-3mdk.noarch perl-Locale-gettext-1.05-1mdk.i586 rpmtools-5.0.24-1mdk.i586 urpmi-4.7.15-1mdk.noarch; do rpminstall $package done # configure URPMI (from easy urpmi) chroot $TMPDIR urpmi.addmedia --update updates ftp://anorien.csc.warwick.ac.uk/Mandrakelinux/official/updates/2006.0/main_updates/ with media_info/synthesis.hdlist.cz chroot $TMPDIR urpmi.addmedia main ftp://anorien.csc.warwick.ac.uk/Mandrakelinux/official/2006.0/i586/media/main with media_info/synthesis.hdlist.cz chroot $TMPDIR urpmi.addmedia contrib ftp://anorien.csc.warwick.ac.uk/Mandrakelinux/official/2006.0/i586/media/contrib with media_info/synthesis.hdlist.cz # ldconfig the newly installed libraries ldconfig -r $TMPDIR # copy the fstab (root=/dev/ubda) cp fstab $TMPDIR/etc/ # create the ubd devices 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 # 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 chroot tmp urpmi update # tweak the inittab to only use tty0 and add it to securetty 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 # 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 sleep 1 umount $TMPDIR/proc sleep 1 umount $TMPDIR rmdir $TMPDIR echo "Done!"