sysupdate: Implement systemd-sysupdated dbus service
Co-authored-by: Tom Coldrick <thomas.coldrick@codethink.co.uk> Co-authored-by: Abderrahim Kitouni <abderrahim.kitouni@codethink.co.uk>
This commit is contained in:
co-authored by
Tom Coldrick
Abderrahim Kitouni
parent
2656f44c3c
commit
bf2c741fd7
@@ -30,4 +30,20 @@ executables += [
|
||||
threads,
|
||||
],
|
||||
},
|
||||
libexec_template + {
|
||||
'name' : 'systemd-sysupdated',
|
||||
'dbus' : true,
|
||||
'conditions' : ['ENABLE_SYSUPDATE'],
|
||||
'sources' : files('sysupdated.c'),
|
||||
'dependencies' : threads,
|
||||
},
|
||||
]
|
||||
|
||||
if conf.get('ENABLE_SYSUPDATE') == 1
|
||||
install_data('org.freedesktop.sysupdate1.conf',
|
||||
install_dir : dbuspolicydir)
|
||||
install_data('org.freedesktop.sysupdate1.service',
|
||||
install_dir : dbussystemservicedir)
|
||||
install_data('org.freedesktop.sysupdate1.policy',
|
||||
install_dir : polkitpolicydir)
|
||||
endif
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
<?xml version="1.0"?> <!--*-nxml-*-->
|
||||
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
|
||||
"https://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
|
||||
|
||||
<!--
|
||||
SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
|
||||
This file is part of systemd.
|
||||
|
||||
systemd is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
-->
|
||||
|
||||
<busconfig>
|
||||
|
||||
<policy user="root">
|
||||
<allow own="org.freedesktop.sysupdate1"/>
|
||||
<allow send_destination="org.freedesktop.sysupdate1"/>
|
||||
<allow receive_sender="org.freedesktop.sysupdate1"/>
|
||||
</policy>
|
||||
|
||||
<policy context="default">
|
||||
<deny send_destination="org.freedesktop.sysupdate1"/>
|
||||
|
||||
<allow send_destination="org.freedesktop.sysupdate1"
|
||||
send_interface="org.freedesktop.DBus.Introspectable"/>
|
||||
|
||||
<allow send_destination="org.freedesktop.sysupdate1"
|
||||
send_interface="org.freedesktop.DBus.Peer"/>
|
||||
|
||||
<allow send_destination="org.freedesktop.sysupdate1"
|
||||
send_interface="org.freedesktop.DBus.Properties"
|
||||
send_member="Get"/>
|
||||
|
||||
<allow send_destination="org.freedesktop.sysupdate1"
|
||||
send_interface="org.freedesktop.DBus.Properties"
|
||||
send_member="GetAll"/>
|
||||
|
||||
<allow send_destination="org.freedesktop.sysupdate1"
|
||||
send_interface="org.freedesktop.sysupdate1.Manager"
|
||||
send_member="ListTargets"/>
|
||||
|
||||
<allow send_destination="org.freedesktop.sysupdate1"
|
||||
send_interface="org.freedesktop.sysupdate1.Manager"
|
||||
send_member="ListJobs"/>
|
||||
|
||||
<allow send_destination="org.freedesktop.sysupdate1"
|
||||
send_interface="org.freedesktop.sysupdate1.Manager"
|
||||
send_member="ListAppStream"/>
|
||||
|
||||
<allow send_destination="org.freedesktop.sysupdate1"
|
||||
send_interface="org.freedesktop.sysupdate1.Target"
|
||||
send_member="List"/>
|
||||
|
||||
<allow send_destination="org.freedesktop.sysupdate1"
|
||||
send_interface="org.freedesktop.sysupdate1.Target"
|
||||
send_member="Describe"/>
|
||||
|
||||
<allow send_destination="org.freedesktop.sysupdate1"
|
||||
send_interface="org.freedesktop.sysupdate1.Target"
|
||||
send_member="CheckNew"/>
|
||||
|
||||
<allow send_destination="org.freedesktop.sysupdate1"
|
||||
send_interface="org.freedesktop.sysupdate1.Target"
|
||||
send_member="Update"/>
|
||||
|
||||
<allow send_destination="org.freedesktop.sysupdate1"
|
||||
send_interface="org.freedesktop.sysupdate1.Target"
|
||||
send_member="Vacuum"/>
|
||||
|
||||
<allow send_destination="org.freedesktop.sysupdate1"
|
||||
send_interface="org.freedesktop.sysupdate1.Target"
|
||||
send_member="GetAppstream"/>
|
||||
|
||||
<allow send_destination="org.freedesktop.sysupdate1"
|
||||
send_interface="org.freedesktop.sysupdate1.Target"
|
||||
send_member="GetVersion"/>
|
||||
|
||||
<allow send_destination="org.freedesktop.sysupdate1"
|
||||
send_interface="org.freedesktop.sysupdate1.Job"
|
||||
send_member="Cancel"/>
|
||||
|
||||
<allow receive_sender="org.freedesktop.sysupdate1"/>
|
||||
</policy>
|
||||
|
||||
</busconfig>
|
||||
@@ -0,0 +1,74 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> <!--*-nxml-*-->
|
||||
<!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
|
||||
"https://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
|
||||
|
||||
<!--
|
||||
SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
|
||||
This file is part of systemd.
|
||||
|
||||
systemd is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
-->
|
||||
|
||||
<policyconfig>
|
||||
|
||||
<vendor>The systemd Project</vendor>
|
||||
<vendor_url>https://systemd.io</vendor_url>
|
||||
|
||||
<!--
|
||||
SECURITY: the default policy allows any user with an active session on the local console to check
|
||||
for updates and update the system to the latest version without extra authentication.
|
||||
Depending on the use case it might make sense to request authentication here, or add a polkit
|
||||
rule to only allow access to these actions for members of a given group.
|
||||
|
||||
The default policy matches prior art in distributions and system update managers. To update a
|
||||
system, for example: packagekit requires only a user with an active session, eos-updater needs
|
||||
a user at the console, and rpm-ostree (generally) needs an "administrative user" at the computer.
|
||||
Without this default, distributions hoping to use sysupdate as an update mechanism will have to
|
||||
set the policy to it anyhow.
|
||||
-->
|
||||
|
||||
<action id="org.freedesktop.sysupdate1.check">
|
||||
<description gettext-domain="systemd">Check for system updates</description>
|
||||
<message gettext-domain="systemd">Authentication is required to check for system updates</message>
|
||||
<defaults>
|
||||
<allow_any>auth_admin</allow_any>
|
||||
<allow_inactive>auth_admin</allow_inactive>
|
||||
<allow_active>yes</allow_active>
|
||||
</defaults>
|
||||
</action>
|
||||
|
||||
<action id="org.freedesktop.sysupdate1.update">
|
||||
<description gettext-domain="systemd">Install system updates</description>
|
||||
<message gettext-domain="systemd">Authentication is required to install system updates</message>
|
||||
<defaults>
|
||||
<allow_any>auth_admin</allow_any>
|
||||
<allow_inactive>auth_admin</allow_inactive>
|
||||
<allow_active>yes</allow_active>
|
||||
</defaults>
|
||||
</action>
|
||||
|
||||
<action id="org.freedesktop.sysupdate1.update-to-version">
|
||||
<description gettext-domain="systemd">Install specific system version</description>
|
||||
<message gettext-domain="systemd">Authentication is required to update the system to a specific (possibly old) version</message>
|
||||
<defaults>
|
||||
<allow_any>auth_admin</allow_any>
|
||||
<allow_inactive>auth_admin</allow_inactive>
|
||||
<allow_active>auth_admin_keep</allow_active>
|
||||
</defaults>
|
||||
</action>
|
||||
|
||||
<action id="org.freedesktop.sysupdate1.vacuum">
|
||||
<description gettext-domain="systemd">Cleanup old system updates</description>
|
||||
<message gettext-domain="systemd">Authentication is required to cleanup old system updates</message>
|
||||
<defaults>
|
||||
<allow_any>auth_admin</allow_any>
|
||||
<allow_inactive>auth_admin</allow_inactive>
|
||||
<allow_active>auth_admin_keep</allow_active>
|
||||
</defaults>
|
||||
</action>
|
||||
|
||||
</policyconfig>
|
||||
@@ -0,0 +1,14 @@
|
||||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
#
|
||||
# This file is part of systemd.
|
||||
#
|
||||
# systemd is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published by
|
||||
# the Free Software Foundation; either version 2.1 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
[D-BUS Service]
|
||||
Name=org.freedesktop.sysupdate1
|
||||
Exec=/bin/false
|
||||
User=root
|
||||
SystemdService=dbus-org.freedesktop.sysupdate1.service
|
||||
@@ -3,3 +3,5 @@
|
||||
#pragma once
|
||||
|
||||
int reboot_now(void);
|
||||
|
||||
#define SD_SYSTEMD_SYSUPDATE_OFFLINE (UINT64_C(1) << 0)
|
||||
|
||||
@@ -1543,7 +1543,7 @@ static int run(int argc, char *argv[]) {
|
||||
return r;
|
||||
|
||||
/* SIGCHLD signal must be blocked for sd_event_add_child to work */
|
||||
BLOCK_SIGNALS(SIGCHLD);
|
||||
assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGCHLD) >= 0);
|
||||
|
||||
return sysupdate_main(argc, argv);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user