[systemd-commits] 2 commits - Makefile.am src/util.c TODO units/fedora units/.gitignore units/systemd-ask-password-console.path units/systemd-ask-password-console.service.in units/systemd-ask-password-plymouth.path units/systemd-ask-password-plymouth.service.in units/systemd-ask-password-wall.service.in

Lennart Poettering lennart at kemper.freedesktop.org
Wed Nov 17 20:22:36 PST 2010


 Makefile.am                                    |   16 +--
 TODO                                           |    4 
 src/util.c                                     |  129 +++++++++++++++----------
 units/.gitignore                               |    1 
 units/fedora/plymouth-start.service            |    1 
 units/systemd-ask-password-console.path        |   15 ++
 units/systemd-ask-password-console.service.in  |   15 ++
 units/systemd-ask-password-plymouth.path       |    2 
 units/systemd-ask-password-plymouth.service.in |    2 
 units/systemd-ask-password-wall.service.in     |    4 
 10 files changed, 129 insertions(+), 60 deletions(-)

New commits:
commit 8cf3a8a982661c0bb9b04ff27f6d486b38b1b35e
Author: Lennart Poettering <lennart at poettering.net>
Date:   Thu Nov 18 05:22:25 2010 +0100

    units: enable console ask-password agent by default

diff --git a/Makefile.am b/Makefile.am
index bc7ea9d..a45f333 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -232,7 +232,8 @@ dist_systemunit_DATA = \
 	units/systemd-tmpfiles-clean.timer \
 	units/quotaon.service \
 	units/systemd-ask-password-wall.path \
-	units/systemd-ask-password-plymouth.path
+	units/systemd-ask-password-plymouth.path \
+	units/systemd-ask-password-console.path
 
 nodist_systemunit_DATA = \
 	units/getty at .service \
@@ -259,6 +260,7 @@ nodist_systemunit_DATA = \
 	units/systemd-user-sessions.service \
 	units/systemd-ask-password-wall.service \
 	units/systemd-ask-password-plymouth.service \
+	units/systemd-ask-password-console.service \
 	units/syslog.target \
 	units/halt.service \
 	units/poweroff.service \
@@ -303,6 +305,7 @@ EXTRA_DIST = \
 	units/systemd-user-sessions.service.in \
 	units/systemd-ask-password-wall.service.in \
 	units/systemd-ask-password-plymouth.service.in \
+	units/systemd-ask-password-console.service.in \
 	units/syslog.target.in \
 	units/halt.service.in \
 	units/poweroff.service.in \
@@ -1224,7 +1227,8 @@ install-data-hook:
 			systemd-modules-load.service \
 			systemd-random-seed-load.service \
 			systemd-tmpfiles-setup.service \
-			sysctl.service && \
+			sysctl.service \
+			systemd-ask-password-console.path && \
 		$(LN_S) ../dev-hugepages.automount dev-hugepages.automount && \
 		$(LN_S) ../dev-mqueue.automount dev-mqueue.automount && \
 		$(LN_S) ../proc-sys-fs-binfmt_misc.automount proc-sys-fs-binfmt_misc.automount && \
@@ -1234,7 +1238,8 @@ install-data-hook:
 		$(LN_S) ../systemd-modules-load.service systemd-modules-load.service && \
 		$(LN_S) ../systemd-random-seed-load.service systemd-random-seed-load.service && \
 		$(LN_S) ../systemd-tmpfiles-setup.service systemd-tmpfiles-setup.service && \
-		$(LN_S) ../sysctl.service sysctl.service )
+		$(LN_S) ../sysctl.service sysctl.service && \
+		$(LN_S) ../systemd-ask-password-console.path systemd-ask-password-console.path )
 	( cd $(DESTDIR)$(systemunitdir)/basic.target.wants && \
 		rm -f systemd-tmpfiles-clean.timer && \
 		$(LN_S) ../systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.timer )
