Testing updates:

- .travis.yml tweaks and optimisations
   - .cirrus.yml enabled for FreeBSD CI
   - docker.py clean-ups for binfmt_misc
   - more control of vm-test builds
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEE9xX3zUb5RDX09YhljlINYSiVGa4FAlxhcpIACgkQjlINYSiV
 Ga5jdw//VaYhiHaLtVy+fFpgT+CLprALynRtkTTV0b+Y43G7fFbbFHqO5ivjjtEX
 +j2cfZvGl0zCK/Zi46oD1M5FpQvJ5qcNcFc4UecNv/xRQK1BCXb1TGVtJJZGvr3g
 rhDYOdsqIxfKi9220StSIscM4Wn1OtXhV2aSE4uM0zxvHWSdA5cmf7WlCQg3kp8F
 M3e1i1Tqb/xZuUI3flaQOsp/OKVMP0RG1YY4t5iJGJ4ehk5r4GjklP7FQb3pRvUN
 buYzhEw21LgEoruHMJLIN3jepaHMhXZGJE+LcgJ3J3VQBOKQ3/p3SLyKy6xNamuu
 9cq8JTXaGhY9PYpVuCdCpsutqUdM0h8DwfyXjTT5rznNWnnnPpWX0PoJKKrX479v
 wEsoyiIDyNM5e1asq/+JB/0silFHdFu/TE9RebQR6WDc6aoFcA/M5p9mDiRC8YOy
 WxuuFqDrMstBMGm/1jRb1M/cwaxVJQutgdLabCgD1CEchmbnj3QYWiFgBayi1kNd
 rEwPNdWa3v0aXJT9kOM78R1UjMw2JFDZyS3OBzUHKR21IQiwkWMnVMIYUfIOTzv0
 gkE8+UOmQFCN+tITbpAwuiuClEwbFrKDj+u/VU/w25ZGo8tuorLu23Syarwc037T
 lNzpGVSpxwWKnjuUQ16qnebGGtasRTttmwZij96ya4cohxi1r2Q=
 =1GUs
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'remotes/stsquad/tags/pull-testing-next-110219-1' into staging

Testing updates:

  - .travis.yml tweaks and optimisations
  - .cirrus.yml enabled for FreeBSD CI
  - docker.py clean-ups for binfmt_misc
  - more control of vm-test builds

# gpg: Signature made Mon 11 Feb 2019 13:03:14 GMT
# gpg:                using RSA key F715F7CD46F94435F4F588658E520D61289519AE
# gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>" [full]
# Primary key fingerprint: 6685 AE99 E751 67BC AFC8  DF35 FBD0 DB09 5A9E 2A44
#      Subkey fingerprint: F715 F7CD 46F9 4435 F4F5  8865 8E52 0D61 2895 19AE

* remotes/stsquad/tags/pull-testing-next-110219-1:
  tests/vm: Be verbose while extracting compressed images
  docs/devel/testing: Add -a option to usermod command on docker setup
  scripts/qemu.py: allow arches use KVM for their 32bit cousins
  tests/vm: expose BUILD_TARGET, TARGET_LIST and EXTRA_CONFIGURE_OPTS
  tests/vm: add --build-target option
  tests/vm: call make check directly for netbsd/freebsd/ubuntu.i386
  tests/vm: move images to $HOME/.cache/qemu-vm/images
  tests: PEP8 cleanup of docker.py, mostly white space
  tests: docker.py be even smarter with persistent binfmt_misc
  tests: make docker.py check for persistent configs
  tests: make docker.py update use configured binfmt path
  docker: add debian-buster-arm64-cross
  archive-source.sh: Clone the submodules locally
  MAINTAINERS: Add an entry for scripts/archive-source.sh
  .travis.yml: fold --disable-tcg into alternate coroutine builds
  .travis.yml: separate tools and docs into another entry
  .travis.yml: stop requesting libffi & gettext from homebrew
  .cirrus.yml: basic compile and test for FreeBSD

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Peter Maydell 2019-02-11 14:47:44 +00:00
commit a044e3de29
18 changed files with 222 additions and 60 deletions

