Commit Graph
9757 Commits
Author SHA1 Message Date
Lennart Poettering c221420be8 core: add support to run transient units in arbitrary slices 2013-07-01 03:02:42 +02:00
Lennart Poettering d28e9236e7 core: parse Slice= from the unit type specific unit file section
Since not all unit types know Slice= it belongs in the unit type
specific unit file section.
2013-07-01 02:52:17 +02:00
Lennart Poettering adb3a45d9a scope: properly implement passive validity checking of PIDs field when creating transient scopes 2013-07-01 02:47:11 +02:00
Lennart Poettering d7550a6752 core: move ControlGroup and Slice properties out of the dbus "Unit" interface
Slice/ControlGroup only really makes sense for unit types which actually
have cgroups attached to them, hence move them out of the generic Unit
interface and into the specific unit type interfaces.

These fields will continue to be part of Unit though, simply because
things are a log easier that way. However, regardless how this looks
internally we should keep things clean and independent of the specific
implementation of the inside.
2013-07-01 02:45:02 +02:00
Lennart Poettering 9f2e86af06 core: allow setting of the description string for transient units 2013-07-01 00:40:56 +02:00
Lennart Poettering 6c12b52e19 core: add new "scope" unit type for making a unit of pre-existing processes
"Scope" units are very much like service units, however with the
difference that they are created from pre-existing processes, rather
than processes that systemd itself forks off. This means they are
generated programmatically via the bus API as transient units rather
than from static configuration read from disk. Also, they do not provide
execution-time parameters, as at the time systemd adds the processes to
the scope unit they already exist and the parameters cannot be applied
anymore.

The primary benefit of this new unit type is to create arbitrary cgroups
for worker-processes forked off an existing service.

This commit also adds a a new mode to "systemd-run" to run the specified
processes in a scope rather then a transient service.
2013-07-01 00:18:00 +02:00
Lennart Poettering a190eeb884 snapshot: snapshots are just a special kind of transient units now 2013-07-01 00:18:00 +02:00
Lennart Poettering 6a95dff87d dbus: expose cgroup properties in introspection everywhere 2013-07-01 00:18:00 +02:00
Lennart Poettering 64fad95a32 service: correct service bus introspection for timeouts 2013-07-01 00:17:59 +02:00
Lennart Poettering b56c28c31a cgroup: implicitly add units to GC queue when their cgroups run empty 2013-07-01 00:17:59 +02:00
Lennart Poettering 0a1eb06d9a cgroup: readd proper cgroup empty tracking 2013-07-01 00:17:59 +02:00
Lennart Poettering 11ddb6f48e main: fix loading of default target 2013-06-28 18:37:15 +02:00
Lennart Poettering c2756a6840 core: add transient units
Transient units can be created via the bus API. They are configured via
the method call parameters rather than on-disk files. They are subject
to normal GC. Transient units currently may only be created for
services (however, we will extend this), and currently only ExecStart=
and the cgroup parameters can be configured (also to be extended).

Transient units require a unique name, that previously had no
configuration file on disk.

A tool systemd-run is added that makes use of this functionality to run
arbitrary command lines as transient services:

$ systemd-run /bin/ping www.heise.de

Will cause systemd to create a new transient service and run ping in it.
2013-06-28 04:12:58 +02:00
Lennart Poettering 1508e85878 dbus: fix minor memory leak when sending job change signals 2013-06-28 03:47:40 +02:00
Lennart Poettering 241da3287d unit: make sure the dropins we write are high-priority 2013-06-28 00:41:24 +02:00
Lennart Poettering 74c964d369 dbus: hookup runtime property changes for mouns, services, sockets, swaps too 2013-06-27 23:21:21 +02:00
Lennart Poettering 7041efe960 dbus: make DeviceAllow=/DevicePolicy= writable 2013-06-27 23:13:17 +02:00
Lennart Poettering b42defe3b8 dbus: make more cgroup attributes runtime settable 2013-06-27 21:50:35 +02:00
Lennart Poettering 8e2af47840 dbus: add infrastructure for changing multiple properties at once on units and hook some cgroup attributes up to it
This introduces two bus calls to make runtime changes to selected bus
properties, optionally with persistence.

This currently hooks this up only for three cgroup atributes, but this
brings the infrastructure to add more changable attributes.

This allows setting multiple attributes at once, and takes an array
rather than a dictionary of properties, in order to implement simple
resetting of lists using the same approach as when they are sourced from
unit files. This means, that list properties are appended to by this
call, unless they are first reset via assigning the empty list.
2013-06-27 21:14:56 +02:00
Lennart Poettering 4ad490007b core: general cgroup rework
Replace the very generic cgroup hookup with a much simpler one. With
this change only the high-level cgroup settings remain, the ability to
set arbitrary cgroup attributes is removed, so is support for adding
units to arbitrary cgroup controllers or setting arbitrary paths for
them (especially paths that are different for the various controllers).

