diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 5ce46ff6436..5d90a259df5 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -6699,6 +6699,12 @@ githubId = 111265; name = "Ozan Sener"; }; + otavio = { + email = "otavio.salvador@ossystems.com.br"; + github = "otavio"; + githubId = 25278; + name = "Otavio Salvador"; + }; otwieracz = { email = "slawek@otwiera.cz"; github = "otwieracz"; diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 90f40db7834..4341c8c238a 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -745,6 +745,7 @@ ./services/networking/skydns.nix ./services/networking/shadowsocks.nix ./services/networking/shairport-sync.nix + ./services/networking/shellhub-agent.nix ./services/networking/shorewall.nix ./services/networking/shorewall6.nix ./services/networking/shout.nix diff --git a/nixos/modules/services/networking/shellhub-agent.nix b/nixos/modules/services/networking/shellhub-agent.nix new file mode 100644 index 00000000000..4ce4b8250bc --- /dev/null +++ b/nixos/modules/services/networking/shellhub-agent.nix @@ -0,0 +1,91 @@ +{ config, lib, pkgs, ... }: + +with lib; +let + cfg = config.services.shellhub-agent; +in { + + ###### interface + + options = { + + services.shellhub-agent = { + + enable = mkOption { + type = types.bool; + default = false; + description = '' + Whether to enable the ShellHub Agent daemon, which allows + secure remote logins. + ''; + }; + + package = mkOption { + type = types.package; + default = pkgs.shellhub-agent; + defaultText = "pkgs.shellhub-agent"; + description = '' + Which ShellHub Agent package to use. + ''; + }; + + tenantId = mkOption { + type = types.str; + example = "ba0a880c-2ada-11eb-a35e-17266ef329d6"; + description = '' + The tenant ID to use when connecting to the ShellHub + Gateway. + ''; + }; + + server = mkOption { + type = types.str; + default = "https://cloud.shellhub.io"; + description = '' + Server address of ShellHub Gateway to connect. + ''; + }; + + privateKey = mkOption { + type = types.path; + default = "/var/lib/shellhub-agent/private.key"; + description = '' + Location where to store the ShellHub Agent private + key. + ''; + }; + }; + }; + + ###### implementation + + config = mkIf cfg.enable { + + systemd.services.shellhub-agent = { + description = "ShellHub Agent"; + + wantedBy = [ "multi-user.target" ]; + requires = [ "local-fs.target" ]; + wants = [ "network-online.target" ]; + after = [ + "local-fs.target" + "network.target" + "network-online.target" + "time-sync.target" + ]; + + environment.SERVER_ADDRESS = cfg.server; + environment.PRIVATE_KEY = cfg.privateKey; + environment.TENANT_ID = cfg.tenantId; + + serviceConfig = { + # The service starts sessions for different users. + User = "root"; + Restart = "on-failure"; + ExecStart = "${cfg.package}/bin/agent"; + }; + }; + + environment.systemPackages = [ cfg.package ]; + }; +} diff --git a/pkgs/applications/networking/shellhub-agent/default.nix b/pkgs/applications/networking/shellhub-agent/default.nix new file mode 100644 index 00000000000..b8ee60e5713 --- /dev/null +++ b/pkgs/applications/networking/shellhub-agent/default.nix @@ -0,0 +1,34 @@ +{ stdenv, buildGoModule, fetchFromGitHub }: + +buildGoModule rec { + pname = "shellhub-agent"; + version = "0.4.2"; + + src = fetchFromGitHub { + owner = "shellhub-io"; + repo = "shellhub"; + rev = "v${version}"; + sha256 = "0cd41ing1pcf1bdaaq00w5h7lih5j2kcaa0m41g3ikm3vd1w5qna"; + }; + + modRoot = "./agent"; + + vendorSha256 = "19gsfhh6idqysdxhpq45sq35gw19adz9lp83krjlhzj1vqm59qma"; + + buildFlagsArray = [ "-ldflags=-s -w -X main.AgentVersion=v${version}" ]; + + meta = with stdenv.lib; { + description = + "Enables easy access any Linux device behind firewall and NAT"; + longDescription = '' + ShellHub is a modern SSH server for remotely accessing Linux devices via + command line (using any SSH client) or web-based user interface, designed + as an alternative to _sshd_. Think ShellHub as centralized SSH for the the + edge and cloud computing. + ''; + homepage = "https://shellhub.io/"; + license = licenses.asl20; + maintainers = with maintainers; [ otavio ]; + platforms = platforms.linux; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index d7c9bf7f537..fb9324c13ec 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2600,6 +2600,8 @@ in shell-hist = callPackage ../tools/misc/shell-hist { }; + shellhub-agent = callPackage ../applications/networking/shellhub-agent { }; + simdjson = callPackage ../development/libraries/simdjson { }; simg2img = callPackage ../tools/filesystems/simg2img { };