nar-serve: init at 0.3.0 (#95420)
* nar-serve: init at 0.3.0 * nixos/nar-serve: add new module Co-authored-by: zimbatm <zimbatm@zimbatm.com>wip/yesman
parent
a361626b6e
commit
038497d3b3
@ -0,0 +1,55 @@ |
||||
{ config, pkgs, lib, ... }: |
||||
|
||||
with lib; |
||||
let |
||||
cfg = config.services.nar-serve; |
||||
in |
||||
{ |
||||
meta = { |
||||
maintainers = [ maintainers.rizary ]; |
||||
}; |
||||
options = { |
||||
services.nar-serve = { |
||||
enable = mkEnableOption "Serve NAR file contents via HTTP"; |
||||
|
||||
port = mkOption { |
||||
type = types.int; |
||||
default = 8383; |
||||
description = '' |
||||
Port number where nar-serve will listen on. |
||||
''; |
||||
}; |
||||
|
||||
cacheURL = mkOption { |
||||
type = types.str; |
||||
default = "https://cache.nixos.org/"; |
||||
description = '' |
||||
Binary cache URL to connect to. |
||||
|
||||
The URL format is compatible with the nix remote url style, such as: |
||||
- http://, https:// for binary caches via HTTP or HTTPS |
||||
- s3:// for binary caches stored in Amazon S3 |
||||
- gs:// for binary caches stored in Google Cloud Storage |
||||
''; |
||||
}; |
||||
}; |
||||
}; |
||||
|
||||
config = mkIf cfg.enable { |
||||
systemd.services.nar-serve = { |
||||
description = "NAR server"; |
||||
after = [ "network.target" ]; |
||||
wantedBy = [ "multi-user.target" ]; |
||||
|
||||
environment.PORT = toString cfg.port; |
||||
environment.NAR_CACHE_URL = cfg.cacheURL; |
||||
|
||||
serviceConfig = { |
||||
Restart = "always"; |
||||
RestartSec = "5s"; |
||||
ExecStart = "${pkgs.nar-serve}/bin/nar-serve"; |
||||
DynamicUser = true; |
||||
}; |
||||
}; |
||||
}; |
||||
} |
@ -0,0 +1,48 @@ |
||||
import ./make-test-python.nix ( |
||||
{ pkgs, lib, ... }: |
||||
{ |
||||
name = "nar-serve"; |
||||
meta.maintainers = [ lib.maintainers.rizary ]; |
||||
nodes = |
||||
{ |
||||
server = { pkgs, ... }: { |
||||
services.nginx = { |
||||
enable = true; |
||||
virtualHosts.default.root = "/var/www"; |
||||
}; |
||||
services.nar-serve = { |
||||
enable = true; |
||||
# Connect to the localhost nginx instead of the default |
||||
# https://cache.nixos.org |
||||
cacheURL = "http://localhost/"; |
||||
}; |
||||
environment.systemPackages = [ |
||||
pkgs.hello |
||||
pkgs.curl |
||||
]; |
||||
|
||||
networking.firewall.allowedTCPPorts = [ 8383 ]; |
||||
|
||||
# virtualisation.diskSize = 2 * 1024; |
||||
}; |
||||
}; |
||||
testScript = '' |
||||
start_all() |
||||
|
||||
# Create a fake cache with Nginx service the static files |
||||
server.succeed( |
||||
"nix copy --to file:///var/www ${pkgs.hello}" |
||||
) |
||||
server.wait_for_unit("nginx.service") |
||||
server.wait_for_open_port(80) |
||||
|
||||
# Check that nar-serve can return the content of the derivation |
||||
drvName = os.path.basename("${pkgs.hello}") |
||||
drvHash = drvName.split("-")[0] |
||||
server.wait_for_unit("nar-serve.service") |
||||
server.succeed( |
||||
"curl -o hello -f http://localhost:8383/nix/store/{}/bin/hello".format(drvHash) |
||||
) |
||||
''; |
||||
} |
||||
) |
@ -0,0 +1,31 @@ |
||||
{ buildGoModule |
||||
, fetchFromGitHub |
||||
, lib |
||||
, stdenv |
||||
}: |
||||
let |
||||
pname = "nar-serve"; |
||||
version = "0.3.0"; |
||||
|
||||
in |
||||
buildGoModule rec { |
||||
inherit pname version; |
||||
|
||||
src = fetchFromGitHub { |
||||
owner = "numtide"; |
||||
repo = "nar-serve"; |
||||
rev = "v${version}"; |
||||
sha256 = "000xxrar5ngrqqfi7ynx84i6wi27mirgm26brhyg0y4pygc9ykhz"; |
||||
}; |
||||
|
||||
vendorSha256 = "0qkzbr85wkx3r7qgnzg9pdl7vsli10bzcdbj2gqd1kdzwb8khszs"; |
||||
|
||||
doCheck = false; |
||||
|
||||
meta = with stdenv.lib; { |
||||
description = "Serve NAR file contents via HTTP"; |
||||
homepage = "https://github.com/numtide/nar-serve"; |
||||
license = licenses.mit; |
||||
maintainers = with maintainers; [ rizary ]; |
||||
}; |
||||
} |
Loading…
Reference in new issue