systemd v12 released
| From: | Lennart Poettering <lennart-AT-poettering.net> | |
| To: | systemd Mailing List <systemd-devel-AT-lists.freedesktop.org> | |
| Subject: | [ANNOUNCE] systemd v12 | |
| Date: | Wed, 17 Nov 2010 01:44:02 +0100 | |
| Message-ID: | <20101117004402.GA3347@tango.0pointer.de> |
Heya, http://www.freedesktop.org/software/systemd/systemd-12.ta... Quite a number of new features. I'll probably do another blog story about all of this one of the next days. Here's the exciting stuff, and below the detailed stuff: - Bash completion support for systemctl - Handling of cryttab, fsck, quota, and shutdown in pure C, a normal desktop system should be able to boot without a single shell now. - Automatically kill remaining user sessions when going down. - Ubuntu support. Yay, welcome to the club! - We got rid of --session and replaced it with --user. - A working infrastructure to query system-level passphrases (LUKS, SSL, ...) via UI agents, plymouth, console, wall. - condition logic, which allows us to skip services based on existance of file, kernel command line option, or whether a directory is empty. If they are skipped they are still useful for synchronization purposes. - "generator" logic. A really minimal facility to allow others projects to generate unit files dynamically and integrate them in the systemd dependency tree. The crypttab support is implemented as a generator, which allows us to support cryptodisks without polluting the code of systemd itself with handling this. Other thinkable generators could be stuff that generates an automatic .service file for each lxc or kvm machine configured. - support for initrd-less booting but with selinux - 'systemctl kill' for sending signals to all processes of a service - tmpfiles now integrates automatic cleanup op directories it manages, a la tmpwatch The cryptsetup logic currently does everything the Fedora logic used to do, plus a couple of features Debian had on top of that. However, Debian has a couple of more, and while I think they are more on the crazy side of things I am not opposed to adding support for those too, and would be wiling to merge a patch. Shortlog: Andrew Edmunds (3): ubuntu: Treat Ubuntu as a distinct distro in configure.ac etc util: Add welcome message for Ubuntu man: Fix various typos Andrey Borzenkov (4): main: fix typo in kernel cmdline parameters help socket: fix IPv6 availability detection do not overwrite other udev tags vconsole: support additional keymap for toggling layouts Bill Nottingham (9): tmpfiles: Make wtmp match utmp perms, and add btmp. tmpfiles: Don't clean /var/lock/subsys; it is not aged content Fedora: Don't ship a init.d reboot symlink. Fedora: Assorted tweaks to Fedora single-user mode. Fedora: further unit tweaks Fedora: don't ship [Install] sections; these are enabled in the system configuration. Fedora: by default, run prefdm last to match prior behavior. Fedora: Make systemunitdir/graphical.target.wants on 'make install'. Fedora: Link graphical-target.wants to the virtual display-manager.service, not the specific prefdm.service. Brandon Philips (1): man/tmpfiles.d.xml: add a manpage for tmpfiles.d Fabiano Fidencio (6): util: Adding a strneq, to represent (!strncmp(a, b, n)) umount: Adding unmount functions to be used in shutdown shutdown: Adding binary to shutdown the system README: Check for libudev-160, as in configure.ac manager: hookup execution of systemd-shutdown helper vala: register new D-Bus calls Franz Dietrich (2): units: Since killall.service does not exist anymore remove all references. units: Remove the distro specific references to killall.service. Gustavo Sverzut Barbieri (2): tmpfiles: consider TRUNCATE_DIRECTORY as well. build-sys: dbus-glib is just required by gtk's systemadm Kay Sievers (14): use common names: fixme -> TODO, bootstrap.sh -> autogen.sh systemd-shutdown: add umount.h to sources move .h file from SOURCES to DIST to make vala autotools happy fsck: drop -C from fsck cmdline to avoid EPIPE TODO: add getty on-demand, man: --system TODO: /proc/swaps is poll()able now getty@.service: switch to agetty as the default fsck: skip checking / if it is writable fsck: return SUCCESS when we skip the check update TODO with mtab issue split mount_point_is_api() and mount_point_ignore() update TODO update TODO delete tmp.mount which may conflict with an unrelated fstab entry Lennart Poettering (228): sd-daemon: in some places sizeof(sa_family_t) actually does make sense util: unify implementations of freeze() shutdown: create /var/run/nologin instead of /etc/nologin which is supported since PAM 1.1.2 shutdown: drop redundant read_only bool var shutdown: drop last referral to mp->read_only user-sessions: add minimal utility to kill user sessions that shall be called before destroying services on shutdown user-sessions: properly unlink both nologin files systemd-user-sessions: install .service file and enable by default update fixme unit: introduce 'banned' load state for units symlinked to /dev/null mount: properly handle NULL fstype service: increase default timeout for sysv scripts to 3min systemctl: fix 'systemctl enable getty@.service' service: optionally, create INIT_PROCESS/DEAD_PROCESS entries for a service unit: rename 'banned' load state to 'masked' util: don't specifically check for the /dev/null major/minor, just check whether something is a char or block device units: enable utmp for serial gettys too service: introduce Restart=on-failure and Restart=on-abort update fixme systemctl: show whether we follow somebody in 'status' output systemctl: drop [] around date in status output mount: minor cleanups swap: major rework, use /sbin/swapon for setting up swaps, fix merging of aliased swap disks unit: add minimal condition checker for unit startup inotify: properly handle multiple inotify events per read() lookup: look for dynamic throw-away units in /dev/.systemd/system dbus: add introspection to midlevel paths systemctl: warn if user enables unit with no installation instructions mount: hook in q fsck@.service instance for all mount points with passno > 0 mount: pull in fsck only in systemd instances condition: fix copyright umount: unescape path from /proc/self/mountinfo first, then check against api mount list umount: properly enumerate loopback devices umount: simplify code for deactivating loop devices umount: be a bit more verbose when unable to umount/unswap/delete loopbacks shutdown: don't chdir to /, since init is running with / as cwd anyway shutdown: execute rescue kill only once shutdown: make use of wait_for_terminate_and_warn() dbus: expose shutdown helper via D-Bus manager: hookup shutdown helper and signals systemctl: rework halt/reboot/poweroff/kexec/exit logic around --force units: introduce kexec.service, kexec.target and exit.target shutdown: log to console by default umount: try to get rid of DM devices units: get rid of distro-specific shutdown scripts, replace them by systemd-shutdown invocations units: introduce final.target that can be used to plug units between shutdown.target and the final shutdown systemctl: accept -f as short for --force fedora: add compat unit for /sbin/halt.local umount: disable dm devices by devnode, not by path name update fixme shutdown: loop only as long as we manage to unmount/detach devices, give up immediately when we are stuck tmpfiles: integrate kay's directory cleanup code and otherwise beef up tmpfiles quite a bit manager: serialize/deserialize finish timestamp util: ignore quota files by default label: if the selinux policy knows no label, then silently don't do anything swap: listen for POLLPRI events on /proc/swaps if available tmpfiles: remove forcefsck/fastboot flag files after boot label: don't fail miserably if filesystem doesn't do xattrs/labels tmpfiles: destruct selinux database after use man: properly refer to $MAINPID instead of $(MAINPID) which doesnt work anymore man: extend commenting of .spec file snippets a bit systemctl: fix counting in list-units output fsck: add initial version of fsck and quotacheck wrappers fsck: be verbose when skipping fsck due to missing AC fsck: atomically replace base.target by rescue.target/reboot.target when fsck fails fsck: properly hook in fsck everywhere, add special support for fsck'ing root dir fsck: make fsck idempotent units: add missing fsck units fsck: don't be idempotent for root directories log: reopen console so that we have logging on shutdown service: implement FsckPassNo= option units: properly use ConditionPathExists= instead of ConditionFileExists= mount: do not implicitly pull in fsck service for root dir manager: properly write header marker on serialization manager: properly parse finish timestamp mount: require fsck mount: pull in quotacheck.service, not quotacheck.target fsck: wait for device to show up quota: add install hooks for basic.target quota: enable quotaon/quotacheck in local-fs.target, not basic.target install: enable quota/fsck-root/hwclock load by default unit: introduce %f specifier to decode file names quota: fix quotaon command line syslog: enable kmsg bridge by default and enable syslogging for early boot services units: order syslog.target after syslog.socket systemctl: introduce systemctl kill man: document systemctl --force dbus: epose FsckPassNo property for service objects fsck: suppress error message if we cannot change into single user mode since we are already passt early bootup man: numerous updates to document updated systemctl behaviour update fixme ask-password: rename ask-password-agent to gnome-ask-password-agent ask-password: add basic tty agent update fixme units: activate wall agent automatically if something is dropped in /dev/.systemd/ask-password systemd: unset HOME and TERM set from the kernel mount: add nosuid,nodev,noexec switches to /var/lock and /var/run update fixme update fixme main: don't unset HOME/TERM when run in session mode service: make sure to pass TERM=linux to all sysv scripts units: now that we don't set TERM anymore by default, make sure to pass it to our rescue sessions ask-password: add minimal plymouth password agent ask-password: enable plymouth agent by default ask-password: properly handle multiple pending passwords when writing wall msg systemctl: automatically spawn temporary password agent when we might need one ask-password-tty: properly handle SIGINT/SIGTERM exec: fix dbus exposure of UtmpIdentifier field shutdown: properly handle sigtimedwait() timing out readahead: bump a device's request_nr when enabling readahead swap: expose swap exec env proprties via dbus swap: add default cgroup to swap exec env errors: refer to systemctl status when useful swap: add only swaps listed in /etc/fstab automatically to swap.target, others should be added via .wants/ links build-sys: fix 'make fedora' update fixme man: be more explicit about the usefulness of --system unit: serialize active timestamps service: when after startup only one process is in a service's cgroup, assume it is the main process units: run sysv related scripts with TERM=linux main: move make_null_stdio() to util.c selinux: automatically load policy if the initrd hasn't done this for us yet mounts: automatically create /dev/stderr and friends early on boot so that they are around when we run shell scripts before udevd update fixme swap: there's no reason not order swap after sysinit, so drop it unit: suppress incorrect deserialization errors device: set recursive_stop=true by default service: unify tstamp serialization code unit: replace recursive_stop by stop_retroactively to simplify things a little timer: when deserializing timer state stay elapsed when we are elapsed manager: show which jobs are actually installed after a transaction shutdown: reword a few messages a little systemctl: always show what and where for mount units in status output units: run sysctl only if /etc/sysctl.conf exists automount: show who's triggering an automount unit: replace StopRetroactively= by BindTo= dependencies unit: get rid of gnoreDependencyFailure= instead treat ConflictedBy= as weaker counterpart of Conflicts=, similar to Wants= vs. Requires= update fixme fedora: get rid of sysinit.service units: introduce plymouth-start and plymouth-kexec, and move a few things back from basic to sysinit units: make fedora/single.service standard and rename it to rescue.service units: no need to create rescue.target.wants anymore fedora plymouthd doesn't seem to like --attach-to-session here units: fix quota check description fedora: enable system mounting/swapping by default units: order units by default before appropriate targets in case they are pulled indirectly fsck: fix target name to check for job: recursively fail BoundBy dependencies mount: don't pull in nofail mounts by default, but use them if they are around units: fix variable expansion fedora: invoke plymouth with its /bin instead of the /usr/bin/ path fedora: /bin/plymouth --sysinit is not necessary on shut down units: add unit to call /bin/plymouth update-root-fs --read-write fsck: add new -l switch to fsck mount options fedora: start plymouth after udev-settle, so that the graphics modules are loaded readahead: shortcut replay if /.readahead doesn't exist manager: only minimize impact if we are in fail mode manager: when isolating undo all pending jobs, too update fixme service: delay automatic restart if job is pending log: downgrade syslog connection failure message since it might happen during normal operation selinux: relabel /dev after loading policy cryptsetup: minimal cryptsetup unit generator label: use internal utility functions wher epossible modules-load: fix minor race manager: parse RD_TIMESTAMP passed from initrd ac-power: make ac-power a proper binary that scripts can call unit: add ConditionNull= condition main: rename process on startup to 'systemd' to avoid confusion man: minor tmpfiles(5) updates and reindenting main: warn if /etc/mtab is not a symlink tmpfiles: include reference to man page in tmpfiles files units: deal properly with the fact that agetty is called getty on Debian mount: don't relabel /dev twice in a row build-sys: fix usage of path macros manager: hookup generators cryptsetup: hook up tool with ask-password log: add automatic log target log: fix build cryptsetup: automatically start cryptsetup when looking for mount source manager: be a bit more verbose if we receive unknown epoll event ask-password: properly NULL terminate table ask-password: ignore unknown query file fields ask-password: refer to right binary name in wall message ask-password: don't show wall message on ttys we are already running a tty agent on ask-password: leave printing of final prompt colon to message update fixme cryptsetup: support non-LUKS crypto partitions cryptsetup: properly parse cipher= switch cryptsetup: handle password=none properly udev: ignore temporary udev devices load-fragment: properly do comparison of words tmpfiles: ignore files marked with the sticky bit job: make it possible to wait for devices to be unplugged pam: rename 'no-session' to 'user' cgroup manager: don't fail transaction if adding CONFLICTED_BY job fails units: make use of agetty mandatory util: always highlight distro name manager: always pull 'following' units into transaction path: always look for IN_ATTRIB since deletion is signalled that way path: avoid immediate restarting of units triggered by paths if nothing actually changed on disk manager: consider jobs already installed as redundant when reducing new transactions cryptsetup: bind cryptsetup service to both source and destination device load-dropin: add support for .requires directories units: get rid of no_requires unit flag, and make crypto disks require cryptsetup service build-sys: make check for libnotify explicit unit: introduce ConditionDirectoryNotEmpty= units: use ConditionDirectoryNotEmpty= where applicable manager: ignore invalid epoll events path: properly free PathSpec structs drop support for MANAGER_SESSION, introduce MANAGER_USER instead pam: rename master user cgroup to 'master' exec: automatically determine right TERM= setting based on tty name cgroup: call root cgroup system instead of systemd-1 pam: always rely on loginuid instead of uid to determine cgroup and XDG_RUNTIME_DIR units: delay getty until logins are allowed units: enable ask-paswword .path units early enough to be useful for early mounts units: allow start-up of plymouth ask-password agent very early units: set TERM for gettys again, since they acquire a TTY on their own plymouth: use updated socket name cryptsetup: lock ourselves into memory as long as we deal with passwords cryptsetup: include device name in password question path: don't mention too many inotify msgs units: order hwclock after readahead cryptsetup: reword questions a little ask-password: add --console mode to ask questions on /dev/console update TODO build-sys: prep release 12 Lucas De Marchi (1): vconsole-setup: fix path on Arch Matthias Clasen (1): build-sys: fix building against libnotify 0.7 Michael Biebl (3): umount: Make sure / is remounted ro on shutdown Revert "fsck: add new -l switch to fsck mount options" Remove umount*.service files for Debian Mike Kazantsev (1): service: fix sysv-less build Ran Benita (1): add bash completion for systemctl --system Tom Gundersen (3): unit-name: Fix unescaping fsck: remove symlink from fsck.target to sysinit.target arch: remove obsolete sysinit.service Lennart -- Lennart Poettering - Red Hat, Inc.
Posted Nov 18, 2010 13:50 UTC (Thu)
by Yenya (subscriber, #52846)
[Link] (10 responses)
Having a shell-less system boot is nice, but how is debugging supposed to work?
Posted Nov 19, 2010 14:35 UTC (Fri)
by zdzichu (subscriber, #17118)
[Link] (9 responses)
List exact modification you had to do in script and we will try to provide you systemd equivalent.
Posted Nov 19, 2010 14:48 UTC (Fri)
by jackb (guest, #41909)
[Link] (1 responses)
Posted Nov 19, 2010 18:12 UTC (Fri)
by mezcalero (subscriber, #45103)
[Link]
Since timeouts are opt-out, not opt-in, even if some daemon freezes the worst that happens in most cases is that your boot is delayed for a minute and you can then introspect what was going on afterwards with "systemctl list-units", "systemctl status" and dmesg/syslog.
Posted Nov 19, 2010 15:51 UTC (Fri)
by Yenya (subscriber, #52846)
[Link] (5 responses)
OK, here are few I can think about right now:
- using "set -x" to see where the things went wrong.
- loading a different firmware to the storage controller before non-root volumes are scanned
- adding a sleep command in order to give the disks chance to get detected properly
- adding another md rescan in order to build a raid-0 of raid-1 volumes (poor man's raid-10, before the native raid-10 was available)
- lowering the insane TCQ depth of the 3ware controller in order to make it smaller than the iosched queue length and give the iosched chance to do anything useful before the root is fscked and mounted r/w
- loading a non-standard crypto module in order to have a non-root volume accessible by LUKS (before the non-root volumes are probed)
etc. Thanks for providing systemd equivalents of these tasks!
Posted Nov 19, 2010 18:20 UTC (Fri)
by mezcalero (subscriber, #45103)
[Link] (4 responses)
The correct place to load firmware into controllers is from a udev hook. Similar for patching your TCQ depth.
There's no need to add sleep commands and such since systemd is fully dynamic and actually binds fsck/mount to the device actually showing up. i.e. it is unnecessary to resort to hacks such as adding sleeps everywhere since systemd waits exactly for what it needs to wait for (i.e. what is listed in fstab, ...) before proceeding with the boot.
If you want to statically load arbitrary modules, simply place them in /etc/modules-load.d/foobar.conf (replace foobar by whatever you like), and they will be loaded at the same time as udev loads all other modules. However, usually it's a better approach to fix the kernel module to be loaded implicitly on request. In fact most kernel modules already work like that and statically loading modules is only needed in exceptional cases.
Note that at this time we still rely on the old scripted raid setup code anyway. You can continue to edit that as necessary. In the future stc will hopefully support this more correctly and dynamically and set things up as needed without resorting to manual intervention.
Posted Nov 20, 2010 9:39 UTC (Sat)
by quotemstr (subscriber, #45331)
[Link] (3 responses)
Posted Nov 20, 2010 17:02 UTC (Sat)
by foom (subscriber, #14868)
[Link] (2 responses)
Posted Nov 20, 2010 19:51 UTC (Sat)
by quotemstr (subscriber, #45331)
[Link] (1 responses)
Posted Nov 21, 2010 4:12 UTC (Sun)
by foom (subscriber, #14868)
[Link]
Obviously it's possible to have other kinds of problems too...If you want to call sleep 1 before starting a daemon there's nothing stopping you from replacing the start command-line with a shell script that calls sleep 1 before starting the daemon. Even in systemd that should work...
Posted Nov 19, 2010 18:09 UTC (Fri)
by mezcalero (subscriber, #45103)
[Link]
Debugging?
Debugging?
117).
Debugging?
Debugging?
Debugging?
> and we will try to provide you systemd equivalent.
Debugging?
Of course you can do things the "right way" by hooking into configuration infrastructure. But the OP's point was that conventional scripts make ad hoc modifications easy. It's perfectly reasonable to create an interim local solution without needing to dive into the details of arcane subsystmes. In theory, you shouldn't need band-aids like sleep(1) invocations, but in practice, the need comes up once in a while. It's better to accommodate that need instead of denying it.
Debugging?
Debugging?
Debugging?
Debugging?
Debugging?
