Skip to content

Commit

Permalink
systemd: 239 -> 242 (#61321)
Browse files Browse the repository at this point in the history
systemd: 239 -> 242
  • Loading branch information
flokli committed Jun 3, 2019
2 parents 7c53ac0 + 7508490 commit 2812b5c
Show file tree
Hide file tree
Showing 17 changed files with 243 additions and 80 deletions.
50 changes: 49 additions & 1 deletion nixos/doc/manual/release-notes/rl-1909.xml
Expand Up @@ -104,6 +104,40 @@
</link>
</para>
</listitem>
<listitem>
<para>
The option <option>systemd.network.networks.&lt;name&gt;.routes.*.routeConfig.GatewayOnlink</option>
was renamed to <option>systemd.network.networks.&lt;name&gt;.routes.*.routeConfig.GatewayOnLink</option>
(capital <literal>L</literal>). This follows
<link xlink:href="https://github.com/systemd/systemd/commit/9cb8c5593443d24c19e40bfd4fc06d672f8c554c">
upstreams renaming
</link> of the setting.
</para>
</listitem>
<listitem>
<para>
As of this release the NixOps feature <literal>autoLuks</literal> is deprecated. It no longer works
with our systemd version without manual intervention.
</para>
<para>
Whenever the usage of the module is detected the evaluation will fail with a message
explaining why and how to deal with the situation.
</para>
<para>
A new knob named <literal>nixops.enableDeprecatedAutoLuks</literal>
has been introduced to disable the eval failure and to acknowledge the notice was received and read.
If you plan on using the feature please note that it might break with subsequent updates.
</para>
<para>
Make sure you set the <literal>_netdev</literal> option for each of the file systems referring to block
devices provided by the autoLuks module. Not doing this might render the system in a
state where it doesn't boot anymore.
</para>
<para>
If you are actively using the <literal>autoLuks</literal> module please let us know in
<link xlink:href="https://github.com/NixOS/nixpkgs/issues/62211">issue #62211</link>.
</para>
</listitem>
</itemizedlist>
</section>

Expand Down Expand Up @@ -162,6 +196,20 @@
which is linked to <literal>fr-toutesvariantes.{aff,dic}</literal>.
</para>
</listitem>
</itemizedlist>
<listitem>
<para>
With the upgrade to systemd version 242 the <literal>systemd-timesyncd</literal>
service is no longer using <literal>DynamicUser=yes</literal>. In order for the
upgrade to work we rely on an activation script to move the state from the old
to the new directory. The older directory (prior <literal>19.09</literal>) was
<literal>/var/lib/private/systemd/timesync</literal>.
</para>
<para>
As long as the <literal>system.config.stateVersion</literal> is below
<literal>19.09</literal> the state folder will migrated to its proper location
(<literal>/var/lib/systemd/timesync</literal>), if required.
</para>
</listitem>
</itemizedlist>
</section>
</section>
44 changes: 44 additions & 0 deletions nixos/modules/misc/nixops-autoluks.nix
@@ -0,0 +1,44 @@
{ config, options, lib, ... }:
let
path = [ "deployment" "autoLuks" ];
hasAutoLuksOption = lib.hasAttrByPath path options;
hasAutoLuksConfig = lib.hasAttrByPath path config && (lib.attrByPath path {} config) != {};

inherit (config.nixops) enableDeprecatedAutoLuks;
in {
options.nixops.enableDeprecatedAutoLuks = lib.mkEnableOption "Enable the deprecated NixOps AutoLuks module";

config = {
assertions = [
{
assertion = if hasAutoLuksConfig then hasAutoLuksConfig && enableDeprecatedAutoLuks else true;
message = ''
⚠️ !!! WARNING !!! ⚠️
NixOps autoLuks is deprecated. The feature was never widely used and the maintenance did outgrow the benefit.
If you still want to use the module:
a) Please raise your voice in the issue tracking usage of the module:
https://github.com/NixOS/nixpkgs/issues/62211
b) make sure you set the `_netdev` option for each of the file
systems referring to block devices provided by the autoLuks module.
⚠️ If you do not set the option your system will not boot anymore! ⚠️
{
fileSystems."/secret" = { options = [ "_netdev" ]; };
}
b) set the option >nixops.enableDeprecatedAutoLuks = true< to remove this error.
For more details read through the following resources:
- https://github.com/NixOS/nixops/pull/1156
- https://github.com/NixOS/nixpkgs/issues/47550
- https://github.com/NixOS/nixpkgs/issues/62211
- https://github.com/NixOS/nixpkgs/pull/61321
'';
}
];
};

}
1 change: 1 addition & 0 deletions nixos/modules/misc/version.nix
Expand Up @@ -95,6 +95,7 @@ in
PRETTY_NAME="NixOS ${cfg.version} (${cfg.codeName})"
LOGO="nix-snowflake"
HOME_URL="https://nixos.org/"
DOCUMENTATION_URL="https://nixos.org/nixos/manual/index.html"
SUPPORT_URL="https://nixos.org/nixos/support.html"
BUG_REPORT_URL="https://github.com/NixOS/nixpkgs/issues"
'';
Expand Down
1 change: 1 addition & 0 deletions nixos/modules/module-list.nix
Expand Up @@ -84,6 +84,7 @@
./misc/nixpkgs.nix
./misc/passthru.nix
./misc/version.nix
./misc/nixops-autoluks.nix
./programs/adb.nix
./programs/atop.nix
./programs/autojump.nix
Expand Down
13 changes: 0 additions & 13 deletions nixos/modules/services/hardware/80-net-setup-link.rules