@@ -1256,10 +1261,9 @@ if TARGET_FEDORA
 		rm -f halt-local.service && \
 		$(LN_S) $(systemunitdir)/halt-local.service halt-local.service )
 	( cd $(DESTDIR)$(systemunitdir)/sysinit.target.wants && \
-		rm -f plymouth-start.service systemd-ask-password-plymouth.path plymouth-read-write.service && \
+		rm -f plymouth-start.service plymouth-read-write.service && \
 		$(LN_S) ../plymouth-start.service plymouth-start.service && \
-		$(LN_S) ../plymouth-read-write.service plymouth-read-write.service && \
-		$(LN_S) ../systemd-ask-password-plymouth.path systemd-ask-password-plymouth.path )
+		$(LN_S) ../plymouth-read-write.service plymouth-read-write.service )
 	( cd $(DESTDIR)$(systemunitdir)/multi-user.target.wants && \
 		rm -f plymouth-quit.service  && \
 		$(LN_S) ../plymouth-quit.service plymouth-quit.service )
diff --git a/units/.gitignore b/units/.gitignore
index e90f6b3..419838b 100644
--- a/units/.gitignore
+++ b/units/.gitignore
@@ -1,3 +1,4 @@
+systemd-ask-password-console.service
 rescue.service
 systemd-ask-password-plymouth.service
 systemd-ask-password-wall.service
diff --git a/units/fedora/plymouth-start.service b/units/fedora/plymouth-start.service
index 8c0ba8b..61cb82c 100644
--- a/units/fedora/plymouth-start.service
+++ b/units/fedora/plymouth-start.service
@@ -8,6 +8,7 @@
 [Unit]
 Description=Show Plymouth Boot Screen
 DefaultDependencies=no
+Wants=systemd-ask-password-plymouth.path
 After=systemd-vconsole-setup.service udev-settle.service
 Before=systemd-ask-password-plymouth.service
 
diff --git a/units/systemd-ask-password-console.path b/units/systemd-ask-password-console.path
new file mode 100644
index 0000000..9d3d80d
--- /dev/null
+++ b/units/systemd-ask-password-console.path
@@ -0,0 +1,15 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Dispatch Password Requests to Console Directory Watch
+DefaultDependencies=no
+Conflicts=shutdown.target
+Before=basic.target shutdown.target
+
+[Path]
+DirectoryNotEmpty=/dev/.systemd/ask-password
diff --git a/units/systemd-ask-password-console.service.in b/units/systemd-ask-password-console.service.in
new file mode 100644
index 0000000..a2ac09c
--- /dev/null
+++ b/units/systemd-ask-password-console.service.in
@@ -0,0 +1,15 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Dispatch Password Requests to Console
+DefaultDependencies=no
+Conflicts=shutdown.target
+Before=shutdown.target
+
+[Service]
+ExecStart=@rootbindir@/systemd-tty-ask-password-agent --watch --console
diff --git a/units/systemd-ask-password-plymouth.path b/units/systemd-ask-password-plymouth.path
index 8e5e512..1d09223 100644
--- a/units/systemd-ask-password-plymouth.path
+++ b/units/systemd-ask-password-plymouth.path
@@ -8,7 +8,7 @@
 [Unit]
 Description=Forward Password Requests to Plymouth Directory Watch
 DefaultDependencies=no
-Conflicts=shutdown.target
+Conflicts=shutdown.target systemd-ask-password-console.path systemd-ask-password-console.service
 Before=basic.target shutdown.target
 
 [Path]
diff --git a/units/systemd-ask-password-plymouth.service.in b/units/systemd-ask-password-plymouth.service.in
index 8ed22ac..a7cd451 100644
--- a/units/systemd-ask-password-plymouth.service.in
+++ b/units/systemd-ask-password-plymouth.service.in
@@ -8,7 +8,7 @@
 [Unit]
 Description=Forward Password Requests to Plymouth
 DefaultDependencies=no
-Conflicts=shutdown.target
+Conflicts=shutdown.target systemd-ask-password-console.path systemd-ask-password-console.service
 Before=shutdown.target
 
 [Service]