16
.cirrus.yml Normal file
View File

@ -0,0 +1,16 @@
freebsd_12_task:
freebsd_instance:
image: freebsd-12-0-release-amd64
cpu: 8
memory: 8G
env:
CIRRUS_CLONE_DEPTH: 1
install_script: pkg install -y
bison curl cyrus-sasl git glib gmake gnutls
nettle perl5 pixman pkgconf png usbredir
script:
- mkdir build
- cd build
- ../configure || { cat config.log; exit 1; }
- gmake -j8
- gmake -j8 V=1 check

View File

@ -40,8 +40,6 @@ addons:
- gcovr
homebrew:
packages:
- libffi
- gettext
- glib
- pixman
@ -61,6 +59,7 @@ env:
global:
- SRC_DIR="."
- BUILD_DIR="."
- BASE_CONFIG="--disable-docs --disable-tools"
- TEST_CMD="make check -j3 V=1"
@ -71,7 +70,7 @@ git:
before_script:
- mkdir -p ${BUILD_DIR} && cd ${BUILD_DIR}
- ${SRC_DIR}/configure ${CONFIG} || { cat config.log && exit 1; }
- ${SRC_DIR}/configure ${BASE_CONFIG} ${CONFIG} || { cat config.log && exit 1; }
script:
- make -j3 && ${TEST_CMD}
@ -98,14 +97,29 @@ matrix:
- CONFIG="--enable-modules --disable-linux-user"
# Alternate coroutines implementations are only really of interest to KVM users
# However we can't test against KVM on Travis so we can only run unit tests
- env:
- CONFIG="--with-coroutine=ucontext --disable-linux-user"
- CONFIG="--with-coroutine=ucontext --disable-tcg"
- TEST_CMD="make check-unit -j3 V=1"
- env:
- CONFIG="--with-coroutine=sigaltstack --disable-linux-user"
- CONFIG="--with-coroutine=sigaltstack --disable-tcg"
- TEST_CMD="make check-unit -j3 V=1"
# Check we can build docs and tools
- env:
- BASE_CONFIG="--enable-tools --enable-docs"
- CONFIG="--target-list=x86_64-softmmu,aarch64-linux-user"
addons:
apt:
packages:
- python-sphinx
- texinfo
- perl
# Test out-of-tree builds
- env:
- CONFIG="--enable-debug --enable-debug-tcg"
@ -152,11 +166,6 @@ matrix:
- TEST_CMD=""
- env:
- CONFIG="--disable-tcg"
- TEST_CMD=""
# MacOSX builds
- env:
- CONFIG="--target-list=aarch64-softmmu,arm-softmmu,i386-softmmu,mips-softmmu,mips64-softmmu,ppc64-softmmu,riscv64-softmmu,s390x-softmmu,x86_64-softmmu"
@ -243,5 +252,5 @@ matrix:
- env:
- CONFIG="--disable-system --disable-docs"
- CONFIG="--disable-system"
- TEST_CMD="make -j3 check-tcg V=1"

View File

@ -2471,10 +2471,19 @@ F: scripts/travis/
F: .shippable.yml
F: tests/docker/
F: tests/vm/
F: scripts/archive-source.sh
W: https://travis-ci.org/qemu/qemu
W: https://app.shippable.com/github/qemu/qemu
W: http://patchew.org/QEMU/
FreeBSD Hosted Continuous Integration
M: Ed Maste <emaste@freebsd.org>
M: Li-Wen Hsu <lwhsu@freebsd.org>
L: qemu-devel@nongnu.org
S: Maintained
F: .cirrus.yml
W: https://cirrus-ci.com/github/qemu/qemu
Guest Test Compilation Support
M: Alex Bennée <alex.bennee@linaro.org>
R: Philippe Mathieu-Daudé <f4bug@amsat.org>

View File

@ -301,7 +301,7 @@ An alternative method to set up permissions is by adding the current user to
.. code::
$ sudo groupadd docker
$ sudo usermod $USER -G docker
$ sudo usermod $USER -a -G docker
$ sudo chown :docker /var/run/docker.sock
Note that any one of above configurations makes it possible for the user to

