diff --git a/tools/systemvm/debian/buildsystemvm.sh b/tools/systemvm/debian/buildsystemvm.sh new file mode 100755 index 00000000000..409883d0214 --- /dev/null +++ b/tools/systemvm/debian/buildsystemvm.sh @@ -0,0 +1,303 @@ +#!/bin/bash + +IMAGENAME=systemvm +LOCATION=/var/lib/images/systemvm2 +PASSWORD=password +APT_PROXY= +HOSTNAME=systemvm +SIZE=2000 +DEBIAN_MIRROR=ftp.us.debian.org/debian +MINIMIZE=true + +baseimage() { + mkdir -p $LOCATION + dd if=/dev/zero of=$IMAGELOC bs=1M seek=$((SIZE - 1)) count=1 + loopdev=$(losetup -f) + losetup $loopdev $IMAGELOC + parted $loopdev -s 'mklabel msdos' + parted $loopdev -s 'mkpart primary ext3 512B 2097151000B' + losetup -d $loopdev + loopdev=$(losetup --show -o 512 -f $IMAGELOC ) + mkfs.ext3 -L ROOT $loopdev + mkdir -p $MOUNTPOINT + tune2fs -c 100 -i 0 $loopdev + losetup -d $loopdev + + mount -o loop,offset=512 $IMAGELOC $MOUNTPOINT + + #debootstrap --variant=minbase --keyring=/usr/share/keyrings/debian-archive-keyring.gpg squeeze $MOUNTPOINT http://${APT_PROXY}${DEBIAN_MIRROR} + debootstrap --variant=minbase --arch=i386 squeeze $MOUNTPOINT http://${APT_PROXY}${DEBIAN_MIRROR} +} + + +fixapt() { + if [ "$APT_PROXY" != "" ]; then + cat >> etc/apt/apt.conf.d/01proxy << EOF +Acquire::http::Proxy "http://${APT_PROXY}"; +EOF + fi + + cat > etc/apt/sources.list << EOF +deb http://ftp.us.debian.org/debian/ squeeze main non-free +deb-src http://ftp.us.debian.org/debian/ squeeze main non-free + +deb http://security.debian.org/ squeeze/updates main +deb-src http://security.debian.org/ squeeze/updates main + +deb http://volatile.debian.org/debian-volatile squeeze/volatile main +deb-src http://volatile.debian.org/debian-volatile squeeze/volatile main + +deb http://ftp.us.debian.org/debian testing main contrib non-free +EOF + + cat >> etc/apt/apt.conf << EOF +APT::Default-Release "stable"; +EOF + + cat >> etc/apt/preferences << EOF +Package: * +Pin: release o=Debian,a=stable +Pin-Priority: 900 + +Package: * +Pin: release o=Debian,a=testing +Pin-Priority: 400 +EOF + + #apt-key exportall | chroot . apt-key add - && + chroot . apt-get update && + echo "Apt::Install-Recommends 0;" > etc/apt/apt.conf.d/local-recommends + + cat >> usr/sbin/policy-rc.d << EOF +#!/bin/sh +exit 101 +EOF + chmod a+x usr/sbin/policy-rc.d + + cat >> etc/default/locale << EOF +LANG=en_US.UTF-8 +LC_ALL=en_US.UTF-8 +EOF + + cat >> etc/locale.gen << EOF +en_US.UTF-8 UTF-8 +EOF + + DEBIAN_FRONTEND=noninteractive + DEBIAN_PRIORITY=critical + export DEBIAN_FRONTEND DEBIAN_PRIORITY + chroot . dpkg-reconfigure debconf --frontend=noninteractive + chroot . apt-get -q -y install locales +} + +network() { + + echo "$HOSTNAME" > etc/hostname && + cat > etc/hosts << EOF +127.0.0.1 localhost +# The following lines are desirable for IPv6 capable hosts +::1 localhost 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 + + cat >> etc/network/interfaces << EOF +auto lo +iface lo inet loopback + +# The primary network interface +allow-hotplug eth0 +iface eth0 inet dhcp + +EOF +} + +install_kernel() { + DEBIAN_FRONTEND=noninteractive + DEBIAN_PRIORITY=critical + export DEBIAN_FRONTEND DEBIAN_PRIORITY + + chroot . apt-get -qq -y --force-yes install grub && + cp -av usr/lib/grub/i386-pc boot/grub + #for some reason apt-get install grub does not install grub/stage1 etc + loopd=$(losetup -f --show $1) + grub-install $loopd --root-directory=$MOUNTPOINT + losetup -d $loopd + grub << EOF && +device (hd0) $1 +root (hd0,0) +setup (hd0) +quit +EOF + # install a kernel image + cat > etc/kernel-img.conf << EOF && +do_symlinks = yes +link_in_boot = yes +do_initrd = yes +EOF + chroot . apt-get install -qq -y --force-yes linux-image-686-bigmem + cat >> etc/kernel-img.conf << EOF +postinst_hook = /usr/sbin/update-grub +postrm_hook = /usr/sbin/update-grub +EOF +} + + +fixgrub() { + cat > boot/grub/menu.lst << EOF +default 0 +timeout 2 +color cyan/blue white/blue + +### BEGIN AUTOMAGIC KERNELS LIST +# kopt=root=LABEL=ROOT ro + +## ## End Default Options ## +title Debian GNU/Linux, kernel 2.6.32-5-686-bigmem +root (hd0,0) +kernel /boot/vmlinuz-2.6.32-5-686-bigmem root=LABEL=ROOT ro console=tty0 xencons=ttyS0,115200 console=hvc0 quiet +initrd /boot/initrd.img-2.6.32-5-686-bigmem + +### END DEBIAN AUTOMAGIC KERNELS LIST +EOF + (cd boot/grub; ln -s menu.lst grub.conf) +} + +fixinittab() { + cat >> etc/inittab << EOF + +vc:2345:respawn:/sbin/getty 38400 hvc0 +EOF +} + +fixfstab() { + cat > etc/fstab << EOF +# +proc /proc proc defaults 0 0 +LABEL=ROOT / ext3 errors=remount-ro 0 1 +EOF +} + +fixacpid() { + cat >> etc/acpi/events/power << EOF +event=button/power.* +action=/usr/local/sbin/power.sh "%e" +EOF + cat >> usr/local/sbin/power.sh << EOF +#!/bin/bash +/sbin/poweroff +EOF + chmod a+x usr/local/sbin/power.sh +} + +packages() { + DEBIAN_FRONTEND=noninteractive + DEBIAN_PRIORITY=critical + DEBCONF_DB_OVERRIDE=’File{/root/config.dat}’ + export DEBIAN_FRONTEND DEBIAN_PRIORITY DEBCONF_DB_OVERRIDE + + chroot . apt-get --no-install-recommends -q -y --force-yes install rsyslog chkconfig insserv net-tools ifupdown vim-tiny netbase iptables openssh-server grub e2fsprogs dhcp3-client dnsmasq tcpdump socat wget apache2 python2.5 bzip2 sed gawk diff grep gzip less tar telnet xl2tpd traceroute openswan psmisc + + chroot . apt-get --no-install-recommends -q -y --force-yes -t backports install haproxy nfs-common + + echo "***** getting additional modules *********" + chroot . apt-get --no-install-recommends -q -y --force-yes install iproute acpid iptables-persistent + + echo "***** getting sun jre 6*********" + DEBIAN_FRONTEND=readline + export DEBIAN_FRONTEND + chroot . echo sun-java6-jdk shared/accepted-sun-dlj-v1-1 boolean true | debconf-set-selections + chroot . apt-get --no-install-recommends -q -y install sun-java6-jre + +} + +password() { + chroot . echo "root:$PASSWORD" | chroot . chpasswd +} + +cleanup() { + rm -f usr/sbin/policy-rc.d + rm -f etc/apt/apt.conf.d/01proxy + + if [ "$MINIMIZE" == "true" ] + then + rm -rf var/cache/apt/* + rm -rf var/lib/apt/* + rm -rf usr/share/locale/[a-d]* + rm -rf usr/share/locale/[f-z]* + rm -rf usr/share/doc/* + fi +} + +mkdir -p $IMAGENAME +mkdir -p $LOCATION +MOUNTPOINT=/mnt/$IMAGENAME/ +IMAGELOC=$LOCATION/$IMAGENAME.img +scriptdir=$(dirname $PWD/$0) + +rm -f $IMAGELOC + +echo "*************INSTALLING BASEIMAGE********************" +baseimage + +cp $scriptdir/config.dat $MOUNTPOINT/root/ +cd $MOUNTPOINT + +mount -o bind /proc $MOUNTPOINT/proc +mount -o bind /dev $MOUNTPOINT/dev + +echo "*************CONFIGURING APT********************" +fixapt +echo "*************DONE CONFIGURING APT********************" + +echo "*************CONFIGURING NETWORK********************" +network +echo "*************DONE CONFIGURING NETWORK********************" + +echo "*************INSTALLING KERNEL********************" +install_kernel $IMAGELOC +echo "*************DONE INSTALLING KERNEL********************" + +echo "*************CONFIGURING GRUB********************" +fixgrub $IMAGELOC +echo "*************DONE CONFIGURING GRUB********************" + + +echo "*************CONFIGURING INITTAB********************" +fixinittab +echo "*************DONE CONFIGURING INITTAB********************" + +echo "*************CONFIGURING FSTAB********************" +fixfstab +echo "*************DONE CONFIGURING FSTAB********************" + +echo "*************CONFIGURING ACPID********************" +fixacpid +echo "*************DONE CONFIGURING ACPID********************" + +#cp etc/inittab etc/inittab.hvm +#cp $scriptdir/inittab.xen etc/inittab.xen +#cp $scriptdir/inittab.xen etc/inittab +#cp $scriptdir/fstab.xen etc/fstab.xen +#cp $scriptdir/fstab.xen etc/fstab +#cp $scriptdir/fstab etc/fstab + +echo "*************INSTALLING PACKAGES********************" +packages +echo "*************DONE INSTALLING PACKAGES********************" + +echo "*************CONFIGURING PASSWORD********************" +password + +echo "*************CLEANING UP********************" +cleanup + +cd $scriptdir + +umount $MOUNTPOINT/proc +umount $MOUNTPOINT/dev +umount $MOUNTPOINT +