1
0
mirror of https://github.com/systemd/systemd synced 2026-04-22 23:15:20 +02:00

Compare commits

..

No commits in common. "7347b3db838ea3f02afc6c8a6dccac1ff8e7edbd" and "ee3d33c415d426ec3459435bcb6c45390f343044" have entirely different histories.

13 changed files with 111 additions and 155 deletions

8
NEWS
View File

@ -9,14 +9,6 @@ CHANGES WITH 251:
can still be used by explicitly configuring RouteTable= setting in can still be used by explicitly configuring RouteTable= setting in
.netdev files. .netdev files.
* The org.freedesktop.portable1 methods GetMetadataWithExtensions and
GetImageMetadataWithExtensions have been fixed to provide an extra return
parameter, containing the actual extensions release metadata. The
current implementation was judged to be broken and unusable, and thus
the usual procedure of adding a new set of methods is skipped, opting
for breaking backward compatibility instead, as nobody should be
affected, given the state of the current interface.
* Services with Restart=always and a failing ExecCondition= will no longer * Services with Restart=always and a failing ExecCondition= will no longer
be restarted, to bring ExecCondition= in line with Condition*= settings. be restarted, to bring ExecCondition= in line with Condition*= settings.

View File

@ -164,12 +164,6 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnPredator*PH*315-52:*
KEYBOARD_KEY_ef=kbdillumup # Fn+F10 KEYBOARD_KEY_ef=kbdillumup # Fn+F10
KEYBOARD_KEY_f0=kbdillumdown # Fn+F9 KEYBOARD_KEY_f0=kbdillumdown # Fn+F9
# Travelmate B311-31, B311R-31, B311RN-31
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311-31*:pvr*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311R-31*:pvr*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311RN-31*:pvr*
KEYBOARD_KEY_8a=f20 # Microphone mute
# Travelmate C300 # Travelmate C300
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*C3[01]0*:* evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*C3[01]0*:*
KEYBOARD_KEY_67=f24 # FIXME: rotate screen KEYBOARD_KEY_67=f24 # FIXME: rotate screen

View File

@ -54,7 +54,6 @@ node /org/freedesktop/portable1 {
in t flags, in t flags,
out s image, out s image,
out ay os_release, out ay os_release,
out a{say} extensions,
out a{say} units); out a{say} units);
GetImageState(in s image, GetImageState(in s image,
out s state); out s state);
@ -190,12 +189,19 @@ node /org/freedesktop/portable1 {
and a list of portable units contained in the image, in the form of a string (unit name) and and a list of portable units contained in the image, in the form of a string (unit name) and
an array of bytes with the content.</para> an array of bytes with the content.</para>
<para><function>GetImageMetadataWithExtensions()</function> retrieves metadata associated with an <para><function>GetImageMetadataWithExtensions()</function> retrieves metadata associated with an image.
image. This method is a superset of <function>GetImageMetadata()</function> with the addition of a list This method is a superset of <function>GetImageMetadata()</function> with the addition of
of extensions as input parameter, which were overlaid on top of the main image via a list of extensions as input parameter, which were overlaid on top of the main
<function>AttachImageWithExtensions()</function>. The path of each extension and an array of bytes with image via <function>AttachImageWithExtensions()</function>.
the content of the respective extension-release file are returned, one such structure for each The <varname>flag</varname> parameter can be used to request that, before the units, the path of
extension named in the input arguments.</para> each extension and an array of bytes with the content of the respective extension-release file
are sent. One such structure will be sent for each extension named in the input arguments. The
flag value to enable this functionality is defined as follows:</para>
<programlisting>
#define PORTABLE_INSPECT_EXTENSION_RELEASES (UINT64_C(1) &lt;&lt; 1)
</programlisting>
<para><function>GetImageState()</function> retrieves the image state as one of the following <para><function>GetImageState()</function> retrieves the image state as one of the following
strings: strings:
@ -346,7 +352,6 @@ node /org/freedesktop/portable1 {
in t flags, in t flags,
out s image, out s image,
out ay os_release, out ay os_release,
out a{say} extensions,
out a{say} units); out a{say} units);
GetState(out s state); GetState(out s state);
GetStateWithExtensions(in as extensions, GetStateWithExtensions(in as extensions,

View File

@ -149,6 +149,7 @@ node /org/freedesktop/systemd1 {
CancelJob(in u id); CancelJob(in u id);
ClearJobs(); ClearJobs();
ResetFailed(); ResetFailed();
@org.freedesktop.systemd1.Privileged("true")
SetShowStatus(in s mode); SetShowStatus(in s mode);
ListUnits(out a(ssssssouso) units); ListUnits(out a(ssssssouso) units);
ListUnitsFiltered(in as states, ListUnitsFiltered(in as states,

View File

@ -7,7 +7,7 @@ ENV{UDEV_DISABLE_PERSISTENT_STORAGE_RULES_FLAG}=="1", GOTO="persistent_storage_t
# type 8 devices are "Medium Changers" # type 8 devices are "Medium Changers"
SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="8", IMPORT{program}="scsi_id --sg-version=3 --export --whitelisted -d $devnode", \ SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="8", IMPORT{program}="scsi_id --sg-version=3 --export --whitelisted -d $devnode", \
SYMLINK+="tape/by-id/scsi-$env{ID_SERIAL} tape/by-id/scsi-$env{ID_SERIAL}-changer" SYMLINK+="tape/by-id/scsi-$env{ID_SERIAL}"
# iSCSI devices from the same host have all the same ID_SERIAL, # iSCSI devices from the same host have all the same ID_SERIAL,
# but additionally a property named ID_SCSI_SERIAL. # but additionally a property named ID_SCSI_SERIAL.
@ -23,7 +23,7 @@ KERNEL=="st*[0-9]|nst*[0-9]", ATTRS{ieee1394_id}=="?*", ENV{ID_SERIAL}="$attr{ie
KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id" KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id"
KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="scsi", KERNELS=="[0-9]*:*[0-9]", ENV{.BSG_DEV}="$root/bsg/$id" KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="scsi", KERNELS=="[0-9]*:*[0-9]", ENV{.BSG_DEV}="$root/bsg/$id"
KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --whitelisted --export --device=$env{.BSG_DEV}", ENV{ID_BUS}="scsi" KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --whitelisted --export --device=$env{.BSG_DEV}", ENV{ID_BUS}="scsi"
KERNEL=="st*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}", OPTIONS+="link_priority=10" KERNEL=="st*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
KERNEL=="st*[0-9]", ENV{ID_SCSI_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SCSI_SERIAL}" KERNEL=="st*[0-9]", ENV{ID_SCSI_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SCSI_SERIAL}"
KERNEL=="nst*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}-nst" KERNEL=="nst*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}-nst"
KERNEL=="nst*[0-9]", ENV{ID_SCSI_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SCSI_SERIAL}-nst" KERNEL=="nst*[0-9]", ENV{ID_SCSI_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SCSI_SERIAL}-nst"

View File

@ -2710,16 +2710,6 @@ static int method_set_show_status(sd_bus_message *message, void *userdata, sd_bu
assert(m); assert(m);
assert(message); assert(message);
r = mac_selinux_access_check(message, "reload", error);
if (r < 0)
return r;
r = bus_verify_set_environment_async(m, message, error);
if (r < 0)
return r;
if (r == 0)
return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */
r = sd_bus_message_read(message, "s", &t); r = sd_bus_message_read(message, "s", &t);
if (r < 0) if (r < 0)
return r; return r;
@ -3110,7 +3100,7 @@ const sd_bus_vtable bus_manager_vtable[] = {
SD_BUS_PARAM(mode), SD_BUS_PARAM(mode),
NULL,, NULL,,
method_set_show_status, method_set_show_status,
SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_VTABLE_CAPABILITY(CAP_SYS_ADMIN)),
SD_BUS_METHOD_WITH_NAMES("ListUnits", SD_BUS_METHOD_WITH_NAMES("ListUnits",
NULL,, NULL,,
"a(ssssssouso)", "a(ssssssouso)",

View File

@ -228,7 +228,7 @@ _noreturn_ static void freeze_or_exit_or_reboot(void) {
freeze(); freeze();
} }
_noreturn_ static void crash(int sig, siginfo_t *siginfo, void *context) { _noreturn_ static void crash(int sig) {
struct sigaction sa; struct sigaction sa;
pid_t pid; pid_t pid;
@ -273,14 +273,6 @@ _noreturn_ static void crash(int sig, siginfo_t *siginfo, void *context) {
siginfo_t status; siginfo_t status;
int r; int r;
if (siginfo) {
_cleanup_free_ char *cmdline = NULL;
pid_t sender_pid = siginfo->si_pid;
(void) get_process_cmdline(sender_pid, SIZE_MAX, 0, &cmdline);
log_emergency("Caught <%s> from PID "PID_FMT" (%s)", signal_to_string(sig), sender_pid, strna(cmdline));
}
/* Order things nicely. */ /* Order things nicely. */
r = wait_for_terminate(pid, &status); r = wait_for_terminate(pid, &status);
if (r < 0) if (r < 0)
@ -338,8 +330,8 @@ _noreturn_ static void crash(int sig, siginfo_t *siginfo, void *context) {
static void install_crash_handler(void) { static void install_crash_handler(void) {
static const struct sigaction sa = { static const struct sigaction sa = {
.sa_sigaction = crash, .sa_handler = crash,
.sa_flags = SA_NODEFER | SA_SIGINFO, /* So that we can raise the signal again from the signal handler */ .sa_flags = SA_NODEFER, /* So that we can raise the signal again from the signal handler */
}; };
int r; int r;

View File

@ -21,11 +21,12 @@ typedef struct PortableMetadata {
#define PORTABLE_METADATA_IS_UNIT(m) (!IN_SET((m)->name[0], 0, '/')) #define PORTABLE_METADATA_IS_UNIT(m) (!IN_SET((m)->name[0], 0, '/'))
typedef enum PortableFlags { typedef enum PortableFlags {
PORTABLE_RUNTIME = 1 << 0, /* Public API via DBUS, do not change */ PORTABLE_RUNTIME = 1 << 0,
PORTABLE_PREFER_COPY = 1 << 1, PORTABLE_INSPECT_EXTENSION_RELEASES = 1 << 1, /* Public API via DBUS, do not change */
PORTABLE_PREFER_SYMLINK = 1 << 2, PORTABLE_PREFER_COPY = 1 << 2,
PORTABLE_REATTACH = 1 << 3, PORTABLE_PREFER_SYMLINK = 1 << 3,
_PORTABLE_MASK_PUBLIC = PORTABLE_RUNTIME, PORTABLE_REATTACH = 1 << 4,
_PORTABLE_MASK_PUBLIC = PORTABLE_RUNTIME | PORTABLE_INSPECT_EXTENSION_RELEASES,
_PORTABLE_TYPE_MAX, _PORTABLE_TYPE_MAX,
_PORTABLE_TYPE_INVALID = -EINVAL, _PORTABLE_TYPE_INVALID = -EINVAL,
} PortableFlags; } PortableFlags;

View File

@ -260,7 +260,7 @@ static int maybe_reload(sd_bus **bus) {
static int get_image_metadata(sd_bus *bus, const char *image, char **matches, sd_bus_message **reply) { static int get_image_metadata(sd_bus *bus, const char *image, char **matches, sd_bus_message **reply) {
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL; _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
uint64_t flags = 0; PortableFlags flags = PORTABLE_INSPECT_EXTENSION_RELEASES;
const char *method; const char *method;
int r; int r;
@ -362,14 +362,12 @@ static int inspect_image(int argc, char *argv[], void *userdata) {
strna(pretty_os)); strna(pretty_os));
} }
if (!strv_isempty(arg_extension_images)) {
/* If we specified any extensions, we'll first get back exactly the paths (and
* extension-release content) for each one of the arguments. */
r = sd_bus_message_enter_container(reply, 'a', "{say}"); r = sd_bus_message_enter_container(reply, 'a', "{say}");
if (r < 0) if (r < 0)
return bus_log_parse_error(r); return bus_log_parse_error(r);
/* If we specified any extensions, we'll first get back exactly the
* paths (and extension-release content) for each one of the arguments. */
for (size_t i = 0; i < strv_length(arg_extension_images); ++i) { for (size_t i = 0; i < strv_length(arg_extension_images); ++i) {
const char *name; const char *name;
@ -436,15 +434,6 @@ static int inspect_image(int argc, char *argv[], void *userdata) {
return bus_log_parse_error(r); return bus_log_parse_error(r);
} }
r = sd_bus_message_exit_container(reply);
if (r < 0)
return bus_log_parse_error(r);
}
r = sd_bus_message_enter_container(reply, 'a', "{say}");
if (r < 0)
return bus_log_parse_error(r);
for (;;) { for (;;) {
const char *name; const char *name;
@ -775,17 +764,18 @@ static int maybe_stop_disable(sd_bus *bus, char *image, char *argv[]) {
if (r < 0) if (r < 0)
return bus_log_parse_error(r); return bus_log_parse_error(r);
/* If we specified any extensions, we'll first an array of extension-release metadata. */
if (!strv_isempty(arg_extension_images)) {
r = sd_bus_message_skip(reply, "a{say}");
if (r < 0)
return bus_log_parse_error(r);
}
r = sd_bus_message_enter_container(reply, 'a', "{say}"); r = sd_bus_message_enter_container(reply, 'a', "{say}");
if (r < 0) if (r < 0)
return bus_log_parse_error(r); return bus_log_parse_error(r);
/* If we specified any extensions, we'll first get back exactly the
* paths (and extension-release content) for each one of the arguments. */
for (size_t i = 0; i < strv_length(arg_extension_images); ++i) {
r = sd_bus_message_skip(reply, "{say}");
if (r < 0)
return bus_log_parse_error(r);
}
for (;;) { for (;;) {
const char *name; const char *name;

View File

@ -441,7 +441,6 @@ const sd_bus_vtable manager_vtable[] = {
"t", flags), "t", flags),
SD_BUS_RESULT("s", image, SD_BUS_RESULT("s", image,
"ay", os_release, "ay", os_release,
"a{say}", extensions,
"a{say}", units), "a{say}", units),
method_get_image_metadata, method_get_image_metadata,
SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_VTABLE_UNPRIVILEGED),

View File

@ -108,6 +108,7 @@ int bus_image_common_get_metadata(
_cleanup_hashmap_free_ Hashmap *unit_files = NULL; _cleanup_hashmap_free_ Hashmap *unit_files = NULL;
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL; _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
_cleanup_free_ PortableMetadata **sorted = NULL; _cleanup_free_ PortableMetadata **sorted = NULL;
PortableFlags flags = 0;
int r; int r;
assert(name_or_path || image); assert(name_or_path || image);
@ -118,10 +119,8 @@ int bus_image_common_get_metadata(
m = image->userdata; m = image->userdata;
} }
bool have_exti = sd_bus_message_is_method_call(message, NULL, "GetImageMetadataWithExtensions") || if (sd_bus_message_is_method_call(message, NULL, "GetImageMetadataWithExtensions") ||
sd_bus_message_is_method_call(message, NULL, "GetMetadataWithExtensions"); sd_bus_message_is_method_call(message, NULL, "GetMetadataWithExtensions")) {
if (have_exti) {
r = sd_bus_message_read_strv(message, &extension_images); r = sd_bus_message_read_strv(message, &extension_images);
if (r < 0) if (r < 0)
return r; return r;
@ -131,7 +130,8 @@ int bus_image_common_get_metadata(
if (r < 0) if (r < 0)
return r; return r;
if (have_exti) { if (sd_bus_message_is_method_call(message, NULL, "GetImageMetadataWithExtensions") ||
sd_bus_message_is_method_call(message, NULL, "GetMetadataWithExtensions")) {
uint64_t input_flags = 0; uint64_t input_flags = 0;
r = sd_bus_message_read(message, "t", &input_flags); r = sd_bus_message_read(message, "t", &input_flags);
@ -142,6 +142,7 @@ int bus_image_common_get_metadata(
return sd_bus_reply_method_errorf(message, SD_BUS_ERROR_INVALID_ARGS, return sd_bus_reply_method_errorf(message, SD_BUS_ERROR_INVALID_ARGS,
"Invalid 'flags' parameter '%" PRIu64 "'", "Invalid 'flags' parameter '%" PRIu64 "'",
input_flags); input_flags);
flags |= input_flags;
} }
r = bus_image_acquire(m, r = bus_image_acquire(m,
@ -185,16 +186,16 @@ int bus_image_common_get_metadata(
if (r < 0) if (r < 0)
return r; return r;
/* If it was requested, also send back the extension path and the content
* of each extension-release file. Behind a flag, as it's an incompatible
* change. */
if (have_exti) {
PortableMetadata *extension_release;
r = sd_bus_message_open_container(reply, 'a', "{say}"); r = sd_bus_message_open_container(reply, 'a', "{say}");
if (r < 0) if (r < 0)
return r; return r;
/* If it was requested, also send back the extension path and the content
* of each extension-release file. Behind a flag, as it's an incompatible
* change. */
if (FLAGS_SET(flags, PORTABLE_INSPECT_EXTENSION_RELEASES)) {
PortableMetadata *extension_release;
ORDERED_HASHMAP_FOREACH(extension_release, extension_releases) { ORDERED_HASHMAP_FOREACH(extension_release, extension_releases) {
r = sd_bus_message_open_container(reply, 'e', "say"); r = sd_bus_message_open_container(reply, 'e', "say");
@ -213,16 +214,8 @@ int bus_image_common_get_metadata(
if (r < 0) if (r < 0)
return r; return r;
} }
r = sd_bus_message_close_container(reply);
if (r < 0)
return r;
} }
r = sd_bus_message_open_container(reply, 'a', "{say}");
if (r < 0)
return r;
for (size_t i = 0; i < hashmap_size(unit_files); i++) { for (size_t i = 0; i < hashmap_size(unit_files); i++) {
r = sd_bus_message_open_container(reply, 'e', "say"); r = sd_bus_message_open_container(reply, 'e', "say");
@ -895,7 +888,6 @@ const sd_bus_vtable image_vtable[] = {
"t", flags), "t", flags),
SD_BUS_RESULT("s", image, SD_BUS_RESULT("s", image,
"ay", os_release, "ay", os_release,
"a{say}", extensions,
"a{say}", units), "a{say}", units),
bus_image_method_get_metadata, bus_image_method_get_metadata,
SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_VTABLE_UNPRIVILEGED),

View File

@ -607,7 +607,7 @@ ExecStart=sleep 120
EOF EOF
cp "$initdir/usr/lib/systemd/system/minimal-app0.service" "$initdir/usr/lib/systemd/system/minimal-app0-foo.service" cp "$initdir/usr/lib/systemd/system/minimal-app0.service" "$initdir/usr/lib/systemd/system/minimal-app0-foo.service"
mksquashfs "$initdir" "$oldinitdir/usr/share/minimal_0.raw" -noappend mksquashfs "$initdir" "$oldinitdir/usr/share/minimal_0.raw" -noappend -quiet
veritysetup format "$oldinitdir/usr/share/minimal_0.raw" "$oldinitdir/usr/share/minimal_0.verity" | \ veritysetup format "$oldinitdir/usr/share/minimal_0.raw" "$oldinitdir/usr/share/minimal_0.verity" | \
grep '^Root hash:' | cut -f2 | tr -d '\n' >"$oldinitdir/usr/share/minimal_0.roothash" grep '^Root hash:' | cut -f2 | tr -d '\n' >"$oldinitdir/usr/share/minimal_0.roothash"
@ -615,7 +615,7 @@ EOF
rm "$initdir/usr/lib/systemd/system/minimal-app0-foo.service" rm "$initdir/usr/lib/systemd/system/minimal-app0-foo.service"
cp "$initdir/usr/lib/systemd/system/minimal-app0.service" "$initdir/usr/lib/systemd/system/minimal-app0-bar.service" cp "$initdir/usr/lib/systemd/system/minimal-app0.service" "$initdir/usr/lib/systemd/system/minimal-app0-bar.service"
mksquashfs "$initdir" "$oldinitdir/usr/share/minimal_1.raw" -noappend mksquashfs "$initdir" "$oldinitdir/usr/share/minimal_1.raw" -noappend -quiet
veritysetup format "$oldinitdir/usr/share/minimal_1.raw" "$oldinitdir/usr/share/minimal_1.verity" | \ veritysetup format "$oldinitdir/usr/share/minimal_1.raw" "$oldinitdir/usr/share/minimal_1.verity" | \
grep '^Root hash:' | cut -f2 | tr -d '\n' >"$oldinitdir/usr/share/minimal_1.roothash" grep '^Root hash:' | cut -f2 | tr -d '\n' >"$oldinitdir/usr/share/minimal_1.roothash"
@ -647,7 +647,7 @@ cat /usr/lib/extension-release.d/extension-release.app0
EOF EOF
chmod +x "$initdir/opt/script0.sh" chmod +x "$initdir/opt/script0.sh"
echo MARKER=1 >"$initdir/usr/lib/systemd/system/some_file" echo MARKER=1 >"$initdir/usr/lib/systemd/system/some_file"
mksquashfs "$initdir" "$oldinitdir/usr/share/app0.raw" -noappend mksquashfs "$initdir" "$oldinitdir/usr/share/app0.raw" -noappend -quiet
export initdir="$TESTDIR/app1" export initdir="$TESTDIR/app1"
mkdir -p "$initdir/usr/lib/extension-release.d" "$initdir/usr/lib/systemd/system" "$initdir/opt" mkdir -p "$initdir/usr/lib/extension-release.d" "$initdir/usr/lib/systemd/system" "$initdir/opt"
@ -673,7 +673,7 @@ cat /usr/lib/extension-release.d/extension-release.app2
EOF EOF
chmod +x "$initdir/opt/script1.sh" chmod +x "$initdir/opt/script1.sh"
echo MARKER=1 >"$initdir/usr/lib/systemd/system/other_file" echo MARKER=1 >"$initdir/usr/lib/systemd/system/other_file"
mksquashfs "$initdir" "$oldinitdir/usr/share/app1.raw" -noappend mksquashfs "$initdir" "$oldinitdir/usr/share/app1.raw" -noappend -quiet
) )
} }

View File

@ -47,8 +47,8 @@ portablectl list | grep -q -F "No images."
# portablectl also works with directory paths rather than images # portablectl also works with directory paths rather than images
unsquashfs -dest /tmp/minimal_0 /usr/share/minimal_0.raw unsquashfs -q -dest /tmp/minimal_0 /usr/share/minimal_0.raw
unsquashfs -dest /tmp/minimal_1 /usr/share/minimal_1.raw unsquashfs -q -dest /tmp/minimal_1 /usr/share/minimal_1.raw
portablectl "${ARGS[@]}" attach --copy=symlink --now --runtime /tmp/minimal_0 minimal-app0 portablectl "${ARGS[@]}" attach --copy=symlink --now --runtime /tmp/minimal_0 minimal-app0