networkmanager: fix path and pname

This commit is contained in:
Maxine Aubrey
2021-03-15 20:20:41 +01:00
parent b8a4051536
commit 17177b551f
26 changed files with 16 additions and 16 deletions
@@ -0,0 +1,64 @@
{ lib, stdenv, fetchurl, intltool, pkg-config, dbus-glib
, udev, libnl, libuuid, gnutls, dhcp
, libgcrypt, perl, libgudev, avahi, ppp, kmod }:
stdenv.mkDerivation rec {
pname = "networkmanager";
version = "0.9.8.10";
src = fetchurl {
url = "mirror://gnome/sources/NetworkManager/0.9/NetworkManager-${version}.tar.xz";
sha256 = "0wn9qh8r56r8l19dqr68pdl1rv3zg1dv47rfy6fqa91q7li2fk86";
};
preConfigure = ''
substituteInPlace tools/glib-mkenums --replace /usr/bin/perl ${perl}/bin/perl
substituteInPlace src/nm-device.c \
--replace @avahi@ ${avahi} \
--replace @kmod@ ${kmod}
substituteInPlace src/ppp-manager/nm-ppp-manager.c \
--replace @ppp@ ${ppp} \
--replace @kmod@ ${kmod}
'';
# 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-distro=exherbo"
"--with-dhclient=${dhcp}/sbin/dhclient"
"--with-dhcpcd=no"
"--with-iptables=no"
"--with-udev-dir=\${out}/lib/udev"
"--with-resolvconf=no"
"--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"
"--disable-ppp"
];
buildInputs = [ udev libnl libuuid gnutls libgcrypt libgudev ];
propagatedBuildInputs = [ dbus-glib ];
nativeBuildInputs = [ intltool pkg-config ];
patches =
[ ./libnl-3.2.25.patch
./nixos-purity.patch
];
preInstall =
''
installFlagsArray=( "sysconfdir=$out/etc" "localstatedir=$out/var" )
'';
meta = with lib; {
homepage = "http://projects.gnome.org/NetworkManager/";
description = "Network configuration and management tool";
license = licenses.gpl2Plus;
platforms = platforms.linux;
};
}
@@ -0,0 +1,61 @@
diff --git a/src/nm-netlink-monitor.c b/src/nm-netlink-monitor.c
index ba8053e..5ac39d3 100644
--- a/src/nm-netlink-monitor.c
+++ b/src/nm-netlink-monitor.c
@@ -177,40 +177,15 @@ link_msg_handler (struct nl_object *obj, void *arg)
static int
event_msg_recv (struct nl_msg *msg, void *arg)
{
- struct nl_sock *nlh = arg;
- struct nlmsghdr *hdr = nlmsg_hdr (msg);
struct ucred *creds = nlmsg_get_creds (msg);
- const struct sockaddr_nl *snl;
- guint32 local_port;
- gboolean accept_msg = FALSE;
-
- /* Only messages sent from the kernel */
- if (!creds || creds->uid != 0) {
- nm_log_dbg (LOGD_HW, "ignoring netlink message from UID %d",
- creds ? creds->uid : -1);
- return NL_SKIP;
- }
-
- snl = nlmsg_get_src (msg);
- g_assert (snl);
-
- /* Accept any messages from the kernel */
- if (hdr->nlmsg_pid == 0 || snl->nl_pid == 0)
- accept_msg = TRUE;
- /* And any multicast message directed to our netlink PID, since multicast
- * currently requires CAP_ADMIN to use.
- */
- local_port = nl_socket_get_local_port (nlh);
- if ((hdr->nlmsg_pid == local_port) && snl->nl_groups)
- accept_msg = TRUE;
-
- if (accept_msg == FALSE) {
- nm_log_dbg (LOGD_HW, "ignoring netlink message from PID %d (local PID %d, multicast %d)",
- hdr->nlmsg_pid,
- local_port,
- (hdr->nlmsg_flags & NLM_F_MULTI));
- return NL_SKIP;
+ if (!creds || creds->pid || creds->uid || creds->gid) {
+ if (creds)
+ nm_log_dbg (LOGD_HW, "netlink: received non-kernel message (pid %d uid %d gid %d)",
+ creds->pid, creds->uid, creds->gid);
+ else
+ nm_log_dbg (LOGD_HW, "netlink: received message without credentials");
+ return NL_STOP;
}
return NL_OK;
@@ -285,7 +260,7 @@ nlh_setup (struct nl_sock *nlh,
{
int err;
- nl_socket_modify_cb (nlh, NL_CB_MSG_IN, NL_CB_CUSTOM, event_msg_recv, cb_data);
+ nl_socket_modify_cb (nlh, NL_CB_MSG_IN, NL_CB_CUSTOM, event_msg_recv, NULL);
if (valid_func)
nl_socket_modify_cb (nlh, NL_CB_VALID, NL_CB_CUSTOM, valid_func, cb_data);
@@ -0,0 +1,77 @@
diff --git a/src/dhcp-manager/nm-dhcp-dhclient.c b/src/dhcp-manager/nm-dhcp-dhclient.c
index 0932139..5b5aee8 100644
--- a/src/dhcp-manager/nm-dhcp-dhclient.c
+++ b/src/dhcp-manager/nm-dhcp-dhclient.c
@@ -68,10 +68,6 @@ const char *
nm_dhcp_dhclient_get_path (const char *try_first)
{
static const char *dhclient_paths[] = {
- "/sbin/dhclient",
- "/usr/sbin/dhclient",
- "/usr/pkg/sbin/dhclient",
- "/usr/local/sbin/dhclient",
NULL
};
const char **path = dhclient_paths;
diff --git a/src/dhcp-manager/nm-dhcp-dhcpcd.c b/src/dhcp-manager/nm-dhcp-dhcpcd.c
index 237661f..48bc33f 100644
--- a/src/dhcp-manager/nm-dhcp-dhcpcd.c
+++ b/src/dhcp-manager/nm-dhcp-dhcpcd.c
@@ -51,10 +51,6 @@ const char *
nm_dhcp_dhcpcd_get_path (const char *try_first)
{
static const char *dhcpcd_paths[] = {
- "/sbin/dhcpcd",
- "/usr/sbin/dhcpcd",
- "/usr/pkg/sbin/dhcpcd",
- "/usr/local/sbin/dhcpcd",
NULL
};
const char **path = dhcpcd_paths;
diff --git a/src/nm-device.c b/src/nm-device.c
index 1dc94ee..e60f3c8 100644
--- a/src/nm-device.c
+++ b/src/nm-device.c
@@ -1321,8 +1321,7 @@ aipd_start (NMDevice *self, NMDeviceStateReason *reason)
char *argv[6], *cmdline;
const char **aipd_binary = NULL;
static const char *aipd_paths[] = {
- "/usr/sbin/avahi-autoipd",
- "/usr/local/sbin/avahi-autoipd",
+ "@avahi@/sbin/avahi-autoipd",
NULL
};
int i = 0;
@@ -2555,7 +2554,7 @@ share_init (void)
}
for (iter = modules; *iter; iter++) {
- char *argv[3] = { "/sbin/modprobe", *iter, NULL };
+ char *argv[3] = { "@kmod@/bin/modprobe", *iter, NULL };
char *envp[1] = { NULL };
GError *error = NULL;
diff --git a/src/ppp-manager/nm-ppp-manager.c b/src/ppp-manager/nm-ppp-manager.c
index 59698c3..7dba0f7 100644
--- a/src/ppp-manager/nm-ppp-manager.c
+++ b/src/ppp-manager/nm-ppp-manager.c
@@ -661,9 +661,7 @@ static inline const char *
nm_find_pppd (void)
{
static const char *pppd_binary_paths[] = {
- "/usr/local/sbin/pppd",
- "/usr/sbin/pppd",
- "/sbin/pppd",
+ "@ppp@/sbin/pppd",
NULL
};
@@ -988,7 +986,7 @@ nm_ppp_manager_start (NMPPPManager *manager,
/* Make sure /dev/ppp exists (bgo #533064) */
if (stat ("/dev/ppp", &st) || !S_ISCHR (st.st_mode))
- ignored = system ("/sbin/modprobe ppp_generic");
+ ignored = system ("@kmod@/bin/modprobe ppp_generic");
connection = nm_act_request_get_connection (req);
g_assert (connection);
@@ -0,0 +1,88 @@
{ lib, stdenv
, fetchurl
, meson
, ninja
, gettext
, pkg-config
, networkmanager
, gnome3
, libnotify
, libsecret
, polkit
, modemmanager
, libnma
, glib-networking
, gsettings-desktop-schemas
, libgudev
, jansson
, wrapGAppsHook
, gobject-introspection
, python3
, gtk3
, libappindicator-gtk3
, glib
}:
stdenv.mkDerivation rec {
pname = "network-manager-applet";
version = "1.20.0";
src = fetchurl {
url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "0lsjkbv66hn7acl2pg9h6hz4b700zzv4cjwrwjvy7043blw0bcla";
};
mesonFlags = [
"-Dselinux=false"
"-Dappindicator=yes"
];
outputs = [ "out" "man" ];
buildInputs = [
libnma
gtk3
networkmanager
libnotify
libsecret
gsettings-desktop-schemas
polkit
libgudev
modemmanager
jansson
glib
glib-networking
libappindicator-gtk3
gnome3.adwaita-icon-theme
];
nativeBuildInputs = [
meson
ninja
gettext
pkg-config
wrapGAppsHook
gobject-introspection
python3
];
postPatch = ''
chmod +x meson_post_install.py # patchShebangs requires executable file
patchShebangs meson_post_install.py
'';
passthru = {
updateScript = gnome3.updateScript {
packageName = pname;
attrPath = "networkmanagerapplet";
};
};
meta = with lib; {
homepage = "https://gitlab.gnome.org/GNOME/network-manager-applet/";
description = "NetworkManager control applet for GNOME";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ phreedom ];
platforms = platforms.linux;
};
}
@@ -0,0 +1,112 @@
{ lib, stdenv, fetchurl, substituteAll, intltool, pkg-config, fetchpatch, dbus
, gnome3, systemd, libuuid, polkit, gnutls, ppp, dhcp, iptables, python3, vala
, libgcrypt, dnsmasq, bluez5, readline, libselinux, audit
, gobject-introspection, modemmanager, openresolv, libndp, newt, libsoup
, ethtool, gnused, iputils, kmod, jansson, gtk-doc, libxslt
, docbook_xsl, docbook_xml_dtd_412, docbook_xml_dtd_42, docbook_xml_dtd_43
, openconnect, curl, meson, ninja, libpsl, mobile-broadband-provider-info, runtimeShell }:
let
pythonForDocs = python3.withPackages (pkgs: with pkgs; [ pygobject3 ]);
in stdenv.mkDerivation rec {
pname = "networkmanager";
version = "1.30.0";
src = fetchurl {
url = "mirror://gnome/sources/NetworkManager/${lib.versions.majorMinor version}/NetworkManager-${version}.tar.xz";
sha256 = "1yf3k3pcszn904lk6rdya1qhp3yxbzsbhcd9l6yfrhlbc8r15w1r";
};
outputs = [ "out" "dev" "devdoc" "man" "doc" ];
# 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.
mesonFlags = [
"-Ddhclient=${dhcp}/bin/dhclient"
"-Ddnsmasq=${dnsmasq}/bin/dnsmasq"
# Upstream prefers dhclient, so don't add dhcpcd to the closure
"-Ddhcpcd=no"
"-Ddhcpcanon=no"
"-Dpppd=${ppp}/bin/pppd"
"-Diptables=${iptables}/bin/iptables"
# to enable link-local connections
"-Dudev_dir=${placeholder "out"}/lib/udev"
"-Dresolvconf=${openresolv}/bin/resolvconf"
"-Ddbus_conf_dir=${placeholder "out"}/share/dbus-1/system.d"
"-Dsystemdsystemunitdir=${placeholder "out"}/etc/systemd/system"
"-Dkernel_firmware_dir=/run/current-system/firmware"
"--sysconfdir=/etc"
"--localstatedir=/var"
"-Dcrypto=gnutls"
"-Dsession_tracking=systemd"
"-Dmodem_manager=true"
"-Dnmtui=true"
"-Ddocs=true"
"-Dtests=no"
"-Dqt=false"
"-Dpolkit_agent_helper_1=/run/wrappers/bin/polkit-agent-helper-1"
# Allow using iwd when configured to do so
"-Diwd=true"
"-Dlibaudit=yes-disabled-by-default"
# We don't use firewalld in NixOS
"-Dfirewalld_zone=false"
];
patches = [
(substituteAll {
src = ./fix-paths.patch;
inherit iputils kmod openconnect ethtool gnused systemd;
inherit runtimeShell;
})
# Meson does not support using different directories during build and
# for installation like Autotools did with flags passed to make install.
./fix-install-paths.patch
];
buildInputs = [
systemd libselinux audit libpsl libuuid polkit ppp libndp curl mobile-broadband-provider-info
bluez5 dnsmasq gobject-introspection modemmanager readline newt libsoup jansson
];
propagatedBuildInputs = [ gnutls libgcrypt ];
nativeBuildInputs = [
meson ninja intltool pkg-config
vala gobject-introspection dbus
# Docs
gtk-doc libxslt docbook_xsl docbook_xml_dtd_412 docbook_xml_dtd_42 docbook_xml_dtd_43 pythonForDocs
];
doCheck = false; # requires /sys, the net
postPatch = ''
patchShebangs ./tools
patchShebangs libnm/generate-setting-docs.py
'';
preBuild = ''
# Our gobject-introspection patches make the shared library paths absolute
# in the GIR files. When building docs, the library is not yet installed,
# though, so we need to replace the absolute path with a local one during build.
# We are using a symlink that will be overridden during installation.
mkdir -p ${placeholder "out"}/lib
ln -s $PWD/libnm/libnm.so.0 ${placeholder "out"}/lib/libnm.so.0
'';
passthru = {
updateScript = gnome3.updateScript {
packageName = pname;
attrPath = "networkmanager";
};
};
meta = with lib; {
homepage = "https://wiki.gnome.org/Projects/NetworkManager";
description = "Network configuration and management tool";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ phreedom domenkozar obadz worldofpeace ];
platforms = platforms.linux;
};
}
@@ -0,0 +1,40 @@
{ lib, stdenv, glib, fetchFromGitHub, networkmanager, python3Packages
, gobject-introspection }:
let inherit (python3Packages) python pygobject3;
in stdenv.mkDerivation rec {
pname = "networkmanager_dmenu";
version = "1.6.0";
src = fetchFromGitHub {
owner = "firecat53";
repo = "networkmanager-dmenu";
rev = version;
sha256 = "1liidqh8c33pxyb07qyj0jkd0fdak73g9r2iwiq62vfzrpik09k0";
};
buildInputs = [ glib python pygobject3 gobject-introspection networkmanager python3Packages.wrapPython ];
dontBuild = true;
installPhase = ''
mkdir -p $out/bin
cp networkmanager_dmenu $out/bin/
'';
postFixup = ''
makeWrapperArgs="\
--prefix GI_TYPELIB_PATH : $GI_TYPELIB_PATH \
--prefix PYTHONPATH : \"$(toPythonPath $out):$(toPythonPath ${pygobject3})\""
wrapPythonPrograms
'';
meta = with lib; {
description = "Small script to manage NetworkManager connections with dmenu instead of nm-applet";
homepage = "https://github.com/firecat53/networkmanager-dmenu";
license = lib.licenses.mit;
maintainers = [ lib.maintainers.jensbin ];
platforms = lib.platforms.all;
};
}
@@ -0,0 +1,16 @@
diff --git a/meson.build b/meson.build
index a2d925a7e..5a65cd2fe 100644
--- a/meson.build
+++ b/meson.build
@@ -959,9 +959,9 @@ meson.add_install_script(
join_paths('tools', 'meson-post-install.sh'),
nm_datadir,
nm_bindir,
- nm_pkgconfdir,
+ nm_prefix + nm_pkgconfdir,
nm_pkglibdir,
- nm_pkgstatedir,
+ nm_prefix + nm_pkgstatedir,
nm_mandir,
nm_sysconfdir,
enable_docs ? '1' : '0',
@@ -0,0 +1,92 @@
diff --git a/clients/common/nm-vpn-helpers.c b/clients/common/nm-vpn-helpers.c
index 15c47c3ec..4d1913aa6 100644
--- a/clients/common/nm-vpn-helpers.c
+++ b/clients/common/nm-vpn-helpers.c
@@ -208,15 +208,7 @@ nm_vpn_openconnect_authenticate_helper(const char *host,
NULL,
};
- path = nm_utils_file_search_in_paths("openconnect",
- "/usr/sbin/openconnect",
- DEFAULT_PATHS,
- G_FILE_TEST_IS_EXECUTABLE,
- NULL,
- NULL,
- error);
- if (!path)
- return FALSE;
+ path = "@openconnect@/bin/openconnect";
if (!g_spawn_sync(NULL,
(char **) NM_MAKE_STRV(path, "--authenticate", host),
diff --git a/data/84-nm-drivers.rules b/data/84-nm-drivers.rules
index e398cb9f2..a43d61864 100644
--- a/data/84-nm-drivers.rules
+++ b/data/84-nm-drivers.rules
@@ -7,6 +7,6 @@ ACTION!="add|change", GOTO="nm_drivers_end"
# Determine ID_NET_DRIVER if there's no ID_NET_DRIVER or DRIVERS (old udev?)
ENV{ID_NET_DRIVER}=="?*", GOTO="nm_drivers_end"
DRIVERS=="?*", GOTO="nm_drivers_end"
-PROGRAM="/bin/sh -c '/usr/sbin/ethtool -i $$1 |/usr/bin/sed -n s/^driver:\ //p' -- $env{INTERFACE}", ENV{ID_NET_DRIVER}="%c"
+PROGRAM="@runtimeShell@ -c '@ethtool@/bin/ethtool -i $$1 |@gnused@/bin/sed -n s/^driver:\ //p' -- $env{INTERFACE}", ENV{ID_NET_DRIVER}="%c"
LABEL="nm_drivers_end"
diff --git a/data/NetworkManager.service.in b/data/NetworkManager.service.in
index 91ebd9a36..5201a56c3 100644
--- a/data/NetworkManager.service.in
+++ b/data/NetworkManager.service.in
@@ -8,7 +8,7 @@ Before=network.target @DISTRO_NETWORK_SERVICE@
[Service]
Type=dbus
BusName=org.freedesktop.NetworkManager
-ExecReload=/usr/bin/busctl call org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager Reload u 0
+ExecReload=@systemd@/bin/busctl call org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager Reload u 0
#ExecReload=/bin/kill -HUP $MAINPID
ExecStart=@sbindir@/NetworkManager --no-daemon
Restart=on-failure
diff --git a/libnm/meson.build b/libnm/meson.build
index d0846419c..a7adb2cc6 100644
--- a/libnm/meson.build
+++ b/libnm/meson.build
@@ -280,7 +280,6 @@ if enable_introspection
output: 'nm-settings-docs-gir.xml',
command: [
generate_setting_docs_env,
- python.path(),
join_paths(meson.source_root(), 'tools', 'generate-docs-nm-settings-docs-gir.py'),
'--lib-path', meson.current_build_dir(),
'--gir', '@INPUT@',
diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c
index 040dd0b4d..98aea3aa9 100644
--- a/src/core/devices/nm-device.c
+++ b/src/core/devices/nm-device.c
@@ -13957,14 +13957,14 @@ nm_device_start_ip_check(NMDevice *self)
gw = nm_ip4_config_best_default_route_get(priv->ip_config_4);
if (gw) {
_nm_utils_inet4_ntop(NMP_OBJECT_CAST_IP4_ROUTE(gw)->gateway, buf);
- ping_binary = nm_utils_find_helper("ping", "/usr/bin/ping", NULL);
+ ping_binary = "@iputils@/bin/ping";
log_domain = LOGD_IP4;
}
} else if (priv->ip_config_6 && priv->ip_state_6 == NM_DEVICE_IP_STATE_DONE) {
gw = nm_ip6_config_best_default_route_get(priv->ip_config_6);
if (gw) {
_nm_utils_inet6_ntop(&NMP_OBJECT_CAST_IP6_ROUTE(gw)->gateway, buf);
- ping_binary = nm_utils_find_helper("ping6", "/usr/bin/ping6", NULL);
+ ping_binary = "@iputils@/bin/ping";
log_domain = LOGD_IP6;
}
}
diff --git a/src/core/nm-core-utils.c b/src/core/nm-core-utils.c
index 9075c30dd..4b140e92b 100644
--- a/src/core/nm-core-utils.c
+++ b/src/core/nm-core-utils.c
@@ -333,7 +333,7 @@ nm_utils_modprobe(GError **error, gboolean suppress_error_logging, const char *a
/* construct the argument list */
argv = g_ptr_array_sized_new(4);
- g_ptr_array_add(argv, "/sbin/modprobe");
+ g_ptr_array_add(argv, "@kmod@/bin/modprobe");
g_ptr_array_add(argv, "--use-blacklist");
g_ptr_array_add(argv, (char *) arg1);
@@ -0,0 +1,83 @@
{ lib, stdenv
, fetchurl
, substituteAll
, openfortivpn
, gettext
, pkg-config
, file
, glib
, gtk3
, networkmanager
, ppp
, libsecret
, withGnome ? true
, gnome3
, fetchpatch
, libnma
}:
stdenv.mkDerivation rec {
pname = "NetworkManager-fortisslvpn";
version = "1.2.10";
name = "${pname}${if withGnome then "-gnome" else ""}-${version}";
src = fetchurl {
url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "1sw66cxgs4in4cjp1cm95c5ijsk8xbbmq4ykg2jwqwgz6cf2lr3s";
};
patches = [
(substituteAll {
src = ./fix-paths.patch;
inherit openfortivpn;
})
# Don't use etc/dbus-1/system.d
(fetchpatch {
url = "https://gitlab.gnome.org/GNOME/NetworkManager-fortisslvpn/merge_requests/11.patch";
sha256 = "0l7l2r1njh62lh2pf497ibf99sgkvjsj58xr76qx3jxgq9zfw6n9";
})
];
nativeBuildInputs = [
gettext
pkg-config
file
];
buildInputs = [
openfortivpn
networkmanager
ppp
glib
] ++ lib.optionals withGnome [
gtk3
libsecret
libnma
];
configureFlags = [
"--with-gnome=${if withGnome then "yes" else "no"}"
"--localstatedir=/var"
"--enable-absolute-paths"
];
installFlags = [
# the installer only creates an empty directory in localstatedir, so
# we can drop it
"localstatedir=."
];
passthru = {
updateScript = gnome3.updateScript {
packageName = pname;
attrPath = "networkmanager-fortisslvpn";
};
};
meta = with lib; {
description = "NetworkManagers FortiSSL plugin";
inherit (networkmanager.meta) maintainers platforms;
license = licenses.gpl2;
};
}
@@ -0,0 +1,11 @@
--- a/src/nm-fortisslvpn-service.c
+++ b/src/nm-fortisslvpn-service.c
@@ -387,7 +387,7 @@
{
static const char *openfortivpn_binary_paths[] =
{
- "/bin/openfortivpn",
+ "@openfortivpn@/bin/openfortivpn",
"/usr/bin/openfortivpn",
"/usr/local/bin/openfortivpn",
NULL
@@ -0,0 +1,58 @@
{ lib, stdenv, fetchFromGitLab, substituteAll, autoreconfHook, iodine, intltool, pkg-config, networkmanager, libsecret, gtk3
, withGnome ? true, gnome3, fetchpatch, libnma, glib }:
let
pname = "NetworkManager-iodine";
version = "unstable-2019-11-05";
in stdenv.mkDerivation {
name = "${pname}${if withGnome then "-gnome" else ""}-${version}";
src = fetchFromGitLab {
domain = "gitlab.gnome.org";
owner = "GNOME";
repo = "network-manager-iodine";
rev = "2ef0abf089b00a0546f214dde0d45e63f2990b79";
sha256 = "1ps26fr9b1yyafj7lrzf2kmaxb0ipl0mhagch5kzrjdsc5xkajz7";
};
patches = [
(substituteAll {
src = ./fix-paths.patch;
inherit iodine;
})
# Don't use etc/dbus-1/system.d
(fetchpatch {
url = "https://gitlab.gnome.org/GNOME/network-manager-iodine/merge_requests/2.patch";
sha256 = "108pkf0mddj32s46k7jkmpwcaq2ylci4dqpp7wck3zm9q2jffff2";
})
];
buildInputs = [ iodine networkmanager glib ]
++ lib.optionals withGnome [ gtk3 libsecret libnma ];
nativeBuildInputs = [ intltool autoreconfHook pkg-config ];
# glib-2.62 deprecations
NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
preConfigure = "intltoolize";
configureFlags = [
"--without-libnm-glib"
"--with-gnome=${if withGnome then "yes" else "no"}"
"--localstatedir=/" # needed for the management socket under /run/NetworkManager
"--enable-absolute-paths"
];
passthru = {
updateScript = gnome3.updateScript {
packageName = pname;
attrPath = "networkmanager-iodine";
};
};
meta = with lib; {
description = "NetworkManager's iodine plugin";
inherit (networkmanager.meta) maintainers platforms;
license = licenses.gpl2Plus;
};
}
@@ -0,0 +1,11 @@
--- a/src/nm-iodine-service.c
+++ b/src/nm-iodine-service.c
@@ -62,7 +62,7 @@
static const char *iodine_binary_paths[] =
{
- "/usr/bin/iodine",
+ "@iodine@/bin/iodine",
"/usr/sbin/iodine",
"/usr/local/bin/iodine",
"/usr/local/sbin/iodine",
@@ -0,0 +1,51 @@
{ lib, stdenv, substituteAll, fetchFromGitHub, autoreconfHook, libtool, intltool, pkg-config
, file, findutils
, gtk3, networkmanager, ppp, xl2tpd, strongswan, libsecret
, withGnome ? true, libnma }:
stdenv.mkDerivation rec {
name = "${pname}${if withGnome then "-gnome" else ""}-${version}";
pname = "NetworkManager-l2tp";
version = "1.2.12";
src = fetchFromGitHub {
owner = "nm-l2tp";
repo = "network-manager-l2tp";
rev = version;
sha256 = "0cq07kvlm98s8a7l4a3zmqnif8x3307kv7n645zx3f1r7x72b8m4";
};
patches = [
(substituteAll {
src = ./fix-paths.patch;
inherit strongswan xl2tpd;
})
];
buildInputs = [ networkmanager ppp ]
++ lib.optionals withGnome [ gtk3 libsecret libnma ];
nativeBuildInputs = [ autoreconfHook libtool intltool pkg-config file findutils ];
preConfigure = ''
intltoolize -f
'';
configureFlags = [
"--without-libnm-glib"
"--with-gnome=${if withGnome then "yes" else "no"}"
"--localstatedir=/var"
"--sysconfdir=$(out)/etc"
"--enable-absolute-paths"
];
enableParallelBuilding = true;
meta = with lib; {
description = "L2TP plugin for NetworkManager";
inherit (networkmanager.meta) platforms;
homepage = "https://github.com/nm-l2tp/network-manager-l2tp";
license = licenses.gpl2;
maintainers = with maintainers; [ abbradar obadz ];
};
}
@@ -0,0 +1,22 @@
diff --git a/shared/utils.c b/shared/utils.c
index c978a1f..d2c36cd 100644
--- a/shared/utils.c
+++ b/shared/utils.c
@@ -52,7 +52,7 @@ nm_find_ipsec (void)
{
static const char *ipsec_binary_paths[] =
{
- "/sbin/ipsec",
+ "@strongswan@/bin/ipsec",
"/usr/sbin/ipsec",
"/usr/local/sbin/ipsec",
"/sbin/strongswan",
@@ -77,7 +77,7 @@ nm_find_l2tpd (void)
{
static const char *l2tp_binary_paths[] =
{
- "/sbin/xl2tpd",
+ "@xl2tpd@/bin/xl2tpd",
"/usr/sbin/xl2tpd",
"/usr/local/sbin/xl2tpd",
NULL
@@ -0,0 +1,90 @@
{ stdenv
, fetchurl
, meson
, ninja
, gettext
, gtk-doc
, pkg-config
, vala
, networkmanager
, gnome3
, isocodes
, libxml2
, docbook_xsl
, docbook_xml_dtd_43
, mobile-broadband-provider-info
, gobject-introspection
, gtk3
, withGnome ? true
, gcr
, glib
, substituteAll
, lib
}:
stdenv.mkDerivation rec {
pname = "libnma";
version = "1.8.30";
outputs = [ "out" "dev" "devdoc" ];
src = fetchurl {
url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "1d5gzn7ss5vi0bhc8s4i5gsrck1ajslajam5jxfqazg094mffcys";
};
patches = [
# Needed for wingpanel-indicator-network and switchboard-plug-network
./hardcode-gsettings.patch
];
nativeBuildInputs = [
meson
ninja
gettext
pkg-config
gobject-introspection
gtk-doc
docbook_xsl
docbook_xml_dtd_43
libxml2
vala
];
buildInputs = [
gtk3
networkmanager
isocodes
mobile-broadband-provider-info
] ++ lib.optionals withGnome [
# advanced certificate chooser
gcr
];
mesonFlags = [
"-Dgcr=${lib.boolToString withGnome}"
];
postPatch = ''
substituteInPlace src/nma-ws/nma-eap.c --subst-var-by \
NM_APPLET_GSETTINGS ${glib.makeSchemaPath "$out" "${pname}-${version}"}
'';
postInstall = ''
glib-compile-schemas $out/share/glib-2.0/schemas
'';
passthru = {
updateScript = gnome3.updateScript {
packageName = pname;
};
};
meta = with lib; {
homepage = "https://gitlab.gnome.org/GNOME/libnma";
description = "NetworkManager UI utilities (libnm version)";
license = licenses.gpl2Plus; # Mix of GPL and LPGL 2+
maintainers = teams.gnome.members;
platforms = platforms.linux;
};
}
@@ -0,0 +1,26 @@
--- a/src/nma-ws/nma-eap.c
+++ b/src/nma-ws/nma-eap.c
@@ -248,11 +248,16 @@ nma_eap_ca_cert_ignore_get (NMAEap *method, NMConnection *connection)
static GSettings *
_get_ca_ignore_settings (NMConnection *connection)
{
+ g_autoptr (GSettingsSchemaSource) *schema_source;
+ g_autoptr (GSettingsSchema) *schema;
GSettings *settings;
char *path = NULL;
const char *uuid;
g_return_val_if_fail (connection, NULL);
+ schema_source = g_settings_schema_source_new_from_directory ("@NM_APPLET_GSETTINGS@", g_settings_schema_source_get_default (), TRUE, NULL);
+ schema = g_settings_schema_source_lookup (schema_source, "org.gnome.nm-applet.eap", FALSE);
+
uuid = nm_connection_get_uuid (connection);
g_return_val_if_fail (uuid && *uuid, NULL);
path = g_strdup_printf ("/org/gnome/nm-applet/eap/%s/", uuid);
- settings = g_settings_new_with_path ("org.gnome.nm-applet.eap", path);
+ settings = g_settings_new_full (schema, NULL, path);
g_free (path);
return settings;
@@ -0,0 +1,80 @@
{ lib, stdenv
, fetchurl
, substituteAll
, glib
, libxml2
, openconnect
, intltool
, pkg-config
, autoreconfHook
, networkmanager
, gcr
, libsecret
, file
, gtk3
, withGnome ? true
, gnome3
, kmod
, fetchpatch
}:
let
pname = "NetworkManager-openconnect";
version = "1.2.6";
in stdenv.mkDerivation {
name = "${pname}${if withGnome then "-gnome" else ""}-${version}";
src = fetchurl {
url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "0nlp290nkawc4wqm978n4vhzg3xdqi8kpjjx19l855vab41rh44m";
};
patches = [
(substituteAll {
src = ./fix-paths.patch;
inherit kmod openconnect;
})
# Don't use etc/dbus-1/system.d
(fetchpatch {
url = "https://gitlab.gnome.org/GNOME/NetworkManager-openconnect/merge_requests/9.patch";
sha256 = "0yd2dmq6gq6y4czr7dqdgaiqvw2vyv2gikznpfdxyfn2v1pcrk9m";
})
];
buildInputs = [
glib
libxml2
openconnect
networkmanager
] ++ lib.optionals withGnome [
gtk3
gcr
libsecret
];
nativeBuildInputs = [
intltool
pkg-config
file
];
configureFlags = [
"--with-gnome=${if withGnome then "yes" else "no"}"
"--enable-absolute-paths"
"--without-libnm-glib"
];
passthru = {
updateScript = gnome3.updateScript {
packageName = pname;
attrPath = "networkmanager-openconnect";
};
};
meta = with lib; {
description = "NetworkManagers OpenConnect plugin";
inherit (networkmanager.meta) maintainers platforms;
license = licenses.gpl2Plus;
};
}
@@ -0,0 +1,20 @@
--- a/src/nm-openconnect-service.c
+++ b/src/nm-openconnect-service.c
@@ -60,7 +60,7 @@
static const char *openconnect_binary_paths[] =
{
- "/usr/bin/openconnect",
+ "@openconnect@/bin/openconnect",
"/usr/sbin/openconnect",
"/usr/local/bin/openconnect",
"/usr/local/sbin/openconnect",
@@ -734,7 +734,7 @@
_LOGD ("nm-openconnect-service (version " DIST_VERSION ") starting...");
- if (system ("/sbin/modprobe tun") == -1)
+ if (system ("@kmod@/bin/modprobe tun") == -1)
exit (EXIT_FAILURE);
if (bus_name)
@@ -0,0 +1,45 @@
{ lib, stdenv, fetchurl, substituteAll, openvpn, intltool, libxml2, pkg-config, file, networkmanager, libsecret
, gtk3, withGnome ? true, gnome3, kmod, libnma }:
let
pname = "NetworkManager-openvpn";
version = "1.8.12";
in stdenv.mkDerivation {
name = "${pname}${if withGnome then "-gnome" else ""}-${version}";
src = fetchurl {
url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "062kh4zj7jfbwy4zzcwpq2m457bzbpm3l18s0ysnw3mgia3siz8f";
};
patches = [
(substituteAll {
src = ./fix-paths.patch;
inherit kmod openvpn;
})
];
buildInputs = [ openvpn networkmanager ]
++ lib.optionals withGnome [ gtk3 libsecret libnma ];
nativeBuildInputs = [ intltool pkg-config file libxml2 ];
configureFlags = [
"--with-gnome=${if withGnome then "yes" else "no"}"
"--localstatedir=/" # needed for the management socket under /run/NetworkManager
"--enable-absolute-paths"
];
passthru = {
updateScript = gnome3.updateScript {
packageName = pname;
attrPath = "networkmanager-openvpn";
};
};
meta = with lib; {
description = "NetworkManager's OpenVPN plugin";
inherit (networkmanager.meta) maintainers platforms;
license = licenses.gpl2Plus;
};
}
@@ -0,0 +1,34 @@
--- a/properties/nm-openvpn-editor.c
+++ b/properties/nm-openvpn-editor.c
@@ -775,8 +775,7 @@
nm_find_openvpn (void)
{
static const char *openvpn_binary_paths[] = {
- "/usr/sbin/openvpn",
- "/sbin/openvpn",
+ "@openvpn@/bin/openvpn",
NULL
};
const char **openvpn_binary = openvpn_binary_paths;
--- a/src/nm-openvpn-service.c
+++ b/src/nm-openvpn-service.c
@@ -522,9 +522,7 @@
openvpn_binary_find_exepath (void)
{
static const char *paths[] = {
- "/usr/sbin/openvpn",
- "/sbin/openvpn",
- "/usr/local/sbin/openvpn",
+ "@openvpn@/bin/openvpn",
};
int i;
@@ -2326,7 +2324,7 @@
_LOGD ("nm-openvpn-service (version " DIST_VERSION ") starting...");
if ( !g_file_test ("/sys/class/misc/tun", G_FILE_TEST_EXISTS)
- && (system ("/sbin/modprobe tun") == -1))
+ && (system ("@kmod@/bin/modprobe tun") == -1))
return EXIT_FAILURE;
plugin = nm_openvpn_plugin_new (bus_name);
@@ -0,0 +1,64 @@
{ lib, stdenv
, autoreconfHook
, fetchFromGitHub
, fetchpatch
, file
, glib
, gnome3
, gtk3
, intltool
, libnma
, libsecret
, networkmanager
, pkg-config
, ppp
, sstp
, substituteAll
, withGnome ? true }:
let
pname = "NetworkManager-sstp";
version = "unstable-2020-04-20";
in stdenv.mkDerivation {
name = "${pname}${if withGnome then "-gnome" else ""}-${version}";
src = fetchFromGitHub {
owner = "enaess";
repo = "network-manager-sstp";
rev = "735d8ca078f933e085029f60a737e3cf1d8c29a8";
sha256 = "0aahfhy2ch951kzj6gnd8p8hv2s5yd5y10wrmj68djhnx2ml8cd3";
};
buildInputs = [ sstp networkmanager glib ppp ]
++ lib.optionals withGnome [ gtk3 libsecret libnma ];
nativeBuildInputs = [ file intltool autoreconfHook pkg-config ];
postPatch = ''
sed -i 's#/sbin/pppd#${ppp}/bin/pppd#' src/nm-sstp-service.c
sed -i 's#/sbin/sstpc#${sstp}/bin/sstpc#' src/nm-sstp-service.c
'';
# glib-2.62 deprecations
NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
preConfigure = "intltoolize";
configureFlags = [
"--without-libnm-glib"
"--with-gnome=${if withGnome then "yes" else "no"}"
"--enable-absolute-paths"
];
passthru = {
updateScript = gnome3.updateScript {
packageName = pname;
attrPath = "networkmanager-sstp";
};
};
meta = with lib; {
description = "NetworkManager's sstp plugin";
inherit (networkmanager.meta) maintainers platforms;
license = licenses.gpl2Plus;
};
}
@@ -0,0 +1,34 @@
{ lib, stdenv, fetchurl, intltool, pkg-config, networkmanager, strongswanNM
, gtk3, gnome3, libsecret, libnma }:
stdenv.mkDerivation rec {
pname = "NetworkManager-strongswan";
version = "1.5.2";
src = fetchurl {
url = "https://download.strongswan.org/NetworkManager/${pname}-${version}.tar.bz2";
sha256 = "0sc1yzlxjfvl58hjjw99bchqc4061i3apw254z61v22k4sajnif8";
};
buildInputs = [ networkmanager strongswanNM libsecret gtk3 libnma ];
nativeBuildInputs = [ intltool pkg-config ];
# glib-2.62 deprecations
NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
configureFlags = [
"--without-libnm-glib"
"--with-charon=${strongswanNM}/libexec/ipsec/charon-nm"
"--with-nm-libexecdir=$(out)/libexec"
"--with-nm-plugindir=$(out)/lib/NetworkManager"
];
PKG_CONFIG_LIBNM_VPNSERVICEDIR = "$(out)/lib/NetworkManager/VPN";
meta = with lib; {
description = "NetworkManager's strongswan plugin";
inherit (networkmanager.meta) platforms;
license = licenses.gpl2Plus;
};
}
@@ -0,0 +1,31 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, qttools, qtbase, networkmanager-qt, modemmanager-qt }:
mkDerivation rec {
pname = "nm-tray";
version = "0.4.3";
src = fetchFromGitHub {
owner = "palinek";
repo = pname;
rev = version;
sha256 = "08c86kd613wlvw9571q7a3lb7g6skyyasjw6h1g543rbl4jn2c2v";
};
postPatch = ''
sed -i -e '1i#include <QMetaEnum>' src/nmmodel.cpp
'';
nativeBuildInputs = [ cmake qttools ];
cmakeFlags = [ "-DWITH_MODEMMANAGER_SUPPORT=ON" ];
buildInputs = [ qtbase networkmanager-qt modemmanager-qt ];
meta = with lib; {
description = "Simple Network Manager frontend written in Qt";
homepage = "https://github.com/palinek/nm-tray";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ dtzWill ];
platforms = platforms.linux;
};
}
@@ -0,0 +1,49 @@
{ lib, stdenv, fetchurl, substituteAll, vpnc, intltool, pkg-config, networkmanager, libsecret
, gtk3, withGnome ? true, gnome3, glib, kmod, file, fetchpatch, libnma }:
let
pname = "NetworkManager-vpnc";
version = "1.2.6";
in stdenv.mkDerivation {
name = "${pname}${if withGnome then "-gnome" else ""}-${version}";
src = fetchurl {
url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "1js5lwcsqws4klgypfxl4ikmakv7v7xgddij1fj6b0y0qicx0kyy";
};
patches = [
(substituteAll {
src = ./fix-paths.patch;
inherit vpnc kmod;
})
# Don't use etc/dbus-1/system.d
(fetchpatch {
url = "https://gitlab.gnome.org/GNOME/NetworkManager-vpnc/merge_requests/5.patch";
sha256 = "0z0x5vqmrsap3ynamhya7gh6c6k5grhj2vqpy76alnv9xns8dzi6";
})
];
buildInputs = [ vpnc networkmanager glib ]
++ lib.optionals withGnome [ gtk3 libsecret libnma ];
nativeBuildInputs = [ intltool pkg-config file ];
configureFlags = [
"--without-libnm-glib"
"--with-gnome=${if withGnome then "yes" else "no"}"
"--enable-absolute-paths"
];
passthru = {
updateScript = gnome3.updateScript {
packageName = pname;
attrPath = "networkmanager-vpnc";
};
};
meta = with lib; {
description = "NetworkManager's VPNC plugin";
inherit (networkmanager.meta) maintainers platforms;
license = licenses.gpl2Plus;
};
}
@@ -0,0 +1,31 @@
--- a/properties/nm-vpnc-editor-plugin.c
+++ b/properties/nm-vpnc-editor-plugin.c
@@ -161,7 +161,7 @@
GError *error = NULL;
const char *decrypt_possible_paths[] = {
- "/usr/lib/vpnc/cisco-decrypt",
+ "@vpnc@/bin/cisco-decrypt",
"/usr/bin/cisco-decrypt",
NULL
};
--- a/src/nm-vpnc-service.c
+++ b/src/nm-vpnc-service.c
@@ -610,7 +610,7 @@
find_vpnc (void)
{
static const char *vpnc_paths[] = {
- "/usr/sbin/vpnc",
+ "@vpnc@/bin/vpnc",
"/sbin/vpnc",
"/usr/local/sbin/vpnc",
NULL
@@ -1308,7 +1308,7 @@
_LOGD (" vpnc interactive mode is %s", interactive_available ? "enabled" : "disabled");
_LOGD (" uses%s --bus-name \"%s\"", bus_name_free ? "" : " default", bus_name);
- if (system ("/sbin/modprobe tun") == -1)
+ if (system ("@kmod@/bin/modprobe tun") == -1)
exit (EXIT_FAILURE);
plugin = nm_vpnc_plugin_new (bus_name);