View File

@ -38,6 +38,13 @@ else
fi
git clone --shared . "$vroot_dir"
test $? -ne 0 && error "failed to clone into '$vroot_dir'"
for sm in $submodules; do
if test -d "$sm/.git"
then
git clone --shared "$sm" "$vroot_dir/$sm"
test $? -ne 0 && error "failed to clone submodule $sm"
fi
done
cd "$vroot_dir"
test $? -ne 0 && error "failed to change into '$vroot_dir'"

View File

@ -25,10 +25,18 @@ import tempfile
LOG = logging.getLogger(__name__)
# Mapping host architecture to any additional architectures it can
# support which often includes its 32 bit cousin.
ADDITIONAL_ARCHES = {
"x86_64" : "i386",
"aarch64" : "armhf"
}
def kvm_available(target_arch=None):
if target_arch and target_arch != os.uname()[4]:
return False
host_arch = os.uname()[4]
if target_arch and target_arch != host_arch:
if target_arch != ADDITIONAL_ARCHES.get(host_arch):
return False
return os.access("/dev/kvm", os.R_OK | os.W_OK)

View File

@ -90,6 +90,7 @@ docker-image-debian-amd64: docker-image-debian9
docker-image-debian-armel-cross: docker-image-debian9
docker-image-debian-armhf-cross: docker-image-debian9
docker-image-debian-arm64-cross: docker-image-debian9
docker-image-debian-buster-arm64-cross: docker-image-debian10
docker-image-debian-mips-cross: docker-image-debian9
docker-image-debian-mipsel-cross: docker-image-debian9
docker-image-debian-mips64el-cross: docker-image-debian9

View File

