Bug#782426: unblock: systemd/215-15

Michael Biebl biebl at debian.org
Mon Apr 13 21:03:51 BST 2015


Control: retitle -1 unblock: systemd/215-16

Hi Julien,

Am 12.04.2015 um 10:43 schrieb Julien Cristau:
> Control: tags -1 d-i
> 
> On Sat, Apr 11, 2015 at 13:40:57 +0100, Martin Pitt wrote:
> 
>> Package: release.debian.org
>> Severity: normal
>> User: release.debian.org at packages.debian.org
>> Usertags: unblock
>>
>> systemd 215-15 hit unstable two days ago. There have been no new RC
>> bugs since 215-14, so for a change this is a "polishing" upload with
>> small and safe fixes for some corner cases. One was already
>> pre-approved.
>>
>> So far there have been no regression reports, and these changes have
>> already been tested in experimental, Ubuntu, and upstream for a much
>> longer time, so I'm quite confident in them.
>>
>> I attach the full debdiff between 215-14 and -15, but as usual I also
>> link to the individual commits on anonscm.
>>
>> Note that there are zero changes for udev-udeb (for d-i).
>>
> Looks ok to me, but still would like a d-i ack :)
> 

I decided to make another upload today.

It includes 3 changes.

|  [ Christian Seiler ]
|  * Don't run hwclock-save.service in containers. (Closes: #782377)

http://anonscm.debian.org/cgit/pkg-systemd/systemd.git/commit/?id=c22859a6897e9d6e5483bd0164b687875442f10a

The hwclock-save.service is a recent addition and this is an obvious
one-line fix. Didn't see a good reason to not include it even though it
doesn't qualify as release critical.

