dhcpcd automatically enables privsep if it can find a suitably named user on the system, which makes it impossible to build dhcpcd without privsep on a system that's currently running dhcpcd with privsep enabled. also passthru whether privsep is enabled so that the module can check it.
70 lines
1.7 KiB
Nix
70 lines
1.7 KiB
Nix
{ lib
|
|
, stdenv
|
|
, fetchurl
|
|
, pkg-config
|
|
, udev
|
|
, runtimeShellPackage
|
|
, runtimeShell
|
|
, nixosTests
|
|
, enablePrivSep ? true
|
|
}:
|
|
|
|
stdenv.mkDerivation rec {
|
|
pname = "dhcpcd";
|
|
version = "9.4.1";
|
|
|
|
src = fetchurl {
|
|
url = "mirror://roy/${pname}/${pname}-${version}.tar.xz";
|
|
sha256 = "sha256-gZNXY07+0epc9E7AGyTT0/iFL+yLQkmSXcxWZ8VON2w=";
|
|
};
|
|
|
|
nativeBuildInputs = [ pkg-config ];
|
|
buildInputs = [
|
|
udev
|
|
runtimeShellPackage # So patchShebangs finds a bash suitable for the installed scripts
|
|
];
|
|
|
|
prePatch = ''
|
|
substituteInPlace hooks/dhcpcd-run-hooks.in --replace /bin/sh ${runtimeShell}
|
|
'';
|
|
|
|
preConfigure = "patchShebangs ./configure";
|
|
|
|
configureFlags = [
|
|
"--sysconfdir=/etc"
|
|
"--localstatedir=/var"
|
|
]
|
|
++ (
|
|
if ! enablePrivSep
|
|
then [ "--disable-privsep" ]
|
|
else [
|
|
"--enable-privsep"
|
|
# dhcpcd disables privsep if it can't find the default user,
|
|
# so we explicitly specify a user.
|
|
"--privsepuser=dhcpcd"
|
|
]
|
|
);
|
|
|
|
makeFlags = [ "PREFIX=${placeholder "out"}" ];
|
|
|
|
# Hack to make installation succeed. dhcpcd will still use /var/db
|
|
# at runtime.
|
|
installFlags = [ "DBDIR=$(TMPDIR)/db" "SYSCONFDIR=${placeholder "out"}/etc" ];
|
|
|
|
# Check that the udev plugin got built.
|
|
postInstall = lib.optionalString (udev != null) "[ -e ${placeholder "out"}/lib/dhcpcd/dev/udev.so ]";
|
|
|
|
passthru = {
|
|
inherit enablePrivSep;
|
|
tests = { inherit (nixosTests.networking.scripted) macvlan dhcpSimple dhcpOneIf; };
|
|
};
|
|
|
|
meta = with lib; {
|
|
description = "A client for the Dynamic Host Configuration Protocol (DHCP)";
|
|
homepage = "https://roy.marples.name/projects/dhcpcd";
|
|
platforms = platforms.linux;
|
|
license = licenses.bsd2;
|
|
maintainers = with maintainers; [ eelco fpletz ];
|
|
};
|
|
}
|