--- /dev/null
+Enabling persistent logging in journald
+=======================================
+
+To enable persistent logging, create /var/log/journal:
+
+ mkdir -p /var/log/journal
+ systemd-tmpfiles --create --prefix /var/log/journal
+
+systemd will make the journal files owned by the "systemd-journal" group and
+add an ACL for read permissions for users in the "adm" group.
+To grant a user read access to the system journal, add them to one of the two
+groups.
+
+This will allow you to look at previous boot logs with e. g.
+"journalctl -b -1".
+
+If you enable persistent logging, consider uninstalling rsyslog or any other
+system-log-daemon, to avoid logging everything twice.
+
+Debugging boot/shutdown problems
+================================
+
+The "debug-shell" service starts a root shell on VT 9 which is available very
+early during boot and very late during shutdown. You can temporarily enable
+this when booting the system does not get sufficiently far to get a desktop or
+even the text console logins (getty), or when shutdown hangs eternally.
+
+For boot problems the recommended way is to append "systemd.debug-shell" to the
+kernel command line in the bootloader.
+For shutdown problems, run "systemctl start debug-shell" as root, then shut
+down.
+
+WARNING: Please avoid "systemctl enable debug-shell" as this will start the
+debug shell permanently which is a SECURITY HOLE as it allows unauthenticated
+and unrestricted root access to your computer if you forget to disable it!
+Please only enable it if you cannot pass "systemd.debug-shell" to the boot
+loader for some reason, and then immediately run "systemctl disable debug-shell"
+after booting.
+
+Once the boot/shutdown problem happened, switch to VT9 (Ctrl+Alt+F9). There you
+can use the usual systemctl or journalctl commands, or any other Linux shell
+command to list or kill processes. For example, run "systemctl list-jobs" to
+see what's currently being run, or "systemctl" to find units which are not in
+the expected state (e. g. "failed" for boot or still "active" during shutdown),
+and then get more detailled information with "systemctl status -l foo.service"
+to get a service "foo"'s status and recent logging.
+
+Enable and use networkd
+=======================
+networkd is a small and lean service to configure network interfaces, designed
+mostly for server use cases in a world with hotplugged and virtualized
+networking. Its configuration is similar in spirit and abstraction level to
+ifupdown, but you don't need any extra packages to configure bridges, bonds,
+vlan etc. It is not very suitable for managing WLANs yet; NetworkManager is
+still much more appropriate for such Desktop use cases.
+
+networkd is not enabled by default; run
+
+ systemctl enable systemd-networkd
+
+if you want to use it. After that you need to create some *.network
+configuration files. In the simplest case you just want to run DHCP on all
+available Ethernet interfaces:
+
+--- /etc/systemd/network/all-eth.network ---
+[Match]
+Name=e*
+[Network]
+DHCP=yes
+
+This will match on both the kernel "ethN" as well as the predictable interface
+names "en*". Please see man systemd.network(5) for all available configuration
+options and examples.
+
+You need to make sure that interfaces handled by networkd are not handled by
+ifupdown (/etc/network/interfaces) and NetworkManager.
+
+Note that interfaces brought up/down will *not* run hooks in
+/etc/network/if-*.d/.
+
+It is recommended to use networkd together with systemd-resolved(8) to
+dynamically manage /etc/resolv.conf:
+
+ systemctl enable systemd-resolved
+ ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
+
+Debian's networkd has been modified to also work with the resolvconf package.
+
+Going back to SysV init
+=======================
+If you upgraded from Debian 7 (or earlier) and you need to switch back to SysV
+init for one boot, add "init=/lib/sysvinit/init" to the kernel command line.
+This will NOT WORK if you installed Debian 8 (or later) and thus do not have no
+/etc/inittab -- you need to create one first before you can use sysvinit.
+
+If want to switch to SysV init permanently, install the "sysvinit-core"
+package; this will provide a SysV /sbin/init and thus remove the "systemd-sysv"
+package. After that you can do an one-time boot with systemd by adding
+"init=/bin/systemd" to the kernel command line option.
+
+Please do not try to uninstall the "systemd" package itself, parts of it
+(mostly logind) are needed for desktop environments.
--- /dev/null
+Building from source
+--------------------
+Install “git-buildpackage” and run the following steps:
+
+ gbp clone git+ssh://git.debian.org/git/pkg-systemd/systemd.git
+ cd systemd
+ gbp buildpackage
+
+We recommend you use pbuilder to make sure you build in a clean environment:
+
+ gbp buildpackage --git-pbuilder
+
+Patch handling
+--------------
+The official form of modifications to the upstream source are quilt patches in
+debian/patches/, like most Debian packages do. You are welcome to use quilt to
+add or modify patches, but you might prefer using a git commit based approach.
+gbp-pq provides that by synthesizing a "patch-queue/<branch>" local branch
+which represents each quilt patch as git commit. You create this with
+
+ gbp pq import --force
+
+Then you are in the patch-queue branch and can git log, commit, cherry-pick
+upstream commits, rebase, etc. there. After you are done, run
+
+ gbp pq export
+
+which will put you back into master and update debian/patches/ (including
+series). You need to git add etc. new patches, add a changelog and other
+packaging changes, and then debcommit as usual.
+
+Rebasing patches to a new upstream version
+------------------------------------------
+gbp pq's "rebase" command does not work very conveniently as it fails on merge
+conflicts. First, ensure you are in the master branch:
+
+ git checkout master # in case you aren't already
+
+Now, do one of
+
+ (1) To import a new upstream release into the existing master branch for unstable,
+do:
+
+ gbp pq import --force
+ gbp pq switch # switch back to master from patch-queue/master
+ gbp import-orig [...]
+ gbp pq switch # switch to patch-queue/master
+ git rebase master
+
+ (2) To import a new upstream release into a new branch for Debian experimental, do:
+
+ git branch experimental
+ git checkout experimental
+ editor debian/gbp.conf # set "debian-branch=experimental"
+ gbp import-orig [...]
+ git branch patch-queue/experimental patch-queue/master
+ git checkout patch-queue/experimental
+ git rebase experimental
+
+Now resolve all the conflicts, skip obsolete patches, etc. When you are done, run
+
+ gbp pq export
+
+Note that our debian/gbp.conf disables patch numbers.
+
+Cherry-picking upstream patches
+-------------------------------
+You can add the systemd upstream branch as an additional remote to the Debian
+packaging branch. Call it "github" or similar to avoid confusing it with the
+already existing "upstream" branch from git-buildpackage:
+
+ git remote add github https://github.com/systemd/systemd.git
+ git fetch github -n
+
+Now you can look at the upstream log and cherry-pick patches into the
+patch-queue branch:
+
+ gbp pq import --force
+ git log github/master
+ git cherry-pick 123DEADBEEF
--- /dev/null
+systemd (228-7) UNRELEASED; urgency=medium
+
+ * debian/tests/systemd-fsckd: Tame overly strict test for failed plymouth
+ unit, which is a race condition with plymouthd auto-stopping.
+ (LP: #1543144)
+ * Do not warn about Wants depencencies on masked units. (LP: #1543282)
+ * Drop timedated-don-t-rely-on-usr-being-mounted-in-the-ini.patch.
+ initramfs-tools has mounted /usr since Jessie, and tzdata now creates
+ /etc/localtime as a symlink too (see #803144).
+ * Use-different-default-paths-for-various-binaries.patch: Drop path changes
+ for setcap (which is already a build dep and not used at all) and sulogin
+ (which is now in util-linux).
+ * Remove obsolete udev maintainer script checks:
+ - Drop check for kernel >= 2.6.32, which released in 2009.
+ - Drop restarting of some daemons due to the devtmpfs migration, which
+ happened before the above kernel even.
+ - Drop support for forcing upgrades on kernels known not to work via
+ /etc/udev/kernel-upgrade. Don't pretend that this would help, as users
+ could end up with a non-bootable system. Always fail early in preinst
+ when it's still possible to install a working kernel.
+ - Drop postinst test for "running in containers" -- it's actually possible
+ to run udev in containers if you mount /sys r/w and you know what you
+ are doing. Also, the init.d script and systemd service do that check
+ again.
+ - Keep the kernel feature and chroot checks, as these are still useful.
+ Simplify check_kernel_features() by eliminating some variables.
+ - Drop debconf templates. Two of them are obsolete, and having
+ CONFIG_SYSFS_DEPRECATED is now so implausible that this doesn't warrant
+ the overhead and translator efforts.
+ * Drop debian/tests/ifupdown-hotplug. The units moved into ifupdown, so the
+ test should go there too (see #814312).
+ * debian/tests/control: Reorder tests and add a comment which ones should
+ not be run for an upstream build.
+ * debian/tests/control: Rearrange tests and avoid removing test dependencies
+ to minimize testbed resets.
+ * Add debian/extra/checkout-upstream: Script to replace the current
+ source with a checkout of an upstream pull request, branch, or commit,
+ and remove debian/patches/. Call from debian/rules if $TEST_UPSTREAM is
+ set. This will be used for upstream CI.
+ * Enable seccomp support on powerpc, ppc64el, and s390x.
+
+ -- Martin Pitt <mpitt@debian.org> Mon, 08 Feb 2016 22:43:55 +0100
+
+systemd (228-6) unstable; urgency=medium
+
+ * Make-run-lock-tmpfs-an-API-fs.patch: Drop /run/lock from
+ tmpfiles.d/legacy.conf to avoid the latter clobbering the permissions of
+ /run/lock. Fixes fallout from cleanup in -5 that resulted /run/lock to
+ have 0755 permissions instead of 1777. (LP: #1541775)
+
+ -- Martin Pitt <mpitt@debian.org> Thu, 04 Feb 2016 11:46:54 +0100
+
+systemd (228-5) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * Drop systemd-vconsole-setup.service: It has never been installed/used in
+ Debian and is not necessary for Ubuntu any more.
+ * Drop halt-local.service. This has never been documented/used in Debian.
+ (LP: #1532553)
+ * debian/extra/initramfs-tools/scripts/init-bottom/udev: Prefer "nuke"
+ again, it comes from klibc-utils. But fall back to "rm" if it does not
+ exist.
+ * systemd-timesyncd.service.d/disable-with-time-daemon.conf: Also don't run
+ if /usr/sbin/VBoxService exists, as virtualbox-guest-utils already
+ provides time synchronization with the host. (Closes: #812522)
+ * Drop Michael Stapelberg from Uploaders:, he stopped maintenance long ago.
+ Thanks Michael for your great work in the past!
+ * Replace "sysv-rc" dependency with Conflicts: openrc, file-rc. The
+ rationale from #739679 still applies, but with the moving of
+ {invoke,update}-rc.d to init-system-helpers we don't actually need
+ anything from sysv-rc any more other than the assumption that SysV init
+ scripts are enabled in /etc/rc?.d/ for the SysV generator to work (and
+ file-rc and openrc don't do that).
+ * debian/tests/timedated: Verify /etc/localtime symlink. Skip verifying the
+ /etc/timezone file (which is Debian specific) if $TEST_UPSTREAM is set.
+ * debian/tests/localed-locale: Check /etc/locale.conf if $TEST_UPSTREAM is
+ set.
+ * debian/tests/localed-x11-keymap: Test /etc/X11/xorg.conf.d/00-keyboard.conf
+ if $TEST_UPSTREAM is set.
+ * debian/tests/boot-and-services: Check for reaching graphical.target
+ instead of default.target, as the latter is a session systemd state only.
+ * debian/tests/boot-and-services: Skip tests which are known to fail/not
+ applicable with testing upstream builds.
+ * Drop Fix-up-tmpfiles.d-permissions-properly.patch:
+ - /run/lock is already created differently by
+ Make-run-lock-tmpfs-an-API-fs.patch, and contradicts to that.
+ - /run/lock/lockdev/ isn't being used anywhere and got dropped
+ upstream; backport the patch (tmpfiles-drop-run-lock-lockdev.patch).
+ - Move dropping of "group:wheel" (which has never existed in Debian) into
+ debian/rules, to also catch occurrences in other parts of the file which
+ the static patch would overlook.
+ * Shorten persistent identifier for CCW network interfaces (on s390x only).
+ (LP: #1526808)
+ * debian/rules: If $TEST_UPSTREAM is set (when building/testing upstream
+ master instead of distro packages), don't fail on non-installed new files
+ or new library symbols.
+ * Add systemd-sysv conflict to upstart-sysv, and version the upstart
+ conflict. This works with both Debian's and Ubuntu's upstart packages.
+
+ [ Michael Biebl ]
+ * Drop support for the /etc/udev/disabled flag file. This was a workaround
+ for udev failing to install with debootstrap because it didn't use
+ invoke-rc.d and therefor was not compliant with policy-rc.d. See #520742
+ for further details. This is no longer the case, so supporting that file
+ only leads to confusion about its purpose.
+ * Retrigger cleanup of org.freedesktop.machine1.conf and
+ hwclock-save.service now that dpkg has been fixed to correctly pass the
+ old version to postinst on upgrade. (Closes: #802545)
+ * Only ship *.link files as part of the udev package. The *.network files
+ are solely used by systemd-networkd and should therefor be shipped by the
+ systemd package. (Closes: #808237)
+ * Cherry-pick a few fixes from upstream:
+ - Fix unaligned access in initialize_srand(). (Closes: #812928)
+ - Don't run kmod-static-nodes.service if module list is empty. This
+ requires kmod v23. (Closes: #810367)
+ - Fix typo in systemctl(1). (Closes: #807462)
+ - Fix systemd-nspawn --link-journal=host to not fail if the directory
+ already exists. (Closes: #808222)
+ - Fix a typo in logind-dbus.c. The polkit action is named
+ org.freedesktop.login1.power-off, not org.freedesktop.login1.poweroff.
+ - Don't log an EIO error in gpt-auto-generator if blkid finds something
+ which is not a partition table. (Closes: #765586)
+ - Apply ACLs to /var/log/journal and also set them explicitly for
+ system.journal.
+ * Only skip the filesystem check for /usr if the /run/initramfs/fsck-usr
+ flag file exists. Otherwise we break booting with dracut which uses
+ systemd inside the initramfs. (Closes: #810748)
+ * Update the instructions in README.Debian for creating /var/log/journal.
+ They are now in line with the documentation in the systemd-journald(8) man
+ page and ensure that ACLs and group permissions are properly set.
+ (Closes: #800947, #805617)
+ * Drop "systemctl daemon-reload" from lsb init-functions hook. This is no
+ longer necessary as invoke-rc.d and init-system-helpers take care of this
+ nowadays.
+
+ -- Martin Pitt <mpitt@debian.org> Wed, 03 Feb 2016 10:09:46 +0100
+
+systemd (228-4) unstable; urgency=medium
+
+ * debian/udev.README.Debian: Add alternative way of disabling ifnames.
+ (Closes: #809339)
+ * Put back /lib/udev/hotplug.functions, until the three remaining packages
+ that use it stop doing so. (Closes: #810114)
+ * debian/udev.README.Debian: Point out that any change to interface naming
+ rules requires an initrd update.
+
+ -- Martin Pitt <mpitt@debian.org> Mon, 11 Jan 2016 07:12:40 +0100
+
+systemd (228-3) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * debian/rules: Remove temporary debug output from test failures again. All
+ Debian buildd kernels are recent enough now, but add a check for kernels
+ older than 3.13 and ignore test failures for those.
+ * debian/tests/networkd: Factor out dnsmasq specific test "router" setup, so
+ that we can test against other implementations.
+ * debian/tests/networkd: Add router setup using an (isolated) networkd
+ process for configuring the veths and DHCP server.
+ * debian/tests/networkd: On failure, only show journal for current test.
+ * systemd-networkd-resolvconf-update.service: Wait for getting a name
+ server, not just for getting online.
+ * debian/tests/boot-and-services: Wait until bash crash stack trace is in
+ the journal before asserting on it. Also relax RE to work on non-x86
+ architectures.
+ * debian/tests/networkd: If /etc/resolv.conf already has three nameservers,
+ accept that too (as then the additional test one can't be added any more).
+ * Fix FTBFS on x32. Thanks Helmut Grohne! (Closes: #805910)
+ * debian/tests/networkd: For IPv6 tests, also wait for IPv4 address to
+ arrive; s-n-wait-online already exits after getting an IPv6 address, but
+ we verify both.
+ * debian/tests/boot-and-services: Don't check for "Requesting system
+ poweroff" log message in nspawn test, current upstream master does not
+ write that any more. Instead check for "Stopped Container c1".
+ * Add "storage" autopkgtest. Initially this covers some basic use cases with
+ LUKS cryptsetup devices.
+ * Add acl build dependency (for <!nocheck>). Current upstream master now
+ needs it for some test cases.
+ * debian/extra/initramfs-tools/scripts/init-bottom/udev: Use "rm -rf"
+ instead of "nuke". The latter does not exist any more in current
+ initramfs-tools.
+ * Ignore test failures during "make check" if /etc/machine-id is missing
+ (like in ancient local schroots). (Closes: #807884)
+ * debian/extra/rules/80-debian-compat.rules: Remember which device got the
+ "cdrw", "dvd", or "dvdrw" symlink to avoid changing links on device
+ events. (Closes: #774080). Drop the rule for the "cdrom" symlink as that
+ is already created in 60-cdrom_id.rules.
+ * Eliminate "hotplug.functions" udev helper and put the logging functions
+ directly into net.agent. This simplifies the migration of the latter to
+ ifupdown.
+ * Adjust manpages to keep /usr/lib/systemd/{user*,boot,ntp-units.d,modules*}
+ paths, only keep /lib/systemd/{system*,network}. (Closes: #808997)
+ * debian/udev.README.Debian: Fix typo and slight wording improvement.
+ (Closes: #809513)
+ * Drop net.agent, 80-networking.rules, and ifup@.service. These moved to
+ ifupdown 0.8.5 now. Add Breaks: to earlier versions.
+
+ [ Michael Biebl ]
+ * Bump Build-Depends on libdw-dev to (>= 0.158) as per configure.ac.
+ (Closes: #805631)
+ * Make sure all swap units are ordered before the swap target. This avoids
+ that swap devices are being stopped prematurely during shutdown.
+ (Closes: #805133)
+ * Drop unneeded /etc/X11/xinit/xinitrc.d/50-systemd-user.sh from the package
+ and clean up the conffile on upgrades. We have the dbus-user-session
+ package in Debian to properly enable the D-Bus user-session mode which
+ also takes care of updating the systemd --user environment.
+ (Closes: #795761)
+ * Stop testing for unknown arguments in udev maintainer scripts.
+ * Drop networking.service.d/systemd.conf. The ifupdown package now ships a
+ proper service file so this drop-in file is no longer necessary.
+
+ [ Andreas Henriksson ]
+ * Fix LSB init hook to not reload masked services. (Closes: #804882)
+
+ -- Martin Pitt <mpitt@debian.org> Sat, 02 Jan 2016 17:42:56 +0100
+
+systemd (228-2) unstable; urgency=medium
+
+ * Remove wrong endianness conversion in test-siphash24 to fix FTBFS on
+ big-endian machines.
+ * Bump libseccomp-dev build dependency to indicate required versions for
+ backporting to jessie. (Closes: #805497)
+
+ -- Martin Pitt <mpitt@debian.org> Thu, 19 Nov 2015 11:37:45 +0100
+
+systemd (228-1) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * New upstream release:
+ - Fix journald killing by watchdog. (Closes: #805042)
+ - Drop check for /etc/mtab. (Closes: #802025)
+ - Follow unit file symlinks in /usr, but not /etc when looking for
+ [Install] data, to avoid getting confused by Aliases. (Closes: #719695)
+ - journalctl: introduce short options for --since and --until.
+ (Closes: #801390)
+ - journald: Never accept fds from file systems with mandatory locking.
+ (LP: #1514141)
+ - Put nspawn containers in correct slice. (LP: #1455828)
+ * Cherry-pick some networkd fixes from trunk to fix regressions from 228.
+ * debian/rules: Configure with --as-needed to avoid unnecessary binary
+ dependencies.
+ * systemd-networkd-resolvconf-update.service: Increase StartLimitBurst, as
+ this might be legitimately called several times in quick succession. If
+ that part of the "networkd" autopkgtest fails, show the journal log for
+ that service for easier debugging.
+ * debian/tests/boot-and-services: Add test case for systemd-coredump.
+ * Add systemd-coredump postinst/prerm to enable/disable this without a
+ reboot.
+ * debian/tests/networkd: Check for systemd-networkd-wait-online in /usr as
+ well, for usage in other distros.
+ * debian/tests/logind: Skip suspend test if the kernel does not support
+ suspend.
+ * debian/tests/logind: Split tests into functions.
+ * debian/tests/boot-and-services: Ignore failures of console-setup.service,
+ to work around LP: #1516591.
+ * debian/tests/control: Restrict boot-smoke test to isolation-machine, it
+ does not currently work well in LXC.
+ * debian/tests/networkd: Add new test cases for "DHCP=all, IPv4 only,
+ disabling RA" (which should always be fast), "DHCP=all, IPv4 only" (which
+ will require a longer timeout due to waiting 12s for a potential IPv6 RA
+ reply), and "DHCP=ipv4" (with and without RA).
+ * debian/tests/networkd: Fix UnicodeDecodeError under 'C' locale.
+ * debian/tests/networkd: Show networkctl and journal output on failure.
+ * debian/tests/networkd: Fix bytes vs. string TypeError in the IPv6 polling.
+ (LP: #1516009)
+ * debian/tests/networkd: Show contents of test .network file on failure.
+ * debian/tests/networkd: Skip if networkd is already running (safer when
+ running on real systems), and add copyright header.
+ * Bump util-linux dependencies to >= 2.27.1 to ensure that the mount monitor
+ ignores /etc/mtab.
+
+ [ Felipe Sateler ]
+ * Enable elfutils support for getting stack traces for systemd-coredump.
+ * libnss-my{machines,hostname}.postrm: do not remove entries from
+ nsswitch.conf if there are packages from other architectures remaining.
+
+ [ Michael Biebl ]
+ * Drop systemd-setup-dgram-qlen.service. This has been made obsolete by
+ upstream commit 1985486 which bumps net.unix.max_dgram_qlen to 512 early
+ during boot.
+ * Various cleanups to the udev maintainer scripts:
+ - Remove unused tempdir() function.
+ - Properly stop udev daemon on remove.
+ - Stop killing udev daemon on failed upgrades and drop the corresponding
+ starts from preinst.
+ - Stop masking systemd-udevd.service and udev.service during upgrades. We
+ restart the udev daemon in postinst, so those masks seem unnecessary.
+
+ -- Martin Pitt <mpitt@debian.org> Wed, 18 Nov 2015 16:11:59 +0100
+
+systemd (227-3) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * debian/tests/logind: Add tests for scheduled shutdown with and without
+ wall message.
+ * Import upstream fix for not unmounting system mounts (#801361) and drop
+ our revert patch.
+ * debian/tests/boot-smoke: Apply check for failed unmounts only to user
+ systemd processes, i. e. not to pid 1.
+ * Drop Fix-usr-remount-failure-for-split-usr.patch. Jessie has a new enough
+ initramfs-tools already, and this was just an error message, not breaking
+ the boot.
+ * Drop debian-fixup.service in favor of using a tmpfiles.d clause, which is
+ faster.
+ * Drop Order-remote-fs.target-after-local-fs.target.patch. It's mostly
+ academic and only applies to the already known-broken situation that rcS
+ init.d scripts depend on $remote_fs.
+ * Replace reversion of sd_pid_notify_with_fds() msg_controllen fix with
+ proper upstream fix to never block on sending messages on NOTIFY_SOCKET
+ socket.
+ * Drop check for missing /etc/machine-id on "make check" failure; this isn't
+ happening on current buildds any more.
+ * Drop Disable-tests-which-fail-on-buildds.patch, to re-evaluate what still
+ fails and needs fixing. On failure, show kernel version and /etc/hosts
+ to be able to debug them better. The next upload will make the necessary
+ adjustments to fix package builds again.
+
+ [ Michael Biebl ]
+ * Drop dependency on udev from the systemd package. We don't need udev
+ within a container, so this allows us to trim down the footprint by not
+ installing the udev package. As the udev package has Priority: important,
+ it is still installed by default though.
+ * Include the status of the udev package when filing a bug report against
+ systemd, and vice versa.
+ * Use filter instead of findstring, since findstring also matches
+ substrings and we only want direct matches.
+ * systemd.bug-script: Fix typo. (Closes: #804512)
+ * Re-add bits which call SELinux in systemd-user pam service.
+ (Closes: #804565)
+
+ [ Felipe Sateler ]
+ * Add libnss-resolve package. (Closes: #798905)
+ * Add systemd-coredump package. This Conflicts/Replaces/Provides a new
+ "core-dump-handler" virtual package. (Closes: #744964)
+
+ -- Martin Pitt <mpitt@debian.org> Wed, 11 Nov 2015 15:04:26 +0100
+
+systemd (227-2) unstable; urgency=medium
+
+ * Revert "sd_pid_notify_with_fds: fix computing msg_controllen", it causes
+ connection errors from various services on boot. (Closes: #801354)
+ * debian/tests/boot-smoke: Check for failed unmounts. This reproduces
+ #801361 (but not in a minimal VM, just in a desktop one).
+ * Revert "core: add a "Requires=" dependency between units and the
+ slices they are located in". This causes user systemd instances to try and
+ unmount system mounts (and succeed if you login as root).
+ (Closes: #801361)
+
+ -- Martin Pitt <mpitt@debian.org> Fri, 09 Oct 2015 12:34:27 +0200
+
+systemd (227-1) unstable; urgency=medium
+
+ * New upstream release.
+ - Bump watchdog timeout for shipped units to 3 min. (Closes: #776460)
+ - gpt-auto-generator: Check fstab for /boot entries. (Closes: #797326)
+ - Fix group of RuntimeDirectory dirs. (Closes: #798391)
+ - Support %i (and other macros) in RuntimeDirectory. (Closes: #799324)
+ - Bump util-linux/libmount-dev dependencies to >= 2.27.
+ * debian/libsystemd0.symbols: Add new symbols for this release.
+ * debian/extra/initramfs-tools/hooks/udev: Copy all
+ /etc/udev/rules.d/*.rules rules which are not merely overriding the one in
+ /lib/, not just 70-persistent-net.rules. They might contain network names
+ or other bits which are relevant for the initramfs. (Closes: #795494)
+ * ifup@.service: Drop PartOf=network.target; we don't want to stop these
+ units during shutdown. Stopping networking.service already shuts down the
+ interfaces, but contains the safeguard for NFS or other network file
+ systems. Isolating emergency.target still keeps working as before as well,
+ as this also stops networking.service. (Closes: #761909, LP: #1492546)
+
+ -- Martin Pitt <mpitt@debian.org> Thu, 08 Oct 2015 11:34:35 +0200
+
+systemd (226-4) unstable; urgency=medium
+
+ * debian/tests/logind: Be more verbose on failures.
+ * Revert networkd calling if-{up,post-down}.d/ scripts. About half of the
+ existing hooks are not relevant or even actively detrimental when running
+ with networkd. For the relevant ones, a lot of them should be fixed in the
+ projects themselves (using IP_FREEBIND etc.). (Closes: #798625)
+ * Add systemd-networkd-resolvconf-update.{path,service} units to send DNS
+ server updates from networkd to resolvconf, if installed and enabled.
+ * Don't restart logind on upgrades any more. This kills X.org (#798097)
+ while logind doesn't save/restore its open fds (issue #1163), and also
+ gets confused about being idle in between (LP: #1473800)
+
+ -- Martin Pitt <mpitt@debian.org> Fri, 02 Oct 2015 13:44:28 +0200
+
+systemd (226-3) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * README.Debian: Fix "other" typo. Thanks Salvatore Bonaccorso.
+ (Closes: #798737)
+
+ [ Michael Biebl ]
+ * Stop building the compat library packages and drop them for good.
+ * Update debian/copyright.
+
+ -- Michael Biebl <biebl@debian.org> Sat, 19 Sep 2015 19:06:51 +0200
+
+systemd (226-2) unstable; urgency=medium
+
+ * debian/udev.init: Mount /dev file system with nosuid. (LP: #1450960)
+ * udev.postinst: udev 226 introduced predictable interface names for virtio.
+ Create /etc/systemd/network/50-virtio-kernel-names.link on upgrade to
+ disable this, to avoid changing e. g. "eth0" to "ens3" in QEMU instances
+ and similar environments. (Closes: #799034)
+
+ -- Martin Pitt <mpitt@debian.org> Tue, 15 Sep 2015 15:21:09 +0200
+
+systemd (226-1) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * New upstream release:
+ - Fix scheduled shutdown to not shut down immediately. (Closes: #797763)
+ - Fix description of CPE_NAME in os-release(5). (Closes: #797768)
+ * debian/libsystemd0.symbols: Add new symbols from this release.
+ * Enable libseccomp support for mips64, mips64el, and x32. (Closes: #797403)
+ * debian/tests/networkd: Add hotplug tests.
+ * Make networkd call if-up.d/ scripts when it brings up interfaces, to
+ become compatible with ifupdown and NetworkManager for packages shipping
+ hooks. (LP: #1492129)
+ - Add debian/extra/systemd-networkd-dispatcher.c: suid root wrapper for
+ calling if-up.d/ or if-post-down.d/ hook scripts. Install it as
+ root:systemd-networkd 4754 so that only networkd can run it.
+ - Add networkd-call-systemd-networkd-dispatcher-when-links.patch: Call the
+ above wrapper when links go up/down.
+ - debian/tests/networkd: Verify that if-up.d/ and if-post-down.d/ scripts
+ get run for a networkd managed interface.
+ - Note that if-pre-up.d/ and if-down.d/ scripts are *not* being called, as
+ they are often not applicable for networkd (if-pre-up.d) and unreliable
+ (if-down.d).
+ * Drop udev-finish. We needed this for the autogenerated CD and network
+ interface names, but both are gone now.
+ * Drop debian/udev.udev-fallback-graphics.upstart. The vesafb module has
+ been compiled into the kernel in both Debian and Ubuntu for a fair while,
+ this never had a systemd equivalent, and Debian never shipped the
+ accompanying rules for determining $PRIMARY_DEVICE_FOR_DISPLAY.
+ * debian/control: Remove some boilerplate from the long descriptions, to
+ more easily get to the point what a specific package actually does.
+ * debian/README.Debian: As systemd is the default init now, replace the
+ documentation how to switch to systemd with how to switch back
+ (temporarily or permanently) to SysV init. Also move that paragraph to the
+ bottom as it's now less important.
+ * debian/README.Debian: Add a hint why you may want to enable persistent
+ journal, and suggest to uninstall system-log-daemon to avoid duplicate
+ logging.
+ * debian/README.Debian: Add documentation about networkd integration.
+ * Rename 01-mac-for-usb.link to 90-mac-for-usb.link so that it becomes
+ easier to override.
+ * debian-fixup.service just has one purpose now (make /etc/mtab a symlink),
+ so drop the debian/extra/debian-fixup shell script and put the ln command
+ directly into debian-fixup.service. Update the description.
+ * debian/tests/networkd: Check that /etc/resolv.conf gets the DHCP's
+ nameserver in case it is a symlink (i. e. dynamically managed by
+ systemd-resolved or resolvconf).
+ * systemd-networkd-dispatcher: Also pass on the DNS server list to if-up.d/
+ as $IF_DNS_NAMESERVERS, so that resolvconf or similar programs work as
+ expected.
+ * Drop debian/systemd-journal-remote.postrm: Removing system users is
+ potentially dangerous (there might be a leftover process after purging).
+
+ [ Michael Biebl ]
+ * Drop libsystemd-login-dev. All reverse dependencies have been updated to
+ use libsystemd-dev directly.
+ * Update build instructions to use "gbp clone" instead of "gbp-clone" as all
+ gbp-* commands have been removed from git-buildpackage.
+
+ -- Martin Pitt <mpitt@debian.org> Thu, 10 Sep 2015 16:53:53 +0200
+
+systemd (225-1) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * New upstream release.
+ - Fixes FTBFS on alpha. (Closes: #792551)
+ - Fixes machined state tracking logic. (Closes: #788269)
+ * Add better fix for "systemctl link/enable" breakage with full paths.
+ (LP: #1480310)
+ * debian/rules: Add missing $(dh_options) in overridden debhelper targets.
+
+ [ Felipe Sateler ]
+ * Move conffile from systemd to systemd-container package (Closes: #797048)
+
+ [ Michael Biebl ]
+ * Drop unnecessary Conflicts/Replaces from systemd-journal-remote.
+ None of the files in this package were previously shipped by systemd.
+ * Create system users for systemd-journal-{gateway,remote,upload} when
+ installing the systemd-journal-remote package.
+ * Explicitly turn off the features we don't want in a stage1 build.
+ Otherwise ./configure might enable them automatically if the build
+ dependencies are installed and "dh_install --fail-missing" will then fail
+ due to uninstalled files.
+ * Enable GnuTLS support as systemd-journal-remote makes sense mostly with
+ encryption enabled.
+ * Rely on build profiles to determine which packages should be skipped
+ during build and no longer specify that manually.
+ * Drop our patch which removes rc-local-generator.
+ rc-local.service acts as an ordering barrier even if its condition is
+ false, because conditions are evaluated when the service is about to be
+ started, not when it is enqueued. We don't want this ordering barrier on
+ systems that don't need/use /etc/rc.local.
+
+ -- Michael Biebl <biebl@debian.org> Sun, 30 Aug 2015 21:18:59 +0200
+
+systemd (224-2) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * Skip systemd-fsckd autopkgtest if /run/initramfs/fsck-root exists, i. e.
+ the initramfs already ran fsck.
+ * Fix broken ACL in tmpfiles.d/systemd.conf. (Closes: #794645, LP: #1480552)
+ * Add debian/tests/unit-config: Test "systemctl link"; reproduces LP#1480310.
+ * Add a hack to unbreak "systemctl link". (LP: #1480310)
+ * debian/extra/rules-ubuntu/40-hyperv-hotadd.rules: Also apply to Xen, and
+ rename to 40-vm-hotadd.rules.
+ * Fix networkd crash. (Closes: #796358)
+ * debian/rules: Remove all files/empty dirs in systemd which are already
+ shipped by systemd-* or udev, instead of an explicit list.
+ * Bump "mount" dependency to >= 2.26, to ensure "swapon -o" availability.
+ (Closes: #796389)
+ * Install /lib/systemd/network/* into udev instead of systemd, as it's
+ really udev which is evaluating these.
+ * Split out "systemd-container" package with machined and nspawn and enable
+ importd. Add new libbz2-dev, zlib1g-dev, and libcurl-dev build deps.
+ (LP: #1448900)
+ * Move transitional libgcrypt11-dev build dep to libgcrypt20-dev.
+ * debian/rules: Limit check for libraries in /usr to systemd and udev
+ packages, as other packages like systemd-containers can (and do) link to
+ /usr.
+ * Build-depend on dpkg-dev (>= 1.17.14) and bump debhelper version for build
+ profiles support.
+ * Drop "display-managers" autopkgtest, obsolete with dropped
+ default-display-manager-generator.
+ * boot-and-services autopkgtest: Add systemd-container test dependency for
+ the nspawn tests.
+ * Don't enable audit support when building with "stage1" profile, to avoid
+ circular build dep.
+
+ [ Helmut Grohne ]
+ * Improve support for cross-building and bootstrapping.
+
+ [ Michael Biebl ]
+ * Drop default-display-manager-generator. All major desktops now use a
+ display manager which support the new scheme and setup the
+ /etc/systemd/system/display-manager.service symlink correctly.
+ * Add new binary package "systemd-journal-remote" with tools for
+ sending/receiving remote journal logs:
+ systemd-journal-{remote,upload,gatewayd}. (Closes: #742802, LP: #1480952)
+
+ -- Martin Pitt <mpitt@debian.org> Tue, 25 Aug 2015 12:40:35 +0200
+
+systemd (224-1) unstable; urgency=medium
+
+ * New upstream release.
+ * boot-and-services autopkgtest: Ignore thermald. Since 1.4.3-2 it starts by
+ default, but fails in most virtual envs.
+
+ -- Martin Pitt <mpitt@debian.org> Sat, 01 Aug 2015 13:38:57 +0200
+
+systemd (223-2) unstable; urgency=medium
+
+ * Don't enable gnu-efi on ARM. It FTBFSes and cannot really be tested now as
+ there is no available hardware.
+ * debian/extra/initramfs-tools/hooks/udev: Don't fail if
+ /etc/systemd/network/ does not exist. (Closes: #794050)
+
+ -- Martin Pitt <mpitt@debian.org> Thu, 30 Jul 2015 08:25:51 +0200
+
+systemd (223-1) unstable; urgency=medium
+
+ * New upstream release:
+ - Fix systemd-bootchart crash. (Closes: #792403)
+ - Trim list of files in /usr/share/doc/systemd/. (Closes: #791839)
+ - Fix "Invalid argument" failure with some journal files.
+ (Closes: #792090)
+ - tmpfiles: Don't recursively descend into journal directories in /var.
+ (Closes: #791897)
+ - Don't frequently wake up on disabled TimeoutIdleSec=, in particular in
+ automount timers. (LP: #1470845)
+ - tmpfiles: Don't delete lost+found/. (Closes: #788193)
+
+ [ Michael Biebl ]
+ * udev: Remove obsolete rm_conffile/mv_conffile functions from udev.preinst.
+ The udev package is using dpkg-maintscripts-helper now to remove obsolete
+ conffiles.
+ * systemd: Remove obsolete conffile clean up from pre-wheezy.
+ * udev-udeb: Remove scsi_wait_scan hack from the start-udev script as well.
+
+ [ Martin Pitt ]
+ * Enable GNU EFI support and add gnu-efi build dep. This enables/ships the
+ systemd EFI boot loader. (Closes: #787720, LP: #1472283)
+ * networkd autopkgtest: More robust/forceful killing of dnsmasq.
+ * ifup@.service: Drop "oneshot" to run ifup in the background during boot.
+ This avoids blocking network.target on boot with unavailable hotplug
+ interfaces in /etc/network/interfaces. (Closes: #790669, LP: #1425376)
+ * systemd.postinst: Avoid confusing error message about
+ /run/systemd/was-enabled not existing on reconfiguring.
+ * debian/extra/initramfs-tools/hooks/udev: Drop some redundant code.
+ * Fix networkd-wait-online -i to properly wait for the given interfaces
+ only.
+ * Drop debian/extra/base-installer.d/05udev: We use net.ifnames by default
+ now, thus we don't need to copy 70-persistent-*.rules any more.
+ * debian/extra/start-udev: Run d-i's udevd with "notice" log level, just
+ like we did in the initramfs in 219-10.
+ * Fix size explosion of networkd (post-223 patch from trunk).
+
+ [ Julian Wollrath ]
+ * Copy all .link interface naming definitions to initramfs. (Closes: #793374)
+
+ [ Felipe Sateler ]
+ * nss-my*.postinst: configure at the end of the hosts line, not before
+ files. (Closes: #789006)
+
+ -- Martin Pitt <mpitt@debian.org> Thu, 30 Jul 2015 00:02:26 +0200
+
+systemd (222-2) unstable; urgency=medium
+
+ [ Adam Conrad ]
+ * debian/udev-udeb.install: Install new bits for net.ifnames (LP: #1473542)
+ * debian/extra/initramfs-tools/hooks/udev: Do the same for initramfs-tools.
+
+ [ Martin Pitt ]
+ * emergency.service: Wait for plymouth to shut down. Fixes invisible
+ emergency shell with plymouth running endlessly. (LP: #1471258)
+ * Add "networkd" autopkgtest. Covers basic DHCP on IPv4 and IPv4+6 on a veth
+ device.
+
+ [ Michael Biebl ]
+ * Bump package priorities of systemd and systemd-sysv to important to match
+ what has been used in the Debian archive since Jessie.
+ * Drop scsi_wait_scan hack from the udev initramfs-tools script. This Linux
+ kernel module has been broken since 2.6.30 and as a result was removed in
+ 3.5. The Debian Jessie kernel no longer ships this module.
+ (Closes: #752775)
+ * Drop libsystemd-journald-dev and libsystemd-id128-dev. There are no
+ reverse dependencies left and we want to avoid new packages picking up
+ a build dependency on those obsolete transitional packages.
+
+ -- Michael Biebl <biebl@debian.org> Wed, 15 Jul 2015 23:51:15 +0200
+
+systemd (222-1) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * New upstream release:
+ - Fix reload killing BusName= units. (Closes: #746151)
+ - sysv-generator: detect invalid names and escape them. (Closes: #677075)
+ - Document removal of PIDFile on daemon shutdown. (Closes: #734006)
+ - Drop Revert-rules-fix-tests-for-removable-state.patch, the auto-suspend
+ rules now got dropped entirely.
+ * Add Revert-VT-reuse-patches.patch: Revert a couple of logind VT reuse
+ patches which alternately broke lightdm and gdm.
+ * debian/libsystemd0.symbols: Add new symbols from this release.
+ * Disable test-netlink during package build, fails on some buildds.
+ * udev.postinst: Don't call addgroup with --quiet, so that if the "input"
+ group already exists as a non-system group you get a sensible error
+ message. Some broken tutorials forget the --system option.
+ (Closes: #769948, LP: #1455956)
+ * systemd.postinst: Drop the --quiet from the addgroup calls as well, same
+ reason as above. (Closes: #762275)
+ * udev: Drop doc dir symlinking. It has caused too much trouble and only
+ marginally helps to avoid duplication. Such duplication should be dealt
+ with at the distro, not package level.
+ * debian/rules: Entirely ignore $LD_PRELOAD instead of just libfakeroot in
+ the link check, to also avoid libeatmydata. (Closes: #790546)
+ * boot-and-services, display-managers autopkgtests: Install and configure
+ dummy X.org driver, so that these work in headless machines/VMs.
+ * systemd-fsckd autopkgtest: Stop using/asserting on lightdm, just check
+ that default.target is active. lightdm is prone to fail in test
+ environments, and fiddling with it in two other autopkgtests is
+ sufficient.
+ * debian/watch: Adjust to new upstream release model of only providing the
+ github tag tarballs.
+ * Drop dsl-modem.agent. It hasn't been maintained/tested for many years, few
+ if any people actually use this, and this doesn't belong into udev.
+
+ [ Michael Biebl ]
+ * Stop building the Python 3 bindings. They were split into a separate
+ source package upstream and are now built from src:python-systemd. See
+ http://lists.freedesktop.org/archives/systemd-devel/2015-July/033443.html
+ * Remove obsolete --disable-chkconfig configure option.
+ * Move the man pages for libnss-myhostname, libnss-mymachines and udev.conf
+ from systemd into the correct package. Move the zsh completion file for
+ udevadm into the udev package as well. Add Breaks/Replaces accordingly.
+ (Closes: #790879)
+ * Drop rules which remove pre-generated files before build. The upstream
+ tarball no longer ships any pre-generated files so this is no longer
+ necessary.
+ * Fix cleanup rule for Python byte code files.
+
+ -- Michael Biebl <biebl@debian.org> Wed, 08 Jul 2015 18:56:07 +0200
+
+systemd (221-1) unstable; urgency=medium
+
+ * New upstream release 221:
+ - Fix persistent storage links for Xen devices. (LP: #1467151)
+ - Drop all backported patches and port the others to new upstream release.
+ - debian/rules: Drop workarounds for broken 220 tarball, 221 is fine.
+
+ [ Michael Biebl ]
+ * initramfs hook: Stop installing 55-dm.rules, 64-md-raid.rules,
+ 60-persistent-storage-lvm.rules and 60-persistent-storage-dm.rules.
+ The mdadm, lvm2 and dmsetup package provide their own udev hooks nowadays
+ to make sure their udev rules files are installed into the initramfs.
+ Having the copy rules at two places is confusing and makes debugging
+ harder.
+ * Make it possible to skip building udeb packages via
+ DEB_BUILD_OPTIONS="noudeb". This allows quicker builds for local testing
+ and is benefical for derivatives that don't use d-i.
+ * Install API documentation for libudev and libsystemd in their respective
+ packages. Both libraries use man pages now, so we need to be explicit
+ about what is installed where.
+
+ [ Martin Pitt ]
+ * ifupdown-hotplug autopkgtest: Different cloud/desktop environments have
+ different ways of including /etc/network/interfaces.d/, try to get along
+ wit either and skip the test if interfaces.d/ does not get included at
+ all.
+ * Drop obsolete gtk-doc-tools build dependency, gtkdocize autoreconfig, and
+ ./configure options.
+ * libudev-dev.install: Drop gtk-doc files, not built by upstream any more
+ and replaced with manpages.
+ * libsystemd0.symbols: Add new symbols for this release.
+ * debian/rules: Fix paths in manpages as we don't currently have a merged
+ /usr in Debian but have most systemd things in /lib. This replaces the
+ previous huge and maintenance-intense patch.
+ * Drop Accept-mountall-specific-fstab-options.patch. Replaced with
+ systemd.postinst migration code in Ubuntu.
+ * Revert overly aggressive USB autosuspend udev rules change which broke
+ various USB keyboards. (Closes: #789723)
+ * Have rc-local.service output also go to the console. /etc/rc.local often
+ contains status messages which users expect to see during boot.
+ (LP: #1468102)
+ * debian/rules: Install udev.NEWS into libudev1, to get along with Debian's
+ udev -> libudev1 doc dir symlinking. (Closes: #790042)
+
+ -- Martin Pitt <mpitt@debian.org> Sun, 28 Jun 2015 12:05:36 +0200
+
+systemd (220-7) unstable; urgency=medium
+
+ [ Michael Biebl ]
+ * Enable seccomp support on arm64 as well.
+ * Replace the remainder of Fix-paths-in-man-pages.patch with an upstream
+ provided patch.
+
+ [ Martin Pitt ]
+ * Switch to net.ifnames persistent network interfaces (on new
+ installations/for new hardware), and deprecate the old
+ 75-persistent-net-generator.rules. See the ML discussion for details:
+ https://lists.debian.org/debian-devel/2015/05/msg00170.html
+ https://lists.debian.org/debian-devel/2015/06/msg00018.html
+ - Drop Make-net.ifnames-opt-in-instead-of-opt-out.patch, to use
+ net.ifnames by default.
+ - Revert-udev-network-device-renaming-immediately-give.patch: Adjust
+ patch comment.
+ - Drop 75-persistent-net-generator.rules, write_net_rules helper and
+ rule_generator.functions.
+ - Adjust udev's README.Debian accordingly, and describe the migration.
+ This needs to happen manually as there is no robust way of doing this
+ automatically.
+ - Add udev NEWS file for announcing this change and pointing to udev's
+ README.
+ - udev.postinst: Drop write_interfaces_rules().
+ - udev.postinst: Disable net.ifnames on systems which did not support
+ 75-persistent-net-generator.rules (most importantly, virtualized guests)
+ to avoid changing network interface names on upgrade.
+ - LP: #1454254
+ * fsckd-daemon-for-inter-fsckd-communication.patch: Add fsckd.c to
+ POTFILES.in.
+ * ifupdown-hotplug autopkgtest: Fix config name in interfaces.d/, it must
+ not have a suffix in Debian. Also clean up the file after the test.
+ * net.agent: When running under systemd, run everything in the foreground.
+ This avoids killing the forked child in the middle of its operation under
+ systemd when the parent exits.
+ * Check during build that systemd and systemd-journald don't link against
+ anything in /usr, to prevent bugs like #771652 and #788913 in the future.
+ * Drop Skip-99-systemd.rules-when-not-running-systemd-as-in.patch. The rules
+ mostly just attach tags systemd specific properties which are harmless
+ under other init systems, and systemd-sysctl also works there.
+ * 80-networking.rules: Only call agents for add|remove, as they don't handle
+ other events.
+ * Restore udev watches on block device changes. (Closes: #789060,
+ LP: #1466081)
+
+ -- Martin Pitt <mpitt@debian.org> Wed, 17 Jun 2015 22:48:53 +0200
+
+systemd (220-6) unstable; urgency=medium
+
+ * Enable seccomp support on the architectures that provide libseccomp.
+ (Closes: #760299)
+ * boot-and-services autopkgtest: Add SeccompTest for the above.
+ * boot-and-services autopkgtest: Check that we don't get an unwanted
+ tmp.mount unless /etc/fstab explicitly specifies it.
+ * Bump libcap-dev build dep to the version that provides libcap2-udeb.
+ (Closes: #787542)
+ * Stop installing tmp.mount by default; there are still situations where it
+ becomes active through dependencies from other units, which is surprising,
+ hides existing data in /tmp during runtime, and it isn't safe to have a
+ tmpfs /tmp on every install scenario. (Closes: #783509)
+ - d/rules: Ship tmp.mount in /usr/share/systemd/ instead of
+ /lib/systemd/systemd.
+ - systemd.postinst: When tmp.mount already was enabled, install tmp.mount
+ into /etc and keep it enabled.
+ - systemd.postinst: When enabling tmp.mount because of RAMTMP=yes, copy it
+ from /usr/share.
+ - Drop Don-t-mount-tmp-as-tmpfs-by-default.patch and
+ PrivateTmp-shouldn-t-require-tmpfs.patch, not necessary any more.
+
+ -- Martin Pitt <mpitt@debian.org> Thu, 11 Jun 2015 09:25:49 +0200
+
+systemd (220-5) unstable; urgency=medium
+
+ * debian/README.source: Upstream repository moved to github, adjust
+ cherry-picking instructions accordingly.
+ * debian/control: Replace obsolete Python2 version header with
+ X-Python3-Version.
+ * dracut: Fix path to systemd-fsck. (Closes: #787553)
+ * Ignore test failures during build if /etc/machine-id is missing (which is
+ the case in a few buildd chroots still). (Closes: #787258)
+ * debian/udev.README.Debian: Move network interface hotplug documentation
+ into separate section. Point out that "lo" does not need to be configured
+ in ifupdown under systemd.
+ * debian/udev.README.Debian: Document net.ifnames, and how to write udev
+ rules for custom network names.
+ * Add debian/extra/01-mac-for-usb.link: Use MAC based names for network
+ interfaces which are (directly or indirectly) on USB. Path based names
+ are inadequate for dynamic buses like USB.
+ * Fix another escape parsing regression in Exec*= lines. (Closes: #787256)
+ * Disable EFI support for udeb build.
+ * Refine detection of touch screen devices.
+
+ -- Martin Pitt <mpitt@debian.org> Sun, 07 Jun 2015 16:52:33 +0200
+
+systemd (220-4) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * debian/extra/initramfs-tools/scripts/init-top/udev: Drop $ROOTDELAY wait.
+ This does not concern udev in particular, but is handled by
+ initramfs-tools itself (scripts/local). The intention of this parameter is
+ not to statically wait for the given time, but wait *up to* that time for
+ the root device to appear.
+ * Add debian/extra/units/rc-local.service.d/wait-online.conf: Make
+ rc-local.service wait for network-online.target (if it gets started). This
+ not specified by LSB, but has been behaving that way in Debian under SysV
+ init and upstart. (LP: #1451797)
+ * Fix parsing of escape characters in Exec*= lines. (Closes: #787256)
+ * Drop path_is_mount_point-handle-false-positive-on-some-fs.patch (it was
+ already not applied in 220-1). This needs to be re-thought and re-done
+ against the current code, and overlayfs in general. On overlayfs this
+ still reports false positives for files that changed in the upperdir, but
+ this does not break systemd-machine-id-commit any more.
+ * Add debian/extra/rules/80-debian-compat.rules, replacing three of our
+ patches. These are independent udev rules to change device permissions and
+ add CD/DVD symlinks for compatibility with earlier Debian releases.
+
+ [ Michael Biebl ]
+ * Bump Depends on util-linux to make sure we have a sulogin implementation
+ which properly cleans up its children when emergency.service is restarted.
+ (Closes: #784238)
+ * Stop using /sbin/udevd and drop the compat symlink.
+ * Remove any vestiges of /dev/.udev/. This directory has been replaced by
+ /run/udev/ since wheezy.
+ * Drop udev migration code from pre-wheezy.
+
+ -- Martin Pitt <mpitt@debian.org> Tue, 02 Jun 2015 08:16:36 +0200
+
+systemd (220-3) unstable; urgency=medium
+
+ * Fix ProtectSystem=yes to actually protect /usr, not /home.
+ (Closes: #787343)
+ * sd-device: fix device_get_properties_strv(). Fixes environment for
+ processes spawned by udev, in particular "allow-hoplug" ifupdown
+ interfaces via ifup@.service. (Closes: #787263)
+ * Ignore test failures on mipsel; the three failures are not reproducible on
+ the porter box (different kernel?). (See #787258)
+ * Add ifupdown-hotplug autopkgtest. Reproduces #787263.
+ * udev: Bring back persistent storage symlinks for bcache. Thanks David
+ Mohr! (Closes: #787367)
+ * sd-device: Fix invalid property strv pointers. This unbreaks the
+ environment of udev callouts.
+
+ -- Martin Pitt <mpitt@debian.org> Mon, 01 Jun 2015 12:58:20 +0200
+
+systemd (220-2) unstable; urgency=low
+
+ * 220-1 was meant to go to experimental, but was accidentally uploaded to
+ unstable. This was planned for next week anyway, just not on a Friday;
+ we don't revert, but keep an RC bug open for a few days to get broader
+ testing. Reupload 220-1 with its changelog actually pointing to unstable
+ and with all versions in the .changes.
+
+ -- Martin Pitt <mpitt@debian.org> Fri, 29 May 2015 18:54:09 +0200
+
+systemd (220-1) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * New upstream release:
+ - Ship sdio.ids and ids-update.pl in upstream tarball. (Closes: #780650)
+ - Drop non-working "journalctl /dev/sda" example from manpage
+ (Closes: #781604)
+ - man systemd.network: Explain UseDomains a bit more (not used by
+ default). (Closes: #766413)
+ - Ignore comments in /etc/hostname (LP: #1053048)
+ - Drop all backported patches and port the others to new upstream release.
+ * Cherry-pick patch to fix udevd --daemon assertion regression.
+ * Cherry-pick patch to fix udevd worker hang.
+ * systemd.install: systemd.pc moved back into /usr/share/pkgconfig/.
+ * libsystemd0.symbols: Add new symbols from this release.
+ * Drop debian/extra/60-keyboard.hwdb for now. Upstream has a newer version,
+ and it's not nearly as often updated any more as it used to be.
+ * debian/rules: Remove shipped audit_type-to-name.h and
+ keyboard-keys-from-name.gperf and regenerate them during build (bug in
+ upstream 220 tarball).
+ * autopkgtest: Ship/use mock fsck from debian/tests, as it's missing in the
+ 220 tarball.
+ * Add libnss-mymachines binary package. (Closes: #784858)
+ * Add libnss-myhostname binary package, taking over from the very old and
+ unmaintained standalone source package as per its maintainer's request.
+ (Closes: #760514)
+ * Drop buildsys-Don-t-default-to-gold-as-the-linker.patch and set LD in
+ debian/rules on sparc only. This can be dropped entirely once we build
+ GUdev from a separate source.
+ * bootchart autopkgtest: Skip test if /proc/schedstat does not exist, i. e.
+ the kernel is missing CONFIG_SCHEDSTAT. Bootchart requires this.
+ * systemd-fsckd autopkgtest: On Debian plymouth-start stays running, adjust
+ was_running() for that.
+ * systemd-fsckd autopkgtest: In test_systemd_fsck_with_plymouth_failure(),
+ fix plymouthd status check to work under both Debian and Ubuntu.
+ * Replace almost all of Fix-paths-in-man-pages.patch with upstreamed
+ patches. (The remainder is planned to get fixed upstream as well.)
+ * Remove our update-rc.d patches, replace them with upstream patches for
+ /lib/systemd/systemd-sysv-install abstraction, and provide one for
+ update-rc.d. Also implement "is-enabled" command by directly checking for
+ the presence of rcS or rc5 symlinks. (Closes: #760616)
+ * Fix path_is_mount_point for files (regression in 220).
+ * debian/control: Drop obsolete XS-Testsuite:, dpkg adds it automatically.
+ * Use Ubuntu's default NTP server for timesyncd when building on Ubuntu.
+
+ [ Michael Biebl ]
+ * Remove /var/run and /var/lock migration code from debian-fixup. The /run
+ migration was completed in wheezy so this is no longer necessary.
+ * Drop our versioned Depends on initscripts. This was initially added for
+ the /run migration and later to ensure we have a mountnfs hook which
+ doesn't cause a deadlock under systemd. The /run migration was completed
+ in wheezy and jessie ships a fixed mountnfs hook. In addition we now use
+ the ignore-dependencies job mode in our lsb init-functions hook, so it's
+ safe to drop this dependency.
+ * Stop building gudev packages. Upstream has moved the gudev code into a
+ separate repository which is now managed on gnome.org. The gudev packages
+ will be built from src:libgudev from now on. See also
+ http://lists.freedesktop.org/archives/systemd-devel/2015-May/032070.html
+
+ -- Martin Pitt <mpitt@debian.org> Fri, 29 May 2015 10:37:40 +0200
+
+systemd (219-10) experimental; urgency=medium
+
+ * Fix assertion crash with empty Exec*= paths. (LP: #1454173)
+ * Drop Avoid-reload-and-re-start-requests-during-early-boot.patch
+ and Avoid-reloading-services-when-shutting-down.patch: This was fixed more
+ robustly in invoke-rc.d and service now, see #777113.
+ * debian/tests/boot-smoke: Allow 10 seconds for systemd jobs to settle down.
+ * Fix "tentative" state of devices which are not in /dev (mostly in
+ containers), and avoid overzealous cleanup unmounting of mounts from them.
+ (LP: #1444402)
+ * debian/extra/udev-helpers/net.agent: Eliminate cat and most grep calls.
+ * Drop Set-default-polling-interval-on-removable-devices-as.patch; it's long
+ obsolete, CD ejection with the hardware button works properly without it.
+ * Re-enable-journal-forwarding-to-syslog.patch: Update patch description,
+ journal.conf.d/ exists now.
+ * journal: Gracefully handle failure to bind to audit socket, which is known
+ to fail in namespaces (containers) with current kernels. Also
+ conditionalize systemd-journald-audit.socket on CAP_AUDIT_READ.
+ (LP: #1457054)
+ * Put back *.agent scripts and use net.agent in Ubuntu. This fixes escaping
+ of unit names, reduces the delta, and will make it easier to get a common
+ solution for integrating ifup.d/ scripts with networkd.
+ * When booting with "quiet", run the initramfs' udevd with "notice" log
+ level. (LP: #1432171)
+ * Add sigpwr-container-shutdown.service: Power off when receiving SIGPWR in
+ a container. This makes lxc-stop work for systemd containers.
+ (LP: #1457321)
+ * write_net_rules: Escape '{' and '}' characters as well, to make this work
+ with busybox grep. Thanks Faidon Liambotis! (Closes: #765577)
+
+ -- Martin Pitt <mpitt@debian.org> Thu, 21 May 2015 09:43:52 +0200
+
+systemd (219-9) experimental; urgency=medium
+
+ * 75-persistent-net-generator.rules: Fix rules for ibmveth (it's a driver,
+ not a subsystem). (LP: #1437375)
+ * debian/tests/unit-config: Add tests for systemctl enable/disable on a
+ SysV-only unit. Reproduces LP #1447807.
+ * Fix systemctl enable for SysV scripts without a native unit. We must not
+ try and enable the nonexisting unit then. (LP: #1447807)
+ * Drop Add-env-variable-for-machine-ID-path.patch. systemd should always
+ be installed via the essential "init" in buildd schroots now.
+ * debian/README.source: Update git-buildpackage commands for the renames in
+ 0.6.24.
+ * Make apparmor run before networking, to ensure that profiles apply to
+ e. g. dhclient (LP: #1438249):
+ - Rename networking.service.d/network-pre.conf to systemd.conf, and add
+ After=apparmor.service.
+ - ifup@.service: Add After=apparmor.service.
+ - Add Breaks: on apparmor << 2.9.2-1, which dropped its dependency to
+ $remote_fs.
+ * Drop login-don-t-overmount-run-user-UID-on-upgrades.patch and
+ login-don-t-overmount-run-user-UID-on-upgrades.patch, these were only
+ needed for upgrades from wheezy to jessie.
+ * systemd.{pre,post}inst: Clean up obsolete (pre-wheezy/jessie) upgrade
+ fixes.
+ * systemd-fsckd autopkgtest: Stop assuming that
+ /etc/default/grub.d/90-autopkgtest.cfg exists.
+ * systemd-fsckd autopkgtest: Add missing plymouth test dependency.
+ * Drop core-mount-ensure-that-we-parse-proc-self-mountinfo.patch, and bump
+ util-linux dependency to the version which enables
+ --enable-libmount-force-mountinfo.
+
+ -- Martin Pitt <mpitt@debian.org> Wed, 13 May 2015 12:27:21 +0200
+
+systemd (219-8) experimental; urgency=medium
+
+ [ Michael Biebl ]
+ * Skip filesystem check if already done by the initramfs. (Closes: #782522)
+ * Drop hard-coded versioned dependency on libapparmor1. Bump the
+ Build-Depends on libapparmor-dev instead. This ensures a proper versioned
+ dependency via Build-Depends-Package.
+ * Revert "Make apparmor run before networking". This causes dependency
+ cycles while apparmor still depends on $remote_fs.
+ * Cleanup hwclock-save.service symlinks when upgrading from the jessie
+ version.
+
+ [ Martin Pitt ]
+ * cryptsetup: Implement offset and skip options. (Closes: #751707,
+ LP: #953875)
+ * logind autopkgtest: Add test for suspending on lid switch close.
+ This reproduces LP #1444166 (lid switch not working in the first few
+ minutes after boot).
+ * Reduce the initial suspend supression time from 3 minutes to 30 seconds,
+ and make it configurable. (LP: #1444166)
+ * Fix double free crash in "systemctl enable" when calling update-rc.d and
+ the latter fails. (Closes: #764613, LP: #1426588)
+ * hwdb: Fix wireless switch on Dell Latitude (LP: #1441849)
+ * Fix assertion crash when reading a service file with missing ' and
+ trailing space. (LP: #1447243)
+ * ifup@.service: Set IgnoreOnIsolate, so that "systemctl default" does not
+ shut down network interfaces. (Closes: #762953, LP: #1449380).
+ Add PartOf=network.target, so that stopping network.target also stops
+ network interfaces (so that isolating emergency.target and similar work as
+ before).
+ * Revert upstream commit 743970d which immediately SIGKILLs units during
+ shutdown. This leads to problems like bash not being able to write its
+ history, mosh not saving its state, and similar failed cleanup actions.
+ (Closes: #784720, LP: #1448259)
+ * Drop the reversion of "journald: allow restarting journald without losing
+ stream connections", and replace with proper upstream fix for
+ sd_pid_notify_with_fds(). (See Debian #778970, LP #1423811; LP: #1437896)
+
+ -- Martin Pitt <mpitt@debian.org> Wed, 29 Apr 2015 17:13:41 +0200
+
+systemd (219-7) experimental; urgency=medium
+
+ [ Martin Pitt ]
+ * Make systemd-sysv's dependency to systemd unversioned. The package just
+ contains 6 symlinks and thus isn't sensitive at all against version
+ mismatches. This avoids running into circular dependencies when testing
+ local debs.
+ * Revert "udev: Drop hwdb-update dependency" and replace with upstream patch
+ which moves it to systemd-udev-trigger.service.
+ * display-managers autopkgtest: Properly wait until all jobs are finished.
+ * display-managers autopkgtest: Reset failed units between tests, to avoid
+ running into restart limits and for better test isolation.
+ * Enable timesyncd in virtual machines. (Closes: #762343)
+
+ [ Adam Conrad ]
+ * debian/systemd.{triggers,postinst}: Trigger a systemctl daemon-reload
+ when init scripts are installed or removed (Closes: #766429)
+
+ [ Didier Roche ]
+ * Squash all fsckd patches in one (as fsckd and such will be removed
+ soon upstream), containing various fixes from upstream git and refactor
+ the connection flow to upstream's suggestion. Modify the man pages to match
+ those modifications as well. Amongst others, this suppresses "Couldn't
+ connect to plymouth" errors if plymouth is not running.
+ (Closes: #782265, LP: #1429171)
+ * Keep plymouth localized messages in a separate patch for easier updates in
+ the future and refresh to latest upstream.
+ * display-managers autopkgtest: Use ExecStart=sleep instead of the actual
+ lightdm binary, to avoid errors from lightdm startup. Drop the now
+ unnecessary "needs-recommends" to speed up the test.
+
+ -- Martin Pitt <mpitt@debian.org> Fri, 10 Apr 2015 11:08:33 +0200
+
+systemd (219-6) experimental; urgency=medium
+
+ [ Martin Pitt ]
+ * Import patches from v219-stable branch (up to 85a6fab).
+ * boot-and-services autopkgtest: Add missing python3 test dependency.
+ * Make apparmor run before networking, to ensure that profiles apply to
+ e. g. dhclient (LP: #1438249):
+ - Rename networking.service.d/network-pre.conf to systemd.conf, and add
+ After=apparmor.service.
+ - ifup@.service: Add After=apparmor.service.
+ * udev: Drop hwdb-update dependency, which got introduced by the above
+ v219-stable branch. This causes udev and plymouth to start too late and
+ isn't really needed in Debian yet as we don't support stateless systems
+ yet and handle hwdb.bin updates through dpkg triggers. (LP: #1439301)
+
+ [ Didier Roche ]
+ * Fix mount point detection on overlayfs and similar file systems without
+ name_to_handle_at() and st_dev support. (LP: #1411140)
+
+ [ Christian Seiler ]
+ * Make the journald to syslog forwarding more robust by increasing the
+ maximum datagram queue length from 10 to 512. (Closes: #762700)
+
+ [ Marco d'Itri ]
+ * Avoid writing duplicate entries in 70-persistent-net.rules by double
+ checking if the new udev rule has already been written for the given
+ interface. This happens if multiple add events are generated before the
+ write_net_rules script returns and udevd renames the interface.
+ (Closes: #765577)
+
+ -- Martin Pitt <mpitt@debian.org> Thu, 02 Apr 2015 09:14:48 +0200
+
+systemd (219-5) experimental; urgency=medium
+
+ [ Didier Roche ]
+ * Add "systemd-fsckd" autopkgtest. (LP: #1427312)
+ * cmdline-upstart-boot autopkgtest: Update to Ubuntu's upstart-sysv split
+ (test gets skipped on Debian while upstart-sysv does not yet exist there).
+ * Cherry-pick a couple of upstream commits for adding transient state,
+ fixing a race where mounts become available before the device being
+ available.
+ * Ensure PrivateTmp doesn't require tmpfs through tmp.mount, but rather adds
+ an After relationship. (Closes: #779902)
+
+ [ Martin Pitt ]
+ * journald: Suppress expected cases of "Failed to set file attributes"
+ errors. (LP: #1427899)
+ * Add systemd-sysv.postinst: Update grub on first installation, so that the
+ alternative init system boot entries get updated.
+ * debian/tests: Call /tmp/autopkgtest-reboot, to work with autopkgtest >=
+ 3.11.1.
+ * Check for correct architecture identifiers for SuperH. (Closes: #779710)
+ * Fix tmpfiles.d to only apply the first match again (regression in 219).
+ (LP: #1428540)
+ * /lib/lsb/init-functions.d/40-systemd: Don't ignore systemd unit
+ dependencies in "degraded" mode. (LP: #1429734)
+
+ [ Michael Biebl ]
+ * debian/udev.init: Recognize '!' flag with static device lists, to work
+ with kmod 20. (Closes: #780263)
+
+ [ Craig Magina ]
+ * rules-ubuntu/71-power-switch-proliant.rules: Add support for HP ProLiant
+ m400 Server Cartridge soft powerdown on Linux 3.16. (LP: #1428811)
+
+ [ Scott Wakeling ]
+ * Rework package description to be more accurate. (Closes: #740372)
+
+ -- Martin Pitt <mpitt@debian.org> Thu, 26 Mar 2015 16:31:04 +0100
+
+systemd (219-4) experimental; urgency=medium
+
+ * tmpfiles: Avoid creating duplicate ACL entries. Add postinst code to clean
+ them up on upgrade. (Closes: #778656)
+ * bootchart: Fix path to default init. (LP: #1423867)
+ * Add "bootchart" autopkgtest, to spot regressions like the above.
+ * autopkgtests: Factorize out "assert.sh" utility functions, and use them in
+ the tests for useful failure messages.
+ * Downgrade requirement for timedated, hostnamed, localed-locale, and
+ logind autopkgtests from machine to container isolation.
+ * boot-and-services and display-manager autopkgtest: Add systemd-sysv as
+ proper test dependency instead of apt-get installing it. This works now
+ also under Ubuntu 15.04.
+ * boot-and-services autopkgtest: Check cleanup of temporary files during
+ boot. Reproduces #779169.
+ * Clean up /tmp/ directory again. (Closes: #779169, LP: #1424992)
+
+ -- Martin Pitt <mpitt@debian.org> Fri, 27 Feb 2015 07:02:09 +0100
+
+systemd (219-3) experimental; urgency=medium
+
+ * sysv-generator: fix wrong "Overwriting existing symlink" warnings.
+ (Closes: #778700)
+ * Add systemd-fsckd multiplexer and feed its output to plymouth. This
+ provides an aggregate progress report of running file system checks and
+ also allows cancelling them with ^C, in both text mode and Plymouth.
+ (Closes: #775093, #758902; LP: #1316796)
+ * Revert "journald: allow restarting journald without losing stream
+ connections". This was a new feature in 219, but currently causes boot
+ failures due to logind and other services not starting up properly.
+ (Closes: #778970; LP: #1423811)
+ * Add "boot-smoke" autopkgtest: Test 20 successful reboots in a row, and
+ that there are no connection timeouts or stalled jobs. This reproduces the
+ above regression.
+ * debian/tests/localed-locale: Set up locale and keyboard default files on a
+ minimal unconfigured testbed.
+ * Add missing python3 test dependency to cmdline-upstart-boot and
+ display-managers autopkgtests.
+ * debian/tests/boot-and-services: Skip AppArmor test if AppArmor is not
+ enabled.
+ * debian/tests/boot-and-services: Reboot also if lightdm was just installed
+ but isn't running yet.
+
+ -- Martin Pitt <mpitt@debian.org> Mon, 23 Feb 2015 09:52:12 +0100
+
+systemd (219-2) experimental; urgency=medium
+
+ * Fix UTF-16 to UTF-8 conversion on big-endian machines. (Closes: #778654)
+ * Disable new new test-sigbus, it fails on some buildds due to too old
+ kernels. (part of #778654)
+ * debian/README.Debian, debian/systemd.postinst: Drop setfacl call for
+ /var/log/journal, this is now done automatically by tmpfiles.d/systemd.conf.
+ * Drop "acl" dependency, not necessary any more with the above.
+ * debian/tests/boot-and-services: Move to using /var/lib/machines/,
+ /var/lib/containers is deprecated.
+
+ -- Martin Pitt <mpitt@debian.org> Wed, 18 Feb 2015 15:29:42 +0100
+
+systemd (219-1) experimental; urgency=medium
+
+ [ Martin Pitt ]
+ * New upstream release:
+ - Fix spelling mistake in systemd.unit(5). (Closes: #773302)
+ - Fix timeouts with D-Bus, leading to SIGFPE. (Closes: #774012)
+ - Fix load/save of multiple rfkill states. (Closes: #759489)
+ - Non-persistent journal (/run/log/journal) is now readable by group adm.
+ (Closes: #771980)
+ - Read netdev user mount option to correctly order network mounts after
+ network.target. (Closes: #769186)
+ - Fix 60-keyboard.hwdb documentation and whitespace handling.
+ (Closes: #757367)
+ - Fix ThinkPad X1 Carbon 20BT trackpad buttons (LP: #1414930)
+ - Drop all backported patches and port the others to new upstream release.
+ * Bump libblkid-dev build dependency as per upstream configure.ac.
+ * debian/systemd.install: Add new language-fallback-map file.
+ * debian/udev.install: Add new systemd-hwdb tool.
+ * debian/libsystemd0.symbols: Add new symbols from this release.
+ * tmpfiles.d/systemd.conf: Drop "wheel" ACL (that group does not exist in
+ Debian) to make the ACL for "adm" actually work.
+ * debian/rules: Explicitly disable importd for now; it should still mature a
+ bit. Explicitly enable hwdb support.
+ * /lib/lsb/init-functions.d/40-systemd: Call systemctl is-system-running
+ with --quiet. (LP: #1421058)
+ * debian/systemd.postrm: Clean getty@tty1.service and remote-fs.target
+ enablement symlinks on purge. (Closes: #778499)
+ * Move all Debian specific units in the systemd package into
+ debian/extra/units/ and simplify debian/systemd.install.
+ * Enable timesyncd by default. Add a config drop-in to not start if ntp,
+ openntpd, or chrony is installed. (Closes: #755722)
+ * debian/systemd.links: Drop obsolete hwclockfirst.service mask link, this
+ was dropped in wheezy's util-linux already.
+ * debian/udev.postinst: Call systemd-hwdb instead of udevadm hwdb.
+
+ [ Michael Biebl ]
+ * Stop removing firstboot man pages. They are now installed conditionally.
+
+ -- Martin Pitt <mpitt@debian.org> Tue, 17 Feb 2015 15:51:38 +0100
+
+systemd (218-10) experimental; urgency=medium
+
+ * Pull latest keymaps from upstream git. (LP: #1334968, #1409721)
+ * rules: Fix by-path of mmc RPMB partitions and don't blkid them. Avoids
+ kernel buffer I/O errors and timeouts. (LP: #1333140)
+ * Clean up stale mounts when ejecting CD drives with the hardware eject
+ button. (LP: #1168742)
+ * Document systemctl --failed option. (Closes: #767267)
+ * Quiesce confusing and irrelevant "failed to reset devices.list" warning.
+ (LP: #1413193)
+ * When booting with systemd-bootchart, default to run systemd rather than
+ /sbin/init (which might not be systemd). (LP: #1417059)
+ * boot-and-services autopkgtest: Add CgroupsTest to check cgroup
+ creation/cleanup behaviour. This reproduces #777601 and verifies the fix
+ for it.
+
+ -- Martin Pitt <mpitt@debian.org> Fri, 13 Feb 2015 12:25:06 +0100
+
+systemd (218-9) experimental; urgency=medium
+
+ [ Martin Pitt ]
+ * debian/tests/logind: With dropped systemd-logind-launch we don't have a
+ visible /sys/fs/cgroup/systemd/ any more under cgmanager. So adjust the
+ test to check /proc/self/cgroup instead.
+ * Add unit-config autopkgtest to check systemd unit/sysv init enabling and
+ disabling via systemctl. This also reproduces #777613.
+ * systemctl: Always install/enable/disable native units, even if there is a
+ corresponding SysV script and we call update-rc.d; while the latter
+ handles WantedBy=, it does not handle Alias=. (Closes: #777613)
+ * cgroup: Don't trim cgroup trees created by someone else, just the ones
+ that systemd itself created. This avoids cleaning up empty cgroups from
+ e.g. LXC. (Closes: #777601)
+ * Don't parse /etc/mtab for current mounts, but /proc/self/mountinfo. If the
+ former is a file, it's most likely outdated on boot, leading to race
+ conditions and unmounts during boot. (LP: #1419623)
+
+ [ Michael Biebl ]
+ * Explicitly disable the features we don't want to build for those with
+ autodetection. This ensures reliable build results in dirty build
+ environments.
+ * Disable AppArmor support in the udeb build.
+ * core: Don't fail to run services in --user instances if $HOME is missing.
+ (Closes: #759320)
+
+ [ Didier Roche ]
+ * default-display-manager-generator: Avoid unnecessary /dev/null symlink and
+ warning if there is no display-manager.service unit.
+
+ -- Michael Biebl <biebl@debian.org> Thu, 12 Feb 2015 18:45:12 +0100
+
+systemd (218-8) experimental; urgency=medium
+
+ [ Martin Pitt ]
+ * boot-and-services autopkgtest: Ensure that there are no failed units,
+ except possibly systemd-modules-load.service (as that notoriously fails
+ with cruft in /etc/modules).
+ * Revert "input" system group creation in systemd.postinst from 218-7. It's
+ already done in udev.postinst.
+ * ifup@.service: Revert checking for existance of ifupdown config for that
+ interface, net.agent already does that.
+ * Drop Also-redirect-to-update-rc.d-when-not-using-.service.patch; not
+ necessary any more with the current version (mangle_names() already takes
+ care of this).
+ * Merge into Add-support-for-rcS.d-init-scripts-to-the-sysv-gener.patch:
+ - Do-not-order-rcS.d-services-after-local-fs.target-if.patch, as it
+ partially reverts the above, and is just fixing it.
+ - Map-rcS.d-init-script-dependencies-to-their-systemd-.patch as it's just
+ adding some missing functionality for the same purpose.
+ * Merge Run-update-rc.d-defaults-before-update-rc.d-enable-d.patch into
+ Make-systemctl-enable-disable-call-update-rc.d-for-s.patch as the former
+ is fixing the latter and is not an independent change.
+ * Drop Launch-logind-via-a-shell-wrapper.patch and systemd-logind-launch
+ wrapper. The only remaining thing that we need from it is to create
+ /run/systemd/, move that into the D-BUS service file directly.
+ * /lib/lsb/init-functions.d/40-systemd: Avoid deadlocks during bootup and
+ shutdown. DHCP/ifupdown and similar hooks which call "/etc/init.d/foo
+ reload" can easily cause deadlocks, since the synchronous wait plus
+ systemd's normal behaviour of transactionally processing all dependencies
+ first easily causes dependency loops. Thus during boot/shutdown operate
+ only on the unit and not on its dependencies, just like SysV behaves.
+ (Closes: #777115, LP: #1417010)
+ * Only start logind if dbus is installed. This fixes the noisy startup
+ failure in environments without dbus, such as LXC containers or servers.
+ (part of #772700)
+ * Add getty-static.service unit which starts getty@.service on tty 2 to 6 if
+ dbus is not installed, and hence logind cannot auto-start them on demand.
+ (Closes: #772700)
+
+ [ Michael Biebl ]
+ * Update insserv-generator and map $x-display-manager to
+ display-manager.service, following the recent change in sysv-generator.
+ This avoids creating references to a no longer existing
+ x-display-manager.target unit.
+
+ -- Martin Pitt <mpitt@debian.org> Mon, 09 Feb 2015 18:07:22 +0100
+
+systemd (218-7) experimental; urgency=medium
+
+ [ Martin Pitt ]
+ * Don't attempt to mount the same swap partition twice through different
+ device node aliases. (Closes: #772182, LP: #1399595)
+ * logind: handle closing sessions over daemon restarts. (Closes: #759515,
+ LP: #1415104)
+ * logind: Fix sd_eviocrevoke ioctl call, to make forced input device release
+ after log out actually work.
+ * debian/rules: Drop obsolete --disable-multi-seat-x and
+ --with-firmware-path configure options.
+ * debian/udev.README.Debian: Trim the parts which are obsolete, wrong, or
+ described in manpages. Only keep the Debian specific bits.
+ (Part of #776546)
+ * Actually install udev's README.Debian when building for Debian.
+ (Closes: #776546)
+ * Create system group "input" which was introduced in 215. (LP: #1414409)
+ * ifup@.service: Don't fail if the interface is not configured in
+ /etc/network/interfaces at all. (LP: #1414426)
+
+ [ Michael Biebl ]
+ * Update Vcs-Browser URL to use cgit and https.
+ * Map $x-display-manager LSB facility to display-manager.service instead of
+ making it a target. Using a target had the downside that multiple display
+ managers could hook into it at the same time which could lead to several
+ failed start attempts for the non-default display manager.
+
+ -- Martin Pitt <mpitt@debian.org> Sun, 01 Feb 2015 20:48:49 +0100
+
+systemd (218-6) experimental; urgency=medium
+
+ [ Martin Pitt ]
+ * initramfs hook: Install 61-persistent-storage-android.rules if it exists.
+ * Generate POT file during package build, for translators.
+ * Pull latest keymaps from upstream git.
+ * Order ifup@.service and networking.service after network-pre.target.
+ (Closes: #766938)
+ * Tone down "Network interface NamePolicy= disabled on kernel commandline,
+ ignoring" info message to debug, as we expect this while we disable
+ net.ifnames by default. (Closes: #762101, LP: #1411992)
+
+ [ Michael Biebl ]
+ * Ship bash-completion for udevadm. (Closes: #776166)
+ * Drop rc-local generator in favor of statically enabling rc-local.service,
+ and drop halt-local.service which is unnecessary on Debian.
+ (Closes: #776170)
+ * Drop the obsolete libsystemd-* libraries, there are no reverse
+ dependencies left.
+
+ -- Martin Pitt <mpitt@debian.org> Mon, 26 Jan 2015 15:45:45 +0100
+
+systemd (218-5) experimental; urgency=medium
+
+ * Drop logger.agent. It hasn't been called from any udev rule for a long
+ time, and looks obsolete.
+ * debian/rules: Configure with --disable-firstboot to replace some manual
+ file removals.
+ * debian/rules: Remove manual file installation, move them to
+ debian/*.install. Move all Debian specific installed files to
+ debian/extra/.
+ * Merge some changes from the Ubuntu package to reduce the delta; these only
+ apply when building on/for Ubuntu:
+ - Add 40-hyperv-hotadd.rules: Workaround for LP: #1233466.
+ - Add 61-persistent-storage-android.rules to create persistent symlinks
+ for partitions with PARTNAME. By Ricardo Salveti.
+ - Add 71-power-switch-proliant.rules for supporting the power switches of
+ ProLiant Server Cartridges. By Dann Frazier.
+ - Add 78-graphics-card.rules: Mark KMS capable graphics devices as
+ PRIMARY_DEVICE_FOR_DISPLAY so that we can wait for those in plymouth.
+ By Scott James Remnant.
+ - Don't install the Debian *.agent scripts. Instead, have Ubuntu's
+ 80-networking.rules directly pull in ifup@.service, which is much easier
+ and more efficient.
+ * Make EPERM/EACCESS when applying OOM adjustment for forked processes
+ non-fatal. This happens in user namespaces like unprivileged LXC
+ containers.
+ * Fix assertion failure due to /dev/urandom being unmounted when shutting
+ down unprivileged containers. Thanks Stéphane Graber.
+ * Enable EFI support. This mostly auto-mounts /sys/firmware/efi/efivars, but
+ also provides a generator for auto-detecting the root and the /boot/efi
+ partition if they aren't in /etc/fstab. (Closes: #773533)
+
+ -- Martin Pitt <mpitt@debian.org> Thu, 22 Jan 2015 16:13:46 +0100
+
+systemd (218-4) experimental; urgency=medium
+
+ [ Michael Biebl ]
+ * sysv-generator: handle Provides: for non-virtual facility names.
+ (Closes: #774335)
+ * Fix systemd-remount-fs.service to not fail on remounting /usr if /usr
+ isn't mounted yet. This happens with initramfs-tools < 0.118 which we
+ might not get into Jessie any more. (Closes: #742048)
+
+ [ Martin Pitt ]
+ * fstab-generator: Handle mountall's non-standard "nobootwait" and
+ "optional" options. ("bootwait" is already the systemd default behaviour,
+ and "showthrough" is irrelevant here, so both can be ignored).
+ * Add autopkgtest for one-time boot with upstart when systemd-sysv is
+ installed. This test only works under Ubuntu which has a split out
+ upstart-bin package, and will be skipped under Debian.
+ * debian/ifup@.service: Check if ifup succeeds by calling ifquery, to
+ work around ifup not failing on invalid interfaces (see #773539)
+ * debian/ifup@.service: Set proper service type (oneshot).
+ * sysv-generator: Handle .sh suffixes when translating Provides:.
+ (Closes: #775889)
+ * sysv-generator: Make real units overwrite symlinks generated by Provides:
+ from other units. Fixes failures due to presence of backup or old init.d
+ scripts. (Closes: #775404)
+ * Fix journal forwarding to syslog in containers without CAP_SYS_ADMIN.
+ (Closes: #775067)
+ * Re-enable AppArmor support, now that libapparmor1 moved to /lib. Add
+ versioned dependency as long as this is still only in experimental.
+ (Closes: #775331)
+ * Add some missing dpkg and ucf temp files to the "hidden file" filter, to
+ e. g. avoid creating units for them through the sysv-generator.
+ (Closes: #775903)
+ * Silence useless warning about /etc/localtime not being a symlink. This is
+ deliberate in Debian with /usr (possibly) being on a separate partition.
+ (LP: #1409594)
+
+ [ Christian Kastner ]
+ * Use common-session-noninteractive in systemd-user's PAM config, instead of
+ common-session. The latter can include PAM modules like libpam-mount which
+ expect to be called just once and/or interactively, which already happens
+ for login, ssh, or the display-manager. Add pam_systemd.so explicitly, as
+ it's not included in -noninteractive, but is always required (and
+ idempotent). There is no net change on systemd which don't use manually
+ installed PAM modules. (Closes: #739676)
+
+ [ Michael Biebl ]
+ * Make sure we run debian-fixup.service after /var has been mounted if /var
+ is on a separate partition. Otherwise we might end up creating the
+ /var/lock and /var/run symlink in the underlying root filesystem.
+ (Closes: #768644)
+
+ -- Martin Pitt <mpitt@debian.org> Wed, 21 Jan 2015 15:57:50 +0100
+
+systemd (218-3) experimental; urgency=medium
+
+ * build-logind autopkgtest: Re-enforce that sd_login_monitor_new() succeeds,
+ and restrict this test to isolation-container. (Reproduces LP #1400203)
+ * Bring back patch to make sd_login_monitor_new() work under other init
+ systems where /sys/fs/cgroup/systemd/machine does not exist.
+ (LP: #1400203)
+ * build-login autopkgtest: Build against libsystemd, not libsystemd-login
+ any more.
+ * Add debian/extra/systemd-vconsole-setup.service dependency shim for
+ the console-setup init script, to avoid breaking dependencies of
+ third-party packages. Install it for Ubuntu only for now, as in Debian
+ plymouth's unit got adjusted. (LP: #1392970, Debian #755194)
+ * Mark systemd{,-sysv} as M-A: foreign (thanks lintian).
+ * Quiesce maintainer-script-calls-systemctl lintian warning.
+ * Quiesce possibly-insecure-handling-of-tmp-files lintian warning, it's
+ wrong there (we are handling tmpfiles.d/ files which are not in a temp
+ dir).
+ * Use dh_installinit's --noscript instead of --no-start for the upstart
+ jobs without sysvinit scripts (thanks lintian).
+ * Put systemd.pc into arch specific pkgconfig dir, as it contains the arch
+ specific libdir value.
+ * Don't enable audit by default. It causes flooding of dmesg and syslog,
+ suppressing actually important messages. (Closes: #773528)
+ * Cherrypick various bug fixes in loopback device setup and netlink socket
+ communication. Fixes massive CPU usage due to tight retry loops in user
+ LXC containers.
+
+ -- Martin Pitt <mpitt@debian.org> Mon, 29 Dec 2014 14:55:35 +0100
+
+systemd (218-2) experimental; urgency=medium
+
+ * boot-and-services AppArmor autopkgtest: Stop checking the dmesg log; it is
+ racy as sometimes message bursts are suppressed.
+ * Fix crash in timedatectl with Etc/UTC.
+ * Prefer-etc-X11-default-display-manager-if-present.patch: Drop wrong
+ copy&paste'd comment, fix log strings. Thanks Adam D. Barratt.
+ * boot-and-services: Robustify Nspawn tests, and show systemd-nspawn output
+ on failure.
+ * Disable tests which fail on buildds, presumably due to too old kernels,
+ misconfigured /etc/hosts, and similar problems. Make failures of the test
+ suite fatal now.
+
+ -- Martin Pitt <mpitt@debian.org> Tue, 16 Dec 2014 08:24:38 +0100
+
+systemd (218-1) experimental; urgency=medium
+
+ * New upstream release. Drop all cherry-picked patches and port the Debian
+ specific ones.
+ - Create /etc/machine-id on boot if missing. (LP: #1387090)
+ * Add new libmount-dev build dependency.
+ * Configure with --enable-split-usr.
+ * Merge some permanent Ubuntu changes, using dpkg-vendor:
+ - Don't symlink udev doc directories.
+ - Add epoch to gudev packages; Ubuntu packaged the standalone gudev before
+ it got merged into udev.
+ - Add Apport hooks for udev and systemd.
+ * udev-fallback-graphics upstart job: Guard the modprobe with || true to
+ avoid a failure when vesafb is compiled in. (LP: #1367241)
+
+ -- Martin Pitt <mpitt@debian.org> Sun, 14 Dec 2014 13:58:39 +0100
+
+systemd (217-4) experimental; urgency=medium
+
+ [ Martin Pitt ]
+ * Reinstate a debian/extra/rules/50-firmware.rules which immediately tells
+ the kernel that userspace firmware loading failed. Otherwise it tries for a
+ minute to call the userspace helper (if CONFIG_FW_LOADER_USER_HELPER is
+ enabled) in vain, which causes long delays with devices which have a range
+ of possible firmware versions. (LP: #1398458)
+ * debian/systemd.postinst: Don't always restart journald, as this currently
+ can't be done without losing the current journal and breaking attached
+ processes. So only restart it from upgrades < 215-3 (where the socket
+ location got moved) as an one-time upgrade path from wheezy.
+ (Closes: #771122)
+ * Revert "Modify insserv generator to mask sysvinit-only display managers".
+ This is still under dispute, a bit risky, and might get a different
+ implementation. Also, nodm really needs to be fixed properly, working
+ around it is both too risky and also too hard to get right.
+
+ [ Didier Roche ]
+ * Add display managers autopkgtests.
+ * Reset display-manager symlink to match /e/X/d-d-m even if
+ display-manager.service was removed. Adapt the autopkgtests for it.
+ (LP: #1400680)
+
+ -- Martin Pitt <mpitt@debian.org> Thu, 11 Dec 2014 18:06:54 +0200
+
+systemd (217-3) experimental; urgency=medium
+
+ [ Martin Pitt ]
+ * systemd.bug-script: Really capture stderr of systemd-delta.
+ (Closes: #771498)
+ * boot-and-services autopkgtest: Give test apparmor job some time to
+ actually finish.
+
+ [ Didier Roche ]
+ * updated debian/patches/insserv.conf-generator.patch:
+ - if /etc/X11/default-display-manager doesn't match a systemd unit
+ (or doesn't exist), be less agressive about what to mask: we let
+ all sysvinit-only display-manager units enabled to fallback to previous
+ behavior and let them starting. (Closes: #771739)
+
+ -- Martin Pitt <mpitt@debian.org> Tue, 02 Dec 2014 16:53:36 +0100
+
+systemd (217-2) experimental; urgency=medium
+
+ * Re-enable journal forwarding to syslog, until Debian's sysloggers
+ can/do all read from the journal directly.
+ * Fix hostnamectl exit code on success.
+ * Fix "diff failed with error code 1" spew with systemd-delta.
+ (Closes: #771397)
+ * Re-enable systemd-resolved. This wasn't meant to break the entire
+ networkd, just disable the new NSS module. Remove that one manually
+ instead. (Closes: #771423, LP: #1397361)
+ * Import v217-stable patches (up to commit bfb4c47 from 2014-11-07).
+ * Disable AppArmor again. This first requires moving libapparmor to /lib
+ (see #771667). (Closes: #771652)
+ * systemd.bug-script: Capture stderr of systemd-{delta,analyze}.
+ (Closes: #771498)
+
+ -- Martin Pitt <mpitt@debian.org> Mon, 01 Dec 2014 15:09:09 +0100
+
+systemd (217-1) experimental; urgency=medium
+
+ [ Martin Pitt ]
+ * New upstream release. Drop all cherry-picked patches and port the Debian
+ specific ones.
+ * Disable systemd-resolved for now. It still needs to mature, and
+ integration into Debian should be discussed first.
+ * Bump util-linux dependency to >= 2.25 as per NEWS.
+ * Drop installation of 50-firmware.rules, not shipped upstream any more.
+ Firmware loading is now exclusively done by the kernel.
+ * Drop installation of readahead related services and code, readahead got
+ dropped in this version.
+ * Ship new networkctl CLI tool.
+ * debian/libsystemd0.symbols: Add new symbols from this release.
+ * debian/rules: Call dpkg-gensymbols with -c4 to immediately spot
+ changed/missing symbols during build.
+ * boot-and-services autopkgtest: Test AppArmor confined units (LP #1396270)
+ * Create new "systemd-journal-remote" system group, for
+ systemd-tmpfiles-setup.service.
+
+ [ Marc Deslauriers ]
+ * Build-depend on libapparmor-dev to enable AppArmor support. (LP: #1396270)
+
+ [ Didier Roche ]
+ * Handle display-manager transitions: (Closes: #748668)
+ - Add a generator to ensure /etc/X11/default-display-manager is controlling
+ which display-manager is started.
+ - Modify insserv generator to mask of sysvinit-only dms with insserv
+ $x-display-manager tag if they don't match
+ /etc/X11/default-display-manager. This avoids starting multiple dms at
+ boot.
+ * Cherry-pick Shared-add-readlink_value.patch as using that function in the
+ generator.
+
+ -- Martin Pitt <mpitt@debian.org> Fri, 28 Nov 2014 10:53:58 +0100
+
+systemd (215-18) unstable; urgency=medium
+
+ [ Michael Biebl ]
+ * manager: Pass correct errno to strerror(), have_ask_password contains
+ negative error values which have to be negated when being passed to
+ strerror().
+
+ [ Martin Pitt ]
+ * Revert upstream commit 743970d which immediately SIGKILLs units during
+ shutdown. This leads to problems like bash not being able to write its
+ history, mosh not saving its state, and similar failed cleanup actions.
+ (Closes: #784720, LP: #1448259)
+ * write_net_rules: Escape '{' and '}' characters as well, to make this work
+ with busybox grep. Thanks Faidon Liambotis! (Closes: #765577)
+
+ -- Martin Pitt <mpitt@debian.org> Thu, 21 May 2015 15:49:30 +0200
+
+systemd (215-17) unstable; urgency=high
+
+ * cryptsetup: Implement offset and skip options. (Closes: #751707,
+ LP: #953875)
+
+ -- Martin Pitt <mpitt@debian.org> Thu, 16 Apr 2015 10:26:46 -0500
+
+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@debian.org> Mon, 13 Apr 2015 19:42:32 +0200
+
+systemd (215-15) unstable; urgency=medium
+
+ [ Adam Conrad ]
+ * debian/systemd.{triggers,postinst}: Trigger a systemctl daemon-reload
+ when init scripts are installed or removed (Closes: #766429)
+
+ [ Martin Pitt ]
+ * Fix getty restart loop when PTS device is gone. (Closes: #780711)
+ * Run timesyncd in virtual machines. (Closes: #762343)
+ * Make logind work in environments without CAP_SYS_ADMIN (mostly
+ containers). Thanks Christian Seiler for the backporting!
+ (Closes: #778608)
+ * Check for correct signatures when setting properties. Fixes systemd
+ getting stuck on trying to set invalid property types. (Closes: #781602)
+
+ -- Martin Pitt <mpitt@debian.org> Thu, 09 Apr 2015 10:12:37 +0200
+
+systemd (215-14) unstable; urgency=medium
+
+ [ Michael Biebl ]
+ * Map $x-display-manager LSB facility to display-manager.service instead of
+ making it a target. Using a target had the downside that multiple display
+ managers could hook into it at the same time which could lead to several
+ failed start attempts for the non-default display manager.
+ * Update insserv-generator and map $x-display-manager to
+ display-manager.service, following the recent change in sysv-generator.
+ This avoids creating references to a no longer existing
+ x-display-manager.target unit.
+ * Cherry-pick upstream fix to increase the SendBuffer of /dev/log to 8M.
+
+ [ Martin Pitt ]
+ * scope: Make attachment of initial PIDs more robust. Fixes crash with
+ processes that get started by an init.d script with a different (aliased)
+ name when the cgroup becomes empty. (Closes: #781210)
+ * boot-and-services, display-managers autopkgtests: Add missing python3 test
+ dependency.
+ * Don't attempt to mount the same swap partition twice through different
+ device node aliases. (Closes: #772182, LP: #1399595)
+
+ [ Christian Seiler ]
+ * Make the journald to syslog forwarding more robust by increasing the
+ maximum datagram queue length from 10 to 512. (Closes: #762700)
+
+ [ Marco d'Itri ]
+ * Avoid writing duplicate entries in 70-persistent-net.rules by double
+ checking if the new udev rule has already been written for the given
+ interface. This happens if multiple add events are generated before the
+ write_net_rules script returns and udevd renames the interface.
+ (Closes: #765577)
+
+ -- Michael Biebl <biebl@debian.org> Mon, 30 Mar 2015 13:26:52 +0200
+
+systemd (215-13) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * Add hwclock-save.service to sync the system clock to the hardware clock on
+ shutdown, to provide monotonic time for reboots. (Note: this is a hack for
+ jessie; the next Debian release will enable timesyncd by default).
+ (Closes: #755722)
+ * Check for correct architecture identifiers for SuperH. (Closes: #779710)
+ * networkd: Fix stopping v4 dhcpclient when the carrier is lost. Thanks
+ Christos Trochalakis! (Closes: #779571)
+ * Fix segfault with units that depend on themselves. (Closes: #780675)
+ * tmpfiles-setup-dev: Call tmpfiles with --boot to allow unsafe device
+ creation. Fixes creation of static device nodes with kmod 20.
+ (Closes: #780263)
+
+ [ Christian Seiler ]
+ * core: Don't migrate PIDs for units that may contain subcgroups.
+ This stops messing up lxc/libvirt/other custom cgroup layouts after
+ daemon-reload. (Closes: #777164)
+ * sysv-generator: add support for /etc/insserv/overrides. (Closes: #759001)
+
+ [ Michael Biebl ]
+ * debian/udev.init: Recognize '!' flag with static device lists, to work
+ with kmod 20. (Closes: #780263)
+
+ [ Didier Roche ]
+ * Ensure PrivateTmp doesn't require tmpfs through tmp.mount, but rather adds
+ an After relationship. (Closes: #779902)
+
+ -- Martin Pitt <mpitt@debian.org> Thu, 26 Mar 2015 14:23:35 +0100
+
+systemd (215-12) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * debian/udev.README.Debian: Trim the parts which are obsolete, wrong, or
+ described in manpages. Only keep the Debian specific bits.
+ (Part of #776546)
+ * Actually install udev's README.Debian when building for Debian.
+ (Closes: #776546)
+ * Only start logind if dbus is installed. This fixes the noisy startup
+ failure in environments without dbus such as LXC containers or servers.
+ (part of #772700)
+ * Add getty-static.service unit which starts getty@.service on tty 2 to 6 if
+ dbus is not installed, and hence logind cannot auto-start them on demand.
+ (Closes: #772700)
+ * Add unit-config autopkgtest to check systemd unit/sysv init enabling and
+ disabling via systemctl. This avoids bugs like #777613 (did not affect
+ unstable).
+ * cgroup: Don't trim cgroup trees created by someone else, just the ones
+ that systemd itself created. This avoids cleaning up empty cgroups from
+ e.g. LXC. (Closes: #777601)
+ * boot-and-services autopkgtest: Add CgroupsTest to check cgroup
+ creation/cleanup behaviour. This reproduces #777601 and verifies the fix
+ for it.
+ * rules: Fix by-path of mmc RPMB partitions and don't blkid them. Avoids
+ kernel buffer I/O errors and timeouts. (LP: #1333140)
+ * Document systemctl --failed option. (Closes: #767267)
+
+ [ Michael Biebl ]
+ * core: Don't fail to run services in --user instances if $HOME is missing.
+ (Closes: #759320)
+
+ [ Didier Roche ]
+ * default-display-manager-generator: Avoid unnecessary /dev/null symlink and
+ warning if there is no display-manager.service unit.
+
+ -- Martin Pitt <mpitt@debian.org> Fri, 13 Feb 2015 12:08:31 +0100
+
+systemd (215-11) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * escape-beef-up-new-systemd-escape-tool.patch: Avoid creating a dangling
+ symlink, to work around regression in recent patch (see #776257).
+ * Order ifup@.service and networking.service after network-pre.target.
+ (Closes: #766938)
+ * Tone down "Network interface NamePolicy= disabled on kernel commandline,
+ ignoring" info message to debug, as we expect this while we disable
+ net.ifnames by default. (Closes: #762101, LP: #1411992)
+ * logind: handle closing sessions over daemon restarts. (Closes: #759515,
+ LP: #1415104)
+ * logind: Fix sd_eviocrevoke ioctl call, to make forced input device release
+ after log out actually work.
+ * debian/patches/series: Move upstreamed patches into the appropriate
+ section.
+
+ [ Michael Biebl ]
+ * Make sure we run debian-fixup.service after /var has been mounted if /var
+ is on a separate partition. Otherwise we might end up creating the
+ /var/lock and /var/run symlink in the underlying root filesystem.
+ (Closes: #768644)
+
+ -- Martin Pitt <mpitt@debian.org> Thu, 29 Jan 2015 09:01:54 +0100
+
+systemd (215-10) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * sysv-generator: Handle .sh suffixes when translating Provides:.
+ (Closes: #775889)
+ * sysv-generator: Make real units overwrite symlinks generated by Provides:
+ from other units. Fixes failures due to presence of backup or old init.d
+ scripts. (Closes: #775404)
+ * Fix journal forwarding to syslog in containers without CAP_SYS_ADMIN.
+ (Closes: #775067)
+
+ [ Christian Kastner ]
+ * Use common-session-noninteractive in systemd-user's PAM config, instead of
+ common-session. The latter can include PAM modules like libpam-mount which
+ expect to be called just once and/or interactively, which already happens
+ for login, ssh, or the display-manager. Add pam_systemd.so explicitly, as
+ it's not included in -noninteractive, but is always required (and
+ idempotent). There is no net change on systemd which don't use manually
+ installed PAM modules. (Closes: #739676)
+
+ -- Martin Pitt <mpitt@debian.org> Wed, 21 Jan 2015 13:18:05 +0100
+
+systemd (215-9) unstable; urgency=medium
+
+ [ Didier Roche ]
+ * Add display managers autopkgtests.
+ * Reset display-manager symlink to match /e/X/d-d-m even if
+ display-manager.service was removed. Adapt the autopkgtests for it.
+
+ [ Martin Pitt ]
+ * Prefer-etc-X11-default-display-manager-if-present.patch: Drop wrong
+ copy&paste'd comment, fix log strings. Thanks Adam D. Barratt.
+ * Log all members of cyclic dependencies (loops) even with quiet on the
+ kernel cmdline. (Closes: #770504)
+ * Don't auto-clean PrivateTmp dir in /var/tmp; in Debian we don't want to
+ clean /var/tmp/ automatically. (Closes: #773313)
+
+ [ Michael Biebl ]
+ * sysv-generator: handle Provides: for non-virtual facility names.
+ (Closes: #774335)
+ * Fix systemd-remount-fs.service to not fail on remounting /usr if /usr
+ isn't mounted yet. This happens with initramfs-tools < 0.118 which we
+ might not get into Jessie any more. (Closes: #742048)
+
+ -- Martin Pitt <mpitt@debian.org> Tue, 13 Jan 2015 11:24:43 +0100
+
+systemd (215-8) unstable; urgency=medium
+
+ [ Didier Roche ]
+ * Cherry-pick shared-add-readlink_value.patch, we will use that function in
+ the generator.
+ * Cherry-pick util-allow-strappenda-to-take-any-number-of-args.patch, we
+ will use that function in the generator.
+ * Handle multiple display managers which don't ship a systemd unit or the
+ corresponding postinst logic for updating display-manager.service: Add a
+ generator to ensure /etc/X11/default-display-manager is controlling which
+ display-manager is started. (Closes: #771287)
+
+ [ Sjoerd Simons ]
+ * d/p/core-Fix-bind-error-message.patch:
+ + Added. Fix error message on bind failure to print the full path
+ * d/p/core-Make-binding-notify-private-dbus-socket-more-ro.patch:
+ + Added. Be more robust when binding private unix sockets (Based on current
+ upstream logic) (Closes: #761306)
+
+ [ Martin Pitt ]
+ * Clean up ...journal~ files from unclean shutdowns. (Closes: #771707)
+ * debian/systemd.postinst: Don't always restart journald, as this currently
+ can't be done without losing the current journal and breaking attached
+ processes. So only restart it from upgrades < 215-3 (where the socket
+ location got moved) as an one-time upgrade path from wheezy.
+ (Closes: #771122)
+ * journalctl: Fix help text for --until. (Closes: #766598)
+ * Bump systemd's udev dependency to >= 208-8, so that on partial upgrades we
+ make sure that the udev package has appropriate Breaks:. In particular,
+ this avoids installing current udev with kmod << 14. (Closes: #771726)
+
+ [ Michael Biebl ]
+ * systemd.postinst: Move unit enablement after restarting systemd, so that
+ we don't fail to enable units with keywords that wheezy's systemd does not
+ understand yet. Fixes enabling getty units on wheezy upgrades with
+ systemd. (Closes: #771204)
+
+ -- Martin Pitt <mpitt@debian.org> Fri, 05 Dec 2014 10:01:24 +0100
+
+systemd (215-7) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * Add myself to Uploaders.
+ * Add boot-and-services autopkgtest: Check booting with systemd-sysv and
+ that the most crucial services behave as expected.
+ * logind autopkgtest: Fix stderr output in waiting loop for scsi_debug.
+ * Add nspawn test to boot-and-services autopkgtest.
+ * Make systemd-nspawn@.service work out of the box: (Closes: #770275)
+ - Pre-create /var/lib/container with a secure mode (0700) via tmpfiles.d.
+ - Add new try-{guest,host} modes for --link-journal to silently skip
+ setting up the guest journal if the host has no persistent journal.
+ - Extend boot-and-services autopkgtest to cover systemd-nspawn@.service.
+ * Cherry-pick upstream patch to fix SELinux unit access check (regression
+ in 215).
+ * sysv-generator: Avoid wrong dependencies for failing units. Thanks to
+ Michael Biebl for the patch! (Closes: #771118)
+ * Cherry-pick patches to recognize and respect the "discard" mount option
+ for swap devices. Thanks to Aurelien Jarno for finding and testing!
+ (Closes: #769734)
+
+ [ Jon Severinsson]
+ * Add /run/shm -> /dev/shm symlink in debian/tmpfiles.d/debian.conf. This
+ avoids breakage in Jessie for packages which still refer to /run/shm, and
+ while https://wiki.debian.org/ReleaseGoals/RunDirectory is still official.
+ (LP: #1320534, Closes: #674755).
+
+ -- Martin Pitt <mpitt@debian.org> Fri, 28 Nov 2014 06:43:15 +0100
+
+systemd (215-6) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * Cherry-pick upstream patch to fix udev crash in link_config_get().
+ * Cherry-pick upstream patch to fix tests in limited schroot environments.
+ * Add d/p/Add-env-variable-for-machine-ID-path.patch: Allow specifying an
+ alternate /etc/machine-id location. This is necessary for running tests
+ as long as it isn't in our base images (see Debian #745876)
+ * Run tests during package build. For the first round don't make them fatal
+ for now (that will happen once we see results from all the architectures).
+ * Drop our Check-for-kmod-binary.patch as the upstream patch
+ units-conditionalize-static-device-node-logic-on-CAP.patch supersedes it.
+ * Drop Use-comment-systemd.-syntax-in-systemd.mount-man-pag.patch, as
+ our util-linux is now recent enough. Bump dependency to >= 2.21.
+ * Adjust timedated and hostnamed autopkgtests to current upstream version.
+ * Replace our Debian hwdb.bin location patch with what got committed
+ upstream. Run hwdb update with the new --usr option to keep current
+ behaviour.
+ * debian/README.Debian: Document how to debug boot or shutdown problems with
+ the debug shell. (Closes: #766039)
+ * Skip-99-systemd.rules-when-not-running-systemd-as-in.patch: Call path_id
+ under all init systems, to get consistent ID_PATH attributes. This is
+ required so that tools like systemd-rfkill can be used with SysVinit or
+ upstart scripts, too. (LP: #1387282)
+ * Switch libpam-systemd dependencies to prefer systemd-shim over
+ systemd-sysv, to implement the CTTE decision #746578. This is a no-op on
+ systems which already have systemd-sysv installed, but will prevent
+ installing that on upgrades. (Closes: #769747)
+ * Remove Tollef from Uploaders: as per his request. Thanks Tollef for all
+ you work!
+ * net.agent: Properly close stdout/err FDs, to avoid long hangs during udev
+ settle. Thanks to Ben Hutchings! (Closes: #754987)
+ * Bump Standards-Version to 3.9.6 (no changes necessary).
+
+ [ Didier Roche ]
+ * debian/ifup@.service: add a ConditionPath on /run/network, to avoid
+ failing the unit if /etc/init.d/networking is disabled. (Closes: #769528)
+
+ -- Martin Pitt <mpitt@debian.org> Tue, 18 Nov 2014 12:37:22 +0100
+
+systemd (215-5) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * Unblacklist hyperv_fb again, it is needed for graphical support on Hyper-V
+ platforms. Thanks Andy Whitcroft! (LP: #1359933)
+ * Bump systemd-shim Depends/Breaks to 8-2 to ensure a lockstep upgrade.
+ (Closes: #761947)
+
+ [ Sjoerd Simons ]
+ * d/p/sd-bus-Accept-no-sender-as-the-destination-field.patch
+ + Fix compatibility between systemctl v215 and v208. Resolves issue when
+ reloads of services is requested before systemd is re-execed
+ (Closes: #762146)
+
+ [ Michael Biebl ]
+ * Don't overmount existing /run/user/<UID> directories with a per-user tmpfs
+ on upgrades. (Closes: #762041)
+ * Re-enable mount propagation for udevd. This avoids that broken software
+ like laptop-mode-tools, which runs mount from within udev rules, causes
+ the root file system to end up read-only. (Closes: #762018)
+
+ -- Michael Biebl <biebl@debian.org> Sat, 27 Sep 2014 17:49:47 +0200
+
+systemd (215-4) unstable; urgency=medium
+
+ * Upload to unstable.
+
+ -- Michael Biebl <biebl@debian.org> Mon, 15 Sep 2014 17:38:30 +0200
+
+systemd (215-3) experimental; urgency=medium
+
+ [ Ben Howard ]
+ * 75-persistent-net-generator.rules: Fix matches of HyperV. (LP: #1361272)
+
+ [ Martin Pitt ]
+ * 75-persistent-net-generator.rules: Add new MS Azure MAC prefix 00:25:ae.
+ (LP: #1367883)
+
+ [ Michael Biebl ]
+ * Update upstream v215-stable patch series.
+ * The /dev/log socket and /dev/initctl FIFO have been moved to /run and
+ replaced by symlinks. Create the symlinks manually on upgrades as well.
+ (Closes: #761340)
+ * Fix incorrect paths in man pages. (LP: #1357782, Closes: #717491)
+ * Make systemd recommend dbus so it is installed on upgrades. The dbus
+ system bus is required to run systemd-logind and the autovt feature relies
+ on logind. (Closes: #758111)
+ * Bump dependency on systemd-shim to (>= 7-2) to ensure we have a version
+ which supports systemd >= 209.
+ * Rework bug-script to be more upfront about what kind of data is gathered
+ and ask the user for permission before attaching the information to the
+ bug report. (Closes: #756248)
+
+ [ Sjoerd Simons ]
+ * d/p/buildsys-Don-t-default-to-gold-as-the-linker.patch
+ + Don't explicitly pick gold as the default linker. Fixes FTBFS on sparc
+ (Closes: #760879)
+
+ -- Sjoerd Simons <sjoerd@debian.org> Sun, 14 Sep 2014 20:14:49 +0200
+
+systemd (215-2) experimental; urgency=medium
+
+ * debian/patches/always-check-for-__BYTE_ORDER-__BIG_ENDIAN-when-chec.patch
+ + Added. Fix checking of system endianness. Fixes FTBFS on powerpc
+ * debian/patches/timesyncd-when-we-don-t-know-anything-about-the-netw.patch:
+ + Let timesyncd go online even if networkd isn't running (from upstream
+ git) (Closes: #760087)
+ * debian/rules: add systemd-update-utmp-runlevel.service to
+ {poweroff, rescue, multi-user, graphical, reboot}.target.wants to trigger
+ the runlevel target to be loaded
+
+ -- Sjoerd Simons <sjoerd@debian.org> Sun, 07 Sep 2014 23:46:02 +0200
+
+systemd (215-1) experimental; urgency=medium
+
+ * New upstream release.
+ * Import upstream v215-stable patch series.
+ * Rebase remaining Debian patches on top of v215-stable.
+ * Drop our Debian-specific run-user.mount unit as upstream now creates a
+ per-user tmpfs via logind.
+ * Don't rely on new mount from experimental for now and re-add the patch
+ which updates the documentation accordingly.
+ * Cherry-pick upstream fix to use correct versions for the new symbols that
+ were introduced in libudev.
+ * Update symbols files
+ - Add two new symbols for libudev1.
+ - Remove private symbol from libgudev-1.0-0. This symbol was never part of
+ the public API and not used anywhere so we don't need a soname bump.
+ * Cherry-pick upstream commit to not install busname units if kdbus support
+ is disabled.
+ * Make /run/lock tmpfs an API fs so it is available during early boot.
+ (Closes: #751392)
+ * Install new systemd-path and systemd-escape binaries.
+ * Cherry-pick upstream commit which fixes the references to the systemctl
+ man page. (Closes: #760613)
+ * Use the new systemd-escape utility to properly escape the network
+ interface name when starting an ifup@.service instance for hotplugged
+ network interfaces. Make sure a recent enough systemd version is installed
+ by bumping the versioned Breaks accordingly. (Closes: #747044)
+ * Order ifup@.service after networking.service so we don't need to setup the
+ runtime directory ourselves and we have a defined point during boot when
+ hotplugged network interfaces are started.
+ * Disable factory-reset feature and remove files associated with it. This
+ feature needs more integration work first before it can be enabled in
+ Debian.
+ * Cherry-pick upstream commit to fix ProtectSystem=full and make the
+ ProtectSystem= option consider /bin, /sbin, /lib and /lib64 (if it exists)
+ on Debian systems. (Closes: #759689)
+ * Use adduser in quiet mode when creating the system users/groups to avoid
+ warning messages about the missing home directories. Those are created
+ dynamically during runtime. (Closes: #759175)
+ * Set the gecos field when creating the system users.
+ * Add systemd-bus-proxy system user so systemd-bus-proxyd can properly drop
+ its privileges.
+ * Re-exec systemd and restart services at the end of postinst.
+ * Cherry-pick upstream commit for sd-journal to properly convert
+ object->size on big endian which fixes a crash in journalctl --list-boots.
+ (Closes: #758392)
+
+ -- Michael Biebl <biebl@debian.org> Sun, 07 Sep 2014 09:58:48 +0200
+
+systemd (214-1) experimental; urgency=medium
+
+ * New upstream release v214.
+ (Closes: #750793, #749268, #747939)
+
+ [ Jon Severinsson ]
+ * Import upstream v214-stable patch series.
+ - Rebase remaining Debian patches on top of v214-stable.
+ - Drop modifications to the now-removed built-in sysvinit support.
+ * Install the new combined libsystemd0 library, this library combines all
+ functionality of the various libsystemd-* libraries.
+ - Deprecate the old libsystemd-* libraries as they've been bundled into
+ libsystemd0. The old -dev files now just carry a transitional .pc file.
+ - Add new symbols file for libsystemd0.
+ * Update symbols file for libgudev-1.0-0.
+ * Remove pre-generated rules and unit files in debian/rules clean target.
+ * Add new systemd service users in systemd postinst (systemd-timesync,
+ systemd-network, systemd-resolve)
+ * Add new system group "input" used by udev rules in udev postinst.
+ * Try-restart networkd, resolved, and timesyncd after an upgrade.
+ * Do not force-enable default-on services on every upgrade.
+ * Add support for rcS.d init scripts to the sysv-generator.
+ - Do not order rcS.d services after local-fs.target if they do not
+ explicitly depend on $local_fs.
+ - Map rcS.d init script dependencies to their systemd equivalent.
+ - Special-case some dependencies for sysv init scripts for better
+ backwards compatibility. (Closes: #726027, #738965).
+ * Add systemd depends on new mount. (Closes: #754411)
+ * Update /run/initctl symlink target in debian/tmpfiles.d/debian.conf.
+ * Remove stored backlog state, rfkill state, random-seed and clock
+ information from /var/lib/systemd on systemd purge.
+
+ [ Sjoerd Simons ]
+ * debian/patches/shared-include-stdbool.h-in-mkdir.h.patch
+ + Added. Include stdbool before using bool in function prototypes. Fixes
+ build of the insserv generator
+ * Add python-lxml to build-depends for python-systemd
+ * Turn on parallel build support
+ * Install the new busctl binary and translations
+ * Explicitly disable microhttp so the package build doesn't fail if the
+ required dependencies for it happen to be installed.
+ * debian/control: Make udev break plymouth (<< 0.9.0-7) as older plymouths
+ assume udev implementation details that have changed slightly since v213
+ * debian/control: Remove b-d on librwap0-dev
+ * debian/control: Bump libkmod-dev b-d to >= 15
+ * debian/rules: Drop outdated --enable-tcpwrap
+ * debian/rules: Explicitly turn off rfkill, networkd, timesyncd and resolved
+ for the udeb build
+ * debian/rules: Use the debian ntp pool as default ntp servers
+ * debian/rules: explicitely configure the maximum system uid/gids instead of
+ relying on autodetection
+
+ -- Sjoerd Simons <sjoerd@debian.org> Sun, 24 Aug 2014 14:54:27 +0200
+
+systemd (208-8) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * Fix duplicate line in copyright. (Closes: #756899)
+ * Drop --disable-xattr configure option for udeb, does not exist any more.
+ * Add Turkish debconf translations. Thanks Mert Dirik! (Closes: #757498)
+ * Backport fix for lazy session-activation on non-seat0 seats.
+ (LP: #1355331)
+
+ [ Michael Biebl ]
+ * Use "kmod static-nodes --output=/proc/self/fd/1" in make_static_nodes() as
+ we can't rely on /dev/stdout to exist at this point during boot.
+ (Closes: #757830)
+ * Fix udev SysV init script and d-i start script to not write to
+ /sys/kernel/uevent_helper unconditionally to not fail on a kernel with
+ CONFIG_UEVENT_HELPER unset. (Closes: #756312)
+ * Add Breaks: kmod (<< 14) to udev to make sure we have a kmod version
+ supporting the static-nodes command.
+ * Add Breaks: systemd (<< 208) to udev to avoid partial upgrades. Newer udev
+ versions rely on kmod-static-nodes.service being provided by systemd.
+ (Closes: #757777)
+ * Updated upstream v208-stable patch series to 53b1b6c.
+ * Cherry-pick upstream fix to ignore temporary dpkg files. (Closes: #757302)
+ * Make emergency.service conflict with rescue.service.
+ Otherwise if rescue mode is selected during boot and the emergency mode
+ is triggered (e.g. via a broken fstab entry), we have two sulogin
+ processes fighting over the tty. (Closes: #757072)
+ * Stop syslog.socket when entering emergency mode as otherwise every log
+ message triggers the start of the syslog service and its dependencies
+ which conflicts with emergency.target. (Closes: #755581)
+
+ -- Michael Biebl <biebl@debian.org> Thu, 21 Aug 2014 00:14:21 +0200
+
+systemd (208-7) unstable; urgency=medium
+
+ [ Michael Biebl ]
+ * Mask remaining services provided by the initscripts package and document
+ in more detail why certain services have been masked. (Closes: #659264)
+ * Install zsh completions to the correct place. (Closes: #717540)
+
+ [ Jon Severinsson ]
+ * Cherry-pick upstream fix for journal file permissions. (Closes: #755062)
+ * Map some rcS.d init script dependencies to their systemd equivalent.
+ * Update Depends on initscripts to the version with a systemd-compatible
+ mountnfs ifup hook. (Closes: #746358)
+ * Add Breaks on lvm2 versions without native systemd support.
+ (Closes: #678438, #692120)
+ * Do not fail udev upgrades if the udev service is already runtime-masked
+ when the preinst script is run. (Closes: #755746)
+ * Add Pre-Depends on systemd to systemd-sysv, to avoid risking that the
+ sysv-compatible symlinks become dangling on a partial install.
+ * Ensure that systemctl is usable right after being unpacked, by adding the
+ required Pre-Depends to systemd and libsystemd-daemon0. (Closes: #753589)
+ * Add support for TuxOnIce hibernation. (Closes: #746463)
+
+ [ Martin Pitt ]
+ * Rename "api" autopkgtest to "build-login", and stop requiring that
+ sd_login_monitor_new() succeeds. It doesn't in many environments like
+ schroot or after upgrades from < 204, and the main point of the test is
+ to check that libsystemd-login-dev has correct contents and dependencies.
+ Drop "isolation-machine" requirement.
+ * Use glibc's xattr support instead of requiring libattr. Fixes FTBFS with
+ latest glibc and libattr. Cherrypicked from trunk. Drop libattr1-dev build
+ dependency. (Closes: #756097)
+ * Build python3-systemd for Python 3 bindings. Drop python-systemd; it does
+ not have any reverse dependencies, and we want to encourage moving to
+ Python 3. (LP: #1258089)
+ * Add simple autopkgtest for python3-systemd.
+ * Add dbus dependency to libpam-systemd. (Closes: #755968)
+ * Fix /dev/cdrom symlink to appear for all types of drives, not just for
+ pure CD-ROM ones. Also, fix the symlinks to stay after change events.
+ (LP: #1323777)
+ * 75-persistent-net-generator.rules: Adjust Ravello interfaces; they don't
+ violate the assignment schema, they should just not be persistent.
+ Thanks to Boris Figovsky. (Closes: #747475, LP: #1317776)
+ * Reinstate patches to make logind D-BUS activatable.
+ * Re-add systemd-shim alternative dependency to libpam-systemd. Version it
+ to ensure cgmanager support. (Closes: #754984, LP: #1343802)
+ * Convert udev-finish.upstart from a task to a job, to avoid hangs with
+ startpar. (Closes: #756631)
+ * Add debian/extra/60-keyboard.hwdb: Latest keymaps from upstream git.
+ This makes it trivial to backport keymap fixes to stable releases.
+ (Closes: #657809; LP: #1322770, #1339998)
+ * udev.init: Create static device nodes, as this moved out of udevd.
+ Thanks to Michael Biebl for the script! (Closes: #749021)
+
+ -- Martin Pitt <mpitt@debian.org> Wed, 06 Aug 2014 13:33:22 +0200
+
+systemd (208-6) unstable; urgency=medium
+
+ [ Jon Severinsson ]
+ * Add v208-stable patch series.
+ - Update Debian patches to apply on top of v208-stable.
+ - Move new manpages to libsystemd-*-dev as appropriate.
+
+ [ Michael Biebl ]
+ * Upload to unstable.
+
+ -- Michael Biebl <biebl@debian.org> Wed, 16 Jul 2014 00:44:15 +0200
+
+systemd (208-5) experimental; urgency=medium
+
+ * Merge changes from unstable branch.
+
+ -- Michael Biebl <biebl@debian.org> Sat, 28 Jun 2014 13:41:32 +0200
+
+systemd (208-4) experimental; urgency=medium
+
+ * Merge changes from unstable branch.
+ * Drop alternative dependency on systemd-shim in libpam-systemd. The
+ systemd-shim package no longer provides an environment to run
+ systemd-logind standalone. See #752939 for further details.
+
+ -- Michael Biebl <biebl@debian.org> Sat, 28 Jun 2014 01:22:11 +0200
+
+systemd (208-3) experimental; urgency=medium
+
+ * Merge changes from unstable branch.
+
+ -- Michael Biebl <biebl@debian.org> Wed, 25 Jun 2014 11:29:07 +0200
+
+systemd (208-2) experimental; urgency=medium
+
+ [ Sjoerd Simons ]
+ * Don't stop a running user manager from garbage collecting the users. Fixes
+ long shutdown times when using a systemd user session
+
+ [ Michael Stapelberg ]
+ * Fix bug-script: “systemctl dump” is now “systemd-analyze dump”
+ (Closes: #748311)
+
+ [ Michael Biebl ]
+ * Merge changes from unstable branch.
+ * Cherry-pick upstream fixes to make sd_session_get_vt() actually work.
+
+ -- Michael Biebl <biebl@debian.org> Tue, 24 Jun 2014 17:45:26 +0200
+
+systemd (208-1) experimental; urgency=medium
+
+ [ Michael Biebl ]
+ * New upstream release. (Closes: #729566)
+ * Update patches.
+ * Update symbols files for libsystemd-journal and libsystemd-login.
+ * Install new files and remove the ones we don't use.
+ * Install zsh completion files. (Closes: #717540)
+ * Create a compat symlink /etc/sysctl.d/99-sysctl.conf as systemd-sysctl no
+ longer reads /etc/sysctl.conf.
+ * Bump Build-Depends on kmod to (>= 14).
+ * Bump Build-Depends on libcryptsetup-dev to (>= 2:1.6.0) for tcrypt
+ support.
+ * Make kmod-static-nodes.service check for the kmod binary since we don't
+ want a hard dependency on kmod e.g. for container installations.
+ * Disable various features which aren't required for the udeb build.
+ * Move new sd_pid_get_slice and sd_session_get_vt man pages into
+ libsystemd-login-dev.
+ * Make no-patch-numbers the default for gbp-pq.
+ * Adjust systemd-user pam config file for Debian.
+ This pam config file is used by libpam-systemd/systemd-logind when
+ launching systemd user instances.
+ * Drop patches to make logind D-Bus activatable. The cgroup handling has
+ been reworked in v205 and logind no longer creates cgroup hierarchies on
+ its own. That means that the standalone logind is no longer functional
+ without support from systemd (or an equivalent cgroup manager).
+
+ [ Martin Pitt ]
+ * Explain patch management in debian/README.source.
+
+ -- Michael Biebl <biebl@debian.org> Mon, 28 Apr 2014 00:22:57 +0200
+
+systemd (204-14) unstable; urgency=medium
+
+ * Fix SIGABRT in insserv generator caused by incorrect usage of strcat().
+ (Closes: #752992)
+ * Mark -dev packages as Multi-Arch: same. (Closes: #720017)
+
+ -- Michael Biebl <biebl@debian.org> Sat, 28 Jun 2014 13:22:43 +0200
+
+systemd (204-13) unstable; urgency=medium
+
+ * Switch back to load the sg module via the kmod builtin. The problem was
+ not that the kmod builtin is faster then modprobe but rather the incorrect
+ usage of the "=" assignment operator. We need to use "+=" here, so the sg
+ module is loaded in addition to other scsi modules, which are loaded via
+ the modalias rule. Thanks to Tommaso Colombo for the analysis.
+ * Cherry-pick upstream fix which prevents systemd from entering an infinite
+ loop when trying to break an ordering cycle. (Closes: #752259)
+ * Update insserv generator to not create any drop-in files for services
+ where the corresponding SysV init script does not exist.
+ * Drop the check for /sys/kernel/uevent_helper from postinst and the SysV
+ init script and do not unconditionally overwrite it in the initramfs hook.
+ Since a long time now udev has been using the netlink interface to
+ communicate with the kernel and with Linux 3.16 it is possible to disable
+ CONFIG_UEVENT_HELPER completely. (Closes: #752742)
+
+ -- Michael Biebl <biebl@debian.org> Sat, 28 Jun 2014 00:01:16 +0200
+
+systemd (204-12) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * Change the sg loading rule (for Debian #657948) back to using modprobe.
+ kmod is too fast and then sg races with sd, causing the latter to not see
+ SCSI disks. (Closes: #752591, #752605)
+
+ [ Michael Biebl ]
+ * Update udev bug-script to attach instead of paste extra info if a new
+ enough reportbug version is available.
+
+ -- Michael Biebl <biebl@debian.org> Wed, 25 Jun 2014 10:55:12 +0200
+
+systemd (204-11) unstable; urgency=medium
+
+ [ Martin Pitt ]
+ * Explain patch management in debian/README.source. (Closes: #739113)
+ * Replace "Always probe cpu support drivers" patch with cherry-picked
+ upstream fix which is more general.
+ * Advertise hibernation only if there's enough free swap. Patches backported
+ from current upstream. (LP: #1313522)
+ * Fix typo in sg loading rule to make it actually work.
+
+ [ Michael Biebl ]
+ * Make no-patch-numbers the default for gbp-pq.
+ * Cherry-pick upstream fix to properly handle multiline syslog messages.
+ (Closes: #746351)
+ * Cherry-pick upstream fix for libudev which fixes a memleak in
+ parent_add_child().
+ * Drop "-b debian" from Vcs-Git since we use the master branch for
+ packaging now.
+ * Drop Conflicts: sysvinit (<< 2.88dsf-44~) from systemd-sysv since this
+ breaks dist-upgrades from wheezy when switching from sysvinit to
+ systemd-sysv as default init. While downgrading the Pre-Depends in
+ sysvinit would have been an alternative, dropping the Conflicts and only
+ keeping the Replaces was deemed the lesser evil. (Closes: #748355)
+ * Use Conflicts instead of Breaks against sysvinit-core. This avoids
+ /sbin/init going missing when switching from systemd-sysv to sysvinit.
+ While at it, add a Replaces: upstart. (Closes: #751589)
+ * Make the SysV compat tools try both /run/initctl and /dev/initctl. This
+ makes them usable under sysvinit as PID 1 without requiring any symlinks.
+ * Various ifupdown integration fixes
+ - Use DefaultDependencies=no in ifup@.service so the service can be
+ started as early as possible.
+ - Create the ifupdown runtime directory in ifup@.service as we can no
+ longer rely on the networking service to do that for us.
+ - Don't stop ifup@.service on shutdown but let the networking service take
+ care of stopping all hotplugged interfaces.
+ - Only start ifup@.service for interfaces configured as allow-hotplug.
+
+ [ Michael Stapelberg ]
+ * Clarify that “systemd” does not influence init whereas “systemd-sysv” does
+ (Closes: #747741)
+
+ [ Ansgar Burchardt ]
+ * Don't use "set +e; set +u" unconditionally in the lsb init-functions hook
+ as this might change the behaviour of existing SysV init scripts.
+ (Closes: #751472)
+
+ -- Michael Biebl <biebl@debian.org> Tue, 24 Jun 2014 17:03:43 +0200
+
+systemd (204-10) unstable; urgency=medium
+
+ * In the udeb's udev.startup, make sure that /dev/pts exists.
+ * systemd-logind-launch: Set the #files ulimit, for unprivileged LXC
+ containers.
+ * Drop udev.NEWS, it only applies to pre-squeeze.
+ * Remove /var/log/udev on purge.
+ * Always probe cpu support drivers. (LP #1207705)
+ * On Dell PowerEdge systems, the iDRAC7 and later support a USB Virtual NIC
+ for management. Name this interface "idrac" to avoid confusion with "real"
+ network interfaces.
+ * Drop numerical prefixes from patches, to avoid future diff noise when
+ removing, cherry-picking, and merging patches. From now on, always use
+ "gbp-pq export --no-patch-numbers" to update them.
+
+ -- Martin Pitt <mpitt@debian.org> Sun, 27 Apr 2014 11:53:52 +0200
+
+systemd (204-9) unstable; urgency=medium
+
+ * The "Flemish Beef and Beer Stew" release.
+
+ [ Steve Langasek ]
+ * Do proper refcounting of the PAM module package on prerm, so that we
+ don't drop the module from the PAM config when uninstalling a
+ foreign-arch package. Related to Ubuntu bug #1295521.
+
+ [ Martin Pitt ]
+ * debian/udev.udev-finish.upstart: Fix path to tmp-rules,
+ debian/extra/rule_generator.functions creates them in /run/udev/.
+ * rules: Remove the kernel-install bits; we don't want that in Debian and
+ thus it shouldn't appear in dh_install --list-missing output.
+ * Ship sd-shutdown.h in libsystemd-daemon-dev.
+ * Run dh_install with --fail-missing, to avoid forgetting files when we move
+ to new versions.
+ * Mount /dev/pts with the correct permissions in the udev, to avoid needing
+ pt_chown (not available on all architectures). Thanks Adam Conrad.
+ * Add new block of Windows Azure ethernet hardware address to
+ 75-persistent-net-generator.rules. (LP: #1274348, Closes: #739018)
+ * Drop our Debian specific 60-persistent-storage{,-tape}.rules and use the
+ upstream rules. They are compatible and do a superset of the
+ functionality. (Closes: #645466)
+ * Drop our Debian specific 80-drivers.rules and use the upstream rules with
+ a patch for the sg module (see #657948). These now stop calling modprobe
+ and use the kmod builtin, giving some nice boot speed improvement.
+ (Closes: #717404)
+ * Drop our Debian specific 50-udev-default.rules and 91-permissions.rules
+ and use the upstream rules with a patch for the remaining Debian specific
+ default device permissions. Many thanks to Marco d'Itri for researching
+ which Debian-specific rules are obsolete! Amongst other things, this now
+ also reads the hwdb info for USB devices (Closes: #717405) and gets rid of
+ some syntax errors (Closes: #706221)
+ * Set default polling interval on removable devices as well, for kernels
+ which have "block" built in instead of being a module. (Closes: #713877)
+ * Make sd_login_monitor_new() work for logind without systemd.
+ * Cherry-pick upstream fix for polkit permissions for rebooting with
+ multiple sessions.
+ * Kill /etc/udev/links.conf, create_static_nodes, and associated code. It's
+ obsolete with devtmpfs (which is required now), and doesn't run with
+ systemd or upstart anyway.
+ * Drop unnecessary udev.dirs.
+ * Add autopkgtests for smoke-testing logind, hostnamed, timedated, localed,
+ and a compile/link/run test against libsystemd-login-dev.
+
+ [ Marco d'Itri ]
+ * preinst: check for all the system calls required by modern releases
+ of udev. (Closes: #648325)
+ * Updated fbdev-blacklist.conf for recent kernels.
+ * Do not blacklist viafb because it is required on the OLPC XO-1.5.
+ (Closes: #705792)
+ * Remove write_cd_rules and the associated rules which create "persistent"
+ symlinks for CD/DVD devices and replace them with more rules in
+ 60-cdrom_id, which will create symlinks for one at random among the
+ devices installed. Since the common case is having a single device
+ then everything will work out just fine most of the times...
+ (Closes: #655924)
+ * Fix write_net_rules for systemd and sysvinit users by copying the
+ temporary rules from /run/udev/ to /etc/udev/. (Closes: #735563)
+ * Do not install sysctl.d/50-default.conf because the systemd package
+ should not change kernel policies, at least until it will become
+ the only supported init system.
+
+ [ Michael Stapelberg ]
+ * Add systemd-dbg package, thanks Daniel Schaal (Closes: #742724).
+ * Switch from gitpkg to git-buildpackage. Update README.source accordingly.
+ * Make libpam-systemd depend on systemd-sysv | systemd-shim. Packages that
+ need logind functionality should depend on libpam-systemd.
+
+ [ Michael Biebl ]
+ * Do not send potentially private fstab information without prior user
+ confirmation. (Closes: #743158)
+ * Add support for LSB facilities defined by insserv.
+ Parse /etc/insserv.conf.d content and /etc/insserv.conf and generate
+ systemd unit drop-in files to add corresponding dependencies. Also ship
+ targets for the Debian specific $x-display-manager and
+ $mail-transport-agent system facilities. (Closes: #690892)
+ * Do not accidentally re-enable /var/tmp cleaning when migrating the TMPTIME
+ setting from /etc/default/rcS. Fix up existing broken configurations.
+ (Closes: #738862)
+
+ -- Michael Biebl <biebl@debian.org> Sat, 26 Apr 2014 21:37:29 +0200
+
+systemd (204-8) unstable; urgency=low
+
+ [ Michael Stapelberg ]
+ * move manpages from systemd to libsystemd-*-dev as appropriate
+ (Closes: #738723)
+ * fix systemctl enable/disable/… error message “Failed to issue method call:
+ No such file or directory” (the previous upload did actually not contain
+ this fix due to a merge conflict) (Closes: #738843)
+ * add explicit “Depends: sysv-rc” so that initscript’s “Depends: sysv-rc |
+ file-rc” will not be satisfied with file-rc. We need the invoke-rc.d and
+ update-rc.d from sysv-rc, file-rc’s doesn’t have support for systemd.
+ (Closes: #739679)
+ * set capabilities cap_dac_override,cap_sys_ptrace=ep for
+ systemd-detect-virt, so that it works for unprivileged users.
+ (Closes: #739699)
+ * pam: Check $XDG_RUNTIME_DIR owner (Closes: #731300)
+ * Ignore chkconfig headers entirely, they are often broken in Debian
+ (Closes: #634472)
+
+ [ Michael Biebl ]
+ * do a one-time migration of RAMTMP= from /etc/default/rcS and
+ /etc/default/tmpfs, i.e. enable tmp.mount (Closes: #738687)
+ * Bump Standards-Version to 3.9.5.
+
+ -- Michael Biebl <biebl@debian.org> Wed, 19 Mar 2014 18:57:35 +0100
+
+systemd (204-7) unstable; urgency=low
+
+ * fix systemctl enable/disable/… error message “Failed to issue method call:
+ No such file or directory” (Closes: #734809)
+ * bug-script: attach instead of paste extra info with reportbug ≥ 6.5.0
+ (Closes: #722530)
+ * add stage1 bootstrap support to avoid Build-Depends cycles (Thanks Daniel
+ Schepler)
+ * cherry-pick:
+ order remote mounts from mountinfo before remote-fs.target (77009452cfd)
+ (Closes: #719945)
+ Fix CPUShares configuration option (ccd90a976dba) (Closes: #737156)
+ fix reference in systemd-inhibit(1) (07b4b9b) (Closes: #738316)
+
+ -- Michael Stapelberg <stapelberg@debian.org> Tue, 11 Feb 2014 23:34:42 +0100
+
+systemd (204-6) unstable; urgency=low
+
+ [ Michael Stapelberg ]
+ * Run update-rc.d defaults before update-rc.d <enable|disable>
+ (Closes: #722523)
+ * preinst: preserve var-{lock,run}.mount when upgrading from 44 to 204
+ (Closes: #723936)
+ * fstab-generator: don’t rely on /usr being mounted in the initrd
+ (Closes: #724797)
+ * systemctl: mangle names when avoiding dbus (Closes: #723855)
+ * allow group adm read access on /var/log/journal (Closes: #717386)
+ * add systemd-journal group (Thanks Guido Günther) (Closes: #724668)
+ * copy /etc/localtime instead of symlinking (Closes: #726256)
+ * don’t try to start autovt units when not running with systemd as pid 1
+ (Closes: #726466)
+ * Add breaks/replaces for the new sysvinit-core package (Thanks Alf Gaida)
+ (Closes: #733240)
+ * Add myself to uploaders
+
+ [ Tollef Fog Heen ]
+ * Make 99-systemd.rules check for /run/systemd/systemd instead of the
+ ill-named cgroups directory.
+
+ [ Martin Pitt ]
+ * debian/udev.upstart: Fix path to udevd, the /sbin/udevd compat symlink
+ should go away at some point.
+ * debian/udev-udeb.install: Add 64-btrfs.rules and 75-probe_mtd.rules, they
+ are potentially useful in a d-i environment.
+ * debian/shlibs.local: Drop libudev; this unnecessarily generates overly
+ strict dependencies, the libudev ABI is stable.
+ * debian/extra/rules/75-persistent-net-generator.rules: Add Ravello systems
+ (LP: #1099278)
+
+ -- Michael Stapelberg <stapelberg@debian.org> Tue, 31 Dec 2013 14:39:44 +0100
+
+systemd (204-5) unstable; urgency=high
+
+ * Cherry-pick 72fd713 from upstream which fixes insecure calling of polkit
+ by avoiding a race condition in scraping /proc (CVE-2013-4327).
+ Closes: #723713
+
+ -- Michael Biebl <biebl@debian.org> Mon, 23 Sep 2013 11:59:53 +0200
+
+systemd (204-4) unstable; urgency=low
+
+ * Add preinst check to abort udev upgrade if the currently running kernel
+ lacks devtmpfs support. Since udev 176, devtmpfs is mandatory as udev no
+ longer creates any device nodes itself. This only affects self-compiled
+ kernels which now need CONFIG_DEVTMPFS=y. Closes: #722580
+ * Fix SysV init script to correctly mount a devtmpfs instead of tmpfs. This
+ only affects users without an initramfs, which usually is responsible for
+ mounting the devtmpfs. Closes: #722604
+ * Drop pre-squeeze upgrade code from maintainer scripts and simplify the
+ various upgrade checks.
+ * Suppress errors about unknown hwdb builtin. udev 196 introduced a new
+ "hwdb" builtin which is not understood by the old udev daemon.
+ * Add missing udeb line to shlibs.local. This ensures that udev-udeb gets a
+ proper dependency on libudev1-udeb and not libudev1. Closes: #722939
+ * Remove udev-udeb dependency from libudev1-udeb to avoid a circular
+ dependency between the two packages. This dependency was copied over from
+ the old udev-gtk-udeb package and no longer makes any sense since
+ libudev1-udeb only contains a library nowadays.
+
+ -- Michael Biebl <biebl@debian.org> Wed, 18 Sep 2013 00:05:21 +0200
+
+systemd (204-3) unstable; urgency=low
+
+ [ Michael Biebl ]
+ * Upload to unstable.
+ * Use /bin/bash in debug-shell.service as Debian doesn't have /sbin/sushell.
+ * Only import net.ifaces cmdline property for network devices.
+ * Generate strict dependencies between the binary packages using a
+ shlibs.local file and add an explicit versioned dependency on
+ libsystemd-login0 to systemd to ensure packages are upgraded in sync.
+ Closes: #719444
+ * Drop obsolete Replaces: libudev0 from udev package.
+ * Use correct paths for various binaries, like /sbin/quotaon, which are
+ installed in / and not /usr in Debian. Closes: #721347
+ * Don't install kernel-install(8) man page since we don't install the
+ corresponding binary either. Closes: #722180
+ * Cherry-pick upstream fixes to make switching runlevels and starting
+ reboot via ctrl-alt-del more robust.
+ * Cherry-pick upstream fix to properly apply ACLs to Journal files.
+ Closes: #717863
+
+ [ Michael Stapelberg ]
+ * Make systemctl enable|disable call update-rc.d for SysV init scripts.
+ Closes: #709780
+ * Don't mount /tmp as tmpfs by default and make it possible to enable this
+ feature via "systemctl enable tmp.mount". Closes: #718906
+
+ [ Daniel Schaal ]
+ * Add bug-script to systemd and udev. Closes: #711245
+
+ [ Ondrej Balaz ]
+ * Recognize discard option in /etc/crypttab. Closes: #719167
+
+ -- Michael Biebl <biebl@debian.org> Thu, 12 Sep 2013 00:13:11 +0200
+
+systemd (204-2) experimental; urgency=low
+
+ [ Daniel Schaal ]
+ * Enable verbose build logs. Closes: #717465
+ * Add handling of Message Catalog files to provide additional information
+ for log entries. Closes: #717427
+ * Remove leftover symlink to debian-enable-units.service. Closes: #717349
+
+ [ Michael Stapelberg ]
+ * Install 50-firmware.rules in the initramfs and udeb. Closes: #717635
+
+ [ Michael Biebl ]
+ * Don't pass static start priorities to dh_installinit anymore.
+ * Switch the hwdb trigger to interest-noawait.
+ * Remove obsolete support for configurable udev root from initramfs.
+ * Bind ifup@.service to the network device. This ensures that ifdown is run
+ when the device is removed and the service is stopped.
+ Closes: #660861, #703033
+ * Bump Standards-Version to 3.9.4. No further changes.
+ * Add Breaks against consolekit (<< 0.4.6-1) for udev-acl. Closes: #717385
+ * Make all packages Priority: optional, with the exception of udev and
+ libudev1, which remain Priority: important, and systemd-sysv, which
+ remains Priority: extra due to the conflict with sysvinit.
+ Closes: #717365
+ * Restart systemd-logind.service on upgrades due to changes in the
+ CreateSession D-Bus API between v44 and v204. Closes: #717403
+
+ -- Michael Biebl <biebl@debian.org> Wed, 24 Jul 2013 23:47:59 +0200
+
+systemd (204-1) experimental; urgency=low
+
+ * New upstream release. Closes: #675175, #675177
+ - In v183 the udev sources have been merged into the systemd source tree.
+ As a result, the udev binary packages will now be built from the systemd
+ source package. To align the version numbers 139 releases were skipped.
+ - For a complete list of changes, please refer to the NEWS file.
+ * Add Marco to Uploaders.
+ * Drop Suggests on the various python packages from systemd. The
+ systemd-analyze tool has been reimplemented in C.
+ * Add binary packages as found in the udev 175-7.2 source package.
+ * Wrap dependencies for better readability.
+ * Drop hard-coded Depends on libglib2.0-0 from gir1.2-gudev-1.0.
+ * Drop old Conflicts, Replaces and Breaks, which are no longer necessary.
+ * Make libgudev-1.0-dev depend on gir1.2-gudev-1.0 as per GObject
+ introspection mini-policy. Closes: #691313
+ * The hwdb builtin has replaced pci-db and usb-db in udev. Drop the
+ Recommends on pciutils and usbutils accordingly.
+ * Drop our faketime hack. Upstream uses a custom xsl style sheet now to
+ generate the man pages which no longer embeds the build date.
+ * Add Depends on libpam-runtime (>= 1.0.1-6) to libpam-systemd as we are
+ using pam-auth-update.
+ * Explicitly set Section and Priority for the udev binary package.
+ * Update Build-Depends:
+ - Drop libudev-dev, no longer required.
+ - Add gtk-doc-tools and libglib2.0-doc for the API documentation in
+ libudev and libgudev.
+ - Add libgirepository1.0-dev and gobject-introspection for GObject
+ introspection support in libgudev.
+ - Add libgcrypt11-dev for encryption support in the journal.
+ - Add libblkid-dev for the blkid udev builtin.
+ * Use gir dh addon to ensure ${gir:Depends} is properly set.
+ * Rename libudev0 → libudev1 for the SONAME bump.
+ * Update symbols files. libudev now uses symbols versioning as the other
+ libsystemd libraries. The libgudev-1.0-0 symbols file has been copied from
+ the old udev package.
+ * Run gtkdocize on autoreconf.
+ * Enable python bindings for the systemd libraries and ship them in a new
+ package named python-systemd.
+ * Tighten Depends on libsystemd-id128-dev for libsystemd-journal-dev as per
+ libsystemd-journal.pc.
+ * Remove obsolete bash-completion scripts on upgrades. Nowadays they are
+ installed in /usr/share/bash-completion/completions.
+ * Rename conffiles for logind and journald.
+ * Rename udev-gtk-udeb → libudev1-udeb to better reflect its actual contents.
+ * Build two flavours: a regular build and one for the udev udebs with
+ reduced features/dependencies.
+ * Create a few compat symlinks for the udev package, most notably
+ /sbin/udevadm and /sbin/udevd.
+ * Remove the dpkg-triggered debian-enable-units script. This was a temporary
+ workaround for wheezy. Packages should use dh-systemd now to properly
+ integrate service files with systemd.
+ * Update debian/copyright using the machine-readable copyright format 1.0.
+ * Integrate changes from udev 175-7 and acknowledge the 175-7.1 and 175-7.2
+ non-maintainer uploads.
+ * Keep the old persistent network interface naming scheme for now and make
+ the new one opt-in via net.ifnames=1 on the kernel command line.
+ * Drop the obsolete udev-mtab SysV init script and properly clean up on
+ upgrades.
+ * Simplify the udev SysV init script and remove experimental and obsolete
+ features.
+ * Revert upstream commits which dropped support for distro specific
+ features and config files.
+ * Make logind, hostnamed, localed and timedated D-Bus activatable and
+ usable when systemd is not running.
+ * Store hwdb binary database in /lib/udev, not /etc/udev. Create the file on
+ install and upgrades.
+ * Provide a dpkg file trigger for hwdb, so the database is automatically
+ updated when packages install files into /lib/udev/hwdb.d.
+
+ -- Michael Biebl <biebl@debian.org> Fri, 19 Jul 2013 00:32:36 +0200
+
+systemd (44-12) unstable; urgency=low
+
+ * Cherry-pick e17187 from upstream to fix build failures with newer glibc
+ where the clock_* symbols have been moved from librt to libc.
+ Closes: #701364
+ * If the new init-system-helpers package is installed, make the
+ debian-enable-units script a no-op. The auto-enabler was meant as a
+ temporary workaround and will be removed once all packages use the new
+ helper.
+ * Update the checks which test if systemd is the active init. The
+ recommended check is [ -d /run/systemd/system ] as this will also work
+ with a standalone systemd-logind.
+ * Set Maintainer to pkg-systemd-maintainers@lists.alioth.debian.org. Add
+ Tollef and myself as Uploaders.
+ * Stop building the GUI bits. They have been split into a separate source
+ package called systemd-ui.
+
+ -- Michael Biebl <biebl@debian.org> Thu, 20 Jun 2013 01:32:16 +0200
+
+systemd (44-11) unstable; urgency=low
+
+ * Team upload.
+ * Run debian-enable-units.service after sysinit.target to ensure our tmp
+ files aren't nuked by systemd-tmpfiles.
+ * The mountoverflowtmp SysV init script no longer exists so remove that
+ from remount-rootfs.service to avoid an unnecessary diff to upstream.
+ * Do not fail on purge if /var/lib/systemd is empty and has been removed
+ by dpkg.
+
+ -- Michael Biebl <biebl@debian.org> Wed, 13 Mar 2013 08:03:06 +0100
+
+systemd (44-10) unstable; urgency=low
+
+ * Team upload.
+ * Using the return code of "systemctl is-enabled" to determine whether we
+ enable a service or not is unreliable since it also returns a non-zero
+ exit code for masked services. As we don't want to enable masked services,
+ grep for the string "disabled" instead.
+
+ -- Michael Biebl <biebl@debian.org> Fri, 15 Feb 2013 17:01:24 +0100
+
+systemd (44-9) unstable; urgency=low
+
+ * Team upload.
+ * Fix typo in systemd.socket man page. Closes: #700038
+ * Use color specification in "systemctl dot" which is actually
+ understood by dot. Closes: #643689
+ * Fix mounting of remote filesystems like NFS. Closes: #673309
+ * Use a file trigger to automatically enable service and socket units. A lot
+ of packages simply install systemd units but do not enable them. As a
+ result they will be inactive after the next boot. This is a workaround for
+ wheezy which will be removed again in jessie. Closes: #692150
+
+ -- Michael Biebl <biebl@debian.org> Fri, 15 Feb 2013 13:35:39 +0100
+
+systemd (44-8) unstable; urgency=low
+
+ * Team upload.
+ * Use comment=systemd.* syntax in systemd.mount man page. The
+ mount/util-linux version in wheezy is not recent enough to support the new
+ x-systemd* syntax. Closes: #697141
+ * Don't enable persistent storage of journal log files. The journal in v44
+ is not yet mature enough.
+
+ -- Michael Biebl <biebl@debian.org> Sat, 19 Jan 2013 20:05:05 +0100
+
+systemd (44-7) unstable; urgency=low
+
+ * Fix a regression in the init-functions hook wrt reload handling that was
+ introduced when dropping the X-Interactive hack. Closes: #696355
+
+ -- Michael Biebl <biebl@debian.org> Fri, 21 Dec 2012 00:00:12 +0100
+
+systemd (44-6) unstable; urgency=low
+
+ [ Michael Biebl ]
+ * No longer ship the /sys directory in the systemd package since it is
+ provided by base-files nowadays.
+ * Don't run udev rules if systemd is not active.
+ * Converting /var/run, /var/lock and /etc/mtab to symlinks is a one-time
+ migration so don't run the debian-fixup script on every boot.
+
+ [ Tollef Fog Heen ]
+ * Prevent the systemd package from being removed if it's the active init
+ system, since that doesn't work.
+
+ [ Michael Biebl ]
+ * Use a separate tmpfs for /run/lock (size 5M) and /run/user (size 100M).
+ Those directories are user-writable which could lead to DoS by filling up
+ /run. Closes: #635131
+
+ -- Michael Biebl <biebl@debian.org> Sun, 16 Dec 2012 21:58:37 +0100
+
+systemd (44-5) unstable; urgency=low
+
+ * Team upload.
+
+ [ Tollef Fog Heen ]
+ * disable killing on entering START_PRE, START, thanks to Michael
+ Stapelberg for patch. This avoids killing VMs run through libvirt
+ when restarting libvirtd. Closes: #688635.
+ * Avoid reloading services when shutting down, since that won't work and
+ makes no sense. Thanks to Michael Stapelberg for the patch.
+ Closes: #635777.
+ * Try to determine which init scripts support the reload action
+ heuristically. Closes: #686115, #650382.
+
+ [ Michael Biebl ]
+ * Update Vcs-* fields, the Git repository is hosted on alioth now. Set the
+ default branch to "debian".
+ * Avoid reload and (re)start requests during early boot which can lead to
+ deadlocks. Closes: #624599
+ * Make systemd-cgroup work even if not all cgroup mounts are available on
+ startup. Closes: #690916
+ * Fix typos in the systemd.path and systemd.unit man page. Closes: #668344
+ * Add watch file to track new upstream releases.
+
+ -- Michael Biebl <biebl@debian.org> Thu, 25 Oct 2012 21:41:23 +0200
+
+systemd (44-4) unstable; urgency=low
+
+ [ Michael Biebl ]
+ * Override timestamp for man page building, thereby avoiding skew
+ between architectures which caused problems for multi-arch.
+ Closes: #680011
+
+ [ Tollef Fog Heen ]
+ * Move diversion removal from postinst to preinst. Closes: #679728
+ * Prevent the journal from crashing when running out of disk space.
+ This is 499fb21 from upstream. Closes: #668047.
+ * Stop mounting a tmpfs on /media. Closes: #665943
+
+ -- Tollef Fog Heen <tfheen@debian.org> Sun, 01 Jul 2012 08:17:50 +0200
+
+systemd (44-3) unstable; urgency=low
+
+ [ Michael Biebl ]
+ * Bump to debhelper 9.
+ * Convert to Multi-Arch: same where possible. Closes: #676615
+
+ [ Tollef Fog Heen ]
+ * Cherry-pick d384c7 from upstream to stop journald from leaking
+ memory. Thanks to Andreas Henriksson for testing. Closes: #677701
+ * Ship lsb init script override/integration in /lib/lsb/init-functions.d
+ rather than diverting /lib/lsb/init-functions itself. Add appropriate
+ Breaks to ensure upgrades happen.
+
+ -- Tollef Fog Heen <tfheen@debian.org> Fri, 29 Jun 2012 22:34:16 +0200
+
+systemd (44-2) unstable; urgency=low
+
+ [ Michael Biebl ]
+ * Tighten the versions in the maintscript file
+ * Ship the /sys directory in the package
+ * Re-add workaround for non-interactive PAM sessions
+ * Mask checkroot-bootclean (Closes: #670591)
+ * Don't ignore errores in systemd-sysv postinst
+
+ [ Tollef Fog Heen ]
+ * Bring tmpfiles.d/tmp.conf in line with Debian defaults. Closes: #675422
+ * Make sure /run/sensigs.omit.d exists.
+ * Add python-dbus and python-cairo to Suggests, for systemd-analyze.
+ Closes: #672965
+
+ -- Tollef Fog Heen <tfheen@debian.org> Tue, 08 May 2012 18:04:22 +0200
+
+systemd (44-1) unstable; urgency=low
+
+ [ Tollef Fog Heen ]
+ * New upstream version.
+ - Backport 3492207: journal: PAGE_SIZE is not known on ppc and other
+ archs
+ - Backport 5a2a2a1: journal: react with immediate rotation to a couple
+ of more errors
+ - Backport 693ce21: util: never follow symlinks in rm_rf_children()
+ Fixes CVE-2012-1174, closes: #664364
+ * Drop output message from init-functions hook, it's pointless.
+ * Only rmdir /lib/init/rw if it exists.
+ * Explicitly order debian-fixup before sysinit.target to prevent a
+ possible race condition with the creation of sockets. Thanks to
+ Michael Biebl for debugging this.
+ * Always restart the initctl socket on upgrades, to mask sysvinit
+ removing it.
+
+ [ Michael Biebl ]
+ * Remove workaround for non-interactive sessions from pam config again.
+ * Create compat /dev/initctl symlink in case we are upgrading from a system
+ running a newer version of sysvinit (using /run/initctl) and sysvinit is
+ replaced with systemd-sysv during the upgrade. Closes: #663219
+ * Install new man pages.
+ * Build-Depend on valac (>= 0.12) instead of valac-0.12. Closes: #663323
+
+ -- Tollef Fog Heen <tfheen@debian.org> Tue, 03 Apr 2012 19:59:17 +0200
+
+systemd (43-1) experimental; urgency=low
+
+ [ Tollef Fog Heen ]
+ * Target upload at experimental due to libkmod dependency
+ * New upstream release
+ - Update bash-completion for new verbs and arguments. Closes: #650739
+ - Fixes local DoS (CVE-2012-1101). Closes: #662029
+ - No longer complains if the kernel lacks audit support. Closes: #642503
+ * Fix up git-to-source package conversion script which makes gitpkg
+ happier.
+ * Add libkmod-dev to build-depends
+ * Add symlink from /bin/systemd to /lib/systemd/systemd.
+ * Add --with-distro=debian to configure flags, due to no /etc/os-release
+ yet.
+ * Add new symbols for libsystemd-login0 to symbols file.
+ * Install a tmpfiles.d file for the /dev/initctl → /run/initctl
+ migration. Closes: #657979
+ * Disable coredump handling, it's not ready yet.
+ * If /run is a symlink, don't try to do the /var/run → /run migration.
+ Ditto for /var/lock → /run/lock. Closes: #647495
+
+ [ Michael Biebl ]
+ * Add Build-Depends on liblzma-dev for journal log compression.
+ * Add Build-Depends on libgee-dev, required to build systemadm.
+ * Bump Standards-Version to 3.9.2. No further changes.
+ * Add versioned Build-Depends on automake and autoconf to ensure we have
+ recent enough versions. Closes: #657284
+ * Add packages for libsystemd-journal and libsystemd-id128.
+ * Update symbols file for libsystemd-login.
+ * Update configure flags, use rootprefix instead of rootdir.
+ * Copy intltool files instead of symlinking them.
+ * Re-indent init-functions script.
+ * Remove workarounds for services using X-Interactive. The LSB X-Interactive
+ support turned out to be broken and has been removed upstream so we no
+ longer need any special handling for those type of services.
+ * Install new systemd-journalctl, systemd-cat and systemd-cgtop binaries.
+ * Install /var/lib/systemd directory.
+ * Install /var/log/journal directory where the journal files are stored
+ persistently.
+ * Setup systemd-journald to not read from /proc/kmsg (ImportKernel=no).
+ * Avoid error messages from systemctl in postinst if systemd is not running
+ by checking for /sys/fs/cgroup/systemd before executing systemctl.
+ Closes: #642749
+ * Stop installing lib-init-rw (auto)mount units and try to cleanup
+ /lib/init/rw in postinst. Bump dependency on initscripts accordingly.
+ Closes: #643699
+ * Disable pam_systemd for non-interactive sessions to work around an issue
+ with sudo.
+ * Use new dh_installdeb maintscript facility to handle obsolete conffiles.
+ Bump Build-Depends on debhelper accordingly.
+ * Rename bash completion file systemctl-bash-completion.sh →
+ systemd-bash-completion.sh.
+ * Update /sbin/init symlink. The systemd binary was moved to $pkglibdir.
+
+ -- Tollef Fog Heen <tfheen@debian.org> Tue, 07 Feb 2012 21:36:34 +0100
+
+systemd (37-1.1) unstable; urgency=low
+
+ * Non-maintainer upload with Tollef's consent.
+ * Remove --parallel to workaround a bug in automake 1.11.3 which doesn't
+ generate parallel-safe build rules. Closes: #661842
+ * Create a compat symlink /run/initctl → /dev/initctl to work with newer
+ versions of sysvinit. Closes: #657979
+
+ -- Michael Biebl <biebl@debian.org> Sat, 03 Mar 2012 17:42:10 +0100
+
+systemd (37-1) unstable; urgency=low
+
+ [ Tollef Fog Heen ]
+ * New upstream version
+ * Change the type of the debian-fixup service to oneshot.
+ Closes: #642961
+ * Add ConditionPathIsDirectory to lib-init-rw.automount and
+ lib-init-rw.mount so we only activate the unit if the directory
+ exists. Closes: #633059
+ * If a sysv service exists in both rcS and rcN.d runlevels, drop the
+ rcN.d ones to avoid loops. Closes: #637037
+ * Blacklist fuse init script, we do the same work already internally.
+ Closes: #643700
+ * Update README.Debian slightly for /run rather than /lib/init/rw
+
+ [ Josh Triplett ]
+ * Do a one-time migration of the $TMPTIME setting from /etc/default/rcS to
+ /etc/tmpfiles.d/tmp.conf. If /etc/default/rcS has a TMPTIME setting of
+ "infinite" or equivalent, migrate it to an /etc/tmpfiles.d/tmp.conf that
+ overrides the default /usr/lib/tmpfiles.d/tmp.conf and avoids clearing
+ /tmp. Closes: #643698
+
+ -- Tollef Fog Heen <tfheen@debian.org> Wed, 28 Sep 2011 20:04:13 +0200
+
+systemd (36-1) unstable; urgency=low
+
+ [ Tollef Fog Heen ]
+ * New upstream release. Closes: #634618
+ - Various man page fixes. Closes: #623521
+ * Add debian-fixup service that symlinks mtab to /proc/mounts and
+ migrates /var/run and /var/lock to symlinks to /run
+
+ [ Michael Biebl ]
+ * Build for libnotify 0.7.
+ * Bump Build-Depends on libudev to (>= 172).
+ * Add Build-Depends on libacl1-dev. Required for building systemd-logind
+ with ACL support.
+ * Split libsystemd-login and libsystemd-daemon into separate binary
+ packages.
+ * As autoreconf doesn't like intltool, override dh_autoreconf and call
+ intltoolize and autoreconf ourselves.
+ * Add Build-Depends on intltool.
+ * Do a one-time migration of the hwclock configuration. If UTC is set to
+ "no" in /etc/default/rcS, create /etc/adjtime and add the "LOCAL" setting.
+ * Remove /cgroup cleanup code from postinst.
+ * Add Build-Depends on gperf.
+
+ -- Tollef Fog Heen <tfheen@debian.org> Wed, 14 Sep 2011 08:25:17 +0200
+
+systemd (29-1) unstable; urgency=low
+
+ [ Tollef Fog Heen ]
+ * New upstream version, Closes: #630510
+ - Includes typo fixes in documentation. Closes: #623520
+ * Fall back to the init script reload function if a native .service file
+ doesn't know how to reload. Closes: #628186
+ * Add hard dependency on udev. Closes: #627921
+
+ [ Michael Biebl ]
+ * hwclock-load.service is no longer installed, so we don't need to remove it
+ anymore in debian/rules.
+ * Install /usr/lib directory for binfmt.d, modules-load.d, tmpfiles.d and
+ sysctl.d.
+ * Remove obsolete conffiles from /etc/tmpfiles.d on upgrades. Those files
+ are installed in /usr/lib/tmpfiles.d now.
+ * Depend on util-linux (>= 2.19.1-2) which provides whole-disk locking
+ support in fsck and remove our revert patch.
+ * Don't choke when systemd was compiled with a different CAP_LAST_CAP then
+ what it is run with. Patch cherry-picked from upstream Git.
+ Closes: #628081
+ * Enable dev-hugepages.automount and dev-mqueue.automount only when enabled
+ in kernel. Patch cherry-picked from upstream Git. Closes: #624522
+
+ -- Tollef Fog Heen <tfheen@debian.org> Wed, 08 Jun 2011 16:14:31 +0200
+
+systemd (25-2) experimental; urgency=low
+
+ * Handle downgrades more gracefully by removing diversion of
+ /lib/lsb/init-functions on downgrades to << 25-1.
+ * Cherry-pick a133bf10d09f788079b82f63faa7058a27ba310b from upstream,
+ avoids assert when dumping properties. Closes: #624094
+ * Remove "local" in non-function context in init-functions wrapper.
+
+ -- Tollef Fog Heen <tfheen@debian.org> Wed, 27 Apr 2011 22:20:04 +0200
+
+systemd (25-1) experimental; urgency=low
+
+ * New upstream release, target experimental due to initscripts
+ dependency.
+ - Fixes where to look for locale config. Closes: #619166
+ * Depend on initscripts >= 2.88dsf-13.4 for /run transition.
+ * Add Conflicts on klogd, since it doesn't work correctly with the
+ kmg→/dev/log bridge. Closes: #622555
+ * Add suggests on Python for systemd-analyze.
+ * Divert /lib/lsb/init-functions instead of (ab)using
+ /etc/lsb-base-logging.sh for diverting calls to /etc/init.d/*
+ * Remove obsolete conffile /etc/lsb-base-logging.sh. Closes: #619093
+ * Backport 3a90ae048233021833ae828c1fc6bf0eeab46197 from master:
+ mkdir /run/systemd/system when starting up
+
+ -- Tollef Fog Heen <tfheen@debian.org> Sun, 24 Apr 2011 09:02:04 +0200
+
+systemd (20-1) unstable; urgency=low
+
+ * New upstream version
+ * Install systemd-machine-id-setup
+ * Call systemd-machine-id-setup in postinst
+ * Cherry-pick b8a021c9e276adc9bed5ebfa39c3cab0077113c6 from upstream to
+ prevent dbus assert error.
+ * Enable TCP wrapper support. Closes: #618409
+ * Enable SELinux support. Closes: #618412
+ * Make getty start after Apache2 and OpenVPN (which are the only two
+ known users of X-Interactive: yes). Closes: #618419
+
+ -- Tollef Fog Heen <tfheen@debian.org> Fri, 11 Mar 2011 19:14:21 +0100
+
+systemd (19-1) experimental; urgency=low
+
+ * New upstream release
+ * Add systemd-tmpfiles to systemd package.
+ * Add ifup@.service for handling hotplugged interfaces from
+ udev. Closes: #610871
+ * Mask mtab.service and udev-mtab.service as they are pointless when
+ /etc/mtab is a symlink to /proc/mounts
+ * Add breaks on lvm2 (<< 2.02.84-1) since older versions have udev rules
+ that don't work well with systemd causing delays on bootup.
+
+ -- Tollef Fog Heen <tfheen@debian.org> Thu, 17 Feb 2011 07:36:22 +0100
+
+systemd (17-1) experimental; urgency=low
+
+ [ Tollef Fog Heen ]
+ * New upstream release
+ * Clarify ifupdown instructions in README.Debian somewhat.
+ Closes: #613320
+ * Silently skip masked services in lsb-base-logging.sh instead of
+ failing. Initial implementation by Michael Biebl. Closes: #612551
+ * Disable systemd-vconsole-setup.service for now.
+
+ [ Michael Biebl ]
+ * Bump build dependency on valac-0.10 to (>= 0.10.3).
+ * Improve regex in lsb-base-logging.sh for X-Interactive scripts.
+ Closes: #613325
+
+ -- Tollef Fog Heen <tfheen@debian.org> Wed, 16 Feb 2011 21:06:16 +0100
+
+systemd (16-1) experimental; urgency=low
+
+ [ Tollef Fog Heen ]
+ * New upstream release. Closes: #609611
+ * Get rid of now obsolete patches that are upstream.
+ * Use the built-in cryptsetup support in systemd, build-depend on
+ libcryptsetup-dev (>= 2:1.2.0-1) to get a libcryptsetup in /lib.
+ * Don't use systemctl redirect for init scripts with X-Interactive: true
+
+ [ Michael Biebl ]
+ * Update package description
+ * Use v8 debhelper syntax
+ * Make single-user mode work
+ * Run hwclock-save.service on shutdown
+ * Remove dependencies on legacy sysv mount scripts, as we use native
+ mounting.
+
+ -- Tollef Fog Heen <tfheen@debian.org> Sun, 16 Jan 2011 11:04:13 +0100
+
+systemd (15-1) UNRELEASED; urgency=low
+
+ [ Tollef Fog Heen ]
+ * New upstream version, thanks a lot to Michael Biebl for help with
+ preparing this version.
+ - This version handles cycle breaking better. Closes: #609225
+ * Add libaudit-dev to build-depends
+ * /usr/share/systemd/session has been renamed to /usr/share/systemd/user
+ upstream, adjust build system accordingly.
+ * Remove -s from getty serial console invocation.
+ * Add dependency on new util-linux to make sure /sbin/agetty exists
+ * Don't mount /var/lock with gid=lock (Debian has no such group).
+ * Document problem with ifupdown's /etc/network/run being a normal
+ directory.
+
+ [ Michael Biebl ]
+ * Revert upstream change which requires libnotify 0.7 (not yet available in
+ Debian).
+ * Use dh-autoreconf for updating the build system.
+ * Revert upstream commit which uses fsck -l (needs a newer version of
+ util-linux).
+ * Explicitly disable cryptsetup support to not accidentally pick up a
+ libcryptsetup dependency in a tainted build environment, as the library
+ is currently installed in /usr/lib.
+ * Remove autogenerated man pages and vala C sources, so they are rebuilt.
+ * Use native systemd mount support:
+ - Use MountAuto=yes and SwapAuto=yes (default) in system.conf
+ - Mask SysV init mount, check and cleanup scripts.
+ - Create an alias (symlink) for checkroot (→ remount-rootfs.service) as
+ synchronization point for SysV init scripts.
+ * Mask x11-common, rmnologin, hostname, bootmisc and bootlogd.
+ * Create an alias for procps (→ systemd-sysctl.service) and
+ urandom (→ systemd-random-seed-load.service).
+ * Create an alias for module-init-tools (→ systemd-modules-load.service) and
+ a symlink from /etc/modules-load.d/modules.conf → /etc/modules.
+ * Install lsb-base hook which redirects calls to SysV init scripts to
+ systemctl: /etc/init.d/<foo> <action> → systemctl <action> <foo.service>
+ * Install a (auto)mount unit to mount /lib/init/rw early during boot.
+
+ -- Tollef Fog Heen <tfheen@debian.org> Sat, 20 Nov 2010 09:28:01 +0100
+
+systemd (11-2) UNRELEASED; urgency=low
+
+ * Tighten depends from systemd-* on systemd to ensure they're upgraded
+ in lockstep. Thanks to Michael Biebl for the patch.
+ * Add missing #DEBHELPER# token to libpam-systemd
+ * Stop messing with runlevel5/multi-user.target symlink, this is handled
+ correctly upstream.
+ * Stop shipping /cgroup in the package.
+ * Remove tmpwatch services, Debian doesn't have or use tmpwatch.
+ * Make sure to enable GTK bits.
+ * Ship password agent
+ * Clean up cgroups properly on upgrades, thanks to Michael Biebl for the
+ patch. Closes: #599577
+
+ -- Tollef Fog Heen <tfheen@debian.org> Tue, 02 Nov 2010 21:47:10 +0100
+
+systemd (11-1) experimental; urgency=low
+
+ * New upstream version. Closes: #597284
+ * Add pam-auth-update calls to libpam-systemd's postinst and prerm
+ * Make systemd-sysv depend on systemd
+ * Now mounts the cgroup fs in /sys/fs/cgroup. Closes: #595966
+ * Add libnotify-dev to build-depends (needed for systemadm)
+
+ -- Tollef Fog Heen <tfheen@debian.org> Thu, 07 Oct 2010 22:01:19 +0200
+
+systemd (8-2) experimental; urgency=low
+
+ * Hardcode udev rules dir in configure call.
+ * Remove README.source as it's no longer accurate.
+
+ -- Tollef Fog Heen <tfheen@debian.org> Mon, 30 Aug 2010 21:10:26 +0200
+
+systemd (8-1) experimental; urgency=low
+
+ * New upstream release
+ * Only ship the top /cgroup
+ * Pass --with-rootdir= to configure, to make it think / is / rather
+ than //
+ * Add PAM module package
+ * Fix up dependencies in local-fs.target. Closes: #594420
+ * Move systemadm to its own package. Closes: #588451
+ * Update standards-version (no changes needed)
+ * Update README.Debian to explain how to use systemd.
+ * Add systemd-sysv package that provides /sbin/init and friends.
+
+ -- Tollef Fog Heen <tfheen@debian.org> Sat, 07 Aug 2010 07:31:38 +0200
+
+systemd (0~git+20100605+dfd8ee-1) experimental; urgency=low
+
+ * Initial release, upload to experimental. Closes: #580814
+
+ -- Tollef Fog Heen <tfheen@debian.org> Fri, 30 Apr 2010 21:02:25 +0200
--- /dev/null
+Source: systemd
+Section: admin
+Priority: optional
+Maintainer: Debian systemd Maintainers <pkg-systemd-maintainers@lists.alioth.debian.org>
+Uploaders: Michael Biebl <biebl@debian.org>,
+ Marco d'Itri <md@linux.it>,
+ Sjoerd Simons <sjoerd@debian.org>,
+ Martin Pitt <mpitt@debian.org>
+Standards-Version: 3.9.6
+Vcs-Git: git://anonscm.debian.org/pkg-systemd/systemd.git
+Vcs-Browser: https://anonscm.debian.org/cgit/pkg-systemd/systemd.git
+Homepage: http://www.freedesktop.org/wiki/Software/systemd
+Build-Depends: debhelper (>= 9.20141010),
+ dpkg-dev (>= 1.17.14),
+ pkg-config,
+ xsltproc,
+ docbook-xsl,
+ docbook-xml,
+ m4,
+ dh-autoreconf,
+ automake (>= 1.11),
+ autoconf (>= 2.63),
+ intltool,
+ gperf,
+ gnu-efi [amd64 i386],
+ libcap-dev (>= 1:2.24-9~),
+ libpam0g-dev,
+ libapparmor-dev (>= 2.9.0-3+exp2) <!stage1>,
+ libaudit-dev <!stage1>,
+ libdbus-1-dev (>= 1.3.2) <!nocheck>,
+ libcryptsetup-dev (>= 2:1.6.0) <!stage1>,
+ libselinux1-dev (>= 2.1.9),
+ libacl1-dev,
+ liblzma-dev,
+ libbz2-dev <!stage1>,
+ zlib1g-dev <!stage1> | libz-dev <!stage1>,
+ libcurl4-gnutls-dev <!stage1> | libcurl-dev <!stage1>,
+ libmicrohttpd-dev <!stage1>,
+ libgnutls28-dev <!stage1>,
+ libgcrypt20-dev,
+ libkmod-dev (>= 15),
+ libblkid-dev (>= 2.24),
+ libmount-dev (>= 2.27.1),
+ libseccomp-dev (>= 2.2.3-3~) [amd64 arm64 armel armhf i386 mips mipsel mips64 mips64el x32 powerpc ppc64el s390x],
+ libdw-dev (>= 0.158) <!stage1>,
+ linux-base <!nocheck>,
+ acl <!nocheck>,
+ python3:native,
+ python3-lxml:native
+
+Package: systemd
+Architecture: linux-any
+Multi-Arch: foreign
+Section: admin
+Priority: important
+Recommends: libpam-systemd,
+ dbus
+Suggests: systemd-ui,
+ systemd-container
+Pre-Depends: ${shlibs:Pre-Depends},
+ ${misc:Pre-Depends}
+Depends: ${shlibs:Depends},
+ ${misc:Depends},
+ libsystemd0 (= ${binary:Version}),
+ util-linux (>= 2.27.1),
+ mount (>= 2.26),
+ adduser,
+ libcap2-bin
+Breaks: lvm2 (<< 2.02.104-1),
+ lsb-base (<< 4.1+Debian4),
+ apparmor (<< 2.9.2-1),
+ systemd-shim (<< 8-2),
+ ifupdown (<< 0.8.5~),
+ udev (<< 228-5),
+Replaces: udev (<< 228-5),
+Conflicts: klogd
+Description: system and service manager
+ systemd is a system and service manager for Linux. It provides aggressive
+ parallelization capabilities, uses socket and D-Bus activation for starting
+ services, offers on-demand starting of daemons, keeps track of processes
+ using Linux control groups, supports snapshotting and restoring of the system
+ state, maintains mount and automount points and implements an elaborate
+ transactional dependency-based service control logic.
+ .
+ systemd is compatible with SysV and LSB init scripts and can work as a
+ drop-in replacement for sysvinit.
+ .
+ Installing the systemd package will not switch your init system unless you
+ boot with init=/bin/systemd or install systemd-sysv in addition.
+
+Package: systemd-sysv
+Architecture: linux-any
+Multi-Arch: foreign
+Section: admin
+Priority: important
+Conflicts: sysvinit-core,
+ upstart (<< 1.13.2-0ubuntu10~),
+ upstart-sysv,
+ openrc,
+ file-rc,
+Replaces: sysvinit (<< 2.88dsf-44~),
+ sysvinit-core,
+ upstart (<< 1.13.2-0ubuntu10~),
+ upstart-sysv,
+Pre-Depends: systemd
+Depends: ${shlibs:Depends},
+ ${misc:Depends}
+Description: system and service manager - SysV links
+ systemd is a system and service manager for Linux. It provides aggressive
+ parallelization capabilities, uses socket and D-Bus activation for starting
+ services, offers on-demand starting of daemons, keeps track of processes
+ using Linux control groups, supports snapshotting and restoring of the system
+ state, maintains mount and automount points and implements an elaborate
+ transactional dependency-based service control logic.
+ .
+ systemd is compatible with SysV and LSB init scripts and can work as a
+ drop-in replacement for sysvinit.
+ .
+ This package provides the manual pages and links needed for systemd
+ to replace sysvinit. Installing systemd-sysv will overwrite /sbin/init with a
+ link to systemd.
+
+Package: systemd-container
+Build-Profiles: <!stage1>
+Architecture: linux-any
+Multi-Arch: foreign
+Section: admin
+Priority: optional
+Depends: ${shlibs:Depends},
+ ${misc:Depends},
+ systemd
+Breaks: systemd (<< 224-2)
+Replaces: systemd (<< 224-2)
+Description: systemd container/nspawn tools
+ This package provides systemd's tools for nspawn and container/VM management:
+ * systemd-nspawn
+ * systemd-machined and machinectl
+ * systemd-importd
+
+Package: systemd-journal-remote
+Build-Profiles: <!stage1>
+Architecture: linux-any
+Multi-Arch: foreign
+Section: admin
+Priority: optional
+Depends: ${shlibs:Depends},
+ ${misc:Depends},
+ systemd,
+ adduser
+Description: tools for sending and receiving remote journal logs
+ This package provides tools for sending and receiving remote journal logs:
+ * systemd-journal-remote
+ * systemd-journal-upload
+ * systemd-journal-gatewayd
+
+Package: systemd-coredump
+Build-Profiles: <!stage1>
+Architecture: linux-any
+Multi-Arch: foreign
+Section: admin
+Priority: optional
+Depends: ${shlibs:Depends},
+ ${misc:Depends},
+ systemd
+Conflicts: core-dump-handler
+Replaces: core-dump-handler
+Provides: core-dump-handler
+Description: tools for storing and retrieving coredumps
+ This package provides systemd tools for storing and retrieving coredumps:
+ * systemd-coredump
+ * coredumpctl
+
+Package: libpam-systemd
+Architecture: linux-any
+Multi-Arch: same
+Section: admin
+Priority: optional
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${shlibs:Depends},
+ ${misc:Depends},
+ systemd (= ${binary:Version}),
+ libpam-runtime (>= 1.0.1-6),
+ dbus,
+ systemd-shim (>= 8-2) | systemd-sysv
+Description: system and service manager - PAM module
+ This package contains the PAM module which registers user sessions in
+ the systemd control group hierarchy for logind.
+ .
+ If in doubt, do install this package.
+ .
+ Packages that depend on logind functionality need to depend on libpam-systemd.
+
+Package: libnss-myhostname
+Architecture: linux-any
+Multi-Arch: same
+Section: admin
+Priority: extra
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${shlibs:Depends},
+ ${misc:Depends},
+Breaks: systemd (<< 222-1)
+Replaces: systemd (<< 222-1)
+Description: nss module providing fallback resolution for the current hostname
+ This package contains a plugin for the Name Service Switch, providing host
+ name resolution for the locally configured system hostname as returned by
+ gethostname(2). It returns all locally configured public IP addresses or -- if
+ none are configured, the IPv4 address 127.0.1.1 (which is on the local
+ loopback) and the IPv6 address ::1 (which is the local host).
+ .
+ A lot of software relies on that the local host name is resolvable. This
+ package provides an alternative to the fragile and error-prone manual editing
+ of /etc/hosts.
+ .
+ Installing this package automatically adds myhostname to /etc/nsswitch.conf.
+
+Package: libnss-mymachines
+Architecture: linux-any
+Multi-Arch: same
+Section: admin
+Priority: extra
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${shlibs:Depends},
+ ${misc:Depends},
+Breaks: systemd (<< 222-1)
+Replaces: systemd (<< 222-1)
+Description: nss module to resolve hostnames for local container instances
+ nss-mymachines is a plugin for the GNU Name Service Switch (NSS) functionality
+ of the GNU C Library (glibc) providing hostname resolution for local containers
+ that are registered with systemd-machined.service(8). The container names are
+ resolved to IP addresses of the specific container, ordered by their scope.
+ .
+ Installing this package automatically adds mymachines to /etc/nsswitch.conf.
+
+Package: libnss-resolve
+Architecture: linux-any
+Multi-Arch: same
+Section: admin
+Priority: extra
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${shlibs:Depends},
+ ${misc:Depends},
+ systemd,
+Breaks: systemd (<< 227-3)
+Replaces: systemd (<< 227-3)
+Description: nss module to resolve names via systemd-resolved
+ nss-resolve is a plugin for the GNU Name Service Switch (NSS) functionality
+ of the GNU C Library (glibc) providing DNS and LLMNR resolution to programs via
+ the systemd-resolved daemon (provided in the systemd package).
+ .
+ Installing this package automatically adds resolve to /etc/nsswitch.conf.
+
+Package: libsystemd0
+Architecture: linux-any
+Multi-Arch: same
+Section: libs
+Priority: optional
+Pre-Depends: ${shlibs:Depends},
+ ${misc:Pre-Depends}
+Depends: ${misc:Depends}
+Description: systemd utility library
+ The libsystemd0 library provides interfaces to various systemd components.
+
+Package: libsystemd-dev
+Architecture: linux-any
+Multi-Arch: same
+Section: libdevel
+Priority: optional
+Depends: ${shlibs:Depends},
+ ${misc:Depends},
+ libsystemd0 (= ${binary:Version})
+Breaks: systemd (<< 204-8),
+ libsystemd-login-dev (<< 209),
+ libsystemd-daemon-dev (<< 209),
+ libsystemd-journal-dev (<< 209),
+ libsystemd-id128-dev (<< 209),
+Replaces: systemd (<< 204-8),
+ libsystemd-login-dev (<< 209),
+ libsystemd-daemon-dev (<< 209),
+ libsystemd-journal-dev (<< 209),
+ libsystemd-id128-dev (<< 209),
+Description: systemd utility library - development files
+ The libsystemd0 library provides interfaces to various systemd components.
+ .
+ This package contains the development files.
+
+Package: udev
+Section: admin
+Priority: important
+Architecture: linux-any
+Multi-Arch: foreign
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${shlibs:Depends},
+ ${misc:Depends},
+ adduser,
+ libudev1 (= ${binary:Version}),
+ lsb-base (>= 3.0-6),
+ util-linux (>= 2.27.1),
+ s390-tools (>> 1.6.2) [s390],
+ procps
+Breaks: consolekit (<< 0.4.6-1),
+ kmod (<< 14),
+ plymouth (<< 0.9.0-7),
+ bash-completion (<< 1:2.1),
+ systemd (<< 224-2),
+ ifupdown (<< 0.8.5~),
+Replaces: bash-completion (<< 1:2.1),
+ systemd (<< 224-2)
+Description: /dev/ and hotplug management daemon
+ udev is a daemon which dynamically creates and removes device nodes from
+ /dev/, handles hotplug events and loads drivers at boot time.
+
+Package: libudev1
+Section: libs
+Priority: important
+Architecture: linux-any
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${shlibs:Depends},
+ ${misc:Depends}
+Description: libudev shared library
+ This library provides access to udev device information.
+
+Package: libudev-dev
+Section: libdevel
+Priority: optional
+Architecture: linux-any
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${shlibs:Depends},
+ ${misc:Depends},
+ libudev1 (= ${binary:Version})
+Description: libudev development files
+ This package contains the files needed for developing applications that
+ use libudev.
+
+Package: udev-udeb
+Build-Profiles: <!noudeb>
+XC-Package-Type: udeb
+Section: debian-installer
+Priority: optional
+Architecture: linux-any
+Depends: ${shlibs:Depends},
+ ${misc:Depends},
+ util-linux-udeb
+Description: /dev/ and hotplug management daemon
+ udev is a daemon which dynamically creates and removes device nodes from
+ /dev/, handles hotplug events and loads drivers at boot time.
+ .
+ This is a minimal version, only for use in the installation system.
+
+Package: libudev1-udeb
+Build-Profiles: <!noudeb>
+Package-Type: udeb
+Section: debian-installer
+Priority: optional
+Architecture: linux-any
+Depends: ${shlibs:Depends},
+ ${misc:Depends}
+Description: libudev shared library
+ This library provides access to udev device information.
+ .
+ This is a minimal version, only for use in the installation system.
+
+Package: systemd-dbg
+Architecture: linux-any
+Section: debug
+Priority: extra
+Depends: ${misc:Depends},
+ systemd (= ${binary:Version}),
+ udev (= ${binary:Version}),
+ libsystemd0 (= ${binary:Version}),
+ libudev1 (= ${binary:Version})
+Description: system and service manager (debug symbols)
+ This package contains the debugging symbols for systemd, udev and
+ related libraries.
--- /dev/null
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: systemd
+Upstream-Contact: systemd-devel@lists.freedesktop.org
+Source: http://www.freedesktop.org/wiki/Software/systemd/
+
+Files: debian/*
+Copyright: 2010-2013 Tollef Fog Heen <tfheen@debian.org>
+ 2013-2015 Michael Biebl <biebl@debian.org>
+ 2013 Michael Stapelberg <stapelberg@debian.org>
+License: LGPL-2.1+
+
+Files: *
+Copyright: 2008-2015 Kay Sievers <kay@vrfy.org>
+ 2010-2015 Lennart Poettering
+ 2012-2015 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
+ 2013-2015 Tom Gundersen <teg@jklm.no>
+ 2013-2015 Daniel Mack
+ 2010-2015 Harald Hoyer
+ 2013-2015 David Herrmann
+ 2013, 2014 Thomas H.P. Andersen
+ 2013, 2014 Daniel Buch
+ 2014 Susant Sahani
+ 2009-2015 Intel Corporation
+ 2000, 2005 Red Hat, Inc.
+ 2009 Alan Jenkins <alan-jenkins@tuffmail.co.uk>
+ 2010 ProFUSION embedded systems
+ 2010 Maarten Lankhorst
+ 1995-2004 Miquel van Smoorenburg
+ 1999 Tom Tromey
+ 2011 Michal Schmidt
+ 2012 B. Poettering
+ 2012 Holger Hans Peter Freyther
+ 2012 Dan Walsh
+ 2012 Roberto Sassu
+ 2013 David Strauss
+ 2013 Marius Vollmer
+ 2013 Jan Janssen
+ 2013 Simon Peeters
+License: LGPL-2.1+
+
+Files: src/basic/siphash24.h
+ src/basic/siphash24.c
+Copyright: 2012 Jean-Philippe Aumasson <jeanphilippe.aumasson@gmail.com>
+ 2012 Daniel J. Bernstein <djb@cr.yp.to>
+License: CC0
+
+Files: src/basic/securebits.h
+Copyright: Linus Torvalds <torvalds@athlon.transmeta.com>
+License: GPL-2
+
+Files: src/basic/ioprio.h
+Copyright: Jens Axboe <axboe@suse.de>
+License: GPL-2
+
+Files: src/shared/linux/auto_dev-ioctl.h
+Copyright: 2008 Red Hat, Inc.
+ 2008 Ian Kent <raven@themaw.net>
+License: GPL-2+
+
+Files: src/basic/sparse-endian.h
+Copyright: 2012 Josh Triplett <josh@joshtriplett.org>
+License: Expat
+
+Files: src/journal/lookup3.c
+ src/journal/lookup3.h
+Copyright: 2006 Bob Jenkins
+License: public-domain
+ You can use this free for any purpose. It's in the public domain. It has no
+ warranty.
+
+Files: src/udev/*
+Copyright: 2003-2012 Kay Sievers <kay@vrfy.org>
+ 2003-2004 Greg Kroah-Hartman <greg@kroah.com>
+ 2004 Chris Friesen <chris_friesen@sympatico.ca>
+ 2004, 2009, 2010 David Zeuthen <david@fubar.dk>
+ 2005, 2006 SUSE Linux Products GmbH
+ 2003 IBM Corp.
+ 2007 Hannes Reinecke <hare@suse.de>
+ 2009 Canonical Ltd.
+ 2009 Scott James Remnant <scott@netsplit.com>
+ 2009 Martin Pitt <martin.pitt@ubuntu.com>
+ 2009 Piter Punk <piterpunk@slackware.com>
+ 2009, 2010 Lennart Poettering
+ 2009 Filippo Argiolas <filippo.argiolas@gmail.com>
+ 2010 Maxim Levitsky
+ 2011 ProFUSION embedded systems
+ 2011 Karel Zak <kzak@redhat.com>
+ 2014 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
+ 2014 David Herrmann <dh.herrmann@gmail.com>
+ 2014 Carlos Garnacho <carlosg@gnome.org>
+License: GPL-2+
+
+Files: src/udev/udev-ctrl.c
+ src/udev/udevadm-hwdb.c
+ src/udev/udev-builtin.c
+ src/udev/udev-builtin-net_id.c
+ src/udev/udev-builtin-net_setup_link.c
+ src/udev/udev-builtin-hwdb.c
+ src/udev/udev-builtin-btrfs.c
+ src/udev/udev-builtin-keyboard.c
+ src/udev/net/link-config.h
+ src/udev/net/link-config.c
+ src/udev/net/ethtool-util.c
+ src/udev/net/ethtool-util.h
+Copyright: 2007-2013 Kay Sievers <kay@vrfy.org>
+ 2013 Tom Gundersen <teg@jklm.no>
+License: LGPL-2.1+
+
+Files: src/udev/scsi_id/scsi.h
+Copyright: 2003 IBM Corp.
+License: GPL-2
+
+License: Expat
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to
+ deal in the Software without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+ .
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ IN THE SOFTWARE.
+
+License: GPL-2
+ This program 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; version 2 of the License.
+ .
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+ .
+ On Debian and systems the full text of the GNU General Public
+ License version 2 can be found in the file
+ `/usr/share/common-licenses/GPL-2`
+
+License: GPL-2+
+ This program 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, or (at your option)
+ any later version.
+ .
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ .
+ On Debian systems, the complete text of the GNU General Public License
+ version 2 can be found in ‘/usr/share/common-licenses/GPL-2’.
+
+License: LGPL-2.1+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1, or (at your option)
+ any later version.
+ .
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+ .
+ You should have received a copy of the GNU Lesser General Public License along
+ with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ .
+ On Debian systems, the complete text of the GNU Lesser General Public
+ License version 2.1 can be found in ‘/usr/share/common-licenses/LGPL-2.1’.
+
+License: CC0
+ To the extent possible under law, the author(s) have dedicated all copyright
+ and related and neighboring rights to this software to the public domain
+ worldwide. This software is distributed without any warranty.
+ .
+ You should have received a copy of the CC0 Public Domain Dedication along with
+ this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
--- /dev/null
+# Use MAC based names for network interfaces which are (directly or indirectly)
+# on USB. Path based names are inadequate for dynamic buses like USB.
+
+[Match]
+Path=*-usb-*
+
+[Link]
+NamePolicy=kernel database onboard mac
+MACAddressPolicy=persistent
--- /dev/null
+#!/bin/sh
+# Prepare systemd source package in current directory for testing an upstream
+# commit, branch, or PR, without Debian patches. This replaces everything
+# except the debian/ directory with an upstream checkout.
+# NEVER run this in your actual packaging work directory! This is only meant
+# for upstream CI.
+#
+# Author: Martin Pitt <martin.pitt@ubuntu.com>
+
+set -eu
+test -x debian/rules
+if [ -z "${TEST_UPSTREAM:-}" ]; then
+ echo "Not in upstream testing mode. Do *not* run this script unless you know what you are doing." >&2
+ exit 1
+fi
+if [ -n "${UPSTREAM_PULL_REQUEST:-}" ]; then
+ FETCH="git fetch -fu origin refs/pull/$UPSTREAM_PULL_REQUEST/head:pr"
+ CO='git checkout pr'
+ DESC="PR #$UPSTREAM_PULL_REQUEST"
+elif [ -n "${UPSTREAM_HEAD:-}" ]; then
+ FETCH=''
+ CO="git checkout $UPSTREAM_HEAD"
+ DESC="$UPSTREAM_HEAD"
+else
+ echo "WARNING: $0: Neither UPSTREAM_PULL_REQUEST nor UPSTREAM_HEAD set, ignoring" >&2
+ exit 0
+fi
+
+mkdir -p debian/tmp
+(cd debian/tmp
+ git clone https://github.com/systemd/systemd.git upstream
+ cd upstream
+ $FETCH
+ $CO)
+UPSTREAM_VER=$(cd debian/tmp/upstream; git describe | sed 's/^v//')
+
+# clean out original upstream sources and patches
+find -mindepth 1 -maxdepth 1 -name debian -prune -o -print0 | xargs -0n1 rm -rf
+rm -rf debian/patches
+
+# replace with checkout
+mv debian/tmp/upstream/* .
+rm -rf debian/tmp
+
+# craft changelog
+cat << EOF > debian/changelog.new
+systemd (${UPSTREAM_VER}-0) UNRELEASED; urgency=low
+
+ * Automatic build from upstream $DESC
+
+ -- systemd test <pkg-systemd-maintainers@lists.alioth.debian.org> $(date -R)
+
+EOF
+cat debian/changelog >> debian/changelog.new
+mv debian/changelog.new debian/changelog
+
+# disable tests which are not for upstream
+sed -i '/# NOUPSTREAM/ q' debian/tests/control
--- /dev/null
+# This file blacklists most old-style PCI framebuffer drivers.
+
+blacklist arkfb
+blacklist aty128fb
+blacklist atyfb
+blacklist radeonfb
+blacklist cirrusfb
+blacklist cyber2000fb
+blacklist kyrofb
+blacklist matroxfb_base
+blacklist mb862xxfb
+blacklist neofb
+blacklist pm2fb
+blacklist pm3fb
+blacklist s3fb
+blacklist savagefb
+blacklist sisfb
+blacklist tdfxfb
+blacklist tridentfb
+blacklist vt8623fb
--- /dev/null
+# -*-Shell-script-*-
+# /lib/lsb/init-functions
+
+_use_systemctl=0
+if [ -d /run/systemd/system ]; then
+
+ prog=${0##*/}
+ service="${prog%.sh}.service"
+
+ # Don't try to run masked services. Don't check for errors, if
+ # this errors, we'll just call systemctl and possibly explode
+ # there.
+ state=$(systemctl -p LoadState show $service 2>/dev/null)
+ [ "$state" = "LoadState=masked" ] && exit 0
+
+ # Redirect SysV init scripts when executed by the user
+ if [ $PPID -ne 1 ] && [ -z "${init:-}" ] && [ -z "${_SYSTEMCTL_SKIP_REDIRECT:-}" ]; then
+ case $(readlink -f "$0") in
+ /etc/init.d/*)
+ _use_systemctl=1
+ # Some services can't reload through the .service file,
+ # but can through the init script.
+ if [ "$(systemctl -p CanReload show $service 2>/dev/null)" = "CanReload=no" ] && [ "${1:-}" = "reload" ]; then
+ _use_systemctl=0
+ fi
+ ;;
+ esac
+ else
+ export _SYSTEMCTL_SKIP_REDIRECT="true"
+ fi
+fi
+
+systemctl_redirect () {
+ local s
+ local rc
+ local prog=${1##*/}
+ local command=$2
+
+ case "$command" in
+ start)
+ s="Starting $prog (via systemctl)"
+ ;;
+ stop)
+ s="Stopping $prog (via systemctl)"
+ ;;
+ reload|force-reload)
+ s="Reloading $prog configuration (via systemctl)"
+ ;;
+ restart)
+ s="Restarting $prog (via systemctl)"
+ ;;
+ esac
+
+ service="${prog%.sh}.service"
+
+ # avoid deadlocks during bootup and shutdown from units/hooks
+ # which call "invoke-rc.d service reload" and similar, since
+ # the synchronous wait plus systemd's normal behaviour of
+ # transactionally processing all dependencies first easily
+ # causes dependency loops
+ if ! OUT=$(systemctl is-system-running 2>/dev/null) && [ "$OUT" != "degraded" ]; then
+ sctl_args="--job-mode=ignore-dependencies"
+ fi
+
+ [ "$command" = status ] || log_daemon_msg "$s" "$service"
+ /bin/systemctl $sctl_args $command "$service"
+ rc=$?
+ [ "$command" = status ] || log_end_msg $rc
+
+ return $rc
+}
+
+if [ "$_use_systemctl" = "1" ]; then
+ # Some init scripts use "set -e" and "set -u", we don't want that
+ # here
+ set +e
+ set +u
+
+ if [ "x$1" = xstart -o \
+ "x$1" = xstop -o \
+ "x$1" = xrestart -o \
+ "x$1" = xreload -o \
+ "x$1" = xforce-reload -o \
+ "x$1" = xstatus ] ; then
+
+ systemctl_redirect $0 $1
+ exit $?
+ fi
+fi
--- /dev/null
+#!/bin/sh -e
+
+PREREQS=""
+
+prereqs() { echo "$PREREQS"; }
+
+case "$1" in
+ prereqs)
+ prereqs
+ exit 0
+ ;;
+esac
+
+. /usr/share/initramfs-tools/hook-functions
+
+mkdir -p $DESTDIR/lib/systemd
+copy_exec /lib/systemd/systemd-udevd /lib/systemd
+copy_exec /bin/udevadm /bin
+
+# copy compat symlink
+cp -a /sbin/udevadm $DESTDIR/sbin/udevadm
+
+mkdir -p $DESTDIR/etc/udev
+cp -p /etc/udev/udev.conf $DESTDIR/etc/udev/
+
+# copy .link files containing interface naming definitions
+mkdir -p $DESTDIR/lib/systemd/network/
+find /lib/systemd/network -name '*.link' -execdir cp -pt $DESTDIR/lib/systemd/network/ '{}' +
+if [ -d /etc/systemd/network ]; then
+ find /etc/systemd/network -name '*.link' -execdir cp -pt $DESTDIR/lib/systemd/network/ '{}' +
+fi
+
+mkdir -p $DESTDIR/lib/udev/rules.d/
+for rules in 50-firmware.rules 50-udev-default.rules 60-persistent-storage.rules \
+ 61-persistent-storage-android.rules 75-net-description.rules \
+ 80-net-setup-link.rules 80-drivers.rules; do
+ if [ -e /etc/udev/rules.d/$rules ]; then
+ cp -p /etc/udev/rules.d/$rules $DESTDIR/lib/udev/rules.d/
+ elif [ -e /lib/udev/rules.d/$rules ]; then
+ cp -p /lib/udev/rules.d/$rules $DESTDIR/lib/udev/rules.d/
+ fi
+done
+
+# now copy all custom udev rules which don't have an equivalent in /lib (e. g.
+# 70-persistent-net.rules or similar); They might contain network names or
+# other bits which are relevant for the initramfs.
+for rules in /etc/udev/rules.d/*.rules; do
+ if [ -e "$rules" ] && [ ! -e "/lib/${rules#/etc/}" ]; then
+ cp -p $rules $DESTDIR/lib/udev/rules.d/
+ fi
+done
+
+for program in ata_id scsi_id; do
+ copy_exec /lib/udev/$program /lib/udev
+done
+copy_exec /sbin/blkid /sbin
--- /dev/null
+#!/bin/sh -e
+
+PREREQS=""
+
+prereqs() { echo "$PREREQS"; }
+
+case "$1" in
+ prereqs)
+ prereqs
+ exit 0
+ ;;
+esac
+
+# Stop udevd, we'll miss a few events while we run init, but we catch up
+udevadm control --exit
+
+# move the /dev tmpfs to the rootfs
+mount -n -o move /dev ${rootmnt}/dev
+
+# create a temporary symlink to the final /dev for other initramfs scripts
+if command -v nuke >/dev/null; then
+ nuke /dev
+else
+ rm -rf /dev
+fi
+ln -s ${rootmnt}/dev /dev
+
--- /dev/null
+#!/bin/sh -e
+
+PREREQS=""
+
+prereqs() { echo "$PREREQS"; }
+
+case "$1" in
+ prereqs)
+ prereqs
+ exit 0
+ ;;
+esac
+
+if [ -w /sys/kernel/uevent_helper ]; then
+ echo > /sys/kernel/uevent_helper
+fi
+
+if [ "$quiet" = "y" ]; then
+ log_level=notice
+else
+ log_level=info
+fi
+
+SYSTEMD_LOG_LEVEL=$log_level /lib/systemd/systemd-udevd --daemon --resolve-names=never
+
+udevadm trigger --action=add
+udevadm settle || true
+
+# Leave udev running to process events that come in out-of-band (like USB
+# connections)
--- /dev/null
+#!/bin/sh
+# This script should be run before building the package every time a new
+# kernel is released.
+#
+# You should pass the name of the modules directory for a 486 flavour
+# kernel, as that has the most framebuffer modules.
+#
+# Also, obsolete modules should not be removed from the list until after
+# at least one stable release.
+
+set -e
+
+if [ $# = 0 ]; then
+ MODULES_DIR=/lib/modules/$(uname -r)
+else
+ MODULES_DIR="$1"
+fi
+
+BL='fbdev-blacklist.conf'
+
+if [ -e extra/$BL ]; then cd extra; fi
+
+{
+printf "# This file blacklists most old-style PCI framebuffer drivers.\n\n"
+
+find "$MODULES_DIR"/kernel/drivers/video -type f | sort | \
+while read file; do
+ name="$(basename $file .ko)"
+ case $name in
+ lxfb)
+ # This is needed for text consoles on OLPC XO-1, and it used to be
+ # built-in anyway.
+ ;;
+ viafb) ;; # Needed by OLPC XO-1.5
+ *)
+ /sbin/modinfo $file | grep -q '^alias: *pci:' \
+ && echo blacklist $name || true
+ ;;
+ esac
+done
+} > $BL.tmp
+
+if diff --unified=0 $BL $BL.tmp; then
+ rm $BL.tmp
+else
+ printf "\n\n\n$BL.tmp has changes!\n\n\n\n"
+fi
+
--- /dev/null
+Name: Register user sessions in the systemd control group hierarchy
+Default: yes
+Priority: 0
+Session-Interactive-Only: yes
+Session-Type: Additional
+Session:
+ optional pam_systemd.so
--- /dev/null
+# On Hyper-V and Xen Virtual Machines we want to add memory and cpus as soon as they appear
+ATTR{[dmi/id]sys_vendor}=="Microsoft Corporation", ATTR{[dmi/id]product_name}=="Virtual Machine", GOTO="vm_hotadd_apply"
+ATTR{[dmi/id]sys_vendor}=="Xen", GOTO="vm_hotadd_apply"
+GOTO="vm_hotadd_end"
+
+LABEL="vm_hotadd_apply"
+
+# Memory hotadd request
+SUBSYSTEM=="memory", ACTION=="add", DEVPATH=="/devices/system/memory/memory[0-9]*", TEST=="state", ATTR{state}="online"
+
+# CPU hotadd request
+SUBSYSTEM=="cpu", ACTION=="add", DEVPATH=="/devices/system/cpu/cpu[0-9]*", TEST=="online", ATTR{online}="1"
+
+LABEL="vm_hotadd_end"
--- /dev/null
+# Android based kernel exports the uevent property PARTNAME, which can be
+# used to find out at run time the named partitions (e.g. boot) for the
+# device. This is specially useful for the Touch based images and flash-kernel,
+# to automatically update the kernel by writing at the correct partition
+# (independently of the hardware revision).
+ACTION!="remove", KERNEL=="mmcblk[0-9]p[0-9]", ENV{PARTNAME}=="?*", SYMLINK+="disk/by-partlabel/$env{PARTNAME}"
+
--- /dev/null
+ACTION!="remove", SUBSYSTEM=="input", KERNEL=="event*", SUBSYSTEMS=="platform", KERNELS=="gpio_keys.6|soc:gpio_keys", PROGRAM="/bin/cat /proc/device-tree/model", RESULT=="HP ProLiant m400 Server Cartridge", TAG+="power-switch"
+ACTION!="remove", SUBSYSTEM=="input", KERNEL=="event*", SUBSYSTEMS=="platform", KERNELS=="gpio_keys.12", ATTRS{keys}=="116", PROGRAM="/bin/cat /proc/device-tree/model", RESULT=="HP ProLiant m800 Server Cartridge", TAG+="power-switch"
--- /dev/null
+# do not edit this file, it will be overwritten on update
+
+ACTION!="add", GOTO="graphics_end"
+
+# Tag the drm device for KMS-supporting drivers as the primary device for
+# the display; for non-KMS drivers tag the framebuffer device instead.
+
+SUBSYSTEM!="drm", GOTO="drm_end"
+KERNEL!="card[0-9]*", GOTO="drm_end"
+ENV{DEVTYPE}!="drm_minor", GOTO="drm_end"
+
+DRIVERS=="i915", ENV{PRIMARY_DEVICE_FOR_DISPLAY}="1"
+DRIVERS=="radeon", ENV{PRIMARY_DEVICE_FOR_DISPLAY}="1"
+DRIVERS=="nouveau", ENV{PRIMARY_DEVICE_FOR_DISPLAY}="1"
+DRIVERS=="vmwgfx", ENV{PRIMARY_DEVICE_FOR_DISPLAY}="1"
+
+LABEL="drm_end"
+
+SUBSYSTEM!="graphics", GOTO="graphics_end"
+
+DRIVERS=="i915", GOTO="graphics_end"
+DRIVERS=="radeon", GOTO="graphics_end"
+DRIVERS=="nouveau", GOTO="graphics_end"
+DRIVERS=="efifb", GOTO="graphics_end"
+DRIVERS=="efi-framebuffer", GOTO="graphics_end"
+DRIVERS=="vesa-framebuffer", GOTO="graphics_end"
+
+KERNEL=="fb[0-9]*", ENV{PRIMARY_DEVICE_FOR_DISPLAY}="1"
+
+LABEL="graphics_end"
--- /dev/null
+# stub for immediately telling the kernel that userspace firmware loading
+# failed; necessary to avoid long timeouts with CONFIG_FW_LOADER_USER_HELPER=y
+SUBSYSTEM=="firmware", ACTION=="add", ATTR{loading}="-1"
--- /dev/null
+# On Dell PowerEdge systems, the iDRAC7 and later support a USB Virtual NIC
+# which terminates in the iDRAC. Help identify this with 'idrac'
+ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", ATTRS{idVendor}=="413c", ATTRS{idProduct}=="a102", NAME="idrac"
+
--- /dev/null
+# Debian specific udev rules for backwards compatibility
+
+# needed for old tape drivers, http://bugs.debian.org/657948
+SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST!="[module/sg]", RUN{builtin}+="kmod load sg"
+
+# device permissions
+KERNEL=="mISDNtimer", GROUP="dialout"
+KERNEL=="mwave", GROUP="dialout"
+KERNEL=="nvram", GROUP="kmem", MODE="0640"
+KERNEL=="pktcdvd", GROUP="cdrom", MODE="0644"
+KERNEL=="lirc[0-9]*", GROUP="video"
+KERNEL=="legousbtower*", MODE="0666"
+KERNEL=="sonypi", MODE="0666"
+KERNEL=="mmtimer", MODE="0644"
+KERNEL=="sgi_*", MODE="0666"
+KERNEL=="z90crypt", MODE="0666"
+
+# These rules will create symlinks for CD/DVD drives, to help old
+# programs which are unable to automatically discover the devices.
+# The first detected device gets the symlink, but this is not stable across
+# reboots.
+ENV{ID_CDROM_CD_RW}=="?*", \
+ PROGRAM="/bin/sh -c 'ln -s %k /run/udev/link.cdrw 2>/dev/null; [ `readlink /run/udev/link.cdrw` = %k ]", \
+ SYMLINK+="cdrw", OPTIONS+="link_priority=-100"
+ENV{ID_CDROM_DVD}=="?*", \
+ PROGRAM="/bin/sh -c 'ln -s %k /run/udev/link.dvd 2>/dev/null; [ `readlink /run/udev/link.dvd` = %k ]", \
+ SYMLINK+="dvd", OPTIONS+="link_priority=-100"
+ENV{ID_CDROM_DVD_RW}=="?*", \
+ PROGRAM="/bin/sh -c 'ln -s %k /run/udev/link.dvdrw 2>/dev/null; [ `readlink /run/udev/link.dvdrw` = %k ]", \
+ SYMLINK+="dvdrw", OPTIONS+="link_priority=-100"
--- /dev/null
+#!/bin/sh -e
+
+if [ -w /sys/kernel/uevent_helper ]; then
+ echo > /sys/kernel/uevent_helper
+fi
+
+if ! grep -E -q "^[^[:space:]]+ /dev devtmpfs" /proc/mounts; then
+ mount -n -o mode=0755 -t devtmpfs devtmpfs /dev
+fi
+
+SYSTEMD_LOG_LEVEL=notice /lib/systemd/systemd-udevd --daemon --resolve-names=never
+
+udevadm trigger --action=add
+
+mkdir -p /dev/pts
+mount -t devpts -o noexec,nosuid,gid=5,mode=0620 devpts /dev/pts
+
+udevadm settle || true
--- /dev/null
+#!/bin/sh
+# This script is called by "systemctl enable/disable" when the given unit is a
+# SysV init.d script. It needs to call the distribution's mechanism for
+# enabling/disabling those, such as chkconfig, update-rc.d, or similar. This
+# can optionally take a --root argument for enabling a SysV init script
+# in a chroot or similar.
+set -e
+
+usage() {
+ echo "Usage: $0 [--root=path] enable|disable|is-enabled <sysv script name>" >&2
+ exit 1
+}
+
+# parse options
+eval set -- "$(getopt -o r: --long root: -- "$@")"
+while true; do
+ case "$1" in
+ -r|--root)
+ ROOT="$2"
+ shift 2 ;;
+ --) shift ; break ;;
+ *) usage ;;
+ esac
+done
+
+if [ -n "$ROOT" ] && [ "$ROOT" != "/" ]; then
+ CHROOT="chroot '$ROOT'"
+fi
+
+NAME="$2"
+[ -n "$NAME" ] || usage
+
+case "$1" in
+ enable)
+ # call the command to enable SysV init script $NAME here..
+ $CHROOT /usr/sbin/update-rc.d "$NAME" defaults
+ $CHROOT /usr/sbin/update-rc.d "$NAME" enable
+ ;;
+ disable)
+ $CHROOT /usr/sbin/update-rc.d "$NAME" defaults
+ $CHROOT /usr/sbin/update-rc.d "$NAME" disable
+ ;;
+ is-enabled)
+ # exit with 0 if $NAME is enabled, non-zero if it is disabled
+ ls $ROOT/etc/rc[S5].d/S??$NAME >/dev/null 2>/dev/null
+ ;;
+ *)
+ usage ;;
+esac
--- /dev/null
+'''apport package hook for systemd
+
+(c) 2014 Canonical Ltd.
+Author: Martin Pitt <martin.pitt@ubuntu.com>
+'''
+
+import os.path
+import apport.hookutils
+
+def add_info(report):
+ apport.hookutils.attach_hardware(report)
+
+ report['SystemdDelta'] = apport.hookutils.command_output(['systemd-delta'])
+
+ if not os.path.exists('/run/systemd/system'):
+ return
+
+ # Add details about all failed units, if any
+ out = apport.hookutils.command_output(['systemctl', '--failed', '--full',
+ '--no-legend']).strip()
+ if out:
+ failed = ''
+ for line in out.splitlines():
+ unit = line.split()[0]
+ if failed:
+ failed += '------\n'
+ failed += apport.hookutils.command_output(['systemctl', 'status', '--full', unit])
+ report['SystemdFailedUnits'] = failed
+
--- /dev/null
+# This file is part of the debianisation 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.
+
+# See tmpfiles.d(5) for details
+
+# Type Path Mode UID GID Age Argument
+L /run/initctl - - - - /run/systemd/initctl/fifo
+L /run/shm - - - - /dev/shm
+d /run/sendsigs.omit.d 0755 root root -
+
+L+ /etc/mtab - - - - ../proc/self/mounts
--- /dev/null
+# Setup and shell utility functions for use in hotplug agents.
+# vim: syntax=sh
+#
+# This program 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 version 2 of the License.
+
+if [ "$UDEV_LOG" ] && [ "$UDEV_LOG" -ge 7 ]; then
+ DEBUG=yes
+fi
+
+PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin'
+
+[ -e /etc/default/hotplug ] && . /etc/default/hotplug
+
+
+if [ -x /usr/bin/logger ]; then
+ LOGGER=/usr/bin/logger
+elif [ -x /bin/logger ]; then
+ LOGGER=/bin/logger
+else
+ unset LOGGER
+fi
+
+# for diagnostics
+if [ -t 1 -a -z "$LOGGER" ] || [ ! -e '/dev/log' ]; then
+ mesg() {
+ echo "$@" >&2
+ }
+elif [ -t 1 ]; then
+ mesg() {
+ echo "$@"
+ $LOGGER -t "${0##*/}[$$]" "$@"
+ }
+else
+ mesg() {
+ $LOGGER -t "${0##*/}[$$]" "$@"
+ }
+fi
+
+debug_mesg() {
+ [ -z "$DEBUG" -o "$DEBUG" = no ] && return 0
+ mesg "$@"
+}
+
+wait_for_file() {
+ local file=$1
+ local timeout=$2
+ [ "$timeout" ] || timeout=120
+
+ local count=$timeout
+ while [ $count != 0 ]; do
+ [ -e "$file" ] && return 0
+ sleep 1
+ count=$(($count - 1))
+ done
+
+ mesg "$file did not appear before the timeout!"
+ exit 1
+}
+
--- /dev/null
+'''apport package hook for udev
+
+(c) 2009 Canonical Ltd.
+Author: Martin Pitt <martin.pitt@ubuntu.com>
+'''
+
+import os
+import apport.hookutils
+
+def add_info(report):
+ apport.hookutils.attach_hardware(report)
+
+ user_rules = []
+ for f in os.listdir('/etc/udev/rules.d'):
+ if not f.startswith('70-persistent-') and f != 'README':
+ user_rules.append(f)
+
+ if user_rules:
+ report['CustomUdevRuleFiles'] = ' '.join(user_rules)
--- /dev/null
+[Unit]
+Description=getty on tty2-tty6 if dbus and logind are not available
+ConditionPathExists=/dev/tty2
+ConditionPathExists=!/lib/systemd/system/dbus.service
+
+[Service]
+Type=oneshot
+ExecStart=/bin/systemctl --no-block start getty@tty2.service getty@tty3.service getty@tty4.service getty@tty5.service getty@tty6.service
+RemainAfterExit=true
+
--- /dev/null
+[Unit]
+# not specified by LSB, but has been behaving that way in Debian under SysV
+# init and upstart
+After=network-online.target
+
+# Often contains status messages which users expect to see on the console
+# during boot
+[Service]
+StandardOutput=journal+console
+StandardError=journal+console
--- /dev/null
+[Unit]
+Description=Shut down containers on SIGPWR
+ConditionVirtualization=container
+
+[Service]
+Type=oneshot
+ExecStart=/bin/systemctl --no-block poweroff
--- /dev/null
+[Unit]
+Description=Trigger resolvconf update for networkd DNS
+ConditionPathIsSymbolicLink=/etc/resolv.conf
+
+[Path]
+PathChanged=/run/systemd/netif/state
--- /dev/null
+[Unit]
+Description=Update resolvconf for networkd DNS
+ConditionPathIsSymbolicLink=/etc/resolv.conf
+ConditionPathExists=/run/resolvconf/enable-updates
+After=resolvconf.service
+
+[Service]
+Type=oneshot
+StartLimitBurst=20
+# we might be triggered several times in short succession during restarting networkd, so wait until we get a DNS entry
+ExecStart=/bin/sh -c 'for timeout in `seq 30`; do out=$(sed -n "/^DNS=/ { s/^DNS=/nameserver /; p}" /run/systemd/netif/state); [ -z "$out" ] || break; sleep 1; done; echo "$out" | /sbin/resolvconf -a networkd'
+
--- /dev/null
+[Unit]
+# don't run timesyncd if we have another NTP daemon installed
+ConditionFileIsExecutable=!/usr/sbin/ntpd
+ConditionFileIsExecutable=!/usr/sbin/openntpd
+ConditionFileIsExecutable=!/usr/sbin/chronyd
+ConditionFileIsExecutable=!/usr/sbin/VBoxService
--- /dev/null
+[DEFAULT]
+pristine-tar = True
+patch-numbers = False
+debian-branch = master
--- /dev/null
+lib/*/libnss_myhostname*.so.*
+usr/share/man/man8/libnss_myhostname.so.2.8
+usr/share/man/man8/nss-myhostname.8
--- /dev/null
+#!/bin/sh
+set -e
+
+# This code was taken from libnss-myhostname
+
+# try to insert myhostname entries to the "hosts" line in /etc/nsswitch.conf to
+# automatically enable libnss-myhostname support; do not change the
+# configuration if the "hosts" line already references some myhostname lookups
+insert_nss_entry() {
+ echo "Checking NSS setup..."
+ # abort if /etc/nsswitch.conf does not exist
+ if ! [ -e /etc/nsswitch.conf ]; then
+ echo "Could not find /etc/nsswitch.conf."
+ return
+ fi
+ perl -i -pe '
+ sub insert {
+ my $line = shift;
+ # this also splits on tab
+ my @bits=split(" ", $line);
+ # do not break configuration if the "hosts" line already references
+ # myhostname
+ if (grep { $_ eq "myhostname"} @bits) {
+ return $line;
+ }
+ # add myhostname at the end
+ return $line . " myhostname";
+ }
+ s/^(hosts:\s+)(.*)/$1.insert($2)/e;
+ ' /etc/nsswitch.conf
+}
+
+if [ "$1" = configure ] && [ -z "$2" ]; then
+ echo "First installation detected..."
+ # first install: setup the recommended configuration (unless
+ # nsswitch.conf already contains myhostname entries)
+ insert_nss_entry
+fi
+
+#DEBHELPER#
--- /dev/null
+#!/bin/sh
+set -e
+
+# This code was taken from libnss-myhostname
+remove_nss_entry() {
+ refcount=$(dpkg-query -f '${db:Status-Abbrev} ${binary:Package}\n' \
+ -W libnss-myhostname | grep '^i' | wc -l)
+ if [ "$refcount" -gt 0 ] ; then
+ # there are other instances, do nothing
+ return
+ fi
+ echo "Checking NSS setup..."
+ # abort if /etc/nsswitch.conf does not exist
+ if ! [ -e /etc/nsswitch.conf ]; then
+ echo "Could not find /etc/nsswitch.conf."
+ return
+ fi
+ perl -i -pe '
+ sub remove {
+ my $s=shift;
+ $s=~s/\s+\Qmyhostname\E//g;
+ return $s;
+ }
+ s/^(hosts:)(.*)/$1.remove($2)/e;
+ ' /etc/nsswitch.conf
+}
+
+if [ "$1" = remove ]; then
+ remove_nss_entry
+fi
+
+#DEBHELPER#
--- /dev/null
+lib/*/libnss_mymachines*.so.*
+usr/share/man/man8/libnss_mymachines.so.2.8
+usr/share/man/man8/nss-mymachines.8
--- /dev/null
+#!/bin/sh
+set -e
+
+# This code was taken from libnss-myhostname
+
+# try to insert mymachines entries to the "hosts" line in /etc/nsswitch.conf to
+# automatically enable libnss-mymachines support; do not change the
+# configuration if the "hosts" line already references some mymachines lookups
+insert_nss_entry() {
+ echo "Checking NSS setup..."
+ # abort if /etc/nsswitch.conf does not exist
+ if ! [ -e /etc/nsswitch.conf ]; then
+ echo "Could not find /etc/nsswitch.conf."
+ return
+ fi
+ perl -i -pe '
+ sub insert {
+ my $line = shift;
+ # this also splits on tab
+ my @bits=split(" ", $line);
+ # do not break configuration if the "hosts" line already references
+ # mymachines
+ if (grep { $_ eq "mymachines"} @bits) {
+ return $line;
+ }
+ # add mymachines at the end
+ return $line . " mymachines";
+ }
+ s/^(hosts:\s+)(.*)/$1.insert($2)/e;
+ ' /etc/nsswitch.conf
+}
+
+if [ "$1" = configure ] && [ -z "$2" ]; then
+ echo "First installation detected..."
+ # first install: setup the recommended configuration (unless
+ # nsswitch.conf already contains mymachines entries)
+ insert_nss_entry
+fi
+
+#DEBHELPER#
--- /dev/null
+#!/bin/sh
+set -e
+
+# This code was taken from libnss-myhostname
+remove_nss_entry() {
+ refcount=$(dpkg-query -f '${db:Status-Abbrev} ${binary:Package}\n' \
+ -W libnss-mymachines | grep '^i' | wc -l)
+ if [ "$refcount" -gt 0 ] ; then
+ # there are other instances, do nothing
+ return
+ fi
+ echo "Checking NSS setup..."
+ # abort if /etc/nsswitch.conf does not exist
+ if ! [ -e /etc/nsswitch.conf ]; then
+ echo "Could not find /etc/nsswitch.conf."
+ return
+ fi
+ perl -i -pe '
+ sub remove {
+ my $s=shift;
+ $s=~s/\s+\Qmymachines\E//g;
+ return $s;
+ }
+ s/^(hosts:)(.*)/$1.remove($2)/e;
+ ' /etc/nsswitch.conf
+}
+
+if [ "$1" = remove ]; then
+ remove_nss_entry
+fi
+
+#DEBHELPER#
--- /dev/null
+lib/*/libnss_resolve*.so.*
+usr/share/man/man8/libnss_resolve.so.2.8
+usr/share/man/man8/nss-resolve.8
--- /dev/null
+#!/bin/sh
+set -e
+
+# This code was taken from libnss-myhostname
+
+# try to insert resolve entries to the "hosts" line in /etc/nsswitch.conf to
+# automatically enable libnss-resolve support; do not change the
+# configuration if the "hosts" line already references some resolve lookups
+insert_nss_entry() {
+ echo "Checking NSS setup..."
+ # abort if /etc/nsswitch.conf does not exist
+ if ! [ -e /etc/nsswitch.conf ]; then
+ echo "Could not find /etc/nsswitch.conf."
+ return
+ fi
+ perl -i -pe '
+ sub insert {
+ my $line = shift;
+ # this also splits on tab
+ my @bits=split(" ", $line);
+ # do not break configuration if the "hosts" line already references
+ # resolve
+ if (grep { $_ eq "resolve"} @bits) {
+ return $line;
+ }
+ # add resolve before dns
+ return join " ", map {
+ $_ eq "dns" ? ("resolve", "$_") : $_
+ } @bits;
+ }
+ s/^(hosts:\s+)(.*)/$1.insert($2)/e;
+ ' /etc/nsswitch.conf
+}
+
+if [ "$1" = configure ] && [ -z "$2" ]; then
+ echo "First installation detected..."
+ # first install: setup the recommended configuration (unless
+ # nsswitch.conf already contains resolve entries)
+ insert_nss_entry
+fi
+
+#DEBHELPER#
--- /dev/null
+#!/bin/sh
+set -e
+
+# This code was taken from libnss-myhostname
+remove_nss_entry() {
+ refcount=$(dpkg-query -f '${db:Status-Abbrev} ${binary:Package}\n' \
+ -W libnss-resolve | grep '^i' | wc -l)
+ if [ "$refcount" -gt 0 ] ; then
+ # there are other instances, do nothing
+ return
+ fi
+ echo "Checking NSS setup..."
+ # abort if /etc/nsswitch.conf does not exist
+ if ! [ -e /etc/nsswitch.conf ]; then
+ echo "Could not find /etc/nsswitch.conf."
+ return
+ fi
+ perl -i -pe '
+ sub remove {
+ my $s=shift;
+ $s=~s/\s+\Qresolve\E//g;
+ return $s;
+ }
+ s/^(hosts:)(.*)/$1.remove($2)/e;
+ ' /etc/nsswitch.conf
+}
+
+if [ "$1" = remove ]; then
+ remove_nss_entry
+fi
+
+#DEBHELPER#
--- /dev/null
+lib/*/security/pam_systemd.so
+usr/share/man/man8/pam_systemd.8
+../../extra/pam-configs usr/share/
--- /dev/null
+#! /bin/sh
+
+set -e
+
+pam-auth-update --package
+
+#DEBHELPER#
--- /dev/null
+#! /bin/sh
+
+set -e
+
+# pam-auth-update --remove removes the named profile from the active config.
+# It arguably should be called during deconfigure as well, but deconfigure
+# can happen in some cases during a dist-upgrade and we don't want to
+# deconfigure all PAM modules in the middle of a dist-upgrade by accident.
+#
+# More importantly, with the current implementation, --remove also removes
+# all local preferences for the named config (such as whether it's enabled
+# or disabled), which we don't want to do on deconfigure.
+#
+# This may need to change later as pam-auth-update evolves.
+
+if [ "$1" = remove ] && [ "${DPKG_MAINTSCRIPT_PACKAGE_REFCOUNT:-1}" = 1 ]; then
+ pam-auth-update --package --remove systemd
+fi
+
+#DEBHELPER#
--- /dev/null
+usr/lib/*/libsystemd.so
+usr/lib/*/pkgconfig/libsystemd.pc
+usr/include/systemd/
+usr/share/man/man3/sd*
+usr/share/man/man3/SD*
--- /dev/null
+lib/*/libsystemd.so.*
--- /dev/null
+libsystemd.so.0 libsystemd0 #MINVER#
+ LIBSYSTEMD_209@LIBSYSTEMD_209 0
+ LIBSYSTEMD_211@LIBSYSTEMD_211 211
+ LIBSYSTEMD_213@LIBSYSTEMD_213 213
+ LIBSYSTEMD_214@LIBSYSTEMD_214 214
+ LIBSYSTEMD_216@LIBSYSTEMD_216 217
+ LIBSYSTEMD_217@LIBSYSTEMD_217 217
+ LIBSYSTEMD_219@LIBSYSTEMD_219 219
+ LIBSYSTEMD_220@LIBSYSTEMD_220 220
+ LIBSYSTEMD_221@LIBSYSTEMD_221 221
+ LIBSYSTEMD_222@LIBSYSTEMD_222 222
+ LIBSYSTEMD_226@LIBSYSTEMD_226 226
+ LIBSYSTEMD_227@LIBSYSTEMD_227 227
+ sd_booted@LIBSYSTEMD_209 0
+ sd_bus_add_fallback@LIBSYSTEMD_221 221
+ sd_bus_add_fallback_vtable@LIBSYSTEMD_221 221
+ sd_bus_add_filter@LIBSYSTEMD_221 221
+ sd_bus_add_match@LIBSYSTEMD_221 221
+ sd_bus_add_node_enumerator@LIBSYSTEMD_221 221
+ sd_bus_add_object@LIBSYSTEMD_221 221
+ sd_bus_add_object_manager@LIBSYSTEMD_221 221
+ sd_bus_add_object_vtable@LIBSYSTEMD_221 221
+ sd_bus_attach_event@LIBSYSTEMD_221 221
+ sd_bus_call@LIBSYSTEMD_221 221
+ sd_bus_call_async@LIBSYSTEMD_221 221
+ sd_bus_call_method@LIBSYSTEMD_221 221
+ sd_bus_call_method_async@LIBSYSTEMD_221 221
+ sd_bus_can_send@LIBSYSTEMD_221 221
+ sd_bus_close@LIBSYSTEMD_221 221
+ sd_bus_creds_get_audit_login_uid@LIBSYSTEMD_221 221
+ sd_bus_creds_get_audit_session_id@LIBSYSTEMD_221 221
+ sd_bus_creds_get_augmented_mask@LIBSYSTEMD_221 221
+ sd_bus_creds_get_cgroup@LIBSYSTEMD_221 221
+ sd_bus_creds_get_cmdline@LIBSYSTEMD_221 221
+ sd_bus_creds_get_comm@LIBSYSTEMD_221 221
+ sd_bus_creds_get_description@LIBSYSTEMD_221 221
+ sd_bus_creds_get_egid@LIBSYSTEMD_221 221
+ sd_bus_creds_get_euid@LIBSYSTEMD_221 221
+ sd_bus_creds_get_exe@LIBSYSTEMD_221 221
+ sd_bus_creds_get_fsgid@LIBSYSTEMD_221 221
+ sd_bus_creds_get_fsuid@LIBSYSTEMD_221 221
+ sd_bus_creds_get_gid@LIBSYSTEMD_221 221
+ sd_bus_creds_get_mask@LIBSYSTEMD_221 221
+ sd_bus_creds_get_owner_uid@LIBSYSTEMD_221 221
+ sd_bus_creds_get_pid@LIBSYSTEMD_221 221
+ sd_bus_creds_get_ppid@LIBSYSTEMD_221 221
+ sd_bus_creds_get_selinux_context@LIBSYSTEMD_221 221
+ sd_bus_creds_get_session@LIBSYSTEMD_221 221
+ sd_bus_creds_get_sgid@LIBSYSTEMD_221 221
+ sd_bus_creds_get_slice@LIBSYSTEMD_221 221
+ sd_bus_creds_get_suid@LIBSYSTEMD_221 221
+ sd_bus_creds_get_supplementary_gids@LIBSYSTEMD_221 221
+ sd_bus_creds_get_tid@LIBSYSTEMD_221 221
+ sd_bus_creds_get_tid_comm@LIBSYSTEMD_221 221
+ sd_bus_creds_get_tty@LIBSYSTEMD_221 221
+ sd_bus_creds_get_uid@LIBSYSTEMD_221 221
+ sd_bus_creds_get_unique_name@LIBSYSTEMD_221 221
+ sd_bus_creds_get_unit@LIBSYSTEMD_221 221
+ sd_bus_creds_get_user_slice@LIBSYSTEMD_221 221
+ sd_bus_creds_get_user_unit@LIBSYSTEMD_221 221
+ sd_bus_creds_get_well_known_names@LIBSYSTEMD_221 221
+ sd_bus_creds_has_bounding_cap@LIBSYSTEMD_221 221
+ sd_bus_creds_has_effective_cap@LIBSYSTEMD_221 221
+ sd_bus_creds_has_inheritable_cap@LIBSYSTEMD_221 221
+ sd_bus_creds_has_permitted_cap@LIBSYSTEMD_221 221
+ sd_bus_creds_new_from_pid@LIBSYSTEMD_221 221
+ sd_bus_creds_ref@LIBSYSTEMD_221 221
+ sd_bus_creds_unref@LIBSYSTEMD_221 221
+ sd_bus_default@LIBSYSTEMD_221 221
+ sd_bus_default_flush_close@LIBSYSTEMD_227 227
+ sd_bus_default_system@LIBSYSTEMD_221 221
+ sd_bus_default_user@LIBSYSTEMD_221 221
+ sd_bus_detach_event@LIBSYSTEMD_221 221
+ sd_bus_emit_interfaces_added@LIBSYSTEMD_221 221
+ sd_bus_emit_interfaces_added_strv@LIBSYSTEMD_221 221
+ sd_bus_emit_interfaces_removed@LIBSYSTEMD_221 221
+ sd_bus_emit_interfaces_removed_strv@LIBSYSTEMD_221 221
+ sd_bus_emit_object_added@LIBSYSTEMD_222 222
+ sd_bus_emit_object_removed@LIBSYSTEMD_222 222
+ sd_bus_emit_properties_changed@LIBSYSTEMD_221 221
+ sd_bus_emit_properties_changed_strv@LIBSYSTEMD_221 221
+ sd_bus_emit_signal@LIBSYSTEMD_221 221
+ sd_bus_error_add_map@LIBSYSTEMD_221 221
+ sd_bus_error_copy@LIBSYSTEMD_221 221
+ sd_bus_error_free@LIBSYSTEMD_221 221
+ sd_bus_error_get_errno@LIBSYSTEMD_221 221
+ sd_bus_error_has_name@LIBSYSTEMD_221 221
+ sd_bus_error_is_set@LIBSYSTEMD_221 221
+ sd_bus_error_set@LIBSYSTEMD_221 221
+ sd_bus_error_set_const@LIBSYSTEMD_221 221
+ sd_bus_error_set_errno@LIBSYSTEMD_221 221
+ sd_bus_error_set_errnof@LIBSYSTEMD_221 221
+ sd_bus_error_set_errnofv@LIBSYSTEMD_221 221
+ sd_bus_error_setf@LIBSYSTEMD_221 221
+ sd_bus_flush@LIBSYSTEMD_221 221
+ sd_bus_flush_close_unref@LIBSYSTEMD_222 222
+ sd_bus_get_address@LIBSYSTEMD_221 221
+ sd_bus_get_allow_interactive_authorization@LIBSYSTEMD_221 221
+ sd_bus_get_bus_id@LIBSYSTEMD_221 221
+ sd_bus_get_creds_mask@LIBSYSTEMD_221 221
+ sd_bus_get_current_handler@LIBSYSTEMD_221 221
+ sd_bus_get_current_message@LIBSYSTEMD_221 221
+ sd_bus_get_current_slot@LIBSYSTEMD_221 221
+ sd_bus_get_current_userdata@LIBSYSTEMD_221 221
+ sd_bus_get_description@LIBSYSTEMD_221 221
+ sd_bus_get_event@LIBSYSTEMD_221 221
+ sd_bus_get_events@LIBSYSTEMD_221 221
+ sd_bus_get_fd@LIBSYSTEMD_221 221
+ sd_bus_get_name_creds@LIBSYSTEMD_221 221
+ sd_bus_get_name_machine_id@LIBSYSTEMD_221 221
+ sd_bus_get_owner_creds@LIBSYSTEMD_221 221
+ sd_bus_get_property@LIBSYSTEMD_221 221
+ sd_bus_get_property_string@LIBSYSTEMD_221 221
+ sd_bus_get_property_strv@LIBSYSTEMD_221 221
+ sd_bus_get_property_trivial@LIBSYSTEMD_221 221
+ sd_bus_get_scope@LIBSYSTEMD_221 221
+ sd_bus_get_tid@LIBSYSTEMD_221 221
+ sd_bus_get_timeout@LIBSYSTEMD_221 221
+ sd_bus_get_unique_name@LIBSYSTEMD_221 221
+ sd_bus_is_anonymous@LIBSYSTEMD_221 221
+ sd_bus_is_bus_client@LIBSYSTEMD_221 221
+ sd_bus_is_monitor@LIBSYSTEMD_221 221
+ sd_bus_is_open@LIBSYSTEMD_221 221
+ sd_bus_is_server@LIBSYSTEMD_221 221
+ sd_bus_is_trusted@LIBSYSTEMD_221 221
+ sd_bus_list_names@LIBSYSTEMD_221 221
+ sd_bus_message_append@LIBSYSTEMD_221 221
+ sd_bus_message_append_array@LIBSYSTEMD_221 221
+ sd_bus_message_append_array_iovec@LIBSYSTEMD_221 221
+ sd_bus_message_append_array_memfd@LIBSYSTEMD_221 221
+ sd_bus_message_append_array_space@LIBSYSTEMD_221 221
+ sd_bus_message_append_basic@LIBSYSTEMD_221 221
+ sd_bus_message_append_string_iovec@LIBSYSTEMD_221 221
+ sd_bus_message_append_string_memfd@LIBSYSTEMD_221 221
+ sd_bus_message_append_string_space@LIBSYSTEMD_221 221
+ sd_bus_message_append_strv@LIBSYSTEMD_221 221
+ sd_bus_message_at_end@LIBSYSTEMD_221 221
+ sd_bus_message_close_container@LIBSYSTEMD_221 221
+ sd_bus_message_copy@LIBSYSTEMD_221 221
+ sd_bus_message_enter_container@LIBSYSTEMD_221 221
+ sd_bus_message_exit_container@LIBSYSTEMD_221 221
+ sd_bus_message_get_allow_interactive_authorization@LIBSYSTEMD_221 221
+ sd_bus_message_get_auto_start@LIBSYSTEMD_221 221
+ sd_bus_message_get_bus@LIBSYSTEMD_221 221
+ sd_bus_message_get_cookie@LIBSYSTEMD_221 221
+ sd_bus_message_get_creds@LIBSYSTEMD_221 221
+ sd_bus_message_get_destination@LIBSYSTEMD_221 221
+ sd_bus_message_get_errno@LIBSYSTEMD_221 221
+ sd_bus_message_get_error@LIBSYSTEMD_221 221
+ sd_bus_message_get_expect_reply@LIBSYSTEMD_221 221
+ sd_bus_message_get_interface@LIBSYSTEMD_221 221
+ sd_bus_message_get_member@LIBSYSTEMD_221 221
+ sd_bus_message_get_monotonic_usec@LIBSYSTEMD_221 221
+ sd_bus_message_get_path@LIBSYSTEMD_221 221
+ sd_bus_message_get_priority@LIBSYSTEMD_221 221
+ sd_bus_message_get_realtime_usec@LIBSYSTEMD_221 221
+ sd_bus_message_get_reply_cookie@LIBSYSTEMD_221 221
+ sd_bus_message_get_sender@LIBSYSTEMD_221 221
+ sd_bus_message_get_seqnum@LIBSYSTEMD_221 221
+ sd_bus_message_get_signature@LIBSYSTEMD_221 221
+ sd_bus_message_get_type@LIBSYSTEMD_221 221
+ sd_bus_message_has_signature@LIBSYSTEMD_221 221
+ sd_bus_message_is_empty@LIBSYSTEMD_221 221
+ sd_bus_message_is_method_call@LIBSYSTEMD_221 221
+ sd_bus_message_is_method_error@LIBSYSTEMD_221 221
+ sd_bus_message_is_signal@LIBSYSTEMD_221 221
+ sd_bus_message_new_method_call@LIBSYSTEMD_221 221
+ sd_bus_message_new_method_errno@LIBSYSTEMD_221 221
+ sd_bus_message_new_method_errnof@LIBSYSTEMD_221 221
+ sd_bus_message_new_method_error@LIBSYSTEMD_221 221
+ sd_bus_message_new_method_errorf@LIBSYSTEMD_221 221
+ sd_bus_message_new_method_return@LIBSYSTEMD_221 221
+ sd_bus_message_new_signal@LIBSYSTEMD_221 221
+ sd_bus_message_open_container@LIBSYSTEMD_221 221
+ sd_bus_message_peek_type@LIBSYSTEMD_221 221
+ sd_bus_message_read@LIBSYSTEMD_221 221
+ sd_bus_message_read_array@LIBSYSTEMD_221 221
+ sd_bus_message_read_basic@LIBSYSTEMD_221 221
+ sd_bus_message_read_strv@LIBSYSTEMD_221 221
+ sd_bus_message_ref@LIBSYSTEMD_221 221
+ sd_bus_message_rewind@LIBSYSTEMD_221 221
+ sd_bus_message_set_allow_interactive_authorization@LIBSYSTEMD_221 221
+ sd_bus_message_set_auto_start@LIBSYSTEMD_221 221
+ sd_bus_message_set_destination@LIBSYSTEMD_221 221
+ sd_bus_message_set_expect_reply@LIBSYSTEMD_221 221
+ sd_bus_message_set_priority@LIBSYSTEMD_221 221
+ sd_bus_message_skip@LIBSYSTEMD_221 221
+ sd_bus_message_unref@LIBSYSTEMD_221 221
+ sd_bus_message_verify_type@LIBSYSTEMD_221 221
+ sd_bus_negotiate_creds@LIBSYSTEMD_221 221
+ sd_bus_negotiate_fds@LIBSYSTEMD_221 221
+ sd_bus_negotiate_timestamp@LIBSYSTEMD_221 221
+ sd_bus_new@LIBSYSTEMD_221 221
+ sd_bus_open@LIBSYSTEMD_221 221
+ sd_bus_open_system@LIBSYSTEMD_221 221
+ sd_bus_open_system_machine@LIBSYSTEMD_221 221
+ sd_bus_open_system_remote@LIBSYSTEMD_221 221
+ sd_bus_open_user@LIBSYSTEMD_221 221
+ sd_bus_path_decode@LIBSYSTEMD_221 221
+ sd_bus_path_decode_many@LIBSYSTEMD_227 227
+ sd_bus_path_encode@LIBSYSTEMD_221 221
+ sd_bus_path_encode_many@LIBSYSTEMD_227 227
+ sd_bus_process@LIBSYSTEMD_221 221
+ sd_bus_process_priority@LIBSYSTEMD_221 221
+ sd_bus_query_sender_creds@LIBSYSTEMD_221 221
+ sd_bus_query_sender_privilege@LIBSYSTEMD_221 221
+ sd_bus_ref@LIBSYSTEMD_221 221
+ sd_bus_release_name@LIBSYSTEMD_221 221
+ sd_bus_reply_method_errno@LIBSYSTEMD_221 221
+ sd_bus_reply_method_errnof@LIBSYSTEMD_221 221
+ sd_bus_reply_method_error@LIBSYSTEMD_221 221
+ sd_bus_reply_method_errorf@LIBSYSTEMD_221 221
+ sd_bus_reply_method_return@LIBSYSTEMD_221 221
+ sd_bus_request_name@LIBSYSTEMD_221 221
+ sd_bus_send@LIBSYSTEMD_221 221
+ sd_bus_send_to@LIBSYSTEMD_221 221
+ sd_bus_set_address@LIBSYSTEMD_221 221
+ sd_bus_set_allow_interactive_authorization@LIBSYSTEMD_221 221
+ sd_bus_set_anonymous@LIBSYSTEMD_221 221
+ sd_bus_set_bus_client@LIBSYSTEMD_221 221
+ sd_bus_set_description@LIBSYSTEMD_221 221
+ sd_bus_set_exec@LIBSYSTEMD_221 221
+ sd_bus_set_fd@LIBSYSTEMD_221 221
+ sd_bus_set_monitor@LIBSYSTEMD_221 221
+ sd_bus_set_property@LIBSYSTEMD_221 221
+ sd_bus_set_server@LIBSYSTEMD_221 221
+ sd_bus_set_trusted@LIBSYSTEMD_221 221
+ sd_bus_slot_get_bus@LIBSYSTEMD_221 221
+ sd_bus_slot_get_current_handler@LIBSYSTEMD_221 221
+ sd_bus_slot_get_current_message@LIBSYSTEMD_221 221
+ sd_bus_slot_get_current_userdata@LIBSYSTEMD_221 221
+ sd_bus_slot_get_description@LIBSYSTEMD_221 221
+ sd_bus_slot_get_userdata@LIBSYSTEMD_221 221
+ sd_bus_slot_ref@LIBSYSTEMD_221 221
+ sd_bus_slot_set_description@LIBSYSTEMD_221 221
+ sd_bus_slot_set_userdata@LIBSYSTEMD_221 221
+ sd_bus_slot_unref@LIBSYSTEMD_221 221
+ sd_bus_start@LIBSYSTEMD_221 221
+ sd_bus_track_add_name@LIBSYSTEMD_221 221
+ sd_bus_track_add_sender@LIBSYSTEMD_221 221
+ sd_bus_track_contains@LIBSYSTEMD_221 221
+ sd_bus_track_count@LIBSYSTEMD_221 221
+ sd_bus_track_first@LIBSYSTEMD_221 221
+ sd_bus_track_get_bus@LIBSYSTEMD_221 221
+ sd_bus_track_get_userdata@LIBSYSTEMD_221 221
+ sd_bus_track_new@LIBSYSTEMD_221 221
+ sd_bus_track_next@LIBSYSTEMD_221 221
+ sd_bus_track_ref@LIBSYSTEMD_221 221
+ sd_bus_track_remove_name@LIBSYSTEMD_221 221
+ sd_bus_track_remove_sender@LIBSYSTEMD_221 221
+ sd_bus_track_set_userdata@LIBSYSTEMD_221 221
+ sd_bus_track_unref@LIBSYSTEMD_221 221
+ sd_bus_try_close@LIBSYSTEMD_221 221
+ sd_bus_unref@LIBSYSTEMD_221 221
+ sd_bus_wait@LIBSYSTEMD_221 221
+ sd_event_add_child@LIBSYSTEMD_221 221
+ sd_event_add_defer@LIBSYSTEMD_221 221
+ sd_event_add_exit@LIBSYSTEMD_221 221
+ sd_event_add_io@LIBSYSTEMD_221 221
+ sd_event_add_post@LIBSYSTEMD_221 221
+ sd_event_add_signal@LIBSYSTEMD_221 221
+ sd_event_add_time@LIBSYSTEMD_221 221
+ sd_event_default@LIBSYSTEMD_221 221
+ sd_event_dispatch@LIBSYSTEMD_221 221
+ sd_event_exit@LIBSYSTEMD_221 221
+ sd_event_get_exit_code@LIBSYSTEMD_221 221
+ sd_event_get_fd@LIBSYSTEMD_221 221
+ sd_event_get_state@LIBSYSTEMD_221 221
+ sd_event_get_tid@LIBSYSTEMD_221 221
+ sd_event_get_watchdog@LIBSYSTEMD_221 221
+ sd_event_loop@LIBSYSTEMD_221 221
+ sd_event_new@LIBSYSTEMD_221 221
+ sd_event_now@LIBSYSTEMD_221 221
+ sd_event_prepare@LIBSYSTEMD_221 221
+ sd_event_ref@LIBSYSTEMD_221 221
+ sd_event_run@LIBSYSTEMD_221 221
+ sd_event_set_watchdog@LIBSYSTEMD_221 221
+ sd_event_source_get_child_pid@LIBSYSTEMD_221 221
+ sd_event_source_get_description@LIBSYSTEMD_221 221
+ sd_event_source_get_enabled@LIBSYSTEMD_221 221
+ sd_event_source_get_event@LIBSYSTEMD_221 221
+ sd_event_source_get_io_events@LIBSYSTEMD_221 221
+ sd_event_source_get_io_fd@LIBSYSTEMD_221 221
+ sd_event_source_get_io_revents@LIBSYSTEMD_221 221
+ sd_event_source_get_pending@LIBSYSTEMD_221 221
+ sd_event_source_get_priority@LIBSYSTEMD_221 221
+ sd_event_source_get_signal@LIBSYSTEMD_221 221
+ sd_event_source_get_time@LIBSYSTEMD_221 221
+ sd_event_source_get_time_accuracy@LIBSYSTEMD_221 221
+ sd_event_source_get_time_clock@LIBSYSTEMD_221 221
+ sd_event_source_get_userdata@LIBSYSTEMD_221 221
+ sd_event_source_ref@LIBSYSTEMD_221 221
+ sd_event_source_set_description@LIBSYSTEMD_221 221
+ sd_event_source_set_enabled@LIBSYSTEMD_221 221
+ sd_event_source_set_io_events@LIBSYSTEMD_221 221
+ sd_event_source_set_io_fd@LIBSYSTEMD_221 221
+ sd_event_source_set_prepare@LIBSYSTEMD_221 221
+ sd_event_source_set_priority@LIBSYSTEMD_221 221
+ sd_event_source_set_time@LIBSYSTEMD_221 221
+ sd_event_source_set_time_accuracy@LIBSYSTEMD_221 221
+ sd_event_source_set_userdata@LIBSYSTEMD_221 221
+ sd_event_source_unref@LIBSYSTEMD_221 221
+ sd_event_unref@LIBSYSTEMD_221 221
+ sd_event_wait@LIBSYSTEMD_221 221
+ sd_get_machine_names@LIBSYSTEMD_209 0
+ sd_get_seats@LIBSYSTEMD_209 0
+ sd_get_sessions@LIBSYSTEMD_209 0
+ sd_get_uids@LIBSYSTEMD_209 0
+ sd_id128_from_string@LIBSYSTEMD_209 0
+ sd_id128_get_boot@LIBSYSTEMD_209 0
+ sd_id128_get_machine@LIBSYSTEMD_209 0
+ sd_id128_randomize@LIBSYSTEMD_209 0
+ sd_id128_to_string@LIBSYSTEMD_209 0
+ sd_is_fifo@LIBSYSTEMD_209 0
+ sd_is_mq@LIBSYSTEMD_209 0
+ sd_is_socket@LIBSYSTEMD_209 0
+ sd_is_socket_inet@LIBSYSTEMD_209 0
+ sd_is_socket_unix@LIBSYSTEMD_209 0
+ sd_is_special@LIBSYSTEMD_209 0
+ sd_journal_add_conjunction@LIBSYSTEMD_209 0
+ sd_journal_add_disjunction@LIBSYSTEMD_209 0
+ sd_journal_add_match@LIBSYSTEMD_209 0
+ sd_journal_close@LIBSYSTEMD_209 0
+ sd_journal_enumerate_data@LIBSYSTEMD_209 0
+ sd_journal_enumerate_unique@LIBSYSTEMD_209 0
+ sd_journal_flush_matches@LIBSYSTEMD_209 0
+ sd_journal_get_catalog@LIBSYSTEMD_209 0
+ sd_journal_get_catalog_for_message_id@LIBSYSTEMD_209 0
+ sd_journal_get_cursor@LIBSYSTEMD_209 0
+ sd_journal_get_cutoff_monotonic_usec@LIBSYSTEMD_209 0
+ sd_journal_get_cutoff_realtime_usec@LIBSYSTEMD_209 0
+ sd_journal_get_data@LIBSYSTEMD_209 0
+ sd_journal_get_data_threshold@LIBSYSTEMD_209 0
+ sd_journal_get_events@LIBSYSTEMD_209 0
+ sd_journal_get_fd@LIBSYSTEMD_209 0
+ sd_journal_get_monotonic_usec@LIBSYSTEMD_209 0
+ sd_journal_get_realtime_usec@LIBSYSTEMD_209 0
+ sd_journal_get_timeout@LIBSYSTEMD_209 0
+ sd_journal_get_usage@LIBSYSTEMD_209 0
+ sd_journal_next@LIBSYSTEMD_209 0
+ sd_journal_next_skip@LIBSYSTEMD_209 0
+ sd_journal_open@LIBSYSTEMD_209 0
+ sd_journal_open_container@LIBSYSTEMD_209 0
+ sd_journal_open_directory@LIBSYSTEMD_209 0
+ sd_journal_open_files@LIBSYSTEMD_209 0
+ sd_journal_perror@LIBSYSTEMD_209 0
+ sd_journal_perror_with_location@LIBSYSTEMD_209 0
+ sd_journal_previous@LIBSYSTEMD_209 0
+ sd_journal_previous_skip@LIBSYSTEMD_209 0
+ sd_journal_print@LIBSYSTEMD_209 0
+ sd_journal_print_with_location@LIBSYSTEMD_209 0
+ sd_journal_printv@LIBSYSTEMD_209 0
+ sd_journal_printv_with_location@LIBSYSTEMD_209 0
+ sd_journal_process@LIBSYSTEMD_209 0
+ sd_journal_query_unique@LIBSYSTEMD_209 0
+ sd_journal_reliable_fd@LIBSYSTEMD_209 0
+ sd_journal_restart_data@LIBSYSTEMD_209 0
+ sd_journal_restart_unique@LIBSYSTEMD_209 0
+ sd_journal_seek_cursor@LIBSYSTEMD_209 0
+ sd_journal_seek_head@LIBSYSTEMD_209 0
+ sd_journal_seek_monotonic_usec@LIBSYSTEMD_209 0
+ sd_journal_seek_realtime_usec@LIBSYSTEMD_209 0
+ sd_journal_seek_tail@LIBSYSTEMD_209 0
+ sd_journal_send@LIBSYSTEMD_209 0
+ sd_journal_send_with_location@LIBSYSTEMD_209 0
+ sd_journal_sendv@LIBSYSTEMD_209 0
+ sd_journal_sendv_with_location@LIBSYSTEMD_209 0
+ sd_journal_set_data_threshold@LIBSYSTEMD_209 0
+ sd_journal_stream_fd@LIBSYSTEMD_209 0
+ sd_journal_test_cursor@LIBSYSTEMD_209 0
+ sd_journal_wait@LIBSYSTEMD_209 0
+ sd_listen_fds@LIBSYSTEMD_209 0
+ sd_listen_fds_with_names@LIBSYSTEMD_227 227
+ sd_login_monitor_flush@LIBSYSTEMD_209 0
+ sd_login_monitor_get_events@LIBSYSTEMD_209 0
+ sd_login_monitor_get_fd@LIBSYSTEMD_209 0
+ sd_login_monitor_get_timeout@LIBSYSTEMD_209 0
+ sd_login_monitor_new@LIBSYSTEMD_209 0
+ sd_login_monitor_unref@LIBSYSTEMD_209 0
+ sd_machine_get_class@LIBSYSTEMD_211 211
+ sd_machine_get_ifindices@LIBSYSTEMD_216 217
+ sd_notify@LIBSYSTEMD_209 0
+ sd_notifyf@LIBSYSTEMD_209 0
+ sd_peer_get_cgroup@LIBSYSTEMD_226 226
+ sd_peer_get_machine_name@LIBSYSTEMD_211 211
+ sd_peer_get_owner_uid@LIBSYSTEMD_211 211
+ sd_peer_get_session@LIBSYSTEMD_211 211
+ sd_peer_get_slice@LIBSYSTEMD_211 211
+ sd_peer_get_unit@LIBSYSTEMD_211 211
+ sd_peer_get_user_slice@LIBSYSTEMD_220 220
+ sd_peer_get_user_unit@LIBSYSTEMD_211 211
+ sd_pid_get_cgroup@LIBSYSTEMD_226 226
+ sd_pid_get_machine_name@LIBSYSTEMD_209 0
+ sd_pid_get_owner_uid@LIBSYSTEMD_209 0
+ sd_pid_get_session@LIBSYSTEMD_209 0
+ sd_pid_get_slice@LIBSYSTEMD_209 0
+ sd_pid_get_unit@LIBSYSTEMD_209 0
+ sd_pid_get_user_slice@LIBSYSTEMD_220 220
+ sd_pid_get_user_unit@LIBSYSTEMD_209 0
+ sd_pid_notify@LIBSYSTEMD_214 214
+ sd_pid_notify_with_fds@LIBSYSTEMD_219 219
+ sd_pid_notifyf@LIBSYSTEMD_214 214
+ sd_seat_can_graphical@LIBSYSTEMD_209 0
+ sd_seat_can_multi_session@LIBSYSTEMD_209 0
+ sd_seat_can_tty@LIBSYSTEMD_209 0
+ sd_seat_get_active@LIBSYSTEMD_209 0
+ sd_seat_get_sessions@LIBSYSTEMD_209 0
+ sd_session_get_class@LIBSYSTEMD_209 0
+ sd_session_get_desktop@LIBSYSTEMD_217 217
+ sd_session_get_display@LIBSYSTEMD_209 0
+ sd_session_get_remote_host@LIBSYSTEMD_209 0
+ sd_session_get_remote_user@LIBSYSTEMD_209 0
+ sd_session_get_seat@LIBSYSTEMD_209 0
+ sd_session_get_service@LIBSYSTEMD_209 0
+ sd_session_get_state@LIBSYSTEMD_209 0
+ sd_session_get_tty@LIBSYSTEMD_209 0
+ sd_session_get_type@LIBSYSTEMD_209 0
+ sd_session_get_uid@LIBSYSTEMD_209 0
+ sd_session_get_vt@LIBSYSTEMD_209 0
+ sd_session_is_active@LIBSYSTEMD_209 0
+ sd_session_is_remote@LIBSYSTEMD_209 0
+ sd_uid_get_display@LIBSYSTEMD_213 213
+ sd_uid_get_seats@LIBSYSTEMD_209 0
+ sd_uid_get_sessions@LIBSYSTEMD_209 0
+ sd_uid_get_state@LIBSYSTEMD_209 0
+ sd_uid_is_on_seat@LIBSYSTEMD_209 0
+ sd_watchdog_enabled@LIBSYSTEMD_209 0
--- /dev/null
+usr/include/libudev.h
+usr/lib/*/libudev.so
+usr/lib/*/pkgconfig/libudev.pc
+usr/share/man/man3/udev*
+usr/share/man/man3/libudev*
--- /dev/null
+symlink_to_dir /usr/share/doc/libudev-dev libudev1 221-2~
--- /dev/null
+lib/*/libudev.so.*
--- /dev/null
+lib/*/libudev.so.*
--- /dev/null
+libudev.so.1 libudev1 #MINVER#
+ LIBUDEV_183@LIBUDEV_183 183
+ LIBUDEV_189@LIBUDEV_189 189
+ LIBUDEV_196@LIBUDEV_196 196
+ LIBUDEV_199@LIBUDEV_199 199
+ LIBUDEV_215@LIBUDEV_215 215
+ udev_device_get_action@LIBUDEV_183 183
+ udev_device_get_devlinks_list_entry@LIBUDEV_183 183
+ udev_device_get_devnode@LIBUDEV_183 183
+ udev_device_get_devnum@LIBUDEV_183 183
+ udev_device_get_devpath@LIBUDEV_183 183
+ udev_device_get_devtype@LIBUDEV_183 183
+ udev_device_get_driver@LIBUDEV_183 183
+ udev_device_get_is_initialized@LIBUDEV_183 183
+ udev_device_get_parent@LIBUDEV_183 183
+ udev_device_get_parent_with_subsystem_devtype@LIBUDEV_183 183
+ udev_device_get_properties_list_entry@LIBUDEV_183 183
+ udev_device_get_property_value@LIBUDEV_183 183
+ udev_device_get_seqnum@LIBUDEV_183 183
+ udev_device_get_subsystem@LIBUDEV_183 183
+ udev_device_get_sysattr_list_entry@LIBUDEV_183 183
+ udev_device_get_sysattr_value@LIBUDEV_183 183
+ udev_device_get_sysname@LIBUDEV_183 183
+ udev_device_get_sysnum@LIBUDEV_183 183
+ udev_device_get_syspath@LIBUDEV_183 183
+ udev_device_get_tags_list_entry@LIBUDEV_183 183
+ udev_device_get_udev@LIBUDEV_183 183
+ udev_device_get_usec_since_initialized@LIBUDEV_183 183
+ udev_device_has_tag@LIBUDEV_183 183
+ udev_device_new_from_device_id@LIBUDEV_189 189
+ udev_device_new_from_devnum@LIBUDEV_183 183
+ udev_device_new_from_environment@LIBUDEV_183 183
+ udev_device_new_from_subsystem_sysname@LIBUDEV_183 183
+ udev_device_new_from_syspath@LIBUDEV_183 183
+ udev_device_ref@LIBUDEV_183 183
+ udev_device_set_sysattr_value@LIBUDEV_199 199
+ udev_device_unref@LIBUDEV_183 183
+ udev_enumerate_add_match_is_initialized@LIBUDEV_183 183
+ udev_enumerate_add_match_parent@LIBUDEV_183 183
+ udev_enumerate_add_match_property@LIBUDEV_183 183
+ udev_enumerate_add_match_subsystem@LIBUDEV_183 183
+ udev_enumerate_add_match_sysattr@LIBUDEV_183 183
+ udev_enumerate_add_match_sysname@LIBUDEV_183 183
+ udev_enumerate_add_match_tag@LIBUDEV_183 183
+ udev_enumerate_add_nomatch_subsystem@LIBUDEV_183 183
+ udev_enumerate_add_nomatch_sysattr@LIBUDEV_183 183
+ udev_enumerate_add_syspath@LIBUDEV_183 183
+ udev_enumerate_get_list_entry@LIBUDEV_183 183
+ udev_enumerate_get_udev@LIBUDEV_183 183
+ udev_enumerate_new@LIBUDEV_183 183
+ udev_enumerate_ref@LIBUDEV_183 183
+ udev_enumerate_scan_devices@LIBUDEV_183 183
+ udev_enumerate_scan_subsystems@LIBUDEV_183 183
+ udev_enumerate_unref@LIBUDEV_183 183
+ udev_get_log_priority@LIBUDEV_183 183
+ udev_get_userdata@LIBUDEV_183 183
+ udev_hwdb_get_properties_list_entry@LIBUDEV_196 196
+ udev_hwdb_new@LIBUDEV_196 196
+ udev_hwdb_ref@LIBUDEV_196 196
+ udev_hwdb_unref@LIBUDEV_196 196
+ udev_list_entry_get_by_name@LIBUDEV_183 183
+ udev_list_entry_get_name@LIBUDEV_183 183
+ udev_list_entry_get_next@LIBUDEV_183 183
+ udev_list_entry_get_value@LIBUDEV_183 183
+ udev_monitor_enable_receiving@LIBUDEV_183 183
+ udev_monitor_filter_add_match_subsystem_devtype@LIBUDEV_183 183
+ udev_monitor_filter_add_match_tag@LIBUDEV_183 183
+ udev_monitor_filter_remove@LIBUDEV_183 183
+ udev_monitor_filter_update@LIBUDEV_183 183
+ udev_monitor_get_fd@LIBUDEV_183 183
+ udev_monitor_get_udev@LIBUDEV_183 183
+ udev_monitor_new_from_netlink@LIBUDEV_183 183
+ udev_monitor_receive_device@LIBUDEV_183 183
+ udev_monitor_ref@LIBUDEV_183 183
+ udev_monitor_set_receive_buffer_size@LIBUDEV_183 183
+ udev_monitor_unref@LIBUDEV_183 183
+ udev_new@LIBUDEV_183 183
+ udev_queue_flush@LIBUDEV_215 215
+ udev_queue_get_fd@LIBUDEV_215 215
+ udev_queue_get_kernel_seqnum@LIBUDEV_183 183
+ udev_queue_get_queue_is_empty@LIBUDEV_183 183
+ udev_queue_get_queued_list_entry@LIBUDEV_183 183
+ udev_queue_get_seqnum_is_finished@LIBUDEV_183 183
+ udev_queue_get_seqnum_sequence_is_finished@LIBUDEV_183 183
+ udev_queue_get_udev@LIBUDEV_183 183
+ udev_queue_get_udev_is_active@LIBUDEV_183 183
+ udev_queue_get_udev_seqnum@LIBUDEV_183 183
+ udev_queue_new@LIBUDEV_183 183
+ udev_queue_ref@LIBUDEV_183 183
+ udev_queue_unref@LIBUDEV_183 183
+ udev_ref@LIBUDEV_183 183
+ udev_set_log_fn@LIBUDEV_183 183
+ udev_set_log_priority@LIBUDEV_183 183
+ udev_set_userdata@LIBUDEV_183 183
+ udev_unref@LIBUDEV_183 183
+ udev_util_encode_string@LIBUDEV_183 183
--- /dev/null
+From: Michael Biebl <biebl@debian.org>
+Date: Thu, 18 Jul 2013 20:11:02 +0200
+Subject: Add back support for Debian specific config files
+
+For now fallback to read the locale settings from /etc/default/locale.
+
+This reverts the Debian specific bits from
+46a2911bf2780f616396df5671dd901cc7cb54fd
+99f861310d3f05f4e86cb9582a94b891dbb3382b
+---
+ src/basic/time-util.c | 22 ++++++++++++++++++++--
+ src/core/locale-setup.c | 22 ++++++++++++++++++++++
+ src/timedate/timedated.c | 10 ++++++++++
+ 3 files changed, 52 insertions(+), 2 deletions(-)
+
+diff --git a/src/basic/time-util.c b/src/basic/time-util.c
+index 647763a..06bc206 100644
+--- a/src/basic/time-util.c
++++ b/src/basic/time-util.c
+@@ -32,6 +32,7 @@
+ #include "strv.h"
+ #include "time-util.h"
+ #include "util.h"
++#include "fileio.h"
+
+ usec_t now(clockid_t clock_id) {
+ struct timespec ts;
+@@ -1105,8 +1106,25 @@ int get_timezone(char **tz) {
+ int r;
+
+ r = readlink_malloc("/etc/localtime", &t);
+- if (r < 0)
+- return r; /* returns EINVAL if not a symlink */
++ if (r < 0) {
++ if (r != -EINVAL)
++ return r; /* returns EINVAL if not a symlink */
++
++ r = read_one_line_file("/etc/timezone", &t);
++ if (r < 0) {
++ if (r != -ENOENT)
++ log_warning("Failed to read /etc/timezone: %s", strerror(-r));
++ return -EINVAL;
++ }
++
++ if (!timezone_is_valid(t))
++ return -EINVAL;
++ z = strdup(t);
++ if (!z)
++ return -ENOMEM;
++ *tz = z;
++ return 0;
++ }
+
+ e = path_startswith(t, "/usr/share/zoneinfo/");
+ if (!e)
+diff --git a/src/core/locale-setup.c b/src/core/locale-setup.c
+index 4c8d920..417237b 100644
+--- a/src/core/locale-setup.c
++++ b/src/core/locale-setup.c
+@@ -82,6 +82,28 @@ int locale_setup(char ***environment) {
+ log_warning_errno(r, "Failed to read /etc/locale.conf: %m");
+ }
+
++ if (r <= 0) {
++ r = parse_env_file("/etc/default/locale", NEWLINE,
++ "LANG", &variables[VARIABLE_LANG],
++ "LANGUAGE", &variables[VARIABLE_LANGUAGE],
++ "LC_CTYPE", &variables[VARIABLE_LC_CTYPE],
++ "LC_NUMERIC", &variables[VARIABLE_LC_NUMERIC],
++ "LC_TIME", &variables[VARIABLE_LC_TIME],
++ "LC_COLLATE", &variables[VARIABLE_LC_COLLATE],
++ "LC_MONETARY", &variables[VARIABLE_LC_MONETARY],
++ "LC_MESSAGES", &variables[VARIABLE_LC_MESSAGES],
++ "LC_PAPER", &variables[VARIABLE_LC_PAPER],
++ "LC_NAME", &variables[VARIABLE_LC_NAME],
++ "LC_ADDRESS", &variables[VARIABLE_LC_ADDRESS],
++ "LC_TELEPHONE", &variables[VARIABLE_LC_TELEPHONE],
++ "LC_MEASUREMENT", &variables[VARIABLE_LC_MEASUREMENT],
++ "LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION],
++ NULL);
++
++ if (r < 0 && r != -ENOENT)
++ log_warning("Failed to read /etc/default/locale: %s", strerror(-r));
++ }
++
+ add = NULL;
+ for (i = 0; i < _VARIABLE_LC_MAX; i++) {
+ char *s;
+diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c
+index 968ef8a..9df38b1 100644
+--- a/src/timedate/timedated.c
++++ b/src/timedate/timedated.c
+@@ -89,6 +89,7 @@ static int context_read_data(Context *c) {
+ static int context_write_data_timezone(Context *c) {
+ _cleanup_free_ char *p = NULL;
+ int r = 0;
++ struct stat st;
+
+ assert(c);
+
+@@ -96,6 +97,9 @@ static int context_write_data_timezone(Context *c) {
+ if (unlink("/etc/localtime") < 0 && errno != ENOENT)
+ r = -errno;
+
++ if (unlink("/etc/timezone") < 0 && errno != ENOENT)
++ r = -errno;
++
+ return r;
+ }
+
+@@ -107,6 +111,12 @@ static int context_write_data_timezone(Context *c) {
+ if (r < 0)
+ return r;
+
++ if (stat("/etc/timezone", &st) == 0 && S_ISREG(st.st_mode)) {
++ r = write_string_file("/etc/timezone", c->zone, WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_ATOMIC);
++ if (r < 0)
++ return r;
++ }
++
+ return 0;
+ }
+
--- /dev/null
+From: Michael Biebl <biebl@debian.org>
+Date: Thu, 18 Jul 2013 15:33:51 +0200
+Subject: Add note to udev.conf that changes to that file require a rebuild of
+ the initramfs
+
+Based on debian/patches/udev_conf_comments from the old udev package.
+---
+ src/udev/udev.conf | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/udev/udev.conf b/src/udev/udev.conf
+index 47d1433..b7a42ab 100644
+--- a/src/udev/udev.conf
++++ b/src/udev/udev.conf
+@@ -1,3 +1,6 @@
+ # see udev.conf(5) for details
++#
++# udevd is started in the initramfs, so when this file is modified the
++# initramfs should be rebuilt.
+
+ #udev_log="info"
--- /dev/null
+From: Michael Biebl <biebl@debian.org>
+Date: Tue, 24 Jun 2014 12:35:25 +0200
+Subject: Add /run/initctl support to SysV compat tools
+
+sysvinit in Debian uses /run/initctl as FIFO to communicate with PID 1.
+Make the SysV compat tools in systemd-sysv try both /run/initctl and the
+traditional /dev/initctl. This makes them usable when running sysvinit
+as PID 1.
+---
+ src/systemctl/systemctl.c | 15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index 51b82d5..95f0daf 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -7304,17 +7304,22 @@ static int talk_initctl(void) {
+
+ request.runlevel = rl;
+
+- fd = open(INIT_FIFO, O_WRONLY|O_NDELAY|O_CLOEXEC|O_NOCTTY);
++ /* Try /run/initctl first since that is what sysvinit in Debian uses */
++ fd = open("/run/initctl", O_WRONLY|O_NDELAY|O_CLOEXEC|O_NOCTTY);
+ if (fd < 0) {
+- if (errno == ENOENT)
+- return 0;
++ /* Fall back to /dev/initctl */
++ fd = open(INIT_FIFO, O_WRONLY|O_NDELAY|O_CLOEXEC|O_NOCTTY);
++ if (fd < 0) {
++ if (errno == ENOENT)
++ return 0;
+
+- return log_error_errno(errno, "Failed to open "INIT_FIFO": %m");
++ return log_error_errno(errno, "Failed to open "INIT_FIFO": %m");
++ }
+ }
+
+ r = loop_write(fd, &request, sizeof(request), false);
+ if (r < 0)
+- return log_error_errno(r, "Failed to write to "INIT_FIFO": %m");
++ return log_error_errno(r, "Failed to write to initctl FIFO: %m");
+
+ return 1;
+ #else
--- /dev/null
+From: Julien Muchembled <jm@jmuchemb.eu>
+Date: Tue, 29 Apr 2014 11:40:50 +0200
+Subject: Add support for TuxOnIce hibernation
+
+systemd does not support non-mainline kernel features so upstream rejected this
+patch.
+It is however required for systemd integration by tuxonice-userui package.
+
+Forwarded: http://lists.freedesktop.org/archives/systemd-devel/2014-April/018960.html
+---
+ src/shared/sleep-config.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c
+index 39b836d..5e42d24 100644
+--- a/src/shared/sleep-config.c
++++ b/src/shared/sleep-config.c
+@@ -227,6 +227,12 @@ static bool enough_memory_for_hibernation(void) {
+ size_t size = 0, used = 0;
+ int r;
+
++ /* TuxOnIce is an alternate implementation for hibernation.
++ * It can be configured to compress the image to a file or an inactive
++ * swap partition, so there's nothing more we can do here. */
++ if (access("/sys/power/tuxonice", F_OK) == 0)
++ return true;
++
+ r = hibernation_partition_size(&size, &used);
+ if (r < 0)
+ return false;
--- /dev/null
+From: Jon Severinsson <jon@severinsson.net>
+Date: Sun, 20 Jul 2014 20:00:00 +0200
+Subject: Add support for rcS.d init scripts to the sysv-generator
+
+As we unconditionally add After=local-fs.target now, this requires some
+adjustments to the test suite.
+---
+ man/systemd.special.xml | 5 +++++
+ src/insserv-generator/insserv-generator.c | 2 +-
+ src/sysv-generator/sysv-generator.c | 31 +++++++++++++++++++++++++++----
+ test/sysv-generator-test.py | 10 +++++-----
+ 4 files changed, 38 insertions(+), 10 deletions(-)
+
+diff --git a/man/systemd.special.xml b/man/systemd.special.xml
+index 54e7c49..54db78d 100644
+--- a/man/systemd.special.xml
++++ b/man/systemd.special.xml
+@@ -333,6 +333,11 @@
+ target unit for those mounts listed in
+ <filename>/etc/fstab</filename> that have the
+ <option>auto</option> mount option set.</para>
++
++ <para>systemd automatically adds dependencies of type
++ <varname>After=</varname> for this target unit to all SysV
++ init script service units with an LSB header referring to the
++ <literal>$local_fs</literal> facility.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+diff --git a/src/insserv-generator/insserv-generator.c b/src/insserv-generator/insserv-generator.c
+index 665579c..71cffe1 100644
+--- a/src/insserv-generator/insserv-generator.c
++++ b/src/insserv-generator/insserv-generator.c
+@@ -65,7 +65,7 @@ static int sysv_translate_facility(const char *name, const char *filename, char
+
+ static const char * const table[] = {
+ /* LSB defined facilities */
+- "local_fs", NULL,
++ "local_fs", SPECIAL_LOCAL_FS_TARGET,
+ "network", SPECIAL_NETWORK_TARGET,
+ "named", SPECIAL_NSS_LOOKUP_TARGET,
+ "portmap", SPECIAL_RPCBIND_TARGET,
+diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
+index 2b71b48..83ac94e 100644
+--- a/src/sysv-generator/sysv-generator.c
++++ b/src/sysv-generator/sysv-generator.c
+@@ -45,6 +45,7 @@
+ #include "util.h"
+
+ typedef enum RunlevelType {
++ RUNLEVEL_SYSINIT,
+ RUNLEVEL_UP,
+ RUNLEVEL_DOWN
+ } RunlevelType;
+@@ -54,6 +55,9 @@ static const struct {
+ const char *target;
+ const RunlevelType type;
+ } rcnd_table[] = {
++ /* Debian SysV runlevel for early boot */
++ { "rcS.d", SPECIAL_SYSINIT_TARGET, RUNLEVEL_SYSINIT },
++
+ /* Standard SysV runlevels for start-up */
+ { "rc1.d", SPECIAL_RESCUE_TARGET, RUNLEVEL_UP },
+ { "rc2.d", SPECIAL_MULTI_USER_TARGET, RUNLEVEL_UP },
+@@ -78,6 +82,7 @@ typedef struct SysvStub {
+ char *name;
+ char *path;
+ char *description;
++ bool sysinit;
+ int sysv_start_priority;
+ char *pid_file;
+ char **before;
+@@ -204,6 +209,8 @@ static int generate_unit_file(SysvStub *s) {
+ if (s->description)
+ fprintf(f, "Description=%s\n", s->description);
+
++ if (s->sysinit)
++ fprintf(f, "DefaultDependencies=no\n");
+ if (!isempty(before))
+ fprintf(f, "Before=%s\n", before);
+ if (!isempty(after))
+@@ -217,11 +224,12 @@ static int generate_unit_file(SysvStub *s) {
+ "\n[Service]\n"
+ "Type=forking\n"
+ "Restart=no\n"
+- "TimeoutSec=5min\n"
++ "TimeoutSec=%s\n"
+ "IgnoreSIGPIPE=no\n"
+ "KillMode=process\n"
+ "GuessMainPID=no\n"
+ "RemainAfterExit=%s\n",
++ s->sysinit ? "0" : "5min",
+ yes_no(!s->pid_file));
+
+ if (s->pid_file)
+@@ -285,16 +293,22 @@ static int sysv_translate_facility(const char *name, const char *filename, char
+
+ static const char * const table[] = {
+ /* LSB defined facilities */
+- "local_fs", NULL,
++ "local_fs", SPECIAL_LOCAL_FS_TARGET,
+ "network", SPECIAL_NETWORK_ONLINE_TARGET,
+ "named", SPECIAL_NSS_LOOKUP_TARGET,
+ "portmap", SPECIAL_RPCBIND_TARGET,
+ "remote_fs", SPECIAL_REMOTE_FS_TARGET,
+- "syslog", NULL,
++ "syslog", "systemd-journald-dev-log.socket",
+ "time", SPECIAL_TIME_SYNC_TARGET,
+ /* Debian defined facilities */
+ "x-display-manager", "display-manager.service",
+ "mail-transport-agent", "mail-transport-agent.target",
++ /* special rcS init scripts */
++ "cryptdisks", "cryptsetup.target",
++ "mountall", SPECIAL_LOCAL_FS_TARGET,
++ "mountnfs", SPECIAL_REMOTE_FS_TARGET,
++ "checkroot", "systemd-remount-fs.service",
++ "dbus", "dbus.socket",
+ };
+
+ char *filename_no_sh, *e, *m;
+@@ -725,6 +739,11 @@ static int fix_order(SysvStub *s, Hashmap *all_services) {
+ if (s->has_lsb && other->has_lsb)
+ continue;
+
++ /* Don't order units between sysinit and regular sysv services,
++ * they are ordered before and after basic.target anyway. */
++ if (other->sysinit != s->sysinit)
++ continue;
++
+ if (other->sysv_start_priority < s->sysv_start_priority) {
+ r = strv_extend(&s->after, other->name);
+ if (r < 0)
+@@ -884,8 +903,12 @@ static int set_dependencies_from_rcnd(const LookupPaths *lp, Hashmap *all_servic
+ }
+
+ if (de->d_name[0] == 'S') {
++ if (rcnd_table[i].type == RUNLEVEL_SYSINIT) {
++ service->sysinit = true;
++ service->sysv_start_priority = a*10 + b;
++ }
+
+- if (rcnd_table[i].type == RUNLEVEL_UP)
++ if (rcnd_table[i].type == RUNLEVEL_UP && !service->sysinit)
+ service->sysv_start_priority = MAX(a*10 + b, service->sysv_start_priority);
+
+ r = set_ensure_allocated(&runlevel_services[i], NULL);
+diff --git a/test/sysv-generator-test.py b/test/sysv-generator-test.py
+index 721e53a..4f01e8c 100644
+--- a/test/sysv-generator-test.py
++++ b/test/sysv-generator-test.py
+@@ -170,7 +170,7 @@ class SysvGeneratorTest(unittest.TestCase):
+ # $local_fs does not need translation, don't expect any dependency
+ # fields here
+ self.assertEqual(set(s.options('Unit')),
+- set(['Documentation', 'SourcePath', 'Description']))
++ set(['Documentation', 'SourcePath', 'Description', 'After']))
+
+ self.assertEqual(s.get('Service', 'Type'), 'forking')
+ init_script = os.path.join(self.init_d_dir, 'foo')
+@@ -246,9 +246,9 @@ class SysvGeneratorTest(unittest.TestCase):
+ ['may1.service', 'must1.service', 'must2.service', 'ne_may2.service'])
+
+ # other services should not depend on each other
+- self.assertFalse(results['must1.service'].has_option('Unit', 'After'))
+- self.assertFalse(results['must2.service'].has_option('Unit', 'After'))
+- self.assertFalse(results['may1.service'].has_option('Unit', 'After'))
++ self.assertEqual(results['must1.service'].get('Unit', 'After'), 'local-fs.target')
++ self.assertEqual(results['must2.service'].get('Unit', 'After'), 'local-fs.target')
++ self.assertEqual(results['may1.service'].get('Unit', 'After'), 'local-fs.target')
+
+ def test_symlink_prio_deps(self):
+ '''script without LSB headers use rcN.d priority'''
+@@ -278,7 +278,7 @@ class SysvGeneratorTest(unittest.TestCase):
+ err, results = self.run_generator()
+ self.assertEqual(list(results), ['foo.service'])
+ self.assertEqual(set(results['foo.service'].options('Unit')),
+- set(['Documentation', 'SourcePath', 'Description']))
++ set(['Documentation', 'SourcePath', 'Description', 'After']))
+ # should create symlinks for the alternative names
+ for f in ['bar.service', 'baz.service']:
+ self.assertEqual(os.readlink(os.path.join(self.out_dir, f)),
--- /dev/null
+From: Michael Biebl <biebl@debian.org>
+Date: Sat, 26 Apr 2014 14:25:41 +0200
+Subject: Add targets for compatibility with Debian insserv system facilities
+
+---
+ Makefile.am | 5 +++++
+ src/sysv-generator/sysv-generator.c | 3 +++
+ units/mail-transport-agent.target | 12 ++++++++++++
+ 3 files changed, 20 insertions(+)
+ create mode 100644 units/mail-transport-agent.target
+
+diff --git a/Makefile.am b/Makefile.am
+index ad193e4..94f7313 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -573,6 +573,11 @@ nodist_systemunit_DATA += \
+ units/systemd-update-utmp-runlevel.service
+ endif
+
++if HAVE_SYSV_COMPAT
++nodist_systemunit_DATA += \
++ units/mail-transport-agent.target
++endif
++
+ dist_userunit_DATA = \
+ units/user/basic.target \
+ units/user/default.target \
+diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
+index 5075548..2b71b48 100644
+--- a/src/sysv-generator/sysv-generator.c
++++ b/src/sysv-generator/sysv-generator.c
+@@ -292,6 +292,9 @@ static int sysv_translate_facility(const char *name, const char *filename, char
+ "remote_fs", SPECIAL_REMOTE_FS_TARGET,
+ "syslog", NULL,
+ "time", SPECIAL_TIME_SYNC_TARGET,
++ /* Debian defined facilities */
++ "x-display-manager", "display-manager.service",
++ "mail-transport-agent", "mail-transport-agent.target",
+ };
+
+ char *filename_no_sh, *e, *m;
+diff --git a/units/mail-transport-agent.target b/units/mail-transport-agent.target
+new file mode 100644
+index 0000000..4d74ec7
+--- /dev/null
++++ b/units/mail-transport-agent.target
+@@ -0,0 +1,12 @@
++# This file is part of systemd.
++#
++# systemd is free software; you can redistribute it and/or modify it
++# under the terms of the GNU Lesser General Public License as published by
++# the Free Software Foundation; either version 2.1 of the License, or
++# (at your option) any later version.
++
++# This exists mostly for compatibility with SysV/LSB units
++# depending on the $mail-transport-agent system facility.
++[Unit]
++Description=Mail Transport Agent
++RefuseManualStart=yes
--- /dev/null
+From: Michael Biebl <biebl@debian.org>
+Date: Sun, 27 Apr 2014 18:10:58 +0200
+Subject: Adjust systemd-user pam config file for Debian
+
+This pam config file is used by libpam-systemd/systemd-logind when
+launching systemd user instances.
+---
+ src/login/systemd-user.m4 | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/src/login/systemd-user.m4 b/src/login/systemd-user.m4
+index 7933508..f35e779 100644
+--- a/src/login/systemd-user.m4
++++ b/src/login/systemd-user.m4
+@@ -2,10 +2,11 @@
+ #
+ # Used by systemd --user instances.
+
+-account include system-auth
++@include common-account
+
+ m4_ifdef(`HAVE_SELINUX',
+ session required pam_selinux.so close
+ session required pam_selinux.so nottys open
+ )m4_dnl
+-session include system-auth
++@include common-session-noninteractive
++session optional pam_systemd.so
--- /dev/null
+From: Tollef Fog Heen <tfheen@err.no>
+Date: Tue, 5 Jun 2012 20:59:36 +0200
+Subject: Bring tmpfiles.d/tmp.conf in line with Debian defaults
+
+Closes: #675422
+---
+ tmpfiles.d/tmp.conf | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tmpfiles.d/tmp.conf b/tmpfiles.d/tmp.conf
+index 6bbd1aa..263e431 100644
+--- a/tmpfiles.d/tmp.conf
++++ b/tmpfiles.d/tmp.conf
+@@ -8,8 +8,8 @@
+ # See tmpfiles.d(5) for details
+
+ # Clear tmp directories separately, to make them easier to override
+-q /tmp 1777 root root 10d
+-q /var/tmp 1777 root root 30d
++D /tmp 1777 root root -
++#q /var/tmp 1777 root root 30d
+
+ # Exclude namespace mountpoints created with PrivateTmp=yes
+ x /tmp/systemd-private-%b-*
--- /dev/null
+From: Martin Pitt <martin.pitt@ubuntu.com>
+Date: Sun, 28 Dec 2014 12:49:35 +0100
+Subject: Don't enable audit by default
+
+It causes flooding of dmesg and syslog, suppressing actually important
+messages.
+
+Don't enable it for now, until a better solution is found:
+http://lists.freedesktop.org/archives/systemd-devel/2014-December/026591.html
+
+Bug-Debian: https://bugs.debian.org/773528
+---
+ src/journal/journald-audit.c | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/src/journal/journald-audit.c b/src/journal/journald-audit.c
+index 3c13fe0..118cf2a 100644
+--- a/src/journal/journald-audit.c
++++ b/src/journal/journald-audit.c
+@@ -557,10 +557,5 @@ int server_open_audit(Server *s) {
+ if (r < 0)
+ return log_error_errno(r, "Failed to add audit fd to event loop: %m");
+
+- /* We are listening now, try to enable audit */
+- r = enable_audit(s->audit_fd, true);
+- if (r < 0)
+- log_warning_errno(r, "Failed to issue audit enable call: %m");
+-
+ return 0;
+ }
--- /dev/null
+From: Joost Bremmer <toost.b@gmail.com>
+Date: Sat, 19 Dec 2015 12:46:09 +0100
+Subject: Fix typo on logind-dbus.c
+
+method_schedule_shutdown referenced org.freedesktop.login1.poweroff*
+which is never registered in polkit.
+
+Now refers to org.freedesktop.login1.power-off*
+
+Signed-off-by: Joost Bremmer <toost.b@gmail.com>
+
+(cherry-picked from commit 0671d7f4636e2fb634f0fbad9c61fd1feb738023)
+---
+ src/login/logind-dbus.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index e507a19..8273676 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -1944,9 +1944,9 @@ static int method_schedule_shutdown(sd_bus_message *message, void *userdata, sd_
+ action_multiple_sessions = "org.freedesktop.login1.halt-multiple-sessions";
+ action_ignore_inhibit = "org.freedesktop.login1.halt-ignore-inhibit";
+ } else if (streq(type, "poweroff")) {
+- action = "org.freedesktop.login1.poweroff";
+- action_multiple_sessions = "org.freedesktop.login1.poweroff-multiple-sessions";
+- action_ignore_inhibit = "org.freedesktop.login1.poweroff-ignore-inhibit";
++ action = "org.freedesktop.login1.power-off";
++ action_multiple_sessions = "org.freedesktop.login1.power-off-multiple-sessions";
++ action_ignore_inhibit = "org.freedesktop.login1.power-off-ignore-inhibit";
+ } else
+ return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Unsupported shutdown type");
+
--- /dev/null
+From: Ansgar Burchardt <ansgar@debian.org>
+Date: Thu, 24 Jul 2014 19:38:07 +0200
+Subject: Include additional directories in ProtectSystem
+
+---
+ src/core/namespace.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/src/core/namespace.c b/src/core/namespace.c
+index 81ba09e..5dd0679 100644
+--- a/src/core/namespace.c
++++ b/src/core/namespace.c
+@@ -446,7 +446,7 @@ int setup_namespace(
+ strv_length(inaccessible_dirs) +
+ private_dev +
+ (protect_home != PROTECT_HOME_NO ? 3 : 0) +
+- (protect_system != PROTECT_SYSTEM_NO ? 2 : 0) +
++ (protect_system != PROTECT_SYSTEM_NO ? 6 : 0) +
+ (protect_system == PROTECT_SYSTEM_FULL ? 1 : 0);
+
+ if (n > 0) {
+@@ -505,15 +505,21 @@ int setup_namespace(
+
+ if (protect_system != PROTECT_SYSTEM_NO) {
+ const char *usr_dir, *boot_dir, *etc_dir;
++ const char *bin_dir, *sbin_dir, *lib_dir, *lib64_dir;
+
+ usr_dir = prefix_roota(root_directory, "/usr");
+ boot_dir = prefix_roota(root_directory, "/boot");
+ boot_dir = strjoina("-", boot_dir);
+ etc_dir = prefix_roota(root_directory, "/etc");
++ bin_dir = prefix_roota(root_directory, "/bin");
++ sbin_dir = prefix_roota(root_directory, "/sbin");
++ lib_dir = prefix_roota(root_directory, "/lib");
++ lib64_dir = prefix_roota(root_directory, "/lib64");
++ lib64_dir = strjoina("-", lib64_dir);
+
+ r = append_mounts(&m, protect_system == PROTECT_SYSTEM_FULL
+- ? STRV_MAKE(usr_dir, boot_dir, etc_dir)
+- : STRV_MAKE(usr_dir, boot_dir), READONLY);
++ ? STRV_MAKE(usr_dir, boot_dir, etc_dir, bin_dir, sbin_dir, lib_dir, lib64_dir)
++ : STRV_MAKE(usr_dir, boot_dir, bin_dir, sbin_dir, lib_dir, lib64_dir), READONLY);
+ if (r < 0)
+ return r;
+ }
--- /dev/null
+From: Michael Biebl <biebl@debian.org>
+Date: Thu, 18 Jul 2013 20:31:49 +0200
+Subject: Make logind/hostnamed/localed/timedated D-Bus activatable
+
+We want to use those services outside of systemd, so we make them
+activatable via D-Bus.
+---
+ src/hostname/org.freedesktop.hostname1.service | 2 +-
+ src/locale/org.freedesktop.locale1.service | 2 +-
+ src/login/org.freedesktop.login1.service | 2 +-
+ src/timedate/org.freedesktop.timedate1.service | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/hostname/org.freedesktop.hostname1.service b/src/hostname/org.freedesktop.hostname1.service
+index 6041ed6..7d923a5 100644
+--- a/src/hostname/org.freedesktop.hostname1.service
++++ b/src/hostname/org.freedesktop.hostname1.service
+@@ -7,6 +7,6 @@
+
+ [D-BUS Service]
+ Name=org.freedesktop.hostname1
+-Exec=/bin/false
++Exec=/lib/systemd/systemd-hostnamed
+ User=root
+ SystemdService=dbus-org.freedesktop.hostname1.service
+diff --git a/src/locale/org.freedesktop.locale1.service b/src/locale/org.freedesktop.locale1.service
+index 025f9a0..8abbbfe 100644
+--- a/src/locale/org.freedesktop.locale1.service
++++ b/src/locale/org.freedesktop.locale1.service
+@@ -7,6 +7,6 @@
+
+ [D-BUS Service]
+ Name=org.freedesktop.locale1
+-Exec=/bin/false
++Exec=/lib/systemd/systemd-localed
+ User=root
+ SystemdService=dbus-org.freedesktop.locale1.service
+diff --git a/src/login/org.freedesktop.login1.service b/src/login/org.freedesktop.login1.service
+index 762dae2..057409b 100644
+--- a/src/login/org.freedesktop.login1.service
++++ b/src/login/org.freedesktop.login1.service
+@@ -7,6 +7,6 @@
+
+ [D-BUS Service]
+ Name=org.freedesktop.login1
+-Exec=/bin/false
++Exec=/bin/sh -c 'mkdir -p /run/systemd; exec /lib/systemd/systemd-logind'
+ User=root
+ SystemdService=dbus-org.freedesktop.login1.service
+diff --git a/src/timedate/org.freedesktop.timedate1.service b/src/timedate/org.freedesktop.timedate1.service
+index 875f4be..198777d 100644
+--- a/src/timedate/org.freedesktop.timedate1.service
++++ b/src/timedate/org.freedesktop.timedate1.service
+@@ -7,6 +7,6 @@
+
+ [D-BUS Service]
+ Name=org.freedesktop.timedate1
+-Exec=/bin/false
++Exec=/lib/systemd/systemd-timedated
+ User=root
+ SystemdService=dbus-org.freedesktop.timedate1.service
--- /dev/null
+From: Michael Biebl <biebl@debian.org>
+Date: Fri, 5 Sep 2014 01:15:16 +0200
+Subject: Make /run/lock tmpfs an API fs
+
+The /run/lock directory is world-writable in Debian due to historic
+reasons. To avoid user processes filling up /run, we mount a separate
+tmpfs for /run/lock. As this directory needs to be available during
+early boot, we make it an API fs.
+
+Drop it from tmpfiles.d/legacy.conf to not clobber the permissions.
+
+Closes: #751392
+---
+ src/core/mount-setup.c | 2 ++
+ tmpfiles.d/legacy.conf | 1 -
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c
+index 2b8d590..36c9616 100644
+--- a/src/core/mount-setup.c
++++ b/src/core/mount-setup.c
+@@ -96,6 +96,8 @@ static const MountPoint mount_table[] = {
+ #endif
+ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME,
+ NULL, MNT_FATAL|MNT_IN_CONTAINER },
++ { "tmpfs", "/run/lock", "tmpfs", "mode=1777,size=5242880", MS_NOSUID|MS_NODEV|MS_NOEXEC,
++ NULL, MNT_FATAL|MNT_IN_CONTAINER },
+ { "cgroup", "/sys/fs/cgroup", "cgroup", "__DEVEL__sane_behavior", MS_NOSUID|MS_NOEXEC|MS_NODEV,
+ cg_is_unified_wanted, MNT_FATAL|MNT_IN_CONTAINER },
+ { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME,
+diff --git a/tmpfiles.d/legacy.conf b/tmpfiles.d/legacy.conf
+index 62e2ae0..ea5e735 100644
+--- a/tmpfiles.d/legacy.conf
++++ b/tmpfiles.d/legacy.conf
+@@ -10,7 +10,6 @@
+ # These files are considered legacy and are unnecessary on legacy-free
+ # systems.
+
+-d /run/lock 0755 root root -
+ L /var/lock - - - - ../run/lock
+
+ # /run/lock/subsys is used for serializing SysV service execution, and
--- /dev/null
+From: Martin Pitt <martin.pitt@ubuntu.com>
+Date: Wed, 17 Dec 2014 09:32:01 +0100
+Subject: Make sd_login_monitor_new() work for logind without systemd
+
+Fix sd_login_monitor_new() to not fail if there is no
+/sys/fs/cgroup/systemd/machine; that only exists when running with systemd as
+PID 1.
+
+Bug-Ubuntu: https://launchpad.net/bugs/1400203
+---
+ src/libsystemd/sd-login/sd-login.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/libsystemd/sd-login/sd-login.c b/src/libsystemd/sd-login/sd-login.c
+index 3f2e459..4c8ee79 100644
+--- a/src/libsystemd/sd-login/sd-login.c
++++ b/src/libsystemd/sd-login/sd-login.c
+@@ -997,10 +997,13 @@ _public_ int sd_login_monitor_new(const char *category, sd_login_monitor **m) {
+
+ if (!category || streq(category, "machine")) {
+ k = inotify_add_watch(fd, "/run/systemd/machines/", IN_MOVED_TO|IN_DELETE);
++ /* when running logind without pid 1, this will fail */
++ /*
+ if (k < 0) {
+ safe_close(fd);
+ return -errno;
+ }
++ */
+
+ good = true;
+ }
--- /dev/null
+From: Martin Pitt <martin.pitt@ubuntu.com>
+Date: Mon, 9 Feb 2015 10:53:43 +0100
+Subject: Only start logind if dbus is installed
+
+logind fails to start in environments without dbus, such as LXC containers or
+servers. Add a startup condition to avoid the very noisy startup failure.
+
+Part of #772700
+---
+ units/systemd-logind.service.in | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/units/systemd-logind.service.in b/units/systemd-logind.service.in
+index ff04913..48a824c 100644
+--- a/units/systemd-logind.service.in
++++ b/units/systemd-logind.service.in
+@@ -12,6 +12,7 @@ Documentation=http://www.freedesktop.org/wiki/Software/systemd/logind
+ Documentation=http://www.freedesktop.org/wiki/Software/systemd/multiseat
+ Wants=user.slice
+ After=nss-user-lookup.target user.slice
++ConditionPathExists=/lib/systemd/system/dbus.service
+
+ # Ask for the dbus socket. If running over kdbus, the socket will
+ # not be actually used.
--- /dev/null
+From: Martin Pitt <martin.pitt@ubuntu.com>
+Date: Fri, 28 Nov 2014 14:43:25 +0100
+Subject: Re-enable journal forwarding to syslog
+
+Revert upstream commit 46b131574fdd7d77 for now, until Debian's sysloggers
+can/do all read from the journal directly. See
+
+ http://lists.freedesktop.org/archives/systemd-devel/2014-November/025550.html
+
+for details. Once we grow a journal.conf.d/ directory, sysloggers can be moved
+to pulling from the journal one by one and disable forwarding again in such a
+conf.d snippet.
+---
+ man/journald.conf.xml | 2 +-
+ src/journal/journald-server.c | 1 +
+ src/journal/journald.conf | 2 +-
+ 3 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/man/journald.conf.xml b/man/journald.conf.xml
+index a9690e8..4ff8f29 100644
+--- a/man/journald.conf.xml
++++ b/man/journald.conf.xml
+@@ -315,7 +315,7 @@
+ These options take boolean arguments. If forwarding to syslog
+ is enabled but nothing reads messages from the socket,
+ forwarding to syslog has no effect. By default, only
+- forwarding to wall is enabled. These settings may be
++ forwarding to syslog and wall is enabled. These settings may be
+ overridden at boot time with the kernel command line options
+ <literal>systemd.journald.forward_to_syslog=</literal>,
+ <literal>systemd.journald.forward_to_kmsg=</literal>,
+diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
+index 7d11a56..7fd572c 100644
+--- a/src/journal/journald-server.c
++++ b/src/journal/journald-server.c
+@@ -1701,6 +1701,7 @@ int server_init(Server *s) {
+ s->rate_limit_interval = DEFAULT_RATE_LIMIT_INTERVAL;
+ s->rate_limit_burst = DEFAULT_RATE_LIMIT_BURST;
+
++ s->forward_to_syslog = true;
+ s->forward_to_wall = true;
+
+ s->max_file_usec = DEFAULT_MAX_FILE_USEC;
+diff --git a/src/journal/journald.conf b/src/journal/journald.conf
+index 7beb96c..bc840dc 100644
+--- a/src/journal/journald.conf
++++ b/src/journal/journald.conf
+@@ -29,7 +29,7 @@
+ #RuntimeMaxFiles=100
+ #MaxRetentionSec=
+ #MaxFileSec=1month
+-#ForwardToSyslog=no
++#ForwardToSyslog=yes
+ #ForwardToKMsg=no
+ #ForwardToConsole=no
+ #ForwardToWall=yes
--- /dev/null
+From: Martin Pitt <martin.pitt@ubuntu.com>
+Date: Mon, 27 Apr 2015 15:29:13 +0200
+Subject: Revert "core: one step back again,
+ for nspawn we actually can't wait for cgroups running empty since
+ systemd will get exactly zero notifications about it"
+
+This reverts commit 743970d2ea6d08aa7c7bff8220f6b7702f2b1db7.
+
+Bug-Debian: https://bugs.debian.org/784720
+Bug-Ubuntu: https://launchpad.net/bugs/1448259
+Bug-Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=1141137
+---
+ src/core/unit.c | 19 +------------------
+ 1 file changed, 1 insertion(+), 18 deletions(-)
+
+diff --git a/src/core/unit.c b/src/core/unit.c
+index 0a02e38..79b9629 100644
+--- a/src/core/unit.c
++++ b/src/core/unit.c
+@@ -3523,24 +3523,7 @@ int unit_kill_context(
+ log_unit_warning_errno(u, r, "Failed to kill control group %s, ignoring: %m", u->cgroup_path);
+
+ } else if (r > 0) {
+-
+- /* FIXME: For now, on the legacy hierarchy, we
+- * will not wait for the cgroup members to die
+- * if we are running in a container or if this
+- * is a delegation unit, simply because cgroup
+- * notification is unreliable in these
+- * cases. It doesn't work at all in
+- * containers, and outside of containers it
+- * can be confused easily by left-over
+- * directories in the cgroup -- which however
+- * should not exist in non-delegated units. On
+- * the unified hierarchy that's different,
+- * there we get proper events. Hence rely on
+- * them.*/
+-
+- if (cg_unified() > 0 ||
+- (detect_container() == 0 && !unit_cgroup_delegate(u)))
+- wait_for_exit = true;
++ wait_for_exit = true;
+
+ if (c->send_sighup && k != KILL_KILL) {
+ set_free(pid_set);
--- /dev/null
+From: Michael Biebl <biebl@debian.org>
+Date: Thu, 18 Jul 2013 01:04:07 +0200
+Subject: Revert "udev: network device renaming - immediately give up if the
+ target name isn't available"
+
+This reverts commit 97595710b77aa162ca5e20da57d0a1ed7355eaad.
+
+We need to keep supporting systems with 75-persistent-net-generator.rules
+generated names for a while after switching to net.ifnames. Re-apply this old
+hack to make the renaming less likely to fail.
+---
+ src/udev/udev-event.c | 41 ++++++++++++++++++++++++++++++++++++++---
+ 1 file changed, 38 insertions(+), 3 deletions(-)
+
+diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
+index 5d6542d..3a32984 100644
+--- a/src/udev/udev-event.c
++++ b/src/udev/udev-event.c
+@@ -806,18 +806,53 @@ static int rename_netif(struct udev_event *event) {
+ char name[IFNAMSIZ];
+ const char *oldname;
+ int r;
++ int loop;
+
+ oldname = udev_device_get_sysname(dev);
+
+ strscpy(name, IFNAMSIZ, event->name);
+
+ r = rtnl_set_link_name(&event->rtnl, udev_device_get_ifindex(dev), name);
++ if (r >= 0) {
++ log_debug("renamed network interface %s to %s\n", oldname, name);
++ goto out;
++ }
++
++ /* keep trying if the destination interface name already exists */
++ if (r != -EEXIST)
++ goto out;
++
++ /* free our own name, another process may wait for us */
++ snprintf(name, IFNAMSIZ, "rename%u", udev_device_get_ifindex(dev));
++ r = rtnl_set_link_name(&event->rtnl, udev_device_get_ifindex(dev), name);
+ if (r < 0)
+- return log_error_errno(r, "Error changing net interface name '%s' to '%s': %m", oldname, name);
++ goto out;
+
+- log_debug("renamed network interface '%s' to '%s'", oldname, name);
++ /* log temporary name */
++ log_debug("renamed network interface %s to %s\n", oldname, name);
+
+- return 0;
++ /* wait a maximum of 90 seconds for our target to become available */
++ strscpy(name, IFNAMSIZ, event->name);
++ loop = 90 * 20;
++ while (loop--) {
++ const struct timespec duration = { 0, 1000 * 1000 * 1000 / 20 };
++
++ nanosleep(&duration, NULL);
++
++ r = rtnl_set_link_name(&event->rtnl, udev_device_get_ifindex(dev), name);
++ if (r >= 0) {
++ log_debug("renamed network interface %s to %s\n", oldname, name);
++ break;
++ }
++ if (r != -EEXIST)
++ break;
++ }
++
++out:
++ if (r < 0)
++ log_error("error changing net interface name '%s' to '%s': %s",
++ oldname, name, strerror(-r));
++ return r;
+ }
+
+ void udev_event_execute_rules(struct udev_event *event,
--- /dev/null
+From: Nis Martensen <nis.martensen@web.de>
+Date: Tue, 19 Jan 2016 22:01:43 +0100
+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.
+
+Based on a previous patch by Michael Biebl <biebl@debian.org>.
+
+Closes: #782522
+Closes: #810748
+---
+ src/fstab-generator/fstab-generator.c | 11 ++++++++---
+ units/systemd-fsck-root.service.in | 1 +
+ 2 files changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
+index f7c8d11..2770ee6 100644
+--- a/src/fstab-generator/fstab-generator.c
++++ b/src/fstab-generator/fstab-generator.c
+@@ -244,6 +244,7 @@ static int add_mount(
+ *filtered = NULL;
+ _cleanup_fclose_ FILE *f = NULL;
+ int r;
++ struct stat sb;
+
+ assert(what);
+ assert(where);
+@@ -310,9 +311,13 @@ static int add_mount(
+ }
+
+ if (passno != 0) {
+- r = generator_write_fsck_deps(f, arg_dest, what, where, fstype);
+- if (r < 0)
+- return r;
++ if (streq(where, "/usr") && stat("/run/initramfs/fsck-usr", &sb) == 0)
++ ; /* skip /usr fsck if it has already been checked in the initramfs */
++ else {
++ r = generator_write_fsck_deps(f, arg_dest, what, where, fstype);
++ if (r < 0)
++ return r;
++ }
+ }
+
+ fprintf(f,
+diff --git a/units/systemd-fsck-root.service.in b/units/systemd-fsck-root.service.in
+index f493445..89c381f 100644
+--- a/units/systemd-fsck-root.service.in
++++ b/units/systemd-fsck-root.service.in
+@@ -13,6 +13,7 @@ Wants=systemd-fsckd.socket
+ Before=local-fs.target shutdown.target
+ After=systemd-fsckd.socket
+ ConditionPathIsReadWrite=!/
++ConditionPathExists=!/run/initramfs/fsck-root
+
+ [Service]
+ Type=oneshot
--- /dev/null
+From: Michael Biebl <biebl@debian.org>
+Date: Thu, 18 Jul 2013 20:36:39 +0200
+Subject: Start logind on demand via libpam-systemd
+
+Don't make pam_sm_open_session() a NOP if logind is not running. Trying
+to access logind via D-Bus will start it on demand.
+---
+ src/login/pam_systemd.c | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/src/login/pam_systemd.c b/src/login/pam_systemd.c
+index ed4f7c7..bd32709 100644
+--- a/src/login/pam_systemd.c
++++ b/src/login/pam_systemd.c
+@@ -239,10 +239,6 @@ _public_ PAM_EXTERN int pam_sm_open_session(
+
+ assert(handle);
+
+- /* Make this a NOP on non-logind systems */
+- if (!logind_running())
+- return PAM_SUCCESS;
+-
+ if (parse_argv(handle,
+ argc, argv,
+ &class_pam,
--- /dev/null
+From: Michael Biebl <biebl@debian.org>
+Date: Wed, 20 Aug 2014 23:52:47 +0200
+Subject: Stop syslog.socket when entering emergency mode
+
+When rsyslog is installed, the syslog.socket is active when entering emergency
+mode. Any log message then triggers the start of rsyslog.service (or other
+implementation) along with its dependencies such as local-fs.target and
+sysinit.target. As these might fail themselves (e. g. faulty /etc/fstab), this
+breaks the emergency mode.
+
+This causes syslog.socket to fail with "Failed to queue service startup job:
+Transition is destructive".
+
+Add Conflicts=syslog.socket to emergency.service to make sure the socket is
+stopped when emergency.service is started.
+
+(This is a consequence of Re-enable-journal-forwarding-to-syslog.patch)
+
+Closes: #755581
+Forwarded: https://github.com/systemd/systemd/issues/266
+---
+ units/emergency.service.in | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/units/emergency.service.in b/units/emergency.service.in
+index 8dc3cbd..5f7f5e7 100644
+--- a/units/emergency.service.in
++++ b/units/emergency.service.in
+@@ -11,6 +11,7 @@ Documentation=man:sulogin(8)
+ DefaultDependencies=no
+ Conflicts=shutdown.target
+ Conflicts=rescue.service
++Conflicts=syslog.socket
+ Before=shutdown.target
+
+ [Service]
--- /dev/null
+From: Michael Biebl <biebl@debian.org>
+Date: Thu, 18 Jul 2013 20:18:31 +0200
+Subject: Update localed to use the Debian config files
+
+Prefer /etc/default/locale over /etc/locale.conf when writing the locale
+configuration and use /etc/default/keyboard instead of
+/etc/X11/xorg.conf.d/00-keyboard.conf.
+
+Patch courtesy of Steve Langasek.
+---
+ src/locale/localed.c | 205 ++++++++++++++++++++++++++-------------------------
+ 1 file changed, 106 insertions(+), 99 deletions(-)
+
+diff --git a/src/locale/localed.c b/src/locale/localed.c
+index 720cbba..cbd4a0a 100644
+--- a/src/locale/localed.c
++++ b/src/locale/localed.c
+@@ -166,6 +166,24 @@ static int locale_read_data(Context *c) {
+ "LC_IDENTIFICATION", &c->locale[LOCALE_LC_IDENTIFICATION],
+ NULL);
+
++ if (r == -ENOENT)
++ r = parse_env_file("/etc/default/locale", NEWLINE,
++ "LANG", &c->locale[LOCALE_LANG],
++ "LANGUAGE", &c->locale[LOCALE_LANGUAGE],
++ "LC_CTYPE", &c->locale[LOCALE_LC_CTYPE],
++ "LC_NUMERIC", &c->locale[LOCALE_LC_NUMERIC],
++ "LC_TIME", &c->locale[LOCALE_LC_TIME],
++ "LC_COLLATE", &c->locale[LOCALE_LC_COLLATE],
++ "LC_MONETARY", &c->locale[LOCALE_LC_MONETARY],
++ "LC_MESSAGES", &c->locale[LOCALE_LC_MESSAGES],
++ "LC_PAPER", &c->locale[LOCALE_LC_PAPER],
++ "LC_NAME", &c->locale[LOCALE_LC_NAME],
++ "LC_ADDRESS", &c->locale[LOCALE_LC_ADDRESS],
++ "LC_TELEPHONE", &c->locale[LOCALE_LC_TELEPHONE],
++ "LC_MEASUREMENT", &c->locale[LOCALE_LC_MEASUREMENT],
++ "LC_IDENTIFICATION", &c->locale[LOCALE_LC_IDENTIFICATION],
++ NULL);
++
+ if (r == -ENOENT) {
+ int p;
+
+@@ -203,67 +221,17 @@ static int vconsole_read_data(Context *c) {
+ }
+
+ static int x11_read_data(Context *c) {
+- _cleanup_fclose_ FILE *f;
+- char line[LINE_MAX];
+- bool in_section = false;
+ int r;
+
+ context_free_x11(c);
+
+- f = fopen("/etc/X11/xorg.conf.d/00-keyboard.conf", "re");
+- if (!f)
+- return errno == ENOENT ? 0 : -errno;
+-
+- while (fgets(line, sizeof(line), f)) {
+- char *l;
+-
+- char_array_0(line);
+- l = strstrip(line);
+-
+- if (l[0] == 0 || l[0] == '#')
+- continue;
+-
+- if (in_section && first_word(l, "Option")) {
+- _cleanup_strv_free_ char **a = NULL;
+-
+- r = strv_split_extract(&a, l, WHITESPACE, EXTRACT_QUOTES);
+- if (r < 0)
+- return r;
+-
+- if (strv_length(a) == 3) {
+- char **p = NULL;
+-
+- if (streq(a[1], "XkbLayout"))
+- p = &c->x11_layout;
+- else if (streq(a[1], "XkbModel"))
+- p = &c->x11_model;
+- else if (streq(a[1], "XkbVariant"))
+- p = &c->x11_variant;
+- else if (streq(a[1], "XkbOptions"))
+- p = &c->x11_options;
+-
+- if (p) {
+- free(*p);
+- *p = a[2];
+- a[2] = NULL;
+- }
+- }
+-
+- } else if (!in_section && first_word(l, "Section")) {
+- _cleanup_strv_free_ char **a = NULL;
+-
+- r = strv_split_extract(&a, l, WHITESPACE, EXTRACT_QUOTES);
+- if (r < 0)
+- return -ENOMEM;
+-
+- if (strv_length(a) == 2 && streq(a[1], "InputClass"))
+- in_section = true;
+-
+- } else if (in_section && first_word(l, "EndSection"))
+- in_section = false;
+- }
+-
+- return 0;
++ r = parse_env_file("/etc/default/keyboard", NEWLINE,
++ "XKBMODEL", &c->x11_model,
++ "XKBLAYOUT", &c->x11_layout,
++ "XKBVARIANT", &c->x11_variant,
++ "XKBOPTIONS", &c->x11_options,
++ NULL);
++ return r;
+ }
+
+ static int context_read_data(Context *c) {
+@@ -279,10 +247,15 @@ static int context_read_data(Context *c) {
+ static int locale_write_data(Context *c, char ***settings) {
+ int r, p;
+ _cleanup_strv_free_ char **l = NULL;
++ const char *path = "/etc/locale.conf";
+
+ /* Set values will be returned as strv in *settings on success. */
+
+- r = load_env_file(NULL, "/etc/locale.conf", NULL, &l);
++ r = load_env_file(NULL, path, NULL, &l);
++ if (r < 0 && r == -ENOENT) {
++ path = "/etc/default/locale";
++ r = load_env_file(NULL, path, NULL, &l);
++ }
+ if (r < 0 && r != -ENOENT)
+ return r;
+
+@@ -309,13 +282,13 @@ static int locale_write_data(Context *c, char ***settings) {
+ }
+
+ if (strv_isempty(l)) {
+- if (unlink("/etc/locale.conf") < 0)
++ if (unlink(path) < 0)
+ return errno == ENOENT ? 0 : -errno;
+
+ return 0;
+ }
+
+- r = write_env_file_label("/etc/locale.conf", l);
++ r = write_env_file_label(path, l);
+ if (r < 0)
+ return r;
+
+@@ -436,65 +409,99 @@ static int vconsole_write_data(Context *c) {
+ }
+
+ static int x11_write_data(Context *c) {
+- _cleanup_fclose_ FILE *f = NULL;
+- _cleanup_free_ char *temp_path = NULL;
+ int r;
++ char *t, **u, **l = NULL;
+
+- if (isempty(c->x11_layout) &&
+- isempty(c->x11_model) &&
+- isempty(c->x11_variant) &&
+- isempty(c->x11_options)) {
++ r = load_env_file(NULL, "/etc/default/keyboard", NULL, &l);
++ if (r < 0 && r != -ENOENT)
++ return r;
+
+- if (unlink("/etc/X11/xorg.conf.d/00-keyboard.conf") < 0)
+- return errno == ENOENT ? 0 : -errno;
++ /* This could perhaps be done more elegantly using an array
++ * like we do for the locale, instead of struct
++ */
++ if (isempty(c->x11_layout)) {
++ l = strv_env_unset(l, "XKBLAYOUT");
++ } else {
++ if (asprintf(&t, "XKBLAYOUT=%s", c->x11_layout) < 0) {
++ strv_free(l);
++ return -ENOMEM;
++ }
+
+- return 0;
++ u = strv_env_set(l, t);
++ free(t);
++ strv_free(l);
++
++ if (!u)
++ return -ENOMEM;
++
++ l = u;
+ }
+
+- mkdir_p_label("/etc/X11/xorg.conf.d", 0755);
++ if (isempty(c->x11_model)) {
++ l = strv_env_unset(l, "XKBMODEL");
++ } else {
++ if (asprintf(&t, "XKBMODEL=%s", c->x11_model) < 0) {
++ strv_free(l);
++ return -ENOMEM;
++ }
+
+- r = fopen_temporary("/etc/X11/xorg.conf.d/00-keyboard.conf", &f, &temp_path);
+- if (r < 0)
+- return r;
++ u = strv_env_set(l, t);
++ free(t);
++ strv_free(l);
+
+- fchmod(fileno(f), 0644);
++ if (!u)
++ return -ENOMEM;
+
+- fputs("# Read and parsed by systemd-localed. It's probably wise not to edit this file\n"
+- "# manually too freely.\n"
+- "Section \"InputClass\"\n"
+- " Identifier \"system-keyboard\"\n"
+- " MatchIsKeyboard \"on\"\n", f);
++ l = u;
++ }
+
+- if (!isempty(c->x11_layout))
+- fprintf(f, " Option \"XkbLayout\" \"%s\"\n", c->x11_layout);
++ if (isempty(c->x11_variant)) {
++ l = strv_env_unset(l, "XKBVARIANT");
++ } else {
++ if (asprintf(&t, "XKBVARIANT=%s", c->x11_variant) < 0) {
++ strv_free(l);
++ return -ENOMEM;
++ }
+
+- if (!isempty(c->x11_model))
+- fprintf(f, " Option \"XkbModel\" \"%s\"\n", c->x11_model);
++ u = strv_env_set(l, t);
++ free(t);
++ strv_free(l);
+
+- if (!isempty(c->x11_variant))
+- fprintf(f, " Option \"XkbVariant\" \"%s\"\n", c->x11_variant);
++ if (!u)
++ return -ENOMEM;
+
+- if (!isempty(c->x11_options))
+- fprintf(f, " Option \"XkbOptions\" \"%s\"\n", c->x11_options);
++ l = u;
++ }
++
++ if (isempty(c->x11_options)) {
++ l = strv_env_unset(l, "XKBOPTIONS");
++ } else {
++ if (asprintf(&t, "XKBOPTIONS=%s", c->x11_options) < 0) {
++ strv_free(l);
++ return -ENOMEM;
++ }
+
+- fputs("EndSection\n", f);
++ u = strv_env_set(l, t);
++ free(t);
++ strv_free(l);
+
+- r = fflush_and_check(f);
+- if (r < 0)
+- goto fail;
++ if (!u)
++ return -ENOMEM;
+
+- if (rename(temp_path, "/etc/X11/xorg.conf.d/00-keyboard.conf") < 0) {
+- r = -errno;
+- goto fail;
++ l = u;
+ }
+
+- return 0;
++ if (strv_isempty(l)) {
++ strv_free(l);
++
++ if (unlink("/etc/default/keyboard") < 0)
++ return errno == ENOENT ? 0 : -errno;
+
+-fail:
+- (void) unlink("/etc/X11/xorg.conf.d/00-keyboard.conf");
++ return 0;
++ }
+
+- if (temp_path)
+- (void) unlink(temp_path);
++ r = write_env_file("/etc/default/keyboard", l);
++ strv_free(l);
+
+ return r;
+ }
--- /dev/null
+From: Michael Biebl <biebl@debian.org>
+Date: Wed, 11 Sep 2013 23:32:25 +0200
+Subject: Use different default paths for various binaries
+
+Since Debian hasn't done the usr-merge (yet), various binaries are still
+installed in / and not /usr.
+Update the defaults in configure.ac so we don't have to build-depend on
+quota, procps, kmod and kexec-tools just to get the correct paths.
+
+Closes: #721347
+---
+ configure.ac | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index ec30ff1..b112983 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -94,16 +94,16 @@ AC_PROG_AWK
+
+ AC_PATH_PROG([M4], [m4])
+
+-AC_PATH_PROG([QUOTAON], [quotaon], [/usr/sbin/quotaon], [$PATH:/usr/sbin:/sbin])
+-AC_PATH_PROG([QUOTACHECK], [quotacheck], [/usr/sbin/quotacheck], [$PATH:/usr/sbin:/sbin])
++AC_PATH_PROG([QUOTAON], [quotaon], [/sbin/quotaon], [$PATH:/usr/sbin:/sbin])
++AC_PATH_PROG([QUOTACHECK], [quotacheck], [/sbin/quotacheck], [$PATH:/usr/sbin:/sbin])
+
+ AC_PATH_PROG([SETCAP], [setcap], [/usr/sbin/setcap], [$PATH:/usr/sbin:/sbin])
+
+-AC_PATH_PROG([KILL], [kill], [/usr/bin/kill], [$PATH:/usr/sbin:/sbin])
++AC_PATH_PROG([KILL], [kill], [/bin/kill], [$PATH:/usr/sbin:/sbin])
+
+-AC_PATH_PROG([KMOD], [kmod], [/usr/bin/kmod], [$PATH:/usr/sbin:/sbin])
++AC_PATH_PROG([KMOD], [kmod], [/bin/kmod], [$PATH:/usr/sbin:/sbin])
+
+-AC_PATH_PROG([KEXEC], [kexec], [/usr/sbin/kexec], [$PATH:/usr/sbin:/sbin])
++AC_PATH_PROG([KEXEC], [kexec], [/sbin/kexec], [$PATH:/usr/sbin:/sbin])
+
+ AC_PATH_PROG([SULOGIN], [sulogin], [/usr/sbin/sulogin], [$PATH:/usr/sbin:/sbin])
+
+@@ -1233,13 +1233,13 @@ AC_ARG_WITH(kbd-loadkeys,
+ AS_HELP_STRING([--with-kbd-loadkeys=PATH],
+ [Path to loadkeys]),
+ [KBD_LOADKEYS="$withval"],
+- [KBD_LOADKEYS="/usr/bin/loadkeys"])
++ [KBD_LOADKEYS="/bin/loadkeys"])
+
+ AC_ARG_WITH(kbd-setfont,
+ AS_HELP_STRING([--with-kbd-setfont=PATH],
+ [Path to setfont]),
+ [KBD_SETFONT="$withval"],
+- [KBD_SETFONT="/usr/bin/setfont"])
++ [KBD_SETFONT="/bin/setfont"])
+
+ AC_DEFINE_UNQUOTED(KBD_LOADKEYS, ["$KBD_LOADKEYS"], [Path of loadkeys])
+ AC_DEFINE_UNQUOTED(KBD_SETFONT, ["$KBD_SETFONT"], [Path of setfont])
--- /dev/null
+From: Helmut Grohne <helmut@subdivi.de>
+Date: Sun, 22 Nov 2015 08:43:08 +0100
+Subject: basic: fix build on architectures with small long
+
+The x32 architecture has a small "long" type which is not enough to hold
+struct statfs.f_type.
+---
+ src/basic/stat-util.h | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/basic/stat-util.h b/src/basic/stat-util.h
+index 909b220..fb92464 100644
+--- a/src/basic/stat-util.h
++++ b/src/basic/stat-util.h
+@@ -52,9 +52,8 @@ int path_is_os_tree(const char *path);
+ int files_same(const char *filea, const char *fileb);
+
+ /* The .f_type field of struct statfs is really weird defined on
+- * different archs. Let's use our own type we know is sufficiently
+- * larger to store the possible values. */
+-typedef long statfs_f_type_t;
++ * different archs. Let's give its type a name. */
++typedef typeof(((struct statfs*)NULL)->f_type) statfs_f_type_t;
+
+ bool is_fs_type(const struct statfs *s, statfs_f_type_t magic_value) _pure_;
+ int fd_check_fstype(int fd, statfs_f_type_t magic_value);
--- /dev/null
+From: Lennart Poettering <lennart@poettering.net>
+Date: Thu, 28 Jan 2016 17:00:38 +0100
+Subject: basic: getauxval(AT_RANDOM) is apparently not necessarily aligned
+
+Let's make sure we read it in a way compatible with non-aligned memory.
+
+Fixes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=812928
+
+(cherry-picked from commit ad6b1fa287c1d007fd85aa3e85b7e4a6bc7f515f)
+---
+ src/basic/random-util.c | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+diff --git a/src/basic/random-util.c b/src/basic/random-util.c
+index 2f5c16e..34cc7cb 100644
+--- a/src/basic/random-util.c
++++ b/src/basic/random-util.c
+@@ -94,17 +94,18 @@ void initialize_srand(void) {
+ if (srand_called)
+ return;
+
+- x = 0;
+-
+ #ifdef HAVE_SYS_AUXV_H
+- /* The kernel provides us with a bit of entropy in auxv, so
+- * let's try to make use of that to seed the pseudo-random
+- * generator. It's better than nothing... */
++ /* The kernel provides us with 16 bytes of entropy in auxv, so let's try to make use of that to seed the
++ * pseudo-random generator. It's better than nothing... */
+
+ auxv = (void*) getauxval(AT_RANDOM);
+- if (auxv)
+- x ^= *(unsigned*) auxv;
++ if (auxv) {
++ assert_cc(sizeof(x) < 16);
++ memcpy(&x, auxv, sizeof(x));
++ } else
+ #endif
++ x = 0;
++
+
+ x ^= (unsigned) now(CLOCK_REALTIME);
+ x ^= (unsigned) gettid();
--- /dev/null
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Fri, 19 Sep 2014 17:14:10 +0200
+Subject: cgroup: don't trim cgroup trees created by someone else
+
+In cases when there is a cgroup tree in a controller hierarchy which was
+not created by us, but it looks like it was (i.e. cgroup path is the
+same as the one in systemd's named hierarchy) we shouldn't delete it.
+
+Origin: http://lists.freedesktop.org/archives/systemd-devel/2014-September/023276.html
+Bug-Debian: https://bugs.debian.org/777601
+---
+ src/basic/cgroup-util.c | 2 --
+ src/core/cgroup.c | 2 +-
+ 2 files changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c
+index f7fc2c2..0cb5b57 100644
+--- a/src/basic/cgroup-util.c
++++ b/src/basic/cgroup-util.c
+@@ -1862,8 +1862,6 @@ int cg_create_everywhere(CGroupMask supported, CGroupMask mask, const char *path
+
+ if (mask & bit)
+ (void) cg_create(n, path);
+- else if (supported & bit)
+- (void) cg_trim(n, path, true);
+ }
+
+ return 0;
+diff --git a/src/core/cgroup.c b/src/core/cgroup.c
+index d122175..6124a85 100644
+--- a/src/core/cgroup.c
++++ b/src/core/cgroup.c
+@@ -1171,7 +1171,7 @@ void unit_prune_cgroup(Unit *u) {
+
+ is_root_slice = unit_has_name(u, SPECIAL_ROOT_SLICE);
+
+- r = cg_trim_everywhere(u->manager->cgroup_supported, u->cgroup_path, !is_root_slice);
++ r = cg_trim_everywhere(u->cgroup_realized_mask, u->cgroup_path, !is_root_slice);
+ if (r < 0) {
+ log_debug_errno(r, "Failed to destroy cgroup %s, ignoring: %m", u->cgroup_path);
+ return;
--- /dev/null
+From: =?utf-8?q?Zbigniew_J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 30 Nov 2015 21:00:04 -0500
+Subject: core: do not warn about Wants depencencies on masked units
+
+When masking is used to prevent a unit from being loaded,
+every transaction with dependent units would generate a warning.
+Downgrade this warning to debug level.
+
+transaction_add_job_and_dependencies only generated a few return
+values found in the table in bus_common_errors.c, and EADDRNOTAVAIL
+is not one of them, so do not try to suppress EADDRNOTAVAIL.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1278264
+---
+ src/core/transaction.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/core/transaction.c b/src/core/transaction.c
+index 15e79d0..2f16319 100644
+--- a/src/core/transaction.c
++++ b/src/core/transaction.c
+@@ -950,7 +950,7 @@ int transaction_add_job_and_dependencies(
+ r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, false, false, false, ignore_order, e);
+ if (r < 0) {
+ log_unit_full(dep,
+- r == -EADDRNOTAVAIL ? LOG_DEBUG : LOG_WARNING, r,
++ r == -EBADR /* unit masked */ ? LOG_DEBUG : LOG_WARNING, r,
+ "Cannot add dependency job, ignoring: %s",
+ bus_error_message(e, r));
+ sd_bus_error_free(e);
--- /dev/null
+From: Michael Stapelberg <stapelberg@debian.org>
+Date: Sat, 21 Dec 2013 18:49:10 +0100
+Subject: =?utf-8?q?don=E2=80=99t_try_to_start_autovt_units_when_not_runnin?=
+ =?utf-8?q?g_with_systemd_as_pid_1?=
+
+Closes: #726466
+---
+ src/login/logind-core.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/src/login/logind-core.c b/src/login/logind-core.c
+index 36cdbbe..aa231cd 100644
+--- a/src/login/logind-core.c
++++ b/src/login/logind-core.c
+@@ -35,6 +35,7 @@
+ #include "terminal-util.h"
+ #include "udev-util.h"
+ #include "user-util.h"
++#include "sd-daemon.h"
+
+ int manager_add_device(Manager *m, const char *sysfs, bool master, Device **_device) {
+ Device *d;
+@@ -415,6 +416,11 @@ int manager_spawn_autovt(Manager *m, unsigned int vtnr) {
+ vtnr != m->reserve_vt)
+ return 0;
+
++ /* It only makes sense to send a StartUnit call to systemd if this
++ * machine is actually booted with systemd. */
++ if (!sd_booted())
++ return 0;
++
+ if (vtnr != m->reserve_vt) {
+ /* If this is the reserved TTY, we'll start the getty
+ * on it in any case, but otherwise only if it is not
--- /dev/null
+From: Didier Roche <didrocks@ubuntu.com>
+Date: Fri, 22 May 2015 13:04:38 +0200
+Subject: fsckd daemon for inter-fsckd communication
+
+Global logic:
+Add systemd-fsckd multiplexer which accepts multiple (via systemd-fsck's
+/run/systemd/fsck.progress socket) fsck instances to connect to it and sends
+progress report. systemd-fsckd then computes and writes to /dev/console the
+number of devices currently being checked and the minimum fsck progress.
+
+Plymouth and user interaction:
+Forward the progress to plymouth and support canellation of in progress fsck.
+Try to connect and send to plymouth (if running) some checked report progress,
+using direct plymouth protocole.
+
+Update message is the following:
+fsckd:<num_devices>:<progress>:<string>
+* num_devices corresponds to the current number of devices being checked (int)
+* progress corresponds to the current minimum percentage of all devices being
+ checked (float, from 0 to 100)
+* string is a translated message ready to be displayed by the plymouth theme
+ displaying the information above. It can be overriden by plymouth themes
+ supporting i18n.
+
+Grab in fsckd plymouth watch key Control+C, and propagate this cancel request
+to systemd-fsck which will terminate fsck.
+
+Send a message to signal to user what key we are grabbing for fsck cancel.
+
+Message is: fsckd-cancel-msg:<string>
+Where string is a translated string ready to be displayed by the plymouth theme
+indicating that Control+C can be used to cancel current checks. It can be
+overriden (matching only fsckd-cancel-msg prefix) for themes supporting i18n.
+
+Misc:
+systemd-fsckd stops on idle when no fsck is connected.
+Add man page explaining the plymouth theme protocol, usage of the daemon
+as well as the socket activation part. Adapt existing fsck man page.
+
+Note that fsckd had lived in the upstream tree for a while, but was removed.
+More information at
+http://lists.freedesktop.org/archives/systemd-devel/2015-April/030175.html
+-
+---
+ Makefile-man.am | 12 +
+ Makefile.am | 14 +
+ man/systemd-fsckd.service.xml | 162 +++++++++
+ po/POTFILES.in | 1 +
+ src/fsckd/fsckd.c | 685 +++++++++++++++++++++++++++++++++++++
+ units/systemd-fsck-root.service.in | 2 +
+ units/systemd-fsck@.service.in | 3 +-
+ units/systemd-fsckd.service.in | 17 +
+ units/systemd-fsckd.socket | 15 +
+ 9 files changed, 910 insertions(+), 1 deletion(-)
+ create mode 100644 man/systemd-fsckd.service.xml
+ create mode 100644 src/fsckd/fsckd.c
+ create mode 100644 units/systemd-fsckd.service.in
+ create mode 100644 units/systemd-fsckd.socket
+
+diff --git a/Makefile-man.am b/Makefile-man.am
+index c792c89..ed86dfb 100644
+--- a/Makefile-man.am
++++ b/Makefile-man.am
+@@ -93,6 +93,7 @@ MANPAGES += \
+ man/systemd-detect-virt.1 \
+ man/systemd-escape.1 \
+ man/systemd-fsck@.service.8 \
++ man/systemd-fsckd.service.8 \
+ man/systemd-fstab-generator.8 \
+ man/systemd-getty-generator.8 \
+ man/systemd-gpt-auto-generator.8 \
+@@ -368,6 +369,8 @@ MANPAGES_ALIAS += \
+ man/systemd-bus-proxyd.socket.8 \
+ man/systemd-fsck-root.service.8 \
+ man/systemd-fsck.8 \
++ man/systemd-fsckd.8 \
++ man/systemd-fsckd.socket.8 \
+ man/systemd-hibernate-resume.8 \
+ man/systemd-hibernate.service.8 \
+ man/systemd-hybrid-sleep.service.8 \
+@@ -658,6 +661,8 @@ man/systemd-ask-password-wall.service.8: man/systemd-ask-password-console.servic
+ man/systemd-bus-proxyd.socket.8: man/systemd-bus-proxyd.service.8
+ man/systemd-fsck-root.service.8: man/systemd-fsck@.service.8
+ man/systemd-fsck.8: man/systemd-fsck@.service.8
++man/systemd-fsckd.8: man/systemd-fsckd.service.8
++man/systemd-fsckd.socket.8: man/systemd-fsckd.service.8
+ man/systemd-hibernate-resume.8: man/systemd-hibernate-resume@.service.8
+ man/systemd-hibernate.service.8: man/systemd-suspend.service.8
+ man/systemd-hybrid-sleep.service.8: man/systemd-suspend.service.8
+@@ -1364,6 +1369,12 @@ man/systemd-fsck-root.service.html: man/systemd-fsck@.service.html
+ man/systemd-fsck.html: man/systemd-fsck@.service.html
+ $(html-alias)
+
++man/systemd-fsckd.html: man/systemd-fsckd.service.html
++ $(html-alias)
++
++man/systemd-fsckd.socket.html: man/systemd-fsckd.service.html
++ $(html-alias)
++
+ man/systemd-hibernate-resume.html: man/systemd-hibernate-resume@.service.html
+ $(html-alias)
+
+@@ -2347,6 +2358,7 @@ EXTRA_DIST += \
+ man/systemd-escape.xml \
+ man/systemd-firstboot.xml \
+ man/systemd-fsck@.service.xml \
++ man/systemd-fsckd.service.xml \
+ man/systemd-fstab-generator.xml \
+ man/systemd-getty-generator.xml \
+ man/systemd-gpt-auto-generator.xml \
+diff --git a/Makefile.am b/Makefile.am
+index 94f7313..b9e0e75 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -397,6 +397,7 @@ rootlibexec_PROGRAMS = \
+ systemd-remount-fs \
+ systemd-reply-password \
+ systemd-fsck \
++ systemd-fsckd \
+ systemd-ac-power \
+ systemd-sysctl \
+ systemd-sleep \
+@@ -505,6 +506,7 @@ dist_systemunit_DATA = \
+ units/slices.target \
+ units/system.slice \
+ units/x-.slice \
++ units/systemd-fsckd.socket \
+ units/systemd-initctl.socket \
+ units/syslog.socket \
+ units/dev-hugepages.mount \
+@@ -554,6 +556,7 @@ nodist_systemunit_DATA = \
+ units/systemd-exit.service \
+ units/systemd-fsck@.service \
+ units/systemd-fsck-root.service \
++ units/systemd-fsckd.service \
+ units/systemd-machine-id-commit.service \
+ units/systemd-udevd.service \
+ units/systemd-udev-trigger.service \
+@@ -612,6 +615,7 @@ EXTRA_DIST += \
+ units/user/systemd-exit.service.in \
+ units/systemd-fsck@.service.in \
+ units/systemd-fsck-root.service.in \
++ units/systemd-fsckd.service.in \
+ units/systemd-machine-id-commit.service.in \
+ units/user@.service.m4.in \
+ units/debug-shell.service.in \
+@@ -2465,6 +2469,16 @@ systemd_fsck_LDADD = \
+ libshared.la
+
+ # ------------------------------------------------------------------------------
++systemd_fsckd_SOURCES = \
++ src/fsckd/fsckd.c \
++ $(NULL)
++
++systemd_fsckd_LDADD = \
++ libsystemd-internal.la \
++ libudev-internal.la \
++ $(NULL)
++
++# ------------------------------------------------------------------------------
+ systemd_ac_power_SOURCES = \
+ src/ac-power/ac-power.c
+
+diff --git a/man/systemd-fsckd.service.xml b/man/systemd-fsckd.service.xml
+new file mode 100644
+index 0000000..c976062
+--- /dev/null
++++ b/man/systemd-fsckd.service.xml
+@@ -0,0 +1,162 @@
++<?xml version="1.0"?>
++<!--*-nxml-*-->
++<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
++<!--
++ This file is part of systemd.
++
++ Copyright 2015 Canonical
++
++ systemd is free software; you can redistribute it and/or modify it
++ under the terms of the GNU Lesser General Public License as published by
++ the Free Software Foundation; either version 2.1 of the License, or
++ (at your option) any later version.
++
++ systemd is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public License
++ along with systemd; If not, see <http://www.gnu.org/licenses/>.
++-->
++<refentry id="systemd-fsckd.service" xmlns:xi="http://www.w3.org/2001/XInclude">
++
++ <refentryinfo>
++ <title>systemd-fsckd.service</title>
++ <productname>systemd</productname>
++
++ <authorgroup>
++ <author>
++ <contrib>Developer</contrib>
++ <firstname>Didier</firstname>
++ <surname>Roche</surname>
++ <email>didrocks@ubuntu.com</email>
++ </author>
++ </authorgroup>
++ </refentryinfo>
++
++ <refmeta>
++ <refentrytitle>systemd-fsckd.service</refentrytitle>
++ <manvolnum>8</manvolnum>
++ </refmeta>
++
++ <refnamediv>
++ <refname>systemd-fsckd.service</refname>
++ <refname>systemd-fsckd.socket</refname>
++ <refname>systemd-fsckd</refname>
++ <refpurpose>File system check progress reporting</refpurpose>
++ </refnamediv>
++
++ <refsynopsisdiv>
++ <para><filename>systemd-fsckd.service</filename></para>
++ <para><filename>systemd-fsckd.socket</filename></para>
++ <para><filename>/usr/lib/systemd/systemd-fsckd</filename></para>
++ </refsynopsisdiv>
++
++ <refsect1>
++ <title>Description</title>
++
++ <para><filename>systemd-fsckd.service</filename> is a service responsible
++ for receiving file system check progress, and communicating some
++ consolidated data to console and plymouth (if running). It also handles
++ possible check cancellations.</para>
++
++ <para><command>systemd-fsckd</command> receives messages about file
++ system check progress from <command>fsck</command> through an
++ UNIX domain socket. It can display the progress of the least advanced
++ fsck as well as the total number of devices being checked in parallel
++ to the console. It will also send progress messages to plymouth.
++ Both the raw data and translated messages are sent, so compiled
++ plymouth themes can use the raw data to display custom messages, and
++ scripted themes, not supporting i18n, can display the translated
++ versions.</para>
++
++ <para><command>systemd-fsckd</command> will instruct plymouth to grab
++ Control+C keypresses. When the key is pressed, running checks will be
++ terminated. It will also cancel any newly connected fsck instances for
++ the lifetime of <filename>systemd-fsckd</filename>.</para>
++ </refsect1>
++
++ <refsect1>
++ <title>Protocol for communication with plymouth</title>
++
++ <para><filename>systemd-fsckd</filename> passes the
++ following messages to the theme:</para>
++
++ <para>Progress update, sent as a plymouth update message:
++ <literal>fsckd:<num_devices>:<progress>:<string></literal>
++ <variablelist>
++ <varlistentry>
++ <term><literal><num_devices></literal></term>
++ <listitem><para>the current number of devices
++ being checked (int)</para></listitem>
++ </varlistentry>
++ <varlistentry>
++ <term><literal><progress></literal></term>
++ <listitem><para>the current minimum percentage of
++ all devices being checking (float, from 0 to 100)</para></listitem>
++ </varlistentry>
++ <varlistentry>
++ <term><literal><string></literal></term>
++ <listitem><para>a translated message ready to be displayed
++ by the plymouth theme displaying the data above. It can be overriden
++ by themes supporting i18n.</para></listitem>
++ </varlistentry>
++ </variablelist>
++ </para>
++
++ <para>Cancel message, sent as a traditional plymouth message:
++ <literal>fsckd-cancel-msg:<string></literal>
++ <variablelist>
++ <varlistentry>
++ <term><literal><strings></literal></term>
++ <listitem><para>a translated string ready to be displayed
++ by the plymouth theme indicating that Control+C can be used to cancel
++ current checks. It can be overriden (matching only
++ <literal>fsckd-cancel-msg</literal> prefix)
++ by themes supporting i18n.</para></listitem>
++ </varlistentry>
++ </variablelist>
++ </para>
++ </refsect1>
++
++ <refsect1>
++ <title>Options</title>
++
++ <para>The following options are understood:</para>
++
++ <variablelist>
++ <xi:include href="standard-options.xml" xpointer="help" />
++ <xi:include href="standard-options.xml" xpointer="version" />
++ </variablelist>
++
++ </refsect1>
++
++ <refsect1>
++ <title>Exit status</title>
++
++ <para>On success, 0 is returned, a non-zero failure
++ code otherwise. Note that the daemon stays idle for
++ a while to accept new <filename>fsck</filename>
++ connections before exiting.</para>
++ </refsect1>
++
++ <refsect1>
++ <title>See Also</title>
++ <para>
++ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
++ <citerefentry><refentrytitle>systemd-fsck</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
++ <citerefentry project='man-pages'><refentrytitle>fsck</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
++ <citerefentry><refentrytitle>systemd-quotacheck.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
++ <citerefentry project='man-pages'><refentrytitle>fsck.btrfs</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
++ <citerefentry project='man-pages'><refentrytitle>fsck.cramfs</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
++ <citerefentry project='man-pages'><refentrytitle>fsck.ext4</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
++ <citerefentry project='man-pages'><refentrytitle>fsck.fat</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
++ <citerefentry project='man-pages'><refentrytitle>fsck.hfsplus</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
++ <citerefentry project='man-pages'><refentrytitle>fsck.minix</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
++ <citerefentry project='man-pages'><refentrytitle>fsck.ntfs</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
++ <citerefentry project='man-pages'><refentrytitle>fsck.xfs</refentrytitle><manvolnum>8</manvolnum></citerefentry>
++ </para>
++ </refsect1>
++
++</refentry>
+diff --git a/po/POTFILES.in b/po/POTFILES.in
+index f33c53f..4b8ef2e 100644
+--- a/po/POTFILES.in
++++ b/po/POTFILES.in
+@@ -6,3 +6,4 @@ src/login/org.freedesktop.login1.policy.in
+ src/machine/org.freedesktop.machine1.policy.in
+ src/timedate/org.freedesktop.timedate1.policy.in
+ src/core/dbus-unit.c
++src/fsckd/fsckd.c
+diff --git a/src/fsckd/fsckd.c b/src/fsckd/fsckd.c
+new file mode 100644
+index 0000000..347dead
+--- /dev/null
++++ b/src/fsckd/fsckd.c
+@@ -0,0 +1,685 @@
++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
++
++/***
++ This file is part of systemd.
++
++ Copyright 2015 Canonical
++
++ Author:
++ Didier Roche <didrocks@ubuntu.com>
++
++ systemd is free software; you can redistribute it and/or modify it
++ under the terms of the GNU Lesser General Public License as published by
++ the Free Software Foundation; either version 2.1 of the License, or
++ (at your option) any later version.
++
++ systemd is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public License
++ along with systemd; If not, see <http://www.gnu.org/licenses/>.
++***/
++
++#include <getopt.h>
++#include <errno.h>
++#include <libintl.h>
++#include <math.h>
++#include <stdbool.h>
++#include <stdlib.h>
++#include <stdio.h>
++#include <sys/socket.h>
++#include <sys/types.h>
++#include <sys/un.h>
++#include <unistd.h>
++
++#include "sd-daemon.h"
++#include "build.h"
++#include "def.h"
++#include "event-util.h"
++#include "log.h"
++#include "list.h"
++#include "macro.h"
++#include "socket-util.h"
++#include "fd-util.h"
++#include "string-util.h"
++#include "io-util.h"
++#include "util.h"
++#include "alloc-util.h"
++#include "locale-util.h"
++
++#define FSCKD_SOCKET_PATH "/run/systemd/fsck.progress"
++#define IDLE_TIME_SECONDS 30
++#define PLYMOUTH_REQUEST_KEY "K\2\2\3"
++#define CLIENTS_MAX 128
++
++struct Manager;
++
++typedef struct Client {
++ struct Manager *manager;
++ char *device_name;
++ /* device id refers to "fd <fd>" until it gets a name as "device_name" */
++ char *device_id;
++
++ pid_t fsck_pid;
++ FILE *fsck_f;
++
++ size_t cur;
++ size_t max;
++ int pass;
++
++ double percent;
++
++ bool cancelled;
++ bool bad_input;
++
++ sd_event_source *event_source;
++
++ LIST_FIELDS(struct Client, clients);
++} Client;
++
++typedef struct Manager {
++ sd_event *event;
++
++ LIST_HEAD(Client, clients);
++ unsigned n_clients;
++
++ size_t clear;
++
++ int connection_fd;
++ sd_event_source *connection_event_source;
++
++ bool show_status_console;
++
++ double percent;
++ int numdevices;
++
++ int plymouth_fd;
++ sd_event_source *plymouth_event_source;
++ bool plymouth_cancel_sent;
++
++ bool cancel_requested;
++} Manager;
++
++static void client_free(Client *c);
++static void manager_free(Manager *m);
++
++DEFINE_TRIVIAL_CLEANUP_FUNC(Client*, client_free);
++DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
++
++static int manager_write_console(Manager *m, const char *message) {
++ _cleanup_fclose_ FILE *console = NULL;
++ int l;
++ size_t j;
++
++ assert(m);
++
++ if (!m->show_status_console)
++ return 0;
++
++ /* Reduce the SAK window by opening and closing console on every request */
++ console = fopen("/dev/console", "we");
++ if (!console)
++ return -errno;
++
++ if (message) {
++ fprintf(console, "\r%s\r%n", message, &l);
++ if (m->clear < (size_t)l)
++ m->clear = (size_t)l;
++ } else {
++ fputc('\r', console);
++ for (j = 0; j < m->clear; j++)
++ fputc(' ', console);
++ fputc('\r', console);
++ }
++ fflush(console);
++
++ return 0;
++}
++
++static double compute_percent(int pass, size_t cur, size_t max) {
++ /* Values stolen from e2fsck */
++
++ static const double pass_table[] = {
++ 0, 70, 90, 92, 95, 100
++ };
++
++ if (pass <= 0)
++ return 0.0;
++
++ if ((unsigned) pass >= ELEMENTSOF(pass_table) || max == 0)
++ return 100.0;
++
++ return pass_table[pass-1] +
++ (pass_table[pass] - pass_table[pass-1]) *
++ (double) cur / max;
++}
++
++static int client_request_cancel(Client *c) {
++ assert(c);
++
++ if (c->cancelled)
++ return 0;
++
++ log_info("Request to cancel fsck for %s from fsckd", c->device_id);
++ if (kill(c->fsck_pid, SIGTERM) < 0) {
++ /* ignore the error and consider that cancel was sent if fsck just exited */
++ if (errno != ESRCH)
++ return log_error_errno(errno, "Cannot send cancel to fsck for %s: %m", c->device_id);
++ }
++
++ c->cancelled = true;
++ return 1;
++}
++
++static void client_free(Client *c) {
++ assert(c);
++
++ if (c->manager) {
++ LIST_REMOVE(clients, c->manager->clients, c);
++ c->manager->n_clients--;
++ }
++
++ sd_event_source_unref(c->event_source);
++ fclose(c->fsck_f);
++ if (c->device_name)
++ free(c->device_name);
++ if (c->device_id)
++ free(c->device_id);
++ free(c);
++}
++
++static void manager_disconnect_plymouth(Manager *m) {
++ assert(m);
++
++ m->plymouth_event_source = sd_event_source_unref(m->plymouth_event_source);
++ m->plymouth_fd = safe_close(m->plymouth_fd);
++ m->plymouth_cancel_sent = false;
++}
++
++static int manager_plymouth_feedback_handler(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
++ Manager *m = userdata;
++ Client *current;
++ char buffer[6];
++ ssize_t l;
++
++ assert(m);
++
++ l = read(m->plymouth_fd, buffer, sizeof(buffer));
++ if (l < 0) {
++ log_warning_errno(errno, "Got error while reading from plymouth: %m");
++ manager_disconnect_plymouth(m);
++ return -errno;
++ }
++ if (l == 0) {
++ manager_disconnect_plymouth(m);
++ return 0;
++ }
++
++ if (l > 1 && buffer[0] == '\15')
++ log_error("Message update to plymouth wasn't delivered successfully");
++
++ /* the only answer support type we requested is a key interruption */
++ if (l > 2 && buffer[0] == '\2' && buffer[5] == '\3') {
++ m->cancel_requested = true;
++
++ /* cancel all connected clients */
++ LIST_FOREACH(clients, current, m->clients)
++ client_request_cancel(current);
++ }
++
++ return 0;
++}
++
++static int manager_connect_plymouth(Manager *m) {
++ union sockaddr_union sa = PLYMOUTH_SOCKET;
++ int r;
++
++ if (!plymouth_running())
++ return 0;
++
++ /* try to connect or reconnect if sending a message */
++ if (m->plymouth_fd >= 0)
++ return 1;
++
++ m->plymouth_fd = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0);
++ if (m->plymouth_fd < 0)
++ return log_warning_errno(errno, "Connection to plymouth socket failed: %m");
++
++ if (connect(m->plymouth_fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + 1 + strlen(sa.un.sun_path+1)) < 0) {
++ r = log_warning_errno(errno, "Couldn't connect to plymouth: %m");
++ goto fail;
++ }
++
++ r = sd_event_add_io(m->event, &m->plymouth_event_source, m->plymouth_fd, EPOLLIN, manager_plymouth_feedback_handler, m);
++ if (r < 0) {
++ log_warning_errno(r, "Can't listen to plymouth socket: %m");
++ goto fail;
++ }
++
++ return 1;
++
++fail:
++ manager_disconnect_plymouth(m);
++ return r;
++}
++
++static int plymouth_send_message(int plymouth_fd, const char *message, bool update) {
++ _cleanup_free_ char *packet = NULL;
++ int n;
++ char mode = 'M';
++
++ if (update)
++ mode = 'U';
++
++ if (asprintf(&packet, "%c\002%c%s%n", mode, (int) (strlen(message) + 1), message, &n) < 0)
++ return log_oom();
++
++ return loop_write(plymouth_fd, packet, n + 1, true);
++}
++
++static int manager_send_plymouth_message(Manager *m, const char *message) {
++ const char *plymouth_cancel_message = NULL, *l10n_cancel_message = NULL;
++ int r;
++
++ r = manager_connect_plymouth(m);
++ if (r < 0)
++ return r;
++ /* 0 means that plymouth isn't running, do not send any message yet */
++ else if (r == 0)
++ return 0;
++
++ if (!m->plymouth_cancel_sent) {
++
++ /* Indicate to plymouth that we listen to Ctrl+C */
++ r = loop_write(m->plymouth_fd, PLYMOUTH_REQUEST_KEY, sizeof(PLYMOUTH_REQUEST_KEY), true);
++ if (r < 0)
++ return log_warning_errno(r, "Can't send to plymouth cancel key: %m");
++
++ m->plymouth_cancel_sent = true;
++
++ l10n_cancel_message = _("Press Ctrl+C to cancel all filesystem checks in progress");
++ plymouth_cancel_message = strjoina("fsckd-cancel-msg:", l10n_cancel_message);
++
++ r = plymouth_send_message(m->plymouth_fd, plymouth_cancel_message, false);
++ if (r < 0)
++ log_warning_errno(r, "Can't send filesystem cancel message to plymouth: %m");
++
++ } else if (m->numdevices == 0) {
++
++ m->plymouth_cancel_sent = false;
++
++ r = plymouth_send_message(m->plymouth_fd, "", false);
++ if (r < 0)
++ log_warning_errno(r, "Can't clear plymouth filesystem cancel message: %m");
++ }
++
++ r = plymouth_send_message(m->plymouth_fd, message, true);
++ if (r < 0)
++ return log_warning_errno(r, "Couldn't send \"%s\" to plymouth: %m", message);
++
++ return 0;
++}
++
++static int manager_update_global_progress(Manager *m) {
++ Client *current = NULL;
++ _cleanup_free_ char *console_message = NULL;
++ _cleanup_free_ char *fsck_message = NULL;
++ int current_numdevices = 0, r;
++ double current_percent = 100;
++
++ /* get the overall percentage */
++ LIST_FOREACH(clients, current, m->clients) {
++ current_numdevices++;
++
++ /* right now, we only keep the minimum % of all fsckd processes. We could in the future trying to be
++ linear, but max changes and corresponds to the pass. We have all the informations into fsckd
++ already if we can treat that in a smarter way. */
++ current_percent = MIN(current_percent, current->percent);
++ }
++
++ /* update if there is anything user-visible to update */
++ if (fabs(current_percent - m->percent) > 0.001 || current_numdevices != m->numdevices) {
++ m->numdevices = current_numdevices;
++ m->percent = current_percent;
++
++ if (asprintf(&console_message,
++ ngettext("Checking in progress on %d disk (%3.1f%% complete)",
++ "Checking in progress on %d disks (%3.1f%% complete)", m->numdevices),
++ m->numdevices, m->percent) < 0)
++ return -ENOMEM;
++
++ if (asprintf(&fsck_message, "fsckd:%d:%3.1f:%s", m->numdevices, m->percent, console_message) < 0)
++ return -ENOMEM;
++
++ r = manager_write_console(m, console_message);
++ if (r < 0)
++ return r;
++
++ /* try to connect to plymouth and send message */
++ r = manager_send_plymouth_message(m, fsck_message);
++ if (r < 0)
++ return r;
++ }
++ return 0;
++}
++
++static int client_progress_handler(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
++ Client *client = userdata;
++ char line[LINE_MAX];
++ Manager *m;
++
++ assert(client);
++ m = client->manager;
++
++ /* check first if we need to cancel this client */
++ if (m->cancel_requested)
++ client_request_cancel(client);
++
++ while (fgets(line, sizeof(line), client->fsck_f) != NULL) {
++ int pass;
++ size_t cur, max;
++ _cleanup_free_ char *device = NULL, *old_device_id = NULL;
++
++ if (sscanf(line, "%i %lu %lu %ms", &pass, &cur, &max, &device) == 4) {
++ if (!client->device_name) {
++ client->device_name = strdup(device);
++ if (!client->device_name) {
++ log_oom();
++ continue;
++ }
++ old_device_id = client->device_id;
++ client->device_id = strdup(device);
++ if (!client->device_id) {
++ log_oom();
++ client->device_id = old_device_id;
++ old_device_id = NULL;
++ continue;
++ }
++ }
++ client->pass = pass;
++ client->cur = cur;
++ client->max = max;
++ client->bad_input = false;
++ client->percent = compute_percent(client->pass, client->cur, client->max);
++ log_debug("Getting progress for %s (%lu, %lu, %d) : %3.1f%%", client->device_id,
++ client->cur, client->max, client->pass, client->percent);
++ } else {
++ if (errno == ENOMEM) {
++ log_oom();
++ continue;
++ }
++
++ /* if previous input was already garbage, kick it off from progress report */
++ if (client->bad_input) {
++ log_warning("Closing connection on incorrect input of fsck connection for %s", client->device_id);
++ client_free(client);
++ manager_update_global_progress(m);
++ return 0;
++ }
++ client->bad_input = true;
++ }
++
++ }
++
++ if (feof(client->fsck_f)) {
++ log_debug("Fsck client %s disconnected", client->device_id);
++ client_free(client);
++ }
++
++ manager_update_global_progress(m);
++ return 0;
++}
++
++static int manager_new_connection_handler(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
++ _cleanup_(client_freep) Client *c = NULL;
++ _cleanup_close_ int new_fsck_fd = -1;
++ _cleanup_fclose_ FILE *new_fsck_f = NULL;
++ struct ucred ucred = {};
++ Manager *m = userdata;
++ int r;
++
++ assert(m);
++
++ /* Initialize and list new clients */
++ new_fsck_fd = accept4(m->connection_fd, NULL, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK);
++ if (new_fsck_fd < 0) {
++ log_error_errno(errno, "Couldn't accept a new connection: %m");
++ return 0;
++ }
++
++ if (m->n_clients >= CLIENTS_MAX) {
++ log_error("Too many clients, refusing connection.");
++ return 0;
++ }
++
++
++ new_fsck_f = fdopen(new_fsck_fd, "r");
++ if (!new_fsck_f) {
++ log_error_errno(errno, "Couldn't fdopen new connection for fd %d: %m", new_fsck_fd);
++ return 0;
++ }
++ new_fsck_fd = -1;
++
++ r = getpeercred(fileno(new_fsck_f), &ucred);
++ if (r < 0) {
++ log_error_errno(r, "Couldn't get credentials for fsck: %m");
++ return 0;
++ }
++
++ c = new0(Client, 1);
++ if (!c) {
++ log_oom();
++ return 0;
++ }
++
++ c->fsck_pid = ucred.pid;
++ c->fsck_f = new_fsck_f;
++ new_fsck_f = NULL;
++
++ if (asprintf(&(c->device_id), "fd %d", fileno(c->fsck_f)) < 0) {
++ log_oom();
++ return 0;
++ }
++
++ r = sd_event_add_io(m->event, &c->event_source, fileno(c->fsck_f), EPOLLIN, client_progress_handler, c);
++ if (r < 0) {
++ log_oom();
++ return 0;
++ }
++
++ LIST_PREPEND(clients, m->clients, c);
++ m->n_clients++;
++ c->manager = m;
++
++ log_debug("New fsck client connected: %s", c->device_id);
++
++ /* only request the client to cancel now in case the request is dropped by the client (chance to recancel) */
++ if (m->cancel_requested)
++ client_request_cancel(c);
++
++ c = NULL;
++ return 0;
++}
++
++static void manager_free(Manager *m) {
++ if (!m)
++ return;
++
++ /* clear last line */
++ manager_write_console(m, NULL);
++
++ sd_event_source_unref(m->connection_event_source);
++ safe_close(m->connection_fd);
++
++ while (m->clients)
++ client_free(m->clients);
++
++ manager_disconnect_plymouth(m);
++
++ sd_event_unref(m->event);
++
++ free(m);
++}
++
++static int manager_new(Manager **ret, int fd) {
++ _cleanup_(manager_freep) Manager *m = NULL;
++ int r;
++
++ assert(ret);
++
++ m = new0(Manager, 1);
++ if (!m)
++ return -ENOMEM;
++
++ m->plymouth_fd = -1;
++ m->connection_fd = fd;
++ m->percent = 100;
++
++ r = sd_event_default(&m->event);
++ if (r < 0)
++ return r;
++
++ if (access("/run/systemd/show-status", F_OK) >= 0)
++ m->show_status_console = true;
++
++ r = sd_event_add_io(m->event, &m->connection_event_source, fd, EPOLLIN, manager_new_connection_handler, m);
++ if (r < 0)
++ return r;
++
++ *ret = m;
++ m = NULL;
++
++ return 0;
++}
++
++static int run_event_loop_with_timeout(sd_event *e, usec_t timeout) {
++ int r, code;
++
++ assert(e);
++
++ for (;;) {
++ r = sd_event_get_state(e);
++ if (r < 0)
++ return r;
++ if (r == SD_EVENT_FINISHED)
++ break;
++
++ r = sd_event_run(e, timeout);
++ if (r < 0)
++ return r;
++
++ /* timeout reached */
++ if (r == 0) {
++ sd_event_exit(e, 0);
++ break;
++ }
++ }
++
++ r = sd_event_get_exit_code(e, &code);
++ if (r < 0)
++ return r;
++
++ return code;
++}
++
++static void help(void) {
++ printf("%s [OPTIONS...]\n\n"
++ "Capture fsck progress and forward one stream to plymouth\n\n"
++ " -h --help Show this help\n"
++ " --version Show package version\n",
++ program_invocation_short_name);
++}
++
++static int parse_argv(int argc, char *argv[]) {
++
++ enum {
++ ARG_VERSION = 0x100,
++ ARG_ROOT,
++ };
++
++ static const struct option options[] = {
++ { "help", no_argument, NULL, 'h' },
++ { "version", no_argument, NULL, ARG_VERSION },
++ {}
++ };
++
++ int c;
++
++ assert(argc >= 0);
++ assert(argv);
++
++ while ((c = getopt_long(argc, argv, "hv", options, NULL)) >= 0)
++ switch (c) {
++
++ case 'h':
++ help();
++ return 0;
++
++ case ARG_VERSION:
++ puts(PACKAGE_STRING);
++ puts(SYSTEMD_FEATURES);
++ return 0;
++
++ case '?':
++ return -EINVAL;
++
++ default:
++ assert_not_reached("Unhandled option");
++ }
++
++ if (optind < argc) {
++ log_error("Extraneous arguments");
++ return -EINVAL;
++ }
++
++ return 1;
++}
++
++int main(int argc, char *argv[]) {
++ _cleanup_(manager_freep) Manager *m = NULL;
++ int fd = -1;
++ int r, n;
++
++ log_set_target(LOG_TARGET_AUTO);
++ log_parse_environment();
++ log_open();
++ init_gettext();
++
++ r = parse_argv(argc, argv);
++ if (r <= 0)
++ goto finish;
++
++ n = sd_listen_fds(0);
++ if (n > 1) {
++ log_error("Too many file descriptors received.");
++ r = -EINVAL;
++ goto finish;
++ } else if (n == 1)
++ fd = SD_LISTEN_FDS_START + 0;
++ else {
++ fd = make_socket_fd(LOG_DEBUG, FSCKD_SOCKET_PATH, SOCK_STREAM | SOCK_CLOEXEC);
++ if (fd < 0) {
++ r = log_error_errno(fd, "Couldn't create listening socket fd on %s: %m", FSCKD_SOCKET_PATH);
++ goto finish;
++ }
++ }
++
++ r = manager_new(&m, fd);
++ if (r < 0) {
++ log_error_errno(r, "Failed to allocate manager: %m");
++ goto finish;
++ }
++
++ r = run_event_loop_with_timeout(m->event, IDLE_TIME_SECONDS * USEC_PER_SEC);
++ if (r < 0) {
++ log_error_errno(r, "Failed to run event loop: %m");
++ goto finish;
++ }
++
++ sd_event_get_exit_code(m->event, &r);
++
++finish:
++ return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
++}
+diff --git a/units/systemd-fsck-root.service.in b/units/systemd-fsck-root.service.in
+index 3617abf..f493445 100644
+--- a/units/systemd-fsck-root.service.in
++++ b/units/systemd-fsck-root.service.in
+@@ -9,7 +9,9 @@
+ Description=File System Check on Root Device
+ Documentation=man:systemd-fsck-root.service(8)
+ DefaultDependencies=no
++Wants=systemd-fsckd.socket
+ Before=local-fs.target shutdown.target
++After=systemd-fsckd.socket
+ ConditionPathIsReadWrite=!/
+
+ [Service]
+diff --git a/units/systemd-fsck@.service.in b/units/systemd-fsck@.service.in
+index 0468392..e6d98c0 100644
+--- a/units/systemd-fsck@.service.in
++++ b/units/systemd-fsck@.service.in
+@@ -10,7 +10,8 @@ Description=File System Check on %f
+ Documentation=man:systemd-fsck@.service(8)
+ DefaultDependencies=no
+ BindsTo=%i.device
+-After=%i.device systemd-fsck-root.service local-fs-pre.target
++Wants=systemd-fsckd.socket
++After=%i.device systemd-fsck-root.service local-fs-pre.target systemd-fsckd.socket
+ Before=shutdown.target
+
+ [Service]
+diff --git a/units/systemd-fsckd.service.in b/units/systemd-fsckd.service.in
+new file mode 100644
+index 0000000..9c7ed51
+--- /dev/null
++++ b/units/systemd-fsckd.service.in
+@@ -0,0 +1,17 @@
++# This file is part of systemd.
++#
++# systemd is free software; you can redistribute it and/or modify it
++# under the terms of the GNU Lesser General Public License as published by
++# the Free Software Foundation; either version 2.1 of the License, or
++# (at your option) any later version.
++
++[Unit]
++Description=File System Check Daemon to report status
++Documentation=man:systemd-fsckd.service(8)
++DefaultDependencies=no
++Requires=systemd-fsckd.socket
++Before=shutdown.target
++
++[Service]
++ExecStart=@rootlibexecdir@/systemd-fsckd
++StandardOutput=journal+console
+diff --git a/units/systemd-fsckd.socket b/units/systemd-fsckd.socket
+new file mode 100644
+index 0000000..61fec97
+--- /dev/null
++++ b/units/systemd-fsckd.socket
+@@ -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 Lesser General Public License as published by
++# the Free Software Foundation; either version 2.1 of the License, or
++# (at your option) any later version.
++
++[Unit]
++Description=fsck to fsckd communication Socket
++Documentation=man:systemd-fsckd.service(8) man:systemd-fsck@.service(8) man:systemd-fsck-root.service(8)
++DefaultDependencies=no
++
++[Socket]
++ListenStream=/run/systemd/fsck.progress
++SocketMode=0600
--- /dev/null
+From: Lennart Poettering <lennart@poettering.net>
+Date: Mon, 1 Feb 2016 21:08:50 +0100
+Subject: gpt-auto: don't log an EIO error if blkid finds something which is
+ not a partition table
+
+Fixes: #2483
+
+(cherry-picked from commit cb9712492f94153b7ce6fc03d6dd3fd95c87baa5)
+---
+ src/gpt-auto-generator/gpt-auto-generator.c | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
+index ce8cecc..a1bad9f 100644
+--- a/src/gpt-auto-generator/gpt-auto-generator.c
++++ b/src/gpt-auto-generator/gpt-auto-generator.c
+@@ -635,16 +635,19 @@ static int enumerate_partitions(dev_t devnum) {
+ if (r == 1)
+ return 0; /* no results */
+ else if (r == -2) {
+- log_warning("%s: probe gave ambiguous results, ignoring", node);
++ log_warning("%s: probe gave ambiguous results, ignoring.", node);
+ return 0;
+ } else if (r != 0)
+ return log_error_errno(errno ?: EIO, "%s: failed to probe: %m", node);
+
+ errno = 0;
+ r = blkid_probe_lookup_value(b, "PTTYPE", &pttype, NULL);
+- if (r != 0)
+- return log_error_errno(errno ?: EIO,
+- "%s: failed to determine partition table type: %m", node);
++ if (r != 0) {
++ if (errno == 0)
++ return 0; /* No partition table found. */
++
++ return log_error_errno(errno, "%s: failed to determine partition table type: %m", node);
++ }
+
+ /* We only do this all for GPT... */
+ if (!streq_ptr(pttype, "gpt")) {
--- /dev/null
+From: Michael Biebl <biebl@debian.org>
+Date: Fri, 28 Jun 2013 17:54:41 +0200
+Subject: insserv.conf generator
+
+Parse /etc/insserv.conf.d content and /etc/insserv.conf and generate
+systemd unit drop-in files to add corresponding dependencies.
+
+This patch is based on work by Frederic Crozat <fcrozat@suse.com>.
+See [0] for the original patch.
+
+It has the following modifications:
+- it removes support for boot. and bool.localfs which is a SuSE specific
+ extension
+- it ensures that targets do not start other targets or services
+- maps $x-display-manager to display-manager.service, just like the
+ sysv-generator
+
+[0] https://build.opensuse.org/package/view_file/openSUSE:Factory/systemd/insserv-generator.patch
+---
+ Makefile.am | 8 +
+ src/insserv-generator/Makefile | 28 +++
+ src/insserv-generator/insserv-generator.c | 333 ++++++++++++++++++++++++++++++
+ 3 files changed, 369 insertions(+)
+ create mode 100644 src/insserv-generator/Makefile
+ create mode 100644 src/insserv-generator/insserv-generator.c
+
+diff --git a/Makefile.am b/Makefile.am
+index 437905c..ad193e4 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -410,6 +410,7 @@ rootlibexec_PROGRAMS += \
+ endif
+
+ systemgenerator_PROGRAMS = \
++ systemd-insserv-generator \
+ systemd-getty-generator \
+ systemd-fstab-generator \
+ systemd-system-update-generator \
+@@ -2483,6 +2484,13 @@ systemd_delta_LDADD = \
+ libshared.la
+
+ # ------------------------------------------------------------------------------
++systemd_insserv_generator_SOURCES = \
++ src/insserv-generator/insserv-generator.c
++
++systemd_insserv_generator_LDADD = \
++ libsystemd-internal.la
++
++# ------------------------------------------------------------------------------
+ systemd_getty_generator_SOURCES = \
+ src/getty-generator/getty-generator.c
+
+diff --git a/src/insserv-generator/Makefile b/src/insserv-generator/Makefile
+new file mode 100644
+index 0000000..9d07505
+--- /dev/null
++++ b/src/insserv-generator/Makefile
+@@ -0,0 +1,28 @@
++# This file is part of systemd.
++#
++# Copyright 2010 Lennart Poettering
++#
++# systemd is free software; you can redistribute it and/or modify it
++# under the terms of the GNU Lesser General Public License as published by
++# the Free Software Foundation; either version 2.1 of the License, or
++# (at your option) any later version.
++#
++# systemd is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++# Lesser General Public License for more details.
++#
++# You should have received a copy of the GNU Lesser General Public License
++# along with systemd; If not, see <http://www.gnu.org/licenses/>.
++
++# This file is a dirty trick to simplify compilation from within
++# emacs. This file is not intended to be distributed. So, don't touch
++# it, even better ignore it!
++
++all:
++ $(MAKE) -C ..
++
++clean:
++ $(MAKE) -C .. clean
++
++.PHONY: all clean
+diff --git a/src/insserv-generator/insserv-generator.c b/src/insserv-generator/insserv-generator.c
+new file mode 100644
+index 0000000..665579c
+--- /dev/null
++++ b/src/insserv-generator/insserv-generator.c
+@@ -0,0 +1,333 @@
++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
++
++/***
++ This file is part of systemd.
++
++ Copyright 2012 Lennart Poettering
++
++ systemd is free software; you can redistribute it and/or modify it
++ under the terms of the GNU Lesser General Public License as published by
++ the Free Software Foundation; either version 2.1 of the License, or
++ (at your option) any later version.
++
++ systemd is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public License
++ along with systemd; If not, see <http://www.gnu.org/licenses/>.
++ ***/
++
++#include <stdio.h>
++#include <errno.h>
++#include <string.h>
++#include <sys/stat.h>
++
++#include "mkdir.h"
++#include "log.h"
++#include "fileio.h"
++#include "unit-name.h"
++#include "special.h"
++#include "path-util.h"
++#include "string-util.h"
++#include "fd-util.h"
++#include "alloc-util.h"
++#include "util.h"
++#include "strv.h"
++
++static const char *arg_dest = "/tmp";
++
++static char *sysv_translate_name(const char *name) {
++ char *r;
++
++ r = new(char, strlen(name) + sizeof(".service"));
++ if (!r)
++ return NULL;
++
++ if (endswith(name, ".sh"))
++ /* Drop .sh suffix */
++ strcpy(stpcpy(r, name) - 3, ".service");
++ else
++ /* Normal init script name */
++ strcpy(stpcpy(r, name), ".service");
++
++ return r;
++}
++
++static int sysv_translate_facility(const char *name, const char *filename, char **_r) {
++
++ /* We silently ignore the $ prefix here. According to the LSB
++ * spec it simply indicates whether something is a
++ * standardized name or a distribution-specific one. Since we
++ * just follow what already exists and do not introduce new
++ * uses or names we don't care who introduced a new name. */
++
++ static const char * const table[] = {
++ /* LSB defined facilities */
++ "local_fs", NULL,
++ "network", SPECIAL_NETWORK_TARGET,
++ "named", SPECIAL_NSS_LOOKUP_TARGET,
++ "portmap", SPECIAL_RPCBIND_TARGET,
++ "remote_fs", SPECIAL_REMOTE_FS_TARGET,
++ "syslog", NULL,
++ "time", SPECIAL_TIME_SYNC_TARGET,
++ /* Debian defined facilities */
++ "x-display-manager", "display-manager.service",
++ };
++
++ unsigned i;
++ int e;
++ char *r;
++ const char *n;
++
++ assert(name);
++ assert(_r);
++
++ n = *name == '$' ? name + 1 : name;
++
++ for (i = 0; i < ELEMENTSOF(table); i += 2) {
++
++ if (!streq(table[i], n))
++ continue;
++
++ if (!table[i+1])
++ return 0;
++
++ r = strdup(table[i+1]);
++ if (!r)
++ return log_oom();
++
++ goto finish;
++ }
++
++ /* If we don't know this name, fallback heuristics to figure
++ * out whether something is a target or a service alias. */
++
++ if (*name == '$') {
++ if (!unit_prefix_is_valid(n))
++ return -EINVAL;
++
++ /* Facilities starting with $ are most likely targets */
++ e = unit_name_build(n, NULL, ".target", &r);
++ if (e < 0)
++ return log_error_errno(e, "Failed to generate unit name: %m");
++
++ } else if (filename && streq(name, filename))
++ /* Names equaling the file name of the services are redundant */
++ return 0;
++ else
++ /* Everything else we assume to be normal service names */
++ r = sysv_translate_name(n);
++
++ if (!r)
++ return -ENOMEM;
++
++finish:
++ *_r = r;
++
++ return 1;
++}
++
++
++
++static int parse_insserv_conf(const char* filename) {
++ _cleanup_fclose_ FILE *f = NULL;
++ int r;
++
++ if (!(f = fopen(filename, "re"))) {
++ log_debug("Failed to open file %s", filename);
++ r = errno == ENOENT ? 0 : -errno;
++ return r;
++ }
++
++ while (!feof(f)) {
++ char l[LINE_MAX], *t;
++ _cleanup_strv_free_ char **parsed = NULL;
++
++ if (!fgets(l, sizeof(l), f)) {
++ if (feof(f))
++ break;
++
++ r = -errno;
++ log_error("Failed to read configuration file '%s': %s", filename, strerror(-r));
++ return -r;
++ }
++
++ t = strstrip(l);
++ if (*t != '$' && *t != '<')
++ continue;
++
++ parsed = strv_split(t,WHITESPACE);
++ /* we ignore <interactive>, not used, equivalent to X-Interactive */
++ if (parsed && !startswith_no_case (parsed[0], "<interactive>")) {
++ _cleanup_free_ char *facility = NULL;
++ if (sysv_translate_facility(parsed[0], NULL, &facility) < 0 || !facility)
++ continue;
++ if (streq(facility, SPECIAL_REMOTE_FS_TARGET)) {
++ _cleanup_free_ char *unit = NULL;
++ /* insert also a Wants dependency from remote-fs-pre on remote-fs */
++ unit = strjoin(arg_dest, "/remote-fs.target.d/50-",basename(filename),".conf", NULL);
++ if (!unit)
++ return log_oom();
++
++ mkdir_parents_label(unit, 0755);
++
++ r = write_string_file(unit,
++ "# Automatically generated by systemd-insserv-generator\n\n"
++ "[Unit]\n"
++ "Wants=remote-fs-pre.target\n", WRITE_STRING_FILE_CREATE);
++ if (r)
++ return r;
++ free (facility);
++ facility=strdup(SPECIAL_REMOTE_FS_PRE_TARGET);
++ }
++ if (facility && endswith(facility, ".target")) {
++ char *name, **j;
++ FILE *file = NULL;
++
++ STRV_FOREACH (j, parsed+1) {
++ _cleanup_free_ char *unit = NULL;
++ _cleanup_free_ char *dep = NULL;
++ _cleanup_free_ char *initscript = NULL;
++
++ /* targets should not pull in and activate other targets so skip them */
++ if (*j[0] == '$')
++ continue;
++
++ if (*j[0] == '+')
++ name = *j+1;
++ else
++ name = *j;
++ if ((sysv_translate_facility(name, NULL, &dep) < 0) || !dep)
++ continue;
++
++ /* don't create any drop-in configs if the
++ * corresponding SysV init script does not exist */
++ initscript = strjoin("/etc/init.d/", name, NULL);
++ if (access(initscript, F_OK) < 0) {
++ _cleanup_free_ char *initscript_sh = NULL;
++
++ /* Try *.sh source'able init scripts */
++ initscript_sh = strjoin(initscript, ".sh", NULL);
++ if (access(initscript_sh, F_OK) < 0) {
++ continue;
++ }
++ }
++
++ unit = strjoin(arg_dest, "/", dep, ".d/50-",basename(filename),"-",parsed[0],".conf", NULL);
++ if (!unit)
++ return log_oom();
++
++ mkdir_parents_label(unit, 0755);
++
++ file = fopen(unit, "wxe");
++ if (!file) {
++ if (errno == EEXIST)
++ log_error("Failed to create drop-in file %s", unit);
++ else
++ log_error("Failed to create drop-in file %s: %m", unit);
++ return -errno;
++ }
++
++ fprintf(file,
++ "# Automatically generated by systemd-insserv-generator\n\n"
++ "[Unit]\n"
++ "Wants=%s\n"
++ "Before=%s\n",
++ facility, facility);
++
++ fflush(file);
++ if (ferror(file)) {
++ log_error("Failed to write unit file %s: %m", unit);
++ return -errno;
++ }
++ fclose(file);
++
++ if (*j[0] != '+') {
++ free (unit);
++ unit = strjoin(arg_dest, "/", facility, ".d/50-hard-dependency-",basename(filename),"-",parsed[0],".conf", NULL);
++ if (!unit)
++ return log_oom();
++
++ mkdir_parents_label(unit, 0755);
++
++ file = fopen(unit, "wxe");
++ if (!file) {
++ if (errno == EEXIST)
++ log_error("Failed to create drop-in file %s, as it already exists", unit);
++ else
++ log_error("Failed to create drop-in file %s: %m", unit);
++ return -errno;
++ }
++
++
++ fprintf(file,
++ "# Automatically generated by systemd-insserv-generator\n\n"
++ "[Unit]\n"
++ "SourcePath=%s\n"
++ "Requires=%s\n",
++ filename, dep);
++ fflush(file);
++ if (ferror(file)) {
++ log_error("Failed to write unit file %s: %m", unit);
++ return -errno;
++ }
++ fclose(file);
++ }
++ }
++ }
++ }
++ }
++ return r;
++}
++
++static int parse_insserv(void) {
++ DIR *d = NULL;
++ struct dirent *de;
++ int r = 0;
++
++ if (!(d = opendir("/etc/insserv.conf.d/"))) {
++ if (errno != ENOENT) {
++ log_debug("opendir() failed on /etc/insserv.conf.d/ %s", strerror(errno));
++ }
++ } else {
++
++ while ((de = readdir(d))) {
++ char *path = NULL;
++ if (hidden_file(de->d_name))
++ continue;
++
++ path = strjoin("/etc/insserv.conf.d/", de->d_name, NULL);
++ parse_insserv_conf(path);
++ free(path);
++ }
++ closedir (d);
++ }
++
++ r = parse_insserv_conf("/etc/insserv.conf");
++
++ return r;
++}
++
++int main(int argc, char *argv[]) {
++ int r = 0;
++
++ if (argc > 1 && argc != 4) {
++ log_error("This program takes three or no arguments.");
++ return EXIT_FAILURE;
++ }
++
++ if (argc > 1)
++ arg_dest = argv[1];
++
++ log_set_target(LOG_TARGET_SAFE);
++ log_parse_environment();
++ log_open();
++
++ umask(0022);
++
++ r = parse_insserv();
++
++ return (r < 0) ? EXIT_FAILURE : EXIT_SUCCESS;
++}
--- /dev/null
+From: Martin Pitt <martin.pitt@ubuntu.com>
+Date: Mon, 11 Jan 2016 16:26:17 +0100
+Subject: kmod-static-nodes: don't run if module list is empty
+
+With this kmod commit, modules.devname will be empty by default instead of
+containing just a comment:
+
+ https://git.kernel.org/cgit/utils/kernel/kmod/kmod.git/commit/?id=4c30a11d5f
+
+Refine the startup condition of kmod-static-nodes.service to not run needlessly
+if the list is empty.
+
+(cherry-picked from commit 6233c794b2b6eeee178727cfe3729243876e2948)
+---
+ units/kmod-static-nodes.service.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/units/kmod-static-nodes.service.in b/units/kmod-static-nodes.service.in
+index 0934a87..a9c8df1 100644
+--- a/units/kmod-static-nodes.service.in
++++ b/units/kmod-static-nodes.service.in
+@@ -10,7 +10,7 @@ Description=Create list of required static device nodes for the current kernel
+ DefaultDependencies=no
+ Before=sysinit.target systemd-tmpfiles-setup-dev.service
+ ConditionCapability=CAP_SYS_MODULE
+-ConditionPathExists=/lib/modules/%v/modules.devname
++ConditionFileNotEmpty=/lib/modules/%v/modules.devname
+
+ [Service]
+ Type=oneshot
--- /dev/null
+From: Franck Bui <fbui@suse.com>
+Date: Mon, 23 Nov 2015 11:14:10 +0100
+Subject: make sure all swap units are ordered before the swap target
+
+When shutting down the system, the swap devices can be disabled long
+time before the swap target is stopped. They're actually the first
+units systemd turns off on my system.
+
+This is incorrect and due to swap devices having multiple associated
+swap unit files. The main one is usually created by the fstab
+generator and is used to start the swap device.
+
+Once done, systemd creates some 'alias' units for the same swap
+device, one for each swap dev link. But those units are missing an
+ordering dependencies which was created by the fstab generator for the
+main swap unit.
+
+Therefore during shutdown those 'alias' units can be stopped at
+anytime before unmount.target target.
+
+This patch makes sure that all swap units are stopped after the
+swap.target target.
+
+(cherry picked from commit 8bf23dc757dacaaf5a8d2c21aabf71aee08d1a04)
+---
+ src/core/swap.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/src/core/swap.c b/src/core/swap.c
+index ee0838e..b6e4372 100644
+--- a/src/core/swap.c
++++ b/src/core/swap.c
+@@ -211,6 +211,8 @@ static int swap_add_device_links(Swap *s) {
+ }
+
+ static int swap_add_default_dependencies(Swap *s) {
++ int r;
++
+ assert(s);
+
+ if (!UNIT(s)->default_dependencies)
+@@ -222,6 +224,12 @@ static int swap_add_default_dependencies(Swap *s) {
+ if (detect_container() > 0)
+ return 0;
+
++ /* swap units generated for the swap dev links are missing the
++ * ordering dep against the swap target. */
++ r = unit_add_dependency_by_name(UNIT(s), UNIT_BEFORE, SPECIAL_SWAP_TARGET, NULL, true);
++ if (r < 0)
++ return r;
++
+ return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true);
+ }
+
--- /dev/null
+From: Michael Biebl <biebl@debian.org>
+Date: Mon, 21 Dec 2015 11:54:41 +0100
+Subject: man: fix typo in systemctl(1)
+
+(cherry-picked from commit 4559a7218c3c39b1d34ec25626e8dccb310ffb95)
+---
+ man/systemctl.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/systemctl.xml b/man/systemctl.xml
+index 755a74f..9c8eaab 100644
+--- a/man/systemctl.xml
++++ b/man/systemctl.xml
+@@ -832,7 +832,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
+ output. If you are looking for computer-parsable output,
+ use <command>show</command> instead. By default, this
+ function only shows 10 lines of output and ellipsizes
+- lines to fit in the terminal window. This can be changes
++ lines to fit in the terminal window. This can be changed
+ with <option>--lines</option> and <option>--full</option>,
+ see above. In addition, <command>journalctl
+ --unit=<replaceable>NAME</replaceable></command> or
--- /dev/null
+From: Tom Gundersen <teg@jklm.no>
+Date: Wed, 18 Nov 2015 14:21:06 +0100
+Subject: networkd: dhcp4 - dirty link when the lease changes
+
+Without this commit, we risk not picking up DNS addresses
+as soon as they are available.
+---
+ src/network/networkd-dhcp4.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c
+index b9c60a3..48e3d84 100644
+--- a/src/network/networkd-dhcp4.c
++++ b/src/network/networkd-dhcp4.c
+@@ -255,6 +255,7 @@ static int dhcp_lease_lost(Link *link) {
+ }
+
+ link->dhcp_lease = sd_dhcp_lease_unref(link->dhcp_lease);
++ link_dirty(link);
+ link->dhcp4_configured = false;
+
+ return 0;
+@@ -331,6 +332,7 @@ static int dhcp_lease_renew(sd_dhcp_client *client, Link *link) {
+ sd_dhcp_lease_unref(link->dhcp_lease);
+ link->dhcp4_configured = false;
+ link->dhcp_lease = sd_dhcp_lease_ref(lease);
++ link_dirty(link);
+
+ r = sd_dhcp_lease_get_address(lease, &address);
+ if (r < 0)
+@@ -408,6 +410,7 @@ static int dhcp_lease_acquired(sd_dhcp_client *client, Link *link) {
+ NULL);
+
+ link->dhcp_lease = sd_dhcp_lease_ref(lease);
++ link_dirty(link);
+
+ if (link->network->dhcp_mtu) {
+ uint16_t mtu;
--- /dev/null
+From: Tom Gundersen <teg@jklm.no>
+Date: Wed, 18 Nov 2015 13:43:49 +0100
+Subject: networkd: ndisc - revert to letting the kernel handle NDisc
+
+There is still a bug in the userspace version, so temporarily revert this.
+
+This is a work-around for issue #1866.
+---
+ src/network/networkd-link.c | 20 ++++++++++++--------
+ src/network/networkd-ndisc.c | 13 ++++++++-----
+ 2 files changed, 20 insertions(+), 13 deletions(-)
+
+diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
+index 01d5942..0d3c141 100644
+--- a/src/network/networkd-link.c
++++ b/src/network/networkd-link.c
+@@ -626,9 +626,6 @@ void link_check_ready(Link *link) {
+ !link->dhcp4_configured && !link->dhcp6_configured))
+ return;
+
+- if (link_ipv6_accept_ra_enabled(link) && !link->ndisc_configured)
+- return;
+-
+ SET_FOREACH(a, link->addresses, i)
+ if (!address_is_ready(a))
+ return;
+@@ -1926,6 +1923,7 @@ static int link_set_ipv6_privacy_extensions(Link *link) {
+
+ static int link_set_ipv6_accept_ra(Link *link) {
+ const char *p = NULL;
++ const char *v;
+ int r;
+
+ /* Make this a NOP if IPv6 is not available */
+@@ -1938,12 +1936,16 @@ static int link_set_ipv6_accept_ra(Link *link) {
+ if (!link->network)
+ return 0;
+
++ if (link_ipv6_accept_ra_enabled(link))
++ v = "1";
++ else
++ v = "0";
++
+ p = strjoina("/proc/sys/net/ipv6/conf/", link->ifname, "/accept_ra");
+
+- /* We handle router advertisments ourselves, tell the kernel to GTFO */
+- r = write_string_file(p, "0", WRITE_STRING_FILE_VERIFY_ON_FAILURE);
++ r = write_string_file(p, v, WRITE_STRING_FILE_VERIFY_ON_FAILURE);
+ if (r < 0)
+- log_link_warning_errno(link, r, "Cannot disable kernel IPv6 accept_ra for interface: %m");
++ log_link_warning_errno(link, r, "Cannot configure kernel IPv6 accept_ra for interface: %m");
+
+ return 0;
+ }
+@@ -2004,6 +2006,7 @@ static int link_set_ipv6_hop_limit(Link *link) {
+ return 0;
+ }
+
++/*
+ static int link_drop_foreign_config(Link *link) {
+ Address *address;
+ Route *route;
+@@ -2011,7 +2014,6 @@ static int link_drop_foreign_config(Link *link) {
+ int r;
+
+ SET_FOREACH(address, link->addresses_foreign, i) {
+- /* we consider IPv6LL addresses to be managed by the kernel */
+ if (address->family == AF_INET6 && in_addr_is_link_local(AF_INET6, &address->in_addr) == 1)
+ continue;
+
+@@ -2021,7 +2023,6 @@ static int link_drop_foreign_config(Link *link) {
+ }
+
+ SET_FOREACH(route, link->routes_foreign, i) {
+- /* do not touch routes managed by the kernel */
+ if (route->protocol == RTPROT_KERNEL)
+ continue;
+
+@@ -2032,6 +2033,7 @@ static int link_drop_foreign_config(Link *link) {
+
+ return 0;
+ }
++*/
+
+ static int link_configure(Link *link) {
+ int r;
+@@ -2040,9 +2042,11 @@ static int link_configure(Link *link) {
+ assert(link->network);
+ assert(link->state == LINK_STATE_PENDING);
+
++/*
+ r = link_drop_foreign_config(link);
+ if (r < 0)
+ return r;
++*/
+
+ r = link_set_bridge_fdb(link);
+ if (r < 0)
+diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c
+index ce9e513..966d729 100644
+--- a/src/network/networkd-ndisc.c
++++ b/src/network/networkd-ndisc.c
+@@ -26,7 +26,7 @@
+ #include "sd-ndisc.h"
+
+ #include "networkd-link.h"
+-
++/*
+ static int ndisc_netlink_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata) {
+ _cleanup_link_unref_ Link *link = userdata;
+ int r;
+@@ -77,7 +77,6 @@ static void ndisc_prefix_autonomous_handler(sd_ndisc *nd, const struct in6_addr
+ if (in_addr_is_null(AF_INET6, (const union in_addr_union *) &link->network->ipv6_token) == 0)
+ memcpy(((char *)&address->in_addr.in6) + 8, ((char *)&link->network->ipv6_token) + 8, 8);
+ else {
+- /* see RFC4291 section 2.5.1 */
+ address->in_addr.in6.__in6_u.__u6_addr8[8] = link->mac.ether_addr_octet[0];
+ address->in_addr.in6.__in6_u.__u6_addr8[8] ^= 1 << 1;
+ address->in_addr.in6.__in6_u.__u6_addr8[9] = link->mac.ether_addr_octet[1];
+@@ -140,11 +139,12 @@ static void ndisc_prefix_onlink_handler(sd_ndisc *nd, const struct in6_addr *pre
+
+ link->ndisc_messages ++;
+ }
++*/
+
+ static void ndisc_router_handler(sd_ndisc *nd, uint8_t flags, const struct in6_addr *gateway, unsigned lifetime, int pref, void *userdata) {
+ _cleanup_route_free_ Route *route = NULL;
+ Link *link = userdata;
+- usec_t time_now;
++ /* usec_t time_now; */
+ int r;
+
+ assert(link);
+@@ -163,6 +163,8 @@ static void ndisc_router_handler(sd_ndisc *nd, uint8_t flags, const struct in6_a
+ log_link_warning_errno(link, r, "Starting DHCPv6 client on NDisc request failed: %m");
+ }
+
++ return;
++/*
+ if (!gateway)
+ return;
+
+@@ -189,6 +191,7 @@ static void ndisc_router_handler(sd_ndisc *nd, uint8_t flags, const struct in6_a
+ }
+
+ link->ndisc_messages ++;
++*/
+ }
+
+ static void ndisc_handler(sd_ndisc *nd, int event, void *userdata) {
+@@ -242,8 +245,8 @@ int ndisc_configure(Link *link) {
+
+ r = sd_ndisc_set_callback(link->ndisc_router_discovery,
+ ndisc_router_handler,
+- ndisc_prefix_onlink_handler,
+- ndisc_prefix_autonomous_handler,
++ NULL,
++ NULL,
+ ndisc_handler,
+ link);
+
--- /dev/null
+From: Lennart Poettering <lennart@poettering.net>
+Date: Thu, 28 Jan 2016 20:24:28 +0100
+Subject: nspawn: make sure --link-journal=host may be used twice in a row
+
+Fixes #2186
+
+This fixes fall-out from 574edc90066c3faeadcf4666928ed9b0ac409c75.
+
+(cherry-picked from commit ba8e6c4d0e074a3df0b55751f1753460ce82f1eb)
+---
+ src/nspawn/nspawn.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
+index f6a2c03..d28f41b 100644
+--- a/src/nspawn/nspawn.c
++++ b/src/nspawn/nspawn.c
+@@ -1457,8 +1457,7 @@ static int setup_journal(const char *directory) {
+ if (arg_link_journal == LINK_HOST) {
+ /* don't create parents here -- if the host doesn't have
+ * permanent journal set up, don't force it here */
+- r = mkdir(p, 0755);
+- if (r < 0) {
++ if (mkdir(p, 0755) < 0 && errno != EEXIST) {
+ if (arg_link_journal_try) {
+ log_debug_errno(errno, "Failed to create %s, skipping journal setup: %m", p);
+ return 0;
--- /dev/null
+## Cherry-picked from upstream
+networkd-ndisc-revert-to-letting-the-kernel-handle-NDisc.patch
+networkd-dhcp4-dirty-link-when-the-lease-changes.patch
+test-remove-wrong-endianess-conversion-in-test-siphash24.patch
+basic-fix-build-on-architectures-with-small-long.patch
+make-sure-all-swap-units-are-ordered-before-the-swap-targ.patch
+nspawn-make-sure-link-journal-host-may-be-used-twice-in-a.patch
+man-fix-typo-in-systemctl-1.patch
+basic-getauxval-AT_RANDOM-is-apparently-not-necessarily-a.patch
+kmod-static-nodes-don-t-run-if-module-list-is-empty.patch
+tmpfiles-drop-run-lock-lockdev.patch
+Fix-typo-on-logind-dbus.c.patch
+udev-net_id-for-ccw-bus-shorten-the-identifier-and-stip-l.patch
+gpt-auto-don-t-log-an-EIO-error-if-blkid-finds-something-.patch
+tmpfiles-also-set-acls-on-var-log-journal.patch
+tmpfiles-set-acls-on-system.journal-explicitly.patch
+core-do-not-warn-about-Wants-depencencies-on-masked-units.patch
+
+## Debian specific patches
+Add-back-support-for-Debian-specific-config-files.patch
+don-t-try-to-start-autovt-units-when-not-running-wit.patch
+Make-logind-hostnamed-localed-timedated-D-Bus-activa.patch
+Start-logind-on-demand-via-libpam-systemd.patch
+Update-localed-to-use-the-Debian-config-files.patch
+Add-note-to-udev.conf-that-changes-to-that-file-requ.patch
+Bring-tmpfiles.d-tmp.conf-in-line-with-Debian-defaul.patch
+Revert-udev-network-device-renaming-immediately-give.patch
+Use-different-default-paths-for-various-binaries.patch
+insserv.conf-generator.patch
+Add-targets-for-compatibility-with-Debian-insserv-sy.patch
+Adjust-systemd-user-pam-config-file-for-Debian.patch
+Add-run-initctl-support-to-SysV-compat-tools.patch
+Add-support-for-TuxOnIce-hibernation.patch
+Add-support-for-rcS.d-init-scripts-to-the-sysv-gener.patch
+Stop-syslog.socket-when-entering-emergency-mode.patch
+Make-run-lock-tmpfs-an-API-fs.patch
+Include-additional-directories-in-ProtectSystem.patch
+udev-re-enable-mount-propagation-for-udevd.patch
+Re-enable-journal-forwarding-to-syslog.patch
+Make-sd_login_monitor_new-work-for-logind-without-sy.patch
+Don-t-enable-audit-by-default.patch
+util-Add-hidden-suffixes-for-ucf.patch
+Only-start-logind-if-dbus-is-installed.patch
+cgroup-don-t-trim-cgroup-trees-created-by-someone-el.patch
+fsckd-daemon-for-inter-fsckd-communication.patch
+Skip-filesystem-check-if-already-done-by-the-initram.patch
+Revert-core-one-step-back-again-for-nspawn-we-actual.patch
--- /dev/null
+From: Martin Pitt <martin.pitt@ubuntu.com>
+Date: Thu, 19 Nov 2015 07:50:56 +0100
+Subject: test: remove wrong endianess conversion in test-siphash24
+
+Commit 933f9caee changed the returned result of siphash24_finalize() from
+little-endian to native. Follow suit in test-siphash24 and drop the endianess
+conversion there as well, so that this succeeds on big-endian machines again.
+
+Fixes #1946.
+---
+ src/test/test-siphash24.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/test/test-siphash24.c b/src/test/test-siphash24.c
+index a571a95..c20be99 100644
+--- a/src/test/test-siphash24.c
++++ b/src/test/test-siphash24.c
+@@ -30,7 +30,7 @@ static int do_test(const uint8_t *in, size_t len, const uint8_t *key) {
+ unsigned i, j;
+
+ out = siphash24(in, len, key);
+- assert_se(out == htole64(0xa129ca6149be45e5));
++ assert_se(out == 0xa129ca6149be45e5);
+
+ /* verify the internal state as given in the above paper */
+ siphash24_init(&state, key);
+@@ -44,7 +44,7 @@ static int do_test(const uint8_t *in, size_t len, const uint8_t *key) {
+ assert_se(state.v2 == 0x634cb3577b01fd3d);
+ assert_se(state.v3 == 0xa5224d6f55c7d9c8);
+ out = siphash24_finalize(&state);
+- assert_se(out == htole64(0xa129ca6149be45e5));
++ assert_se(out == 0xa129ca6149be45e5);
+ assert_se(state.v0 == 0xf6bcd53893fecff1);
+ assert_se(state.v1 == 0x54b9964c7ea0d937);
+ assert_se(state.v2 == 0x1b38329c099bb55a);
+@@ -59,7 +59,7 @@ static int do_test(const uint8_t *in, size_t len, const uint8_t *key) {
+ siphash24_compress(&in[i], j - i, &state);
+ siphash24_compress(&in[j], len - j, &state);
+ out = siphash24_finalize(&state);
+- assert_se(out == htole64(0xa129ca6149be45e5));
++ assert_se(out == 0xa129ca6149be45e5);
+ }
+ }
+ return 0;
--- /dev/null
+From: =?utf-8?q?Zbigniew_J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sun, 29 Nov 2015 18:37:01 -0500
+Subject: tmpfiles: also set acls on /var/log/journal
+
+This way, directories created later for containers or for
+journald-remote, will be readable by adm & wheel groups by default,
+similarly to /var/log/journal/%m itself.
+
+https://github.com/systemd/systemd/issues/1971
+
+(cherry-picked from commit 57d5b3130cd34b9a844f4258f55c1134b27bc5ad)
+---
+ tmpfiles.d/systemd.conf.m4 | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/tmpfiles.d/systemd.conf.m4 b/tmpfiles.d/systemd.conf.m4
+index d9d51af..fcd6ec0 100644
+--- a/tmpfiles.d/systemd.conf.m4
++++ b/tmpfiles.d/systemd.conf.m4
+@@ -34,6 +34,8 @@ A+ /run/log/journal/%m - - - - group:adm:r-x,group:wheel:r-x
+ z /var/log/journal 2755 root systemd-journal - -
+ z /var/log/journal/%m 2755 root systemd-journal - -
+ m4_ifdef(`HAVE_ACL',``
++a+ /var/log/journal - - - - d:group:adm:r-x,d:group:wheel:r-x
++a+ /var/log/journal - - - - group:adm:r-x,group:wheel:r-x
+ a+ /var/log/journal/%m - - - - d:group:adm:r-x,d:group:wheel:r-x
+ a+ /var/log/journal/%m - - - - group:adm:r-x,group:wheel:r-x
+ '')m4_dnl
--- /dev/null
+From: Martin Pitt <martin.pitt@ubuntu.com>
+Date: Mon, 1 Feb 2016 12:09:34 +0100
+Subject: tmpfiles: drop /run/lock/lockdev
+
+Hardly any software uses that any more, and better locking mechanisms like
+flock() have been available for many years.
+
+Also drop the corresponding "lock" group from sysusers.d/basic.conf.in, as
+nothing else is using this.
+
+https://github.com/systemd/systemd/pull/2491
+---
+ sysusers.d/basic.conf.in | 1 -
+ tmpfiles.d/legacy.conf | 8 --------
+ 2 files changed, 9 deletions(-)
+
+diff --git a/sysusers.d/basic.conf.in b/sysusers.d/basic.conf.in
+index 823d6cb..b2dc5eb 100644
+--- a/sysusers.d/basic.conf.in
++++ b/sysusers.d/basic.conf.in
+@@ -19,7 +19,6 @@ g wheel - - -
+
+ # Access to certain kernel and userspace facilities
+ g kmem - - -
+-g lock - - -
+ g tty @TTY_GID@ - -
+ g utmp - - -
+
+diff --git a/tmpfiles.d/legacy.conf b/tmpfiles.d/legacy.conf
+index 3cb0c63..62e2ae0 100644
+--- a/tmpfiles.d/legacy.conf
++++ b/tmpfiles.d/legacy.conf
+@@ -18,14 +18,6 @@ L /var/lock - - - - ../run/lock
+
+ d /run/lock/subsys 0755 root root -
+
+-# /run/lock/lockdev is used to serialize access to tty devices via
+-# LCK..xxx style lock files, For more information see:
+-# http://lists.freedesktop.org/archives/systemd-devel/2011-March/001823.html
+-# On modern systems a BSD file lock is a better choice if
+-# serialization is needed on those devices.
+-
+-d /run/lock/lockdev 0775 root lock -
+-
+ # /forcefsck, /fastboot and /forcequotacheck are deprecated in favor of the
+ # kernel command line options 'fsck.mode=force', 'fsck.mode=skip' and
+ # 'quotacheck.mode=force'
--- /dev/null
+From: =?utf-8?q?Zbigniew_J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sun, 29 Nov 2015 18:48:40 -0500
+Subject: tmpfiles: set acls on system.journal explicitly
+
+https://github.com/systemd/systemd/issues/1397
+
+(cherry-picked from commit afae249efa4774c6676738ac5de6aeb4daf4889f)
+---
+ tmpfiles.d/systemd.conf.m4 | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/tmpfiles.d/systemd.conf.m4 b/tmpfiles.d/systemd.conf.m4
+index fcd6ec0..0575408 100644
+--- a/tmpfiles.d/systemd.conf.m4
++++ b/tmpfiles.d/systemd.conf.m4
+@@ -33,11 +33,13 @@ A+ /run/log/journal/%m - - - - group:adm:r-x,group:wheel:r-x
+
+ z /var/log/journal 2755 root systemd-journal - -
+ z /var/log/journal/%m 2755 root systemd-journal - -
++z /var/log/journal/%m/system.journal 0640 root systemd-journal - -
+ m4_ifdef(`HAVE_ACL',``
+ a+ /var/log/journal - - - - d:group:adm:r-x,d:group:wheel:r-x
+ a+ /var/log/journal - - - - group:adm:r-x,group:wheel:r-x
+ a+ /var/log/journal/%m - - - - d:group:adm:r-x,d:group:wheel:r-x
+ a+ /var/log/journal/%m - - - - group:adm:r-x,group:wheel:r-x
++a+ /var/log/journal/%m/system.journal - - - - group:adm:r--,group:wheel:r--
+ '')m4_dnl
+
+ d /var/lib/systemd 0755 root root -
--- /dev/null
+From: Dimitri John Ledkov <xnox@ubuntu.com>
+Date: Fri, 29 Jan 2016 17:54:30 +0100
+Subject: udev: net_id - for ccw bus,
+ shorten the identifier and stip leading zeros
+
+The commmon case default qeth link is enccw0.0.0600 is rather long.
+
+Thus strip leading zeros (which doesn't make the bus_id unstable),
+similar to the PCI domain case.
+
+Also 'ccw' is redundant on S/390, as there aren't really other buses
+available which could have qeth driver interfaces. Not sure why this
+code is even compiled on non-s390[x] platforms. But to distinguish from
+e.g. MAC stable names shorten the suffix to just 'c'.
+
+Thus enccw0.0.0600 becomes enc600.
+---
+ src/udev/udev-builtin-net_id.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c
+index bf5c9c6..d6fb876 100644
+--- a/src/udev/udev-builtin-net_id.c
++++ b/src/udev/udev-builtin-net_id.c
+@@ -34,7 +34,7 @@
+ *
+ * Type of names:
+ * b<number> -- BCMA bus core number
+- * ccw<name> -- CCW bus group name
++ * c<bus_id> -- CCW bus group name, without leading zeros [s390]
+ * o<index>[d<dev_port>] -- on-board device index number
+ * s<slot>[f<function>][d<dev_port>] -- hotplug slot index number
+ * x<MAC> -- MAC address
+@@ -418,8 +418,15 @@ static int names_ccw(struct udev_device *dev, struct netnames *names) {
+ if (!bus_id_len || bus_id_len < 8 || bus_id_len > 9)
+ return -EINVAL;
+
++ /* Strip leading zeros from the bus id for aesthetic purposes. This
++ * keeps the ccw names stable, yet much shorter in general case of
++ * bus_id 0.0.0600 -> 600. This is similar to e.g. how PCI domain is
++ * not prepended when it is zero.
++ */
++ bus_id += strspn(bus_id, ".0");
++
+ /* Store the CCW bus-ID for use as network device name */
+- rc = snprintf(names->ccw_group, sizeof(names->ccw_group), "ccw%s", bus_id);
++ rc = snprintf(names->ccw_group, sizeof(names->ccw_group), "c%s", bus_id);
+ if (rc >= 0 && rc < (int)sizeof(names->ccw_group))
+ names->type = NET_CCWGROUP;
+ return 0;
--- /dev/null
+From: Michael Biebl <biebl@debian.org>
+Date: Sat, 27 Sep 2014 04:19:24 +0200
+Subject: udev: re-enable mount propagation for udevd
+
+laptop-mode-tools remounts file systems from within a udev rule to apply
+certain mount options. With MountFlags=slave, those mounts then become private
+to the systemd-udevd namespace and are no longer accessible from outside the
+namespace.
+While the root cause is the broken behaviour of laptop-mode-tools, with mount
+propagation turned off, this can result in a read-only root file system.
+Therefore revert the relevant parts from commit
+c2c13f2df42e0691aecabe3979ea81cd7faa35c7 to re-enable mount propagation for
+udevd.
+
+Once affected packages have been fixed, this patch should be dropped
+again.
+
+Closes: #762018
+---
+ units/systemd-udevd.service.in | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/units/systemd-udevd.service.in b/units/systemd-udevd.service.in
+index 79f28c8..8c5a9cc 100644
+--- a/units/systemd-udevd.service.in
++++ b/units/systemd-udevd.service.in
+@@ -21,6 +21,5 @@ Sockets=systemd-udevd-control.socket systemd-udevd-kernel.socket
+ Restart=always
+ RestartSec=0
+ ExecStart=@rootlibexecdir@/systemd-udevd
+-MountFlags=slave
+ KillMode=mixed
+ WatchdogSec=3min
--- /dev/null
+From: Martin Pitt <martin.pitt@ubuntu.com>
+Date: Wed, 21 Jan 2015 15:37:40 +0100
+Subject: util: Add hidden suffixes for ucf
+
+Bug-Debian: https://bugs.debian.org/775903
+---
+ src/basic/path-util.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/basic/path-util.c b/src/basic/path-util.c
+index ec90c43..ce38acf 100644
+--- a/src/basic/path-util.c
++++ b/src/basic/path-util.c
+@@ -778,6 +778,9 @@ bool hidden_file_allow_backup(const char *filename) {
+ endswith(filename, ".dpkg-bak") ||
+ endswith(filename, ".dpkg-backup") ||
+ endswith(filename, ".dpkg-remove") ||
++ endswith(filename, ".ucf-new") ||
++ endswith(filename, ".ucf-old") ||
++ endswith(filename, ".ucf-dist") ||
+ endswith(filename, ".swp");
+ }
+
--- /dev/null
+#! /usr/bin/make -f
+
+#export DH_VERBOSE = 1
+#export DEB_BUILD_OPTIONS = nostrip
+
+DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
+VERSION = $(shell dpkg-parsechangelog | sed -n -e '/^Version:/s/.*: //p')
+
+ifeq ($(shell dpkg-vendor --query vendor),Ubuntu)
+ DEFAULT_NTP_SERVERS = ntp.ubuntu.com
+else
+ DEFAULT_NTP_SERVERS = 0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
+endif
+
+# fail on missing files and symbols changes on distro builds, but not if we
+# build/test upstream master
+ifeq ($(TEST_UPSTREAM),)
+ DH_INSTALL_MISSING = --fail-missing
+ GENSYMBOLS_LEVEL = 4
+else
+ DH_INSTALL_MISSING = --list-missing
+ GENSYMBOLS_LEVEL = 1
+endif
+
+ifneq (, $(filter noudeb, $(DEB_BUILD_OPTIONS)))
+export DEB_BUILD_PROFILES += noudeb
+endif
+
+CONFFLAGS = \
+ --with-rootprefix= \
+ --with-rootlibdir=/lib/$(DEB_HOST_MULTIARCH) \
+ --with-zshcompletiondir=/usr/share/zsh/vendor-completions \
+ --with-sysvinit-path=/etc/init.d \
+ --with-sysvrcnd-path=/etc \
+ --with-debug-shell=/bin/bash \
+ --with-telinit=/lib/sysvinit/telinit \
+ --enable-split-usr \
+ --disable-compat-libs \
+ --disable-qrencode \
+ --disable-libidn \
+ --disable-vconsole \
+ --disable-sysusers \
+ --disable-firstboot \
+ --disable-xkbcommon \
+ --disable-libiptc \
+ --disable-silent-rules \
+ --with-ntp-servers="$(DEFAULT_NTP_SERVERS)" \
+ --with-system-uid-max=999 \
+ --with-system-gid-max=999
+
+CONFFLAGS_deb = \
+ --enable-selinux \
+ --enable-hwdb \
+ --enable-efi \
+ PYTHON=python3
+
+ifeq (, $(filter stage1, $(DEB_BUILD_PROFILES)))
+CONFFLAGS_deb += \
+ --enable-audit \
+ --enable-libcryptsetup \
+ --enable-coredump \
+ --enable-elfutils \
+ --enable-apparmor \
+ --enable-libcurl \
+ --enable-importd \
+ --enable-microhttpd \
+ --enable-gnutls
+else
+CONFFLAGS_deb += \
+ --disable-audit \
+ --disable-libcryptsetup \
+ --disable-coredump \
+ --disable-elfutils \
+ --disable-apparmor \
+ --disable-libcurl \
+ --disable-importd \
+ --disable-microhttpd \
+ --disable-gnutls
+endif
+
+CONFFLAGS_udeb = \
+ --disable-libcryptsetup \
+ --disable-coredump \
+ --disable-elfutils \
+ --disable-pam \
+ --disable-audit \
+ --disable-selinux \
+ --disable-apparmor \
+ --disable-smack \
+ --disable-ima \
+ --disable-binfmt \
+ --disable-bootchart \
+ --disable-quotacheck \
+ --disable-tmpfiles \
+ --disable-randomseed \
+ --disable-backlight \
+ --disable-logind \
+ --disable-machined \
+ --disable-libcurl \
+ --disable-importd \
+ --disable-microhttpd \
+ --disable-gnutls \
+ --disable-hostnamed \
+ --disable-timedated \
+ --disable-networkd \
+ --disable-timesyncd \
+ --disable-localed \
+ --disable-myhostname \
+ --disable-resolved \
+ --disable-polkit \
+ --disable-acl \
+ --disable-gcrypt \
+ --disable-rfkill \
+ --disable-hwdb \
+ --disable-manpages \
+ --disable-efi \
+ --disable-gnuefi \
+ --disable-seccomp \
+ --without-python
+
+override_dh_auto_configure:
+ dh_auto_configure --builddirectory=build-deb \
+ -- $(CONFFLAGS) $(CONFFLAGS_deb)
+ifeq (, $(filter noudeb, $(DEB_BUILD_PROFILES)))
+ dh_auto_configure --builddirectory=build-udeb \
+ -- $(CONFFLAGS) $(CONFFLAGS_udeb)
+endif
+
+override_dh_auto_build:
+ dh_auto_build --builddirectory=build-deb
+ifeq (, $(filter noudeb, $(DEB_BUILD_PROFILES)))
+ dh_auto_build --builddirectory=build-udeb
+endif
+ # generate POT file for translators
+ cd build-deb/po; srcdir=../../po intltool-update --pot --verbose
+
+override_dh_auto_install:
+ dh_auto_install --builddirectory=build-deb \
+ --destdir=debian/install/deb
+ifeq (, $(filter noudeb, $(DEB_BUILD_PROFILES)))
+ dh_auto_install --builddirectory=build-udeb \
+ --destdir=debian/install/udeb
+endif
+ # fix paths in manpages; manually check the remaining /usr occurrences
+ # occasionally, with filtering out paths which are known to be in /usr:
+ # grep -r /usr debian/install/deb/usr/share/man/|egrep -v '/usr/local|os.*release|factory|zoneinfo|tmpfiles|kernel|foo|machines|sysctl|dbus|include|binfmt'
+ find debian/install/deb/usr/share/man/ -type f | xargs sed -ri 's_/usr(/lib/systemd/system|/lib/systemd/network|/lib/udev|/lib[^/]|/lib/[^a-z])_\1_g'
+ # we don't have a "wheel" group in Debian; https://github.com/systemd/systemd/issues/2492
+ find debian/install/deb/usr/lib/tmpfiles.d/ -type f | xargs sed -ri 's/,(d:)?group:wheel:[^,]+//'
+
+override_dh_auto_clean:
+ifneq (, $(TEST_UPSTREAM))
+ debian/extra/checkout-upstream
+endif
+ dh_auto_clean --builddirectory=build-deb
+ifeq (, $(filter noudeb, $(DEB_BUILD_PROFILES)))
+ dh_auto_clean --builddirectory=build-udeb
+endif
+ rm -rf debian/install/
+ # remove Python byte code files
+ rm -rf tools/__pycache__/
+
+override_dh_install:
+ # remove unnecessary / unused files
+ rm -f debian/install/*/usr/share/doc/systemd/LICENSE.*
+ rm -f debian/install/*/var/log/README
+ rm -f debian/install/*/etc/init.d/README
+ rm -f debian/install/*/usr/share/man/man8/kernel-install.8
+ rm -f debian/install/*/usr/bin/kernel-install
+ rm -f debian/install/*/usr/share/zsh/vendor-completions/_kernel-install
+ rm -f debian/install/*/usr/share/bash-completion/completions/kernel-install
+ rm -rf debian/install/*/usr/lib/kernel/install.d
+ rm -rf debian/install/*/etc/rpm/
+ rm -rf debian/install/*/usr/lib/rpm/
+ rm -rf debian/install/*/etc/kernel/
+ rm -f debian/install/*/usr/lib/sysctl.d/50-default.conf
+ rm -f debian/install/*/etc/X11/xinit/xinitrc.d/50-systemd-user.sh
+ rm -f debian/install/*/lib/systemd/system/halt-local.service
+ find debian/install/ -name '*.la' -delete
+ # remove files related to factory-reset feature
+ find debian/install/ \( -name 'systemd-update-done*' -o \
+ -name systemd-journal-catalog-update.service -o \
+ -name systemd-udev-hwdb-update.service -o \
+ -name ldconfig.service -o \
+ -name etc.conf \) -delete
+ rm -rf debian/install/*/usr/share/factory/
+ # remove symlinks enabling default-on services
+ rm -rf debian/install/*/etc/systemd/system/*.target.wants/
+ifeq (, $(filter noudeb, $(DEB_BUILD_PROFILES)))
+ dh_install -pudev-udeb -plibudev1-udeb --sourcedir=debian/install/udeb
+endif
+ # fix location of NSS modules
+ cd debian/install/deb/; for f in usr/lib/*/libnss_*; do mv $$f $${f#usr/}; done
+
+ dh_install --remaining-packages --sourcedir=debian/install/deb $(DH_INSTALL_MISSING)
+
+ # Make sure the runlevel services are known by systemd so their targets
+ # get launched. See https://bugzilla.redhat.com/show_bug.cgi?id=1002806
+ for t in poweroff rescue multi-user graphical reboot; do \
+ mkdir -p debian/systemd/lib/systemd/system/$${t}.target.wants;\
+ ln -s ../systemd-update-utmp-runlevel.service \
+ debian/systemd/lib/systemd/system/$${t}.target.wants ;\
+ done
+
+ # we don't want /tmp to be a tmpfs by default
+ mv debian/systemd/lib/systemd/system/tmp.mount debian/systemd/usr/share/systemd/
+ printf '\n[Install]\nWantedBy=local-fs.target\n' >> debian/systemd/usr/share/systemd/tmp.mount
+ rm debian/systemd/lib/systemd/system/local-fs.target.wants/tmp.mount
+
+ # files shipped by cryptsetup
+ifeq (, $(filter stage1, $(DEB_BUILD_PROFILES)))
+ rm debian/systemd/usr/share/man/man5/crypttab.5
+endif
+
+ # files shipped by systemd
+ rm debian/udev/lib/udev/rules.d/70-uaccess.rules
+ rm debian/udev/lib/udev/rules.d/73-seat-late.rules
+ rm debian/udev/lib/udev/rules.d/71-seat.rules
+ rm debian/udev/lib/udev/rules.d/99-systemd.rules
+
+ # remove duplicate files shipped by systemd-*/udev
+ echo "Removing duplicate files in systemd package:"
+ set -e; for pkg in $(shell dh_listpackages -Nudev-udeb -Nlibudev1-udeb -Nsystemd); do \
+ echo "... from $$pkg..."; \
+ (cd debian/$$pkg; find -type f -o -type l) | (cd debian/systemd; xargs rm -f --verbose); \
+ (cd debian/$$pkg; find -mindepth 1 -type d) | (cd debian/systemd; xargs rmdir --ignore-fail-on-non-empty --verbose || true); \
+ done
+
+ # Ubuntu specific files
+ if dpkg-vendor --is ubuntu; then \
+ install -D --mode=644 debian/extra/udev.py debian/udev/usr/share/apport/package-hooks/udev.py; \
+ install -D --mode=644 debian/extra/systemd.py debian/systemd/usr/share/apport/package-hooks/systemd.py; \
+ install --mode=644 debian/extra/rules-ubuntu/*.rules debian/udev/lib/udev/rules.d/; \
+ fi
+
+ifeq (, $(filter nocheck, $(DEB_BUILD_OPTIONS)))
+ echo "Checking that executables don't link to libraries in /usr..."
+ set -e; for e in debian/systemd/lib/systemd/systemd* debian/udev/lib/systemd/systemd*; do \
+ echo " $$e"; \
+ OUT=`env -u LD_PRELOAD ldd $$e` || continue; if echo "$$OUT" | grep -q /usr; then \
+ echo "ERROR: $$e links to /usr"; echo "$$OUT"; exit 1; \
+ fi; \
+ done
+endif
+
+override_dh_installinit:
+ dh_installinit --no-start
+ # the following are only upstart jobs
+ dh_installinit --name=udevtrigger --noscripts
+ dh_installinit --name=udevmonitor --noscripts
+ dh_installinit --name=udev-fallback-graphics --noscripts
+
+# The SysV compat tools (which are symlinks to systemctl) are
+# quasi-essential, so add their dependencies to Pre-Depends
+# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=753589
+override_dh_shlibdeps:
+ dh_shlibdeps -psystemd -- -dPre-Depends -edebian/systemd/bin/systemctl -dDepends
+ dh_shlibdeps --remaining-packages
+
+override_dh_makeshlibs:
+ dh_makeshlibs -plibudev1 --add-udeb=libudev1-udeb -- -c$(GENSYMBOLS_LEVEL)
+ dh_makeshlibs --remaining-packages -- -c$(GENSYMBOLS_LEVEL)
+
+autoreconf:
+ intltoolize -f -c
+ autoreconf -f -i
+
+override_dh_autoreconf:
+ dh_autoreconf --as-needed debian/rules -- autoreconf
+
+override_dh_strip:
+ dh_strip --dbg-package=systemd-dbg
+
+override_dh_auto_test:
+ifeq (, $(filter nocheck, $(DEB_BUILD_OPTIONS)))
+ # some tests hang under fakeroot, so disable fakeroot
+ # some tests are known to fail under ancient kernels
+ env -u LD_PRELOAD make -C build-deb check || ( \
+ cd build-deb; \
+ for f in test-*.log; do echo "==== $$f ===="; cat $$f; done; \
+ if [ ! -e /etc/machine-id ]; then echo "/etc/machine-id missing, ignoring test failures"; exit 0; fi; \
+ if linux-version compare "$$(uname -r)" ge 3.13; then \
+ exit 1; \
+ else \
+ echo "Ignoring test failure under too old kernel $$(uname -r)"; \
+ fi)
+endif
+
+%:
+ dh $@ --with autoreconf --parallel
--- /dev/null
+udeb: libudev 1 libudev1-udeb
+libsystemd 0 libsystemd0 (= ${binary:Version})
--- /dev/null
+3.0 (quilt)
--- /dev/null
+etc/dbus-1/system.d/org.freedesktop.import1.conf
+etc/dbus-1/system.d/org.freedesktop.machine1.conf
+bin/machinectl
+lib/systemd/import-pubring.gpg
+lib/systemd/systemd-machined
+lib/systemd/systemd-export
+lib/systemd/systemd-import*
+lib/systemd/systemd-pull
+lib/systemd/system/systemd-nspawn@.service
+lib/systemd/system/systemd-importd.service
+lib/systemd/system/systemd-machined.service
+lib/systemd/system/org.freedesktop.import1.busname
+lib/systemd/system/org.freedesktop.machine1.busname
+lib/systemd/system/var-lib-machines.mount
+lib/systemd/system/machines.target
+lib/systemd/system/local-fs.target.wants/var-lib-machines.mount
+lib/systemd/system/busnames.target.wants/org.freedesktop.import1.busname
+lib/systemd/system/busnames.target.wants/org.freedesktop.machine1.busname
+lib/systemd/system/dbus-org.freedesktop.import1.service
+lib/systemd/system/dbus-org.freedesktop.machine1.service
+usr/bin/systemd-nspawn
+usr/lib/tmpfiles.d/systemd-nspawn.conf
+usr/share/dbus-1/system-services/org.freedesktop.import1.service
+usr/share/dbus-1/system-services/org.freedesktop.machine1.service
+usr/share/man/man*/*nspawn*
+usr/share/man/man*/machinectl*
+usr/share/man/man*/systemd-machined*
+usr/share/polkit-1/actions/org.freedesktop.import1.policy
+usr/share/polkit-1/actions/org.freedesktop.machine1.policy
+usr/share/zsh/vendor-completions/_systemd-nspawn
+usr/share/zsh/vendor-completions/_sd_machines
+usr/share/zsh/vendor-completions/_machinectl
+usr/share/bash-completion/completions/machinectl
+usr/share/bash-completion/completions/systemd-nspawn
--- /dev/null
+#!/bin/sh
+
+set -e
+machine_policy=/etc/dbus-1/system.d/org.freedesktop.machine1.conf
+if [ "$1" = configure ] && [ -z "$2" ] && [ -f ${machine_policy}.dpkg-bak ] ; then
+ md5sum="$(md5sum ${machine_policy} | sed -e 's/ .*//')"
+ old_md5sum="$(dpkg-query -W -f='${Conffiles}' systemd-container | \
+ sed -n -e "\' ${machine_policy} ' { s/ obsolete$//; s/.* //; p }")"
+ # On new installs, if the policy file was preserved on systemd upgrade
+ # by dpkg-maintscript helper, copy it back if the new file has not been modified yet
+ if [ "$md5sum" = "$old_md5sum" ] ; then
+ mv ${machine_policy}.dpkg-bak ${machine_policy}
+ fi
+fi
+
+#DEBHELPER#
--- /dev/null
+usr/bin/coredumpctl
+lib/systemd/systemd-coredump
+usr/share/man/man1/coredumpctl*
+usr/share/man/man5/coredump.conf*
+usr/share/man/man8/systemd-coredump*
+usr/share/bash-completion/completions/coredumpctl
+usr/share/zsh/vendor-completions/_coredumpctl
+usr/lib/sysctl.d/50-coredump.conf
+etc/systemd/coredump.conf
--- /dev/null
+#!/bin/sh
+set -e
+
+if [ "$1" = configure ]; then
+ # enable systemd-coredump right after package installation
+ /lib/systemd/systemd-sysctl /usr/lib/sysctl.d/50-coredump.conf || true
+fi
+
+#DEBHELPER#
--- /dev/null
+#!/bin/sh
+set -e
+
+if [ "$1" = remove ]; then
+ # disable systemd-coredump on removal
+ if [ -w /proc/sys/kernel/core_pattern ] && grep -q '^|.*systemd-coredump' /proc/sys/kernel/core_pattern; then
+ echo core > /proc/sys/kernel/core_pattern
+ fi
+fi
+
+#DEBHELPER#
--- /dev/null
+# systemd-journal-upload
+etc/systemd/journal-upload.conf
+lib/systemd/systemd-journal-upload
+lib/systemd/system/systemd-journal-upload.service
+
+# systemd-journal-remote
+etc/systemd/journal-remote.conf
+lib/systemd/systemd-journal-remote
+lib/systemd/system/systemd-journal-remote.service
+lib/systemd/system/systemd-journal-remote.socket
+usr/lib/tmpfiles.d/systemd-remote.conf
+usr/share/man/man8/systemd-journal-remote.8
+usr/share/man/man5/journal-remote.conf.d.5
+usr/share/man/man5/journal-remote.conf.5
+
+# systemd-journal-gatewayd
+lib/systemd/systemd-journal-gatewayd
+lib/systemd/system/systemd-journal-gatewayd.service
+lib/systemd/system/systemd-journal-gatewayd.socket
+usr/share/systemd/gatewayd/
+usr/share/man/man8/systemd-journal-gatewayd.service.8
+usr/share/man/man8/systemd-journal-gatewayd.socket.8
+usr/share/man/man8/systemd-journal-gatewayd.8
+
--- /dev/null
+#!/bin/sh
+
+set -e
+
+adduser --quiet --system \
+ --home /run/systemd --no-create-home \
+ --gecos "systemd Journal Gateway" \
+ --group systemd-journal-gateway
+
+adduser --quiet --system \
+ --home /run/systemd --no-create-home \
+ --gecos "systemd Journal Remote" \
+ --group systemd-journal-remote
+
+adduser --quiet --system \
+ --home /run/systemd --no-create-home \
+ --gecos "systemd Journal Upload" \
+ --group systemd-journal-upload
+
+#DEBHELPER#
--- /dev/null
+usr/share/man/man8/telinit.8
+usr/share/man/man1/init.1
+usr/share/man/man8/runlevel.8
+usr/share/man/man8/shutdown.8
+usr/share/man/man8/poweroff.8
+usr/share/man/man8/reboot.8
+usr/share/man/man8/halt.8
--- /dev/null
+/lib/systemd/systemd /sbin/init
+/bin/systemctl /sbin/telinit
+/bin/systemctl /sbin/runlevel
+/bin/systemctl /sbin/shutdown
+/bin/systemctl /sbin/poweroff
+/bin/systemctl /sbin/reboot
+/bin/systemctl /sbin/halt
--- /dev/null
+#!/bin/sh
+set -e
+
+# update grub on first install, so that the alternative init system boot
+# entries get updated
+if [ "$1" = configure ] && [ -z "$2" ] && [ -e /boot/grub/grub.cfg ] && which update-grub >/dev/null 2>&1; then
+ update-grub || true
+fi
+
+#DEBHELPER#
--- /dev/null
+systemd (224-2) unstable; urgency=medium
+
+ * This version splits out systemd-nspawn, systemd-machined, and machinectl
+ into the new "systemd-container" package. That now also enables
+ systemd-importd.
+
+ -- Martin Pitt <mpitt@debian.org> Sat, 22 Aug 2015 15:58:43 +0200
--- /dev/null
+package-status: udev
--- /dev/null
+#!/bin/bash
+
+cat <<EOF
+
+Providing additional information can help diagnose problems with systemd.
+Specifically, this would include:
+- fstab configuration (copy of /etc/fstab).
+- local modifications of unit files (output of systemd-delta).
+- state of running services and units (output of systemd-analyze dump).
+- enabled/disabled state of installed services.
+If this information is not relevant for your bug report or you have privacy
+concerns, please choose no.
+
+EOF
+
+yesno "Do you want to provide additional information [Y|n]? " yep
+[ "$REPLY" = yep ] || exit 0
+
+REPORTBUG_VERSION=$(dpkg-query -f '${source:Version}' -W reportbug)
+
+# Depending on whether reportbug is new enough, we either write the output of
+# our various commands to a file and attach them to the report (this needs
+# reportbug ≥ 6.5.0) or just write them to the body of the bug report.
+if dpkg --compare-versions "$REPORTBUG_VERSION" ge "6.5.0"; then
+
+ # We don’t clean up this directory because there is no way to know when
+ # reportbug finished running, and reportbug needs the files around.
+ # Given that those are just a couple of kilobytes in size and people
+ # generally don’t file a lot of bugs, I don’t think it’s a big deal.
+ DIR=$(mktemp -d)
+
+ echo "-- BEGIN ATTACHMENTS --" >&3
+
+ # remove highlighting escape codes from systemd-delta output
+ systemd-delta --no-pager 2>&1 |sed "s%\x1b[^m]*m%%g" >$DIR/systemd-delta.txt
+ echo "$DIR/systemd-delta.txt" >&3
+
+ if [ -d /run/systemd/system ]; then
+ systemd-analyze --no-pager dump >$DIR/systemd-analyze-dump.txt 2>&1
+ echo "$DIR/systemd-analyze-dump.txt" >&3
+ fi
+
+ if [ -d /var/lib/systemd/deb-systemd-helper-enabled ]; then
+ head -n100 $(find /var/lib/systemd/deb-systemd-helper-enabled -type f | tr '\n' ' ') >$DIR/dsh-enabled.txt
+ echo "$DIR/dsh-enabled.txt" >&3
+ fi
+
+ echo "/etc/fstab" >&3
+
+ echo "-- END ATTACHMENTS --" >&3
+else
+ _header() {
+ echo "--------------" >&3
+ echo "$1:" >&3
+ echo "--------------" >&3
+ }
+
+ _header "systemd-delta"
+ # remove highlighting escape codes from systemd-delta output
+ systemd-delta --no-pager 2>&1 |sed "s%\x1b[^m]*m%%g" >&3
+
+ if [ -d /run/systemd/system ]; then
+ echo >&3
+ _header "systemd-analyze dump"
+ systemd-analyze --no-pager dump >&3 2>&3
+ fi
+
+ if [ -d /var/lib/systemd/deb-systemd-helper-enabled ]; then
+ echo >&3
+ _header "Contents of /var/lib/systemd/deb-systemd-helper-enabled"
+ head -n100 $(find /var/lib/systemd/deb-systemd-helper-enabled -type f | tr '\n' ' ') >&3
+ fi
+fi
--- /dev/null
+var/lib/systemd
--- /dev/null
+etc/
+bin/systemctl
+bin/journalctl
+bin/loginctl
+bin/machinectl
+bin/networkctl
+bin/systemd-notify
+bin/systemd-tty-ask-password-agent
+bin/systemd-ask-password
+bin/systemd-machine-id-setup
+bin/systemd-tmpfiles
+bin/systemd-inhibit
+bin/systemd-escape
+lib/systemd/
+lib/udev/rules.d/70-uaccess.rules
+lib/udev/rules.d/73-seat-late.rules
+lib/udev/rules.d/71-seat.rules
+lib/udev/rules.d/99-systemd.rules
+usr/bin/systemd-cgls
+usr/bin/systemd-cgtop
+usr/bin/systemd-nspawn
+usr/bin/systemd-stdio-bridge
+usr/bin/systemd-analyze
+usr/bin/systemd-cat
+usr/bin/systemd-detect-virt
+usr/bin/systemd-delta
+usr/bin/systemd-run
+usr/bin/systemd-path
+usr/bin/bootctl
+usr/bin/busctl
+usr/bin/timedatectl
+usr/bin/localectl
+usr/bin/hostnamectl
+usr/share/man/man1/
+usr/share/man/man5/
+usr/share/man/man7/
+usr/share/man/man8/
+usr/share/bash-completion/
+usr/share/zsh/vendor-completions/
+usr/share/dbus-1/
+usr/share/doc/
+usr/share/pkgconfig/systemd.pc
+usr/share/polkit-1/
+usr/share/systemd/kbd-model-map
+usr/share/systemd/language-fallback-map
+usr/lib/binfmt.d/
+usr/lib/modules-load.d/
+usr/lib/sysctl.d/
+usr/lib/systemd/
+usr/lib/tmpfiles.d/
+usr/share/locale/
+../../extra/init-functions.d lib/lsb/
+../../extra/tmpfiles.d/*.conf usr/lib/tmpfiles.d/
+../../extra/systemd-sysv-install lib/systemd/
+../../extra/units/* lib/systemd/system/
--- /dev/null
+# These are all services which have native implementations
+# So we mask them by linking against /dev/null or create an alias
+/lib/systemd/system/systemd-random-seed.service /lib/systemd/system/urandom.service
+/lib/systemd/system/systemd-sysctl.service /lib/systemd/system/procps.service
+
+/lib/systemd/system/rc-local.service /lib/systemd/system/rc.local.service
+
+/lib/systemd/system/systemd-modules-load.service /lib/systemd/system/module-init-tools.service
+/lib/systemd/system/systemd-modules-load.service /lib/systemd/system/kmod.service
+/etc/modules /etc/modules-load.d/modules.conf
+
+# X server and ICE socket directories are created by /usr/lib/tmpfiles.d/x11.conf
+/dev/null /lib/systemd/system/x11-common.service
+
+# systemd sets the hostname internally during early boot
+/dev/null /lib/systemd/system/hostname.service
+
+# /run/nologin is handled by systemd-user-sessions.service
+/dev/null /lib/systemd/system/rmnologin.service
+/dev/null /lib/systemd/system/bootmisc.service
+
+# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=643700
+/dev/null /lib/systemd/system/fuse.service
+
+# Although bootlogd is disabled by default (via /etc/default/bootlogd)
+# by masking them we avoid spawning a shell uselessly thrice during boot.
+# Besides, bootlogd doesn't look particularly useful in a systemd world.
+/dev/null /lib/systemd/system/bootlogd.service
+/dev/null /lib/systemd/system/stop-bootlogd-single.service
+/dev/null /lib/systemd/system/stop-bootlogd.service
+
+# systemd sets the hwclock internally
+# http://cgit.freedesktop.org/systemd/systemd/commit/?id=7948c4dfbea73ac21250b588089039aa17a90386
+/dev/null /lib/systemd/system/hwclock.service
+
+# We use native mount support so mask those services
+# TODO: check if any SysV init scripts depend on those facilities
+/dev/null /lib/systemd/system/mountkernfs.service
+/dev/null /lib/systemd/system/mountdevsubfs.service
+/dev/null /lib/systemd/system/mountall.service
+/dev/null /lib/systemd/system/mountall-bootclean.service
+/dev/null /lib/systemd/system/mountnfs.service
+/dev/null /lib/systemd/system/mountnfs-bootclean.service
+/dev/null /lib/systemd/system/umountfs.service
+/dev/null /lib/systemd/system/umountnfs.service
+/dev/null /lib/systemd/system/umountroot.service
+/dev/null /lib/systemd/system/checkfs.service
+/dev/null /lib/systemd/system/checkroot.service
+/dev/null /lib/systemd/system/checkroot-bootclean.service
+
+# We use the built-in cryptsetup support
+/dev/null /lib/systemd/system/cryptdisks.service
+/dev/null /lib/systemd/system/cryptdisks-early.service
+
+# Single user mode is implemented natively, don't use legacy SysV init scripts
+# to avoid spawning sulogin twice.
+/dev/null /lib/systemd/system/single.service
+/dev/null /lib/systemd/system/killprocs.service
+
+# Those services are useless under systemd. Mask them so they can't
+# be run manually by accident.
+/dev/null /lib/systemd/system/sendsigs.service
+/dev/null /lib/systemd/system/halt.service
+/dev/null /lib/systemd/system/reboot.service
+/dev/null /lib/systemd/system/rc.service
+/dev/null /lib/systemd/system/rcS.service
+
+# The motd SysV init script is no longer required to create the dynamic part of
+# /etc/motd to display the uname information as pam_exec is used for that now.
+# An explicit Breaks against older versions of login, which still use
+# /run/motd.dynamic, is not necessary, as pam_motd will silently ignore it if
+# that file is missing and simply display nothing.
+# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=735521
+/dev/null /lib/systemd/system/motd.service
+
+# We have the journal to handle kernel messages from early boot
+/dev/null /lib/systemd/system/bootlogs.service
+
+# Enable Debian specific units
+/lib/systemd/system/getty-static.service /lib/systemd/system/getty.target.wants/getty-static.service
+/lib/systemd/system/sigpwr-container-shutdown.service /lib/systemd/system/sigpwr.target.wants/sigpwr-container-shutdown.service
+/lib/systemd/system/systemd-networkd-resolvconf-update.path /lib/systemd/system/resolvconf.service.wants/systemd-networkd-resolvconf-update.path
+
+# Compat symlink
+/lib/systemd/systemd /bin/systemd
+
+# Create a compat symlink as systemd-sysctl no longer reads /etc/sysctl.conf
+/etc/sysctl.conf /etc/sysctl.d/99-sysctl.conf
--- /dev/null
+systemd: maintainer-script-calls-systemctl
+systemd: possibly-insecure-handling-of-tmp-files-in-maintainer-script
--- /dev/null
+rm_conffile /etc/bash_completion.d/systemctl-bash-completion.sh 204-1~
+rm_conffile /etc/bash_completion.d/systemd-bash-completion.sh 204-1~
+mv_conffile /etc/systemd/systemd-logind.conf /etc/systemd/logind.conf 204-1~
+mv_conffile /etc/systemd/systemd-journald.conf /etc/systemd/journald.conf 204-1~
+rm_conffile /etc/dbus-1/system.d/org.freedesktop.machine1.conf 228-5~
+rm_conffile /etc/X11/xinit/xinitrc.d/50-systemd-user.sh 228-3~
--- /dev/null
+#! /bin/sh
+
+set -e
+
+_systemctl() {
+ if [ -d /run/systemd/system ]; then
+ systemctl "$@"
+ fi
+}
+
+_update_catalog() {
+ journalctl --update-catalog || true
+}
+
+# Update Message Catalogs database and reload in response to dpkg triggers
+if [ "$1" = "triggered" ]; then
+ shift
+ for trigger in "$@"; do
+ case $trigger in
+ /usr/lib/systemd/catalog)
+ _update_catalog
+ ;;
+ /etc/init.d)
+ _systemctl daemon-reload
+ ;;
+ esac
+ done
+ exit 0
+fi
+
+# Enable getty and remote-fs.target by default on new installs, and on
+# upgrades from old systemd versions (where the symlinks included as deb
+# content, and will thus have been removed by dpkg during the upgrade).
+if dpkg --compare-versions "$2" lt "214-1"; then
+ systemctl enable getty@tty1.service || true
+ systemctl enable remote-fs.target || true
+fi
+
+# Enable timesyncd by default on new installs installs and upgrades
+if dpkg --compare-versions "$2" lt "218-11~"; then
+ systemctl enable systemd-timesyncd.service || true
+fi
+
+# Do a one-time migration of the local time setting
+if dpkg --compare-versions "$2" lt "33-1"; then
+ if [ -f /etc/default/rcS ]; then
+ . /etc/default/rcS
+ fi
+ if [ "$UTC" = "no" ] && [ ! -e /etc/adjtime ]; then
+ printf "0.0 0 0.0\n0\nLOCAL" > /etc/adjtime
+ fi
+fi
+
+# Do a one-time migration of the TMPTIME setting
+if dpkg --compare-versions "$2" lt "204-9"; then
+ # Fix up potentially broken tmp.conf, see Debian#738862
+ if [ -e /etc/tmpfiles.d/tmp.conf ]; then
+ sed -i '/^# Clear \/var\/tmp/d' /etc/tmpfiles.d/tmp.conf
+ sed -i 's,^\(d /var/tmp\),#\1,g' /etc/tmpfiles.d/tmp.conf
+ fi
+
+ if [ -f /etc/default/rcS ]; then
+ . /etc/default/rcS
+ fi
+ if [ ! -e /etc/tmpfiles.d/tmp.conf ]; then
+ case "$TMPTIME" in
+ -*|infinite|infinity)
+ cat > /etc/tmpfiles.d/tmp.conf <<EOF
+# Avoid clearing /tmp by shipping an empty /etc/tmpfiles.d/tmp.conf file
+# which overrides /usr/lib/tmpfiles.d/tmp.conf.
+# This file was automatically created because of local modifications in
+# /etc/default/rcS where TMPTIME was set to infinite.
+EOF
+ ;;
+ esac
+ fi
+fi
+
+# Do a one-time migration of the RAMTMP setting
+if dpkg --compare-versions "$2" lt "204-8"; then
+ if [ -f /etc/default/rcS ]; then
+ . /etc/default/rcS
+ fi
+ if [ -f /etc/default/tmpfs ]; then
+ . /etc/default/tmpfs
+ fi
+ if [ "$RAMTMP" = "yes" ]; then
+ # systemctl enable will work even when systemd is not the active PID 1.
+ if [ ! -e /etc/systemd/system/tmp.mount ]; then
+ cp /usr/share/systemd/tmp.mount /etc/systemd/system/tmp.mount
+ fi
+ systemctl enable tmp.mount || true
+ fi
+fi
+
+# Create /etc/machine-id
+systemd-machine-id-setup
+
+# Setup system users and groups
+addgroup --system systemd-journal
+
+adduser --quiet --system --group --no-create-home --home /run/systemd \
+ --gecos "systemd Time Synchronization" systemd-timesync
+adduser --quiet --system --group --no-create-home --home /run/systemd/netif \
+ --gecos "systemd Network Management" systemd-network
+adduser --quiet --system --group --no-create-home --home /run/systemd/resolve \
+ --gecos "systemd Resolver" systemd-resolve
+adduser --quiet --system --group --no-create-home --home /run/systemd \
+ --gecos "systemd Bus Proxy" systemd-bus-proxy
+
+# Initial update of the Message Catalogs database
+_update_catalog
+
+# Make systemd-detect-virt utility usable for non-root users
+setcap cap_dac_override,cap_sys_ptrace=ep /usr/bin/systemd-detect-virt || true
+
+# Re-run systemctl enable for any service that was enabled when preinst was run.
+if dpkg --compare-versions "$2" ge "204" && [ -e /run/systemd/was-enabled ]; then
+ while read UNIT ; do
+ # 220-6 stopped shipping tmp.mount, transition it on machines which had
+ # it enabled
+ if [ "$UNIT" = tmp.mount ] && dpkg --compare-versions "$2" lt-nl "220-6~"; then
+ if [ ! -e /etc/systemd/system/tmp.mount ]; then
+ echo "moving enabled tmp.mount to /etc/systemd/system/..."
+ cp /usr/share/systemd/tmp.mount /etc/systemd/system/tmp.mount
+ # clean up the symlink, to have it re-created below
+ systemctl disable $UNIT
+ fi
+ fi
+ systemctl enable $UNIT || true
+ done </run/systemd/was-enabled || true
+fi
+
+if [ -n "$2" ]; then
+ _systemctl daemon-reexec || true
+ # don't restart logind; this can be done again once this gets implemented:
+ # https://github.com/systemd/systemd/issues/1163
+ _systemctl try-restart systemd-networkd.service || true
+ _systemctl try-restart systemd-resolved.service || true
+ _systemctl try-restart systemd-timesyncd.service || true
+fi
+
+# Cleanup hwclock-save.service, which was shipped in jessie.
+if dpkg --compare-versions "$2" lt-nl "228-5~"; then
+ for t in reboot halt poweroff ; do
+ rm -f /etc/systemd/system/${t}.target.wants/hwclock-save.service
+ rmdir --ignore-fail-on-non-empty /etc/systemd/system/${t}.target.wants 2> /dev/null || true
+ done
+fi
+
+# start systemd-networkd-resolvconf-update.path on first install/upgrade if
+# required
+if _systemctl is-active --quiet resolvconf; then
+ _systemctl start systemd-networkd-resolvconf-update.path || true
+fi
+
+#DEBHELPER#
--- /dev/null
+#!/bin/sh
+
+set -e
+
+case "$1" in
+ purge)
+ # clean up after manually enabled units in postinst
+ rm -f /etc/systemd/system/getty.target.wants/getty@tty1.service
+ rm -f /etc/systemd/system/multi-user.target.wants/remote-fs.target
+ rm -f /etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service
+ rmdir --ignore-fail-on-non-empty /etc/systemd/system/getty.target.wants 2> /dev/null || true
+ rmdir --ignore-fail-on-non-empty /etc/systemd/system/multi-user.target.wants 2> /dev/null || true
+ rmdir --ignore-fail-on-non-empty /etc/systemd/system/sysinit.target.wants 2> /dev/null || true
+
+ rm -f /var/lib/systemd/catalog/database
+ rmdir --ignore-fail-on-non-empty /var/lib/systemd/catalog 2> /dev/null || true
+
+ rm -rf /var/lib/systemd/backlight/
+ rm -rf /var/lib/systemd/rfkill/
+
+ rm -f /var/lib/systemd/clock
+ rm -f /var/lib/systemd/random-seed
+ ;;
+esac
+
+#DEBHELPER#
--- /dev/null
+#! /bin/sh
+
+set -e
+
+# When the [Install] section of an enabled unit changes `systemctl enable` has
+# to be re-run in postinst. As systemctl is-enabled will use the new unit files
+# in postinst we must run it before unpacking it and remember the results.
+save_is_enabled() {
+ if systemctl --quiet is-enabled $1 2>/dev/null ; then
+ echo $1 >>/run/systemd/was-enabled
+ fi
+}
+
+if [ "$1" = "install" ] || [ "$1" = "upgrade" ] && dpkg --compare-versions "$2" ge "204"; then
+ [ -d /run/systemd ] || mkdir /run/systemd
+ rm -f /run/systemd/was-enabled
+
+ save_is_enabled console-getty.service
+ save_is_enabled console-shell.service
+ save_is_enabled debug-shell.service
+ save_is_enabled getty@tty1.service
+ save_is_enabled remote-fs.target
+ save_is_enabled rescue.target
+ if dpkg --compare-versions "$2" ge "204-8~" ; then
+ save_is_enabled tmp.mount
+ fi
+ if dpkg --compare-versions "$2" ge "209" ; then
+ save_is_enabled systemd-networkd.service
+ fi
+ if dpkg --compare-versions "$2" ge "211" ; then
+ save_is_enabled systemd-networkd-wait-online.service
+ fi
+ if dpkg --compare-versions "$2" ge "213" ; then
+ save_is_enabled systemd-resolved.service
+ save_is_enabled systemd-timesyncd.service
+ fi
+fi
+
+#DEBHELPER#
--- /dev/null
+#! /bin/sh
+
+set -e
+
+#
+# Prevent systemd from being removed if it's the active init. That
+# will not work.
+#
+
+if [ "$1" = "remove" ] && [ -d /run/systemd/system ]; then
+ echo "systemd is the active init system, please switch to another before removing systemd."
+ exit 1
+fi
+
+#DEBHELPER#
--- /dev/null
+interest-noawait /usr/lib/systemd/catalog
+interest-noawait /etc/init.d
--- /dev/null
+# utility functions for shell tests
+
+assert_eq() {
+ if [ "$1" != "$2" ]; then
+ echo "FAIL: expected: '$2' actual: '$1'" >&2
+ exit 1
+ fi
+}
+
+assert_in() {
+ if ! echo "$2" | grep -q "$1"; then
+ echo "FAIL: '$1' not found in:" >&2
+ echo "$2" >&2
+ exit 1
+ fi
+}
+
--- /dev/null
+#!/usr/bin/python3
+# autopkgtest check: Boot with systemd and check critical desktop services
+# (C) 2014 Canonical Ltd.
+# Author: Martin Pitt <martin.pitt@ubuntu.com>
+
+import sys
+import os
+import unittest
+import subprocess
+import tempfile
+import shutil
+import time
+import re
+from glob import glob
+
+
+class ServicesTest(unittest.TestCase):
+ '''Check that expected services are running'''
+
+ def test_0_init(self):
+ '''Verify that init is systemd'''
+
+ self.assertIn('systemd', os.readlink('/proc/1/exe'))
+
+ def test_no_failed(self):
+ '''No failed units'''
+
+ out = subprocess.check_output(['systemctl', '--failed', '--no-legend'],
+ universal_newlines=True)
+ failed = out.splitlines()
+ # ignore /etc/modules failure as stuff that we put there by default
+ # often fails
+ failed = [f for f in failed if 'systemd-modules-load' not in f]
+ # apparmor fails if not enabled in the kernel
+ if not os.path.exists('/sys/kernel/security/apparmor'):
+ failed = [f for f in failed if 'apparmor.service' not in f]
+ # ignore thermald as it doesn't start in most virtual envs
+ failed = [f for f in failed if 'thermald' not in f]
+ # console-setup.service fails on devices without keyboard (LP: #1516591)
+ failed = [f for f in failed if 'console-setup' not in f]
+ self.assertEqual(failed, [])
+
+ def test_lightdm(self):
+ out = subprocess.check_output(['ps', 'u', '-C', 'lightdm'])
+ self.assertIn(b'lightdm --session', out)
+ out = subprocess.check_output(['ps', 'u', '-C', 'Xorg'])
+ self.assertIn(b':0', out)
+ self.active_unit('lightdm')
+
+ def test_dbus(self):
+ out = subprocess.check_output(
+ ['dbus-send', '--print-reply', '--system',
+ '--dest=org.freedesktop.DBus', '/', 'org.freedesktop.DBus.GetId'])
+ self.assertIn(b'string "', out)
+ self.active_unit('dbus')
+
+ def test_network_manager(self):
+ # 0.9.10 changed the command name
+ _help = subprocess.check_output(['nmcli', '--help'],
+ stderr=subprocess.STDOUT)
+ if b' g[eneral]' in _help:
+ out = subprocess.check_output(['nmcli', 'general'])
+ else:
+ out = subprocess.check_output(['nmcli', 'nm'])
+ self.assertIn(b'enabled', out)
+ self.active_unit('network-manager')
+
+ def test_cron(self):
+ out = subprocess.check_output(['ps', 'u', '-C', 'cron'])
+ self.assertIn(b'root', out)
+ self.active_unit('cron')
+
+ def test_logind(self):
+ out = subprocess.check_output(['loginctl'])
+ self.assertNotEqual(b'', out)
+ self.active_unit('systemd-logind')
+
+ @unittest.skipIf('TEST_UPSTREAM' in os.environ,
+ 'Forwarding to rsyslog is a Debian patch')
+ def test_rsyslog(self):
+ out = subprocess.check_output(['ps', 'u', '-C', 'rsyslogd'])
+ self.assertIn(b'bin/rsyslogd', out)
+ self.active_unit('rsyslog')
+ with open('/var/log/syslog') as f:
+ log = f.read()
+ # has kernel messages
+ self.assertRegex(log, 'kernel:.*[cC]ommand line:')
+ # has init messages
+ self.assertRegex(log, 'systemd.*Reached target Graphical Interface')
+ # has other services
+ self.assertRegex(log, 'NetworkManager.*:')
+
+ def test_udev(self):
+ out = subprocess.check_output(['udevadm', 'info', '--export-db'])
+ self.assertIn(b'\nP: /devices/', out)
+ self.active_unit('systemd-udevd')
+
+ def test_tmp_mount(self):
+ # check if we want to mount /tmp in fstab
+ want_tmp_mount = False
+ with open('/etc/fstab') as f:
+ for l in f:
+ try:
+ if not l.startswith('#') and l.split()[1] in ('/tmp', '/tmp/'):
+ want_tmp_mount = True
+ break
+ except IndexError:
+ pass
+
+ # ensure that we actually do/don't have a /tmp mount
+ (status, status_out) = subprocess.getstatusoutput('systemctl status tmp.mount')
+ findmnt = subprocess.call(['findmnt', '-n', '/tmp'], stdout=subprocess.PIPE)
+ if want_tmp_mount:
+ self.assertEqual(status, 0, status_out)
+ self.assertEqual(findmnt, 0)
+ else:
+ self.assertEqual(status, 3, status_out)
+ self.assertNotEqual(findmnt, 0)
+
+ @unittest.skipIf('TEST_UPSTREAM' in os.environ,
+ 'Debian specific configuration, N/A for upstream')
+ def test_tmp_cleanup(self):
+ # systemd-tmpfiles-clean.timer only runs 15 mins after boot, shortcut
+ # it
+ self.assertEqual(subprocess.call(
+ ['systemctl', 'status', 'systemd-tmpfiles-clean.timer'],
+ stdout=subprocess.PIPE), 0)
+ subprocess.check_call(['systemctl', 'start', 'systemd-tmpfiles-clean'])
+ # all files in /tmp/ should get cleaned up on boot
+ self.assertFalse(os.path.exists('/tmp/oldfile.test'))
+ self.assertFalse(os.path.exists('/tmp/newfile.test'))
+ # files in /var/tmp/ older than 30d should get cleaned up
+ # XXX FIXME: /var/tmp/ cleanup was disabled in #675422
+ # self.assertFalse(os.path.exists('/var/tmp/oldfile.test'))
+ self.assertTrue(os.path.exists('/var/tmp/newfile.test'))
+
+ # next run should leave the recent ones
+ os.close(os.open('/tmp/newfile.test',
+ os.O_CREAT | os.O_EXCL | os.O_WRONLY))
+ subprocess.check_call(['systemctl', 'start', 'systemd-tmpfiles-clean'])
+ time.sleep(2)
+ self.assertTrue(os.path.exists('/tmp/newfile.test'))
+
+ # Helper methods
+
+ def active_unit(self, unit):
+ '''Check that given unit is active'''
+
+ out = subprocess.check_output(['systemctl', 'status', unit])
+ self.assertIn(b'active (running)', out)
+
+
+class JournalTest(unittest.TestCase):
+ '''Check journal functionality'''
+
+ def test_no_options(self):
+ out = subprocess.check_output(['journalctl'])
+ # has kernel messages
+ self.assertRegex(out, b'kernel:.*[cC]ommand line:')
+ # has init messages
+ self.assertRegex(out, b'systemd.*Reached target Graphical Interface')
+ # has other services
+ self.assertRegex(out, b'NetworkManager.*:.*starting')
+
+ def test_log_for_service(self):
+ out = subprocess.check_output(
+ ['journalctl', '_SYSTEMD_UNIT=NetworkManager.service'])
+ self.assertRegex(out, b'NetworkManager.*:.*starting')
+ self.assertNotIn(b'kernel:', out)
+ self.assertNotIn(b'systemd:', out)
+
+
+class NspawnTest(unittest.TestCase):
+ '''Check nspawn'''
+
+ @classmethod
+ def setUpClass(kls):
+ '''Build a bootable busybox mini-container'''
+
+ kls.td_c_busybox = tempfile.TemporaryDirectory(prefix='c_busybox.')
+ kls.c_busybox = kls.td_c_busybox.name
+ for d in ['etc/init.d', 'bin', 'sbin']:
+ os.makedirs(os.path.join(kls.c_busybox, d))
+ shutil.copy('/bin/busybox', os.path.join(kls.c_busybox, 'bin'))
+ shutil.copy('/etc/os-release', os.path.join(kls.c_busybox, 'etc'))
+ os.symlink('busybox', os.path.join(kls.c_busybox, 'bin', 'sh'))
+ os.symlink('../bin/busybox', os.path.join(kls.c_busybox, 'sbin/init'))
+ with open(os.path.join(kls.c_busybox, 'etc/init.d/rcS'), 'w') as f:
+ f.write('''#!/bin/sh
+echo fake container started
+ps aux
+poweroff\n''')
+ os.fchmod(f.fileno(), 0o755)
+ subprocess.check_call(['systemd-machine-id-setup', '--root',
+ kls.c_busybox], stderr=subprocess.PIPE)
+
+ def setUp(self):
+ self.workdir = tempfile.TemporaryDirectory()
+
+ def test_boot(self):
+ cont = os.path.join(self.workdir.name, 'c1')
+ shutil.copytree(self.c_busybox, cont, symlinks=True)
+ os.sync()
+ nspawn = subprocess.Popen(['systemd-nspawn', '-D', cont, '-b'],
+ stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ out = nspawn.communicate(timeout=60)[0]
+ self.assertIn(b'Spawning container c1', out)
+ self.assertIn(b'fake container started', out)
+ self.assertRegex(out, b'\n\s+1\s+0\s+init[\r\n]')
+ self.assertRegex(out, b'\n\s+2+\s+0\s.*rcS[\r\n]')
+ self.assertRegex(out, b'Container c1.*shut down')
+ self.assertEqual(nspawn.returncode, 0)
+
+ def test_service(self):
+ self.assertTrue(os.path.isdir('/var/lib/machines'))
+ cont = '/var/lib/machines/c1'
+ shutil.copytree(self.c_busybox, cont, symlinks=True)
+ self.addCleanup(shutil.rmtree, cont)
+ os.sync()
+ subprocess.check_call(['systemctl', 'start', 'systemd-nspawn@c1'])
+ time.sleep(5)
+
+ systemctl = subprocess.Popen(
+ ['systemctl', 'status', '-l', 'systemd-nspawn@c1'],
+ stdout=subprocess.PIPE)
+ out = systemctl.communicate()[0]
+ self.assertEqual(systemctl.returncode, 3, out)
+ self.assertIn(b'Stopped Container c1', out)
+
+
+@unittest.skipUnless(os.path.exists('/sys/kernel/security/apparmor'),
+ 'AppArmor not enabled')
+class AppArmorTest(unittest.TestCase):
+ def test_profile(self):
+ '''AppArmor confined unit'''
+
+ # create AppArmor profile
+ aa_profile = tempfile.NamedTemporaryFile(prefix='aa_violator.')
+ aa_profile.write(b'''#include <tunables/global>
+
+profile "violator-test" {
+ #include <abstractions/base>
+
+ /bin/** rix,
+ /etc/machine-id r,
+}
+''')
+ aa_profile.flush()
+ subprocess.check_call(['apparmor_parser', '-r', '-v', aa_profile.name])
+
+ # create confined unit
+ with open('/run/systemd/system/violator.service', 'w') as f:
+ f.write('''[Unit]
+Description=AppArmor test
+
+[Service]
+ExecStart=/bin/sh -euc 'echo CP1; cat /etc/machine-id; echo CP2; if cat /etc/passwd; then exit 1; fi; echo CP3'
+AppArmorProfile=violator-test
+''')
+ self.addCleanup(os.unlink, '/run/systemd/system/violator.service')
+
+ # launch
+ subprocess.check_call(['systemctl', 'daemon-reload'])
+ subprocess.check_call(['systemctl', 'start', 'violator.service'])
+
+ time.sleep(2)
+
+ # check status
+ st = subprocess.Popen(['systemctl', 'status', '-l',
+ 'violator.service'], stdout=subprocess.PIPE,
+ universal_newlines=True)
+ out = st.communicate()[0]
+ # unit should be stopped
+ self.assertEqual(st.returncode, 3)
+
+ self.assertIn('inactive', out)
+ self.assertIn('CP1', out)
+ self.assertIn('CP2', out)
+ self.assertIn('CP3', out)
+ with open('/etc/machine-id') as f:
+ self.assertIn(f.read().strip(), out)
+ self.assertNotIn('root:x', out, 'unit can read /etc/passwd')
+
+
+class CgroupsTest(unittest.TestCase):
+ '''Check cgroup setup'''
+
+ @classmethod
+ def setUpClass(kls):
+ kls.controllers = []
+ for controller in glob('/sys/fs/cgroup/*'):
+ if not os.path.islink(controller):
+ kls.controllers.append(controller)
+
+ def setUp(self):
+ self.service = 'testsrv.service'
+ self.service_file = '/run/systemd/system/' + self.service
+
+ def tearDown(self):
+ subprocess.call(['systemctl', 'stop', self.service],
+ stderr=subprocess.PIPE)
+ try:
+ os.unlink(self.service_file)
+ except OSError:
+ pass
+ subprocess.check_call(['systemctl', 'daemon-reload'])
+
+ def create_service(self, extra_service=''):
+ '''Create test service unit'''
+
+ with open(self.service_file, 'w') as f:
+ f.write('''[Unit]
+Description=test service
+[Service]
+ExecStart=/bin/sleep 500
+%s
+''' % extra_service)
+ subprocess.check_call(['systemctl', 'daemon-reload'])
+
+ def assertNoControllers(self):
+ '''Assert that no cgroup controllers exist for test service'''
+
+ cs = glob('/sys/fs/cgroup/*/system.slice/%s' % self.service)
+ self.assertEqual(cs, [])
+
+ def assertController(self, name):
+ '''Assert that cgroup controller exists for test service'''
+
+ c = '/sys/fs/cgroup/%s/system.slice/%s' % (name, self.service)
+ self.assertTrue(os.path.isdir(c))
+
+ def assertNoController(self, name):
+ '''Assert that cgroup controller does not exist for test service'''
+
+ c = '/sys/fs/cgroup/%s/system.slice/%s' % (name, self.service)
+ self.assertFalse(os.path.isdir(c))
+
+ def test_simple(self):
+ '''simple service'''
+
+ self.create_service()
+ self.assertNoControllers()
+ subprocess.check_call(['systemctl', 'start', self.service])
+ self.assertController('systemd')
+ subprocess.check_call(['systemctl', 'stop', self.service])
+ self.assertNoControllers()
+
+ def test_cpushares(self):
+ '''service with CPUShares'''
+
+ self.create_service('CPUShares=1000')
+ self.assertNoControllers()
+ subprocess.check_call(['systemctl', 'start', self.service])
+ self.assertController('systemd')
+ self.assertController('cpu,cpuacct')
+ subprocess.check_call(['systemctl', 'stop', self.service])
+ self.assertNoControllers()
+
+ @unittest.skipIf('TEST_UPSTREAM' in os.environ,
+ 'fix not applied upstream')
+ def test_custom_cgroup_cleanup(self):
+ '''cgroup cleanup does not touch manually created cgroups'''
+
+ # reproduces https://bugs.debian.org/777601
+ self.create_service()
+ os.mkdir('/sys/fs/cgroup/blkio/aux')
+ os.mkdir('/sys/fs/cgroup/perf_event/aux')
+ self.addCleanup(os.rmdir, '/sys/fs/cgroup/blkio/aux')
+ self.addCleanup(os.rmdir, '/sys/fs/cgroup/perf_event/aux')
+ subprocess.check_call(['systemctl', 'start', self.service])
+ self.assertController('systemd')
+ self.assertTrue(os.path.exists('/sys/fs/cgroup/blkio/aux'))
+ self.assertTrue(os.path.exists('/sys/fs/cgroup/perf_event/aux'))
+
+ subprocess.check_call(['systemctl', 'daemon-reload'])
+ time.sleep(1)
+ subprocess.check_call(['systemctl', 'restart', self.service])
+ time.sleep(1)
+ self.assertTrue(os.path.exists('/sys/fs/cgroup/blkio/aux'))
+ self.assertTrue(os.path.exists('/sys/fs/cgroup/perf_event/aux'))
+
+ subprocess.check_call(['systemctl', 'stop', self.service])
+ self.assertNoControllers()
+ self.assertTrue(os.path.exists('/sys/fs/cgroup/blkio/aux'))
+ self.assertTrue(os.path.exists('/sys/fs/cgroup/perf_event/aux'))
+
+
+@unittest.skipUnless('+SECCOMP' in subprocess.getoutput('systemctl --version'),
+ 'seccomp support not enabled')
+class SeccompTest(unittest.TestCase):
+ '''Check seccomp syscall filtering'''
+
+ def test_failing(self):
+ with open('/run/systemd/system/scfail.service', 'w') as f:
+ f.write('''[Unit]
+Description=seccomp test
+[Service]
+ExecStart=/bin/cat /etc/machine-id
+SystemCallFilter=access
+''')
+ self.addCleanup(os.unlink, '/run/systemd/system/scfail.service')
+
+ # launch
+ subprocess.check_call(['systemctl', 'daemon-reload'])
+ subprocess.check_call(['systemctl', 'start', 'scfail.service'])
+ time.sleep(2)
+
+ # check status
+ st = subprocess.Popen(['systemctl', 'status', '-l',
+ 'scfail.service'], stdout=subprocess.PIPE)
+ out = st.communicate()[0]
+ # unit should be stopped
+ self.assertEqual(st.returncode, 3)
+
+ subprocess.check_call(['systemctl', 'reset-failed', 'scfail.service'])
+
+ self.assertIn(b'failed', out)
+ self.assertIn(b'code=killed, signal=SYS', out)
+ with open('/etc/machine-id') as f:
+ self.assertNotIn(f.read().strip().encode('ASCII'), out)
+
+
+class CoredumpTest(unittest.TestCase):
+ '''Check systemd-coredump'''
+
+ def test_bash_crash(self):
+ subprocess.call("ulimit -c unlimited; bash -c 'kill -SEGV $$'", shell=True,
+ cwd='/tmp', stderr=subprocess.DEVNULL)
+
+ # with systemd-coredump installed we should get the core dumps in
+ # systemd's dir
+ for timeout in range(50):
+ cores = glob('/var/lib/systemd/coredump/core.bash.*')
+ if cores:
+ break
+ time.sleep(0.1)
+ self.assertNotEqual(cores, [])
+ self.assertEqual(glob('/tmp/core*'), [])
+
+ # we should also get a message and stack trace in journal
+ for timeout in range(50):
+ journal = subprocess.check_output(['journalctl', '/lib/systemd/systemd-coredump'])
+ if re.search(b'Process.*bash.*dumped core', journal) and \
+ re.search(b'#[0-9] .*bash', journal):
+ break
+ time.sleep(0.1)
+ self.assertRegex(journal, b'Process.*bash.*dumped core')
+ self.assertIn(b'Stack trace', journal)
+ self.assertRegex(journal, b'#[0-9] .*bash')
+
+
+def pre_boot_setup():
+ '''Test setup before rebooting testbed'''
+
+ # create a few temporary files to ensure that they get cleaned up on boot
+ os.close(os.open('/tmp/newfile.test',
+ os.O_CREAT | os.O_EXCL | os.O_WRONLY))
+ os.close(os.open('/var/tmp/newfile.test',
+ os.O_CREAT | os.O_EXCL | os.O_WRONLY))
+ # we can't use utime() here, as systemd looks for ctime
+ cur_time = time.clock_gettime(time.CLOCK_REALTIME)
+ time.clock_settime(time.CLOCK_REALTIME, cur_time - 2 * 30 * 86400)
+ try:
+ os.close(os.open('/tmp/oldfile.test',
+ os.O_CREAT | os.O_EXCL | os.O_WRONLY))
+ os.close(os.open('/var/tmp/oldfile.test',
+ os.O_CREAT | os.O_EXCL | os.O_WRONLY))
+ finally:
+ time.clock_settime(time.CLOCK_REALTIME, cur_time)
+
+ # allow X to start even on headless machines
+ os.makedirs('/etc/X11/xorg.conf.d/', exist_ok=True)
+ with open('/etc/X11/xorg.conf.d/dummy.conf', 'w') as f:
+ f.write('''Section "Device"
+ Identifier "test"
+ Driver "dummy"
+EndSection''')
+
+
+if __name__ == '__main__':
+ if not os.getenv('ADT_REBOOT_MARK'):
+ pre_boot_setup()
+ print('Rebooting...')
+ subprocess.check_call(['/tmp/autopkgtest-reboot', 'boot1'])
+
+ unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout,
+ verbosity=2))
--- /dev/null
+#!/bin/sh
+# test 20 successful reboots in a row
+# Author: Martin Pitt <martin.pitt@ubuntu.com>
+# For bisecting/testing you can replace individual binaries in /lib/systemd
+# with --copy /host/path/systemd-foo:/tmp/systemd-replace/systemd-foo
+set -e
+
+. `dirname $0`/assert.sh
+
+if [ -z "$ADT_REBOOT_MARK" ]; then
+ # enable persistent journal
+ mkdir -p /var/log/journal
+ ADT_REBOOT_MARK=0
+ if [ -d /tmp/systemd-replace/ ]; then
+ for f in /tmp/systemd-replace/*; do
+ echo "Installing $f..."
+ rm -f /lib/systemd/$(basename $f)
+ cp $f /lib/systemd/
+ done
+ fi
+else
+ journalctl -ab > $ADT_ARTIFACTS/journal.txt
+ echo "checking for failed unmounts for user systemd"
+ if journalctl | grep -E "systemd\[([2-9]|[1-9][0-9]+)\].*Failed unmounting"; then
+ exit 1
+ fi
+ echo "checking for connection timeouts"
+ if journalctl | grep "Connection timed out"; then
+ exit 1
+ fi
+
+ echo "checking that polkitd runs"
+ pidof polkitd
+
+ echo "checking that there are no running jobs"
+ TIMEOUT=10
+ while [ $TIMEOUT -ge 0 ]; do
+ running="$(systemctl --no-pager --no-legend list-jobs || true)"
+ [ -n "$running" ] || break
+ TIMEOUT=$((TIMEOUT - 1))
+ done
+ assert_eq "$running" ""
+fi
+
+if [ "$ADT_REBOOT_MARK" -ge 20 ]; then
+ exit 0
+fi
+
+echo "reboot #$ADT_REBOOT_MARK"
+/tmp/autopkgtest-reboot $(($ADT_REBOOT_MARK + 1))
--- /dev/null
+#!/bin/sh
+# test bootchart
+# Author: Martin Pitt <martin.pitt@ubuntu.com>
+set -e
+
+if ! [ -e /etc/default/grub ]; then
+ echo "Not using grub, skipping"
+ exit 0
+fi
+
+if ! [ -x /tmp/autopkgtest-reboot ]; then
+ echo "autopkgtest testbed does not support reboot, skipping"
+ exit 0
+fi
+
+if [ ! -e /proc/schedstat ]; then
+ echo "CONFIG_SCHEDSTAT not enabled on this kernel, bootchart not available"
+ exit 0
+fi
+
+# first stage: prepare bootchart boot
+if [ -z "$ADT_REBOOT_MARK" ]; then
+ # append init= boot option
+ mkdir -p /etc/default/grub.d
+ cur_default=$(grep -h ^GRUB_CMDLINE_LINUX_DEFAULT /etc/default/grub $(ls /etc/default/grub.d/*.cfg 2>/dev/null || true) | tail -n1)
+ cur_default=$(echo "$cur_default" | sed 's!"$! init=/lib/systemd/systemd-bootchart"!')
+ echo "$cur_default" > /etc/default/grub.d/99-init-bootchart.cfg
+ update-grub 2>&1
+ rm /etc/default/grub.d/99-init-bootchart.cfg
+
+ /tmp/autopkgtest-reboot b1
+fi
+
+# second stage: should have booted with bootchart
+update-grub 2>&1 # restore original initramfs
+
+timeout=180
+while [ ! -s /run/log/bootchart*.svg -a $timeout -ge 0 ]; do
+ timeout=$((timeout - 5))
+ sleep 5
+ echo "waiting for bootchart... (${timeout}s left)"
+done
+if [ ! -s /run/log/bootchart*.svg ]; then
+ echo "timed out waiting for bootchart" >&2
+ exit 1
+fi
+
+if ! grep -q 'DOCTYPE svg' /run/log/bootchart*.svg; then
+ echo "ERROR: invalid bootchart:" >&2
+ cat /run/log/bootchart*.svg >&2
+ exit 1
+fi
--- /dev/null
+#!/bin/sh
+# autopkgtest check: Test build against libsystemd-login-dev
+# (C) 2014 Canonical Ltd.
+# Author: Martin Pitt <martin.pitt@ubuntu.com>
+
+set -e
+
+WORKDIR=$(mktemp -d)
+trap "rm -rf $WORKDIR" 0 INT QUIT ABRT PIPE TERM
+cd $WORKDIR
+cat <<EOF > loginmonitor.c
+#include <assert.h>
+#include <stdio.h>
+#include <systemd/sd-login.h>
+
+int main(int argc, char **argv)
+{
+ sd_login_monitor* mon = NULL;
+ int res;
+
+ res = sd_login_monitor_new(NULL, &mon);
+ if (res < 0) {
+ fprintf(stderr, "sd_login_monitor_new failed with value %i\n", res);
+ return 1;
+ }
+
+ assert(sd_login_monitor_get_fd(mon) > 0);
+ sd_login_monitor_unref(mon);
+
+ return 0;
+}
+EOF
+
+gcc -Wall -Werror -o loginmonitor loginmonitor.c `pkg-config --cflags --libs libsystemd`
+echo "build: OK"
+[ -x loginmonitor ]
+./loginmonitor
+echo "run: OK"
--- /dev/null
+#!/usr/bin/python3
+# autopkgtest check: One-time upstart boot with systemd-sysv installed
+# (C) 2015 Canonical Ltd.
+# Author: Martin Pitt <martin.pitt@ubuntu.com>
+
+import sys
+import os
+import unittest
+import subprocess
+
+
+class ServicesTest(unittest.TestCase):
+ '''Check that expected services are running'''
+
+ def test_0_init(self):
+ '''Verify that init is upstart'''
+
+ self.assertIn('upstart', os.readlink('/proc/1/exe'))
+
+ def test_dbus(self):
+ out = subprocess.check_output(
+ ['dbus-send', '--print-reply', '--system',
+ '--dest=org.freedesktop.DBus', '/', 'org.freedesktop.DBus.GetId'])
+ self.assertIn(b'string "', out)
+ self.active_job('dbus')
+
+ def test_network_manager(self):
+ # 0.9.10 changed the command name
+ _help = subprocess.check_output(['nmcli', '--help'],
+ stderr=subprocess.STDOUT)
+ if b' g[eneral]' in _help:
+ out = subprocess.check_output(['nmcli', 'general'])
+ else:
+ out = subprocess.check_output(['nmcli', 'nm'])
+ self.assertIn(b'enabled', out)
+ self.active_job('network-manager')
+
+ def test_cron(self):
+ out = subprocess.check_output(['ps', 'u', '-C', 'cron'])
+ self.assertIn(b'root', out)
+ self.active_job('cron')
+
+ def test_rsyslog(self):
+ out = subprocess.check_output(['ps', 'u', '-C', 'rsyslogd'])
+ self.assertIn(b'rsyslogd\n', out)
+ self.active_job('rsyslog')
+ with open('/var/log/syslog') as f:
+ log = f.read()
+ # has kernel messages
+ self.assertRegex(log, 'kernel:.*[cC]ommand line:')
+ # has other services
+ self.assertRegex(log, 'NetworkManager.*:')
+
+ def test_udev(self):
+ out = subprocess.check_output(['udevadm', 'info', '--export-db'])
+ self.assertIn(b'\nP: /devices/', out)
+ self.active_job('udev')
+
+ # Helper methods
+
+ def active_job(self, job):
+ '''Check that given job is running'''
+
+ out = subprocess.check_output(['initctl', 'status', job])
+ self.assertIn(b'start/running', out)
+
+
+def configure_boot():
+ '''Reboot with upstart as init'''
+
+ print('Installing upstart and rebooting...')
+ subprocess.check_call('apt-get -y install upstart 2>&1',
+ shell=True)
+ print('Setting init=/sbin/upstart in grub kernel command line...')
+ subprocess.check_call(['sh', '-ec', "sed -i '/^GRUB_CMDLINE_LINUX_DEFAULT/"
+ '''s_"$_ init=/sbin/upstart"_' '''
+ '/etc/default/grub /etc/default/grub.d/*'])
+ subprocess.check_call(['update-grub'], stderr=subprocess.DEVNULL)
+ if os.path.exists('/boot/grub/menu.lst'):
+ # Ubuntu cloud images still use legacy grub
+ subprocess.check_call(['sed', '-i',
+ '/^kernel/ s_$_ init=/sbin/upstart_',
+ '/boot/grub/menu.lst'])
+
+ subprocess.check_call(['/tmp/autopkgtest-reboot', 'boot-upstart'])
+
+
+if __name__ == '__main__':
+ # Don't run this test under Debian as Ubuntu split out upstart-sysv, Debian doesn't
+ if subprocess.call(['apt-cache', 'show', 'upstart-sysv'],
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE) != 0:
+ print('SKIP: upstart-sysv not available')
+ sys.exit(0)
+
+ if not os.getenv('ADT_REBOOT_MARK'):
+ configure_boot()
+
+ unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout,
+ verbosity=2))
--- /dev/null
+Tests: timedated, hostnamed, localed-locale, localed-x11-keymap
+Depends: systemd,
+ libpam-systemd,
+ acl,
+ locales,
+Restrictions: needs-root, isolation-container
+
+Tests: logind
+Depends: systemd,
+ libpam-systemd,
+ acl,
+ locales,
+ evemu-tools,
+Restrictions: needs-root, isolation-machine
+
+Tests: unit-config
+Depends: systemd,
+ libpam-systemd,
+ acl,
+ locales,
+ evemu-tools,
+ python3,
+Restrictions: needs-root, allow-stderr
+
+Tests: storage
+Depends: systemd,
+ libpam-systemd,
+ acl,
+ locales,
+ evemu-tools,
+ python3,
+ cryptsetup-bin,
+Restrictions: needs-root, isolation-machine
+
+Tests: networkd
+Depends: systemd,
+ libpam-systemd,
+ acl,
+ locales,
+ evemu-tools,
+ python3,
+ cryptsetup-bin,
+ systemd-sysv,
+ dnsmasq-base
+Restrictions: needs-root, isolation-container
+
+Tests: build-login
+Depends: systemd,
+ libpam-systemd,
+ acl,
+ locales,
+ evemu-tools,
+ python3,
+ cryptsetup-bin,
+ systemd-sysv,
+ dnsmasq-base,
+ build-essential,
+ pkg-config,
+ libsystemd-dev,
+Restrictions: isolation-container
+
+Tests: bootchart
+Depends: systemd,
+ libpam-systemd,
+ acl,
+ locales,
+ evemu-tools,
+ python3,
+ cryptsetup-bin,
+ systemd-sysv,
+ dnsmasq-base,
+ build-essential,
+ pkg-config,
+ libsystemd-dev,
+Restrictions: needs-root, isolation-machine, breaks-testbed
+
+Tests: boot-and-services
+Depends: systemd-sysv,
+ systemd-container,
+ systemd-coredump,
+ libpam-systemd,
+ xserver-xorg-video-dummy,
+ lightdm,
+ cron,
+ network-manager,
+ busybox-static,
+ apparmor,
+ python3
+Restrictions: needs-root, isolation-machine, needs-recommends, breaks-testbed
+
+Tests: boot-smoke
+Depends: systemd-sysv,
+ network-manager,
+ policykit-1,
+ lightdm,
+Restrictions: needs-recommends, needs-root, isolation-machine, allow-stderr
+
+# NOUPSTREAM: Do not run these tests for upstream builds
+
+Tests: cmdline-upstart-boot
+Depends: systemd-sysv,
+ network-manager,
+ policykit-1,
+ lightdm,
+ cron,
+ python3,
+Restrictions: needs-root, isolation-machine, breaks-testbed
+
+Tests: systemd-fsckd
+Depends: systemd-sysv,
+ python3,
+ plymouth
+Restrictions: needs-root, isolation-machine, needs-recommends, breaks-testbed
--- /dev/null
+#!/bin/bash
+fd=0
+
+OPTIND=1
+while getopts "C:aTlM" opt; do
+ case "$opt" in
+ C)
+ fd=$OPTARG
+ ;;
+ \?);;
+ esac
+done
+
+shift "$((OPTIND-1))"
+device=$1
+
+echo "Running fake fsck on $device"
+
+declare -a maxpass=(30 5 2 30 60)
+
+for pass in {1..5}; do
+ maxprogress=${maxpass[$((pass-1))]}
+ for (( current=0; current<=${maxprogress}; current++)); do
+ echo "$pass $current $maxprogress $device">&$fd
+ sleep 0.1
+ done
+done
--- /dev/null
+#!/bin/sh
+set -e
+
+. `dirname $0`/assert.sh
+
+ORIG_HOST=`cat /etc/hostname`
+echo "original hostname: $ORIG_HOST"
+
+# should activate daemon and work
+STATUS="`hostnamectl`"
+assert_in "Static hostname: $ORIG_HOST" "$STATUS"
+assert_in "Kernel:.* `uname -r`" "$STATUS"
+
+# change hostname
+assert_eq "`hostnamectl set-hostname testhost 2>&1`" ""
+assert_eq "`cat /etc/hostname`" "testhost"
+assert_in "Static hostname: testhost" "`hostnamectl`"
+
+# reset to original
+assert_eq "`hostnamectl set-hostname $ORIG_HOST 2>&1`" ""
+assert_eq "`cat /etc/hostname`" "$ORIG_HOST"
+assert_in "Static hostname: $ORIG_HOST" "`hostnamectl`"
--- /dev/null
+# EVEMU 1.2
+# Input device name: "Lid Switch"
+# Input device ID: bus 0x19 vendor 0000 product 0x05 version 0000
+# Supported events:
+# Event type 0 (EV_SYN)
+# Event code 0 (SYN_REPORT)
+# Event code 5 (FF_STATUS_MAX)
+# Event type 5 (EV_SW)
+# Event code 0 (SW_LID)
+# Properties:
+N: Fake Lid Switch
+I: 0019 0000 0005 0000
+P: 00 00 00 00 00 00 00 00
+B: 00 21 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 02 00 00 00 00 00 00 00 00
+B: 03 00 00 00 00 00 00 00 00
+B: 04 00 00 00 00 00 00 00 00
+B: 05 01 00 00 00 00 00 00 00
+B: 11 00 00 00 00 00 00 00 00
+B: 12 00 00 00 00 00 00 00 00
+B: 15 00 00 00 00 00 00 00 00
+B: 15 00 00 00 00 00 00 00 00
--- /dev/null
+#!/bin/sh
+set -e
+
+. `dirname $0`/assert.sh
+
+if [ -n "$TEST_UPSTREAM" ]; then
+ LOCALE_CONF=/etc/locale.conf
+else
+ LOCALE_CONF=/etc/default/locale
+fi
+
+if ! ORIG_LOC=`grep -v '^#' $LOCALE_CONF 2>/dev/null`; then
+ # set up for a minimal unconfigured system
+ if [ -e /etc/locale.gen ]; then
+ echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
+ fi
+ locale-gen en_US.UTF-8
+ ORIG_LOC='LANG="en_US.UTF-8"'
+ echo "$ORIG_LOC" > $LOCALE_CONF
+fi
+
+if ! [ -e /etc/default/keyboard ]; then
+ /bin/echo -e 'XKBMODEL=us\nXKBLAYOUT=pc105' > /etc/default/keyboard
+fi
+
+# should activate daemon and work
+assert_in "System Locale:" "`localectl --no-pager`"
+
+# change locale
+assert_eq "`localectl --no-pager set-locale LANG=C LC_CTYPE=en_US.UTF-8 2>&1`" ""
+sync
+assert_eq "`cat $LOCALE_CONF`" "LANG=C
+LC_CTYPE=en_US.UTF-8"
+
+! [ -f /etc/locale.conf ]
+
+STATUS=`localectl`
+assert_in "System Locale: LANG=C" "$STATUS"
+assert_in "LC_CTYPE=en_US.UTF-8" "$STATUS"
+
+# reset locale to original
+echo "$ORIG_LOC" > $LOCALE_CONF
--- /dev/null
+#!/bin/sh
+set -e
+
+. `dirname $0`/assert.sh
+
+ORIG_KBD=`cat /etc/default/keyboard`
+
+# should activate daemon and work
+STATUS=`localectl`
+assert_in "X11 Layout:" "`localectl --no-pager`"
+
+# change layout
+assert_eq "`localectl --no-pager set-x11-keymap et pc101 2>&1`" ""
+sync
+
+if [ -n "$TEST_UPSTREAM" ]; then
+ # Upstream writes xorg.conf.d file
+ assert_in 'Option "XkbLayout" "et' "`cat /etc/X11/xorg.conf.d/00-keyboard.conf`"
+ assert_in 'Option "XkbModel" "pc101"' "`cat /etc/X11/xorg.conf.d/00-keyboard.conf`"
+else
+ # Debian console-setup config file
+ assert_in 'XKBLAYOUT="\?et"\?' "`cat /etc/default/keyboard`"
+ assert_in 'XKBMODEL="\?pc101"\?' "`cat /etc/default/keyboard`"
+
+ ! [ -f /etc/X11/xorg.conf.d/00-keyboard.conf ]
+fi
+
+STATUS=`localectl --no-pager`
+assert_in "X11 Layout: et" "$STATUS"
+assert_in "X11 Model: pc101" "$STATUS"
+
+# reset locale to original
+echo "$ORIG_KBD" > /etc/default/keyboard
--- /dev/null
+#!/bin/sh
+set -e
+
+test_started() {
+ echo " * daemon is started"
+ # should start at boot, not with D-BUS activation
+ LOGINDPID=$(pidof systemd-logind)
+
+ # loginctl should succeed
+ echo " * loginctl succeeds"
+ LOGINCTL_OUT=`loginctl`
+}
+
+# args: <timeout>
+wait_suspend() {
+ timeout=$1
+ while [ $timeout -gt 0 ] && [ ! -e /run/suspend.flag ]; do
+ sleep 1
+ timeout=$((timeout - 1))
+ [ $(($timeout % 5)) -ne 0 ] || echo " waiting for suspend, ${timeout}s remaining..."
+ done
+ if [ ! -e /run/suspend.flag ]; then
+ echo "closing lid did not cause suspend" >&2
+ exit 1
+ fi
+ rm /run/suspend.flag
+ echo " * closing lid caused suspend"
+}
+
+test_suspend_on_lid() {
+ if ! grep -q mem /sys/power/state; then
+ echo " * suspend not supported on this testbed, skipping"
+ return
+ fi
+
+ # cleanup handler
+ trap 'rm -f /run/udev/rules.d/70-logindtest-*.rules; udevadm control --reload;
+ kill $KILL_PID;
+ rm /run/systemd/system/systemd-suspend.service;
+ if [ -d /sys/module/scsi_debug ]; then rmmod scsi_debug 2>/dev/null || (sleep 2; rmmod scsi_debug ) || true; fi' \
+ EXIT INT QUIT TERM PIPE
+
+ # watch what's going on
+ journalctl -f -u systemd-logind.service &
+ KILL_PID="$KILL_PID $!"
+
+ # create fake suspend
+ U=$(systemctl cat systemd-suspend.service | sed '/^ExecStart=/ s_=.*$_=/bin/touch /run/suspend.flag_')
+ echo "$U" > /run/systemd/system/systemd-suspend.service
+ sync
+ systemctl daemon-reload
+
+ # create fake lid switch
+ mkdir -p /run/udev/rules.d
+ echo 'SUBSYSTEM=="input", KERNEL=="event*", ATTRS{name}=="Fake Lid Switch", TAG+="power-switch"' \
+ > /run/udev/rules.d/70-logindtest-lid.rules
+ sync
+ udevadm control --reload
+ evemu-device $(dirname $0)/lidswitch.evemu &
+ KILL_PID="$KILL_PID $!"
+ while [ -z "$O" ]; do
+ sleep 0.1
+ O=$(grep -l '^Fake Lid Switch' /sys/class/input/*/device/name)
+ done
+ O=${O%/device/name}
+ LID_DEV=/dev/${O#/sys/class/}
+
+ # close lid
+ evemu-event $LID_DEV --sync --type 5 --code 0 --value 1
+ # need to wait for 30s suspend inhibition after boot
+ wait_suspend 31
+ # open lid again
+ evemu-event $LID_DEV --sync --type 5 --code 0 --value 0
+
+ echo " * waiting for 30s inhibition time between suspends"
+ sleep 30
+
+ # now closing lid should cause instant suspend
+ evemu-event $LID_DEV --sync --type 5 --code 0 --value 1
+ wait_suspend 2
+ evemu-event $LID_DEV --sync --type 5 --code 0 --value 0
+
+ P=$(pidof systemd-logind)
+ [ "$P" = "$LOGINDPID" ] || { echo "logind crashed" >&2; exit 1; }
+}
+
+test_shutdown() {
+ echo " * scheduled shutdown with wall message"
+ shutdown 2>&1
+ sleep 5
+ shutdown -c || true
+ # logind should still be running
+ P=$(pidof systemd-logind)
+ [ "$P" = "$LOGINDPID" ] || { echo "logind crashed" >&2; exit 1; }
+
+ echo " * scheduled shutdown without wall message"
+ shutdown --no-wall 2>&1
+ sleep 5
+ shutdown -c --no-wall || true
+ P=$(pidof systemd-logind)
+ [ "$P" = "$LOGINDPID" ] || { echo "logind crashed" >&2; exit 1; }
+ echo " * XDG_SESSION_ID=$XDG_SESSION_ID"
+ if grep 'systemd:.*session.*scope' /proc/self/cgroup; then
+ echo " * process is in session cgroup"
+ else
+ echo "FAIL: process is not in session cgroup"
+ echo "/proc/self/cgroup:"
+ cat /proc/self/cgroup
+ loginctl
+ loginctl show-session "$XDG_SESSION_ID"
+ exit 1
+ fi
+}
+
+test_acl() {
+ # ACL tests
+ if ! echo "$LOGINCTL_OUT" | grep -q "seat0"; then
+ echo " * Skipping ACL tests, as there is no seat"
+ return
+ fi
+
+ # determine user
+ USER=`echo "$OUT" | grep seat0 | awk '{print $3}'`
+ echo "seat user: $USER"
+
+ # scsi_debug should not be loaded yet
+ ! test -d /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block
+
+ # we use scsi_debug to create new devices which we can put ACLs on
+ # tell udev about the tagging, so that logind can pick it up
+ cat <<EOF > /run/udev/rules.d/70-logindtest-scsi_debug-user.rules
+SUBSYSTEM=="block", ATTRS{model}=="scsi_debug*", TAG+="uaccess"
+EOF
+ sync
+ udevadm control --reload
+
+ echo " * coldplug: logind started with existing device"
+ killall systemd-logind
+ modprobe scsi_debug
+ while ! dev=/dev/`ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block 2>/dev/null`; do sleep 0.1; done
+ test -b $dev
+ echo "got block device $dev"
+ udevadm settle
+ # trigger logind
+ loginctl > /dev/null
+ sleep 1
+ if getfacl -p $dev | grep -q "user:$USER:rw-"; then
+ echo "$dev has ACL for user $USER"
+ else
+ echo "$dev has no ACL for user $USER:" >&2
+ getfacl -p $dev >&2
+ exit 1
+ fi
+
+ rmmod scsi_debug
+
+ echo " * hotplug: new device appears while logind is running"
+ modprobe scsi_debug
+ while ! dev=/dev/`ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block`; do sleep 0.1; done
+ test -b $dev
+ echo "got block device $dev"
+ udevadm settle
+ sleep 1
+ if getfacl -p $dev | grep -q "user:$USER:rw-"; then
+ echo "$dev has ACL for user $USER"
+ else
+ echo "$dev has no ACL for user $USER:" >&2
+ getfacl -p $dev >&2
+ exit 1
+ fi
+}
+
+#
+# main
+#
+
+test_started
+test_suspend_on_lid
+test_shutdown
+test_acl
--- /dev/null
+#!/usr/bin/env python3
+#
+# networkd integration test
+# This uses temporary configuration in /run and temporary veth devices, and
+# does not write anything on disk or change any system configuration;
+# but it assumes (and checks at the beginning) that networkd is not currently
+# running.
+# This can be run on a normal installation, in QEMU, nspawn, or LXC.
+# ATTENTION: This uses the *installed* networkd, not the one from the built
+# source tree.
+#
+# (C) 2015 Canonical Ltd.
+# Author: Martin Pitt <martin.pitt@ubuntu.com>
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+# systemd is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+
+import os
+import sys
+import time
+import unittest
+import tempfile
+import subprocess
+import shutil
+
+networkd_active = subprocess.call(['systemctl', 'is-active', '--quiet',
+ 'systemd-networkd']) == 0
+have_dnsmasq = shutil.which('dnsmasq')
+
+
+@unittest.skipIf(networkd_active,
+ 'networkd is already active')
+class ClientTestBase:
+ def setUp(self):
+ self.iface = 'test_eth42'
+ self.if_router = 'router_eth42'
+ self.workdir_obj = tempfile.TemporaryDirectory()
+ self.workdir = self.workdir_obj.name
+ self.config = '/run/systemd/network/test_eth42.network'
+ os.makedirs(os.path.dirname(self.config), exist_ok=True)
+
+ # avoid "Failed to open /dev/tty" errors in containers
+ os.environ['SYSTEMD_LOG_TARGET'] = 'journal'
+
+ # determine path to systemd-networkd-wait-online
+ for p in ['/usr/lib/systemd/systemd-networkd-wait-online',
+ '/lib/systemd/systemd-networkd-wait-online']:
+ if os.path.exists(p):
+ self.networkd_wait_online = p
+ break
+ else:
+ self.fail('systemd-networkd-wait-online not found')
+
+ # get current journal cursor
+ out = subprocess.check_output(['journalctl', '-b', '--quiet',
+ '--no-pager', '-n0', '--show-cursor'],
+ universal_newlines=True)
+ self.assertTrue(out.startswith('-- cursor:'))
+ self.journal_cursor = out.split()[-1]
+
+ def tearDown(self):
+ self.shutdown_iface()
+ if os.path.exists(self.config):
+ os.unlink(self.config)
+ subprocess.call(['systemctl', 'stop', 'systemd-networkd'])
+
+ def show_journal(self, unit):
+ '''Show journal of given unit since start of the test'''
+
+ print('---- %s ----' % unit)
+ sys.stdout.flush()
+ subprocess.call(['journalctl', '-b', '--no-pager', '--quiet',
+ '--cursor', self.journal_cursor, '-u', unit])
+
+ def create_iface(self, ipv6=False):
+ '''Create test interface with DHCP server behind it'''
+
+ raise NotImplementedError('must be implemented by a subclass')
+
+ def shutdown_iface(self):
+ '''Remove test interface and stop DHCP server'''
+
+ raise NotImplementedError('must be implemented by a subclass')
+
+ def print_server_log(self):
+ '''Print DHCP server log for debugging failures'''
+
+ raise NotImplementedError('must be implemented by a subclass')
+
+ def do_test(self, coldplug=True, ipv6=False, extra_opts='',
+ online_timeout=10, dhcp_mode='yes'):
+ with open(self.config, 'w') as f:
+ f.write('''[Match]
+Name=%s
+[Network]
+DHCP=%s
+%s''' % (self.iface, dhcp_mode, extra_opts))
+
+ if coldplug:
+ # create interface first, then start networkd
+ self.create_iface(ipv6=ipv6)
+ subprocess.check_call(['systemctl', 'start', 'systemd-networkd'])
+ else:
+ # start networkd first, then create interface
+ subprocess.check_call(['systemctl', 'start', 'systemd-networkd'])
+ self.create_iface(ipv6=ipv6)
+
+ try:
+ subprocess.check_call([self.networkd_wait_online, '--interface',
+ self.iface, '--timeout=%i' % online_timeout])
+
+ if ipv6:
+ # check iface state and IP 6 address; FIXME: we need to wait a bit
+ # longer, as the iface is "configured" already with IPv4 *or*
+ # IPv6, but we want to wait for both
+ for timeout in range(10):
+ out = subprocess.check_output(['ip', 'a', 'show', 'dev', self.iface])
+ if b'state UP' in out and b'inet6 2600' in out and b'inet 192.168' in out:
+ break
+ time.sleep(1)
+ else:
+ self.fail('timed out waiting for IPv6 configuration')
+
+ self.assertRegex(out, b'inet6 2600::.* scope global .*dynamic')
+ self.assertRegex(out, b'inet6 fe80::.* scope link')
+ else:
+ # should have link-local address on IPv6 only
+ out = subprocess.check_output(['ip', '-6', 'a', 'show', 'dev', self.iface])
+ self.assertRegex(out, b'inet6 fe80::.* scope link')
+ self.assertNotIn(b'scope global', out)
+
+ # should have IPv4 address
+ out = subprocess.check_output(['ip', '-4', 'a', 'show', 'dev', self.iface])
+ self.assertIn(b'state UP', out)
+ self.assertRegex(out, b'inet 192.168.5.\d+/.* scope global dynamic')
+
+ # check networkctl state
+ out = subprocess.check_output(['networkctl'])
+ self.assertRegex(out, ('%s\s+ether\s+routable\s+unmanaged' % self.if_router).encode())
+ self.assertRegex(out, ('%s\s+ether\s+routable\s+configured' % self.iface).encode())
+
+ out = subprocess.check_output(['networkctl', 'status', self.iface])
+ self.assertRegex(out, b'Type:\s+ether')
+ self.assertRegex(out, b'State:\s+routable.*configured')
+ self.assertRegex(out, b'Address:\s+192.168.5.\d+')
+ if ipv6:
+ self.assertRegex(out, b'2600::')
+ else:
+ self.assertNotIn(b'2600::', out)
+ self.assertRegex(out, b'fe80::')
+ self.assertRegex(out, b'Gateway:\s+192.168.5.1')
+ self.assertRegex(out, b'DNS:\s+192.168.5.1')
+ except (AssertionError, subprocess.CalledProcessError):
+ # show networkd status, journal, and DHCP server log on failure
+ with open(self.config) as f:
+ print('\n---- %s ----\n%s' % (self.config, f.read()))
+ print('---- interface status ----')
+ sys.stdout.flush()
+ subprocess.call(['ip', 'a', 'show', 'dev', self.iface])
+ print('---- networkctl status %s ----' % self.iface)
+ sys.stdout.flush()
+ subprocess.call(['networkctl', 'status', self.iface])
+ self.show_journal('systemd-networkd.service')
+ self.print_server_log()
+ raise
+
+ # verify resolv.conf if it gets dynamically managed
+ if os.path.islink('/etc/resolv.conf'):
+ for timeout in range(50):
+ with open('/etc/resolv.conf') as f:
+ contents = f.read()
+ if 'nameserver 192.168.5.1\n' in contents:
+ break
+ # resolv.conf can have at most three nameservers; if we already
+ # have three different ones, that's also okay
+ if contents.count('nameserver ') >= 3:
+ break
+ time.sleep(0.1)
+ else:
+ self.show_journal('systemd-networkd-resolvconf-update.service')
+ self.fail('nameserver 192.168.5.1 not found in /etc/resolv.conf')
+
+ if not coldplug:
+ # check post-down.d hook
+ self.shutdown_iface()
+
+ def test_coldplug_dhcp_yes_ip4(self):
+ # we have a 12s timeout on RA, so we need to wait longer
+ self.do_test(coldplug=True, ipv6=False, online_timeout=15)
+
+ def test_coldplug_dhcp_yes_ip4_no_ra(self):
+ # with disabling RA explicitly things should be fast
+ self.do_test(coldplug=True, ipv6=False,
+ extra_opts='IPv6AcceptRouterAdvertisements=False')
+
+ def test_coldplug_dhcp_ip4_only(self):
+ # we have a 12s timeout on RA, so we need to wait longer
+ self.do_test(coldplug=True, ipv6=False, dhcp_mode='ipv4',
+ online_timeout=15)
+
+ def test_coldplug_dhcp_ip4_only_no_ra(self):
+ # with disabling RA explicitly things should be fast
+ self.do_test(coldplug=True, ipv6=False, dhcp_mode='ipv4',
+ extra_opts='IPv6AcceptRouterAdvertisements=False')
+
+ def test_coldplug_dhcp_ip6(self):
+ self.do_test(coldplug=True, ipv6=True)
+
+ def test_hotplug_dhcp_ip4(self):
+ # With IPv4 only we have a 12s timeout on RA, so we need to wait longer
+ self.do_test(coldplug=False, ipv6=False, online_timeout=15)
+
+ def test_hotplug_dhcp_ip6(self):
+ self.do_test(coldplug=False, ipv6=True)
+
+
+@unittest.skipUnless(have_dnsmasq, 'dnsmasq not installed')
+class DnsmasqClientTest(ClientTestBase, unittest.TestCase):
+ '''Test networkd client against dnsmasq'''
+
+ def setUp(self):
+ super().setUp()
+ self.dnsmasq = None
+
+ def create_iface(self, ipv6=False):
+ '''Create test interface with DHCP server behind it'''
+
+ # add veth pair
+ subprocess.check_call(['ip', 'link', 'add', 'name', self.iface, 'type',
+ 'veth', 'peer', 'name', self.if_router])
+
+ # give our router an IP
+ subprocess.check_call(['ip', 'a', 'flush', 'dev', self.if_router])
+ subprocess.check_call(['ip', 'a', 'add', '192.168.5.1/24', 'dev', self.if_router])
+ if ipv6:
+ subprocess.check_call(['ip', 'a', 'add', '2600::1/64', 'dev', self.if_router])
+ subprocess.check_call(['ip', 'link', 'set', self.if_router, 'up'])
+
+ # add DHCP server
+ self.dnsmasq_log = os.path.join(self.workdir, 'dnsmasq.log')
+ lease_file = os.path.join(self.workdir, 'dnsmasq.leases')
+ if ipv6:
+ extra_opts = ['--enable-ra', '--dhcp-range=2600::10,2600::20']
+ else:
+ extra_opts = []
+ self.dnsmasq = subprocess.Popen(
+ ['dnsmasq', '--keep-in-foreground', '--log-queries',
+ '--log-facility=' + self.dnsmasq_log, '--conf-file=/dev/null',
+ '--dhcp-leasefile=' + lease_file, '--bind-interfaces',
+ '--interface=' + self.if_router, '--except-interface=lo',
+ '--dhcp-range=192.168.5.10,192.168.5.200'] + extra_opts)
+
+ def shutdown_iface(self):
+ '''Remove test interface and stop DHCP server'''
+
+ if self.if_router:
+ subprocess.check_call(['ip', 'link', 'del', 'dev', self.if_router])
+ self.if_router = None
+ if self.dnsmasq:
+ self.dnsmasq.kill()
+ self.dnsmasq.wait()
+ self.dnsmasq = None
+
+ def print_server_log(self):
+ '''Print DHCP server log for debugging failures'''
+
+ with open(self.dnsmasq_log) as f:
+ sys.stdout.write('\n\n---- dnsmasq log ----\n%s\n------\n\n' % f.read())
+
+
+class NetworkdClientTest(ClientTestBase, unittest.TestCase):
+ '''Test networkd client against networkd server'''
+
+ def setUp(self):
+ super().setUp()
+ self.dnsmasq = None
+
+ def create_iface(self, ipv6=False):
+ '''Create test interface with DHCP server behind it'''
+
+ # run "router-side" networkd in own mount namespace to shield it from
+ # "client-side" configuration and networkd
+ (fd, script) = tempfile.mkstemp(prefix='networkd-router.sh')
+ self.addCleanup(os.remove, script)
+ with os.fdopen(fd, 'w+') as f:
+ f.write('''#!/bin/sh -eu
+mkdir -p /run/systemd/network
+mkdir -p /run/systemd/netif
+mount -t tmpfs none /run/systemd/network
+mount -t tmpfs none /run/systemd/netif
+[ ! -e /run/dbus ] || mount -t tmpfs none /run/dbus
+# create router/client veth pair
+cat << EOF > /run/systemd/network/test.netdev
+[NetDev]
+Name=%(ifr)s
+Kind=veth
+
+[Peer]
+Name=%(ifc)s
+EOF
+
+cat << EOF > /run/systemd/network/test.network
+[Match]
+Name=%(ifr)s
+
+[Network]
+Address=192.168.5.1/24
+%(addr6)s
+DHCPServer=yes
+
+[DHCPServer]
+PoolOffset=10
+PoolSize=50
+DNS=192.168.5.1
+EOF
+
+# run networkd as in systemd-networkd.service
+exec $(systemctl cat systemd-networkd.service | sed -n '/^ExecStart=/ { s/^.*=//; p}')
+''' % {'ifr': self.if_router, 'ifc': self.iface, 'addr6': ipv6 and 'Address=2600::1/64' or ''})
+
+ os.fchmod(fd, 0o755)
+
+ subprocess.check_call(['systemd-run', '--unit=networkd-test-router.service',
+ '-p', 'InaccessibleDirectories=-/etc/systemd/network',
+ '-p', 'InaccessibleDirectories=-/run/systemd/network',
+ '-p', 'InaccessibleDirectories=-/run/systemd/netif',
+ '--service-type=notify', script])
+
+ # wait until devices got created
+ for timeout in range(50):
+ out = subprocess.check_output(['ip', 'a', 'show', 'dev', self.if_router])
+ if b'state UP' in out and b'scope global' in out:
+ break
+ time.sleep(0.1)
+
+ def shutdown_iface(self):
+ '''Remove test interface and stop DHCP server'''
+
+ if self.if_router:
+ subprocess.check_call(['systemctl', 'stop', 'networkd-test-router.service'])
+ # ensure failed transient unit does not stay around
+ subprocess.call(['systemctl', 'reset-failed', 'networkd-test-router.service'])
+ subprocess.call(['ip', 'link', 'del', 'dev', self.if_router])
+ self.if_router = None
+
+ def print_server_log(self):
+ '''Print DHCP server log for debugging failures'''
+
+ self.show_journal('networkd-test-router.service')
+
+ @unittest.skip('networkd does not have DHCPv6 server support')
+ def test_hotplug_dhcp_ip6(self):
+ pass
+
+ @unittest.skip('networkd does not have DHCPv6 server support')
+ def test_coldplug_dhcp_ip6(self):
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout,
+ verbosity=2))
--- /dev/null
+#!/bin/sh
+# loop until we can kill the process given in arg
+
+while :
+do
+ /usr/bin/pkill -x $*
+ [ $? -eq 0 ] && break
+ sleep 1
+done
--- /dev/null
+#!/usr/bin/env python3
+# systemd integration test: Handling of storage devices
+# (C) 2015 Canonical Ltd.
+# Author: Martin Pitt <martin.pitt@ubuntu.com>
+
+import os
+import sys
+import unittest
+import subprocess
+import time
+import random
+from glob import glob
+
+
+@unittest.skipIf(os.path.isdir('/sys/module/scsi_debug'),
+ 'The scsi_debug module is already loaded')
+class FakeDriveTestBase(unittest.TestCase):
+ def setUp(self):
+ # create a fake SCSI hard drive
+ subprocess.check_call(['modprobe', 'scsi_debug'])
+ # wait until drive got created
+ sys_dirs = []
+ while not sys_dirs:
+ sys_dirs = glob('/sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block')
+ time.sleep(0.1)
+ assert len(sys_dirs) == 1
+ devs = os.listdir(sys_dirs[0])
+ assert len(devs) == 1
+ self.device = '/dev/' + devs[0]
+
+ def tearDown(self):
+ subprocess.check_call(['systemctl', 'daemon-reload'])
+ subprocess.check_call(['rmmod', 'scsi_debug'])
+ while glob('/sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block'):
+ time.sleep(0.1)
+
+
+class CryptsetupTest(FakeDriveTestBase):
+ def setUp(self):
+ self.plaintext_name = 'testcrypt1'
+ self.plaintext_dev = '/dev/mapper/' + self.plaintext_name
+ if os.path.exists(self.plaintext_dev):
+ self.fail('%s exists already' % self.plaintext_dev)
+
+ super().setUp()
+
+ if os.path.exists('/etc/crypttab'):
+ os.rename('/etc/crypttab', '/etc/crypttab.systemdtest')
+ self.password = 'pwd%i' % random.randint(1000, 10000)
+ self.password_agent = None
+
+ def tearDown(self):
+ if self.password_agent:
+ os.kill(self.password_agent, 9)
+ os.waitpid(self.password_agent, 0)
+ self.password_agent = None
+ subprocess.call(['umount', self.plaintext_dev], stderr=subprocess.DEVNULL)
+ subprocess.call(['systemctl', 'stop', 'systemd-cryptsetup@%s.service' % self.plaintext_name])
+ if os.path.exists('/etc/crypttab'):
+ os.unlink('/etc/crypttab')
+ if os.path.exists('/etc/crypttab.systemdtest'):
+ os.rename('/etc/crypttab.systemdtest', '/etc/crypttab')
+
+ super().tearDown()
+
+ def format_luks(self):
+ '''Format test device with LUKS'''
+
+ p = subprocess.Popen(['cryptsetup', '--batch-mode', 'luksFormat', self.device, '-'],
+ stdin=subprocess.PIPE)
+ p.communicate(self.password.encode())
+ self.assertEqual(p.returncode, 0)
+
+ def start_password_agent(self):
+ '''Run password agent to answer passphrase request for crypt device'''
+
+ pid = os.fork()
+ if pid > 0:
+ self.password_agent = pid
+ return
+
+ # wait for incoming request
+ found = False
+ while not found:
+ for ask in glob('/run/systemd/ask-password/ask.*'):
+ with open(ask) as f:
+ contents = f.read()
+ if 'disk scsi_debug' in contents and self.plaintext_name in contents:
+ found = True
+ break
+ if not found:
+ time.sleep(0.5)
+
+ # parse Socket=
+ for line in contents.splitlines():
+ if line.startswith('Socket='):
+ socket = line.split('=', 1)[1]
+ break
+
+ # send reply
+ p = subprocess.Popen(['/lib/systemd/systemd-reply-password', '1', socket],
+ stdin=subprocess.PIPE)
+ p.communicate(self.password.encode())
+ assert p.returncode == 0
+
+ os._exit(0)
+
+ def apply(self, target):
+ '''Tell systemd to generate and run the cryptsetup units'''
+
+ subprocess.check_call(['systemctl', 'daemon-reload'])
+
+ self.start_password_agent()
+ subprocess.check_call(['systemctl', 'restart', target])
+ for timeout in range(50):
+ if os.path.exists(self.plaintext_dev):
+ break
+ time.sleep(0.1)
+ else:
+ self.fail('timed out for %s to appear' % self.plaintext_dev)
+
+ def test_luks_by_devname(self):
+ '''LUKS device by plain device name, empty'''
+
+ self.format_luks()
+ with open('/etc/crypttab', 'w') as f:
+ f.write('%s %s none luks\n' % (self.plaintext_name, self.device))
+ self.apply('cryptsetup.target')
+
+ # should not be mounted
+ with open('/proc/mounts') as f:
+ self.assertNotIn(self.plaintext_name, f.read())
+
+ # device should not have anything on it
+ p = subprocess.Popen(['blkid', self.plaintext_dev], stdout=subprocess.PIPE)
+ out = p.communicate()[0]
+ self.assertEqual(out, b'')
+ self.assertNotEqual(p.returncode, 0)
+
+ def test_luks_by_uuid(self):
+ '''LUKS device by UUID, empty'''
+
+ self.format_luks()
+ uuid = subprocess.check_output(['blkid', '-ovalue', '-sUUID', self.device],
+ universal_newlines=True).strip()
+ with open('/etc/crypttab', 'w') as f:
+ f.write('%s UUID=%s none luks\n' % (self.plaintext_name, uuid))
+ self.apply('cryptsetup.target')
+
+ # should not be mounted
+ with open('/proc/mounts') as f:
+ self.assertNotIn(self.plaintext_name, f.read())
+
+ # device should not have anything on it
+ p = subprocess.Popen(['blkid', self.plaintext_dev], stdout=subprocess.PIPE)
+ out = p.communicate()[0]
+ self.assertEqual(out, b'')
+ self.assertNotEqual(p.returncode, 0)
+
+ def test_luks_swap(self):
+ '''LUKS device with "swap" option'''
+
+ self.format_luks()
+ with open('/etc/crypttab', 'w') as f:
+ f.write('%s %s none luks,swap\n' % (self.plaintext_name, self.device))
+ self.apply('cryptsetup.target')
+
+ # should not be mounted
+ with open('/proc/mounts') as f:
+ self.assertNotIn(self.plaintext_name, f.read())
+
+ # device should be formatted with swap
+ out = subprocess.check_output(['blkid', '-ovalue', '-sTYPE', self.plaintext_dev])
+ self.assertEqual(out, b'swap\n')
+
+ def test_luks_tmp(self):
+ '''LUKS device with "tmp" option'''
+
+ self.format_luks()
+ with open('/etc/crypttab', 'w') as f:
+ f.write('%s %s none luks,tmp\n' % (self.plaintext_name, self.device))
+ self.apply('cryptsetup.target')
+
+ # should not be mounted
+ with open('/proc/mounts') as f:
+ self.assertNotIn(self.plaintext_name, f.read())
+
+ # device should be formatted with ext2
+ out = subprocess.check_output(['blkid', '-ovalue', '-sTYPE', self.plaintext_dev])
+ self.assertEqual(out, b'ext2\n')
+
+ def test_luks_fstab(self):
+ '''LUKS device in /etc/fstab'''
+
+ self.format_luks()
+ with open('/etc/crypttab', 'w') as f:
+ f.write('%s %s none luks,tmp\n' % (self.plaintext_name, self.device))
+
+ mountpoint = '/run/crypt1.systemdtest'
+ os.mkdir(mountpoint)
+ self.addCleanup(os.rmdir, mountpoint)
+ os.rename('/etc/fstab', '/etc/fstab.systemdtest')
+ self.addCleanup(os.rename, '/etc/fstab.systemdtest', '/etc/fstab')
+ with open('/etc/fstab', 'a') as f:
+ with open('/etc/fstab.systemdtest') as forig:
+ f.write(forig.read())
+ f.write('%s %s ext2 defaults 0 0\n' % (self.plaintext_dev, mountpoint))
+
+ # this should now be a requirement of local-fs.target
+ self.apply('local-fs.target')
+
+ # should be mounted
+ found = False
+ with open('/proc/mounts') as f:
+ for line in f:
+ fields = line.split()
+ if fields[0] == self.plaintext_dev:
+ self.assertEqual(fields[1], mountpoint)
+ self.assertEqual(fields[2], 'ext2')
+ found = True
+ break
+ if not found:
+ self.fail('%s is not mounted' % self.plaintext_dev)
+
+
+if __name__ == '__main__':
+ unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout,
+ verbosity=2))
--- /dev/null
+#!/usr/bin/python3
+# autopkgtest check: Ensure that systemd-fsckd can report progress and cancel
+# (C) 2015 Canonical Ltd.
+# Author: Didier Roche <didrocks@ubuntu.com>
+
+from contextlib import suppress
+import inspect
+import fileinput
+import os
+import subprocess
+import shutil
+import stat
+import sys
+import unittest
+from time import sleep, time
+
+GRUB_AUTOPKGTEST_CONFIG_PATH = "/etc/default/grub.d/90-autopkgtest.cfg"
+TEST_AUTOPKGTEST_CONFIG_PATH = "/etc/default/grub.d/99-fsckdtest.cfg"
+
+SYSTEMD_ETC_SYSTEM_UNIT_DIR = "/etc/systemd/system/"
+SYSTEMD_PROCESS_KILLER_PATH = os.path.join(SYSTEMD_ETC_SYSTEM_UNIT_DIR, "process-killer.service")
+
+SYSTEMD_FSCK_ROOT_PATH = "/lib/systemd/system/systemd-fsck-root.service"
+SYSTEMD_FSCK_ROOT_ENABLE_PATH = os.path.join(SYSTEMD_ETC_SYSTEM_UNIT_DIR, 'local-fs.target.wants/systemd-fsck-root.service')
+
+SYSTEM_FSCK_PATH = '/sbin/fsck'
+PROCESS_KILLER_PATH = '/sbin/process-killer'
+SAVED_FSCK_PATH = "{}.real".format(SYSTEM_FSCK_PATH)
+
+FSCKD_TIMEOUT = 30
+
+
+class FsckdTest(unittest.TestCase):
+ '''Check that we run, report and can cancel fsck'''
+
+ def __init__(self, test_name, after_reboot, return_code):
+ super().__init__(test_name)
+ self._test_name = test_name
+ self._after_reboot = after_reboot
+ self._return_code = return_code
+
+ def setUp(self):
+ super().setUp()
+ # ensure we have our root fsck enabled by default (it detects it runs in a vm and doesn't pull the target)
+ # note that it can already exists in case of a reboot (as there was no tearDown as we wanted)
+ os.makedirs(os.path.dirname(SYSTEMD_FSCK_ROOT_ENABLE_PATH), exist_ok=True)
+ with suppress(FileExistsError):
+ os.symlink(SYSTEMD_FSCK_ROOT_PATH, SYSTEMD_FSCK_ROOT_ENABLE_PATH)
+ enable_plymouth()
+
+ # note that the saved real fsck can still exists in case of a reboot (as there was no tearDown as we wanted)
+ if not os.path.isfile(SAVED_FSCK_PATH):
+ os.rename(SYSTEM_FSCK_PATH, SAVED_FSCK_PATH)
+
+ # install mock fsck and killer
+ self.install_bin(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'fsck'),
+ SYSTEM_FSCK_PATH)
+ self.install_bin(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'process-killer'),
+ PROCESS_KILLER_PATH)
+
+ self.files_to_clean = [SYSTEMD_FSCK_ROOT_ENABLE_PATH, SYSTEM_FSCK_PATH, SYSTEMD_PROCESS_KILLER_PATH, PROCESS_KILLER_PATH]
+
+ def tearDown(self):
+ # tearDown is only called once the test really ended (not while rebooting during tests)
+ for f in self.files_to_clean:
+ with suppress(FileNotFoundError):
+ os.remove(f)
+ os.rename(SAVED_FSCK_PATH, SYSTEM_FSCK_PATH)
+ super().tearDown()
+
+ def test_fsckd_run(self):
+ '''Ensure we can reboot after a fsck was processed'''
+ if not self._after_reboot:
+ self.reboot()
+ else:
+ self.assertFsckdStop()
+ self.assertFsckProceeded()
+ self.assertSystemRunning()
+
+ def test_fsckd_run_without_plymouth(self):
+ '''Ensure we can reboot without plymouth after a fsck was processed'''
+ if not self._after_reboot:
+ enable_plymouth(enable=False)
+ self.reboot()
+ else:
+ self.assertFsckdStop()
+ self.assertFsckProceeded(with_plymouth=False)
+ self.assertSystemRunning()
+
+ def test_fsck_with_failure(self):
+ '''Ensure that a failing fsck doesn't prevent fsckd to stop'''
+ if not self._after_reboot:
+ self.install_process_killer_unit('fsck')
+ self.reboot()
+ else:
+ self.assertFsckdStop()
+ self.assertTrue(self.was_running('process-killer'))
+ self.assertFalse(self.is_failed_unit('process-killer'))
+ self.assertFsckProceeded()
+ self.assertSystemRunning()
+
+ def test_systemd_fsck_with_failure(self):
+ '''Ensure that a failing systemd-fsck doesn't prevent fsckd to stop'''
+ if not self._after_reboot:
+ self.install_process_killer_unit('systemd-fsck', kill=True)
+ self.reboot()
+ else:
+ self.assertFsckdStop()
+ self.assertProcessKilled()
+ self.assertTrue(self.is_failed_unit('systemd-fsck-root'))
+ self.assertTrue(self.was_running('systemd-fsckd'))
+ self.assertTrue(self.was_running('plymouth-start'))
+ self.assertSystemRunning()
+
+ def test_systemd_fsckd_with_failure(self):
+ '''Ensure that a failing systemd-fsckd doesn't prevent system to boot'''
+ if not self._after_reboot:
+ self.install_process_killer_unit('systemd-fsckd', kill=True)
+ self.reboot()
+ else:
+ self.assertFsckdStop()
+ self.assertProcessKilled()
+ self.assertFalse(self.is_failed_unit('systemd-fsck-root'))
+ self.assertTrue(self.is_failed_unit('systemd-fsckd'))
+ self.assertTrue(self.was_running('plymouth-start'))
+ self.assertSystemRunning()
+
+ def test_systemd_fsck_with_plymouth_failure(self):
+ '''Ensure that a failing plymouth doesn't prevent fsckd to reconnect/exit'''
+ if not self._after_reboot:
+ self.install_process_killer_unit('plymouthd', kill=True)
+ self.reboot()
+ else:
+ self.assertFsckdStop()
+ self.assertTrue(self.was_running('process-killer'))
+ self.assertFsckProceeded()
+ self.assertFalse(self.is_active_unit('plymouth-start'))
+ self.assertSystemRunning()
+
+ def install_bin(self, source, dest):
+ '''install mock fsck'''
+ shutil.copy2(source, dest)
+ st = os.stat(dest)
+ os.chmod(dest, st.st_mode | stat.S_IEXEC)
+
+ def is_active_unit(self, unit):
+ '''Check that given unit is active'''
+
+ if subprocess.call(['systemctl', '-q', 'is-active', unit]) != 0:
+ return False
+ return True
+
+ def is_failed_unit(self, unit):
+ '''Check that given unit failed'''
+
+ p = subprocess.Popen(['systemctl', 'is-active', unit], stdout=subprocess.PIPE)
+ out, err = p.communicate()
+ if b'failed' in out:
+ return True
+ return False
+
+ def was_running(self, unit):
+ '''Check that a given unit has been running'''
+ out = subprocess.check_output(['systemctl', 'show', '--property=ExecStart', unit])
+ if b'start_time=[n/a]' in out:
+ return False
+ return True
+
+ def assertFsckdStop(self):
+ '''Ensure systemd-fsckd stops, which indicates no more fsck activity'''
+ timeout = time() + FSCKD_TIMEOUT
+ while time() < timeout:
+ if not self.is_active_unit('systemd-fsckd'):
+ return
+ sleep(1)
+ raise Exception("systemd-fsckd still active after {}s".format(FSCKD_TIMEOUT))
+
+ def assertFsckProceeded(self, with_plymouth=True):
+ '''Assert we executed most of the fsck-related services successfully'''
+ self.assertTrue(self.was_running('systemd-fsckd'))
+ self.assertFalse(self.is_failed_unit('systemd-fsckd'))
+ self.assertTrue(self.is_active_unit('systemd-fsck-root')) # remains active after exit
+ if with_plymouth:
+ self.assertTrue(self.was_running('plymouth-start'))
+ else:
+ self.assertFalse(self.was_running('plymouth-start'))
+
+ def assertSystemRunning(self):
+ '''Assert that the system is running'''
+
+ self.assertTrue(self.is_active_unit('default.target'))
+
+ def assertProcessKilled(self):
+ '''Assert the targeted process was killed successfully'''
+ self.assertTrue(self.was_running('process-killer'))
+ self.assertFalse(self.is_failed_unit('process-killer'))
+
+ def reboot(self):
+ '''Reboot the system with the current test marker'''
+ subprocess.check_call(['/tmp/autopkgtest-reboot', "{}:{}".format(self._test_name, self._return_code)])
+
+ def install_process_killer_unit(self, process_name, kill=False):
+ '''Create a systemd unit which will kill process_name'''
+ with open(SYSTEMD_PROCESS_KILLER_PATH, 'w') as f:
+ f.write('''[Unit]
+DefaultDependencies=no
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/timeout 10 {} {}
+
+[Install]
+WantedBy=systemd-fsck-root.service'''.format(PROCESS_KILLER_PATH,
+ '--signal SIGKILL {}'.format(process_name) if kill else process_name))
+ subprocess.check_call(['systemctl', 'daemon-reload'])
+ subprocess.check_call(['systemctl', 'enable', 'process-killer'], stderr=subprocess.DEVNULL)
+
+
+def enable_plymouth(enable=True):
+ '''ensure plymouth is enabled in grub config (doesn't reboot)'''
+ plymouth_enabled = 'splash' in open('/boot/grub/grub.cfg').read()
+ if enable and not plymouth_enabled:
+ if os.path.exists(GRUB_AUTOPKGTEST_CONFIG_PATH):
+ shutil.copy2(GRUB_AUTOPKGTEST_CONFIG_PATH, TEST_AUTOPKGTEST_CONFIG_PATH)
+ for line in fileinput.input([TEST_AUTOPKGTEST_CONFIG_PATH], inplace=True):
+ if line.startswith("GRUB_CMDLINE_LINUX_DEFAULT"):
+ print(line[:line.rfind('"')] + ' splash quiet"\n')
+ else:
+ with open(TEST_AUTOPKGTEST_CONFIG_PATH, 'w') as f:
+ f.write('GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0 splash quiet"\n')
+ elif not enable and plymouth_enabled:
+ with suppress(FileNotFoundError):
+ os.remove(TEST_AUTOPKGTEST_CONFIG_PATH)
+ subprocess.check_call(['update-grub'], stderr=subprocess.DEVNULL)
+
+
+def boot_with_systemd_distro():
+ '''Reboot with systemd as init and distro setup for grub'''
+ enable_plymouth()
+ subprocess.check_call(['/tmp/autopkgtest-reboot', 'systemd-started'])
+
+
+def getAllTests(unitTestClass):
+ '''get all test names in predictable sorted order from unitTestClass'''
+ return sorted([test[0] for test in inspect.getmembers(unitTestClass, predicate=inspect.isfunction)
+ if test[0].startswith('test_')])
+
+
+# ADT_REBOOT_MARK contains the test name to pursue after reboot
+# (to check results and states after reboot, mostly).
+# we append the previous global return code (0 or 1) to it.
+# Example: ADT_REBOOT_MARK=test_foo:0
+if __name__ == '__main__':
+ if os.path.exists('/run/initramfs/fsck-root'):
+ print('SKIP: root file system is being checked by initramfs already')
+ sys.exit(0)
+
+ all_tests = getAllTests(FsckdTest)
+ reboot_marker = os.getenv('ADT_REBOOT_MARK')
+
+ current_test_after_reboot = ""
+ if not reboot_marker:
+ boot_with_systemd_distro()
+
+ # first test
+ if reboot_marker == "systemd-started":
+ current_test = all_tests[0]
+ return_code = 0
+ else:
+ (current_test_after_reboot, return_code) = reboot_marker.split(':')
+ current_test = current_test_after_reboot
+ return_code = int(return_code)
+
+ # loop on remaining tests to run
+ try:
+ remaining_tests = all_tests[all_tests.index(current_test):]
+ except ValueError:
+ print("Invalid value for ADT_REBOOT_MARK, {} is not a valid test name".format(reboot_marker))
+ sys.exit(2)
+
+ # run all remaining tests
+ for test_name in remaining_tests:
+ after_reboot = False
+ # if this tests needed a reboot (and it has been performed), executes second part of it
+ if test_name == current_test_after_reboot:
+ after_reboot = True
+ suite = unittest.TestSuite()
+ suite.addTest(FsckdTest(test_name, after_reboot, return_code))
+ result = unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run(suite)
+ if len(result.failures) != 0 or len(result.errors) != 0:
+ return_code = 1
+
+ sys.exit(return_code)
--- /dev/null
+#!/bin/sh
+set -e
+
+. `dirname $0`/assert.sh
+
+ORIG_TZ=`grep -v '^#' /etc/timezone`
+echo "original tz: $ORIG_TZ"
+
+# should activate daemon and work
+assert_in "Local time:" "`timedatectl --no-pager`"
+
+# change timezone
+assert_eq "`timedatectl --no-pager set-timezone Europe/Moscow 2>&1`" ""
+assert_eq "`readlink /etc/localtime | sed 's#^.*zoneinfo/##'`" "Europe/Moscow"
+[ -n "$TEST_UPSTREAM" ] || assert_eq "`cat /etc/timezone`" "Europe/Moscow"
+assert_in "Time.*zone: Europe/Moscow (MSK, +" "`timedatectl --no-pager`"
+
+# reset timezone to original
+assert_eq "`timedatectl --no-pager set-timezone $ORIG_TZ 2>&1`" ""
+assert_eq "`readlink /etc/localtime | sed 's#^.*zoneinfo/##'`" "$ORIG_TZ"
+[ -n "$TEST_UPSTREAM" ] || assert_eq "`cat /etc/timezone`" "$ORIG_TZ"
+
--- /dev/null
+#!/usr/bin/python3
+# autopkgtest check: enable/disable/configure units
+# (C) 2015 Canonical Ltd.
+# Author: Martin Pitt <martin.pitt@ubuntu.com>
+
+import unittest
+import subprocess
+import os
+import sys
+import tempfile
+from glob import glob
+
+
+class EnableTests(unittest.TestCase):
+ def tearDown(self):
+ # remove all traces from our test unit
+ f = glob('/lib/systemd/system/test_enable*.service')
+ f += glob('/lib/systemd/system/*/test_enable*.service')
+ f += glob('/etc/systemd/system/test_enable*.service')
+ f += glob('/etc/systemd/system/*/test_enable*.service')
+ f += glob('/etc/init.d/test_enable*')
+ f += glob('/etc/rc?.d/???test_enable*')
+ [os.unlink(i) for i in f]
+
+ def create_unit(self, suffix='', dir='/lib', enable=False):
+ '''Create a test unit'''
+
+ unit = os.path.join(dir, 'systemd', 'system',
+ 'test_enable%s.service' % suffix)
+ with open(unit, 'w') as f:
+ f.write('''[Unit]
+Description=Testsuite unit %s
+[Service]
+ExecStart=/bin/echo hello
+[Install]
+WantedBy=multi-user.target
+''' % suffix)
+
+ if enable:
+ os.symlink(unit, '/etc/systemd/system/multi-user.target.wants/' +
+ os.path.basename(unit))
+
+ return unit
+
+ def create_sysv(self, suffix='', enable=False):
+ '''Create a test SysV script'''
+
+ script = '/etc/init.d/test_enable%s' % suffix
+ with open(script, 'w') as f:
+ f.write('''/bin/sh
+### BEGIN INIT INFO
+# Provides: test_enable%s
+# Required-Start: $remote_fs $syslog
+# Required-Stop: $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Testsuite script%s
+### END INIT INFO
+
+echo hello
+''' % (suffix, suffix))
+ os.chmod(script, 0o755)
+
+ if enable:
+ subprocess.check_call(['update-rc.d', os.path.basename(script),
+ 'defaults'])
+ subprocess.check_call(['update-rc.d', os.path.basename(script),
+ 'enable'])
+
+ def assertEnabled(self, enabled, unit='test_enable.service'):
+ '''assert that given unit has expected state'''
+
+ systemctl = subprocess.Popen(['systemctl', 'is-enabled', unit],
+ stdout=subprocess.PIPE,
+ universal_newlines=True)
+ out = systemctl.communicate()[0].strip()
+ if enabled:
+ self.assertEqual(systemctl.returncode, 0)
+ self.assertEqual(out, 'enabled')
+ else:
+ self.assertEqual(systemctl.returncode, 1)
+ self.assertEqual(out, 'disabled')
+
+ def test_unit_enable(self):
+ '''no sysv: enable unit'''
+
+ self.create_unit()
+ self.assertEnabled(False)
+ # also works without .service suffix
+ self.assertEnabled(False, unit='test_enable')
+
+ subprocess.check_call(['systemctl', 'enable', 'test_enable'])
+
+ self.assertEnabled(True)
+ # also works without .service suffix
+ self.assertEnabled(True, unit='test_enable')
+
+ l = '/etc/systemd/system/multi-user.target.wants/test_enable.service'
+ self.assertTrue(os.path.islink(l))
+ self.assertEqual(os.readlink(l),
+ '/lib/systemd/system/test_enable.service')
+
+ def test_unit_disable(self):
+ '''no sysv: disable unit'''
+
+ self.create_unit(enable=True)
+ self.assertEnabled(True)
+ # also works without .service suffix
+ self.assertEnabled(True, unit='test_enable')
+
+ subprocess.check_call(['systemctl', 'disable', 'test_enable'])
+
+ self.assertEnabled(False)
+ # also works without .service suffix
+ self.assertEnabled(False, unit='test_enable')
+
+ l = '/etc/systemd/system/multi-user.target.wants/test_enable.service'
+ self.assertFalse(os.path.islink(l))
+
+ def test_unit_sysv_enable(self):
+ '''with sysv: enable unit'''
+
+ self.create_unit()
+ self.create_sysv()
+ self.assertEnabled(False)
+ # also works without .service suffix
+ self.assertEnabled(False, unit='test_enable')
+
+ subprocess.check_call(['systemctl', 'enable', 'test_enable'])
+
+ self.assertEnabled(True)
+ # also works without .service suffix
+ self.assertEnabled(True, unit='test_enable')
+
+ l = '/etc/systemd/system/multi-user.target.wants/test_enable.service'
+ self.assertTrue(os.path.islink(l))
+ self.assertEqual(os.readlink(l),
+ '/lib/systemd/system/test_enable.service')
+
+ # enabled the sysv script
+ l = glob('/etc/rc2.d/S??test_enable')
+ self.assertEqual(len(l), 1, 'expect one symlink in %s' % repr(l))
+ self.assertEqual(os.readlink(l[0]), '../init.d/test_enable')
+
+ def test_unit_sysv_disable(self):
+ '''with sysv: disable unit'''
+
+ self.create_unit(enable=True)
+ self.create_sysv(enable=True)
+ self.assertEnabled(True)
+ # also works without .service suffix
+ self.assertEnabled(True, unit='test_enable')
+
+ subprocess.check_call(['systemctl', 'disable', 'test_enable'])
+
+ self.assertEnabled(False)
+ # also works without .service suffix
+ self.assertEnabled(False, unit='test_enable')
+
+ l = '/etc/systemd/system/multi-user.target.wants/test_enable.service'
+ self.assertFalse(os.path.islink(l))
+
+ # disabled the sysv script
+ l = glob('/etc/rc2.d/S??test_enable')
+ self.assertEqual(l, [])
+
+ def test_unit_alias_enable(self):
+ '''no sysv: enable unit with an alias'''
+
+ u = self.create_unit()
+ with open(u, 'a') as f:
+ f.write('Alias=test_enablea.service\n')
+
+ self.assertEnabled(False)
+
+ subprocess.check_call(['systemctl', 'enable', 'test_enable'])
+
+ self.assertEnabled(True)
+
+ # enablement symlink
+ l = '/etc/systemd/system/multi-user.target.wants/test_enable.service'
+ self.assertTrue(os.path.islink(l))
+ self.assertEqual(os.readlink(l),
+ '/lib/systemd/system/test_enable.service')
+
+ # alias symlink
+ l = '/etc/systemd/system/test_enablea.service'
+ self.assertTrue(os.path.islink(l))
+ self.assertEqual(os.readlink(l),
+ '/lib/systemd/system/test_enable.service')
+
+ def test_unit_alias_disable(self):
+ '''no sysv: disable unit with an alias'''
+
+ u = self.create_unit()
+ with open(u, 'a') as f:
+ f.write('Alias=test_enablea.service\n')
+ os.symlink('/lib/systemd/system/test_enable.service',
+ '/etc/systemd/system/test_enablea.service')
+
+ subprocess.check_call(['systemctl', 'disable', 'test_enable'])
+
+ self.assertEnabled(False)
+
+ # enablement symlink
+ l = '/etc/systemd/system/multi-user.target.wants/test_enable.service'
+ self.assertFalse(os.path.islink(l))
+
+ # alias symlink
+ l = '/etc/systemd/system/test_enablea.service'
+ self.assertFalse(os.path.islink(l))
+
+ def test_unit_sysv_alias_enable(self):
+ '''with sysv: enable unit with an alias'''
+
+ u = self.create_unit()
+ with open(u, 'a') as f:
+ f.write('Alias=test_enablea.service\n')
+ self.create_sysv()
+
+ self.assertEnabled(False)
+
+ subprocess.check_call(['systemctl', 'enable', 'test_enable'])
+
+ # enablement symlink
+ l = '/etc/systemd/system/multi-user.target.wants/test_enable.service'
+ self.assertTrue(os.path.islink(l))
+ self.assertEqual(os.readlink(l),
+ '/lib/systemd/system/test_enable.service')
+
+ # alias symlink
+ l = '/etc/systemd/system/test_enablea.service'
+ self.assertTrue(os.path.islink(l))
+ self.assertEqual(os.readlink(l),
+ '/lib/systemd/system/test_enable.service')
+
+ # enabled the sysv script
+ l = glob('/etc/rc2.d/S??test_enable')
+ self.assertEqual(len(l), 1, 'expect one symlink in %s' % repr(l))
+ self.assertEqual(os.readlink(l[0]), '../init.d/test_enable')
+
+ self.assertEnabled(True)
+
+ def test_unit_sysv_alias_disable(self):
+ '''with sysv: disable unit with an alias'''
+
+ u = self.create_unit(enable=True)
+ with open(u, 'a') as f:
+ f.write('Alias=test_enablea.service\n')
+ os.symlink('/lib/systemd/system/test_enable.service',
+ '/etc/systemd/system/test_enablea.service')
+ self.create_sysv(enable=True)
+
+ subprocess.check_call(['systemctl', 'disable', 'test_enable'])
+
+ # enablement symlink
+ l = '/etc/systemd/system/multi-user.target.wants/test_enable.service'
+ self.assertFalse(os.path.islink(l))
+
+ # alias symlink
+ l = '/etc/systemd/system/test_enablea.service'
+ self.assertFalse(os.path.islink(l))
+
+ # disabled the sysv script
+ l = glob('/etc/rc2.d/S??test_enable')
+ self.assertEqual(l, [])
+
+ self.assertEnabled(False)
+
+ def test_sysv_enable(self):
+ '''only sysv: enable'''
+
+ self.create_sysv()
+ subprocess.check_call(['systemctl', 'enable', 'test_enable'])
+
+ # enabled the sysv script
+ l = glob('/etc/rc2.d/S??test_enable')
+ self.assertEqual(len(l), 1, 'expect one symlink in %s' % repr(l))
+ self.assertEqual(os.readlink(l[0]), '../init.d/test_enable')
+
+ def test_sysv_disable(self):
+ '''only sysv: disable'''
+
+ self.create_sysv(enable=True)
+ subprocess.check_call(['systemctl', 'disable', 'test_enable'])
+
+ # disabled the sysv script
+ l = glob('/etc/rc2.d/S??test_enable')
+ self.assertEqual(l, [])
+
+ def test_unit_link(self):
+ '''systemctl link'''
+
+ with tempfile.NamedTemporaryFile(suffix='.service') as f:
+ f.write(b'[Unit]\n')
+ f.flush()
+ subprocess.check_call(['systemctl', 'link', f.name])
+
+ l = os.path.join('/etc/systemd/system', os.path.basename(f.name))
+ self.assertEqual(os.readlink(l), f.name)
+ os.unlink(l)
+
+
+if __name__ == '__main__':
+ unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout,
+ verbosity=2))
--- /dev/null
+/etc/udev/rules.d/
--- /dev/null
+lib/systemd/network/99-default.link
+lib/systemd/systemd-udevd
+bin/udevadm
+lib/udev/ata_id
+lib/udev/scsi_id
+lib/udev/cdrom_id
+lib/udev/rules.d/50-udev-default.rules
+lib/udev/rules.d/60-cdrom_id.rules
+lib/udev/rules.d/60-persistent-input.rules
+lib/udev/rules.d/60-persistent-storage.rules
+lib/udev/rules.d/64-btrfs.rules
+lib/udev/rules.d/75-net-description.rules
+lib/udev/rules.d/75-probe_mtd.rules
+lib/udev/rules.d/80-drivers.rules
+lib/udev/rules.d/80-net-setup-link.rules
+../../extra/90-mac-for-usb.link lib/systemd/network/
+../../extra/rules/50-firmware.rules lib/udev/rules.d/
+../../extra/rules/73-idrac.rules lib/udev/rules.d/
+../../extra/start-udev lib/debian-installer/
--- /dev/null
+/bin/udevadm /sbin/udevadm
--- /dev/null
+systemd (220-7) unstable; urgency=medium
+
+ * The mechanism for providing stable network interface names changed.
+ Previously they were kept in /etc/udev/rules.d/70-persistent-net.rules
+ which mapped device MAC addresses to the (arbitrary) name they got when
+ they first appeared (i. e. mostly at the time of installation). As this
+ had several problems and is not supported any more, this is deprecated in
+ favor of the "net.ifnames" mechanism. With this most of your network
+ interfaces will get location-based names. If you have ifupdown, firewall,
+ or other configuration that relies on the old names, you need to update
+ these by Debian 10/Ubuntu 18.04 LTS, and then remove
+ /etc/udev/rules.d/70-persistent-net.rules. Please see
+ /usr/share/doc/udev/README.Debian.gz for details about this.
+
+ -- Martin Pitt <mpitt@debian.org> Mon, 15 Jun 2015 15:30:29 +0200
--- /dev/null
+This documents udev integration Debian specifics. Please see man udev(7) and
+its referenced manpages for general documentation.
+
+Network interface naming
+~~~~~~~~~~~~~~~~~~~~~~~~
+Since version 197 udev has a builtin persistent name generator which checks
+firmware/BIOS provided index numbers or slot names (similar to biosdevname),
+falls back to slot names (PCI numbers, etc., in the spirit of
+/dev/disks/by-path/), and then optionally falls back to MAC address, and
+generates names based on these properties. This provides "location oriented"
+names for PCI cards such as "enp0s1" for ethernet, or wlp1s0" for a WIFI card
+so that replacing a broken network card does not change the name. As location
+based naming does not work well for USB devices, these use a MAC based naming
+schema (see /lib/systemd/network/01-mac-for-usb.link).
+
+This has been enabled by default since udev 220-7, which affects new
+installations/hardware. Existing installations/hardware which already got
+covered by the old 75-persistent-net-generator.rules will keep their interface
+names, see below.
+
+You can disable these stable names and go back to the kernel-provided ones
+(which don't have a stable order) in one of two ways:
+
+ - Put "net.ifnames=0" into the kernel command line (e. g. in
+ /etc/default/grub's GRUB_CMDLINE_LINUX_DEFAULT, then run "update-grub").
+
+ - Disable the default *.link rules with
+ "ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules"
+ and rebuild the initrd with "update-initramfs -u".
+
+See this page for more information:
+http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/
+
+Legacy persistent network interface naming
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Debian releases up to 8 ("Jessie") and Ubuntu up to 15.04 had an udev rule
+/lib/udev/rules.d/75-persistent-net-generator.rules which fixed the name of a
+network interface that it got when its MAC address first appeared in a
+dynamically created /etc/udev/rules.d/70-persistent-net.rules file.
+
+This had inherent race conditions (which sometimes caused collisions and
+interface names like "rename1"), required having to write state into /etc
+(which isn't possible for read-only root), and did not work in virtualized
+environments.
+
+This old schema is deprecated in Debian 9 ("Stretch"), and will not
+be supported any more in Debian 10.
+
+Migration to the current network interface naming
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+On package upgrade systems will keep their current names, but they will need to
+be manually migrated by Debian 10 / Ubuntu 18.04 LTS. If you rely on the old
+names in custom ifupdown stanzas, firewall scripts or other networking
+configuration, these need to be updated to the new names.
+
+First, determine all relevant network interface names: those in
+/etc/udev/rules.d/70-persistent-net.rules, or if that does not exist (in
+virtual machines), in "ip link" or /sys/class/net/.
+
+Then for every interface name use a command like
+
+ grep -r eth0 /etc
+
+to find out where it is being used.
+
+Then on "real hardware" machines, rename the file to
+70-persistent-net.rules.old; on VMs remove the file
+/etc/udev/rules.d/80-net-setup-link.rules instead.
+
+Reboot, adjust configuration files, and test your system.
+
+Custom net interface naming
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+In some cases it is convenient to define your own specific names for network
+interfaces. These can be customized in two different ways:
+
+ * You can create your own names via udev rules, based on arbitrary attribute
+ and property matches. See man udev(7) for documentation how to write udev
+ rules. For example, you can create /etc/udev/rules.d/76-netnames.rules with
+
+ ------------ snip ----------
+ # identify device by MAC address
+ SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="11:22:aa:bb:cc:33", NAME="eth-dmz"
+
+ # identify by vendor/model ID
+ SUBSYSTEM=="net", ACTION=="add", ENV{ID_VENDOR_ID}=="0x8086", \
+ ENV{ID_MODEL_ID}=="0x1502", NAME="eth-intel-gb"
+
+ # USB device by path
+ # get ID_PATH if not present yet
+ ENV{ID_PATH}=="", IMPORT{builtin}="path_id"
+ SUBSYSTEM=="net", ACTION=="add", ENV{ID_PATH}=="*-usb-0:3:1*", NAME="eth-blue-hub"
+ ------------ snip ----------
+
+ The name of the rules file needs to have a prefix smaller than "80" so that
+ it runs before /lib/udev/rules.d/80-net-setup-link.rules, and should have a
+ prefix bigger than "75" so that it runs after 75-net-description.rules and
+ thus you can use matches on ID_VENDOR and similar properties.
+
+ * Unless you disabled net.ifnames, you can change the policy
+ (kernel/bios/path/MAC based naming) in an /etc/systemd/network/*.link file,
+ for individual devices or entire device classes. See man systemd.link(5) for
+ details about this. /lib/systemd/network/99-default.link is the default
+ policy, and /lib/systemd/network/01-mac-for-usb.link makes it use MAC based
+ names for USB devices.
+
+Any of the above changes require an initrd update with "update-initramfs -u" to
+get effective.
+
+Using udev with LDAP or NIS
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+If the rules files reference usernames or groups not present in the
+/etc/{passwd,group} files and the system is configured to use a
+network-based database like LDAP or NIS then udev may fail at boot time
+because users and groups are looked up well before the network has been
+initialized.
+A possible solution is to configure /etc/nsswitch.conf like this:
+
+ passwd: files ldap [UNAVAIL=return]
+ group: files ldap [UNAVAIL=return]
+
+The nsswitch.conf syntax is documented in the glibc manual.
--- /dev/null
+package-status: systemd
--- /dev/null
+#!/bin/sh
+
+REPORTBUG_VERSION=$(dpkg-query -f '${source:Version}' -W reportbug)
+
+
+# Depending on whether reportbug is new enough, we either write the output of
+# our various commands to a file and attach them to the report (this needs
+# reportbug ≥ 6.5.0) or just write them to the body of the bug report.
+if dpkg --compare-versions "$REPORTBUG_VERSION" ge "6.5.0"; then
+
+ # We don’t clean up this directory because there is no way to know when
+ # reportbug finished running, and reportbug needs the files around.
+ # Given that those are just a couple of kilobytes in size and people
+ # generally don’t file a lot of bugs, I don’t think it’s a big deal.
+ DIR=$(mktemp -d)
+
+ echo "-- BEGIN ATTACHMENTS --" >&3
+
+ udevadm info --export-db >$DIR/udev-database.txt
+ echo "$DIR/udev-database.txt" >&3
+
+ echo "-- END ATTACHMENTS --" >&3
+else
+ _header() {
+ echo "--------------" >&3
+ echo "$1:" >&3
+ echo "--------------" >&3
+ }
+
+ _header "udev database"
+ udevadm info --export-db >&3
+fi
--- /dev/null
+#!/bin/sh -e
+### BEGIN INIT INFO
+# Provides: udev
+# Required-Start: mountkernfs
+# Required-Stop:
+# Default-Start: S
+# Default-Stop:
+# Short-Description: Start systemd-udevd, populate /dev and load drivers.
+### END INIT INFO
+
+# we need to unmount /dev/pts/ and remount it later over the devtmpfs
+unmount_devpts() {
+ if mountpoint -q /dev/pts/; then
+ umount -n -l /dev/pts/
+ fi
+
+ if mountpoint -q /dev/shm/; then
+ umount -n -l /dev/shm/
+ fi
+}
+
+# mount a devtmpfs over /dev, if somebody did not already do it
+mount_devtmpfs() {
+ if grep -E -q "^[^[:space:]]+ /dev devtmpfs" /proc/mounts; then
+ mount -n -o remount,nosuid,size=$tmpfs_size,mode=0755 -t devtmpfs devtmpfs /dev
+ return
+ fi
+
+ if ! mount -n -o nosuid,size=$tmpfs_size,mode=0755 -t devtmpfs devtmpfs /dev; then
+ log_failure_msg "udev requires devtmpfs support, not started"
+ log_end_msg 1
+ fi
+
+ return 0
+}
+
+create_dev_makedev() {
+ if [ -e /sbin/MAKEDEV ]; then
+ ln -sf /sbin/MAKEDEV /dev/MAKEDEV
+ else
+ ln -sf /bin/true /dev/MAKEDEV
+ fi
+}
+
+supported_kernel() {
+ case "$(uname -r)" in
+ 2.[012345].*|2.6.[0-9]|2.6.[0-9][!0-9]*) return 1 ;;
+ 2.6.[12][0-9]|2.6.[12][0-9][!0-9]*) return 1 ;;
+ 2.6.3[0-1]|2.6.3[0-1][!0-9]*) return 1 ;;
+ esac
+ return 0
+}
+
+# shell version of /usr/bin/tty
+my_tty() {
+ [ -x /bin/readlink ] || return 0
+ [ -e /proc/self/fd/0 ] || return 0
+ readlink --silent /proc/self/fd/0 || true
+}
+
+warn_if_interactive() {
+ if [ "$RUNLEVEL" = "S" -a "$PREVLEVEL" = "N" ]; then
+ return
+ fi
+
+ TTY=$(my_tty)
+ if [ -z "$TTY" -o "$TTY" = "/dev/console" -o "$TTY" = "/dev/null" ]; then
+ return
+ fi
+
+ printf "\n\n\nIt has been detected that the command\n\n\t$0 $*\n\n"
+ printf "has been run from an interactive shell.\n"
+ printf "It will probably not do what you expect, so this script will wait\n"
+ printf "60 seconds before continuing. Press ^C to stop it.\n"
+ printf "RUNNING THIS COMMAND IS HIGHLY DISCOURAGED!\n\n\n\n"
+ sleep 60
+}
+
+make_static_nodes() {
+ [ -e /lib/modules/$(uname -r)/modules.devname ] || return 0
+ [ -x /bin/kmod ] || return 0
+
+ /bin/kmod static-nodes --format=tmpfiles --output=/proc/self/fd/1 | \
+ while read type name mode uid gid age arg; do
+ [ -e $name ] && continue
+ case "$type" in
+ c|b|c!|b!) mknod -m $mode $name $type $(echo $arg | sed 's/:/ /') ;;
+ d|d!) mkdir $name ;;
+ *) echo "unparseable line ($type $name $mode $uid $gid $age $arg)" >&2 ;;
+ esac
+
+ if [ -x /sbin/restorecon ]; then
+ /sbin/restorecon $name
+ fi
+ done
+}
+
+
+##############################################################################
+
+PATH="/sbin:/bin"
+NAME="systemd-udevd"
+DAEMON="/lib/systemd/systemd-udevd"
+DESC="the hotplug events dispatcher"
+
+[ -x $DAEMON ] || exit 0
+
+# defaults
+tmpfs_size="10M"
+
+if [ -e /etc/udev/udev.conf ]; then
+ . /etc/udev/udev.conf
+fi
+
+. /lib/lsb/init-functions
+
+if ! supported_kernel; then
+ log_failure_msg "udev requires a kernel >= 2.6.32, not started"
+ log_end_msg 1
+fi
+
+if [ ! -e /proc/filesystems ]; then
+ log_failure_msg "udev requires a mounted procfs, not started"
+ log_end_msg 1
+fi
+
+if ! grep -q '[[:space:]]devtmpfs$' /proc/filesystems; then
+ log_failure_msg "udev requires devtmpfs support, not started"
+ log_end_msg 1
+fi
+
+if [ ! -d /sys/class/ ]; then
+ log_failure_msg "udev requires a mounted sysfs, not started"
+ log_end_msg 1
+fi
+
+if ! ps --no-headers --format args ax | egrep -q '^\['; then
+ log_warning_msg "udev does not support containers, not started"
+ exit 0
+fi
+
+if [ -d /sys/class/mem/null -a ! -L /sys/class/mem/null ] || \
+ [ -e /sys/block -a ! -e /sys/class/block ]; then
+ log_warning_msg "CONFIG_SYSFS_DEPRECATED must not be selected"
+ log_warning_msg "Booting will continue in 30 seconds but many things will be broken"
+ sleep 30
+fi
+
+# When modifying this script, do not forget that between the time that the
+# new /dev has been mounted and udevadm trigger has been run there will be
+# no /dev/null. This also means that you cannot use the "&" shell command.
+
+case "$1" in
+ start)
+ if init_is_upstart 2>/dev/null; then
+ exit 1
+ fi
+
+ if [ ! -e "/run/udev/" ]; then
+ warn_if_interactive
+ fi
+
+ if [ -w /sys/kernel/uevent_helper ]; then
+ echo > /sys/kernel/uevent_helper
+ fi
+
+ if ! mountpoint -q /dev/; then
+ unmount_devpts
+ mount_devtmpfs
+ [ -d /proc/1 ] || mount -n /proc
+ fi
+
+ make_static_nodes
+
+ # clean up parts of the database created by the initramfs udev
+ udevadm info --cleanup-db
+
+ # set the SELinux context for devices created in the initramfs
+ [ -x /sbin/restorecon ] && /sbin/restorecon -R /dev
+
+ log_daemon_msg "Starting $DESC" "$NAME"
+ if $DAEMON --daemon; then
+ log_end_msg $?
+ else
+ log_warning_msg $?
+ log_warning_msg "Waiting 15 seconds and trying to continue anyway"
+ sleep 15
+ fi
+
+ log_action_begin_msg "Synthesizing the initial hotplug events"
+ if udevadm trigger --action=add; then
+ log_action_end_msg $?
+ else
+ log_action_end_msg $?
+ fi
+
+ create_dev_makedev
+
+ # wait for the systemd-udevd childs to finish
+ log_action_begin_msg "Waiting for /dev to be fully populated"
+ if udevadm settle; then
+ log_action_end_msg 0
+ else
+ log_action_end_msg 0 'timeout'
+ fi
+ ;;
+
+ stop)
+ log_daemon_msg "Stopping $DESC" "$NAME"
+ if start-stop-daemon --stop --name $NAME --user root --quiet --oknodo --retry 5; then
+ log_end_msg $?
+ else
+ log_end_msg $?
+ fi
+ ;;
+
+ restart)
+ if init_is_upstart 2>/dev/null; then
+ exit 1
+ fi
+ log_daemon_msg "Stopping $DESC" "$NAME"
+ if start-stop-daemon --stop --name $NAME --user root --quiet --oknodo --retry 5; then
+ log_end_msg $?
+ else
+ log_end_msg $? || true
+ fi
+
+ log_daemon_msg "Starting $DESC" "$NAME"
+ if $DAEMON --daemon; then
+ log_end_msg $?
+ else
+ log_end_msg $?
+ fi
+ ;;
+
+ reload|force-reload)
+ udevadm control --reload-rules
+ ;;
+
+ status)
+ status_of_proc $DAEMON $NAME && exit 0 || exit $?
+ ;;
+
+ *)
+ echo "Usage: /etc/init.d/udev {start|stop|restart|reload|force-reload|status}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
--- /dev/null
+etc/udev/
+lib/udev/*
+lib/systemd/network/*.link
+lib/systemd/system/systemd-udev*
+lib/systemd/system/systemd-hwdb*
+lib/systemd/system/*.target.wants/systemd-udev*
+lib/systemd/system/*.target.wants/*hwdb*
+lib/systemd/systemd-udevd
+bin/udevadm
+bin/systemd-hwdb
+usr/share/man/man5/udev.conf.5
+usr/share/man/man7/hwdb.7
+usr/share/man/man7/udev.7
+usr/share/man/man8/systemd-hwdb*
+usr/share/man/man8/systemd-udevd*
+usr/share/man/man8/udevadm.8
+usr/share/bash-completion/completions/udevadm
+usr/share/zsh/vendor-completions/_udevadm
+usr/share/pkgconfig/udev.pc
+../../extra/initramfs-tools usr/share/
+../../extra/rules/*.rules lib/udev/rules.d/
+#../../extra/*.hwdb lib/udev/hwdb.d/
+../../extra/fbdev-blacklist.conf etc/modprobe.d/
+../../extra/udev-helpers/* lib/udev/
+../../extra/*.link lib/systemd/network/
--- /dev/null
+/lib/systemd/system/systemd-udevd.service /lib/systemd/system/udev.service
+/bin/udevadm /sbin/udevadm
--- /dev/null
+rm_conffile /etc/init.d/udev-mtab 204-1~
+rm_conffile /etc/udev/links.conf 204-9~
+rm_conffile /etc/init.d/udev-finish 226-1~
+rm_conffile /etc/init/udev-finish.conf 226-1~
+rm_conffile /etc/init/udev-fallback-graphics.conf 226-1~
+symlink_to_dir /usr/share/doc/udev libudev1 221-2~
--- /dev/null
+#!/bin/sh -e
+
+chrooted() {
+ if [ "$(stat -c %d/%i /)" = "$(stat -Lc %d/%i /proc/1/root 2>/dev/null)" ];
+ then
+ # the devicenumber/inode pair of / is the same as that of /sbin/init's
+ # root, so we're *not* in a chroot and hence return false.
+ return 1
+ fi
+ echo "A chroot environment has been detected, udev not started."
+ return 0
+}
+
+in_debootstrap() {
+ # debootstrap --second-stage may be run in an emulator instead of a chroot,
+ # we need to check for this special case because start-stop-daemon would
+ # not be available. (#520742)
+ if [ -d /debootstrap/ ]; then
+ echo "Being installed by debootstrap, udev not started."
+ return 0
+ fi
+ return 1
+}
+
+can_start_udevd() {
+ if [ ! -d /sys/class/ ]; then
+ echo "udev requires a mounted sysfs, not started."
+ return 1
+ fi
+ return 0
+}
+
+enable_udev() {
+ can_start_udevd || return 0
+ invoke-rc.d udev start
+}
+
+update_initramfs() {
+ [ -x /usr/sbin/update-initramfs -a -e /etc/initramfs-tools/initramfs.conf ] \
+ || return 0
+ update-initramfs -u
+}
+
+upgrade_fixes() {
+ if dpkg --compare-versions "$2" lt "204-1"; then
+ # We dropped udev-mtab with udev 204.
+ update-rc.d udev-mtab remove
+ fi
+
+ if dpkg --compare-versions "$2" lt "226-1"; then
+ update-rc.d udev-finish remove
+ fi
+
+ # we enabled net.ifnames in 220-7 by default; don't change iface names in
+ # virtualized envs (where 75-persistent-net-generator.rules didn't work)
+ if dpkg --compare-versions "$2" lt-nl "220-7~" &&
+ [ ! -e /etc/udev/rules.d/70-persistent-net.rules ] &&
+ [ ! -e /etc/udev/rules.d/80-net-setup-link.rules ] &&
+ ! grep -q net.ifnames /proc/cmdline ; then
+ mkdir -p /etc/udev/rules.d
+ cat <<EOF > /etc/udev/rules.d/80-net-setup-link.rules
+# This machine is most likely a virtualized guest, where the old persistent
+# network interface mechanism (75-persistent-net-generator.rules) did not work.
+# This file disables /lib/udev/rules.d/80-net-setup-link.rules to avoid
+# changing network interface names on upgrade. Please read
+# /usr/share/doc/udev/README.Debian.gz about how to migrate to the currently
+# supported mechanism.
+EOF
+ fi
+
+ # 226 introduced predictable interface names for virtio
+ # (https://github.com/systemd/systemd/pull/1119); disable for upgrades
+ if dpkg --compare-versions "$2" lt-nl "226-2~" &&
+ [ ! -e /etc/systemd/network/50-virtio-kernel-names.link ] &&
+ ls -d /sys/bus/virtio/drivers/virtio_net/virt* >/dev/null 2>&1; then
+ echo "virtio network devices detected, disabling predictable interface names in /etc/systemd/network/50-virtio-kernel-names.link"
+ mkdir -p /etc/systemd/network/
+ cat <<EOF > /etc/systemd/network/50-virtio-kernel-names.link
+# udev 226 introduced predictable interface names for virtio;
+# disable this for upgrades. You can remove this file if you update your
+# network configuration to move to the ens* names instead.
+# See /usr/share/doc/udev/README.Debian.gz for details about predictable
+# network interface names.
+[Match]
+Driver=virtio_net
+
+[Link]
+NamePolicy=onboard kernel
+EOF
+ fi
+}
+
+update_hwdb() {
+ systemd-hwdb --usr update || true
+}
+
+# In udev-204, we ship systemd-udevd.service (upstream name), whereas previous
+# versions used udev.service. We replace udev.service with a symlink to
+# systemd-udevd.service, but systemd (both 44 and 204) exposes weird behavior:
+# After a daemon-reload, it forgets about the /sbin/udevd process in the
+# udev.service cgroup, so a restart will lead to having two udevd processes
+# running — one in the udev.service cgroup and one in the systemd-udevd.service
+# cgroup.
+#
+# To fix this, we explicitly stop udev.service and the corresponding sockets,
+# then issue the daemon-reload, then restart the new systemd-udevd.service (via
+# invoke-rc.d).
+handle_service_rename() {
+ if dpkg --compare-versions "$2" lt "204-1"; then
+ if [ -d /run/systemd/system ]; then
+ systemctl stop udev.service udev-control.socket udev-kernel.socket >/dev/null 2>&1 || true
+ fi
+ fi
+}
+
+case "$1" in
+ configure)
+ # update/create hwdb before we (re)start udev
+ update_hwdb
+
+ # Add new system group used by udev rules
+ addgroup --system input
+
+ if [ -z "$2" ]; then # first install
+ if ! chrooted && ! in_debootstrap; then
+ enable_udev
+ fi
+ else # upgrades
+ upgrade_fixes "$@"
+ if ! chrooted; then
+ if can_start_udevd; then
+ handle_service_rename
+ # This is necessary for the handle_service_rename case, but does not
+ # hurt in general (invoke-rc.d does it, too).
+ if [ -d /run/systemd/system ] ; then
+ systemctl daemon-reload || true
+ fi
+ invoke-rc.d udev restart
+ fi
+ fi
+ fi
+
+ update_initramfs
+ ;;
+
+ triggered)
+ update_hwdb
+ exit 0
+ ;;
+esac
+
+#DEBHELPER#
+
--- /dev/null
+#!/bin/sh -e
+
+case "$1" in
+ purge)
+ rm -f /etc/udev/rules.d/70-persistent-*.rules
+ rmdir --ignore-fail-on-non-empty /etc/udev/rules.d/ 2> /dev/null || true
+ rm -f /lib/udev/hwdb.bin
+ rm -f /var/log/udev
+ ;;
+esac
+
+#DEBHELPER#
--- /dev/null
+#!/bin/sh -e
+
+# adapted from postinst
+chrooted() {
+ if [ "$(stat -c %d/%i /)" = "$(stat -Lc %d/%i /proc/1/root 2>/dev/null)" ];
+ then
+ return 1
+ fi
+ return 0
+}
+
+check_kernel_features() {
+ # skip the check if udev is not already active
+ [ -d /run/udev/ ] || return 0
+
+ if [ -e /proc/kallsyms ]; then
+
+ local needed_symbols='inotify_init signalfd accept4 open_by_handle_at timerfd_create epoll_create'
+ for symbol in $needed_symbols; do
+ if ! egrep -q "^[a-fA-F0-9]+ T \.?sys_${symbol}$" /proc/kallsyms; then
+ cat <<END
+Since release 198, udev requires support for the following features in
+the running kernel:
+
+- inotify(2) (CONFIG_INOTIFY_USER)
+- signalfd(2) (CONFIG_SIGNALFD)
+- accept4(2)
+- open_by_handle_at(2) (CONFIG_FHANDLE)
+- timerfd_create(2) (CONFIG_TIMERFD)
+- epoll_create(2) (CONFIG_EPOLL)
+END
+ exit 1
+ fi
+ done
+
+ fi
+
+ if ! grep -q '[[:space:]]devtmpfs$' /proc/filesystems; then
+ cat <<END
+Since release 176, udev requires support for the following features in
+the running kernel:
+
+- devtmpfs (CONFIG_DEVTMPFS)
+END
+ exit 1
+ fi
+
+ if [ -d /sys/class/mem/null -a ! -L /sys/class/mem/null ] ||
+ [ -e /sys/block -a ! -e /sys/class/block ]; then
+ cat <<END
+The currently running kernel has the CONFIG_SYSFS_DEPRECATED option
+enabled, which is incompatible with udev.
+END
+ exit 1
+ fi
+}
+
+check_version() {
+ # $2 is non-empty when installing from the "config-files" state
+ [ -n "$2" ] || return 0
+
+ if dpkg --compare-versions $2 lt 204-4; then
+ # these must be checked first to allow aborting before changing anything
+ if chrooted; then
+ echo 'Running in a chroot, skipping the kernel versions checks!'
+ else
+ check_kernel_features
+ # suppress errors when the new rules files contain options not supported by
+ # the old daemon
+ udevadm control --log-priority=0 || true
+ fi
+ fi # 204-4
+}
+
+case "$1" in
+ install|upgrade|abort-upgrade)
+ check_version "$@"
+ ;;
+esac
+
+#DEBHELPER#
--- /dev/null
+#!/bin/sh -e
+
+# adapted from postinst
+chrooted() {
+ if [ "$(stat -c %d/%i /)" = "$(stat -Lc %d/%i /proc/1/root 2>/dev/null)" ];
+ then
+ return 1
+ fi
+ return 0
+}
+
+kill_udevd() {
+ if [ -d /run/systemd/system ]; then
+ systemctl stop systemd-udevd-control.socket systemd-udevd-kernel.socket
+ systemctl stop systemd-udevd.service
+ else
+ invoke-rc.d udev stop
+ fi
+}
+
+case "$1" in
+ remove)
+ if ! chrooted; then
+ kill_udevd
+ fi
+ ;;
+esac
+
+#DEBHELPER#
+
--- /dev/null
+interest-noawait /lib/udev/hwdb.d
--- /dev/null
+# udevmonitor - log initial device creation
+#
+# The set of devices created in the "cold plug" pass is generally
+# useful for debugging, so we monitor this and create a log file
+# from that.
+
+description "log initial device creation"
+
+start on (startup
+ and starting udevtrigger)
+stop on stopped udevtrigger
+
+exec /sbin/udevadm monitor -e >/run/udev/udev.log
--- /dev/null
+# udevtrigger - cold plug devices
+#
+# By the time udevd starts, we've already missed all of the events for
+# the devices populated in /sys. This task causes the kernel to resend
+# them.
+
+description "cold plug devices"
+
+start on (startup
+ and started udev
+ and not-container)
+
+task
+
+exec udevadm trigger --action=add
+post-stop exec udevadm settle
--- /dev/null
+# udev - device node and kernel event manager
+#
+# The udev daemon receives events from the kernel about changes in the
+# /sys filesystem and manages the /dev filesystem.
+
+description "device node and kernel event manager"
+
+start on virtual-filesystems
+stop on runlevel [06]
+
+expect fork
+respawn
+
+exec /lib/systemd/systemd-udevd --daemon
--- /dev/null
+version=3
+opts=filenamemangle=s/.+\/v?(\d\S*)\.tar\.gz/systemd-$1\.tar\.gz/ \
+ https://github.com/systemd/systemd/tags .*/v?(\d\S*)\.tar\.gz