|  [ Michael Biebl ]
|  * Do not print anything while passwords are being queried. This
should make
|    password prompts without plymouth more usable. (Closes: #765013)

http://anonscm.debian.org/cgit/pkg-systemd/systemd.git/commit/?id=12483a05fe541014d5eee3f5b03072c51ad7c584

This is a cherry-pick of an upstream commit which has been part of v219,
thus seen fairly extensive testing in experimental and ubuntu.

It suppresses output while a password query is running. As we don't
install plymouth by default, I think this is a rather important fix to
get into jessie, since it makes those password prompts decently usable.

| * Skip filesystem check if already done by the initramfs. (Closes:
#782522)

http://anonscm.debian.org/cgit/pkg-systemd/systemd.git/commit/?id=b5db1e5ab22a53e8e8a9facebdd2e08204cc8cf9

This is a followup for the recent changes in initramfs-tools, which now
provide flag files which we use to skip the fsck for / and /usr.
Since I expect systems with local time being not that uncommon, I'd like
to see this fix in jessie to avoid those Superblock time checks.

Complete debdiff between -15 and -16 is attached as well.

Baring any new RC bugs, this should hopefully be the final upload for
jessie.

Thanks for considering.

Michael

-- 
Why is it that all of the instruments seeking intelligent life in the
universe are pointed away from Earth?
-------------- next part --------------
diff --git a/debian/changelog b/debian/changelog
index 929502c..29ff5a3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,15 @@
+systemd (215-16) unstable; urgency=medium
+
+  [ Christian Seiler ]
+  * Don't run hwclock-save.service in containers. (Closes: #782377)
+
+  [ Michael Biebl ]
+  * Do not print anything while passwords are being queried. This should make
+    password prompts without plymouth more usable. (Closes: #765013)
+  * Skip filesystem check if already done by the initramfs. (Closes: #782522)
+
+ -- Michael Biebl <biebl at debian.org>  Mon, 13 Apr 2015 19:42:32 +0200
+
 systemd (215-15) unstable; urgency=medium
 
   [ Adam Conrad ]
diff --git a/debian/extra/hwclock-save.service b/debian/extra/hwclock-save.service
index 1e0f99a..16fbade 100644
--- a/debian/extra/hwclock-save.service
+++ b/debian/extra/hwclock-save.service
@@ -5,6 +5,7 @@ Before=shutdown.target
 ConditionFileIsExecutable=!/usr/sbin/ntpd
 ConditionFileIsExecutable=!/usr/sbin/openntpd
 ConditionFileIsExecutable=!/usr/sbin/chrony
+ConditionVirtualization=!container
 
 [Service]
 Type=oneshot
diff --git a/debian/patches/Skip-filesystem-check-if-already-done-by-the-initram.patch b/debian/patches/Skip-filesystem-check-if-already-done-by-the-initram.patch
new file mode 100644
index 0000000..70ab1ed
--- /dev/null
+++ b/debian/patches/Skip-filesystem-check-if-already-done-by-the-initram.patch
@@ -0,0 +1,44 @@
+From: Michael Biebl <biebl at debian.org>
+Date: Mon, 13 Apr 2015 19:34:23 +0200
+Subject: Skip filesystem check if already done by the initramfs
+
+Newer versions of initramfs-tools already fsck and mount / and /usr in
+the initramfs. Skip the filesystem check in this case.
+
+Closes: #782522
+---
+ src/fstab-generator/fstab-generator.c | 4 +++-
+ units/systemd-fsck-root.service.in    | 1 +
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
+index cb3d9dc..3323884 100644
+--- a/src/fstab-generator/fstab-generator.c
++++ b/src/fstab-generator/fstab-generator.c
+@@ -163,11 +163,13 @@ static bool mount_is_network(struct mntent *me) {
+ }
+ 
+ static bool mount_in_initrd(struct mntent *me) {
++        struct stat sb;
++
+         assert(me);
+ 
+         return
+                 hasmntopt(me, "x-initrd.mount") ||
+-                streq(me->mnt_dir, "/usr");
++                (streq(me->mnt_dir, "/usr") && stat("/run/initramfs/fsck-usr", &sb) == 0);
+ }
+ 
+ static int add_mount(
+diff --git a/units/systemd-fsck-root.service.in b/units/systemd-fsck-root.service.in
+index 4162983..0668107 100644
+--- a/units/systemd-fsck-root.service.in
++++ b/units/systemd-fsck-root.service.in
+@@ -13,6 +13,7 @@ After=systemd-readahead-collect.service systemd-readahead-replay.service
+ Before=local-fs.target shutdown.target
+ 
+ ConditionPathIsReadWrite=!/
++ConditionPathExists=!/run/initramfs/fsck-root
+ 
+ [Service]
+ Type=oneshot
diff --git a/debian/patches/fstab-generator-don-t-rely-on-usr-being-mounted-in-t.patch b/debian/patches/fstab-generator-don-t-rely-on-usr-being-mounted-in-t.patch
deleted file mode 100644
index 1c63e1e..0000000
--- a/debian/patches/fstab-generator-don-t-rely-on-usr-being-mounted-in-t.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From: Michael Stapelberg <stapelberg at debian.org>
-Date: Tue, 29 Oct 2013 22:29:22 +0100
-Subject: =?utf-8?q?fstab-generator=3A_don=E2=80=99t_rely_on_/usr_being_mou?=
- =?utf-8?q?nted_in_the_initrd?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset="utf-8"
-Content-Transfer-Encoding: 8bit
-
-Debian is not there yet. Let’s revert this upstream change for now.
-
-Closes: #724797
----
- src/fstab-generator/fstab-generator.c | 4 +---
- 1 file changed, 1 insertion(+), 3 deletions(-)
-
-diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
-index 1256a1c..21d30c8 100644
---- a/src/fstab-generator/fstab-generator.c
-+++ b/src/fstab-generator/fstab-generator.c
-@@ -160,9 +160,7 @@ static bool mount_is_network(struct mntent *me) {
- static bool mount_in_initrd(struct mntent *me) {
-         assert(me);
- 
--        return
--                hasmntopt(me, "x-initrd.mount") ||
--                streq(me->mnt_dir, "/usr");
-+        return hasmntopt(me, "x-initrd.mount");
- }
- 
- static int add_mount(
diff --git a/debian/patches/manager-do-not-print-anything-while-passwords-are-be.patch b/debian/patches/manager-do-not-print-anything-while-passwords-are-be.patch
new file mode 100644
index 0000000..157db86
--- /dev/null
+++ b/debian/patches/manager-do-not-print-anything-while-passwords-are-be.patch
@@ -0,0 +1,182 @@
+From: =?utf-8?q?Zbigniew_J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sat, 25 Oct 2014 20:30:51 -0400
+Subject: manager: do not print anything while passwords are being queried
+
+https://bugs.freedesktop.org/show_bug.cgi?id=73942
+---
+ src/core/manager.c | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
+ src/core/manager.h |   5 +++
+ 2 files changed, 109 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/manager.c b/src/core/manager.c
+index 4532833..8f7e744 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -25,6 +25,8 @@
+ #include <signal.h>
+ #include <sys/wait.h>
+ #include <unistd.h>
++#include <sys/inotify.h>
++#include <sys/epoll.h>
+ #include <sys/poll.h>
+ #include <sys/reboot.h>
+ #include <sys/ioctl.h>
+@@ -202,6 +204,96 @@ static void manager_print_jobs_in_progress(Manager *m) {
+ 
+ }
+ 
++static int have_ask_password(void) {
++        _cleanup_closedir_ DIR *dir;
++
++        dir = opendir("/run/systemd/ask-password");
++        if (!dir) {
++                if (errno == ENOENT)
++                        return false;
++                else
++                        return -errno;
++        }
++
++        for (;;) {
++                struct dirent *de;
++
++                errno = 0;
++                de = readdir(dir);
++                if (!de && errno != 0)
++                        return -errno;
++                if (!de)
++                        return false;
++
++                if (startswith(de->d_name, "ask."))
++                        return true;
++        }
++}
++
++static int manager_dispatch_ask_password_fd(sd_event_source *source,
++                                            int fd, uint32_t revents, void *userdata) {
++        Manager *m = userdata;
++
++        assert(m);
++
++        flush_fd(fd);
++
++        m->have_ask_password = have_ask_password();
++        if (m->have_ask_password < 0)
++                /* Log error but continue. Negative have_ask_password
++                 * is treated as unknown status. */
++                log_error("Failed to list /run/systemd/ask-password: %s", strerror(m->have_ask_password));
++
++        return 0;
++}
++
++static void manager_close_ask_password(Manager *m) {
++        assert(m);
++
++        m->ask_password_inotify_fd = safe_close(m->ask_password_inotify_fd);
++        m->ask_password_event_source = sd_event_source_unref(m->ask_password_event_source);
++        m->have_ask_password = -EINVAL;
++}
++
++static int manager_check_ask_password(Manager *m) {
++        int r;
++
++        assert(m);
++
++        if (!m->ask_password_event_source) {
++                assert(m->ask_password_inotify_fd < 0);
++
++                mkdir_p_label("/run/systemd/ask-password", 0755);
++
++                m->ask_password_inotify_fd = inotify_init1(IN_NONBLOCK|IN_CLOEXEC);
++                if (m->ask_password_inotify_fd < 0) {
++                        log_error("inotify_init1() failed: %m");
++                        return -errno;
++                }
++
++                if (inotify_add_watch(m->ask_password_inotify_fd, "/run/systemd/ask-password", IN_CREATE|IN_DELETE|IN_MOVE) < 0) {
++                        log_error("Failed to add watch on /run/systemd/ask-password: %m");
++                        manager_close_ask_password(m);
++                        return -errno;
++                }
++
++                r = sd_event_add_io(m->event, &m->ask_password_event_source,
++                                    m->ask_password_inotify_fd, EPOLLIN,
++                                    manager_dispatch_ask_password_fd, m);
++                if (r < 0) {
++                        log_error("Failed to add event source for /run/systemd/ask-password: %m");
++                        manager_close_ask_password(m);
++                        return -errno;
++                }
++
++                /* Queries might have been added meanwhile... */
++                manager_dispatch_ask_password_fd(m->ask_password_event_source,
++                                                 m->ask_password_inotify_fd, EPOLLIN, m);
++        }
++
++        return m->have_ask_password;
++}
++
+ static int manager_watch_idle_pipe(Manager *m) {
+         int r;
+ 
+@@ -435,6 +527,9 @@ int manager_new(SystemdRunningAs running_as, Manager **_m) {
+         m->pin_cgroupfs_fd = m->notify_fd = m->signal_fd = m->time_change_fd = m->dev_autofs_fd = m->private_listen_fd = m->kdbus_fd = -1;
+         m->current_job_id = 1; /* start as id #1, so that we can leave #0 around as "null-like" value */
+ 
++        m->ask_password_inotify_fd = -1;
++        m->have_ask_password = -EINVAL; /* we don't know */
++
+         r = manager_default_environment(m);
+         if (r < 0)
+                 goto fail;
+@@ -815,6 +910,8 @@ void manager_free(Manager *m) {
+         safe_close(m->time_change_fd);
+         safe_close(m->kdbus_fd);
+ 
++        manager_close_ask_password(m);
++
+         manager_close_idle_pipe(m);
+ 
+         udev_unref(m->udev);
+@@ -2479,6 +2576,9 @@ void manager_check_finished(Manager *m) {
+         /* Turn off confirm spawn now */
+         m->confirm_spawn = false;
+ 
++        /* No need to update ask password status when we're going non-interactive */
++        manager_close_ask_password(m);
++
+         if (dual_timestamp_is_set(&m->finish_timestamp))
+                 return;
+ 
+@@ -2801,12 +2901,15 @@ static bool manager_get_show_status(Manager *m) {
+         if (!IN_SET(manager_state(m), MANAGER_STARTING, MANAGER_STOPPING))
+                 return false;
+ 
++        /* If we cannot find out the status properly, just proceed. */
++        if (manager_check_ask_password(m) > 0)
++                return false;
++
+         if (m->show_status > 0)
+                 return true;
+ 
+         /* If Plymouth is running make sure we show the status, so
+          * that there's something nice to see when people press Esc */
+-
+         return plymouth_running();
+ }
+ 
+diff --git a/src/core/manager.h b/src/core/manager.h
+index f2c1b0d..aa99ad6 100644
+--- a/src/core/manager.h
++++ b/src/core/manager.h
+@@ -259,6 +259,11 @@ struct Manager {
+         unsigned n_on_console;
+         unsigned jobs_in_progress_iteration;
+ 
++        /* Do we have any outstanding password prompts? */
++        int have_ask_password;
++        int ask_password_inotify_fd;
++        sd_event_source *ask_password_event_source;
++
+         /* Type=idle pipes */
+         int idle_pipe[4];
+         sd_event_source *idle_pipe_event_source;
diff --git a/debian/patches/series b/debian/patches/series
index 1fdc97f..29ceab0 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -148,6 +148,7 @@ units-make-sure-container-getty-.service-stops-resta.patch
 timesyncd-enable-timesyncd-in-virtual-machines.patch
 logind-handle-runtime-dir-without-CAP_SYS_ADMIN.patch
 sd-bus-create-clean-error-when-a-property-Set-call-w.patch
+manager-do-not-print-anything-while-passwords-are-be.patch
 
 ## Debian specific patches:
 Add-back-support-for-Debian-specific-config-files.patch
@@ -157,7 +158,6 @@ systemctl-don-t-skip-native-units-when-enabling-disa.patch
 Run-update-rc.d-defaults-before-update-rc.d-enable-d.patch
 don-t-try-to-start-autovt-units-when-not-running-wit.patch
 timedated-don-t-rely-on-usr-being-mounted-in-the-ini.patch
-fstab-generator-don-t-rely-on-usr-being-mounted-in-t.patch
 Make-logind-hostnamed-localed-timedated-D-Bus-activa.patch
 Launch-logind-via-a-shell-wrapper.patch
 Start-logind-on-demand-via-libpam-systemd.patch
@@ -203,3 +203,4 @@ core-don-t-fail-to-run-services-in-user-instances-if.patch
 PrivateTmp-shouldn-t-require-tmpfs.patch
 sysv-generator-add-support-for-etc-insserv-overrides.patch
 syslog-Increase-max_dgram_qlen-by-pulling-in-systemd.patch
+Skip-filesystem-check-if-already-done-by-the-initram.patch
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://alioth-lists.debian.net/pipermail/pkg-systemd-maintainers/attachments/20150413/762c40ce/attachment-0002.sig>


More information about the Pkg-systemd-maintainers mailing list