diff --git a/debian/changelog b/debian/changelog index 5ed35523..38d25715 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +livecd-rootfs (2.525.34) UNRELEASED; urgency=medium + + * Add support for HyperV Gallery Images (LP: #1837088) + + -- David Krauser Wed, 05 Nov 2019 15:19:29 -0400 + livecd-rootfs (2.525.33) bionic; urgency=medium * Add support for the 'kassel' subflavor of UC18 images. (LP: #1850674) diff --git a/live-build/auto/build b/live-build/auto/build index ae6d2806..014012db 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 d536022a..6a31ffae 100755 --- a/live-build/auto/config +++ b/live-build/auto/config @@ -120,7 +120,7 @@ add_binary_hook () 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 @@ -282,6 +282,13 @@ if [ "$PREINSTALLED" = "true" ]; then ;; ubuntu-core|ubuntu-base|base|ubuntu-touch|ubuntu-touch-custom|ubuntu-cpc|ubuntu-desktop-next) ;; + 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 @@ -1069,9 +1076,21 @@ EOF fi ;; - ubuntu-touch:*|ubuntu-touch-custom:*|ubuntu-core:system-image|ubuntu-desktop-next:system-image|ubuntu-cpc:*|ubuntu-server:live) - cp -af /usr/share/livecd-rootfs/live-build/${PROJECT}/* \ - config/ + ubuntu-touch:*|ubuntu-touch-custom:*|ubuntu-core:system-image|ubuntu-desktop-next:system-image|ubuntu-cpc:*|ubuntu-server:live|ubuntu:desktop-preinstalled) + # Ensure that most things e.g. includes.chroot are copied as is + for entry in /usr/share/livecd-rootfs/live-build/${PROJECT}/*; do + case $entry in + *hooks*) + # But hooks are shared across the projects with symlinks + # dereference them + cp -afL $entry config/ + ;; + *) + # Most places want to preserve symlinks as is + cp -af $entry config/ + ;; + esac + done if [ "$PROJECT" = "ubuntu-cpc" ]; then case ${IMAGE_TARGETS:-} in diff --git a/live-build/functions b/live-build/functions index a3e5b2fd..371d0bc0 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 dc632d1d..1c91963d 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