This also introduces a new -.slice root slice, that is the parent of
system.slice and friends. This enables easy admin configuration of
root-level cgrouo properties.

This replaces DeviceDeny= by DevicePolicy=, and implicitly adds in
/dev/null, /dev/zero and friends if DeviceAllow= is used (unless this is
turned off by DevicePolicy=).
2013-06-27 04:17:34 +02:00
Lennart Poettering abb26902e4 core: don't do runaway fork()s if we hit a segfault from our segfault handler 2013-06-27 04:17:33 +02:00
Zbigniew Jędrzejewski-Szmek 5841bd803f killall: do not use alloca() in argument list
It is not allowed.
2013-06-26 19:52:00 -04:00
Auke Kok ed002560a1 core: only attempt to connect to a session bus if one likely exists. 2013-06-20 23:37:04 +02:00
Umut Tezduyar 97d0e5f83b manager: add DefaultEnvironment option
This complements existing functionality of setting variables
through 'systemctl set-environment', the kernel command line,
and through normal environment variables for systemd in session
mode.
2013-06-20 16:27:45 -04:00
Lennart Poettering 9444b1f20e logind: add infrastructure to keep track of machines, and move to slices
- This changes all logind cgroup objects to use slice objects rather
  than fixed croup locations.

- logind can now collect minimal information about running
  VMs/containers. As fixed cgroup locations can no longer be used we
  need an entity that keeps track of machine cgroups in whatever slice
  they might be located. Since logind already keeps track of users,
  sessions and seats this is a trivial addition.

- nspawn will now register with logind and pass various bits of metadata
  along. A new option "--slice=" has been added to place the container
  in a specific slice.

- loginctl gained commands to list, introspect and terminate machines.

- user.slice and machine.slice will now be pulled in by logind.service,
  since only logind.service requires this slice.
2013-06-20 03:49:59 +02:00
Zbigniew Jędrzejewski-Szmek c25b1ee6cd core/dbus: properly export cgroup properties on sockets
https://bugs.freedesktop.org/show_bug.cgi?id=65945
2013-06-19 18:09:54 -04:00
Lennart Poettering 702a2d8f6a core: unref slice ref after use 2013-06-18 02:07:35 +02:00
Lennart Poettering 4ec9a8a48d core: expose a "Slice" property on Unit objects on the bus 2013-06-18 01:00:13 +02:00
Lennart Poettering a016b9228f core: add new .slice unit type for partitioning systems
In order to prepare for the kernel cgroup rework, let's introduce a new
unit type to systemd, the "slice". Slices can be arranged in a tree and
are useful to partition resources freely and hierarchally by the user.

Each service unit can now be assigned to one of these slices, and later
on login users and machines may too.

Slices translate pretty directly to the cgroup hierarchy, and the
various objects can be assigned to any of the slices in the tree.
2013-06-17 21:36:51 +02:00
Lennart Poettering 602c0e740f mount: when learning about the root mount from mountinfo, don't add conflicting dep for umount.target
That way systemd won't try to umount it at shutdown.
2013-06-17 21:12:53 +02:00
Lennart Poettering ed8086d119 rpm: define a %_userunitdir macro 2013-06-17 18:37:25 +02:00
Zbigniew Jędrzejewski-Szmek 507f22bd01 Use stdint.h macros instead of casts to print uint64_t values
Casts are visually heavy, and can obscure unwanted truncations.
2013-06-10 10:10:07 -04:00
Ross Lagerwall 62220cf70e service: don't report alien child as alive when it's not
When a sigchld is received from an alien child, main_pid is set to
0 then service_enter_running calls main_pid_good to check if the
child is running.  This incorrectly returned true because
kill(main_pid, 0) would return >= 0.

This fixes an error where a service would die and the cgroup would
become empty but the service would still report as active (running).
2013-06-09 18:26:41 -04:00
Lennart Poettering af4713396c service: execute ExecStopPost= commands when the watchdog timeout hits
We can assume that a service for which a watchdog timeout was triggered
is unresponsive to a clean shutdown. However, it still makes sense to
execute the post-stop cleanup commands that can be configured with
ExecStopPost=. Hence, when the timeout is hit enter STOP_SIGKILL rather
than FINAL_SIGKILL.
2013-06-06 09:10:12 +02:00
Chengwei Yang 1cce5d639c manager: Do not handle SIGKILL since we can not
This is a minor fix because it's not a major issue, this fix just avoid
to get EINVAL error from sigaction(2).

There are two signals can not handled at user space, SIGKILL and
SIGSTOP even we're PID 1, trying to handle these two signals will get
EINVAL error.

