subiquity/scripts/slimy-update-snap.sh

77 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
# slimy-update-snap.sh $old_snap $new_snap
set -eux
src="$(dirname "$(dirname "$(readlink -f "${0}")")")"
old="$(readlink -f "${1}")"
new="$(readlink -f "${2}")"
tmpdir="$(mktemp -d)"
cd "${tmpdir}"
_MOUNTS=()
do_mount_existing () {
local mountpoint="${!#}"
mount "$@"
_MOUNTS=("${mountpoint}" "${_MOUNTS[@]+"${_MOUNTS[@]}"}")
}
do_mount () {
local mountpoint="${!#}"
mkdir "${mountpoint}"
do_mount_existing "$@"
}
add_overlay() {
local lower="$1"
local mountpoint="$2"
local work="$(mktemp -dp "${tmpdir}")"
if [ -n "${3-}" ]; then
local upper="${3}"
else
local upper="$(mktemp -dp "${tmpdir}")"
fi
chmod go+rx "${work}" "${upper}"
do_mount -t overlay overlay \
-o lowerdir="${lower}",upperdir="${upper}",workdir="${work}" \
"${mountpoint}"
}
cleanup () {
for m in "${_MOUNTS[@]+"${_MOUNTS[@]}"}"; do
umount "${m}"
done
rm -rf "${tmpdir}"
}
trap cleanup EXIT
do_mount $old old
add_overlay old new
rm -rf new/lib/python3.10/site-packages/curtin
if [ -d new/lib/python3.10/site-packages/subiquity ] ; then
subiquity_dest=new/lib/python3.10/site-packages
elif [ -d new/bin/subiquity/subiquity ] ; then
subiquity_dest=new/bin/subiquity
else
echo "unrecognized snap" >&2
exit 1
fi
rm -rf "${subiquity_dest}/subiquity"
rm -rf "${subiquity_dest}/subiquitycore"
(cd "${src}" && ./scripts/update-part.py curtin)
rsync -a --chown 0:0 $src/curtin/curtin new/lib/python3.10/site-packages
rsync -a --chown 0:0 $src/subiquity $src/subiquitycore $subiquity_dest
snapcraft pack new --output $new