daemon: Remove even more session bus code
Supporting the session bus was a nice idea but we don't have any tests for this anymore, and carrying it is nontrivial overhead. It used to only kind of work because ostree ran well as non-root, but rpm-ostreed really requires root nowadays.
This commit is contained in:
parent
6d57532814
commit
4eb55ea6a6
@ -220,7 +220,6 @@ rpmostree_option_context_parse (GOptionContext *context,
|
||||
const char *const* *out_install_pkgs,
|
||||
const char *const* *out_uninstall_pkgs,
|
||||
RPMOSTreeSysroot **out_sysroot_proxy,
|
||||
GBusType *out_bus_type,
|
||||
GError **error)
|
||||
{
|
||||
/* with --version there's no command, don't require a daemon for it */
|
||||
@ -302,11 +301,8 @@ rpmostree_option_context_parse (GOptionContext *context,
|
||||
/* ignore errors; we print out a warning if we fail to spawn pkttyagent */
|
||||
(void)rpmostree_polkit_agent_open ();
|
||||
|
||||
if (!rpmostree_load_sysroot (opt_sysroot,
|
||||
opt_force_peer,
|
||||
cancellable,
|
||||
if (!rpmostree_load_sysroot (opt_sysroot, cancellable,
|
||||
out_sysroot_proxy,
|
||||
out_bus_type,
|
||||
error))
|
||||
return FALSE;
|
||||
}
|
||||
@ -393,7 +389,7 @@ rpmostree_handle_subcommand (int argc, char **argv,
|
||||
&argc, &argv,
|
||||
invocation,
|
||||
cancellable,
|
||||
NULL, NULL, NULL, NULL, NULL);
|
||||
NULL, NULL, NULL, NULL);
|
||||
if (subcommand_name == NULL)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
@ -508,7 +504,7 @@ rpmostree_main_inner (const rust::Slice<const rust::Str> args)
|
||||
/* This will not return for some options (e.g. --version). */
|
||||
(void) rpmostree_option_context_parse (context, NULL, &argc, &argv,
|
||||
NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL);
|
||||
NULL);
|
||||
g_autofree char *help = g_option_context_get_help (context, FALSE, NULL);
|
||||
g_printerr ("%s", help);
|
||||
if (command_name == NULL)
|
||||
|
@ -73,7 +73,6 @@ rpmostree_builtin_cancel (int argc,
|
||||
cancellable,
|
||||
NULL, NULL,
|
||||
&sysroot_proxy,
|
||||
NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
|
@ -65,7 +65,6 @@ rpmostree_builtin_cleanup (int argc,
|
||||
cancellable,
|
||||
NULL, NULL,
|
||||
&sysroot_proxy,
|
||||
NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
|
@ -61,7 +61,7 @@ rpmostree_db_option_context_parse (GOptionContext *context,
|
||||
argc, argv,
|
||||
invocation,
|
||||
cancellable,
|
||||
NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
|
@ -78,7 +78,6 @@ rpmostree_builtin_deploy (int argc,
|
||||
|
||||
context = g_option_context_new ("REVISION");
|
||||
|
||||
GBusType bus_type;
|
||||
if (!rpmostree_option_context_parse (context,
|
||||
option_entries,
|
||||
&argc, &argv,
|
||||
@ -87,7 +86,6 @@ rpmostree_builtin_deploy (int argc,
|
||||
&install_pkgs,
|
||||
&uninstall_pkgs,
|
||||
&sysroot_proxy,
|
||||
&bus_type,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
@ -133,7 +131,7 @@ rpmostree_builtin_deploy (int argc,
|
||||
{
|
||||
if (!opt_bypass_driver)
|
||||
{
|
||||
if (!error_if_driver_registered (bus_type, sysroot_proxy, cancellable, error))
|
||||
if (!error_if_driver_registered (sysroot_proxy, cancellable, error))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -48,7 +48,7 @@ rpmostree_builtin_finalize_deployment (int argc,
|
||||
glnx_unref_object RPMOSTreeSysroot *sysroot_proxy = NULL;
|
||||
if (!rpmostree_option_context_parse (context, option_entries, &argc, &argv,
|
||||
invocation, cancellable, NULL, NULL,
|
||||
&sysroot_proxy, NULL, error))
|
||||
&sysroot_proxy, error))
|
||||
return FALSE;
|
||||
|
||||
const char *checksum = NULL;
|
||||
|
@ -68,7 +68,6 @@ rpmostree_ex_builtin_initramfs_etc (int argc,
|
||||
cancellable,
|
||||
NULL, NULL,
|
||||
&sysroot_proxy,
|
||||
NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
|
@ -63,7 +63,6 @@ rpmostree_builtin_initramfs (int argc,
|
||||
cancellable,
|
||||
NULL, NULL,
|
||||
&sysroot_proxy,
|
||||
NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
|
@ -181,7 +181,6 @@ rpmostree_builtin_kargs (int argc,
|
||||
cancellable,
|
||||
NULL, NULL,
|
||||
&sysroot_proxy,
|
||||
NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
|
@ -83,7 +83,6 @@ rpmostree_builtin_rebase (int argc,
|
||||
const char *const *install_pkgs = NULL;
|
||||
const char *const *uninstall_pkgs = NULL;
|
||||
|
||||
GBusType bus_type;
|
||||
if (!rpmostree_option_context_parse (context,
|
||||
option_entries,
|
||||
&argc, &argv,
|
||||
@ -92,7 +91,6 @@ rpmostree_builtin_rebase (int argc,
|
||||
&install_pkgs,
|
||||
&uninstall_pkgs,
|
||||
&sysroot_proxy,
|
||||
&bus_type,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
@ -103,7 +101,7 @@ rpmostree_builtin_rebase (int argc,
|
||||
}
|
||||
|
||||
if (!opt_bypass_driver)
|
||||
if (!error_if_driver_registered (bus_type, sysroot_proxy, cancellable, error))
|
||||
if (!error_if_driver_registered (sysroot_proxy, cancellable, error))
|
||||
return FALSE;
|
||||
|
||||
if (!rpmostree_load_os_proxy (sysroot_proxy, opt_osname,
|
||||
|
@ -65,7 +65,6 @@ rpmostree_builtin_refresh_md (int argc,
|
||||
cancellable,
|
||||
NULL, NULL,
|
||||
&sysroot_proxy,
|
||||
NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
|
@ -50,7 +50,6 @@ rpmostree_builtin_reload (int argc,
|
||||
cancellable,
|
||||
NULL, NULL,
|
||||
&sysroot_proxy,
|
||||
NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
|
@ -68,7 +68,6 @@ rpmostree_builtin_reset (int argc,
|
||||
&install_pkgs,
|
||||
&uninstall_pkgs,
|
||||
&sysroot_proxy,
|
||||
NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
|
@ -66,7 +66,6 @@ rpmostree_builtin_rollback (int argc,
|
||||
cancellable,
|
||||
NULL, NULL,
|
||||
&sysroot_proxy,
|
||||
NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
|
@ -46,12 +46,10 @@ typedef enum {
|
||||
static AppState appstate = APPSTATE_STARTING;
|
||||
static gboolean opt_debug = FALSE;
|
||||
static char *opt_sysroot = NULL;
|
||||
static gint service_dbus_fd = -1;
|
||||
static GOptionEntry opt_entries[] =
|
||||
{
|
||||
{ "debug", 'd', 0, G_OPTION_ARG_NONE, &opt_debug, "Print debug information on stderr", NULL },
|
||||
{ "sysroot", 0, 0, G_OPTION_ARG_STRING, &opt_sysroot, "Use system root SYSROOT (default: /)", "SYSROOT" },
|
||||
{ "dbus-peer", 0, 0, G_OPTION_ARG_INT, &service_dbus_fd, "Use a peer to peer dbus connection on this fd", "FD" },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
@ -67,13 +65,6 @@ state_transition (AppState state)
|
||||
g_main_context_wakeup (NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
state_transition_fatal_err (GError *error)
|
||||
{
|
||||
sd_journal_print (LOG_ERR, "%s", error->message);
|
||||
state_transition (APPSTATE_FLUSHING);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
start_daemon (GDBusConnection *connection,
|
||||
GError **error)
|
||||
@ -99,26 +90,6 @@ on_bus_name_released (GDBusConnection *connection,
|
||||
state_transition (APPSTATE_EXITING);
|
||||
}
|
||||
|
||||
static void
|
||||
on_peer_acquired (GObject *source,
|
||||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
g_autoptr(GError) error = NULL;
|
||||
g_autoptr(GDBusConnection) connection = g_dbus_connection_new_finish (result, &error);
|
||||
if (!connection)
|
||||
{
|
||||
state_transition_fatal_err (error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!start_daemon (connection, &error))
|
||||
{
|
||||
state_transition_fatal_err (error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
on_sigint (gpointer user_data)
|
||||
{
|
||||
@ -254,29 +225,6 @@ on_log_handler (const gchar *log_domain,
|
||||
sd_journal_print (priority, "%s", message);
|
||||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
connect_to_peer (int fd, GError **error)
|
||||
{
|
||||
g_autoptr(GSocketConnection) stream = NULL;
|
||||
g_autoptr(GSocket) socket = NULL;
|
||||
g_autofree gchar *guid = NULL;
|
||||
|
||||
socket = g_socket_new_from_fd (fd, error);
|
||||
if (!socket)
|
||||
return FALSE;
|
||||
|
||||
stream = g_socket_connection_factory_create_connection (socket);
|
||||
g_assert_nonnull (stream);
|
||||
|
||||
guid = g_dbus_generate_guid ();
|
||||
g_dbus_connection_new (G_IO_STREAM (stream), guid,
|
||||
(GDBusConnectionFlags)(G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_SERVER |
|
||||
G_DBUS_CONNECTION_FLAGS_DELAY_MESSAGE_PROCESSING),
|
||||
NULL, NULL, on_peer_acquired, NULL);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
rpmostree_builtin_start_daemon (int argc,
|
||||
char **argv,
|
||||
@ -309,27 +257,11 @@ rpmostree_builtin_start_daemon (int argc,
|
||||
g_unix_signal_add (SIGINT, on_sigint, NULL);
|
||||
g_unix_signal_add (SIGTERM, on_sigint, NULL);
|
||||
|
||||
g_autoptr(GDBusConnection) bus = NULL;
|
||||
if (service_dbus_fd == -1)
|
||||
{
|
||||
GBusType bus_type;
|
||||
|
||||
/* To facilitate testing, use whichever message bus activated
|
||||
* this process. If the process was started directly, assume
|
||||
* the system bus. */
|
||||
if (g_getenv ("DBUS_STARTER_BUS_TYPE") != NULL)
|
||||
bus_type = G_BUS_TYPE_STARTER;
|
||||
else
|
||||
bus_type = G_BUS_TYPE_SYSTEM;
|
||||
|
||||
/* Get an explicit ref to the bus so we can use it later */
|
||||
bus = g_bus_get_sync (bus_type, NULL, error);
|
||||
if (!bus)
|
||||
return FALSE;
|
||||
if (!start_daemon (bus, error))
|
||||
return FALSE;
|
||||
}
|
||||
else if (!connect_to_peer (service_dbus_fd, error))
|
||||
/* Get an explicit ref to the bus so we can use it later */
|
||||
g_autoptr(GDBusConnection) bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, error);
|
||||
if (!bus)
|
||||
return FALSE;
|
||||
if (!start_daemon (bus, error))
|
||||
return FALSE;
|
||||
|
||||
state_transition (APPSTATE_RUNNING);
|
||||
|
@ -341,7 +341,6 @@ get_update_driver_state (RPMOSTreeSysroot *sysroot_proxy,
|
||||
|
||||
static gboolean
|
||||
print_daemon_state (RPMOSTreeSysroot *sysroot_proxy,
|
||||
GBusType bus_type,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
@ -370,16 +369,13 @@ print_daemon_state (RPMOSTreeSysroot *sysroot_proxy,
|
||||
g_print ("AutomaticUpdatesDriver: %s\n", update_driver_name);
|
||||
|
||||
/* only try to get unit's StatusText if we're on the system bus */
|
||||
if (bus_type == G_BUS_TYPE_SYSTEM)
|
||||
{
|
||||
g_autofree const char *update_driver_state = NULL;
|
||||
g_autoptr(GError) local_error = NULL;
|
||||
if (!get_update_driver_state (sysroot_proxy, update_driver_sd_unit,
|
||||
&update_driver_state, cancellable, &local_error))
|
||||
g_printerr ("%s", local_error->message);
|
||||
else if (update_driver_state)
|
||||
g_print (" DriverState: %s\n", update_driver_state);
|
||||
}
|
||||
g_autofree const char *update_driver_state = NULL;
|
||||
g_autoptr(GError) local_error = NULL;
|
||||
if (!get_update_driver_state (sysroot_proxy, update_driver_sd_unit,
|
||||
&update_driver_state, cancellable, &local_error))
|
||||
g_printerr ("%s", local_error->message);
|
||||
else if (update_driver_state)
|
||||
g_print (" DriverState: %s\n", update_driver_state);
|
||||
}
|
||||
else if (g_str_equal (policy, "none"))
|
||||
{
|
||||
@ -393,60 +389,51 @@ print_daemon_state (RPMOSTreeSysroot *sysroot_proxy,
|
||||
{
|
||||
g_print ("AutomaticUpdates: %s", policy);
|
||||
|
||||
/* don't try to get info from systemd if we're not on the system bus */
|
||||
if (bus_type != G_BUS_TYPE_SYSTEM)
|
||||
g_print ("\n");
|
||||
else
|
||||
AutoUpdateSdState state;
|
||||
g_autofree char *last_run = NULL;
|
||||
g_print ("; ");
|
||||
GDBusConnection *connection =
|
||||
g_dbus_proxy_get_connection (G_DBUS_PROXY (sysroot_proxy));
|
||||
if (!get_last_auto_update_run (connection, &state, &last_run, cancellable, error))
|
||||
return FALSE;
|
||||
switch (state)
|
||||
{
|
||||
AutoUpdateSdState state;
|
||||
g_autofree char *last_run = NULL;
|
||||
|
||||
g_print ("; ");
|
||||
|
||||
GDBusConnection *connection =
|
||||
g_dbus_proxy_get_connection (G_DBUS_PROXY (sysroot_proxy));
|
||||
if (!get_last_auto_update_run (connection, &state, &last_run, cancellable, error))
|
||||
return FALSE;
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case AUTO_UPDATE_SDSTATE_TIMER_UNKNOWN:
|
||||
{
|
||||
g_print ("%s: unknown state\n", RPMOSTREE_AUTOMATIC_TIMER_UNIT);
|
||||
break;
|
||||
}
|
||||
case AUTO_UPDATE_SDSTATE_TIMER_INACTIVE:
|
||||
{
|
||||
g_print ("%s: inactive\n", RPMOSTREE_AUTOMATIC_TIMER_UNIT);
|
||||
break;
|
||||
}
|
||||
case AUTO_UPDATE_SDSTATE_SERVICE_FAILED:
|
||||
{
|
||||
g_print ("%s: %s%slast run failed%s%s\n",
|
||||
RPMOSTREE_AUTOMATIC_SERVICE_UNIT,
|
||||
get_red_start (), get_bold_start (),
|
||||
get_bold_end (), get_red_end ());
|
||||
break;
|
||||
}
|
||||
case AUTO_UPDATE_SDSTATE_SERVICE_RUNNING:
|
||||
{
|
||||
g_print ("%s: running\n", RPMOSTREE_AUTOMATIC_SERVICE_UNIT);
|
||||
break;
|
||||
}
|
||||
case AUTO_UPDATE_SDSTATE_SERVICE_EXITED:
|
||||
{
|
||||
if (last_run)
|
||||
/* e.g. "last run 4h 32min ago" */
|
||||
g_print ("%s: last run %s\n", RPMOSTREE_AUTOMATIC_TIMER_UNIT, last_run);
|
||||
else
|
||||
g_print ("%s: no runs since boot\n", RPMOSTREE_AUTOMATIC_TIMER_UNIT);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
}
|
||||
case AUTO_UPDATE_SDSTATE_TIMER_UNKNOWN:
|
||||
{
|
||||
g_print ("%s: unknown state\n", RPMOSTREE_AUTOMATIC_TIMER_UNIT);
|
||||
break;
|
||||
}
|
||||
case AUTO_UPDATE_SDSTATE_TIMER_INACTIVE:
|
||||
{
|
||||
g_print ("%s: inactive\n", RPMOSTREE_AUTOMATIC_TIMER_UNIT);
|
||||
break;
|
||||
}
|
||||
case AUTO_UPDATE_SDSTATE_SERVICE_FAILED:
|
||||
{
|
||||
g_print ("%s: %s%slast run failed%s%s\n",
|
||||
RPMOSTREE_AUTOMATIC_SERVICE_UNIT,
|
||||
get_red_start (), get_bold_start (),
|
||||
get_bold_end (), get_red_end ());
|
||||
break;
|
||||
}
|
||||
case AUTO_UPDATE_SDSTATE_SERVICE_RUNNING:
|
||||
{
|
||||
g_print ("%s: running\n", RPMOSTREE_AUTOMATIC_SERVICE_UNIT);
|
||||
break;
|
||||
}
|
||||
case AUTO_UPDATE_SDSTATE_SERVICE_EXITED:
|
||||
{
|
||||
if (last_run)
|
||||
/* e.g. "last run 4h 32min ago" */
|
||||
g_print ("%s: last run %s\n", RPMOSTREE_AUTOMATIC_TIMER_UNIT, last_run);
|
||||
else
|
||||
g_print ("%s: no runs since boot\n", RPMOSTREE_AUTOMATIC_TIMER_UNIT);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1104,7 +1091,6 @@ rpmostree_builtin_status (int argc,
|
||||
glnx_unref_object RPMOSTreeOS *os_proxy = NULL;
|
||||
glnx_unref_object RPMOSTreeSysroot *sysroot_proxy = NULL;
|
||||
|
||||
GBusType bus_type;
|
||||
if (!rpmostree_option_context_parse (context,
|
||||
option_entries,
|
||||
&argc, &argv,
|
||||
@ -1112,7 +1098,6 @@ rpmostree_builtin_status (int argc,
|
||||
cancellable,
|
||||
NULL, NULL,
|
||||
&sysroot_proxy,
|
||||
&bus_type,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
@ -1187,7 +1172,7 @@ rpmostree_builtin_status (int argc,
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!print_daemon_state (sysroot_proxy, bus_type, cancellable, error))
|
||||
if (!print_daemon_state (sysroot_proxy, cancellable, error))
|
||||
return FALSE;
|
||||
|
||||
gboolean printed_cached_update = FALSE;
|
||||
@ -1374,7 +1359,7 @@ rpmostree_ex_builtin_history (int argc,
|
||||
&argc, &argv,
|
||||
invocation,
|
||||
cancellable,
|
||||
NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
|
@ -77,7 +77,6 @@ rpmostree_builtin_upgrade (int argc,
|
||||
const char *const *install_pkgs = NULL;
|
||||
const char *const *uninstall_pkgs = NULL;
|
||||
|
||||
GBusType bus_type;
|
||||
if (!rpmostree_option_context_parse (context,
|
||||
option_entries,
|
||||
&argc, &argv,
|
||||
@ -86,7 +85,6 @@ rpmostree_builtin_upgrade (int argc,
|
||||
&install_pkgs,
|
||||
&uninstall_pkgs,
|
||||
&sysroot_proxy,
|
||||
&bus_type,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
@ -132,7 +130,7 @@ rpmostree_builtin_upgrade (int argc,
|
||||
}
|
||||
|
||||
if (!opt_bypass_driver)
|
||||
if (!error_if_driver_registered (bus_type, sysroot_proxy, cancellable, error))
|
||||
if (!error_if_driver_registered (sysroot_proxy, cancellable, error))
|
||||
return FALSE;
|
||||
|
||||
g_autoptr(GVariant) previous_deployment = rpmostree_os_dup_default_deployment (os_proxy);
|
||||
|
@ -50,7 +50,6 @@ rpmostree_builtin_usroverlay (int argc,
|
||||
cancellable,
|
||||
NULL, NULL,
|
||||
&sysroot_proxy,
|
||||
NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
|
@ -72,7 +72,6 @@ rpmostree_option_context_parse (GOptionContext *context,
|
||||
const char *const* *out_install_pkgs,
|
||||
const char *const* *out_uninstall_pkgs,
|
||||
RPMOSTreeSysroot **out_sysroot_proxy,
|
||||
GBusType *out_bus_type,
|
||||
GError **error);
|
||||
|
||||
int
|
||||
|
@ -48,78 +48,6 @@ impl_transaction_get_response_sync (GDBusConnection *connection,
|
||||
|
||||
#define RPMOSTREE_CLI_ID "cli"
|
||||
|
||||
static void
|
||||
child_setup_pdeathsig (void *unused)
|
||||
{
|
||||
if (prctl (PR_SET_PDEATHSIG, SIGTERM) < 0)
|
||||
err (EXIT_FAILURE, "prctl(PR_SET_PDEATHSIG)");
|
||||
}
|
||||
|
||||
static GDBusConnection*
|
||||
get_connection_for_path (const char *sysroot,
|
||||
gboolean force_peer,
|
||||
GBusType *out_bus_type,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
if (sysroot == NULL)
|
||||
sysroot = "/";
|
||||
|
||||
if (g_strcmp0 ("/", sysroot) == 0 && force_peer == FALSE)
|
||||
{
|
||||
/* NB: as opposed to other early returns, this is _also_ a happy path */
|
||||
GDBusConnection *ret = g_bus_get_sync (G_BUS_TYPE_SYSTEM, cancellable, error);
|
||||
if (!ret)
|
||||
return (GDBusConnection*)(glnx_prefix_error_null (error, "Connecting to system bus"));
|
||||
*out_bus_type = G_BUS_TYPE_SYSTEM;
|
||||
return ret;
|
||||
}
|
||||
|
||||
gchar buffer[16];
|
||||
int pair[2];
|
||||
const gchar *args[] = {
|
||||
"rpm-ostree",
|
||||
"start-daemon",
|
||||
"--sysroot", sysroot,
|
||||
"--dbus-peer", buffer,
|
||||
NULL
|
||||
};
|
||||
|
||||
g_print ("Running in single user mode. Be sure no other users are modifying the system\n");
|
||||
if (socketpair (AF_UNIX, SOCK_STREAM, 0, pair) < 0)
|
||||
return (GDBusConnection*)glnx_null_throw_errno_prefix (error, "couldn't create socket pair");
|
||||
|
||||
g_snprintf (buffer, sizeof (buffer), "%d", pair[1]);
|
||||
|
||||
g_autoptr(GSocket) socket = g_socket_new_from_fd (pair[0], error);
|
||||
if (socket == NULL)
|
||||
{
|
||||
close (pair[0]);
|
||||
close (pair[1]);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!g_spawn_async (NULL, (gchar **)args, NULL,
|
||||
static_cast<GSpawnFlags>(G_SPAWN_LEAVE_DESCRIPTORS_OPEN),
|
||||
child_setup_pdeathsig, NULL, NULL, error))
|
||||
{
|
||||
close (pair[1]);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
g_autoptr(GSocketConnection) stream =
|
||||
g_socket_connection_factory_create_connection (socket);
|
||||
g_autoptr(GDBusConnection) connection =
|
||||
g_dbus_connection_new_sync (G_IO_STREAM (stream), NULL,
|
||||
G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT,
|
||||
NULL, cancellable, error);
|
||||
if (!connection)
|
||||
return NULL;
|
||||
|
||||
*out_bus_type = G_BUS_TYPE_NONE;
|
||||
return connection;
|
||||
}
|
||||
|
||||
/* Used to close race conditions by ensuring the daemon status is up-to-date */
|
||||
static void
|
||||
on_reload_done (GObject *src,
|
||||
@ -147,19 +75,16 @@ await_reload_sync (RPMOSTreeSysroot *sysroot_proxy)
|
||||
* is in the process of auto-exiting.
|
||||
*/
|
||||
static gboolean
|
||||
app_load_sysroot_impl (const char *sysroot, gboolean force_peer,
|
||||
app_load_sysroot_impl (const char *sysroot,
|
||||
GCancellable *cancellable,
|
||||
GDBusConnection **out_conn, GBusType *out_bus_type,
|
||||
GDBusConnection **out_conn,
|
||||
GError **error)
|
||||
{
|
||||
const char *bus_name = NULL;
|
||||
glnx_unref_object GDBusConnection *connection = NULL;
|
||||
|
||||
GBusType bus_type;
|
||||
connection = get_connection_for_path (sysroot, force_peer, &bus_type,
|
||||
cancellable, error);
|
||||
if (connection == NULL)
|
||||
return FALSE;
|
||||
g_autoptr(GDBusConnection) connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, cancellable, error);
|
||||
if (!connection)
|
||||
return glnx_prefix_error (error, "Connecting to system bus");
|
||||
|
||||
if (g_dbus_connection_get_unique_name (connection) != NULL)
|
||||
bus_name = BUS_NAME;
|
||||
@ -222,8 +147,6 @@ app_load_sysroot_impl (const char *sysroot, gboolean force_peer,
|
||||
}
|
||||
|
||||
*out_conn = util::move_nullify(connection);
|
||||
if (out_bus_type)
|
||||
*out_bus_type = bus_type;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -234,11 +157,10 @@ new_client_connection()
|
||||
{
|
||||
g_autoptr(GError) local_error = NULL;
|
||||
GDBusConnection *conn = NULL;
|
||||
GBusType bus_type;
|
||||
|
||||
if (!app_load_sysroot_impl(NULL, false, NULL, &conn, &bus_type, &local_error))
|
||||
if (!app_load_sysroot_impl("/", NULL, &conn, &local_error))
|
||||
util::throw_gerror(local_error);
|
||||
return std::make_unique<ClientConnection>(conn, bus_type);
|
||||
return std::make_unique<ClientConnection>(conn);
|
||||
}
|
||||
|
||||
// Connect to a transaction DBus and monitor its progress synchronously,
|
||||
@ -263,8 +185,6 @@ ClientConnection::transaction_connect_progress_sync(const rust::Str address) con
|
||||
|
||||
/**
|
||||
* rpmostree_load_sysroot
|
||||
* @sysroot: sysroot path
|
||||
* @force_peer: Force a peer connection
|
||||
* @cancellable: A GCancellable
|
||||
* @out_sysroot: (out) Return location for sysroot
|
||||
* @error: A pointer to a GError pointer.
|
||||
@ -272,17 +192,14 @@ ClientConnection::transaction_connect_progress_sync(const rust::Str address) con
|
||||
* Returns: True on success
|
||||
**/
|
||||
gboolean
|
||||
rpmostree_load_sysroot (gchar *sysroot,
|
||||
gboolean force_peer,
|
||||
GCancellable *cancellable,
|
||||
rpmostree_load_sysroot (const char *sysroot,
|
||||
GCancellable *cancellable,
|
||||
RPMOSTreeSysroot **out_sysroot_proxy,
|
||||
GBusType *out_bus_type,
|
||||
GError **error)
|
||||
GError **error)
|
||||
{
|
||||
g_autoptr(GDBusConnection) connection = NULL;
|
||||
GBusType bus_type;
|
||||
|
||||
if (!app_load_sysroot_impl (sysroot, force_peer, cancellable, &connection, &bus_type, error))
|
||||
if (!app_load_sysroot_impl (sysroot, cancellable, &connection, error))
|
||||
return FALSE;
|
||||
|
||||
const char *bus_name;
|
||||
@ -300,8 +217,6 @@ rpmostree_load_sysroot (gchar *sysroot,
|
||||
await_reload_sync (sysroot_proxy);
|
||||
|
||||
*out_sysroot_proxy = util::move_nullify (sysroot_proxy);
|
||||
if (out_bus_type)
|
||||
*out_bus_type = bus_type;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -1712,8 +1627,7 @@ check_sd_unit_contains_pid (char *sd_unit,
|
||||
|
||||
/* Throw an error if an updates driver is registered and active. */
|
||||
gboolean
|
||||
error_if_driver_registered (GBusType bus_type,
|
||||
RPMOSTreeSysroot *sysroot_proxy,
|
||||
error_if_driver_registered (RPMOSTreeSysroot *sysroot_proxy,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
@ -1744,17 +1658,14 @@ error_if_driver_registered (GBusType bus_type,
|
||||
update_driver_name, update_driver_sd_unit);
|
||||
g_string_append_printf (error_msg, "See %s's documentation", update_driver_name);
|
||||
// Only try to get unit's `Documentation` and check unit's state if we're on the system bus.
|
||||
if (bus_type == G_BUS_TYPE_SYSTEM)
|
||||
{
|
||||
gboolean sd_unit_is_active = TRUE;
|
||||
if (!check_sd_unit_state_is_active (update_driver_sd_unit, &sd_unit_is_active,
|
||||
connection, cancellable, error))
|
||||
return FALSE;
|
||||
// Ignore driver if driver's `ActiveState` is not "active", even if registered.
|
||||
if (!sd_unit_is_active)
|
||||
return TRUE;
|
||||
append_docs_to_str (error_msg, connection, update_driver_sd_unit, cancellable);
|
||||
}
|
||||
gboolean sd_unit_is_active = TRUE;
|
||||
if (!check_sd_unit_state_is_active (update_driver_sd_unit, &sd_unit_is_active,
|
||||
connection, cancellable, error))
|
||||
return FALSE;
|
||||
// Ignore driver if driver's `ActiveState` is not "active", even if registered.
|
||||
if (!sd_unit_is_active)
|
||||
return TRUE;
|
||||
append_docs_to_str (error_msg, connection, update_driver_sd_unit, cancellable);
|
||||
g_string_append_printf (error_msg,
|
||||
"Use --bypass-driver to bypass %s and perform the operation anyways",
|
||||
update_driver_name);
|
||||
|
@ -37,9 +37,8 @@ namespace rpmostreecxx {
|
||||
class ClientConnection final {
|
||||
private:
|
||||
GDBusConnection *conn;
|
||||
GBusType bus_type;
|
||||
public:
|
||||
ClientConnection(GDBusConnection *connp, GBusType bus_typep) : conn(connp), bus_type(bus_typep) {}
|
||||
ClientConnection(GDBusConnection *connp) : conn(connp) {}
|
||||
~ClientConnection() {
|
||||
g_clear_object(&conn);
|
||||
}
|
||||
@ -48,10 +47,6 @@ public:
|
||||
return *conn;
|
||||
}
|
||||
|
||||
GBusType get_bus_type() const {
|
||||
return bus_type;
|
||||
}
|
||||
|
||||
void transaction_connect_progress_sync(const rust::Str address) const;
|
||||
};
|
||||
|
||||
@ -66,11 +61,9 @@ G_BEGIN_DECLS
|
||||
#define BUS_NAME "org.projectatomic.rpmostree1"
|
||||
|
||||
gboolean
|
||||
rpmostree_load_sysroot (gchar *sysroot,
|
||||
gboolean force_peer,
|
||||
GCancellable *cancellable,
|
||||
rpmostree_load_sysroot (const char *sysroot,
|
||||
GCancellable *cancellable,
|
||||
RPMOSTreeSysroot **out_sysroot_proxy,
|
||||
GBusType *out_bus_type,
|
||||
GError **error);
|
||||
|
||||
gboolean
|
||||
@ -171,8 +164,7 @@ get_sd_unit_objpath (GDBusConnection *connection,
|
||||
GError **error);
|
||||
|
||||
gboolean
|
||||
error_if_driver_registered (GBusType bus_type,
|
||||
RPMOSTreeSysroot *sysroot_proxy,
|
||||
error_if_driver_registered (RPMOSTreeSysroot *sysroot_proxy,
|
||||
GCancellable *cancellable,
|
||||
GError **error);
|
||||
|
||||
|
@ -1201,7 +1201,7 @@ rpmostree_compose_builtin_install (int argc,
|
||||
&argc, &argv,
|
||||
invocation,
|
||||
cancellable,
|
||||
NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
@ -1268,7 +1268,7 @@ rpmostree_compose_builtin_postprocess (int argc,
|
||||
&argc, &argv,
|
||||
invocation,
|
||||
cancellable,
|
||||
NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
@ -1331,7 +1331,7 @@ rpmostree_compose_builtin_commit (int argc,
|
||||
&argc, &argv,
|
||||
invocation,
|
||||
cancellable,
|
||||
NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
@ -1377,7 +1377,7 @@ rpmostree_compose_builtin_tree (int argc,
|
||||
&argc, &argv,
|
||||
invocation,
|
||||
cancellable,
|
||||
NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
@ -1441,7 +1441,7 @@ rpmostree_compose_builtin_extensions (int argc,
|
||||
&argc, &argv,
|
||||
invocation,
|
||||
cancellable,
|
||||
NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
|
@ -156,7 +156,6 @@ rpmostree_override_builtin_replace (int argc, char **argv,
|
||||
&install_pkgs,
|
||||
&uninstall_pkgs,
|
||||
&sysroot_proxy,
|
||||
NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
@ -198,7 +197,6 @@ rpmostree_override_builtin_remove (int argc, char **argv,
|
||||
&install_pkgs,
|
||||
&uninstall_pkgs,
|
||||
&sysroot_proxy,
|
||||
NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
@ -240,7 +238,6 @@ rpmostree_override_builtin_reset (int argc, char **argv,
|
||||
&install_pkgs,
|
||||
&uninstall_pkgs,
|
||||
&sysroot_proxy,
|
||||
NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
|
@ -169,7 +169,6 @@ rpmostree_builtin_install (int argc,
|
||||
cancellable,
|
||||
NULL, NULL,
|
||||
&sysroot_proxy,
|
||||
NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
@ -220,7 +219,6 @@ rpmostree_builtin_uninstall (int argc,
|
||||
cancellable,
|
||||
NULL, NULL,
|
||||
&sysroot_proxy,
|
||||
NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user