diff options
Diffstat (limited to 'nixpkgs/pkgs/servers/dns/ncdns')
-rw-r--r-- | nixpkgs/pkgs/servers/dns/ncdns/default.nix | 112 | ||||
-rw-r--r-- | nixpkgs/pkgs/servers/dns/ncdns/fix-tpl-path.patch | 27 |
2 files changed, 139 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..7fad548df7a5 --- /dev/null +++ b/nixpkgs/pkgs/servers/dns/ncdns/default.nix @@ -0,0 +1,112 @@ +{ lib +, buildGoModule +, fetchFromGitHub +, nixosTests +, libcap +}: + +let + + # ncdns source + ncdns = fetchFromGitHub { + owner = "namecoin"; + repo = "ncdns"; + rev = "2a486311b0fe1a921af34aa3b31e6e4e0569accc"; + sha256 = "01arwlycp1iia4bd3dgyn8dam1av2a7d9hv7f085n14l2i2aza7v"; + }; + + # script to patch the crypto/x509 package + x509 = fetchFromGitHub { + owner = "namecoin"; + repo = "x509-compressed"; + rev = "fb9f2b7bc9fcba954d70f63857cc0c3841b1cf47"; + sha256 = "1arkbpbzvhcmz5fhjqg34x2jbjnwmlisapk22rjki17qpamh7zks"; + # ncdns must be put in a subdirectory for this to work. + extraPostFetch = '' + cp -r --no-preserve=mode "${ncdns}" "$out/ncdns" + ''; + }; + +in + +buildGoModule { + pname = "ncdns"; + version = "unstable-2020-07-18"; + + src = x509; + + vendorSha256 = "02bqf6vkj5msk35sr5sklnqqd16n7gns7knzqslw077xrxiz7bsg"; + + # Override the go-modules 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 postUpack + ''; + + # 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" + ''; + + meta = with lib; { + description = "Namecoin to DNS bridge daemon"; + homepage = "https://github.com/namecoin/ncdns"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ rnhmjoj ]; + }; + + passthru.tests.ncdns = nixosTests.ncdns; + +} diff --git a/nixpkgs/pkgs/servers/dns/ncdns/fix-tpl-path.patch b/nixpkgs/pkgs/servers/dns/ncdns/fix-tpl-path.patch new file mode 100644 index 000000000000..850fb4d1b189 --- /dev/null +++ b/nixpkgs/pkgs/servers/dns/ncdns/fix-tpl-path.patch @@ -0,0 +1,27 @@ +This sets a default value for the tpl directory that works for Nixpkgs. + +diff --git a/server/web.go b/server/web.go +index d024a42..0522d02 100644 +--- a/server/web.go ++++ b/server/web.go +@@ -10,6 +10,7 @@ import "path/filepath" + import "time" + import "strings" + import "fmt" ++import "os" + + var layoutTpl *template.Template + var mainPageTpl *template.Template +@@ -44,7 +45,11 @@ func deriveTemplate(filename string) (*template.Template, error) { + } + + func (s *Server) tplFilename(filename string) string { +- td := filepath.Join(s.cfg.ConfigDir, "..", "tpl") ++ ex, err := os.Executable() ++ if err != nil { ++ panic(err) ++ } ++ td := filepath.Join(filepath.Dir(ex), "..", "share", "tpl") + if s.cfg.TplPath != "" { + td = s.cfg.TplPath + } |