Message ID | 1490470142-9032-3-git-send-email-geza.gemes@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Sat, 25 Mar 2017, Géza Gémes wrote: > Add support for using cirros images in raisin tests > > Signed-off-by: Géza Gémes <geza.gemes@gmail.com> It looks good to me, thanks! Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> > --- > lib/common-functions.sh | 33 +++++++++++ > lib/common-tests.sh | 109 +++++++++++++++++++++++++++++++++++++ > tests-configs/config-cirros_x86_32 | 13 +++++ > tests-configs/config-cirros_x86_64 | 13 +++++ > 4 files changed, 168 insertions(+) > create mode 100644 tests-configs/config-cirros_x86_32 > create mode 100644 tests-configs/config-cirros_x86_64 > > diff --git a/lib/common-functions.sh b/lib/common-functions.sh > index d4476f3..efc92ff 100644 > --- a/lib/common-functions.sh > +++ b/lib/common-functions.sh > @@ -439,3 +439,36 @@ function uninstall_package() { > error_echo "Don't know how to uninstall packages on $DISTRO" > fi > } > + > +function get-qemu-img() { > + set +e > + QEMU_IMG=`which qemu-img` > + set -e > + if [[ -z "$QEMU_IMG" ]] > + then > + QEMU_IMG="/usr/lib/xen/bin/qemu-img" > + fi > + if [[ -x $QEMU_IMG ]] > + then > + export QEMU_IMG > + else > + error_echo "No working qemu-img found! Some tests may fail!" > + fi > +} > + > +function get-pvgrub() { > + local arch=$1 > + set +e > + PVGRUB=`which grub-${arch}-xen` > + set -e > + if [[ -z "$PVGRUB" ]] > + then > + PVGRUB="/usr/lib/xen/boot/grub-${arch}-xen" > + fi > + if [[ -f $PVGRUB ]] > + then > + export PVGRUB > + else > + error_echo "No working pvgrub found! Some tests may fail!" > + fi > +} > diff --git a/lib/common-tests.sh b/lib/common-tests.sh > index d346af4..c07bb18 100644 > --- a/lib/common-tests.sh > +++ b/lib/common-tests.sh > @@ -178,3 +178,112 @@ function get_host_initrd() { > exit 1 > fi > } > + > +function cirros_network_init() { > + rootdir=$1 > + ifile=`mktemp` > + # Create static network config > + cat >$ifile <<EOF > +auto lo > +iface lo inet loopback > + > +auto eth0 > +iface eth0 inet static > + address 169.254.0.2 > + network 169.254.0.0 > + broadcast 169.254.0.255 > + netmask 255.255.255.0 > +EOF > + $SUDO mv -f $ifile $rootdir/etc/network/interfaces > + # Disable cloud-init > + $SUDO rm -f ${rootdir}/etc/rc3.d/S*cirros*ds* > + $SUDO rm -f ${rootdir}/etc/rc3.d/S*-cirros-userdata > +} > + > +function get_cirros_kernel() { > + bootdir=$1 > + basename `find $bootdir -name vmlinuz* 2>/dev/null | head -1` > +} > + > +function get_cirros_initrd() { > + bootdir=$1 > + basename `find $bootdir -name initrd* 2>/dev/null | head -1` > +} > + > +function cirros_grub_cfg() { > + rootdir=$1 > + get-pvgrub $CIRROS_ARCH > + grubroot="`echo $CIRROS_GRUB_CFG | cut -d ')' -f 1`)" > + grubcfg="`echo $CIRROS_GRUB_CFG | cut -d ')' -f 2`" > + grubdir=`dirname $grubcfg` > + bootdir=`dirname $grubdir` > + tmpgrubcfg=`mktemp` > + cat > $tmpgrubcfg <<EOF > +root="$grubroot" > +insmod xzio > +insmod gzio > +insmod btrfs > +insmod ext2 > +set timeout=1 > +set default=0 > +menuentry Cirros { > + linux `echo $bootdir`/`get_cirros_kernel ${rootdir}/${bootdir}` root=/dev/xvda1 ro > + initrd `echo $bootdir`/`get_cirros_initrd ${rootdir}/${bootdir}` > +} > +EOF > + $SUDO mv -f $tmpgrubcfg ${rootdir}/${grubcfg} > +} > + > +function download_cirros_components() { > + . tests-configs/config-cirros_$RAISIN_ARCH > + mkdir -p $CIRROS_DOWNLOADS > + if [[ ! -f $CIRROS_DOWNLOADS/$CIRROS_KERNEL_FILE ]] > + then > + verbose_echo "Downloading cirros kernel" > + wget -q $CIRROS_KERNEL_URL -P $CIRROS_DOWNLOADS > + fi > + if [[ ! -f $CIRROS_DOWNLOADS/$CIRROS_INITRD_FILE ]] > + then > + verbose_echo "Downloading cirros initrd" > + wget -q $CIRROS_INITRD_URL -P $CIRROS_DOWNLOADS > + fi > + if [[ ! -f $CIRROS_DOWNLOADS/$CIRROS_ROOTFS_FILE ]] > + then > + verbose_echo "Downloading cirros rootfs" > + wget -q $CIRROS_ROOTFS_URL -P $CIRROS_DOWNLOADS > + gunzip $CIRROS_DOWNLOADS/$CIRROS_ROOTFS_FILE.gz > + local cirros_rootfs_loop=`create_loop $CIRROS_DOWNLOADS/$CIRROS_ROOTFS_FILE` > + local cirros_rootfs_mntpt=`mktemp -d` > + $SUDO mount $cirros_rootfs_loop $cirros_rootfs_mntpt > + cirros_network_init $cirros_rootfs_mntpt > + $SUDO umount $cirros_rootfs_mntpt > + $SUDO rmdir $cirros_rootfs_mntpt > + $SUDO losetup -d $cirros_rootfs_loop > + fi > + if [[ ! -f $CIRROS_DOWNLOADS/$CIRROS_DISK_FILE ]] > + then > + verbose_echo "Downloading cirros disk" > + wget -q $CIRROS_DISK_URL -P $CIRROS_DOWNLOADS > + mv $CIRROS_DOWNLOADS/$CIRROS_DISK_FILE $CIRROS_DOWNLOADS/$CIRROS_DISK_FILE.qcow2 > + get-qemu-img > + $QEMU_IMG convert -f qcow2 -O raw $CIRROS_DOWNLOADS/$CIRROS_DISK_FILE.qcow2 $CIRROS_DOWNLOADS/$CIRROS_DISK_FILE > + local cirros_disk_loop=`$SUDO $BASEDIR/scripts/lopartsetup $CIRROS_DOWNLOADS/$CIRROS_DISK_FILE | head -1 | > + cut -d ":" -f 1` > + local cirros_disk_mntpt=`mktemp -d` > + $SUDO mount $cirros_disk_loop $cirros_disk_mntpt > + cirros_network_init $cirros_disk_mntpt > + $SUDO umount $cirros_disk_mntpt > + $SUDO rmdir $cirros_disk_mntpt > + $SUDO losetup -d $cirros_disk_loop > + fi > +} > + > +function tear_down_cirros_test() { > + testdir=$1 > + if [[ `$SUDO xl vm-list | grep "raisin-test" | wc -l` -gt 0 ]] > + then > + $SUDO xl destroy "raisin-test" > + fi > + verbose_echo "$PREPEND deleting environment of cirros test" > + $SUDO rm -rf $testdir > +} > diff --git a/tests-configs/config-cirros_x86_32 b/tests-configs/config-cirros_x86_32 > new file mode 100644 > index 0000000..628e568 > --- /dev/null > +++ b/tests-configs/config-cirros_x86_32 > @@ -0,0 +1,13 @@ > +CIRROS_ARCH=i386 > +CIRROS_BASE_URL="https://download.cirros-cloud.net/" > +CIRROS_VERSION="0.3.5" > +CIRROS_DOWNLOADS=$BASEDIR/downloads > +CIRROS_KERNEL_FILE=cirros-$CIRROS_VERSION-$CIRROS_ARCH-kernel > +CIRROS_INITRD_FILE=cirros-$CIRROS_VERSION-$CIRROS_ARCH-initramfs > +CIRROS_ROOTFS_FILE=cirros-$CIRROS_VERSION-$CIRROS_ARCH-rootfs.img > +CIRROS_DISK_FILE=cirros-$CIRROS_VERSION-$CIRROS_ARCH-disk.img > +CIRROS_KERNEL_URL=$CIRROS_BASE_URL/$CIRROS_VERSION/$CIRROS_KERNEL_FILE > +CIRROS_INITRD_URL=$CIRROS_BASE_URL/$CIRROS_VERSION/$CIRROS_INITRD_FILE > +CIRROS_ROOTFS_URL=$CIRROS_BASE_URL/$CIRROS_VERSION/$CIRROS_ROOTFS_FILE.gz > +CIRROS_DISK_URL=$CIRROS_BASE_URL/$CIRROS_VERSION/$CIRROS_DISK_FILE > +CIRROS_GRUB_CFG="(xen/xvda,msdos1)/boot/grub/grub.cfg" > diff --git a/tests-configs/config-cirros_x86_64 b/tests-configs/config-cirros_x86_64 > new file mode 100644 > index 0000000..7b78316 > --- /dev/null > +++ b/tests-configs/config-cirros_x86_64 > @@ -0,0 +1,13 @@ > +CIRROS_ARCH=x86_64 > +CIRROS_BASE_URL="https://download.cirros-cloud.net/" > +CIRROS_VERSION="0.3.5" > +CIRROS_DOWNLOADS=$BASEDIR/downloads > +CIRROS_KERNEL_FILE=cirros-$CIRROS_VERSION-$CIRROS_ARCH-kernel > +CIRROS_INITRD_FILE=cirros-$CIRROS_VERSION-$CIRROS_ARCH-initramfs > +CIRROS_ROOTFS_FILE=cirros-$CIRROS_VERSION-$CIRROS_ARCH-rootfs.img > +CIRROS_DISK_FILE=cirros-$CIRROS_VERSION-$CIRROS_ARCH-disk.img > +CIRROS_KERNEL_URL=$CIRROS_BASE_URL/$CIRROS_VERSION/$CIRROS_KERNEL_FILE > +CIRROS_INITRD_URL=$CIRROS_BASE_URL/$CIRROS_VERSION/$CIRROS_INITRD_FILE > +CIRROS_ROOTFS_URL=$CIRROS_BASE_URL/$CIRROS_VERSION/$CIRROS_ROOTFS_FILE.gz > +CIRROS_DISK_URL=$CIRROS_BASE_URL/$CIRROS_VERSION/$CIRROS_DISK_FILE > +CIRROS_GRUB_CFG="(xen/xvda,msdos1)/boot/grub/grub.cfg" > -- > 2.7.4 >
diff --git a/lib/common-functions.sh b/lib/common-functions.sh index d4476f3..efc92ff 100644 --- a/lib/common-functions.sh +++ b/lib/common-functions.sh @@ -439,3 +439,36 @@ function uninstall_package() { error_echo "Don't know how to uninstall packages on $DISTRO" fi } + +function get-qemu-img() { + set +e + QEMU_IMG=`which qemu-img` + set -e + if [[ -z "$QEMU_IMG" ]] + then + QEMU_IMG="/usr/lib/xen/bin/qemu-img" + fi + if [[ -x $QEMU_IMG ]] + then + export QEMU_IMG + else + error_echo "No working qemu-img found! Some tests may fail!" + fi +} + +function get-pvgrub() { + local arch=$1 + set +e + PVGRUB=`which grub-${arch}-xen` + set -e + if [[ -z "$PVGRUB" ]] + then + PVGRUB="/usr/lib/xen/boot/grub-${arch}-xen" + fi + if [[ -f $PVGRUB ]] + then + export PVGRUB + else + error_echo "No working pvgrub found! Some tests may fail!" + fi +} diff --git a/lib/common-tests.sh b/lib/common-tests.sh index d346af4..c07bb18 100644 --- a/lib/common-tests.sh +++ b/lib/common-tests.sh @@ -178,3 +178,112 @@ function get_host_initrd() { exit 1 fi } + +function cirros_network_init() { + rootdir=$1 + ifile=`mktemp` + # Create static network config + cat >$ifile <<EOF +auto lo +iface lo inet loopback + +auto eth0 +iface eth0 inet static + address 169.254.0.2 + network 169.254.0.0 + broadcast 169.254.0.255 + netmask 255.255.255.0 +EOF + $SUDO mv -f $ifile $rootdir/etc/network/interfaces + # Disable cloud-init + $SUDO rm -f ${rootdir}/etc/rc3.d/S*cirros*ds* + $SUDO rm -f ${rootdir}/etc/rc3.d/S*-cirros-userdata +} + +function get_cirros_kernel() { + bootdir=$1 + basename `find $bootdir -name vmlinuz* 2>/dev/null | head -1` +} + +function get_cirros_initrd() { + bootdir=$1 + basename `find $bootdir -name initrd* 2>/dev/null | head -1` +} + +function cirros_grub_cfg() { + rootdir=$1 + get-pvgrub $CIRROS_ARCH + grubroot="`echo $CIRROS_GRUB_CFG | cut -d ')' -f 1`)" + grubcfg="`echo $CIRROS_GRUB_CFG | cut -d ')' -f 2`" + grubdir=`dirname $grubcfg` + bootdir=`dirname $grubdir` + tmpgrubcfg=`mktemp` + cat > $tmpgrubcfg <<EOF +root="$grubroot" +insmod xzio +insmod gzio +insmod btrfs +insmod ext2 +set timeout=1 +set default=0 +menuentry Cirros { + linux `echo $bootdir`/`get_cirros_kernel ${rootdir}/${bootdir}` root=/dev/xvda1 ro + initrd `echo $bootdir`/`get_cirros_initrd ${rootdir}/${bootdir}` +} +EOF + $SUDO mv -f $tmpgrubcfg ${rootdir}/${grubcfg} +} + +function download_cirros_components() { + . tests-configs/config-cirros_$RAISIN_ARCH + mkdir -p $CIRROS_DOWNLOADS + if [[ ! -f $CIRROS_DOWNLOADS/$CIRROS_KERNEL_FILE ]] + then + verbose_echo "Downloading cirros kernel" + wget -q $CIRROS_KERNEL_URL -P $CIRROS_DOWNLOADS + fi + if [[ ! -f $CIRROS_DOWNLOADS/$CIRROS_INITRD_FILE ]] + then + verbose_echo "Downloading cirros initrd" + wget -q $CIRROS_INITRD_URL -P $CIRROS_DOWNLOADS + fi + if [[ ! -f $CIRROS_DOWNLOADS/$CIRROS_ROOTFS_FILE ]] + then + verbose_echo "Downloading cirros rootfs" + wget -q $CIRROS_ROOTFS_URL -P $CIRROS_DOWNLOADS + gunzip $CIRROS_DOWNLOADS/$CIRROS_ROOTFS_FILE.gz + local cirros_rootfs_loop=`create_loop $CIRROS_DOWNLOADS/$CIRROS_ROOTFS_FILE` + local cirros_rootfs_mntpt=`mktemp -d` + $SUDO mount $cirros_rootfs_loop $cirros_rootfs_mntpt + cirros_network_init $cirros_rootfs_mntpt + $SUDO umount $cirros_rootfs_mntpt + $SUDO rmdir $cirros_rootfs_mntpt + $SUDO losetup -d $cirros_rootfs_loop + fi + if [[ ! -f $CIRROS_DOWNLOADS/$CIRROS_DISK_FILE ]] + then + verbose_echo "Downloading cirros disk" + wget -q $CIRROS_DISK_URL -P $CIRROS_DOWNLOADS + mv $CIRROS_DOWNLOADS/$CIRROS_DISK_FILE $CIRROS_DOWNLOADS/$CIRROS_DISK_FILE.qcow2 + get-qemu-img + $QEMU_IMG convert -f qcow2 -O raw $CIRROS_DOWNLOADS/$CIRROS_DISK_FILE.qcow2 $CIRROS_DOWNLOADS/$CIRROS_DISK_FILE + local cirros_disk_loop=`$SUDO $BASEDIR/scripts/lopartsetup $CIRROS_DOWNLOADS/$CIRROS_DISK_FILE | head -1 | + cut -d ":" -f 1` + local cirros_disk_mntpt=`mktemp -d` + $SUDO mount $cirros_disk_loop $cirros_disk_mntpt + cirros_network_init $cirros_disk_mntpt + $SUDO umount $cirros_disk_mntpt + $SUDO rmdir $cirros_disk_mntpt + $SUDO losetup -d $cirros_disk_loop + fi +} + +function tear_down_cirros_test() { + testdir=$1 + if [[ `$SUDO xl vm-list | grep "raisin-test" | wc -l` -gt 0 ]] + then + $SUDO xl destroy "raisin-test" + fi + verbose_echo "$PREPEND deleting environment of cirros test" + $SUDO rm -rf $testdir +} diff --git a/tests-configs/config-cirros_x86_32 b/tests-configs/config-cirros_x86_32 new file mode 100644 index 0000000..628e568 --- /dev/null +++ b/tests-configs/config-cirros_x86_32 @@ -0,0 +1,13 @@ +CIRROS_ARCH=i386 +CIRROS_BASE_URL="https://download.cirros-cloud.net/" +CIRROS_VERSION="0.3.5" +CIRROS_DOWNLOADS=$BASEDIR/downloads +CIRROS_KERNEL_FILE=cirros-$CIRROS_VERSION-$CIRROS_ARCH-kernel +CIRROS_INITRD_FILE=cirros-$CIRROS_VERSION-$CIRROS_ARCH-initramfs +CIRROS_ROOTFS_FILE=cirros-$CIRROS_VERSION-$CIRROS_ARCH-rootfs.img +CIRROS_DISK_FILE=cirros-$CIRROS_VERSION-$CIRROS_ARCH-disk.img +CIRROS_KERNEL_URL=$CIRROS_BASE_URL/$CIRROS_VERSION/$CIRROS_KERNEL_FILE +CIRROS_INITRD_URL=$CIRROS_BASE_URL/$CIRROS_VERSION/$CIRROS_INITRD_FILE +CIRROS_ROOTFS_URL=$CIRROS_BASE_URL/$CIRROS_VERSION/$CIRROS_ROOTFS_FILE.gz +CIRROS_DISK_URL=$CIRROS_BASE_URL/$CIRROS_VERSION/$CIRROS_DISK_FILE +CIRROS_GRUB_CFG="(xen/xvda,msdos1)/boot/grub/grub.cfg" diff --git a/tests-configs/config-cirros_x86_64 b/tests-configs/config-cirros_x86_64 new file mode 100644 index 0000000..7b78316 --- /dev/null +++ b/tests-configs/config-cirros_x86_64 @@ -0,0 +1,13 @@ +CIRROS_ARCH=x86_64 +CIRROS_BASE_URL="https://download.cirros-cloud.net/" +CIRROS_VERSION="0.3.5" +CIRROS_DOWNLOADS=$BASEDIR/downloads +CIRROS_KERNEL_FILE=cirros-$CIRROS_VERSION-$CIRROS_ARCH-kernel +CIRROS_INITRD_FILE=cirros-$CIRROS_VERSION-$CIRROS_ARCH-initramfs +CIRROS_ROOTFS_FILE=cirros-$CIRROS_VERSION-$CIRROS_ARCH-rootfs.img +CIRROS_DISK_FILE=cirros-$CIRROS_VERSION-$CIRROS_ARCH-disk.img +CIRROS_KERNEL_URL=$CIRROS_BASE_URL/$CIRROS_VERSION/$CIRROS_KERNEL_FILE +CIRROS_INITRD_URL=$CIRROS_BASE_URL/$CIRROS_VERSION/$CIRROS_INITRD_FILE +CIRROS_ROOTFS_URL=$CIRROS_BASE_URL/$CIRROS_VERSION/$CIRROS_ROOTFS_FILE.gz +CIRROS_DISK_URL=$CIRROS_BASE_URL/$CIRROS_VERSION/$CIRROS_DISK_FILE +CIRROS_GRUB_CFG="(xen/xvda,msdos1)/boot/grub/grub.cfg"
Add support for using cirros images in raisin tests Signed-off-by: Géza Gémes <geza.gemes@gmail.com> --- lib/common-functions.sh | 33 +++++++++++ lib/common-tests.sh | 109 +++++++++++++++++++++++++++++++++++++ tests-configs/config-cirros_x86_32 | 13 +++++ tests-configs/config-cirros_x86_64 | 13 +++++ 4 files changed, 168 insertions(+) create mode 100644 tests-configs/config-cirros_x86_32 create mode 100644 tests-configs/config-cirros_x86_64