Commit Graph
5546 Commits
Author SHA1 Message Date
John Paul Adrian Glaubitz 202145c07a basic/architecture: Properly set LIB_ARCH_TUPLE for powerpcspe
On powerpc, there are two possible ABIs and hence values for
LIB_ARCH_TUPLE. The convential type with an FPU and the embedded
variant, called powerpcspe, which does not have a convential FPU
but a special Signal Processing Engine (SPE). The latter can be
detected by checking whether __NO_FPRS__ is defined.
2017-03-02 01:51:11 +01:00
John Paul Adrian Glaubitz 4c7c70c7c2 basic/architecture: Properly set LIB_ARCH_TUPLE for x32
On x86_64, there are two possible ABIs and hence values for
LIB_ARCH_TUPLE. The convential 64-bit type and the 32-bit
variant, called x32. The latter can be detected by checking
whether __ILP32__ is defined.
2017-03-02 01:50:36 +01:00
Lennart Poettering d6d0473dc9 Revert "util: Fine tune running_in_chroot() a bit" (#5506)
This reverts commit 295ee9845c.

Let'd revert this for now, see #5446 for discussions.

We want systemd-detect-virt --chroot to return true for all chroot-like stuff, for
example mock environments which have use a mount namespace. The downside
of this revert that systemctl will not work from our own namespaced services, anything
with RootDirectory=/RootImage= set.
2017-03-01 15:22:02 -05:00
Lennart Poettering 059c35f507 mount-util: accept that name_to_handle_at() might fail with EPERM (#5499)
Container managers frequently block name_to_handle_at(), returning
EACCES or EPERM when this is issued. Accept that, and simply fall back
to to fdinfo-based checks.

Note that we accept either EACCES or EPERM here, as container managers
can choose the error code and aren't very good on agreeing on just one.

(note that this is a non-issue with nspawn, as we permit
name_to_handle_at() there, only block open_by_handle_at(), which should
be sufficiently safe).
2017-03-01 11:35:05 -05:00
Lennart Poettering 579a121f0e Merge pull request #5464 from ssahani/label
socket-util: introduce address_label_valid
2017-02-28 15:11:57 +01:00
Lennart Poettering c3988e728c Merge pull request #5438 from ssahani/vxlan-address
networkd: add symlinks for Makefile (netdev and wait-online) , vxlan enhancements.
2017-02-28 12:32:18 +01:00
Susant Sahani 2680894816 socket-util: introduce address_label_valid 2017-02-28 16:53:58 +05:30
YunQiang Su caf49b95b3 Fix MIPS N64 and N32 LIB_ARCH_TUPLE (#5469)
* Fix MIPS N64 and N32 LIB_ARCH_TUPLE

For mips, we have 3 major ABIs, they are N64, N32 and O32.
Both N32 and N64 defined __mips64__, and only N64 defined __LP64__.
2017-02-28 11:35:40 +01:00
Martin Pitt b1caafb2b1 build-sys: add LIB_ARCH_TUPLE for tilegx-linux-gnu (#5474)
Fix build failure on the tilegx architecture.

https://bugs.debian.org/856306
2017-02-27 20:54:11 +01:00
Zbigniew Jędrzejewski-Szmek 78e4f19ebc Merge pull request #5444 from poettering/cgroups-revert-no-error
Revert "core: simplify cg_[all_]unified()" and more.
2017-02-24 18:48:57 -05:00
AsciiWolf 13e785f7a0 Fix missing space in comments (#5439) 2017-02-24 18:14:02 +01:00
Lennart Poettering 4bb652ac2f cgroup: rework cg_all_unified()
Let's just check the unified level, directly. There's really no value in
wrapping cg_unified_controllers() with this, i.e. potentially do string
comparison when there's no reason to.

Also, this makes the clal more alike cg_hybrid_unified().
2017-02-24 18:05:31 +01:00
Lennart Poettering 1fcca10eb3 cgroup: rename cg_update_unified() → cg_unified_update()
We usually put the noun first, the verb (i.e. method) secont, for
example in cg_unified_flush(), let's follow the logic here...
2017-02-24 18:03:09 +01:00
Lennart Poettering c22800e40e cgroup: rename cg_unified() → cg_unified_controller()
cg_unified() is a bit generic a name, let's make clear that it checks
whether a specified controller is in unified mode.
2017-02-24 18:00:04 +01:00
Lennart Poettering b4cccbc13a cgroup: change cg_unified() to possibly return errors again
We use our cgroup APIs in various contexts, including from our libraries
sd-login, sd-bus. As we don#t control those environments we can't rely
that the unified cgroup setup logic succeeds, and hence really shouldn't
assert on it.

This more or less reverts 415fc41cea.
2017-02-24 17:52:58 +01:00
Lennart Poettering fc9ae7178e cgroup-util: check unified_cache before invoking streq()
Just a minor optimization.
2017-02-24 15:53:19 +01:00
Susant Sahani 85257f48be socket-util: introduce in_addr_is_multicast
This patch add support to test whether a internet
address is multicast or not.
2017-02-24 15:42:59 +05:30
Lennart Poettering ecc0eab247 Merge pull request #4670 from htejun/systemd-controller-on-unified-v2
Systemd controller on unified v2
2017-02-23 16:23:02 +01:00
Zbigniew Jędrzejewski-Szmek c19739db9e cgroup-util: fix the case of default=unified, unified-cgroup-hierarchy=0
We should mount the hybrid hierarchy if the user disabled the unified
hierarchy on the kernel command line.
2017-02-22 19:58:06 -05:00
Zbigniew Jędrzejewski-Szmek 239a3d0954 cgroup-util: cache all cg_is_*_wanted answers, disable /sys/fs/cgroups/unified on unified
If we encounter an error in proc cmdline parsing, just treat that as permanent,
i.e. the same as if the option was not specified. Realistically, it is better
to use the same condition for all related mounts, then to have e.g.
/sys/fs/cgroup mounted and /sys/fs/cgroup/unified not. If we find something is
mounted and base our answer on that, cache that result too.

Fix the conditions so that if "unified" is used, make sure any "hybrid" mounts
are not mounted.
2017-02-22 12:57:43 -05:00
Zbigniew Jędrzejewski-Szmek 1b59cf04ae core/mount-setup: if unified hierarchy is not supported, fall back to legacy
We need this to gracefully support older or strangely configured kernels.

v2:
- do not install a callback handler, just embed the right conditions into
  cg_is_*_wanted()

v3:
- fix bug in cg_is_legacy_wanted()
2017-02-22 11:52:31 -05:00
Zbigniew Jędrzejewski-Szmek a4464b9522 Rename cg_is_unified_systemd_controller_wanted to cg_is_hybrid_wanted
Less typing and doesn't make the table so incredibly wide.
2017-02-22 11:52:31 -05:00
Evgeny Vereshchagin b965427b59 Merge pull request #5409 from keszybz/test-env-util-memleak
test-env-util: fix typo leading to memleak
2017-02-22 04:02:57 +03:00
Lennart Poettering bcab914f7f Revert "basic/strv: allow NULLs to be inserted into strv"
This reverts commit 18f71a3c81.

According to @keszybz we don't need this anymore, hence drop it:

https://github.com/systemd/systemd/pull/5131/commits/18f71a3c8174774c5386c4aba94d54f3b5c36a84#r102232368
2017-02-21 21:55:44 +01:00
Lennart Poettering 48a601fe5d log: never log into foreign fd #2 in PID 1 or its pre-execve() children
Fixes: #5401
2017-02-21 21:55:43 +01:00
Lennart Poettering f5b84de2ab bootctl: create loader.conf only if it doesn't exist yet
If the snippet aleady exists, don't do anything, as the file was already
installed then.

(This also reworks the code to create the file atomically)

Fixes: #5396
2017-02-21 21:55:43 +01:00
Lennart Poettering ce21ed5c61 copy: a plain unlink() works here too 2017-02-21 21:41:32 +01:00
stuart-mclaren a3d8d68cc1 Fix check for signal in set (#5416)
IN_SET(SIGCONT, SIGKILL) will always evaluate to false.
The signal needs to be included as the first argument.

Fixup for 26f417d3e8.
2017-02-21 15:39:52 -05:00
Zbigniew Jędrzejewski-Szmek 1d046f5720 basic/env-util: drop leftover comment 2017-02-21 11:53:42 -05:00
Zbigniew Jędrzejewski-Szmek 371328dc74 basic/fileio: use IN_SET 2017-02-21 11:15:51 -05:00
Zbigniew Jędrzejewski-Szmek 2ea8081a55 basic/fileio: fix memleak when discarding an invalid variable
Fixes #5405.
2017-02-21 11:15:50 -05:00
Lennart Poettering a4dde27d73 Merge pull request #5131 from keszybz/environment-generators
Environment generators
2017-02-21 11:11:44 +01:00
Ray Strode b82f58bfe3 basic: support default and alternate values for env expansion
Sometimes it's useful to provide a default value during an environment
expansion, if the environment variable isn't already set.

For instance $XDG_DATA_DIRS is suppose to default to:

/usr/local/share/:/usr/share/

if it's not yet set. That means callers wishing to augment
XDG_DATA_DIRS need to manually add those two values.

This commit changes replace_env to support the following shell
compatible default value syntax:

XDG_DATA_DIRS=/foo:${XDG_DATA_DIRS:-/usr/local/share/:/usr/share}

Likewise, it's useful to provide an alternate value during an
environment expansion, if the environment variable isn't already set.

For instance, $LD_LIBRARY_PATH will inadvertently search the current
working directory if it starts or ends with a colon, so the following
is usually wrong:

LD_LIBRARY_PATH=/foo/lib:${LD_LIBRARY_PATH}

To address that, this changes replace_env to support the following
shell compatible alternate value syntax:

LD_LIBRARY_PATH=/foo/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

[zj: gate the new syntax under REPLACE_ENV_ALLOW_EXTENDED switch, so
existing callers are not modified.]
2017-02-20 23:32:53 -05:00
Ray Strode 4bed076c5f basic: add replace_env_n function
It's like replace_env, but lets you pass in a substring.
2017-02-20 23:32:53 -05:00
Zbigniew Jędrzejewski-Szmek 184d190473 Tighten checking for variable validity
In the future we might want to allow additional syntax (for example
"unset VAR". But let's check that the data we're getting does not contain
anything unexpected.
2017-02-20 23:32:53 -05:00
Zbigniew Jędrzejewski-Szmek ccad1fd07c Allow braceless variables to be expanded
(Only in environment.d files.)

We have only basic compatibility with shell syntax, but specifying variables
without using braces is probably more common, and I think a lot of people would
be surprised if this didn't work.
2017-02-20 23:30:50 -05:00
Zbigniew Jędrzejewski-Szmek cb4499d005 basic/env-util: use _cleanup_ in replace_env() 2017-02-20 18:49:14 -05:00
Ray Strode 37f3ffca27 basic: add new merge_env_file function
merge_env_file is a new function, that's like load_env_file, but takes a
pre-existing environment as an input argument. New environment entries are
merged. Variable expansion is performed.

Falling back to the process environment is supported (when a flag is set).
Alternatively this could be implemented as passing an additional fallback
environment array, but later on we're adding another flag to allow braceless
expansion, and the two flags can be combined in one arg, so there's less
stuff to pass around.
2017-02-20 18:49:14 -05:00
Ray Strode d8ad241f54 basic: drop unnecessary strempty() call in replace_env
strempty() converts a NULL value to empty string, so
that it can be passed on to functions that don't support NULL.

replace_env calls strempty before passing its value on to strappend.

strappend supports NULL just fine, though, so this commit drops the
strempty call.
2017-02-20 18:49:14 -05:00
Ray Strode 6162512cde basic: fix strv_env_get_n for unclean arrays
If an environment array has duplicates, strv_env_get_n returns
the results for the first match. This is wrong, because later
entries in the environment are supposed to replace earlier
entries.
2017-02-20 18:49:14 -05:00
Zbigniew Jędrzejewski-Szmek 3303d1b2dc exec-util: implement a set of callbacks to pass variables around
Only tests are added, otherwise the new code is unused.
2017-02-20 18:49:14 -05:00
Zbigniew Jędrzejewski-Szmek c8cebc36b0 basic/env-util: drop _pure_ from static function 2017-02-20 18:49:14 -05:00
Zbigniew Jędrzejewski-Szmek 99003e01b6 env-util,fileio: immediately replace variables in load_env_file_push()
strv_env_replace was calling env_match(), which in effect allowed multiple
values for the same key to be inserted into the environment block. That's
pointless, because APIs to access variables only return a single value (the
latest entry), so it's better to keep the block clean, i.e. with just a single
entry for each key.

Add a new helper function that simply tests if the part before '=' is equal in
two strings and use that in strv_env_replace.

In load_env_file_push, use strv_env_replace to immediately replace the previous
assignment with a matching name.

Afaict, none of the callers are materially affected by this change, but it
seems like some pointless work was being done, if the same value was set
multiple times. We'd go through parsing and assigning the value for each
entry. With this change, we handle just the last one.
2017-02-20 18:49:14 -05:00
Zbigniew Jędrzejewski-Szmek ac46681881 basic/fileio: add helper function for a set of two common checks 2017-02-20 18:49:14 -05:00
Zbigniew Jędrzejewski-Szmek fe902fa496 core/manager: move environment serialization out to basic/env-util.c
This protocol is generally useful, we might just as well reuse it for the
env. generators.

The implementation is changed a bit: instead of making a new strv and freeing
the old one, just mutate the original. This is much faster with larger arrays,
while in fact atomicity is preserved, since we only either insert the new
entry or not, without being in inconsistent state.

v2:
- fix confusion with return value
2017-02-20 18:49:14 -05:00
Zbigniew Jędrzejewski-Szmek c6e47247a7 basic/exec-util: add support for synchronous (ordered) execution
The output of processes can be gathered, and passed back to the callee.
(This commit just implements the basic functionality and tests.)

After the preparation in previous commits, the change in functionality is
relatively simple. For coding convenience, alarm is prepared *before* any
children are executed, and not before. This shouldn't matter usually, since
just forking of the children should be pretty quick. One could also argue that
this is more correct, because we will also catch the case when (for whatever
reason), forking itself is slow.

Three callback functions and three levels of serialization are used:
- from individual generator processes to the generator forker
- from the forker back to the main process
- deserialization in the main process

v2:
- replace an structure with an indexed array of callbacks
2017-02-20 18:49:13 -05:00
Zbigniew Jędrzejewski-Szmek 504afd7c34 core/manager: split out creation of serialization fd out to a helper
There is a slight change in behaviour: the user manager for root will create a
temporary file in /run/systemd, not /tmp. I don't think this matters, but
simplifies implementation.
2017-02-20 18:49:09 -05:00
Zbigniew Jędrzejewski-Szmek 5a94b18752 build.h: include default cgroup hierarchy setting in --version output
This is pretty important, and we print this string during startup, so putting
the default hierarchy information might help with diagnosis if things go awry.

$ ./systemctl --version
systemd 232
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN default-hierarchy=legacy

v2: make the message nicer by including the ./configure option argument
directly in output
2017-02-20 12:45:50 -05:00
Zbigniew Jędrzejewski-Szmek 77fab2a91c pid1: add ./configure switch to select default cgroup hierarchy
The default default is set to "legacy", with "hybrid" and "unified"
being the other two alternatives.

There invert the behaviour for systemd.legacy_systemd_cgroup_controller:
if it is not specified on the kernel command line, "hybrid" is used if
selected as the default. If this option is specified, "hybrid" is used if false,
and full "legacy" if true.

Also make all fields in the configure summary lowercase (unless they are
capitalized names) for consistency.

v2:
- update for the fixed interpreation of systemd.legacy_systemd_cgroup_controller
2017-02-20 12:45:50 -05:00
Tejun Heo f08e928720 core: keep supporting cgroup hybrid layout from v232 for live upgrades
v232's cgroup hybrid mode mounted v2 on /sys/fs/cgroup/systemd, which
unfortunately broke other tools which expect v1 there.  From v233 on, hybrid
mode instead mounts and uses v2 on /sys/fs/cgroup/unified and keeps
/sys/fs/cgroup/systemd on v1 for compatibility with external tools.  However,
to keep systemd live upgrades working, v233+ should be able to recognize v232
layout and keep using it.

This patch adds v232 hybrid mode support.  If v232 layout is detected,
cg_unified(SYSTEMD_CGRouP_CONTROLLER) keeps returning %true but
cg_hybrid_unified() returns %false.  This keeps process management on cgroup v2
but turns off the parallel layout.
2017-02-20 12:28:44 -05:00