This file was deleted.

6 changes: 2 additions & 4 deletions nixos/modules/services/hardware/udev.nix
Expand Up @@ -116,10 +116,6 @@ let
exit 1
fi
${optionalString config.networking.usePredictableInterfaceNames ''
cp ${./80-net-setup-link.rules} $out/80-net-setup-link.rules
''}
# If auto-configuration is disabled, then remove
# udev's 80-drivers.rules file, which contains rules for
# automatically calling modprobe.
Expand Down Expand Up @@ -282,6 +278,8 @@ in

services.udev.path = [ pkgs.coreutils pkgs.gnused pkgs.gnugrep pkgs.utillinux udev ];

boot.kernelParams = mkIf (!config.networking.usePredictableInterfaceNames) [ "net.ifnames=0" ];

environment.etc =
[ { source = udevRules;
target = "udev/rules.d";
Expand Down
2 changes: 1 addition & 1 deletion nixos/modules/system/boot/networkd.nix
Expand Up @@ -203,7 +203,7 @@ let

checkRoute = checkUnitConfig "Route" [
(assertOnlyFields [
"Gateway" "GatewayOnlink" "Destination" "Source" "Metric"
"Gateway" "GatewayOnLink" "Destination" "Source" "Metric"
"IPv6Preference" "Scope" "PreferredSource" "Table" "Protocol" "Type"
"InitialCongestionWindow" "InitialAdvertisedReceiveWindow" "QuickAck"
"MTUBytes"
Expand Down
2 changes: 0 additions & 2 deletions nixos/modules/system/boot/systemd.nix
Expand Up @@ -940,7 +940,6 @@ in
# Don't bother with certain units in containers.
systemd.services.systemd-remount-fs.unitConfig.ConditionVirtualization = "!container";
systemd.services.systemd-random-seed.unitConfig.ConditionVirtualization = "!container";

};

# FIXME: Remove these eventually.
Expand All @@ -949,5 +948,4 @@ in
(mkRenamedOptionModule [ "boot" "systemd" "targets" ] [ "systemd" "targets" ])
(mkRenamedOptionModule [ "boot" "systemd" "services" ] [ "systemd" "services" ])
];

}
9 changes: 9 additions & 0 deletions nixos/modules/system/boot/timesyncd.nix
Expand Up @@ -40,6 +40,15 @@ with lib;
users.users.systemd-timesync.uid = config.ids.uids.systemd-timesync;
users.groups.systemd-timesync.gid = config.ids.gids.systemd-timesync;

system.activationScripts.systemd-timesyncd-migration = mkIf (versionOlder config.system.stateVersion "19.09") ''
# workaround an issue of systemd-timesyncd not starting due to upstream systemd reverting their dynamic users changes
# - https://github.com/NixOS/nixpkgs/pull/61321#issuecomment-492423742
# - https://github.com/systemd/systemd/issues/12131
if [ -L /var/lib/systemd/timesync ]; then
rm /var/lib/systemd/timesync
mv /var/lib/private/systemd/timesync /var/lib/systemd/timesync
fi
'';
};

}
11 changes: 9 additions & 2 deletions nixos/modules/tasks/network-interfaces-systemd.nix
Expand Up @@ -12,7 +12,7 @@ let
i.ipv4.addresses
++ optionals cfg.enableIPv6 i.ipv6.addresses;