@ -30,7 +30,7 @@ except ImportError:
from io import StringIO
from shutil import copy, rmtree
from pwd import getpwuid
from datetime import datetime,timedelta
from datetime import datetime, timedelta
FILTERED_ENV_NAMES = ['ftp_proxy', 'http_proxy', 'https_proxy']
@ -43,9 +43,11 @@ def _text_checksum(text):
"""Calculate a digest string unique to the text content"""
return hashlib.sha1(text).hexdigest()
def _file_checksum(filename):
return _text_checksum(open(filename, 'rb').read())
def _guess_docker_command():
""" Guess a working docker command or raise exception if not found"""
commands = [["docker"], ["sudo", "-n", "docker"]]
@ -59,9 +61,10 @@ def _guess_docker_command():
except OSError:
pass
commands_txt = "\n".join([" " + " ".join(x) for x in commands])
raise Exception("Cannot find working docker command. Tried:\n%s" % \
raise Exception("Cannot find working docker command. Tried:\n%s" %
commands_txt)
def _copy_with_mkdir(src, root_dir, sub_path='.'):
"""Copy src into root_dir, creating sub_path as needed."""
dest_dir = os.path.normpath("%s/%s" % (root_dir, sub_path))
@ -96,19 +99,29 @@ def _get_so_libs(executable):
return libs
def _copy_binary_with_libs(src, dest_dir):
"""Copy a binary executable and all its dependent libraries.
def _copy_binary_with_libs(src, bin_dest, dest_dir):
"""Maybe copy a binary and all its dependent libraries.
If bin_dest isn't set we only copy the support libraries because
we don't need qemu in the docker path to run (due to persistent
mapping). Indeed users may get confused if we aren't running what
is in the image.
This does rely on the host file-system being fairly multi-arch
aware so the file don't clash with the guests layout."""
aware so the file don't clash with the guests layout.
"""
_copy_with_mkdir(src, dest_dir, "/usr/bin")
if bin_dest:
_copy_with_mkdir(src, dest_dir, os.path.dirname(bin_dest))
else:
print("only copying support libraries for %s" % (src))
libs = _get_so_libs(src)
if libs:
for l in libs:
so_path = os.path.dirname(l)
_copy_with_mkdir(l , dest_dir, so_path)
_copy_with_mkdir(l, dest_dir, so_path)
def _check_binfmt_misc(executable):
@ -116,23 +129,34 @@ def _check_binfmt_misc(executable):
The details of setting up binfmt_misc are outside the scope of
this script but we should at least fail early with a useful
message if it won't work."""
message if it won't work.
Returns the configured binfmt path and a valid flag. For
persistent configurations we will still want to copy and dependent
libraries.
"""
binary = os.path.basename(executable)
binfmt_entry = "/proc/sys/fs/binfmt_misc/%s" % (binary)
if not os.path.exists(binfmt_entry):
print ("No binfmt_misc entry for %s" % (binary))
return False
return None, False
with open(binfmt_entry) as x: entry = x.read()
qpath = "/usr/bin/%s" % (binary)
if not re.search("interpreter %s\n" % (qpath), entry):
print ("binfmt_misc for %s does not point to %s" % (binary, qpath))
return False
if re.search("flags:.*F.*\n", entry):
print("binfmt_misc for %s uses persistent(F) mapping to host binary" %
(binary))
return None, True
return True
m = re.search("interpreter (\S+)\n", entry)
interp = m.group(1)
if interp and interp != executable:
print("binfmt_misc for %s does not point to %s, using %s" %
(binary, executable, interp))
return interp, True
def _read_qemu_dockerfile(img_name):
@ -144,6 +168,7 @@ def _read_qemu_dockerfile(img_name):
img_name + ".docker")
return open(df, "r").read()
def _dockerfile_preprocess(df):
out = ""
for l in df.splitlines():
@ -161,6 +186,7 @@ def _dockerfile_preprocess(df):
out += l + "\n"
return out
class Docker(object):
""" Running Docker commands """
def __init__(self):
@ -228,7 +254,7 @@ class Docker(object):
def build_image(self, tag, docker_dir, dockerfile,
quiet=True, user=False, argv=None, extra_files_cksum=[]):
if argv == None:
if argv is None:
argv = []
tmp_df = tempfile.NamedTemporaryFile(dir=docker_dir, suffix=".docker")
@ -249,7 +275,7 @@ class Docker(object):
tmp_df.flush()
self._do_check(["build", "-t", tag, "-f", tmp_df.name] + argv + \
self._do_check(["build", "-t", tag, "-f", tmp_df.name] + argv +
[docker_dir],
quiet=quiet)
@ -279,9 +305,11 @@ class Docker(object):
def command(self, cmd, argv, quiet):
return self._do([cmd] + argv, quiet=quiet)
class SubCommand(object):
"""A SubCommand template base class"""
name = None # Subcommand name
name = None # Subcommand name
def shared_args(self, parser):
parser.add_argument("--quiet", action="store_true",
help="Run quietly unless an error occurred")
@ -289,6 +317,7 @@ class SubCommand(object):
def args(self, parser):
"""Setup argument parser"""
pass
def run(self, args, argv):
"""Run command.
args: parsed argument by argument parser.
@ -296,18 +325,23 @@ class SubCommand(object):
"""
pass
class RunCommand(SubCommand):
"""Invoke docker run and take care of cleaning up"""
name = "run"
def args(self, parser):
parser.add_argument("--keep", action="store_true",
help="Don't remove image when command completes")
def run(self, args, argv):
return Docker().run(argv, args.keep, quiet=args.quiet)
class BuildCommand(SubCommand):
""" Build docker image out of a dockerfile. Arguments: <tag> <dockerfile>"""
""" Build docker image out of a dockerfile. Arg: <tag> <dockerfile>"""
name = "build"
def args(self, parser):
parser.add_argument("--include-executable", "-e",
help="""Specify a binary that will be copied to the
@ -340,7 +374,8 @@ class BuildCommand(SubCommand):
# Validate binfmt_misc will work
if args.include_executable:
if not _check_binfmt_misc(args.include_executable):
qpath, enabled = _check_binfmt_misc(args.include_executable)
if not enabled:
return 1
# Is there a .pre file to run in the build context?
@ -363,14 +398,16 @@ class BuildCommand(SubCommand):
# FIXME: there is no checksum of this executable and the linked
# libraries, once the image built any change of this executable
# or any library won't trigger another build.
_copy_binary_with_libs(args.include_executable, docker_dir)
_copy_binary_with_libs(args.include_executable,
qpath, docker_dir)
for filename in args.extra_files or []:
_copy_with_mkdir(filename, docker_dir)
cksum += [(filename, _file_checksum(filename))]
argv += ["--build-arg=" + k.lower() + "=" + v
for k, v in os.environ.iteritems()
if k.lower() in FILTERED_ENV_NAMES]
for k, v in os.environ.iteritems()
if k.lower() in FILTERED_ENV_NAMES]
dkr.build_image(tag, docker_dir, dockerfile,
quiet=args.quiet, user=args.user, argv=argv,
extra_files_cksum=cksum)
@ -379,9 +416,11 @@ class BuildCommand(SubCommand):
return 0
class UpdateCommand(SubCommand):
""" Update a docker image with new executables. Arguments: <tag> <executable>"""
""" Update a docker image with new executables. Args: <tag> <executable>"""
name = "update"
def args(self, parser):
parser.add_argument("tag",
help="Image Tag")
@ -394,10 +433,17 @@ class UpdateCommand(SubCommand):
tmp = tempfile.NamedTemporaryFile(suffix="dckr.tar.gz")
tmp_tar = TarFile(fileobj=tmp, mode='w')
# Add the executable to the tarball
bn = os.path.basename(args.executable)
ff = "/usr/bin/%s" % bn
tmp_tar.add(args.executable, arcname=ff)
# Add the executable to the tarball, using the current
# configured binfmt_misc path. If we don't get a path then we
# only need the support libraries copied
ff, enabled = _check_binfmt_misc(args.executable)
if not enabled:
print("binfmt_misc not enabled, update disabled")
return 1
if ff:
tmp_tar.add(args.executable, arcname=ff)
# Add any associated libraries
libs = _get_so_libs(args.executable)
@ -427,16 +473,20 @@ class UpdateCommand(SubCommand):
return 0
class CleanCommand(SubCommand):
"""Clean up docker instances"""
name = "clean"
def run(self, args, argv):
Docker().clean()
return 0
class ImagesCommand(SubCommand):
"""Run "docker images" command"""
name = "images"
def run(self, args, argv):
return Docker().command("images", argv, args.quiet)
@ -509,7 +559,7 @@ class CheckCommand(SubCommand):
try:
dkr = Docker()
except:
except subprocess.CalledProcessError:
print("Docker not set up")
return 1
@ -548,7 +598,8 @@ class CheckCommand(SubCommand):
def main():
parser = argparse.ArgumentParser(description="A Docker helper",
usage="%s <subcommand> ..." % os.path.basename(sys.argv[0]))
usage="%s <subcommand> ..." %
os.path.basename(sys.argv[0]))
subparsers = parser.add_subparsers(title="subcommands", help=None)
for cls in SubCommand.__subclasses__():
cmd = cls()
@ -559,5 +610,6 @@ def main():
args, argv = parser.parse_known_args()
return args.cmdobj.run(args, argv)
if __name__ == "__main__":
sys.exit(main())

