portable: Add ExtensionImages drop-in for any extension (#40911)
The diff seems big, but it's just removing and if and deleting the
indentation. With `git show -w` you can see clearly that is just one
line. In the files tab, in github, you can click "hide whitespaces" and
it is clear too.
I don't know if there is some better way, but when using a portable
service with an extension image that just overlays files I need to
manually add the `ExtensionImages=`. And that is added automatically for
other extension images that provide a service unit.
So, this patch just makes sure we add the `ExtensionImages=` for any
extension.
Any thoughts?
Below the commit msg for more details:
---
Before this patch, when running:
portablectl attach --extension ext.raw ./base.raw
No drop-in is added for the "ExtensionImages" if there aren't units from
the extension loaded.
But the extension can just overlay files, as in my case. So before this
patch, I also need to manually add a drop-in with "ExtensionImages=" for
it to really be loaded.
Let's just always add the drop-in for extensions. This way, it works for
extensions that just overlay files too.
Please note this commit just removes the if (simpler to view the diff
with git show -w). Also, the if checked for m->image_path being not
NULL, but removing it shouldn't cause a NULL pointer dereference.
Because
m->image_path is not used inside the if (it was needed just for the if
itself) and image_path is asserted at the beginning of the function to
be non-NULL too.
This was like this since the beginning of time in 907952bbc9
("portabled: add --extension parameter for layered images support")
This commit is contained in:
@@ -212,6 +212,19 @@ portablectl inspect --force --cat --extension /tmp/app0.raw --extension /tmp/con
|
||||
|
||||
portablectl detach --now --runtime --extension /tmp/app0.raw --extension /tmp/conf0.raw /usr/share/minimal_0.raw app0
|
||||
|
||||
# Ensure that ExtensionImages= is added to the drop-in even when the extension has no unit files
|
||||
# (all units come from the base image).
|
||||
portablectl "${ARGS[@]}" attach --force --now --runtime --extension /tmp/app-data-only.raw /usr/share/minimal_0.raw minimal-app0
|
||||
|
||||
systemctl is-active minimal-app0.service
|
||||
status="$(portablectl is-attached --extension app-data-only minimal_0)"
|
||||
[[ "${status}" == "running-runtime" ]]
|
||||
|
||||
grep -q -F "ExtensionImages=/tmp/app-data-only.raw" /run/systemd/system.attached/minimal-app0.service.d/20-portable.conf
|
||||
grep -q -F "LogExtraFields=PORTABLE_EXTENSION=app-data-only.raw" /run/systemd/system.attached/minimal-app0.service.d/20-portable.conf
|
||||
|
||||
portablectl detach --now --runtime --extension /tmp/app-data-only.raw /usr/share/minimal_0.raw minimal-app0
|
||||
|
||||
# Ensure that mixed mode copies the images and units (client-owned) but symlinks the profile (OS owned)
|
||||
portablectl "${ARGS[@]}" attach --copy=mixed --runtime --extension /tmp/app0.raw /usr/share/minimal_0.raw app0
|
||||
test -f /run/portables/app0.raw
|
||||
|
||||
@@ -401,6 +401,18 @@ EOF
|
||||
echo MARKER=1 >"$initdir/usr/lib/systemd/system/other_file"
|
||||
mksquashfs "$initdir" /tmp/app1.raw -noappend
|
||||
|
||||
# Create a data-only extension image (no unit files) to test that
|
||||
# ExtensionImages= is added to the drop-in even when the extension
|
||||
# does not carry any units.
|
||||
initdir="/var/tmp/app-data-only"
|
||||
mkdir -p "$initdir/usr/lib/extension-release.d" "$initdir/opt"
|
||||
(
|
||||
echo "ID=_any"
|
||||
echo "ARCHITECTURE=_any"
|
||||
) >"$initdir/usr/lib/extension-release.d/extension-release.app-data-only"
|
||||
echo "MARKER_DATA_ONLY=1" >"$initdir/opt/data-file"
|
||||
mksquashfs "$initdir" /tmp/app-data-only.raw -noappend
|
||||
|
||||
initdir="/var/tmp/app-nodistro"
|
||||
mkdir -p "$initdir/usr/lib/extension-release.d" "$initdir/usr/lib/systemd/system"
|
||||
(
|
||||
|
||||
Reference in New Issue
Block a user