summaryrefslogtreecommitdiff
path: root/scripts/build-vmware-image
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/build-vmware-image')
-rwxr-xr-xscripts/build-vmware-image172
1 files changed, 154 insertions, 18 deletions
diff --git a/scripts/build-vmware-image b/scripts/build-vmware-image
index 1730d7a..5ad6615 100755
--- a/scripts/build-vmware-image
+++ b/scripts/build-vmware-image
@@ -1,10 +1,8 @@
#!/bin/sh
#
-# Copyright (C) 2016 VyOS maintainers and contributors
+# Copyright (C) 2019 VyOS maintainers and contributors
#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 or later as
-# published by the Free Software Foundation.
+# This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 or later as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -16,7 +14,7 @@
#
# File: build-vmware-image
# Purpose:
-# Build VyOS OVA and OVF for VMware.
+# Build VyOS image for VMWARE.
if [ ! $(which vmdk-convert) ]; then
echo "Your system doesn't have vmdk-convert. Please install it from https://github.com/vmware/open-vmdk."
@@ -32,32 +30,168 @@ else
echo "Your system has ovftool."
fi
-export PACKER_BUILD_DIR=packer_build
+lb bootstrap
-DST_DIR=${PACKER_BUILD_DIR}/vmware
-mkdir -p ${DST_DIR}
+lb chroot
+lb installer
+lb binary_chroot
+lb chroot_devpts install
+lb chroot_proc install
+lb chroot_selinuxfs install
+lb chroot_sysfs install
+lb chroot_hosts install
+lb chroot_resolv install
+lb chroot_hostname install
+lb chroot_sysv-rc install
+lb chroot_upstart install
+lb chroot_apt install-binary
+lb chroot_archives chroot install
+lb binary_rootfs
+lb binary_manifest
+lb binary_package-lists
+lb binary_linux-image
+lb binary_memtest
+lb binary_grub
+lb binary_grub2
+lb binary_syslinux
+lb binary_disk
+lb binary_loadlin
+lb binary_win32-loader
+lb binary_includes
+lb binary_hooks
+lb binary_checksums
-# Convert qcow2 image to VMDK
-source_image=${PACKER_BUILD_DIR}/qemu/vyos_qemu_image.img
-tmp_vmdk=${DST_DIR}/tmp.vmdk
-vmdk=${DST_DIR}/vyos_vmware_image.vmdk
-ovf=${DST_DIR}/vyos_vmware_image.ovf
-qemu-img convert -f qcow2 ${source_image} -O vmdk -o adapter_type=lsilogic ${tmp_vmdk}
-vmdk-convert ${tmp_vmdk} ${vmdk}
+# get vyos build version
+version=$(cat version)
+dateymd=$(date +%Y%m%d)
+
+######################################
+### Prepare the HDD (format, ext.) ###
+######################################
+PARTED=/sbin/parted
+OUTPUT=disk.raw
+OUTPUTVMDK=VyOS-"$dateymd".vmdk
+IMAGE_SIZE=2
+qemu-img create -f raw ${OUTPUT} ${IMAGE_SIZE}G
+
+${PARTED} -s ${OUTPUT} mktable msdos
+${PARTED} -s -a optimal ${OUTPUT} mkpart primary ext4 1Mi 100%
+${PARTED} -s ${OUTPUT} set 1 boot on
+RESULT_KPARTX=`kpartx -asv ${OUTPUT} 2>&1`
+
+if echo "${RESULT_KPARTX}" | grep "^add map" ; then
+ LOOP_DEVICE=$(echo ${RESULT_KPARTX} | cut -d" " -f3)
+ LOOPRAW_DEVICE=${LOOP_DEVICE%p*}
+ echo "kpartx mounted using: ${LOOP_DEVICE} via ${LOOPRAW_DEVICE}"
+else
+ echo "It seems kpartx didn't mount the image correctly: exiting."
+ exit 1
+fi
+
+cleanup(){
+ error=$?
+ [ ! -d "${MOUNT_DIR}" ] && return
+ if [ "$error" -gt 0 ]; then
+ echo
+ echo "Error $error"
+ else
+ echo "Finished."
+ fi
+
+ set +e
+
+ sync
+ umount -l ${MOUNT_DIR}
+ rmdir ${MOUNT_DIR}
+
+ umount devpts-live
+ umount proc-live
+ umount sysfs-live
+
+ dmsetup remove --deferred ${LOOP_DEVICE}
+ losetup -d /dev/${LOOPRAW_DEVICE}
+ exit $error
+}
+trap "cleanup" EXIT TERM INT
+
+mkfs.ext4 /dev/mapper/${LOOP_DEVICE} -L persistence
+UUID=$(blkid -o value -s UUID /dev/mapper/${LOOP_DEVICE})
+
+# No fsck because of X days without checks
+tune2fs -i 0 /dev/mapper/${LOOP_DEVICE}
+
+MOUNT_DIR=`mktemp -d -t build-debimg.XXXXXX`
+mount /dev/mapper/${LOOP_DEVICE} ${MOUNT_DIR}
+
+########################
+### Setting-up files ###
+########################
+mkdir -p ${MOUNT_DIR}/boot/grub
+mkdir -p ${MOUNT_DIR}/boot/"$version"/rw
+
+echo "/ union" > ${MOUNT_DIR}/persistence.conf
+cp binary/live/filesystem.squashfs ${MOUNT_DIR}/boot/"$version"/"$version.squashfs"
+cp binary/live/initrd.img ${MOUNT_DIR}/boot/"$version"/initrd.img
+cp binary/live/vmlinuz ${MOUNT_DIR}/boot/"$version"/vmlinuz
+
+########################
+### Create grub menu ###
+########################
+cat > ${MOUNT_DIR}/boot/grub/grub.cfg << EOF
+set timeout=5
+set default=0
+
+menuentry "VyOS (KVM console)" {
+ linux /boot/"$version"/vmlinuz boot=live quiet vyos-union=/boot/"$version" console=ttyS0,9600 console=tty0 systemd.show_status=true
+ initrd /boot/"$version"/initrd.img
+}
+
+menuentry "Lost password change (KVM console)" {
+ linux /boot/"$version"/vmlinuz boot=live vyos-union=/boot/"$version" console=ttyS0,9600 console=tty0 systemd.show_status=true init=/opt/vyatta/sbin/standalone_root_pw_reset
+ initrd /boot/"$version"/initrd.img
+}
+
+menuentry "VyOS $version (Serial console)" {
+ linux /boot/"$version"/vmlinuz boot=live vyos-union=/boot/"$version" console=tty0 console=ttyS0,9600n8d consoleblank=0 systemd.show_status=true
+ initrd /boot/"$version"/initrd.img
+}
+
+menuentry "Lost password change $version (Serial console)" {
+ linux /boot/"$version"/vmlinuz boot=live vyos-union=/boot/"$version" console=tty0 console=ttyS0,9600n8d consoleblank=0 systemd.show_status=true init=/opt/vyatta/sbin/standalone_root_pw_reset
+ initrd /boot/"$version"/initrd.img
+}
+EOF
+
+
+#############################
+### Setting-up bootloader ###
+#############################
+grub-install --boot-directory ${MOUNT_DIR}/boot --force --no-floppy --skip-fs-probe /dev/${LOOPRAW_DEVICE}
+
+###################
+### HOOK SCRIPT ###
+###################
+fstrim ${MOUNT_DIR}
+sync
+
+qemu-img convert -f raw ${OUTPUT} -O vmdk -o adapter_type=lsilogic ${OUTPUTVMDK}
+rm ${OUTPUT}
+
+vmdk=vyos_vmware_image.vmdk
+ovf=vyos_vmware_image.ovf
+vmdk-convert ${OUTPUTVMDK} ${vmdk}
# Generate OVF
echo 'Generating OVF file...'
vmdk_file_size=$(du --bytes ${vmdk} | cut -f1)
vmdk_populated_size=$(vmdk-convert -i ${vmdk} | jq .used)
-version=$(cat build/version)
-sed scripts/template.ovf \
+sed ../scripts/template.ovf \
-e "s/{{vmdk_file_size}}/${vmdk_file_size}/" \
-e "s/{{vmdk_populated_size}}/${vmdk_populated_size}/" \
-e "s/{{version}}/${version}/" \
> ${ovf}
# Generate manifest file
-cd ${DST_DIR}
openssl sha1 *.vmdk *.ovf > vyos_vmware_image.mf
# Convert the OVF to signed OVA...
@@ -68,7 +202,9 @@ if [ ! -f ${private_key} ]; then
exit 1
fi
ovftool --privateKey=${PRIVATE_KEY_PATH} vyos_vmware_image.ovf vyos_vmware_image-signed.ova
+#ovftool vyos_vmware_image.ovf vyos_vmware_image-signed.ova
# Convert the OVF to signed OVF...
echo 'Converting the OVF to signed OVF...'
ovftool --privateKey=${PRIVATE_KEY_PATH} vyos_vmware_image.ovf vyos_vmware_image-signed.ovf
+#ovftool vyos_vmware_image.ovf vyos_vmware_image-signed.ovf