dhcpStr = useDHCP: if useDHCP == true || useDHCP == null then "both" else "none";
dhcpStr = useDHCP: if useDHCP == true || useDHCP == null then "both" else "no";

slaves =
concatLists (map (bond: bond.interfaces) (attrValues cfg.bonds))
Expand Down Expand Up @@ -59,7 +59,14 @@ in
in {
DHCP = override (dhcpStr cfg.useDHCP);
} // optionalAttrs (gateway != [ ]) {
gateway = override gateway;
routes = override [
{
routeConfig = {
Gateway = gateway;
GatewayOnLink = false;
};
}
];
} // optionalAttrs (domains != [ ]) {
domains = override domains;
};
Expand Down
3 changes: 0 additions & 3 deletions nixos/modules/testing/test-instrumentation.nix
Expand Up @@ -129,9 +129,6 @@ with import ../../lib/qemu-flags.nix { inherit pkgs; };
users.users.root.initialHashedPassword = mkOverride 150 "";

services.xserver.displayManager.job.logToJournal = true;

# set default stateVersion to avoid warnings during eval
system.stateVersion = mkDefault "18.03";
};

}
1 change: 1 addition & 0 deletions nixos/tests/all-tests.nix
Expand Up @@ -237,6 +237,7 @@ in
syncthing-relay = handleTest ./syncthing-relay.nix {};
systemd = handleTest ./systemd.nix {};
systemd-confinement = handleTest ./systemd-confinement.nix {};
systemd-timesyncd = handleTest ./systemd-timesyncd.nix {};
pdns-recursor = handleTest ./pdns-recursor.nix {};
taskserver = handleTest ./taskserver.nix {};
telegraf = handleTest ./telegraf.nix {};
Expand Down
21 changes: 20 additions & 1 deletion nixos/tests/containers-imperative.nix
Expand Up @@ -35,7 +35,17 @@ import ./make-test.nix ({ pkgs, ...} : {
];
};

testScript =
testScript = let
tmpfilesContainerConfig = pkgs.writeText "container-config-tmpfiles" ''
{
systemd.tmpfiles.rules = [ "d /foo - - - - -" ];
systemd.services.foo = {
serviceConfig.Type = "oneshot";
script = "ls -al /foo";
wantedBy = [ "multi-user.target" ];
};
}
''; in
''
# Make sure we have a NixOS tree (required by ‘nixos-container create’).
$machine->succeed("PAGER=cat nix-env -qa -A nixos.hello >&2");
Expand Down Expand Up @@ -93,6 +103,15 @@ import ./make-test.nix ({ pkgs, ...} : {
$machine->succeed("nixos-container stop $id1");
$machine->succeed("nixos-container start $id1");
# Ensure tmpfiles are present
$machine->log("creating container tmpfiles");
$machine->succeed("nixos-container create tmpfiles --config-file ${tmpfilesContainerConfig}");
$machine->log("created, starting…");
$machine->succeed("nixos-container start tmpfiles");
$machine->log("done starting, investigating…");
$machine->succeed("echo \$(nixos-container run tmpfiles -- systemctl is-active foo.service) | grep -q active;");
$machine->succeed("nixos-container destroy tmpfiles");
# Execute commands via the root shell.
$machine->succeed("nixos-container run $id1 -- uname") =~ /Linux/ or die;
Expand Down
2 changes: 1 addition & 1 deletion nixos/tests/radicale.nix
Expand Up @@ -85,7 +85,7 @@ in
$radicale->succeed('mv /tmp/collections-new/collection-root /tmp/collections');
$radicale->succeed('${switchToConfig "radicale2_verify"} >&2');
$radicale->waitUntilFails('systemctl status radicale');
my ($retcode, $logs) = $radicale->execute('journalctl -u radicale -n 5');
my ($retcode, $logs) = $radicale->execute('journalctl -u radicale -n 10');
if ($retcode != 0 || index($logs, 'Verifying storage') == -1) {
die "Radicale 2 didn't verify storage"
}
Expand Down
52 changes: 52 additions & 0 deletions nixos/tests/systemd-timesyncd.nix
@@ -0,0 +1,52 @@
# Regression test for systemd-timesync having moved the state directory without
# upstream providing a migration path. https://github.com/systemd/systemd/issues/12131

import ./make-test.nix (let
common = { lib, ... }: {
# override the `false` value from the qemu-vm base profile
services.timesyncd.enable = lib.mkForce true;
};
mkVM = conf: { imports = [ conf common ]; };
in {
name = "systemd-timesyncd";
nodes = {
current = mkVM {};
pre1909 = mkVM ({lib, ... }: with lib; {
# create the path that should be migrated by our activation script when
# upgrading to a newer nixos version
system.stateVersion = "19.03";
system.activationScripts.simulate-old-timesync-state-dir = mkBefore ''
rm -f /var/lib/systemd/timesync
mkdir -p /var/lib/systemd /var/lib/private/systemd/timesync
ln -s /var/lib/private/systemd/timesync /var/lib/systemd/timesync
chown systemd-timesync: /var/lib/private/systemd/timesync
'';
});
};

testScript = ''
startAll;
$current->succeed('systemctl status systemd-timesyncd.service');
# on a new install with a recent systemd there should not be any
# leftovers from the dynamic user mess
$current->succeed('test -e /var/lib/systemd/timesync');
$current->succeed('test ! -L /var/lib/systemd/timesync');
# timesyncd should be running on the upgrading system since we fixed the
# file bits in the activation script
$pre1909->succeed('systemctl status systemd-timesyncd.service');
# the path should be gone after the migration
$pre1909->succeed('test ! -e /var/lib/private/systemd/timesync');
# and the new path should no longer be a symlink
$pre1909->succeed('test -e /var/lib/systemd/timesync');
$pre1909->succeed('test ! -L /var/lib/systemd/timesync');
# after a restart things should still work and not fail in the activation
# scripts and cause the boot to fail..
$pre1909->shutdown;
$pre1909->start;
$pre1909->succeed('systemctl status systemd-timesyncd.service');
'';
})
13 changes: 7 additions & 6 deletions pkgs/os-specific/linux/multipath-tools/default.nix
@@ -1,16 +1,17 @@
{ stdenv, fetchurl, lvm2, libaio, gzip, readline, systemd, liburcu }:
{ stdenv, fetchurl, pkgconfig, perl, lvm2, libaio, gzip, readline, systemd, liburcu, json_c }:

stdenv.mkDerivation rec {
name = "multipath-tools-${version}";
version = "0.6.2";
version = "0.8.1";

src = fetchurl {
name = "${name}.tar.gz";
url = "https://git.opensvc.com/?p=multipath-tools/.git;a=snapshot;h=${version};sf=tgz";
sha256 = "159hxvbk9kh1qay9x04w0gsqzg0hkl5yghfc1wi9kv2n5pcwbkpm";
url = "https://git.opensvc.com/gitweb.cgi?p=multipath-tools/.git;a=snapshot;h=refs/tags/${version};sf=tgz";
sha256 = "0669zl4dpai63dl04lf8vpwnpsff6qf19fifxfc4frawnh699k95";
};

postPatch = ''
substituteInPlace libmultipath/Makefile --replace /usr/include/libdevmapper.h ${lvm2}/include/libdevmapper.h
sed -i -re '
s,^( *#define +DEFAULT_MULTIPATHDIR\>).*,\1 "'"$out/lib/multipath"'",
' libmultipath/defaults.h
Expand All @@ -20,8 +21,8 @@ stdenv.mkDerivation rec {
Makefile.inc
'';

nativeBuildInputs = [ gzip ];
buildInputs = [ systemd lvm2 libaio readline liburcu ];
nativeBuildInputs = [ gzip pkgconfig perl ];
buildInputs = [ systemd lvm2 libaio readline liburcu json_c ];

makeFlags = [
"LIB=lib"
Expand Down

0 comments on commit 2812b5c

Please sign in to comment.