View File

@ -0,0 +1,15 @@
#
# Docker arm64 cross-compiler target
#
# This docker target builds on the Debian's Buster base image. There
# are no QEMU pre-requistes so this image can only be used to build
# test cases.
#
FROM qemu:debian10
# Add the foreign architecture we want and install dependencies
RUN dpkg --add-architecture arm64
RUN apt update
RUN DEBIAN_FRONTEND=noninteractive eatmydata \
apt-get install -y --no-install-recommends \
crossbuild-essential-arm64

View File

@ -0,0 +1,31 @@
#
# Docker multiarch cross-compiler target
#
# This docker target is builds on Debian cross compiler targets to build distro
# with a selection of cross compilers for building test binaries.
#
# On its own you can't build much but the docker-foo-cross targets
# build on top of the base debian image.
#
FROM debian:buster-slim
# Duplicate deb line as deb-src
RUN cat /etc/apt/sources.list | sed "s/^deb\ /deb-src /" >> /etc/apt/sources.list
# Install common build utilities
RUN apt update
RUN DEBIAN_FRONTEND=noninteractive apt install -yy eatmydata
RUN DEBIAN_FRONTEND=noninteractive eatmydata \
apt install -y --no-install-recommends \
bison \
build-essential \
ca-certificates \
clang \
flex \
gettext \
git \
pkg-config \
psmisc \
python \
texinfo \
$(apt-get -s build-dep qemu | egrep ^Inst | fgrep '[all]' | cut -d\ -f2)

