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.
7347b3db83
...
ee3d33c415
8
NEWS
8
NEWS
@ -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.
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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) << 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,
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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)",
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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),
|
||||||
|
|||||||
@ -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),
|
||||||
|
|||||||
@ -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
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user