mirror of
https://git.launchpad.net/livecd-rootfs
synced 2025-03-12 03:41:12 +00:00
Imported 2.729
No reason for CPC update specified.
This commit is contained in:
parent
b8ef966d04
commit
3d9eb759b3
15
debian/changelog
vendored
15
debian/changelog
vendored
@ -1,3 +1,18 @@
|
||||
livecd-rootfs (2.729) impish; urgency=medium
|
||||
|
||||
[ Michael Hudson-Doyle ]
|
||||
* Fix a few things found while porting the live server ISO builds to
|
||||
layers.
|
||||
* Port live server ISO builds to layers.
|
||||
|
||||
[ Chloé 'kajiya' Smith ]
|
||||
* Image hangs during boot after deploying groovy-server-cloudimg-amd64.ova,
|
||||
and the upgrading the ESXi hardware version. Adding a serial port
|
||||
rectifies this - so this code change simply adds a serial port to the OVF
|
||||
template (so there is a serial port as default). (LP: #1895104)
|
||||
|
||||
-- Michael Hudson-Doyle <michael.hudson@ubuntu.com> Mon, 12 Jul 2021 10:27:35 +1200
|
||||
|
||||
livecd-rootfs (2.728) impish; urgency=medium
|
||||
|
||||
[ Dan Bungert ]
|
||||
|
@ -764,12 +764,47 @@ case $PROJECT in
|
||||
;;
|
||||
|
||||
ubuntu-server)
|
||||
add_task install minimal
|
||||
case ${SUBPROJECT:-} in
|
||||
live)
|
||||
add_task install standard
|
||||
add_task install server
|
||||
add_package install cloud-init
|
||||
PASSES_TO_LAYERS=true
|
||||
add_task ubuntu-server minimal standard server
|
||||
# add_task really should do this itself but for now...
|
||||
snap_from_seed server config/package-lists/livecd-rootfs.snaplist.chroot_ubuntu-server.full
|
||||
add_package ubuntu-server cloud-init
|
||||
|
||||
add_package ubuntu-server.installer linux-firmware lupin-casper openssh-server
|
||||
add_snap ubuntu-server.installer subiquity/classic
|
||||
if [ $ARCH = s390x ]; then
|
||||
add_package ubuntu-server.installer s390-tools-zkey
|
||||
fi
|
||||
|
||||
# Live server ISOs for LTS point releases past .2 offer both
|
||||
# the GA and HWE kernels (in separate layers) so this code is
|
||||
# written generically to support both even though a lot of the
|
||||
# time only one kernel is offered.
|
||||
|
||||
# variants='ga hwe'
|
||||
variants='ga'
|
||||
|
||||
for variant in $variants; do
|
||||
if [ "$variant" = "ga" ]; then
|
||||
kernel_metapkg=linux-generic
|
||||
flavor=generic
|
||||
elif [ "$variant" = "hwe" ]; then
|
||||
kernel_metapkg=linux-generic-hwe-$(lsb_release -sr)
|
||||
flavor=generic-hwe
|
||||
else
|
||||
echo "bogus variant: $variant"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
add_package ubuntu-server.installer.$flavor $kernel_metapkg
|
||||
LIVE_PASSES="${LIVE_PASSES:+$LIVE_PASSES }ubuntu-server.installer.$flavor"
|
||||
done
|
||||
;;
|
||||
*)
|
||||
echo "unrecognized subproject for server: '$SUBPROJECT'"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
COMPONENTS='main'
|
||||
@ -1012,8 +1047,8 @@ PASSES=$(_sanitize_passes "$PASSES")
|
||||
LIVE_PASSES=${LIVE_PASSES:-$(_get_live_passes "$PASSES")}
|
||||
|
||||
if [ -n "$PASSES" ] && [ -z "$LIVE_PASSES" ]; then
|
||||
Echo_warning "Multi-layered mode is enabled, but we didn't find any live pass." \
|
||||
"Either set \$LIVE_PASSES or add a pass ending with '.live'."
|
||||
echo "W: Multi-layered mode is enabled, but we didn't find any live pass." \
|
||||
"Either set \$LIVE_PASSES or add a pass ending with '.live'."
|
||||
fi
|
||||
|
||||
echo "LB_CHROOT_HOOKS=\"$CHROOT_HOOKS\"" >> config/chroot
|
||||
@ -1023,6 +1058,9 @@ echo "IMAGEFORMAT=\"$IMAGEFORMAT\"" >> config/chroot
|
||||
if [ -n "$PASSES" ]; then
|
||||
echo "PASSES=\"$PASSES\"" >> config/common
|
||||
fi
|
||||
if [ -n "$NO_SQUASHFS_PASSES" ]; then
|
||||
echo "NO_SQUASHFS_PASSES=\"$NO_SQUASHFS_PASSES\"" >> config/common
|
||||
fi
|
||||
if [ -n "$LIVE_PASSES" ]; then
|
||||
echo "LIVE_PASSES=\"$LIVE_PASSES\"" >> config/common
|
||||
fi
|
||||
|
@ -66,7 +66,7 @@ build_layered_squashfs () {
|
||||
return
|
||||
fi
|
||||
|
||||
rm -f .build/binary_chroot
|
||||
rm -f .build/binary_chroot .build/binary_hooks
|
||||
|
||||
mkdir -p "$overlay_dir/"
|
||||
lowerdirs=$(get_lowerdirs_for_pass $pass)
|
||||
@ -92,39 +92,54 @@ build_layered_squashfs () {
|
||||
rm -f chroot/boot/initrd.img-* chroot/boot/vmlinu{x,z}-*
|
||||
fi
|
||||
|
||||
# Full manifest until that PASS
|
||||
squashfs_f_manifest="${base}.manifest"
|
||||
create_manifest "chroot" "${squashfs_f_manifest}.full"
|
||||
make_squashfs=yes
|
||||
ppass="${pass}"
|
||||
while :; do
|
||||
for nsp in ${NO_SQUASHFS_PASSES}; do
|
||||
if [ "${ppass}" = "${nsp}" ]; then
|
||||
make_squashfs=no
|
||||
break 2
|
||||
fi
|
||||
done
|
||||
ppass="$(get_parent_pass "${ppass}")"
|
||||
if [ -z "${ppass}" ]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# Delta manifest
|
||||
diff -NU0 ${PWD}/livecd.${PROJECT}.$(get_parent_pass $pass).manifest.full ${squashfs_f_manifest}.full|grep -v ^@ > $squashfs_f_manifest
|
||||
if [ $make_squashfs = yes ]; then
|
||||
# Full manifest until that PASS
|
||||
squashfs_f_manifest="${base}.manifest"
|
||||
create_manifest "chroot" "${squashfs_f_manifest}.full"
|
||||
|
||||
squashfs_f_size="${base}.size"
|
||||
du -B 1 -s "overlay.${pass}/" | cut -f1 > "${squashfs_f_size}"
|
||||
# Delta manifest
|
||||
diff -NU0 ${PWD}/livecd.${PROJECT}.$(get_parent_pass $pass).manifest.full ${squashfs_f_manifest}.full|grep -v ^@ > $squashfs_f_manifest
|
||||
|
||||
# We take first live pass for "global" ISO properties (used by installers and checkers):
|
||||
# Prepare initrd + kernel
|
||||
# Main manifest and size files
|
||||
prefix="livecd.$PROJECT${SUBARCH:+-$SUBARCH}"
|
||||
if [ ! -e "${prefix}.manifest" ] && $(is_live_layer "$pass"); then
|
||||
totalsize=$(cat ${squashfs_f_size})
|
||||
curpass="$pass"
|
||||
while :; do
|
||||
curpass=$(get_parent_pass $curpass)
|
||||
# We climbed up the tree to the root layer, we are done
|
||||
[ -z "$curpass" ] && break
|
||||
squashfs_f_size="${base}.size"
|
||||
du -B 1 -s "overlay.${pass}/" | cut -f1 > "${squashfs_f_size}"
|
||||
|
||||
totalsize=$(expr $totalsize + $(cat "${PWD}/livecd.${PROJECT}.${curpass}.size"))
|
||||
done
|
||||
echo ${totalsize} > "${prefix}.size"
|
||||
# We take first live pass for "global" ISO properties (used by installers and checkers):
|
||||
# Prepare initrd + kernel
|
||||
# Main manifest and size files
|
||||
prefix="livecd.$PROJECT${SUBARCH:+-$SUBARCH}"
|
||||
if [ ! -e "${prefix}.manifest" ] && $(is_live_layer "$pass"); then
|
||||
totalsize=$(cat ${squashfs_f_size})
|
||||
curpass="$pass"
|
||||
while :; do
|
||||
curpass=$(get_parent_pass $curpass)
|
||||
# We climbed up the tree to the root layer, we are done
|
||||
[ -z "$curpass" ] && break
|
||||
|
||||
cp "${squashfs_f_manifest}.full" "${prefix}.manifest"
|
||||
totalsize=$(expr $totalsize + $(cat "${PWD}/livecd.${PROJECT}.${curpass}.size"))
|
||||
done
|
||||
echo ${totalsize} > "${prefix}.size"
|
||||
|
||||
cp "${squashfs_f_manifest}.full" "${prefix}.manifest"
|
||||
fi
|
||||
|
||||
create_squashfs "overlay.${pass}/" ${squashfs_f}
|
||||
fi
|
||||
|
||||
(cd "overlay.${pass}/" &&
|
||||
mksquashfs . ${squashfs_f} \
|
||||
-no-progress -xattrs -comp xz )
|
||||
|
||||
if [ -n "$lowerdirs" ]; then
|
||||
umount chroot
|
||||
rmdir chroot
|
||||
|
@ -130,8 +130,27 @@ reduce_pass_size () {
|
||||
if ! diff --brief --no-dereference "$pass_dir/$f" "$parent_pass_dir/$f" >/dev/null; then
|
||||
continue
|
||||
fi
|
||||
p=$(dirname $f)
|
||||
while [ "$p" != . ]; do
|
||||
# As explained in the overlayfs documentation
|
||||
# https://www.kernel.org/doc/html/latest/filesystems/overlayfs.html#whiteouts-and-opaque-directories
|
||||
# an xattr of trusted.overlay.opaque indicates an 'opaque' directory
|
||||
# that was deleted from the overlay. Removing files from within the
|
||||
# directory, even if identical with one in the lower layer, will result
|
||||
# in it going missing from the combined filesystem.
|
||||
#
|
||||
# It would be possible to be more clever, e.g. if the two directories
|
||||
# are still similar, we could the delete the attribute and convert any
|
||||
# still-needed deletions to whiteouts but it doesn't seem worth it in
|
||||
# the cases seen so far.
|
||||
if [ -n "$(getfattr -n trusted.overlay.opaque -h --only-values -- "$pass_dir/$p" 2>/dev/null)" ]; then
|
||||
Echo_message "reduce_pass_size: '%s' would be removed from overlay but for trusted.overlay.opaque on '%s'" "$f" "$p"
|
||||
continue 2
|
||||
fi
|
||||
p=$(dirname $p)
|
||||
done
|
||||
# Files are strictly identical between the 2 passes (only mod or access times differs). No need for unused delta.
|
||||
Echo_message "reduce_pass_size: '$f' is strictly identical between $parent and $pass. Removing."
|
||||
Echo_message "reduce_pass_size: '%s' is strictly identical between %s and %s. Removing." "$f" "$pass" "$parent"
|
||||
rm "$pass_dir/$f"
|
||||
done
|
||||
|
||||
@ -143,7 +162,7 @@ create_chroot_pass () {
|
||||
local pass=$1
|
||||
shift 1 # restore ${*}
|
||||
|
||||
Echo_message "lb_chroot_layered: treating pass $pass"
|
||||
Echo_message "lb_chroot_layered: treating pass %s" "$pass"
|
||||
|
||||
# We have already treated that pass just return.
|
||||
local overlay_dir="overlay.${pass}"
|
||||
@ -154,7 +173,7 @@ create_chroot_pass () {
|
||||
# Only get some function executed on root passes
|
||||
# Copy bootstrap on root layers
|
||||
if $(is_root_layer $pass); then
|
||||
rm -f .build/chroot_linux-image .build/chroot_preseed .build/chroot_hacks
|
||||
rm -f .build/chroot_linux-image .build/chroot_preseed
|
||||
cp -a chroot.bootstrap/ "$overlay_dir/"
|
||||
fi
|
||||
# Others have to be executed on every pass
|
||||
@ -196,7 +215,6 @@ create_chroot_pass () {
|
||||
# Only configure universe on root passes
|
||||
if $(is_root_layer $pass); then
|
||||
lb chroot_archives chroot install ${*}
|
||||
configure_universe
|
||||
fi
|
||||
|
||||
# Customizing chroot
|
||||
@ -247,13 +265,24 @@ create_chroot_pass () {
|
||||
|
||||
lb chroot_hooks ${*}
|
||||
|
||||
# Run chroot_hacks only on root layers.
|
||||
# chroot_hacks changes the mode of boot/initrd*. The side effect in
|
||||
# layered mode is to create an initrd on each layer with a significant
|
||||
# impact on image size (+30MB per layer). This is an issue even with
|
||||
# update-initramfs disabled.
|
||||
# Run chroot_hacks only on live layers. chroot_hacks is what repacks
|
||||
# the initrd in a full casperized mode. We don't want to do that for
|
||||
# each and every layer, just for the live layers (which
|
||||
# lb_binary_layered will call lb binary_linux-image on).
|
||||
if $(is_live_layer $pass); then
|
||||
rm -f .build/chroot_hacks
|
||||
lb chroot_hacks ${*}
|
||||
else
|
||||
# chroot_hacks also removes some cruft, which is appropriate for
|
||||
# any layer so we copy and paste that bit here.
|
||||
rm -f chroot/boot/initrd*bak*
|
||||
rm -f chroot/etc/apt/trusted.gpg~
|
||||
rm -f chroot/etc/group- chroot/etc/passwd-
|
||||
rm -f chroot/etc/gshadow- chroot/etc/shadow-
|
||||
rm -f chroot/var/cache/debconf/*-old
|
||||
rm -f chroot/var/lib/dpkg/*-old
|
||||
rm -f chroot/var/log/apt/term.log
|
||||
rm -f chroot/etc/adjtime
|
||||
fi
|
||||
|
||||
lb chroot_interactive ${*}
|
||||
@ -267,6 +296,7 @@ create_chroot_pass () {
|
||||
# Deconfiguring chroot
|
||||
if $(is_root_layer $pass); then
|
||||
lb chroot_archives chroot remove ${*}
|
||||
configure_universe
|
||||
fi
|
||||
lb chroot_apt remove ${*}
|
||||
lb chroot_hostname remove ${*}
|
||||
|
@ -84,24 +84,32 @@
|
||||
<rasd:ResourceSubType>VirtualSCSI</rasd:ResourceSubType>
|
||||
<rasd:ResourceType>6</rasd:ResourceType>
|
||||
</Item>
|
||||
<Item ovf:required="false">
|
||||
<rasd:AutomaticAllocation>true</rasd:AutomaticAllocation>
|
||||
<rasd:ElementName>serial0</rasd:ElementName>
|
||||
<rasd:InstanceID>4</rasd:InstanceID>
|
||||
<rasd:ResourceSubType>vmware.serialport.device</rasd:ResourceSubType>
|
||||
<rasd:ResourceType>21</rasd:ResourceType>
|
||||
<vmw:Config ovf:required="false" vmw:key="yieldOnPoll" vmw:value="false" />
|
||||
</Item>
|
||||
<Item>
|
||||
<rasd:Address>1</rasd:Address>
|
||||
<rasd:Description>IDE Controller</rasd:Description>
|
||||
<rasd:ElementName>VirtualIDEController 1</rasd:ElementName>
|
||||
<rasd:InstanceID>4</rasd:InstanceID>
|
||||
<rasd:InstanceID>5</rasd:InstanceID>
|
||||
<rasd:ResourceType>5</rasd:ResourceType>
|
||||
</Item>
|
||||
<Item>
|
||||
<rasd:Address>0</rasd:Address>
|
||||
<rasd:Description>IDE Controller</rasd:Description>
|
||||
<rasd:ElementName>VirtualIDEController 0</rasd:ElementName>
|
||||
<rasd:InstanceID>5</rasd:InstanceID>
|
||||
<rasd:InstanceID>6</rasd:InstanceID>
|
||||
<rasd:ResourceType>5</rasd:ResourceType>
|
||||
</Item>
|
||||
<Item ovf:required="false">
|
||||
<rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
|
||||
<rasd:ElementName>VirtualVideoCard</rasd:ElementName>
|
||||
<rasd:InstanceID>6</rasd:InstanceID>
|
||||
<rasd:InstanceID>7</rasd:InstanceID>
|
||||
<rasd:ResourceType>24</rasd:ResourceType>
|
||||
<vmw:Config ovf:required="false" vmw:key="enable3DSupport" vmw:value="false"/>
|
||||
<vmw:Config ovf:required="false" vmw:key="enableMPTSupport" vmw:value="false"/>
|
||||
@ -112,7 +120,7 @@
|
||||
<Item ovf:required="false">
|
||||
<rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
|
||||
<rasd:ElementName>VirtualVMCIDevice</rasd:ElementName>
|
||||
<rasd:InstanceID>7</rasd:InstanceID>
|
||||
<rasd:InstanceID>8</rasd:InstanceID>
|
||||
<rasd:ResourceSubType>vmware.vmci</rasd:ResourceSubType>
|
||||
<rasd:ResourceType>1</rasd:ResourceType>
|
||||
<vmw:Config ovf:required="false" vmw:key="allowUnrestrictedCommunication" vmw:value="false"/>
|
||||
@ -121,8 +129,8 @@
|
||||
<rasd:AddressOnParent>0</rasd:AddressOnParent>
|
||||
<rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
|
||||
<rasd:ElementName>CD-ROM 1</rasd:ElementName>
|
||||
<rasd:InstanceID>8</rasd:InstanceID>
|
||||
<rasd:Parent>4</rasd:Parent>
|
||||
<rasd:InstanceID>9</rasd:InstanceID>
|
||||
<rasd:Parent>3</rasd:Parent>
|
||||
<rasd:ResourceSubType>vmware.cdrom.remotepassthrough</rasd:ResourceSubType>
|
||||
<rasd:ResourceType>15</rasd:ResourceType>
|
||||
<vmw:Config ovf:required="false" vmw:key="backing.exclusive" vmw:value="false"/>
|
||||
@ -131,7 +139,7 @@
|
||||
<rasd:AddressOnParent>0</rasd:AddressOnParent>
|
||||
<rasd:ElementName>Hard Disk 1</rasd:ElementName>
|
||||
<rasd:HostResource>ovf:/disk/vmdisk1</rasd:HostResource>
|
||||
<rasd:InstanceID>9</rasd:InstanceID>
|
||||
<rasd:InstanceID>10</rasd:InstanceID>
|
||||
<rasd:Parent>3</rasd:Parent>
|
||||
<rasd:ResourceType>17</rasd:ResourceType>
|
||||
<vmw:Config ovf:required="false" vmw:key="backing.writeThrough" vmw:value="false"/>
|
||||
@ -141,7 +149,7 @@
|
||||
<rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
|
||||
<rasd:Description>Floppy Drive</rasd:Description>
|
||||
<rasd:ElementName>Floppy 1</rasd:ElementName>
|
||||
<rasd:InstanceID>10</rasd:InstanceID>
|
||||
<rasd:InstanceID>11</rasd:InstanceID>
|
||||
<rasd:ResourceSubType>vmware.floppy.remotedevice</rasd:ResourceSubType>
|
||||
<rasd:ResourceType>14</rasd:ResourceType>
|
||||
</Item>
|
||||
@ -151,7 +159,7 @@
|
||||
<rasd:Connection>VM Network</rasd:Connection>
|
||||
<rasd:Description>VmxNet3 ethernet adapter on "VM Network"</rasd:Description>
|
||||
<rasd:ElementName>Ethernet 1</rasd:ElementName>
|
||||
<rasd:InstanceID>11</rasd:InstanceID>
|
||||
<rasd:InstanceID>12</rasd:InstanceID>
|
||||
<rasd:ResourceSubType>VmxNet3</rasd:ResourceSubType>
|
||||
<rasd:ResourceType>10</rasd:ResourceType>
|
||||
<vmw:Config ovf:required="false" vmw:key="wakeOnLanEnabled" vmw:value="true"/>
|
||||
|
17
live-build/ubuntu-server/hooks/02-installer-bits.chroot
Executable file
17
live-build/ubuntu-server/hooks/02-installer-bits.chroot
Executable file
@ -0,0 +1,17 @@
|
||||
#!/bin/bash -ex
|
||||
# vi: ts=4 noexpandtab
|
||||
|
||||
if [ "${PASS}" != "ubuntu-server.installer" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Make sure NoCloud is last
|
||||
values=$(echo get cloud-init/datasources | debconf-communicate | sed 's/^0 //;s/NoCloud, //;s/None/NoCloud, None/')
|
||||
printf "%s\t%s\t%s\t%s\n" \
|
||||
cloud-init cloud-init/datasources multiselect "$values" | debconf-set-selections
|
||||
dpkg-reconfigure --frontend=noninteractive cloud-init
|
||||
|
||||
if [ `dpkg --print-architecture` = s390x ]; then
|
||||
# because z/VM x3270 is just ttyS0
|
||||
cp -r /usr/lib/systemd/system/serial-getty@sclp_line0.service.d /usr/lib/systemd/system/serial-getty@ttyS0.service.d
|
||||
fi
|
37
live-build/ubuntu-server/hooks/03-kernel-metapkg.chroot_early
Executable file
37
live-build/ubuntu-server/hooks/03-kernel-metapkg.chroot_early
Executable file
@ -0,0 +1,37 @@
|
||||
#!/bin/bash -ex
|
||||
# vi: ts=4 noexpandtab
|
||||
|
||||
case $PASS in
|
||||
ubuntu-server.installer.*)
|
||||
flavor=${PASS##*.}
|
||||
if [ "$flavor" = "generic" ]; then
|
||||
kernel_metapkg=linux-generic
|
||||
elif [ "$flavor" = "generic-hwe" ]; then
|
||||
kernel_metapkg=linux-generic-hwe-$(lsb_release -sr)
|
||||
else
|
||||
echo "bogus flavor: $flavor"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
cat <<EOF > /etc/initramfs-tools/scripts/init-bottom/live-server
|
||||
#!/bin/sh
|
||||
case \$1 in
|
||||
prereqs) exit 0;;
|
||||
esac
|
||||
|
||||
echo ${kernel_metapkg} > /run/kernel-meta-package
|
||||
EOF
|
||||
chmod +x /etc/initramfs-tools/scripts/init-bottom/live-server
|
||||
|
||||
cat <<EOF > /etc/initramfs-tools/conf.d/casperize.conf
|
||||
export CASPER_GENERATE_UUID=1
|
||||
EOF
|
||||
|
||||
cat <<EOF > /etc/initramfs-tools/conf.d/default-layer.conf
|
||||
LAYERFS_PATH=${PASS}.squashfs
|
||||
EOF
|
@ -1,33 +0,0 @@
|
||||
#!/bin/bash -ex
|
||||
# vi: ts=4 noexpandtab
|
||||
#
|
||||
# Generate a squashfs root and manifest
|
||||
|
||||
set -x
|
||||
echo "030-root-squashfs.binary"
|
||||
|
||||
case $IMAGE_TARGETS in
|
||||
""|*squashfs*)
|
||||
;;
|
||||
*)
|
||||
echo "Skipping squashfs build"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -n "$SUBARCH" ]; then
|
||||
echo "Skipping rootfs build for subarch flavor build"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
. config/functions
|
||||
|
||||
mkdir binary/boot/squashfs.dir
|
||||
cp -a chroot/* binary/boot/squashfs.dir
|
||||
|
||||
squashfs_f="${PWD}/livecd.${PROJECT}.squashfs"
|
||||
squashfs_f_manifest="${squashfs_f}.manifest"
|
||||
|
||||
create_manifest "binary/boot/squashfs.dir" "${squashfs_f_manifest}"
|
||||
|
||||
create_squashfs "binary/boot/squashfs.dir/" ${squashfs_f}
|
@ -1,97 +0,0 @@
|
||||
#!/bin/bash -ex
|
||||
# vi: ts=4 noexpandtab
|
||||
#
|
||||
# Generate a squashfs root and manifest
|
||||
|
||||
set -x
|
||||
|
||||
echo "032-installer-squashfs.binary"
|
||||
|
||||
case $IMAGE_TARGETS in
|
||||
""|*squashfs*)
|
||||
;;
|
||||
*)
|
||||
echo "Skipping squashfs build"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -n "$SUBARCH" ]; then
|
||||
echo "Skipping rootfs build for subarch flavor build"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
. config/binary
|
||||
. config/functions
|
||||
. config/common
|
||||
|
||||
FILESYSTEM_ROOT=binary/boot/squashfs.dir
|
||||
INSTALLER_ROOT=binary/boot/installer.squashfs.dir
|
||||
OVERLAY_ROOT=binary/overlay
|
||||
|
||||
mkdir -p "$INSTALLER_ROOT" "$OVERLAY_ROOT"
|
||||
|
||||
# Create an installer squashfs layer
|
||||
mount_overlay "$FILESYSTEM_ROOT/" "$OVERLAY_ROOT/" "$INSTALLER_ROOT/"
|
||||
|
||||
setup_mountpoint "$INSTALLER_ROOT"
|
||||
|
||||
# Override JobRunningTimeoutSec to 0s on the .device unit that
|
||||
# subiquity_config.mount depends on to avoid a 5s delay on switching
|
||||
# to a new VT when there is no device there (LP: #1750117).
|
||||
# It would be better to have this in ../includes.binary/overlay but
|
||||
# you can't have backslashes in filenames in bzr branches!
|
||||
ANSWERS_DEVICE_UNIT='dev-disk-by\x2duuid-00c629d6\x2d06ab\x2d4dfd\x2db21e\x2dc3186f34105d.device'
|
||||
mkdir -p "$INSTALLER_ROOT/etc/systemd/system/$ANSWERS_DEVICE_UNIT.d"
|
||||
cat > "$INSTALLER_ROOT/etc/systemd/system/$ANSWERS_DEVICE_UNIT.d/override.conf" <<EOF
|
||||
[Unit]
|
||||
JobRunningTimeoutSec=0s
|
||||
Wants=subiquity_config.mount
|
||||
EOF
|
||||
|
||||
# Prepare installer layer.
|
||||
|
||||
# Install:
|
||||
# 1. linux-firmware for kernel to upload into hardware.
|
||||
# 2. casper for live session magic.
|
||||
# 3. openssh-server to enable the "ssh into live session" feature
|
||||
chroot $INSTALLER_ROOT apt-get -y install linux-firmware lupin-casper openssh-server
|
||||
|
||||
# Make sure NoCloud is last
|
||||
values=$(echo get cloud-init/datasources | chroot $INSTALLER_ROOT debconf-communicate | sed 's/^0 //;s/NoCloud, //;s/None/NoCloud, None/')
|
||||
printf "%s\t%s\t%s\t%s\n" \
|
||||
cloud-init cloud-init/datasources multiselect "$values" |
|
||||
chroot $INSTALLER_ROOT debconf-set-selections
|
||||
chroot $INSTALLER_ROOT dpkg-reconfigure --frontend=noninteractive cloud-init
|
||||
|
||||
if [ `dpkg --print-architecture` = s390x ]; then
|
||||
chroot $INSTALLER_ROOT apt-get -y install s390-tools-zkey
|
||||
# because z/VM x3270 is just ttyS0
|
||||
cp -r $INSTALLER_ROOT/usr/lib/systemd/system/serial-getty@sclp_line0.service.d $INSTALLER_ROOT/usr/lib/systemd/system/serial-getty@ttyS0.service.d
|
||||
fi
|
||||
chroot $INSTALLER_ROOT apt-get clean
|
||||
|
||||
# For bug #1743643 "Install to dirty disk with swap fails" remove the
|
||||
# "helpful" casper script that mounts any swap partitions it finds.
|
||||
rm -f $INSTALLER_ROOT/usr/share/initramfs-tools/scripts/casper-bottom/*swap
|
||||
|
||||
# Preseed subiquity into installer layer
|
||||
snap_prepare $INSTALLER_ROOT
|
||||
snap_preseed $INSTALLER_ROOT subiquity/classic
|
||||
# Drop lxd from the installer layer preseed
|
||||
sed -i -e'N;/name: lxd/,+2d' $INSTALLER_ROOT/var/lib/snapd/seed/seed.yaml
|
||||
|
||||
teardown_mountpoint "$INSTALLER_ROOT"
|
||||
|
||||
# Drop any snaps that got copied up from base layer, due to
|
||||
# snap-preseed tool doing --reset & speedup
|
||||
for snap in $(cd $OVERLAY_ROOT/; find var/lib/snapd/ -name '*.snap'); do
|
||||
if [ -f $FILESYSTEM_ROOT/$snap ]; then
|
||||
echo "removing $snap from overlay as already present in base layer"
|
||||
rm $OVERLAY_ROOT/$snap
|
||||
fi
|
||||
done
|
||||
|
||||
squashfs_f="${PWD}/livecd.${PROJECT}.installer.squashfs"
|
||||
|
||||
create_squashfs "$OVERLAY_ROOT/" ${squashfs_f}
|
@ -1,94 +0,0 @@
|
||||
#!/bin/bash -eux
|
||||
# vi: ts=4 noexpandtab
|
||||
#
|
||||
# Generate a squashfs root and manifest
|
||||
|
||||
echo "033-kernel-bits.binary"
|
||||
|
||||
case ${IMAGE_TARGETS-} in
|
||||
""|*squashfs*)
|
||||
;;
|
||||
*)
|
||||
echo "Skipping squashfs build"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -n "${SUBARCH-}" ]; then
|
||||
echo "Skipping rootfs build for subarch flavor build"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
. config/functions
|
||||
. config/common
|
||||
|
||||
INSTALLER_ROOT=binary/boot/installer.squashfs.dir
|
||||
|
||||
KERNEL_BITS_ROOT=binary/boot/kernel-bits.dir
|
||||
KERNEL_BITS_OVERLAY=binary/boot/overlay-kernel-bits
|
||||
|
||||
#variants='ga hwe'
|
||||
variants='ga'
|
||||
|
||||
for variant in $variants; do
|
||||
if [ "$variant" = "ga" ]; then
|
||||
kernel_metapkg=linux-generic
|
||||
flavor=generic
|
||||
elif [ "$variant" = "hwe" ]; then
|
||||
kernel_metapkg=linux-generic-hwe-$(lsb_release -sr)
|
||||
flavor=generic-hwe
|
||||
else
|
||||
echo "bogus variant: $variant"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Make preparations
|
||||
mkdir -p $KERNEL_BITS_ROOT $KERNEL_BITS_OVERLAY
|
||||
mount_overlay "$INSTALLER_ROOT/" "$KERNEL_BITS_OVERLAY/" "$KERNEL_BITS_ROOT/"
|
||||
setup_mountpoint $KERNEL_BITS_ROOT
|
||||
|
||||
# Our initramfs hook implements a kind of extreme version of
|
||||
# cloud-initramfs-copymods, so remove that and prevent duelling hooks
|
||||
env DEBIAN_FRONTEND=noninteractive chroot $KERNEL_BITS_ROOT apt-get -y remove cloud-initramfs-copymods ubuntu-server || true
|
||||
|
||||
# Configure initramfs creation
|
||||
mkdir -p "$KERNEL_BITS_ROOT"/etc/initramfs-tools/conf.d/
|
||||
if [ -n "$LB_INITRAMFS_COMPRESSION" ]; then
|
||||
echo "COMPRESS=$LB_INITRAMFS_COMPRESSION" > "$KERNEL_BITS_ROOT"/etc/initramfs-tools/conf.d/livecd-rootfs.conf
|
||||
fi
|
||||
echo "export CASPER_GENERATE_UUID=1" > "$KERNEL_BITS_ROOT"/etc/initramfs-tools/conf.d/casper.conf
|
||||
|
||||
# Add a hook to record which kernel was booted and mount the
|
||||
# modules.squashfs created below.
|
||||
cat <<EOF > "$KERNEL_BITS_ROOT"/etc/initramfs-tools/scripts/init-bottom/live-server
|
||||
#!/bin/sh
|
||||
case \$1 in
|
||||
prereqs) exit 0;;
|
||||
esac
|
||||
|
||||
echo ${kernel_metapkg} > /run/kernel-meta-package
|
||||
mkdir -p \$rootmnt/usr/lib/modules
|
||||
mount \$rootmnt/cdrom/casper/extras/modules.squashfs-$flavor \$rootmnt/usr/lib/modules
|
||||
mkdir -p /run/systemd/system/usr-lib-modules.mount.d
|
||||
echo '[Mount]' >> /run/systemd/system/usr-lib-modules.mount.d/lazy.conf
|
||||
echo 'LazyUnmount=yes' >> /run/systemd/system/usr-lib-modules.mount.d/lazy.conf
|
||||
EOF
|
||||
chmod +x "$KERNEL_BITS_ROOT"/etc/initramfs-tools/scripts/init-bottom/live-server
|
||||
|
||||
# Install the kernel!
|
||||
env DEBIAN_FRONTEND=noninteractive chroot $KERNEL_BITS_ROOT apt-get -y install ${kernel_metapkg}
|
||||
|
||||
# Fish out generated kernel image and initrd
|
||||
mv "$KERNEL_BITS_ROOT"/boot/initrd.img-* ${PWD}/livecd.${PROJECT}.initrd-$flavor
|
||||
mv "$KERNEL_BITS_ROOT"/boot/vmlinu?-* ${PWD}/livecd.${PROJECT}.kernel-$flavor
|
||||
|
||||
# Create squashfs containing all the modules
|
||||
modules_squashfs_path="${PWD}/livecd.${PROJECT}.modules.squashfs-$flavor"
|
||||
(cd "$KERNEL_BITS_ROOT/lib/modules" &&
|
||||
mksquashfs . $modules_squashfs_path -no-progress -xattrs -comp xz)
|
||||
|
||||
# And clean up
|
||||
teardown_mountpoint $KERNEL_BITS_ROOT
|
||||
umount $KERNEL_BITS_ROOT
|
||||
rm -rf $KERNEL_BITS_ROOT $KERNEL_BITS_OVERLAY
|
||||
done
|
16
live-build/ubuntu-server/hooks/04-kernel-bits.binary
Executable file
16
live-build/ubuntu-server/hooks/04-kernel-bits.binary
Executable file
@ -0,0 +1,16 @@
|
||||
#!/bin/bash -eux
|
||||
# vi: ts=4 noexpandtab
|
||||
|
||||
case $PASS in
|
||||
ubuntu-server.installer.*)
|
||||
flavor=${PASS##*.}
|
||||
;;
|
||||
*)
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
# Fish out generated kernel image and initrd
|
||||
mv chroot/boot/initrd.img-* ${PWD}/livecd.${PROJECT}.initrd-$flavor
|
||||
mv chroot/boot/vmlinu?-* ${PWD}/livecd.${PROJECT}.kernel-$flavor
|
||||
chmod a+r ${PWD}/livecd.${PROJECT}.initrd-$flavor ${PWD}/livecd.${PROJECT}.kernel-$flavor
|
@ -0,0 +1,3 @@
|
||||
[Unit]
|
||||
JobRunningTimeoutSec=0s
|
||||
Wants=subiquity_config.mount
|
@ -1,5 +1,5 @@
|
||||
[Mount]
|
||||
What=/cdrom/casper/filesystem.squashfs
|
||||
What=/cdrom/casper/ubuntu-server.squashfs
|
||||
Where=/media/filesystem
|
||||
Type=squashfs
|
||||
Options=ro
|
Loading…
x
Reference in New Issue
Block a user