There are two kinds of systemd instance, running as system manager or
user session manager, apparently, the latter is a general user space
process which can not handle SIGKILL. The special pid 1 also can not
do that refer to kernel/signal.c:do_sigaction().

However, pid 1 is unkillable because the kernel did attach
SIGNAL_UNKILLABLE to it at system boot up, refer to
init/main.c:start_kernel()
    --> rest_init()
        --> kernel_thread()
            --> kernel_init()
                --> init_post()
                    current->signal->flags |= SIGNAL_UNKILLABLE
2013-06-06 08:58:58 +02:00
Thomas Hindoe Paaboel Andersen d9acfb71db analyze: show unit file loading on plot
This will add another color to the legend called "Loading unit files"
Like the generators it will mark a part of the systemd bar indicating
the time spent while loading unit files.
2013-06-02 22:26:13 +02:00
Umut Tezduyar 518d10e985 analyze: show generators on plot 2013-06-02 22:26:05 +02:00
Zbigniew Jędrzejewski-Szmek 1058cbf2ad systemctl: suggest 'systemctl daemon-reload' without --system
--system is default anyway, and some poor user might type 9
characters without needing to.
2013-05-30 20:44:41 -04:00
Václav Pavlín 99504dd4c1 systemctl: add commands set-default and get-default
systemctl set-default NAME links the default.target to the given unit,
get-default prints out the path to the currently set default target.
2013-05-30 20:44:41 -04:00
Lukas Nykryn 9749cd77bc core: read "debug" from kernel commandline and set log level 2013-05-30 00:43:39 -04:00
Nirbheek Chauhan cb0edd735c core: use the same test as upstart for apparmor
Lennart:
> Hmm, I just noticed this patch:
>
> https://code.launchpad.net/~mdeslaur/upstart/apparmor-support/+merge/164169
>
> It contains a different check for AppArmor. Basically something like this:
>
> /sys/module/apparmor/parameters/enabled == 'Y'
>
> I'd prefer if we could change our code to do the same, given that
> the Ubuntu guys are guys are upstream for apparmor.

https://bugs.freedesktop.org/show_bug.cgi?id=63312
2013-05-30 00:43:39 -04:00
Eelco Dolstra ccd90a976d Fix CPUShares configuration option
This fixes the error message "Unknown or unsupported cgroup attribute
CPUShares".
2013-05-30 00:43:38 -04:00
Zachary Cook 4f8d551ff0 systemd: record efi timestamps after /sys is mounted
This partially reverts commit c3a170f3, which moved
efi_get_boot_timestamps too early in main(), before
/sys is assured to be mounted

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=64371

[tomegun: in particular /sys/firmware/efi/efivars needs to be
mounted, which is not a problem if a systemd-initramfs containing
the correct module is being used. But not everyone uses an
initramfs...]
2013-05-29 15:36:05 +02:00
Michael Olbrich 9e9c3abcfa service: kill processes with SIGKILL on watchdog failure
Just calling service_enter_dead() does not kill any processes.
As a result, the old process may still be running when the new one is
started.

After a watchdog failure the service is in an undefined state.
Using the normal shutdown mechanism makes no sense. Instead all processes
are just killed and the service can try to restart.
2013-05-21 09:23:51 -04:00
Michal Schmidt b69bd56815 core: fix DBus property ExecMainExitTimestamp
Possibly due to copy&paste error it was identical to
ExecMainStartTimestamp.
2013-05-20 16:17:38 +02:00
Karol Lewandowski 2b3e18de74 Make it possible to disable smack separately from xattr support
Additionally, compile out rule loading if feature is disabled.
2013-05-17 09:58:28 -07:00
Auke Kok 9d995d54b5 Add support for ConditionSecurity=ima
Just as with SMACK, we don't really know if a policy has been
loaded or not, as the policy interface is write-only. Assume
therefore that if ima is present in securityfs that it is
enabled.

Update the man page to reflect that "ima" is a valid option
now as well.
2013-05-11 13:42:55 -07:00
Auke Kok a41f47abd3 Re-indent with spaces. 2013-05-11 13:35:38 -07:00
Eelco Dolstra f49fd1d57a Start ctrl-alt-del.target irreversibly
This makes ctrl-alt-del reboots more robust, just like "systemctl
reboot".
2013-05-09 18:13:33 -04:00
Karol Lewandowski b62ee5249d condition, man: Add support for ConditionSecurity=smack
According to Documentation/security/Smack.txt:
  In keeping with the intent of Smack, configuration data is minimal
  and not strictly required. The most important configuration step is
  mounting the smackfs pseudo filesystem.
This means that checking the mount point should be enough.
2013-05-08 22:24:37 -04:00