From ea6cfffa857637eb4daec215d020254ad7ff32c6 Mon Sep 17 00:00:00 2001 From: Rui Matos Date: Tue, 31 Jan 2017 13:24:20 +0100 Subject: [PATCH] Honor anaconda's firstboot being disabled --- gnome-initial-setup.spec | 7 +- honor-firstboot-disabled.patch | 242 +++++++++++++++++++++++++++++++++ 2 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 honor-firstboot-disabled.patch diff --git a/gnome-initial-setup.spec b/gnome-initial-setup.spec index 08d7367..5873d5a 100644 --- a/gnome-initial-setup.spec +++ b/gnome-initial-setup.spec @@ -5,12 +5,13 @@ Name: gnome-initial-setup Version: 3.23.1 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Bootstrapping your OS License: GPLv2+ URL: https://wiki.gnome.org/Design/OS/InitialSetup Source0: https://download.gnome.org/sources/%{name}/3.23/%{name}-%{version}.tar.xz +Patch0: honor-firstboot-disabled.patch BuildRequires: krb5-devel BuildRequires: desktop-file-utils @@ -63,6 +64,7 @@ you through configuring it. It is integrated with gdm. %prep %setup -q +%patch0 -p1 %build %configure --enable-software-sources @@ -103,6 +105,9 @@ useradd -rM -d /run/gnome-initial-setup/ -s /sbin/nologin %{name} &>/dev/null || %{_datadir}/polkit-1/rules.d/20-gnome-initial-setup.rules %changelog +* Tue Jan 31 2017 Rui Matos - 3.23.1-2 +- Honor anaconda's firstboot being disabled + * Sun Oct 30 2016 Kalev Lember - 3.23.1-1 - Update to 3.23.1 diff --git a/honor-firstboot-disabled.patch b/honor-firstboot-disabled.patch new file mode 100644 index 0000000..90f43bb --- /dev/null +++ b/honor-firstboot-disabled.patch @@ -0,0 +1,242 @@ +From 20266d351694633d125fc2f34d7738e8bbbd60bd Mon Sep 17 00:00:00 2001 +From: Rui Matos +Date: Tue, 24 Jan 2017 19:19:30 +0100 +Subject: [PATCH 1/3] summary: Move stamp file creation to a global function + +This will be useful in other places. Note that the "done" stamp file +is now created in both existing user and new user modes. + +https://bugzilla.gnome.org/show_bug.cgi?id=777707 +--- + gnome-initial-setup/gnome-initial-setup.c | 21 +++++++++++++++++ + gnome-initial-setup/gnome-initial-setup.h | 2 ++ + .../pages/summary/gis-summary-page.c | 26 +--------------------- + 3 files changed, 24 insertions(+), 25 deletions(-) + +diff --git a/gnome-initial-setup/gnome-initial-setup.c b/gnome-initial-setup/gnome-initial-setup.c +index 396bbea..2ec91b9 100644 +--- a/gnome-initial-setup/gnome-initial-setup.c ++++ b/gnome-initial-setup/gnome-initial-setup.c +@@ -242,3 +242,24 @@ main (int argc, char *argv[]) + g_option_context_free (context); + return status; + } ++ ++void ++gis_ensure_stamp_files (void) ++{ ++ gchar *file; ++ GError *error = NULL; ++ ++ file = g_build_filename (g_get_user_config_dir (), "run-welcome-tour", NULL); ++ if (!g_file_set_contents (file, "yes", -1, &error)) { ++ g_warning ("Unable to create %s: %s", file, error->message); ++ g_clear_error (&error); ++ } ++ g_free (file); ++ ++ file = g_build_filename (g_get_user_config_dir (), "gnome-initial-setup-done", NULL); ++ if (!g_file_set_contents (file, "yes", -1, &error)) { ++ g_warning ("Unable to create %s: %s", file, error->message); ++ g_clear_error (&error); ++ } ++ g_free (file); ++} +diff --git a/gnome-initial-setup/gnome-initial-setup.h b/gnome-initial-setup/gnome-initial-setup.h +index 6dce853..dc5cf60 100644 +--- a/gnome-initial-setup/gnome-initial-setup.h ++++ b/gnome-initial-setup/gnome-initial-setup.h +@@ -35,5 +35,7 @@ typedef struct _GisPage GisPage; + #include "gis-page.h" + #include "gis-keyring.h" + ++void gis_ensure_stamp_files (void); ++ + #endif /* __GNOME_INITIAL_SETUP_H__ */ + +diff --git a/gnome-initial-setup/pages/summary/gis-summary-page.c b/gnome-initial-setup/pages/summary/gis-summary-page.c +index 2d5acf4..1c624d7 100644 +--- a/gnome-initial-setup/pages/summary/gis-summary-page.c ++++ b/gnome-initial-setup/pages/summary/gis-summary-page.c +@@ -214,32 +214,9 @@ log_user_in (GisSummaryPage *page) + } + + static void +-add_setup_done_file (void) +-{ +- gchar *gis_done_path; +- GError *error = NULL; +- +- gis_done_path = g_build_filename (g_get_user_config_dir (), +- "gnome-initial-setup-done", +- NULL); +- +- if (!g_file_set_contents (gis_done_path, "yes", -1, &error)) { +- g_warning ("Unable to create %s: %s", gis_done_path, error->message); +- g_clear_error (&error); +- } +- +- g_free (gis_done_path); +-} +- +-static void + done_cb (GtkButton *button, GisSummaryPage *page) + { +- gchar *file; +- +- /* the tour is triggered by $XDG_CONFIG_HOME/run-welcome-tour */ +- file = g_build_filename (g_get_user_config_dir (), "run-welcome-tour", NULL); +- g_file_set_contents (file, "yes", -1, NULL); +- g_free (file); ++ gis_ensure_stamp_files (); + + switch (gis_driver_get_mode (GIS_PAGE (page)->driver)) + { +@@ -248,7 +225,6 @@ done_cb (GtkButton *button, GisSummaryPage *page) + log_user_in (page); + break; + case GIS_DRIVER_MODE_EXISTING_USER: +- add_setup_done_file (); + g_application_quit (G_APPLICATION (GIS_PAGE (page)->driver)); + default: + break; +-- +2.9.3 + +From 7106bdb98479142acc5087da3a104df0235baaf6 Mon Sep 17 00:00:00 2001 +From: Rui Matos +Date: Tue, 24 Jan 2017 19:22:09 +0100 +Subject: [PATCH 2/3] copy-worker: Copy the "done" stamp file too + +For consistency, instead of creating the "done" stamp file here, we +can let g-i-s handle that and just copy it along with all the others. + +https://bugzilla.gnome.org/show_bug.cgi?id=777707 +--- + gnome-initial-setup/gnome-initial-setup-copy-worker.c | 10 +--------- + 1 file changed, 1 insertion(+), 9 deletions(-) + +diff --git a/gnome-initial-setup/gnome-initial-setup-copy-worker.c b/gnome-initial-setup/gnome-initial-setup-copy-worker.c +index 500d274..c041399 100644 +--- a/gnome-initial-setup/gnome-initial-setup-copy-worker.c ++++ b/gnome-initial-setup/gnome-initial-setup-copy-worker.c +@@ -71,9 +71,7 @@ main (int argc, + { + GFile *src; + GFile *dest; +- GError *error = NULL; + char *initial_setup_homedir; +- gchar *gis_done_file_path; + + initial_setup_homedir = get_gnome_initial_setup_home_dir (); + if (initial_setup_homedir == NULL) +@@ -90,17 +88,11 @@ main (int argc, + #define FILE(path) \ + move_file_from_homedir (src, dest, path); + ++ FILE (".config/gnome-initial-setup-done"); + FILE (".config/run-welcome-tour"); + FILE (".config/dconf/user"); + FILE (".config/goa-1.0/accounts.conf"); + FILE (".local/share/keyrings/login.keyring"); + +- gis_done_file_path = g_build_filename (g_get_user_config_dir (), +- "gnome-initial-setup-done", +- NULL); +- +- if (!g_file_set_contents (gis_done_file_path, "yes", -1, &error)) +- g_warning ("Unable to create %s: %s", gis_done_file_path, error->message); +- + return EXIT_SUCCESS; + } +-- +2.9.3 + +From b2659246f3e2afcbf51a92ee6839775de4e6487a Mon Sep 17 00:00:00 2001 +From: Rui Matos +Date: Mon, 23 Jan 2017 19:42:44 +0100 +Subject: [PATCH 3/3] Exit gracefully if we are disabled systemwide + +Sysadmins might want to disable any kind of initial setup for their +users, perhaps because they pre-configure their environments. We +should provide an easy way to do it. + +At least the anaconda installer provides an option to skip any kind +post-install setup tools so, for now we're only adding support for +that but more might be added in the future. + +https://bugzilla.gnome.org/show_bug.cgi?id=777707 +--- + gnome-initial-setup/Makefile.am | 3 ++- + gnome-initial-setup/gnome-initial-setup.c | 34 +++++++++++++++++++++++++++++++ + 2 files changed, 36 insertions(+), 1 deletion(-) + +diff --git a/gnome-initial-setup/Makefile.am b/gnome-initial-setup/Makefile.am +index d275dda..465b598 100644 +--- a/gnome-initial-setup/Makefile.am ++++ b/gnome-initial-setup/Makefile.am +@@ -11,7 +11,8 @@ AM_CPPFLAGS = \ + -DUIDIR="\"$(uidir)\"" \ + -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \ + -DLIBLOCALEDIR=\""$(prefix)/lib/locale"\" \ +- -DDATADIR=\""$(datadir)"\" ++ -DDATADIR=\""$(datadir)"\" \ ++ -DSYSCONFDIR=\""$(sysconfdir)"\" + + libexec_PROGRAMS = gnome-initial-setup gnome-initial-setup-copy-worker + +diff --git a/gnome-initial-setup/gnome-initial-setup.c b/gnome-initial-setup/gnome-initial-setup.c +index 2ec91b9..10b5f84 100644 +--- a/gnome-initial-setup/gnome-initial-setup.c ++++ b/gnome-initial-setup/gnome-initial-setup.c +@@ -186,6 +186,31 @@ get_mode (void) + return GIS_DRIVER_MODE_NEW_USER; + } + ++static gboolean ++initial_setup_disabled_by_anaconda (void) ++{ ++ GKeyFile *key_file; ++ const gchar *file_name = SYSCONFDIR "/sysconfig/anaconda"; ++ gboolean disabled = FALSE; ++ GError *error = NULL; ++ ++ key_file = g_key_file_new (); ++ if (!g_key_file_load_from_file (key_file, file_name, G_KEY_FILE_NONE, &error)) { ++ if (!g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT) && ++ !g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND)) { ++ g_warning ("Could not read %s: %s", file_name, error->message); ++ } ++ g_error_free (error); ++ goto out; ++ } ++ ++ disabled = g_key_file_get_boolean (key_file, "General", ++ "post_install_tools_disabled", NULL); ++ out: ++ g_key_file_unref (key_file); ++ return disabled; ++} ++ + int + main (int argc, char *argv[]) + { +@@ -226,6 +251,15 @@ main (int argc, char *argv[]) + + mode = get_mode (); + ++ /* We only do this in existing-user mode, because if gdm launches us ++ * in new-user mode and we just exit, gdm's special g-i-s session ++ * never terminates. */ ++ if (initial_setup_disabled_by_anaconda () && ++ mode == GIS_DRIVER_MODE_EXISTING_USER) { ++ gis_ensure_stamp_files (); ++ exit (EXIT_SUCCESS); ++ } ++ + /* When we are running as the gnome-initial-setup user we + * dont have a normal user session and need to initialize + * the keyring manually so that we can pass the credentials +-- +2.9.3 +