|
|
Subscribe / Log in / New account

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.



to post comments

Debugging?

Posted Nov 18, 2010 13:50 UTC (Thu) by Yenya (subscriber, #52846) [Link] (10 responses)

I can remember many times when I have fixed the problem during system startup by adding a temporary fix into rc.sysinit or another startup script. Even adding "set -x" near the top of rc.sysinit can show what is the system trying (and failing) to do.

Having a shell-less system boot is nice, but how is debugging supposed to work?

Debugging?

Posted Nov 19, 2010 14:35 UTC (Fri) by zdzichu (subscriber, #17118) [Link] (9 responses)

You can redirect all output from misbehaving application into syslog. You can ask systemd to display almost everything during runtime (systemd.log_level=). You can run emergency shell at any point (kbrequest.target). You can change almost any of over hundred unit properties (# systemctl show --all ntpd.service | wc -l
117).

List exact modification you had to do in script and we will try to provide you systemd equivalent.

Debugging?

Posted Nov 19, 2010 14:48 UTC (Fri) by jackb (guest, #41909) [Link] (1 responses)

How does that emergency shell work? The biggest problems I've had with OpenRC is that if a service fails to come up for some reason it's possible for the boot to hang forever and never give me a terminal so that I can log in and fix the problem.

Debugging?

Posted Nov 19, 2010 18:12 UTC (Fri) by mezcalero (subscriber, #45103) [Link]

Note that by default all services have a timeout assigned, which is 1min for native and 3min for sysv services. You can change or disable the timeout individually. In fact there are even two timeouts in place: one will terminate a service that fails to start after a certain amount of time, and the other will simply dictate that jobs depending on it will not wait any longer for it to finish. You can control both timeouts individually.

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.

Debugging?

Posted Nov 19, 2010 15:51 UTC (Fri) by Yenya (subscriber, #52846) [Link] (5 responses)

> List exact modification you had to do in script
> and we will try to provide you systemd equivalent.

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!

Debugging?

Posted Nov 19, 2010 18:20 UTC (Fri) by mezcalero (subscriber, #45103) [Link] (4 responses)

Use systemd.log_target=debug on the kernel cmdline to figure out what exactly systemd is doing.

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.

Debugging?

Posted Nov 20, 2010 9:39 UTC (Sat) by quotemstr (subscriber, #45331) [Link] (3 responses)

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?

Posted Nov 20, 2010 17:02 UTC (Sat) by foom (subscriber, #14868) [Link] (2 responses)

Most of the reasons I've ever needed to edit a init.d script is because the init.d script sucked, not the thing it was starting. IMO systemd has the potential to eliminate that problem entirely...

Debugging?

Posted Nov 20, 2010 19:51 UTC (Sat) by quotemstr (subscriber, #45331) [Link] (1 responses)

Erm, so your assertion is that systemd will magically lead to bug-free initialization that doesn't need workarounds? "systemd works fine as long as the initialization configuration is perfect" is a rather weak argument.

Debugging?

Posted Nov 21, 2010 4:12 UTC (Sun) by foom (subscriber, #14868) [Link]

No, my point was that most of the problems I've had have been because of all the duplicate crud in init.d shell scripts which have been copied incorrectly while being cargo-culted from program to program. So, my problems won't have a chance to happen, because the description of how to manage a daemon in systemd is so much shorter and harder to screw up.

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...

Debugging?

Posted Nov 19, 2010 18:09 UTC (Fri) by mezcalero (subscriber, #45103) [Link]

Let's not forget that with systemd.confirm_spawn=1 on the kernel cmdline you can enforee an interactive boot where spawning of every process needs to be OK'eyed by the user. Also, after boot you can introspect what exactly happened to a service that failed by typing "systemctl status foobar.service". It will automatically record exit code/signal and timestamp. Also, by default all system services are redirected to syslog.


Copyright © 2010, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds