Merge pull request #62956 from abbradar/nm-fixes

NetworkManager fixes
This commit is contained in:
Nikolay Amiantov 2019-07-13 22:31:13 +03:00 committed by GitHub
commit 8951505dc9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,6 +1,5 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with pkgs;
with lib; with lib;
let let
@ -12,7 +11,7 @@ let
# /var/lib/misc is for dnsmasq.leases. # /var/lib/misc is for dnsmasq.leases.
stateDirs = "/var/lib/NetworkManager /var/lib/dhclient /var/lib/misc"; stateDirs = "/var/lib/NetworkManager /var/lib/dhclient /var/lib/misc";
configFile = writeText "NetworkManager.conf" '' configFile = pkgs.writeText "NetworkManager.conf" ''
[main] [main]
plugins=keyfile plugins=keyfile
dhcp=${cfg.dhcp} dhcp=${cfg.dhcp}
@ -65,19 +64,19 @@ let
}); });
''; '';
ns = xs: writeText "nameservers" ( ns = xs: pkgs.writeText "nameservers" (
concatStrings (map (s: "nameserver ${s}\n") xs) concatStrings (map (s: "nameserver ${s}\n") xs)
); );
overrideNameserversScript = writeScript "02overridedns" '' overrideNameserversScript = pkgs.writeScript "02overridedns" ''
#!/bin/sh #!/bin/sh
tmp=`${coreutils}/bin/mktemp` PATH=${with pkgs; makeBinPath [ gnused gnugrep coreutils ]}
${gnused}/bin/sed '/nameserver /d' /etc/resolv.conf > $tmp tmp=$(mktemp)
${gnugrep}/bin/grep 'nameserver ' /etc/resolv.conf | \ sed '/nameserver /d' /etc/resolv.conf > $tmp
${gnugrep}/bin/grep -vf ${ns (cfg.appendNameservers ++ cfg.insertNameservers)} > $tmp.ns grep 'nameserver ' /etc/resolv.conf | \
${optionalString (cfg.appendNameservers != []) "${coreutils}/bin/cat $tmp $tmp.ns ${ns cfg.appendNameservers} > /etc/resolv.conf"} grep -vf ${ns (cfg.appendNameservers ++ cfg.insertNameservers)} > $tmp.ns
${optionalString (cfg.insertNameservers != []) "${coreutils}/bin/cat $tmp ${ns cfg.insertNameservers} $tmp.ns > /etc/resolv.conf"} cat $tmp ${ns cfg.insertNameservers} $tmp.ns ${ns cfg.appendNameservers} > /etc/resolv.conf
${coreutils}/bin/rm -f $tmp $tmp.ns rm -f $tmp $tmp.ns
''; '';
dispatcherTypesSubdirMap = { dispatcherTypesSubdirMap = {
@ -176,7 +175,8 @@ in {
# Ugly hack for using the correct gnome3 packageSet # Ugly hack for using the correct gnome3 packageSet
basePackages = mkOption { basePackages = mkOption {
type = types.attrsOf types.package; type = types.attrsOf types.package;
default = { inherit networkmanager modemmanager wpa_supplicant default = { inherit (pkgs)
networkmanager modemmanager wpa_supplicant
networkmanager-openvpn networkmanager-vpnc networkmanager-openvpn networkmanager-vpnc
networkmanager-openconnect networkmanager-fortisslvpn networkmanager-openconnect networkmanager-fortisslvpn
networkmanager-l2tp networkmanager-iodine; }; networkmanager-l2tp networkmanager-iodine; };
@ -425,13 +425,10 @@ in {
{ source = "${networkmanager-l2tp}/lib/NetworkManager/VPN/nm-l2tp-service.name"; { source = "${networkmanager-l2tp}/lib/NetworkManager/VPN/nm-l2tp-service.name";
target = "NetworkManager/VPN/nm-l2tp-service.name"; target = "NetworkManager/VPN/nm-l2tp-service.name";
} }
{ source = "${networkmanager_strongswan}/lib/NetworkManager/VPN/nm-strongswan-service.name";
target = "NetworkManager/VPN/nm-strongswan-service.name";
}
{ source = "${networkmanager-iodine}/lib/NetworkManager/VPN/nm-iodine-service.name"; { source = "${networkmanager-iodine}/lib/NetworkManager/VPN/nm-iodine-service.name";
target = "NetworkManager/VPN/nm-iodine-service.name"; target = "NetworkManager/VPN/nm-iodine-service.name";
} }
] ++ optional (cfg.appendNameservers == [] || cfg.insertNameservers == []) ] ++ optional (cfg.appendNameservers != [] || cfg.insertNameservers != [])
{ source = overrideNameserversScript; { source = overrideNameserversScript;
target = "NetworkManager/dispatcher.d/02overridedns"; target = "NetworkManager/dispatcher.d/02overridedns";
} }
@ -440,11 +437,15 @@ in {
target = "NetworkManager/dispatcher.d/${dispatcherTypesSubdirMap.${s.type}}03userscript${lib.fixedWidthNumber 4 i}"; target = "NetworkManager/dispatcher.d/${dispatcherTypesSubdirMap.${s.type}}03userscript${lib.fixedWidthNumber 4 i}";
mode = "0544"; mode = "0544";
}) cfg.dispatcherScripts }) cfg.dispatcherScripts
++ optional (dynamicHostsEnabled) ++ optional dynamicHostsEnabled
{ target = "NetworkManager/dnsmasq.d/dyndns.conf"; { target = "NetworkManager/dnsmasq.d/dyndns.conf";
text = concatMapStrings (n: '' text = concatMapStrings (n: ''
hostsdir=/run/NetworkManager/hostsdirs/${n} hostsdir=/run/NetworkManager/hostsdirs/${n}
'') (attrNames cfg.dynamicHosts.hostsDirs); '') (attrNames cfg.dynamicHosts.hostsDirs);
}
++ optional cfg.enableStrongSwan
{ source = "${pkgs.networkmanager_strongswan}/lib/NetworkManager/VPN/nm-strongswan-service.name";
target = "NetworkManager/VPN/nm-strongswan-service.name";
}; };
environment.systemPackages = cfg.packages; environment.systemPackages = cfg.packages;