aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/Makefile.vm21
-rw-r--r--release/tools/ec2.conf2
-rw-r--r--release/tools/vmimage.subr18
3 files changed, 34 insertions, 7 deletions
diff --git a/release/Makefile.vm b/release/Makefile.vm
index 93d662d9c4cb..c7a1d1f0d1fe 100644
--- a/release/Makefile.vm
+++ b/release/Makefile.vm
@@ -39,6 +39,24 @@ VAGRANT-VMWARE_FORMAT= vmdk
VAGRANT-VMWARE_DESC= Vagrant Image for VMWare
VAGRANT-VMWARE_DISK= ${OSRELEASE}.vmware.${VAGRANT_FORMAT}
+emulator-portinstall:
+.if ${TARGET_ARCH} != ${MACHINE_ARCH}
+.if ( ${TARGET_ARCH} != "i386" ) || ( ${MACHINE_ARCH} != "amd64" )
+.if !exists(/usr/local/bin/qemu-${TARGET_ARCH}-static)
+.if exists(${PORTSDIR}/emulators/qemu-user-static/Makefile)
+ env - PATH=$$PATH make -C ${PORTSDIR}/emulators/qemu-user-static BATCH=1 all install clean
+.else
+.if !exists(/usr/local/sbin/pkg-static)
+ env ASSUME_ALWAYS_YES=yes pkg bootstrap -y
+.endif
+ env ASSUME_ALWAYS_YES=yes pkg install -y emulators/qemu-user-static
+.endif
+.endif
+
+QEMUSTATIC=/usr/local/bin/qemu-${TARGET_ARCH}-static
+.endif
+.endif
+
.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
. for _CW in ${CLOUDWARE}
CLOUDTARGETS+= cw-${_CW:tl}
@@ -53,9 +71,10 @@ ${_CW:tu}IMAGE= ${_CW:tl}.${${_CW:tu}_FORMAT}
${_CW:tu}CONF?= ${.CURDIR}/tools/${_CW:tl}.conf
. endif
-cw-${_CW:tl}:
+cw-${_CW:tl}: emulator-portinstall
mkdir -p ${.OBJDIR}/${.TARGET}
env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} SWAPSIZE=${SWAPSIZE} \
+ QEMUSTATIC=${QEMUSTATIC} \
${.CURDIR}/scripts/mk-vmimage.sh \
-C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
-i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW:tu}_FORMAT} \
diff --git a/release/tools/ec2.conf b/release/tools/ec2.conf
index bf8eb723d1bd..d053ebb1a8e0 100644
--- a/release/tools/ec2.conf
+++ b/release/tools/ec2.conf
@@ -40,7 +40,7 @@ vm_extra_pre_umount() {
# catalogue and install or update pkg when the instance first
# launches, so these files would just be replaced anyway; removing
# them from the image allows it to boot faster.
- chroot ${DESTDIR} env ASSUME_ALWAYS_YES=yes \
+ chroot ${DESTDIR} ${EMULATOR} env ASSUME_ALWAYS_YES=yes \
/usr/sbin/pkg delete -f -y pkg
rm ${DESTDIR}/var/db/pkg/repo-*.sqlite
diff --git a/release/tools/vmimage.subr b/release/tools/vmimage.subr
index 287c2741f156..ff3d69f5ba42 100644
--- a/release/tools/vmimage.subr
+++ b/release/tools/vmimage.subr
@@ -148,10 +148,15 @@ vm_install_base() {
hostname="$(echo $(uname -o) | tr '[:upper:]' '[:lower:]')"
echo "hostname=\"${hostname}\"" >> ${DESTDIR}/etc/rc.conf
+ if ! [ -z "${QEMUSTATIC}" ]; then
+ export EMULATOR=/qemu
+ cp ${QEMUSTATIC} ${DESTDIR}/${EMULATOR}
+ fi
+
mkdir -p ${DESTDIR}/dev
mount -t devfs devfs ${DESTDIR}/dev
- chroot ${DESTDIR} /usr/bin/newaliases
- chroot ${DESTDIR} /etc/rc.d/ldconfig forcestart
+ chroot ${DESTDIR} ${EMULATOR} /usr/bin/newaliases
+ chroot ${DESTDIR} ${EMULATOR} /bin/sh /etc/rc.d/ldconfig forcestart
umount_loop ${DESTDIR}/dev
cp /etc/resolv.conf ${DESTDIR}/etc/resolv.conf
@@ -188,9 +193,9 @@ vm_extra_install_packages() {
fi
mkdir -p ${DESTDIR}/dev
mount -t devfs devfs ${DESTDIR}/dev
- chroot ${DESTDIR} env ASSUME_ALWAYS_YES=yes \
+ chroot ${DESTDIR} ${EMULATOR} env ASSUME_ALWAYS_YES=yes \
/usr/sbin/pkg bootstrap -y
- chroot ${DESTDIR} env ASSUME_ALWAYS_YES=yes \
+ chroot ${DESTDIR} ${EMULATOR} env ASSUME_ALWAYS_YES=yes \
/usr/sbin/pkg install -y ${VM_EXTRA_PACKAGES}
umount_loop ${DESTDIR}/dev
@@ -210,13 +215,16 @@ vm_extra_pre_umount() {
# Note: When overriding this function, removing resolv.conf in the
# disk image must be included.
+ if ! [ -z "${QEMUSTATIC}" ]; then
+ rm -f ${DESTDIR}/${EMULATOR}
+ fi
rm -f ${DESTDIR}/etc/resolv.conf
return 0
}
vm_extra_pkg_rmcache() {
if [ -e ${DESTDIR}/usr/local/sbin/pkg ]; then
- chroot ${DESTDIR} env ASSUME_ALWAYS_YES=yes \
+ chroot ${DESTDIR} ${EMULATOR} env ASSUME_ALWAYS_YES=yes \
/usr/local/sbin/pkg clean -y -a
fi