Merge pull request #104419 from otavio/topic/shellhub

shellhub-agent: Add service and package expressions

Changed files
+134
maintainers
nixos
modules
services
networking
pkgs
applications
networking
shellhub-agent
top-level
+6
maintainers/maintainer-list.nix
···
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";
+1
nixos/modules/module-list.nix
···
./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
+91
nixos/modules/services/networking/shellhub-agent.nix
···
+
{ 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 ];
+
};
+
}
+34
pkgs/applications/networking/shellhub-agent/default.nix
···
+
{ 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;
+
};
+
}
+2
pkgs/top-level/all-packages.nix
···
shell-hist = callPackage ../tools/misc/shell-hist { };
+
shellhub-agent = callPackage ../applications/networking/shellhub-agent { };
+
simdjson = callPackage ../development/libraries/simdjson { };
simg2img = callPackage ../tools/filesystems/simg2img { };