View File

@ -3,6 +3,6 @@
# We don't have any bigendian build tools so we only use this for AArch64
ifeq ($(TARGET_NAME),aarch64)
DOCKER_IMAGE=debian-arm64-cross
DOCKER_IMAGE=debian-buster-arm64-cross
DOCKER_CROSS_COMPILER=aarch64-linux-gnu-gcc
endif

View File

@ -3,7 +3,8 @@
.PHONY: vm-build-all vm-clean-all
IMAGES := ubuntu.i386 freebsd netbsd openbsd centos
IMAGE_FILES := $(patsubst %, tests/vm/%.img, $(IMAGES))
IMAGES_DIR := $(HOME)/.cache/qemu-vm/images
IMAGE_FILES := $(patsubst %, $(IMAGES_DIR)/%.img, $(IMAGES))
.PRECIOUS: $(IMAGE_FILES)
@ -18,15 +19,21 @@ vm-test:
@echo ""
@echo " vm-build-all - Build QEMU in all VMs"
@echo " vm-clean-all - Clean up VM images"
@echo
@echo "Special variables:"
@echo " BUILD_TARGET=foo - override the build target"
@echo " TARGET_LIST=a,b,c - Override target list in builds."
@echo ' EXTRA_CONFIGURE_OPTS="..."'
vm-build-all: $(addprefix vm-build-, $(IMAGES))
vm-clean-all:
rm -f $(IMAGE_FILES)
tests/vm/%.img: $(SRC_PATH)/tests/vm/% \
$(SRC_PATH)/tests/vm/basevm.py \
$(SRC_PATH)/tests/vm/Makefile.include
$(IMAGES_DIR)/%.img: $(SRC_PATH)/tests/vm/% \
$(SRC_PATH)/tests/vm/basevm.py \
$(SRC_PATH)/tests/vm/Makefile.include
@mkdir -p $(IMAGES_DIR)
$(call quiet-command, \
$< \
$(if $(V)$(DEBUG), --debug) \
@ -37,7 +44,7 @@ tests/vm/%.img: $(SRC_PATH)/tests/vm/% \
# Build in VM $(IMAGE)
vm-build-%: tests/vm/%.img
vm-build-%: $(IMAGES_DIR)/%.img
$(call quiet-command, \
$(SRC_PATH)/tests/vm/$* \
$(if $(V)$(DEBUG), --debug) \
@ -45,6 +52,9 @@ vm-build-%: tests/vm/%.img
$(if $(J),--jobs $(J)) \
$(if $(V),--verbose) \
--image "$<" \
--build-qemu $(SRC_PATH), \
$(if $(BUILD_TARGET),--build-target $(BUILD_TARGET)) \
--build-qemu $(SRC_PATH) -- \
$(if $(TARGET_LIST),--target-list=$(TARGET_LIST)) \
$(if $(EXTRA_CONFIGURE_OPTS),$(EXTRA_CONFIGURE_OPTS)), \
" VM-BUILD $*")

View File

@ -228,6 +228,8 @@ def parse_args(vmcls):
help="build image")
parser.add_option("--build-qemu",
help="build QEMU from source in guest")
parser.add_option("--build-target",
help="QEMU build target", default="check")
parser.add_option("--interactive", "-I", action="store_true",
help="Interactively run command")
parser.add_option("--snapshot", "-s", action="store_true",
@ -255,6 +257,7 @@ def main(vmcls):
cmd = [vm.BUILD_SCRIPT.format(
configure_opts = " ".join(argv),
jobs=args.jobs,
target=args.build_target,
verbose = "V=1" if args.verbose else "")]
else:
cmd = argv

View File

@ -65,8 +65,9 @@ class CentosVM(basevm.BaseVM):
def build_image(self, img):
cimg = self._download_with_cache("https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1802.qcow2.xz")
img_tmp = img + ".tmp"
sys.stderr.write("Extracting the image...\n")
subprocess.check_call(["cp", "-f", cimg, img_tmp + ".xz"])
subprocess.check_call(["xz", "-df", img_tmp + ".xz"])
subprocess.check_call(["xz", "-dvf", img_tmp + ".xz"])
subprocess.check_call(["qemu-img", "resize", img_tmp, "50G"])
self.boot(img_tmp, extra_args = ["-cdrom", self._gen_cloud_init_iso()])
self.wait_ssh()

View File

@ -25,8 +25,7 @@ class FreeBSDVM(basevm.BaseVM):
cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
tar -xf /dev/vtbd1;
./configure {configure_opts};
gmake --output-sync -j{jobs} {verbose};
gmake --output-sync -j{jobs} check {verbose};
gmake --output-sync -j{jobs} {target} {verbose};
"""
def build_image(self, img):
@ -34,8 +33,9 @@ class FreeBSDVM(basevm.BaseVM):
sha256sum='adcb771549b37bc63826c501f05121a206ed3d9f55f49145908f7e1432d65891')
img_tmp_xz = img + ".tmp.xz"
img_tmp = img + ".tmp"
sys.stderr.write("Extracting the image...\n")
subprocess.check_call(["cp", "-f", cimg, img_tmp_xz])
subprocess.check_call(["xz", "-df", img_tmp_xz])
subprocess.check_call(["xz", "-dvf", img_tmp_xz])
if os.path.exists(img):
os.remove(img)
os.rename(img_tmp, img)

View File

@ -25,8 +25,7 @@ class NetBSDVM(basevm.BaseVM):
cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
tar -xf /dev/rld1a;
./configure --python=python2.7 {configure_opts};
gmake --output-sync -j{jobs} {verbose};
gmake --output-sync -j{jobs} check {verbose};
gmake --output-sync -j{jobs} {target} {verbose};
"""
def build_image(self, img):
@ -34,8 +33,9 @@ class NetBSDVM(basevm.BaseVM):
sha256sum='b633d565b0eac3d02015cd0c81440bd8a7a8df8512615ac1ee05d318be015732')
img_tmp_xz = img + ".tmp.xz"
img_tmp = img + ".tmp"
sys.stderr.write("Extracting the image...\n")
subprocess.check_call(["cp", "-f", cimg, img_tmp_xz])
subprocess.check_call(["xz", "-df", img_tmp_xz])
subprocess.check_call(["xz", "-dvf", img_tmp_xz])
if os.path.exists(img):
os.remove(img)
os.rename(img_tmp, img)

View File

@ -35,8 +35,9 @@ class OpenBSDVM(basevm.BaseVM):
sha256sum='8c6cedc483e602cfee5e04f0406c64eb99138495e8ca580bc0293bcf0640c1bf')
img_tmp_xz = img + ".tmp.xz"
img_tmp = img + ".tmp"
sys.stderr.write("Extracting the image...\n")
subprocess.check_call(["cp", "-f", cimg, img_tmp_xz])
subprocess.check_call(["xz", "-df", img_tmp_xz])
subprocess.check_call(["xz", "-dvf", img_tmp_xz])
if os.path.exists(img):
os.remove(img)
os.rename(img_tmp, img)

View File

@ -26,8 +26,7 @@ class UbuntuX86VM(basevm.BaseVM):
sudo chmod a+r /dev/vdb;
tar -xf /dev/vdb;
./configure {configure_opts};
make --output-sync -j{jobs};
make --output-sync check -j{jobs} {verbose};
make --output-sync {target} -j{jobs} {verbose};
"""
def _gen_cloud_init_iso(self):