about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/dns/ncdns/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/servers/dns/ncdns/default.nix')
-rw-r--r--nixpkgs/pkgs/servers/dns/ncdns/default.nix111
1 files changed, 111 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/dns/ncdns/default.nix b/nixpkgs/pkgs/servers/dns/ncdns/default.nix
new file mode 100644
index 000000000000..37d4b596d244
--- /dev/null
+++ b/nixpkgs/pkgs/servers/dns/ncdns/default.nix
@@ -0,0 +1,111 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, nixosTests
+, libcap
+}:
+
+let
+
+  # ncdns source
+  ncdns = fetchFromGitHub {
+    owner = "namecoin";
+    repo = "ncdns";
+    rev = "5adda8d4726d389597df432eb2e17eac1677cea2";
+    sha256 = "sha256-Q/RrUTY4WfrByvQv1eCX29DQNf2vSIR29msmhgS73xk=";
+  };
+
+  # script to patch the crypto/x509 package
+  x509 = fetchFromGitHub {
+    owner = "namecoin";
+    repo = "x509-compressed";
+    rev = "2e30a62a69dac54a977410f283308df232a5d244";
+    sha256 = "sha256-/Bd1gYjguj8AiKHyiaIKT+Y3R7kq5gLZlJhY9g/xFXk=";
+    # ncdns must be put in a subdirectory for this to work.
+    postFetch = ''
+      cp -r --no-preserve=mode "${ncdns}" "$out/ncdns"
+    '';
+  };
+
+in
+
+buildGoModule {
+  pname = "ncdns";
+  version = "unstable-2022-10-07";
+
+  src = x509;
+
+  vendorHash = "sha256-ENtTnDsz5WhRz1kiqnWQ5vyEpZtgi7ZeYvksffgW78k=";
+
+  # Override the goModules fetcher derivation to apply
+  # upstream's patch of the crypto/x509 library.
+  modBuildPhase = ''
+    go mod init github.com/namecoin/x509-compressed
+    go generate ./...
+    go mod tidy
+
+    cd ncdns
+    go mod init github.com/namecoin/ncdns
+    go mod edit \
+      -replace github.com/coreos/go-systemd=github.com/coreos/go-systemd/v22@latest \
+      -replace github.com/namecoin/x509-compressed=$NIX_BUILD_TOP/source
+    go mod tidy
+  '';
+
+  # Copy over the lockfiles as well, because the source
+  # doesn't contain it. The fixed-output derivation is
+  # probably not reproducible anyway.
+  modInstallPhase = ''
+    mv -t vendor go.mod go.sum
+    cp -r --reflink=auto vendor "$out"
+  '';
+
+  buildInputs = [ libcap ];
+
+  # The fetcher derivation must run with a different
+  # $sourceRoot, but buildGoModule doesn't allow that,
+  # so we use this ugly hack.
+  unpackPhase = ''
+    runHook preUnpack
+
+    unpackFile "$src"
+    sourceRoot=$PWD/source/ncdns
+    chmod -R u+w -- "$sourceRoot"
+    cd $sourceRoot
+
+    runHook postUnpack
+  '';
+
+  # Same as above: can't use `patches` because that would
+  # be also applied to the fetcher derivation, thus failing.
+  patchPhase = ''
+    runHook prePatch
+    patch -p1 < ${./fix-tpl-path.patch}
+    runHook postPatch
+  '';
+
+  preBuild = ''
+    chmod -R u+w vendor
+    mv -t . vendor/go.{mod,sum}
+  '';
+
+  preCheck = ''
+    # needed to run the ncdns test suite
+    ln -s $PWD/vendor ../../go/src
+  '';
+
+  postInstall = ''
+    mkdir -p "$out/share"
+    cp -r _doc "$out/share/doc"
+    cp -r _tpl "$out/share/tpl"
+  '';
+
+  passthru.tests.ncdns = nixosTests.ncdns;
+
+  meta = with lib; {
+    description = "Namecoin to DNS bridge daemon";
+    homepage = "https://github.com/namecoin/ncdns";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ rnhmjoj ];
+  };
+}