#!/bin/sh RELEASE=6.0 PKGOSVER=6.0 #PKGRELEASE=2012Q3 WORKDIR=/usr/work/makexva/work ROOTSIZE=$((9*1024)) SWAPSIZE=$((1*1024)) INODES=1000000 for ARCH in i386 amd64 do PKGURL=http://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/$ARCH/${PKGOSVER}${PKGRELEASE+_$PKGRELEASE} SETSDIR=/usr/netbsd/6.0/6.0_RELEASE/$ARCH/binary/sets SCRATCH=$WORKDIR/scratch.$ARCH FS=$WORKDIR/xvaimg.fs XVA=$WORKDIR/NetBSD-$RELEASE-$ARCH.xva ZIP=$WORKDIR/NetBSD-$RELEASE-$ARCH.zip PACKAGES="sysutils/xenstoretools-4.1.3.tgz sysutils/xe-guest-utilities-6.0.2nb3.tgz" FSSECTORS=$(($ROOTSIZE+$SWAPSIZE)) FSSECTORS=$(($FSSECTORS*2048)) STARTSEC=0 case $ARCH in i386) KERNTYPE=XEN3PAE_DOMU PKGARCH=i386 ;; amd64) KERNTYPE=XEN3_DOMU PKGARCH=x86_64 ;; *) echo "Unknown ARCH" exit 1 ;; esac SETS="base comp etc games kern-$KERNTYPE man misc tests text xbase xcomp xetc xfont xserver" pkgv="0" for dir in /usr/pkg/sbin /usr/sbin do [ ! -x $dir/pkg_add ] && continue ver=`$dir/pkg_add -V` [ -z "$ver" ] && continue if [ $ver -gt $pkgv ]; then PKGADD=$dir/pkg_add pkgv=$ver fi done if [ -z "$PKGADD" ]; then echo "Could not locate pkg_add" exit 1 fi if [ "$pkgv" -lt 20120000 ]; then echo "pkg_add too old, please update" exit 1 fi mkdir -p $WORKDIR echo "Fetch packages" for pkg in $PACKAGES do ftp -o $WORKDIR/${pkg#*/} $PKGURL/$pkg done mkdir -p $SCRATCH || exit 1 for s in $SETS do echo "Extracting $s" tar -xpzf $SETSDIR/$s.tgz -C $SCRATCH || exit 1 done echo "Make devices" (cd $SCRATCH/dev ; sh MAKEDEV all) echo "Create fstab" mkdir -p $SCRATCH/kern $SCRATCH/proc cat << EOF > $SCRATCH/etc/fstab /dev/xbd0a / ffs rw,log 1 1 /dev/xbd0b none swap sw,dp kernfs /kern kernfs rw procfs /proc procfs rw EOF echo "Configure rc.conf" sed 's/rc_configured=NO/rc_configured=YES/' \ $SCRATCH/etc/rc.conf > $SCRATCH/etc/rc.conf.tmp && \ mv $SCRATCH/etc/rc.conf.tmp $SCRATCH/etc/rc.conf echo "xenguest=YES" >> $SCRATCH/etc/rc.conf echo "xendomname=NO" >> $SCRATCH/etc/rc.conf echo "Install packages" for pkg in $PACKAGES do echo "-> $pkg" $PKGADD -m $PKGARCH -K $SCRATCH/var/db/pkg -P $SCRATCH $WORKDIR/${pkg#*/} done cp $SCRATCH/usr/pkg/share/examples/rc.d/* $SCRATCH/etc/rc.d offset_a=$STARTSEC size_a=$(($ROOTSIZE*2048-$offset_a)) size_b=$(($SWAPSIZE*2048)) offset_b=$(($offset_a+$size_a)) echo "Make image" makefs -t ffs -s $(($size_a*512)) -f $INODES ${FS} $SCRATCH || exit 1 echo "Create swap space" dd if=/dev/zero bs=1m count=${SWAPSIZE} >> $FS cat << EOF > $WORKDIR/disklabel type: unknown disk: XenServer label: flags: bytes/sector: 512 sectors/track: 63 tracks/cylinder: 16 sectors/cylinder: 1008 cylinders: $(($FSSECTORS/1008)) total sectors: $FSSECTORS rpm: 3600 interleave: 1 trackskew: 0 cylinderskew: 0 headswitch: 0 # microseconds track-to-track seek: 0 # microseconds drivedata: 0 16 partitions: # size offset fstype [fsize bsize cpg/sgs] a: $size_a $offset_a 4.2BSD 2048 16384 0 b: $size_b $offset_b swap c: $(($FSSECTORS-$STARTSEC)) $STARTSEC unused 0 0 d: $FSSECTORS 0 unused 0 0 EOF echo "Create disklabel" disklabel -v -R -F $FS $WORKDIR/disklabel || exit 1 rm -f $WORKDIR/disklabel echo "Convert to .xva" python2.6 xva.py -n "NetBSD/$ARCH $RELEASE" --is-pv \ --disk $FS \ --bootloaderargs="--kernel=/netbsd" \ --filename=$XVA echo "Create zip" rm -f $ZIP zip -D -v $ZIP $XVA echo "Cleaning up" rm -rf $FS $SCRATCH done