diff --git a/units/systemd-ask-password-wall.service.in b/units/systemd-ask-password-wall.service.in
index e810fe3..71ec1d6 100644
--- a/units/systemd-ask-password-wall.service.in
+++ b/units/systemd-ask-password-wall.service.in
@@ -7,7 +7,9 @@
 
 [Unit]
 Description=Forward Password Requests to Wall
-After=getty.target
+After=systemd-user-sessions.service
 
 [Service]
+ExecStartPre=- at rootbindir@/systemctl stop systemd-ask-password-console.path systemd-ask-password-console.service
+ExecStartPre=- at rootbindir@/systemctl stop systemd-ask-password-plymouth.path systemd-ask-password-plymouth.service
 ExecStart=@rootbindir@/systemd-tty-ask-password-agent --wall

commit 10aa703482a20489c061d76acb040b54fca89c6b
Author: Lennart Poettering <lennart at poettering.net>
Date:   Thu Nov 18 04:46:28 2010 +0100

    util: introduce /etc/os-release so that distros don't need to patch systemd to get a welcome message

diff --git a/TODO b/TODO
index 96ef50c..17e12de 100644
--- a/TODO
+++ b/TODO
@@ -53,7 +53,7 @@
 
 * readahead: btrfs/LVM SSD detection
 
-* man pages for: locale.conf, vconsole.conf modules-load.d
+* man pages for: locale.conf, vconsole.conf, modules-load.d, /etc/os-release
 
 * when processes remain in a service even though the start command failed enter active
 
@@ -71,8 +71,6 @@
 
 * automatically determine TERM= based on tty name even for /dev/console
 
-* declare /etc/os-release cross-distro standard
-
 * fix hotplug transactions
 
 * isolate multi-user.target doesn't start a getty at tty1 if we run it from graphical.target
