From 0e3b1e206b8ac24e22b49b40a0de1e16e3d412dd Mon Sep 17 00:00:00 2001 From: David Krauser Date: Thu, 25 Apr 2019 12:15:41 -0400 Subject: [PATCH] Add support for HyperV Gallery images --- debian/changelog | 6 + live-build/auto/build | 4 +- live-build/auto/config | 13 +- live-build/functions | 4 +- .../hooks.d/base/disk-image-uefi.binary | 13 +- .../ubuntu/hooks/033-disk-image-uefi.binary | 1 + .../hooks/040-hyperv-desktop-images.binary | 128 ++++++++++++++++++ live-build/ubuntu/includes.chroot/etc/hosts | 9 ++ 8 files changed, 169 insertions(+), 9 deletions(-) create mode 120000 live-build/ubuntu/hooks/033-disk-image-uefi.binary create mode 100644 live-build/ubuntu/hooks/040-hyperv-desktop-images.binary create mode 100644 live-build/ubuntu/includes.chroot/etc/hosts diff --git a/debian/changelog b/debian/changelog index afed03ff..14f8d5ac 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +livecd-rootfs (2.595) UNRELEASED; urgency=medium + + * Add support for HyperV Gallery images + + -- David Krauser Fri, 31 May 2019 12:51:09 -0400 + livecd-rootfs (2.594) UNRELEASED; urgency=medium * Add support for linux-kvm images diff --git a/live-build/auto/build b/live-build/auto/build index e27491cf..6c4d684d 100755 --- a/live-build/auto/build +++ b/live-build/auto/build @@ -108,8 +108,8 @@ Expire-Date: 0 lb bootstrap "$@" - case $PROJECT in - ubuntu-server|ubuntu-cpc) + case $PROJECT:${SUBPROJECT:-} in + ubuntu-server:*|ubuntu-cpc:*|ubuntu:desktop-preinstalled) # Set locale to C.UTF-8 by default. We should # probably do this for all images early in the # 18.10 cycle but for now just do it for diff --git a/live-build/auto/config b/live-build/auto/config index de935248..dcd92114 100755 --- a/live-build/auto/config +++ b/live-build/auto/config @@ -278,7 +278,7 @@ _get_live_passes () if [ -z "${IMAGEFORMAT:-}" ]; then case $PROJECT:${SUBPROJECT:-} in - ubuntu-cpc:*) + ubuntu-cpc:*|ubuntu:desktop-preinstalled) if [ "$SUBARCH" = "raspi3" ]; then # For now only raspi3, but others are soon to follow IMAGEFORMAT=ubuntu-image @@ -445,6 +445,13 @@ if [ "$PREINSTALLED" = "true" ]; then ;; ubuntu-core|ubuntu-base|base|ubuntu-cpc) ;; + ubuntu) + add_package live oem-config-gtk ubiquity-frontend-gtk + add_package live ubiquity-slideshow-ubuntu + if [ "$SUBPROJECT" = "desktop-preinstalled" ]; then + add_package live language-pack-en-base + fi + ;; *) add_package live oem-config-gtk ubiquity-frontend-gtk add_package live ubiquity-slideshow-ubuntu @@ -1092,8 +1099,8 @@ EOF fi ;; - ubuntu-core:system-image|ubuntu-cpc:*|ubuntu-server:live) - cp -af /usr/share/livecd-rootfs/live-build/${PROJECT}/* \ + ubuntu-core:system-image|ubuntu-cpc:*|ubuntu-server:live|ubuntu:desktop-preinstalled) + cp -afL /usr/share/livecd-rootfs/live-build/${PROJECT}/* \ config/ if [ "$PROJECT" = "ubuntu-cpc" ]; then diff --git a/live-build/functions b/live-build/functions index ade899f0..8eff0a90 100644 --- a/live-build/functions +++ b/live-build/functions @@ -1,7 +1,7 @@ # vi: ts=4 expandtab syntax=sh -#imagesize=${IMAGE_SIZE:-$((2252*1024**2))} # 2.2G (the current size we ship) -imagesize=${IMAGE_SIZE:-2361393152} # 2.2G (the current size we ship) +# default imagesize = 2252*1024**2 = 2.2G (the current size we ship) +imagesize=${IMAGE_SIZE:-2361393152} fs_label="${FS_LABEL:-rootfs}" rootfs_dev_mapper= diff --git a/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary b/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary index d51bb7a2..98c08f81 100755 --- a/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary +++ b/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary @@ -9,8 +9,17 @@ case $ARCH in ;; esac -IMAGE_STR="# CLOUD_IMG: This file was created/modified by the Cloud Image build process" -FS_LABEL="cloudimg-rootfs" +case ${PROJECT:-} in + ubuntu) + IMAGE_STR="# DESKTOP_IMG: This file was created/modified by the Desktop Image build process" + FS_LABEL="desktop-rootfs" + IMAGE_SIZE=12884901888 # 12G + ;; + *) + IMAGE_STR="# CLOUD_IMG: This file was created/modified by the Cloud Image build process" + FS_LABEL="cloudimg-rootfs" + ;; +esac . config/binary diff --git a/live-build/ubuntu/hooks/033-disk-image-uefi.binary b/live-build/ubuntu/hooks/033-disk-image-uefi.binary new file mode 120000 index 00000000..3732ed8b --- /dev/null +++ b/live-build/ubuntu/hooks/033-disk-image-uefi.binary @@ -0,0 +1 @@ +../../ubuntu-cpc/hooks.d/base/disk-image-uefi.binary \ No newline at end of file diff --git a/live-build/ubuntu/hooks/040-hyperv-desktop-images.binary b/live-build/ubuntu/hooks/040-hyperv-desktop-images.binary new file mode 100644 index 00000000..72ab45ed --- /dev/null +++ b/live-build/ubuntu/hooks/040-hyperv-desktop-images.binary @@ -0,0 +1,128 @@ +#!/bin/bash -eux + +echo "Creating Hyper-V image with Desktop..." + +case ${SUBPROJECT:-} in + minimized) + echo "We don't create minimized images for $0." + exit 0 + ;; + *) + ;; +esac + +case "${ARCH}" in + amd64) + ;; + *) + echo "Hyper-V only supports amd64"; + exit 0 + ;; +esac + +IMAGE_STR="# DESKTOP_IMG: This file was created/modified by the Desktop Image build process" +FS_LABEL="desktop-rootfs" + +. config/functions + +export DEBIAN_FRONTEND=noninteractive + +create_derivative uefi hyperv +scratch_d=$(mktemp -d) +mount_disk_image "${derivative_img}" "${scratch_d}" + +cleanup_hyperv() { + umount_disk_image ${scratch_d} + rm -rf ${scratch_d} +} +trap cleanup_hyperv EXIT + +# Perform customisations + +chroot "${scratch_d}" apt-get update -y +chroot "${scratch_d}" apt-get -y install xrdp linux-tools-virtual linux-cloud-tools-virtual + +cat > ${scratch_d}/etc/modules-load.d/hyperv.conf << EOF +${IMAGE_STR} +hv_sock +EOF + +cat << EOF >> "${scratch_d}/etc/fstab" +LABEL=$FS_LABEL / ext4 defaults 0 0 +EOF + +# Customise xrdp + +CHANGED_FILE_SUFFIX=.replaced-by-desktop-img-build + +# use vsock transport. +sed -i${CHANGED_FILE_SUFFIX} -e 's/use_vsock=false/use_vsock=true/g' "${scratch_d}/etc/xrdp/xrdp.ini" +# use rdp security. +sed -i${CHANGED_FILE_SUFFIX} -e 's/security_layer=negotiate/security_layer=rdp/g' "${scratch_d}/etc/xrdp/xrdp.ini" +# remove encryption validation. +sed -i${CHANGED_FILE_SUFFIX} -e 's/crypt_level=high/crypt_level=none/g' "${scratch_d}/etc/xrdp/xrdp.ini" +# disable bitmap compression since its local its much faster +sed -i${CHANGED_FILE_SUFFIX} -e 's/bitmap_compression=true/bitmap_compression=false/g' "${scratch_d}/etc/xrdp/xrdp.ini" + +# Add script to setup the ubuntu session properly +cat > "${scratch_d}/etc/xrdp/startubuntu.sh" << EOF +#!/bin/sh +${IMAGE_STR} +export GNOME_SHELL_SESSION_MODE=ubuntu +export XDG_CURRENT_DESKTOP=ubuntu:GNOME +exec /etc/xrdp/startwm.sh +EOF +chmod a+x "${scratch_d}/etc/xrdp/startubuntu.sh" + +# use the script to setup the ubuntu session +sed -i${CHANGED_FILE_SUFFIX} -e 's/startwm/startubuntu/g' "${scratch_d}/etc/xrdp/sesman.ini" + +# rename the redirected drives to 'shared-drives' +sed -i${CHANGED_FILE_SUFFIX} -e 's/FuseMountName=thinclient_drives/FuseMountName=shared-drives/g' "${scratch_d}/etc/xrdp/sesman.ini" + +# Changed the allowed_users +sed -i${CHANGED_FILE_SUFFIX} -e 's/allowed_users=console/allowed_users=anybody/g' "${scratch_d}/etc/X11/Xwrapper.config" + +# Blacklist the vmw module +cat > "${scratch_d}/etc/modprobe.d/blacklist_vmw_vsock_vmci_transport.conf" << EOF +${IMAGE_STR} +blacklist vmw_vsock_vmci_transport +EOF + +# Configure the policy xrdp session +cat > ${scratch_d}/etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla << EOF +${IMAGE_STR} +[Allow Colord all Users] +Identity=unix-user:* +Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile +ResultAny=no +ResultInactive=no +ResultActive=yes +EOF + +sed -i${CHANGED_FILE_SUFFIX} -e 's|After=|ConditionPathExists=!/var/lib/oem-config/run\nAfter=|g' "${scratch_d}/lib/systemd/system/xrdp.service" + +# End xrdp customisation + +# Don't run gnome-initial-setup from gdm +sed -i${CHANGED_FILE_SUFFIX} "s|#WaylandEnable=false|#WaylandEnable=false\nInitialSetupEnable=false|" "${scratch_d}/etc/gdm3/custom.conf" +chroot "${scratch_d}" /usr/sbin/useradd -d /home/oem -m -N -u 29999 oem +chroot "${scratch_d}" /usr/sbin/oem-config-prepare --quiet +touch "${scratch_d}/var/lib/oem-config/run" + +chroot "${scratch_d}" apt-get clean + +# End customisations + +cleanup_hyperv +trap - EXIT + +raw_img=binary/boot/disk-hyperv-uefi.ext4 +vhd_img=livecd.ubuntu-desktop-hyperv.vhdx + +qemu-img convert -O vhdx "$raw_img" "$vhd_img" +rm "$raw_img" + +apt-get install -y zip +zip "$vhd_img.zip" "$vhd_img" +rm "$vhd_img" diff --git a/live-build/ubuntu/includes.chroot/etc/hosts b/live-build/ubuntu/includes.chroot/etc/hosts new file mode 100644 index 00000000..81684340 --- /dev/null +++ b/live-build/ubuntu/includes.chroot/etc/hosts @@ -0,0 +1,9 @@ +127.0.0.1 localhost.localdomain localhost +::1 localhost6.localdomain6 localhost6 + +# The following lines are desirable for IPv6 capable hosts +::1 localhost ip6-localhost ip6-loopback +fe00::0 ip6-localnet +ff02::1 ip6-allnodes +ff02::2 ip6-allrouters +ff02::3 ip6-allhosts