1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
{ stdenv, fetchurl, substituteAll, intltool, pkgconfig, dbus-glib, gnome3
, systemd, libuuid, polkit, gnutls, ppp, dhcp, iptables
, libgcrypt, dnsmasq, bluez5, readline
, gobjectIntrospection, modemmanager, openresolv, libndp, newt, libsoup
, ethtool, iputils, gnused, coreutils, file, inetutils, kmod, jansson, libxslt
, python3Packages, docbook_xsl, openconnect, curl, autoreconfHook }:
let
pname = "NetworkManager";
in stdenv.mkDerivation rec {
name = "network-manager-${version}";
version = "1.12.0";
src = fetchurl {
url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "15bzjkrfa7sw5p5hkdha4a67y1zfnzh1s6za11sh8s1yxmyvkziq";
};
outputs = [ "out" "dev" ];
postPatch = ''
patchShebangs ./tools
'';
preConfigure = ''
substituteInPlace configure --replace /usr/bin/uname ${coreutils}/bin/uname
substituteInPlace configure --replace /usr/bin/file ${file}/bin/file
substituteInPlace data/84-nm-drivers.rules \
--replace /bin/sh ${stdenv.shell}
substituteInPlace data/85-nm-unmanaged.rules \
--replace /bin/sh ${stdenv.shell} \
--replace /usr/sbin/ethtool ${ethtool}/sbin/ethtool \
--replace /bin/sed ${gnused}/bin/sed
substituteInPlace data/NetworkManager.service.in \
--replace /bin/kill ${coreutils}/bin/kill
# to enable link-local connections
configureFlags="$configureFlags --with-udev-dir=$out/lib/udev"
# Fixes: error: po/Makefile.in.in was not created by intltoolize.
intltoolize --automake --copy --force
'';
# Right now we hardcode quite a few paths at build time. Probably we should
# patch networkmanager to allow passing these path in config file. This will
# remove unneeded build-time dependencies.
configureFlags = [
"--with-dhclient=${dhcp}/bin/dhclient"
"--with-dnsmasq=${dnsmasq}/bin/dnsmasq"
# Upstream prefers dhclient, so don't add dhcpcd to the closure
"--with-dhcpcd=no"
"--with-pppd=${ppp}/bin/pppd"
"--with-iptables=${iptables}/bin/iptables"
#"--with-udev-dir=$(out)/lib/udev"
"--with-resolvconf=${openresolv}/sbin/resolvconf"
"--sysconfdir=/etc" "--localstatedir=/var"
"--with-dbus-sys-dir=\${out}/etc/dbus-1/system.d"
"--with-crypto=gnutls" "--disable-more-warnings"
"--with-systemdsystemunitdir=$(out)/etc/systemd/system"
"--with-kernel-firmware-dir=/run/current-system/firmware"
"--with-session-tracking=systemd"
"--with-modem-manager-1"
"--with-nmtui"
"--disable-gtk-doc"
"--with-libnm-glib" # legacy library, TODO: remove
"--disable-tests"
];
patches = [
# https://bugzilla.gnome.org/show_bug.cgi?id=796752
(fetchurl {
url = https://bugzilla.gnome.org/attachment.cgi?id=372955;
sha256 = "17rl19lprnsz4wjmp54c1qw6a3pf8x97bhd69xavwy7cx6z84b3n";
})
# https://bugzilla.gnome.org/show_bug.cgi?id=796751
(fetchurl {
url = https://bugzilla.gnome.org/attachment.cgi?id=372953;
sha256 = "1crjplyiiipkhjjlifrv6hhvxinlcxd6irp9ijbc7jij31g44i0a";
})
(substituteAll {
src = ./fix-paths.patch;
inherit inetutils kmod openconnect;
})
];
buildInputs = [
systemd libuuid polkit ppp libndp curl
bluez5 dnsmasq gobjectIntrospection modemmanager readline newt libsoup jansson
];
propagatedBuildInputs = [ dbus-glib gnutls libgcrypt python3Packages.pygobject3 ];
nativeBuildInputs = [ autoreconfHook intltool pkgconfig libxslt docbook_xsl ];
doCheck = false; # requires /sys, the net
preInstall = ''
installFlagsArray=( "sysconfdir=$out/etc" "localstatedir=$out/var" "runstatedir=$out/var/run" )
'';
postInstall = ''
mkdir -p $out/lib/NetworkManager
# FIXME: Workaround until NixOS' dbus+systemd supports at_console policy
substituteInPlace $out/etc/dbus-1/system.d/org.freedesktop.NetworkManager.conf --replace 'at_console="true"' 'group="networkmanager"'
# rename to network-manager to be in style
mv $out/etc/systemd/system/NetworkManager.service $out/etc/systemd/system/network-manager.service
# systemd in NixOS doesn't use `systemctl enable`, so we need to establish
# aliases ourselves.
ln -s $out/etc/systemd/system/NetworkManager-dispatcher.service $out/etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service
ln -s $out/etc/systemd/system/network-manager.service $out/etc/systemd/system/dbus-org.freedesktop.NetworkManager.service
'';
passthru = {
updateScript = gnome3.updateScript {
packageName = pname;
attrPath = "networkmanager";
};
};
meta = with stdenv.lib; {
homepage = https://wiki.gnome.org/Projects/NetworkManager;
description = "Network configuration and management tool";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ phreedom rickynils domenkozar obadz ];
platforms = platforms.linux;
};
}
|