From 74a98d52d7e7c0ec9478a1b84536a1af50298bce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Kr=C3=BCger?= Date: Tue, 9 Mar 2021 00:10:11 +0100 Subject: [PATCH] cjdns-tools: init at 21.1 This adds cjdns-tools which is exposing the tools from $cjdns/tools/ under a command named cjdns-tools (so for ex cjdns "ping" is accessible as cjdns-tools ping ) Additionally patches cjdns tools to read admin pw from /etc/cjdns.keys Co-authored-by: Sandro --- pkgs/tools/admin/cjdns-tools/default.nix | 46 ++++++++++++++++++++++++ pkgs/tools/admin/cjdns-tools/wrapper.sh | 29 +++++++++++++++ pkgs/top-level/all-packages.nix | 1 + 3 files changed, 76 insertions(+) create mode 100644 pkgs/tools/admin/cjdns-tools/default.nix create mode 100644 pkgs/tools/admin/cjdns-tools/wrapper.sh diff --git a/pkgs/tools/admin/cjdns-tools/default.nix b/pkgs/tools/admin/cjdns-tools/default.nix new file mode 100644 index 00000000000..2468d329548 --- /dev/null +++ b/pkgs/tools/admin/cjdns-tools/default.nix @@ -0,0 +1,46 @@ +{ stdenv +, cjdns +, nodejs +, makeWrapper +, lib +}: + +stdenv.mkDerivation { + pname = "cjdns-tools"; + version = cjdns.version; + + src = cjdns.src; + + buildInputs = [ + nodejs + ]; + + nativeBuildInputs = [ + makeWrapper + ]; + + buildPhase = '' + patchShebangs tools + + sed -e "s|'password': 'NONE'|'password': Fs.readFileSync('/etc/cjdns.keys').toString().split('\\\\n').map(v => v.split('=')).filter(v => v[0] === 'CJDNS_ADMIN_PASSWORD').map(v => v[1])[0]|g" \ + -i tools/lib/cjdnsadmin/cjdnsadmin.js + ''; + + installPhase = '' + mkdir -p $out/bin + cat ${./wrapper.sh} | sed "s|@@out@@|$out|g" > $out/bin/cjdns-tools + chmod +x $out/bin/cjdns-tools + + cp -r tools $out/tools + find $out/tools -maxdepth 1 -type f -exec chmod -v a+x {} \; + cp -r node_modules $out/node_modules + ''; + + meta = with lib; { + homepage = "https://github.com/cjdelisle/cjdns"; + description = "Tools for cjdns managment"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ mkg20001 ]; + platforms = platforms.linux; + }; +} diff --git a/pkgs/tools/admin/cjdns-tools/wrapper.sh b/pkgs/tools/admin/cjdns-tools/wrapper.sh new file mode 100644 index 00000000000..2e8d85b1dd9 --- /dev/null +++ b/pkgs/tools/admin/cjdns-tools/wrapper.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +export PATH="@@out@@/tools:$PATH" + +set -eo pipefail + +if ! cat /etc/cjdns.keys >/dev/null 2>&1; then + echo "ERROR: No permission to read /etc/cjdns.keys (use sudo)" >&2 + exit 1 +fi + +if [[ -z $1 ]]; then + echo "Cjdns admin" + + echo "Usage: $0 " + + echo + echo "Commands:" $(find @@out@@/tools -maxdepth 1 -type f | sed -r "s|.+/||g") + + _sh=$(which sh) + PATH="@@out@@/tools" PS1="cjdns\$ " "$_sh" +else + if [[ ! -e @@out@@/tools/$1 ]]; then + echo "ERROR: '$1' is not a valid tool" >&2 + exit 2 + else + "$@" + fi +fi diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c38af6eced2..22f0b952c56 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3194,6 +3194,7 @@ in }; cjdns = callPackage ../tools/networking/cjdns { }; + cjdns-tools = callPackage ../tools/admin/cjdns-tools { }; cjson = callPackage ../development/libraries/cjson { };