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>
This commit is contained in:
parent
a361626b6e
commit
038497d3b3
@ -680,6 +680,7 @@
|
|||||||
./services/networking/murmur.nix
|
./services/networking/murmur.nix
|
||||||
./services/networking/mxisd.nix
|
./services/networking/mxisd.nix
|
||||||
./services/networking/namecoind.nix
|
./services/networking/namecoind.nix
|
||||||
|
./services/networking/nar-serve.nix
|
||||||
./services/networking/nat.nix
|
./services/networking/nat.nix
|
||||||
./services/networking/ndppd.nix
|
./services/networking/ndppd.nix
|
||||||
./services/networking/networkmanager.nix
|
./services/networking/networkmanager.nix
|
||||||
|
55
nixos/modules/services/networking/nar-serve.nix
Normal file
55
nixos/modules/services/networking/nar-serve.nix
Normal file
@ -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;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
@ -225,6 +225,7 @@ in
|
|||||||
mysql-backup = handleTest ./mysql/mysql-backup.nix {};
|
mysql-backup = handleTest ./mysql/mysql-backup.nix {};
|
||||||
mysql-replication = handleTest ./mysql/mysql-replication.nix {};
|
mysql-replication = handleTest ./mysql/mysql-replication.nix {};
|
||||||
nagios = handleTest ./nagios.nix {};
|
nagios = handleTest ./nagios.nix {};
|
||||||
|
nar-serve = handleTest ./nar-serve.nix {};
|
||||||
nat.firewall = handleTest ./nat.nix { withFirewall = true; };
|
nat.firewall = handleTest ./nat.nix { withFirewall = true; };
|
||||||
nat.firewall-conntrack = handleTest ./nat.nix { withFirewall = true; withConntrackHelpers = true; };
|
nat.firewall-conntrack = handleTest ./nat.nix { withFirewall = true; withConntrackHelpers = true; };
|
||||||
nat.standalone = handleTest ./nat.nix { withFirewall = false; };
|
nat.standalone = handleTest ./nat.nix { withFirewall = false; };
|
||||||
|
48
nixos/tests/nar-serve.nix
Normal file
48
nixos/tests/nar-serve.nix
Normal file
@ -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)
|
||||||
|
)
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
)
|
31
pkgs/tools/nix/nar-serve/default.nix
Normal file
31
pkgs/tools/nix/nar-serve/default.nix
Normal file
@ -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 ];
|
||||||
|
};
|
||||||
|
}
|
@ -27314,6 +27314,8 @@ in
|
|||||||
|
|
||||||
mynewt-newt = callPackage ../tools/package-management/mynewt-newt { };
|
mynewt-newt = callPackage ../tools/package-management/mynewt-newt { };
|
||||||
|
|
||||||
|
nar-serve = callPackage ../tools/nix/nar-serve { };
|
||||||
|
|
||||||
inherit (callPackage ../tools/package-management/nix {
|
inherit (callPackage ../tools/package-management/nix {
|
||||||
storeDir = config.nix.storeDir or "/nix/store";
|
storeDir = config.nix.storeDir or "/nix/store";
|
||||||
stateDir = config.nix.stateDir or "/nix/var";
|
stateDir = config.nix.stateDir or "/nix/var";
|
||||||
|
Loading…
Reference in New Issue
Block a user