diff --git a/src/util.c b/src/util.c
index fb2eea3..861f9ea 100644
--- a/src/util.c
+++ b/src/util.c
@@ -2979,80 +2979,113 @@ void status_printf(const char *format, ...) {
 }
 
 void status_welcome(void) {
+        char *pretty_name = NULL, *ansi_color = NULL;
+        const char *const_pretty = NULL, *const_color = NULL;
+        int r;
 
-#if defined(TARGET_FEDORA)
-        char *r;
+        if ((r = parse_env_file("/etc/os-release", NEWLINE,
+                                "PRETTY_NAME", &pretty_name,
+                                "ANSI_COLOR", &ansi_color,
+                                NULL)) < 0) {
 
-        if (read_one_line_file("/etc/system-release", &r) < 0)
-                return;
+                if (r != -ENOENT)
+                        log_warning("Failed to read /etc/os-release: %s", strerror(-r));
+        }
 
-        truncate_nl(r);
+#if defined(TARGET_FEDORA)
+        if (!pretty_name) {
+                if ((r = read_one_line_file("/etc/system-release", &pretty_name)) < 0) {
 
-        /* This tries to mimic the color magic the old Red Hat sysinit
-         * script did. */
+                        if (r != -ENOENT)
+                                log_warning("Failed to read /etc/system-release: %s", strerror(-r));
+                } else
+                        truncate_nl(pretty_name);
+        }
 
-        if (startswith(r, "Red Hat"))
-                status_printf("Welcome to \x1B[0;31m%s\x1B[0m!\n", r); /* Red for RHEL */
-        else if (startswith(r, "Fedora"))
-                status_printf("Welcome to \x1B[0;34m%s\x1B[0m!\n", r); /* Blue for Fedora */
-        else
-                status_printf("Welcome to \x1B[1m%s\x1B[0m!\n", r); /* Highlight for everything else */
+        if (!ansi_color && pretty_name) {
 
-        free(r);
+                /* This tries to mimic the color magic the old Red Hat sysinit
+                 * script did. */
+
+                if (startswith(pretty_name, "Red Hat"))
+                        const_color = "0;31"; /* Red for RHEL */
+                else if (startswith(pretty_name, "Fedora"))
+                        const_color = "0;34"; /* Blue for Fedora */
+        }
 
 #elif defined(TARGET_SUSE)
-        char *r;
 
-        if (read_one_line_file("/etc/SuSE-release", &r) < 0)
-                return;
+        if (!pretty_name) {
+                if ((r = read_one_line_file("/etc/SuSE-release", &pretty_name)) < 0) {
 
-        truncate_nl(r);
+                        if (r != -ENOENT)
+                                log_warning("Failed to read /etc/SuSE-release: %s", strerror(-r));
+                } else
+                        truncate_nl(pretty_name);
+        }
 
-        status_printf("Welcome to \x1B[0;32m%s\x1B[0m!\n", r); /* Green for SUSE */
-        free(r);
+        if (!ansi_color)
+                const_color = "0;32"; /* Green for openSUSE */
 
 #elif defined(TARGET_GENTOO)
-        char *r;
-
-        if (read_one_line_file("/etc/gentoo-release", &r) < 0)
-                return;
 
-        truncate_nl(r);
+        if (!pretty_name) {
+                if ((r = read_one_line_file("/etc/gentoo-release", &pretty_name)) < 0) {
 
-        status_printf("Welcome to \x1B[1;34m%s\x1B[0m!\n", r); /* Light Blue for Gentoo */
+                        if (r != -ENOENT)
+                                log_warning("Failed to read /etc/gentoo-release: %s", strerror(-r));
+                } else
+                        truncate_nl(pretty_name);
+        }
 
-        free(r);
+        if (!ansi_color)
+                const_color = "1;34"; /* Light Blue for Gentoo */
 
 #elif defined(TARGET_DEBIAN)
-        char *r;
 
-        if (read_one_line_file("/etc/debian_version", &r) < 0)
-                return;
+        if (!pretty_name) {
+                if ((r = read_one_line_file("/etc/debian_version", &pretty_name)) < 0) {
 
-        truncate_nl(r);
+                        if (r != -ENOENT)
+                                log_warning("Failed to read /etc/debian_version: %s", strerror(-r));
+                } else
+                        truncate_nl(pretty_name);
+        }
 
-        status_printf("Welcome to Debian \x1B[1;31m%s\x1B[0m!\n", r); /* Light Red for Debian */
+        if (!ansi_color)
+                const_color = "1;31"; /* Light Red for Debian */
 
-        free(r);
 #elif defined(TARGET_UBUNTU)
-        char *desc = NULL;
-        char *codename = NULL;
 
-        if (parse_env_file("/etc/lsb-release", NEWLINE,
-                "DISTRIB_DESCRIPTION", &desc,
-                "DISTRIB_CODENAME", &codename, NULL) < 0)
-                return;
-        if (desc && codename)
-                /* Light Red for Ubuntu */
-                status_printf("Welcome to \x1B[1;31m%s\x1B[0m (%s)\n",
-                        desc, codename);
-        free(desc);
-        free(codename);
+        if ((r = parse_env_file("/etc/lsb-release", NEWLINE,
+                                "DISTRIB_DESCRIPTION", &pretty_name,
+                                NULL)) < 0) {
+
+                if (r != -ENOENT)
+                        log_warning("Failed to read /etc/lsb-release: %s", strerror(-r));
+        }
+
+        if (!ansi_color)
+                const_color = "0;33"; /* Orange/Brown for Ubuntu */
+
 #elif defined(TARGET_ARCH)
-        status_printf("Welcome to \x1B[1;36mArch Linux\x1B[0m!\n"); /* Cyan for Arch */
-#else
-#warning "You probably should add a welcome text logic here."
+
+        if (!pretty_name)
+                const_pretty = "Arch Linux";
+
+        if (!ansi_color)
+                const_color = "1;36"; /* Cyan for Arch */
 #endif
+
+        if (!pretty_name && !const_pretty)
+                const_pretty = "Linux";
+
+        if (!ansi_color && !const_color)
+                const_color = "1";
+
+        status_printf("Welcome to \x1B[%sm%s\x1B[0m!\n",
+                      const_color ? const_color : ansi_color,
+                      const_pretty ? const_pretty : pretty_name);
 }
 
 char *replace_env(const char *format, char **env) {



More information about the systemd-commits mailing list