-
Notifications
You must be signed in to change notification settings - Fork 198
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
daemon: Remove support for session bus #2854
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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" }, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can we leave this one in? It's related to the peer D-Bus stuff, but still mostly independent, right? There's a bunch of things related to this I'd like to explore. E.g. running There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Cool, this actually works today from a live boot:
We'd want to make that easier of course. Maybe just have coreos-installer automatically add a drop-in for Actually doing a write operation like There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
But the more we do that the more it weakens the Ignition story/focus.
I am very skeptical of this one because any nontrivial use will need to configure rpm-ostree (think e.g. 3rd party repos or local mirroring) and then that gets into configuring the initramfs and... I think most of the desire for rpm-ostree-in-initramfs has been obviated by the Also we don't have tests for There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Oh yes definitely. But I'm hoping to converge towards
I haven't thought this through yet (and I've actually been meaning to experiment with this during a hack day), but as part of coreos/fedora-coreos-tracker#681, basically I was thinking we would match Ignition semantics and apply layered requests before we switchroot. I think this would be cleaner just doing it in a bwrap container though to avoid actually having to drag rpm-ostree into the initrd. So maybe we don't actually need The advantage over live-apply in the real root is that it removes any ambiguity wrt ordering and e.g. configuring the layered things via Ignition itself. It also allows us to enforce strict failure semantics like Ignition.
Yeah, I think some basic tests at least wouldn't be too hard. I can volunteer for that! :) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. OK for now, I kept sysroot since it is orthogonal to removing the session bus bits. That said, on this topic...my thought here is that we can avoid using DBus for these cases. Basically It's much like where systemd ended up where e.g. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
I think that makes sense though likely will require a lot of refactoring to pull off. Definitely worth investigating though! |
||
{ "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) | ||
|
@@ -84,7 +75,11 @@ start_daemon (GDBusConnection *connection, | |
"connection", connection, | ||
"sysroot-path", opt_sysroot ?: "/", | ||
NULL); | ||
return rpm_ostree_daemon != NULL; | ||
if (rpm_ostree_daemon == NULL) | ||
return FALSE; | ||
(void) g_bus_own_name_on_connection (connection, DBUS_NAME, G_BUS_NAME_OWNER_FLAGS_NONE, | ||
NULL, NULL, NULL, NULL); | ||
return TRUE; | ||
} | ||
|
||
static void | ||
|
@@ -95,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) | ||
{ | ||
|
@@ -250,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, | ||
|
@@ -305,31 +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 if (g_getenv ("RPMOSTREE_USE_SESSION_BUS") != NULL) | ||
bus_type = G_BUS_TYPE_SESSION; | ||
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; | ||
(void) g_bus_own_name_on_connection (bus, DBUS_NAME, G_BUS_NAME_OWNER_FLAGS_NONE, | ||
NULL, NULL, NULL, NULL); | ||
} | ||
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); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This
NULL NULL NULL NULL
thing screams bad API design too, so it's good to reduce it!