diff options
author | Jérôme Glisse <jglisse@redhat.com> | 2018-09-14 16:10:42 -0400 |
---|---|---|
committer | Jérôme Glisse <jglisse@redhat.com> | 2018-09-16 18:35:58 -0400 |
commit | c33c390fbf6e6cd95e843e57aba68d7851b628bc (patch) | |
tree | d63239c8cb8a775476956e3bd8dacc2429670d75 | |
parent | ffdfa7d13f0e9f1266b12d29c005241f31b6fd7a (diff) |
Starting point all the basic scripts to install a VM, set it up and
automaticaly run tests in it.
Signed-off-by: Jérôme Glisse <jglisse@redhat.com>
-rw-r--r-- | README | 46 | ||||
-rw-r--r-- | kernel/.gitignore | 1 | ||||
-rw-r--r-- | tests/.gitignore | 1 | ||||
-rwxr-xr-x | tests/utest-run.sh | 11 | ||||
-rwxr-xr-x | tools/chk-rootfs.sh | 23 | ||||
-rwxr-xr-x | tools/guest-ssh.sh | 2 | ||||
-rwxr-xr-x | tools/img-install.sh | 25 | ||||
-rwxr-xr-x | tools/img-mnt.sh | 18 | ||||
-rwxr-xr-x | tools/img-run.sh | 36 | ||||
-rwxr-xr-x | tools/img-setup.sh | 92 | ||||
-rwxr-xr-x | tools/img-umnt.sh | 12 | ||||
-rwxr-xr-x | tools/kernel-install.sh | 15 | ||||
-rw-r--r-- | tools/utest.service | 10 | ||||
-rw-r--r-- | tools/utest.target | 7 |
14 files changed, 299 insertions, 0 deletions
@@ -0,0 +1,46 @@ +The guest img can be installed with: + ./tools/img-install.sh isofile image-file + +When installing the root partition must be the first one and it can not be an +LVM partition (must be standard partition). This could be fix by updating the +img-setup.sh script to test all partition in the destination-image-file to +find the root filesystem. +The guest img can be installed with: + ./tools/img-install.sh isofile image-file + +When installing the root partition must be the first one and it can not be an +LVM partition (must be standard partition). This could be fix by updating the +img-setup.sh script to test all partition in the image-file to find the root +filesystem. + + +You need following kernel option (built-in not modules) for the guest kernel: + + CONFIG_9P_FS=y + CONFIG_9P_FS_POSIX_ACL=y + CONFIG_9P_FS_SECURITY=y + CONFIG_NET_9P=y + CONFIG_NET_9P_VIRTIO=y + CONFIG_VIRTIO_BLK=y + CONFIG_VIRTIO_BLK_SCSI=y + CONFIG_VIRTIO=y + CONFIG_VIRTIO_MENU=y + CONFIG_VIRTIO_PCI=y + CONFIG_VIRTIO_PCI_LEGACY=y + CONFIG_VIRTIO_MMIO=y + CONFIG_VIRTIO_NET=y + CONFIG_BLK_MQ_VIRTIO=y + +You need to install the kernel (if you rely on modules for your testing) by +running the following script from the kernel source directory: + ./tools/kernel-install.sh + + +To run a test all you to do is: + ./tools/img-run.sh image-file path-to-kernel path-to-test test-command-line + +For instant if you have your test program in ~/tmp/mytest and you pass toto as +an argument to your test: + ./tools/img-run.sh image-file path-to-kernel ~/tmp mytest toto + +The stdout and stderr will be log into tests/logs diff --git a/kernel/.gitignore b/kernel/.gitignore new file mode 100644 index 0000000..72e8ffc --- /dev/null +++ b/kernel/.gitignore @@ -0,0 +1 @@ +* diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 0000000..98d8a5a --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1 @@ +logs diff --git a/tests/utest-run.sh b/tests/utest-run.sh new file mode 100755 index 0000000..b9bd750 --- /dev/null +++ b/tests/utest-run.sh @@ -0,0 +1,11 @@ +#!/bin/sh +echo UTest starting up ... + +test=`dmesg | grep "command line" | sed -n "s/.*utest=\"\(.*\)\".*/\1/p"` +echo utest: `date` > /utest/tests/logs +echo utest: $test >> /utest/tests/logs + +cd /utest/share +./$test >> /utest/tests/logs 2>&1 + +exit 0 diff --git a/tools/chk-rootfs.sh b/tools/chk-rootfs.sh new file mode 100755 index 0000000..108604c --- /dev/null +++ b/tools/chk-rootfs.sh @@ -0,0 +1,23 @@ +#!/bin/sh +UTEST_PATH=`dirname $0 | xargs realpath | xargs dirname` +UTEST_CMD=`basename $0` + +# Sanity checks -------------------------------------------------------------- +if [ $# -ne 0 ] ; then + echo "$UTEST_CMD: usage $UTEST_CMD" + exit 1 +fi + +# Check that mounted guest filesystem is root partition ---------------------- +if [ ! -d $UTEST_PATH/mnt ] && [ ! -d $UTEST_PATH/mnt/etc ] ; then + exit 1 +fi +if [ ! -d $UTEST_PATH/mnt/lib ] && [ ! -d $UTEST_PATH/mnt/etc ] ; then + exit 1 +fi +# All scripts assume systemd so better checks for it ... +if [ ! -d $UTEST_PATH/mnt/etc/systemd ] ; then + exit 1 +fi + +exit 0 diff --git a/tools/guest-ssh.sh b/tools/guest-ssh.sh new file mode 100755 index 0000000..b5de602 --- /dev/null +++ b/tools/guest-ssh.sh @@ -0,0 +1,2 @@ +#!/bin/bash +ssh -p 2222 root@localhost diff --git a/tools/img-install.sh b/tools/img-install.sh new file mode 100755 index 0000000..540eaa8 --- /dev/null +++ b/tools/img-install.sh @@ -0,0 +1,25 @@ +#!/bin/sh +UTEST_PATH=`dirname $0 | xargs realpath | xargs dirname` +UTEST_CMD=`basename $0` + +# Sanity checks -------------------------------------------------------------- +if [ $# -ne 2 ] ; then + echo "$UTEST_CMD: usage $UTEST_CMD cdrom-iso image-file" + exit 1 +fi +if [ -f $2 ]; then + echo "$UTEST_CMD: image file already exist remove and try again" + exit 1 +fi + +# Install process ------------------------------------------------------------ +qemu-img create -f raw $2 10G +qemu-system-x86_64 -cdrom $1 -enable-kvm -cpu host -boot order=d \ + -drive file=$2,if=virtio -net nic,model=virtio -m 2048 -net user + +if [ $? -eq 1 ] ; then + echo "$UTEST_CMD: install failed ... quitting" +fi + +# Setup the new image (create mount directory, add test service) ------------- +$UTEST_PATH/tools/img-setup.sh $2 diff --git a/tools/img-mnt.sh b/tools/img-mnt.sh new file mode 100755 index 0000000..44a1dc0 --- /dev/null +++ b/tools/img-mnt.sh @@ -0,0 +1,18 @@ +#!/bin/sh +UTEST_PATH=`dirname $0 | xargs realpath | xargs dirname` +UTEST_CMD=`basename $0` + +# Sanity checks -------------------------------------------------------------- +if [ $# -ne 1 ] && [ $# -ne 2 ] ; then + echo "$UTEST_CMD: usage $UTEST_CMD image-file partition" + exit 1 +fi + +# Default partition ---------------------------------------------------------- +partition=$2 +if [ -z $2 ] ; then + partition=/dev/sda1 +fi + +# Mount guest filesystem ----------------------------------------------------- +guestmount -a $1 -m $partition $UTEST_PATH/mnt diff --git a/tools/img-run.sh b/tools/img-run.sh new file mode 100755 index 0000000..26bf489 --- /dev/null +++ b/tools/img-run.sh @@ -0,0 +1,36 @@ +#!/bin/sh +UTEST_PATH=`dirname $0 | xargs realpath | xargs dirname` +UTEST_CMD=`basename $0` + +# Sanity checks -------------------------------------------------------------- +if [ $# -lt 3 ] ; then + echo "$UTEST_CMD: usage $UTEST_CMD image-file kernel diretory-to-share test-list" + exit 1 +fi + +# Eat arguments -------------------------------------------------------------- +image=$1 +shift +kernel=$1 +shift +share=$1 +shift + +# Kernel command line -------------------------------------------------------- +cmdline="root=/dev/vda1 console=\"ttyS0\"" +if [ $# -gt 0 ] ; then + cmdline="$cmdline systemd.unit=utest.target utest=\"$@\"" +fi +echo $cmdline + +# Boot kernel with given image and expose share directory -------------------- +qemu-system-x86_64 -enable-kvm -m 8G -cpu host -smp 4 -kernel $kernel \ + -boot order=c -drive file=$image,if=virtio -net nic,model=virtio \ + -fsdev local,security_model=passthrough,id=fsdev0,path=$share \ + -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshare \ + -fsdev local,security_model=passthrough,id=fsdev1,path=$UTEST_PATH/tests \ + -device virtio-9p-pci,id=fs1,fsdev=fsdev1,mount_tag=hosttests \ + -fsdev local,security_model=passthrough,id=fsdev2,path=$UTEST_PATH/kernel/lib/modules \ + -device virtio-9p-pci,id=fs2,fsdev=fsdev2,mount_tag=hostmodules \ + -net user,hostfwd=tcp::2222-:22 -nographic \ + -append "$cmdline" diff --git a/tools/img-setup.sh b/tools/img-setup.sh new file mode 100755 index 0000000..d1c3964 --- /dev/null +++ b/tools/img-setup.sh @@ -0,0 +1,92 @@ +#!/bin/sh +UTEST_PATH=`dirname $0 | xargs realpath | xargs dirname` +UTEST_CMD=`basename $0` + +# Sanity checks -------------------------------------------------------------- +if [ $# -ne 1 ] ; then + echo "$UTEST_CMD: usage $UTEST_CMD image-file" + exit 1 +fi + +# Mount guest filesystem ----------------------------------------------------- +$UTEST_PATH/tools/img-mnt.sh $1 +if [ $? -ne 0 ] ; then + exit 1 +fi + +# Check it is a valid root file system --------------------------------------- +$UTEST_PATH/tools/chk-rootfs.sh +if [ $? -ne 0 ] ; then + $UTEST_PATH/tools/img-umnt.sh + exit 1 +fi + +echo "$UTEST_CMD: rootfs ? OK" + +# Setup directories ---------------------------------------------------------- +if [ ! -d $UTEST_PATH/mnt/utest ] ; then + mkdir $UTEST_PATH/mnt/utest + if [ $? -ne 0 ] ; then + echo toto $UTEST_PATH/mnt/utest + $UTEST_PATH/tools/img-umnt.sh + exit 1 + fi +fi +if [ ! -d $UTEST_PATH/mnt/utest/share ] ; then + mkdir $UTEST_PATH/mnt/utest/share + if [ $? -ne 0 ] ; then + $UTEST_PATH/tools/img-umnt.sh + exit 1 + fi +fi +if [ ! -d $UTEST_PATH/mnt/utest/tests ] ; then + mkdir $UTEST_PATH/mnt/utest/tests + if [ $? -ne 0 ] ; then + $UTEST_PATH/tools/img-umnt.sh + exit 1 + fi +fi + +chown -R root:root $UTEST_PATH/mnt/utest +if [ $? -ne 0 ] ; then + $UTEST_PATH/tools/img-umnt.sh + exit 1 +fi + +# Setup fstab ---------------------------------------------------------------- +grep "/utest/share" $UTEST_PATH/mnt/etc/fstab +if [ $? -ne 0 ] ; then + echo "hostshare /utest/share 9p trans=virtio 0 0" >> $UTEST_PATH/mnt/etc/fstab +fi +grep "/utest/tests" $UTEST_PATH/mnt/etc/fstab +if [ $? -ne 0 ] ; then + echo "hosttests /utest/tests 9p trans=virtio 0 0" >> $UTEST_PATH/mnt/etc/fstab +fi +grep "/lib/modules" $UTEST_PATH/mnt/etc/fstab +if [ $? -ne 0 ] ; then + echo "hostmodules /lib/modules 9p trans=virtio 0 0" >> $UTEST_PATH/mnt/etc/fstab +fi + +# Setup systemd -------------------------------------------------------------- +if [ ! -d $UTEST_PATH/mnt/etc/systemd/system/utest.target.wants ] ; then + mkdir $UTEST_PATH/mnt/etc/systemd/system/utest.target.wants + if [ $? -ne 0 ] ; then + $UTEST_PATH/tools/img-umnt.sh + exit 1 + fi +fi +cp tools/utest.service $UTEST_PATH/mnt/usr/lib/systemd/system/ +if [ $? -ne 0 ] ; then + $UTEST_PATH/tools/img-umnt.sh + exit 1 +fi +cp tools/utest.target $UTEST_PATH/mnt/usr/lib/systemd/system/ +if [ $? -ne 0 ] ; then + $UTEST_PATH/tools/img-umnt.sh + exit 1 +fi + +# We are done ! -------------------------------------------------------------- +$UTEST_PATH/tools/img-umnt.sh +echo "$UTEST_CMD: OK" +exit 0 diff --git a/tools/img-umnt.sh b/tools/img-umnt.sh new file mode 100755 index 0000000..7654830 --- /dev/null +++ b/tools/img-umnt.sh @@ -0,0 +1,12 @@ +#!/bin/sh +UTEST_PATH=`dirname $0 | xargs realpath | xargs dirname` +UTEST_CMD=`basename $0` + +# Sanity checks -------------------------------------------------------------- +if [ $# -ne 0 ] ; then + echo "$UTEST_CMD: usage $UTEST_CMD" + exit 1 +fi + +# Umount --------------------------------------------------------------------- +guestunmount $UTEST_PATH/mnt diff --git a/tools/kernel-install.sh b/tools/kernel-install.sh new file mode 100755 index 0000000..3c1aee6 --- /dev/null +++ b/tools/kernel-install.sh @@ -0,0 +1,15 @@ +#!/bin/sh +UTEST_PATH=`dirname $0 | xargs realpath | xargs dirname` +UTEST_CMD=`basename $0` + +# Sanity checks -------------------------------------------------------------- +if [ $# -ne 0 ] ; then + echo "$UTEST_CMD: usage $UTEST_CMD" + exit 1 +fi + +# Install kernel ------------------------------------------------------------- +# Just to avoid make install, make modules_install to take too much time ... +make -j$((`nproc` * 2)) +INSTALL_PATH=$UTEST_PATH/kernel make install +make INSTALL_MOD_PATH=$UTEST_PATH/kernel modules_install diff --git a/tools/utest.service b/tools/utest.service new file mode 100644 index 0000000..34f6480 --- /dev/null +++ b/tools/utest.service @@ -0,0 +1,10 @@ +[Unit] +Description=UTest +After=multi-user.target + +[Service] +Type=oneshot +ExecStart=/usr/bin/bash /utest/tests/utest-run.sh + +[Install] +WantedBy=utest.target diff --git a/tools/utest.target b/tools/utest.target new file mode 100644 index 0000000..00b7cdb --- /dev/null +++ b/tools/utest.target @@ -0,0 +1,7 @@ +[Unit] +Description=UTest target +Requires=multi-user.target +Wants=utest.service +Conflicts=rescue.service rescue.target +After=multi-user.target rescue.service rescue.target +AllowIsolate=yes |