Unverified Commit 8f0c7e38 authored by Sandro Jäckel's avatar Sandro Jäckel Committed by GitHub
Browse files

Merge pull request #190181 from RaitoBezarius/garage-module

services/garage: init
parents 725021a3 9b7dc6cb
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -312,6 +312,14 @@
          <link linkend="opt-services.endlessh-go.enable">services.endlessh-go</link>.
        </para>
      </listitem>
      <listitem>
        <para>
          <link xlink:href="https://garagehq.deuxfleurs.fr/">Garage</link>,
          a simple object storage server for geodistributed deployments,
          alternative to MinIO. Available as
          <link linkend="opt-services.garage.enable">services.garage</link>.
        </para>
      </listitem>
      <listitem>
        <para>
          <link xlink:href="https://netbird.io">netbird</link>, a zero
+2 −0
Original line number Diff line number Diff line
@@ -108,6 +108,8 @@ In addition to numerous new and upgraded packages, this release has the followin

- [endlessh-go](https://github.com/shizunge/endlessh-go), an SSH tarpit that exposes Prometheus metrics. Available as [services.endlessh-go](#opt-services.endlessh-go.enable).

- [Garage](https://garagehq.deuxfleurs.fr/), a simple object storage server for geodistributed deployments, alternative to MinIO. Available as [services.garage](#opt-services.garage.enable).

- [netbird](https://netbird.io), a zero configuration VPN.
  Available as [services.netbird](options.html#opt-services.netbird.enable).

+1 −0
Original line number Diff line number Diff line
@@ -1147,6 +1147,7 @@
  ./services/web-servers/caddy/default.nix
  ./services/web-servers/darkhttpd.nix
  ./services/web-servers/fcgiwrap.nix
  ./services/web-servers/garage.nix
  ./services/web-servers/hitch/default.nix
  ./services/web-servers/hydron.nix
  ./services/web-servers/jboss/default.nix
+91 −0
Original line number Diff line number Diff line
{ config, lib, pkgs, ... }:

with lib;

let
  cfg = config.services.garage;
  toml = pkgs.formats.toml {};
  configFile = toml.generate "garage.toml" cfg.settings;
in
{
  meta.maintainers = [ maintainers.raitobezarius ];

  options.services.garage = {
    enable = mkEnableOption (lib.mdDoc "Garage Object Storage (S3 compatible)");

    extraEnvironment = mkOption {
      type = types.attrsOf types.str;
      description = lib.mdDoc "Extra environment variables to pass to the Garage server.";
      default = {};
      example = { RUST_BACKTRACE="yes"; };
    };

    logLevel = mkOption {
      type = types.enum (["info" "debug" "trace"]);
      default = "info";
      example = "debug";
      description = lib.mdDoc "Garage log level, see <https://garagehq.deuxfleurs.fr/documentation/quick-start/#launching-the-garage-server> for examples.";
    };

    settings = mkOption {
      type = types.submodule {
        freeformType = toml.type;

        options = {
          metadata_dir = mkOption {
            default = "/var/lib/garage/meta";
            type = types.path;
            description = lib.mdDoc "The metadata directory, put this on a fast disk (e.g. SSD) if possible.";
          };

          data_dir = mkOption {
            default = "/var/lib/garage/data";
            type = types.path;
            description = lib.mdDoc "The main data storage, put this on your large storage (e.g. high capacity HDD)";
          };

          replication_mode = mkOption {
            default = "none";
            type = types.enum ([ "none" "1" "2" "3" 1 2 3 ]);
            apply = v: toString v;
            description = lib.mdDoc "Garage replication mode, defaults to none, see: <https://garagehq.deuxfleurs.fr/reference_manual/configuration.html#replication_mode> for reference.";
          };
        };
      };
      description = lib.mdDoc "Garage configuration, see <https://garagehq.deuxfleurs.fr/reference_manual/configuration.html> for reference.";
    };

    package = mkOption {
      default = pkgs.garage;
      defaultText = literalExpression "pkgs.garage";
      type = types.package;
      description = lib.mdDoc "Garage package to use.";
    };
  };

  config = mkIf cfg.enable {
    environment.etc."garage.toml" = {
      source = configFile;
    };

    environment.systemPackages = [ cfg.package ]; # For administration

    systemd.services.garage = {
      description = "Garage Object Storage (S3 compatible)";
      after = [ "network.target" "network-online.target" ];
      wants = [ "network.target" "network-online.target" ];
      wantedBy = [ "multi-user.target" ];
      serviceConfig = {
        ExecStart = "${cfg.package}/bin/garage server";

        StateDirectory = mkIf (hasPrefix "/var/lib/garage" cfg.settings.data_dir && hasPrefix "/var/lib/garage" cfg.settings.metadata_dir) "garage";
        DynamicUser = lib.mkDefault true;
        ProtectHome = true;
        NoNewPrivileges = true;
      };
      environment = {
        RUST_LOG = lib.mkDefault "garage=${cfg.logLevel}";
      } // cfg.extraEnvironment;
    };
  };
}
+1 −0
Original line number Diff line number Diff line
@@ -214,6 +214,7 @@ in {
  fsck = handleTest ./fsck.nix {};
  ft2-clone = handleTest ./ft2-clone.nix {};
  mimir = handleTest ./mimir.nix {};
  garage = handleTest ./garage.nix {};
  gerrit = handleTest ./gerrit.nix {};
  geth = handleTest ./geth.nix {};
  ghostunnel = handleTest ./ghostunnel.nix {};
Loading