# Settings !!!*** PLEASE MODIFY THESE ***!!! export MIRROR="ftp://ftp.mirror.ac.uk/sites/sunsite.uio.no/ftp/linux/mdl/official/2006.0/x86_64/media/main/" export TMPDIR=`pwd`"/tmp" export RPMCMD="rpm" export RPM_DIR=`pwd`"/rpm" export ROOT_FS="./Mandriva-2006-AMD64-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+\.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+\.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=$ROOT_FS bs=1024 count=1 seek=1572864 mkfs.ext3 $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.x86_64 dhcp-common-3.0.3-3mdk.x86_64 ldconfig-2.3.5-5mdk.x86_64 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.x86_64 iputils-20020927-5mdk.x86_64 ld.so1-1.9.11-10mdk.x86_64 lsof-4.74-1mdk.x86_64 mount-2.12q-7mdk.x86_64 shadow-utils-4.0.12-1mdk.x86_64 lib64termcap2-2.0.8-36mdk.x86_64 bash-3.0-6mdk.x86_64 chkconfig-1.3.20-4mdk.x86_64 libgcc1-4.0.1-5mdk.x86_64 libstdc++6-4.0.1-5mdk.x86_64; do rpminstall $package done # pam and crack libs for package in lib64crack2-2.8.3-1mdk.x86_64 cracklib-dicts-2.8.3-1mdk.x86_64 lib64pcre0-6.3-1mdk.x86_64 grep-2.5.1a-1mdk.x86_64 pwdb-conf-0.62-2mdk.x86_64 lib64pwdb0-0.62-2mdk.x86_64 lib64glib1.2-1.2.10-15mdk.x86_64 lib64db4.2-4.2.52-7mdk.x86_64 lib64selinux1-1.21.11-1mdk.x86_64 lib64pam0-0.77-31mdk.x86_64 lib64attr1-2.4.23-1mdk.x86_64 lib64acl1-2.2.31-1mdk.x86_64; do rpminstall $package done # these need to be done in one transaction: rpminstallgroup pam-0.77-31mdk.x86_64 coreutils-5.2.1-8mdk.x86_64 rpm-helper-0.14-1mdk.noarch for package in dhcp-client-3.0.3-3mdk.x86_64 setup-2.7-2mdk.x86_64 slocate-2.7-4mdk.x86_64 time-1.7-27mdk.x86_64 unzip-5.52-1mdk.x86_64 SysVinit-2.86-3mdk.x86_64 crontabs-1.10-5mdk.noarch filesystem-2.1.6-1mdk.x86_64 common-licenses-1.0-10mdk.noarch lib64elfutils1-0.109-1mdk.x86_64 mktemp-1.5-12mdk.x86_64 at-3.1.8-16mdk.x86_64 lib64bzip2_1-1.0.3-1mdk.x86_64 bzip2-1.0.3-1mdk.x86_64 mingetty-1.07-3mdk.x86_64 zlib1-1.2.3-1mdk.x86_64 lib64slang1-1.4.9-7mdk.x86_64 info-install-4.8-1mdk.x86_64 gawk-3.1.4-1mdk.x86_64 which-2.16-2mdk.x86_64 sed-4.1.4-2mdk.x86_64; do rpminstall $package done # ncurses as group rpminstallgroup ncurses-5.4-1.20050108.1mdk.x86_64 lib64ncurses5-5.4-1.20050108.1mdk.x86_64 for package in procps-3.2.5-2mdk.x86_64 diffutils-2.8.7-2mdk.x86_64; do rpminstall $package done # ext2 as group rpminstallgroup e2fsprogs-1.38-3mdk.x86_64 lib64ext2fs2-1.38-3mdk.x86_64 for package in util-linux-2.12q-7mdk.x86_64 rmt-0.4b40-3mdk.x86_64 cpio-2.6-5mdk.x86_64 lib64magic1-4.14-2mdk.x86_64 libexpat0-1.95.8-1mdk.x86_64 file-4.14-2mdk.x86_64 less-382-12mdk.x86_64 gzip-1.2.4a-15mdk.x86_64 ifmetric-0.3-3mdk.x86_64 perl-base-5.8.7-3mdk.x86_64 lib64iw28-28-0.pre6.1mdk.x86_64 wireless-tools-28-0.pre6.1mdk.x86_64 udev-068-34mdk.x86_64 update-alternatives-1.8.3-2mdk.noarch module-init-tools-3.2-0.pre8.2mdk.x86_64 vim-minimal-6.3-21mdk.x86_64 lib64intl3-0.14.5-2mdk.x86_64 gettext-base-0.14.5-2mdk.x86_64 lib64gdbm3-1.8.3-2mdk.x86_64 perl-5.8.7-3mdk.x86_64 vim-common-6.3-21mdk.x86_64 lib64gpm1-1.20.1-11mdk.x86_64 lib64python2.4-2.4.1-3mdk.x86_64 lib64openssl0.9.7-0.9.7g-2mdk.x86_64 vim-enhanced-6.3-21mdk.x86_64 wget-1.10-1mdk.x86_64 lib64daemon0-0.8-1mdk.x86_64 groff-for-man-1.19.1-1mdk.x86_64 perl-MDK-Common-1.1.24-1mdk.x86_64 ifplugd-0.28-2mdk.x86_64 makedev-4.4-1mdk.noarch man-1.5m2-3mdk.x86_64 man-pages-2.07-1mdk.noarch lib64utempter0-0.5.5-1mdk.x86_64 utempter-0.5.5-1mdk.x86_64 openssl-0.9.7g-2mdk.x86_64 findutils-4.2.24-1mdk.x86_64 lib64usb0.1_4-0.1.8-7mdk.x86_64 usbutils-0.70-4mdk.x86_64 popt-data-1.10.2-4mdk.x86_64 lib64popt0-1.10.2-4mdk.x86_64 logrotate-3.7.1-2mdk.x86_64 losetup-2.12q-7mdk.x86_64 eject-2.0.13-6mdk.x86_64 lib64gpg-error0-1.1-1mdk.x86_64 lib64gcrypt11-1.2.1-1mdk.x86_64 lib64ksba8-0.9.11-2mdk.x86_64 lib64readline5-5.0-2mdk.x86_64 psmisc-21.5-3mdk.x86_64 lib64cap1-1.10-4mdk.x86_64 pinentry-0.7.2-2mdk.x86_64 lib64glib2.0_0-2.8.1-1mdk.x86_64 lib64user1-0.53.2-6mdk.x86_64 libuser-0.53.2-6mdk.x86_64 passwd-0.68-3mdk.x86_64 lib64krb53-1.4.2-1mdk.x86_64 openssh-4.2p1-1mdk.x86_64 openssh-clients-4.2p1-1mdk.x86_64 openssh-server-4.2p1-1mdk.x86_64 aumix-text-2.8-12mdk.x86_64 sound-scripts-0.35-1mdk.noarch ldetect-lst-0.1.114-1mdk.x86_64 dmidecode-2.6-1mdk.x86_64 lib64ldetect0.6-0.6.3-1mdk.x86_64 drakxtools-backend-10.3-0.64mdk.x86_64 iproute2-2.6.10-2mdk.x86_64; do rpminstall $package done # init: rpminstallgroup initscripts-7.61.1-50mdk.x86_64 bootloader-utils-1.9-3mdk.x86_64 for package in sysklogd-1.4.1-7mdk.x86_64 vixie-cron-3.0.1-57mdk.x86_64 etcskel-1.63-17mdk.noarch net-tools-1.60-13mdk.x86_64 rootfiles-10.2-2mdk.noarch sash-3.7-3mdk.x86_64 tar-1.15.1-5mdk.x86_64 timezone-2.3.5-5mdk.x86_64 rpm-mandriva-setup-1.5-1mdk.x86_64 lib64beecrypt6-3.1.0-5mdk.x86_64 lib64xml2-2.6.21-3mdk.x86_64 lib64neon0.24-0.24.7-12mdk.x86_64 lib64sqlite3_0-3.2.2-2mdk.x86_64 lib64rpm4.4-4.4.2-4mdk.x86_64 lib64rpm4.4-4.4.2-4mdk.x86_64 rpm-4.4.2-4mdk.x86_64; do rpminstall $package done # URPMI (and deps): rpminstall lib64sasl2-2.1.22-11mdk.x86_64 rpminstallgroup lib64ldap2.3_0-2.3.6-4mdk.x86_64 openldap-2.3.6-4mdk.x86_64 for package in gnupg-1.4.2-2mdk.x86_64 packdrake-5.0.24-1mdk.x86_64 perl-URPM-1.27-1mdk.x86_64 perl-Config-IniFiles-2.38-3mdk.noarch rpmtools-5.0.24-1mdk.x86_64 perl-Locale-gettext-1.05-1mdk.x86_64 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/x86_64/media/main with media_info/synthesis.hdlist.cz chroot $TMPDIR urpmi.addmedia contrib ftp://anorien.csc.warwick.ac.uk/Mandrakelinux/official/2006.0/x86_64/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!"