about summary refs log tree commit diff
path: root/pkgs/by-name/ra/rancid
diff options
context:
space:
mode:
authorPeter Hoeg <peter@hoeg.com>2022-10-19 15:59:03 +0800
committerPeter Hoeg <peter@hoeg.com>2023-12-01 12:21:42 +0100
commit0da4150a0d5918a045120bb070cd521acfaea54f (patch)
tree5c15ff402c8850a3e2c847177413bc8845a86966 /pkgs/by-name/ra/rancid
parent94b489b264356b26df6b823d69ce4caf4d3791bb (diff)
rancid: init at 3.13
Diffstat (limited to 'pkgs/by-name/ra/rancid')
-rw-r--r--pkgs/by-name/ra/rancid/package.nix117
1 files changed, 117 insertions, 0 deletions
diff --git a/pkgs/by-name/ra/rancid/package.nix b/pkgs/by-name/ra/rancid/package.nix
new file mode 100644
index 0000000000000..f23cb1f9c7126
--- /dev/null
+++ b/pkgs/by-name/ra/rancid/package.nix
@@ -0,0 +1,117 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, writeShellScriptBin
+, autoreconfHook
+, libtool
+, makeBinaryWrapper
+, coreutils
+, expect
+, git
+, gnugrep
+, inetutils # for telnet
+, gnused
+, openssh
+, perl
+, runtimeShell
+}:
+
+# we cannot use resholve.mkDerivation yet - the scripts are too hairy, although it might be possible
+# to do them bit by bit
+
+let
+  inherit (lib)
+    concatStringsSep getExe makeBinPath mapAttrsToList replaceStrings;
+
+  # The installer executes ping to figure out how to call it and then sets the full path to the
+  # binary. This script "handles" it by pretending everything is OK and has very much not been
+  # tested on !NixOS.
+  wrappedPing = writeShellScriptBin "ping" ''
+    for b in /run/wrappers/bin/ping /usr/bin/ping /usr/local/bin/ping; do
+      if [ -x "$b" ]; then
+        exec "$b" "$@"
+      fi
+    done
+
+    # we are inside the installer. Pretend everything is OK so the installer will set the path to
+    # this wrapper as the ping program
+    exit 0
+  '';
+
+  # executables that need additional directories on their PATHs
+  needsBin = {
+    hlogin = [ (placeholder "out") ];
+    ulogin = [ (placeholder "out") ];
+    rancid-cvs = [ git ];
+  };
+
+  telnet' = inetutils;
+
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "rancid";
+  version = "3.13";
+
+  src = fetchFromGitHub {
+    owner = "haussli";
+    repo = "rancid";
+    rev = "v" + replaceStrings [ "." ] [ "_" ] finalAttrs.version;
+    hash = "sha256-TAeOSwdDhP06OSV0en/hMVF3qWVwJUsiqt97rdgtAzE=";
+  };
+
+  postPatch = ''
+    patchShebangs .
+
+    substituteInPlace configure.ac \
+      --replace 'm4_esyscmd(configure.vers package_name),' ${finalAttrs.pname}, \
+      --replace 'm4_esyscmd(configure.vers package_version),' ${finalAttrs.version},
+
+    substituteInPlace etc/rancid.conf.sample.in \
+      --replace @ENV_PATH@ ${makeBinPath [ "/run/wrappers" (placeholder "out") coreutils git gnugrep gnused openssh perl runtimeShell telnet' ]}
+
+    for f in bin/*.in; do \
+      if grep -q /usr/bin/tail $f ; then
+        substituteInPlace $f --replace /usr/bin/tail ${coreutils}/bin/tail
+      fi
+    done
+
+    substituteInPlace bin/par.c \
+      --replace '"sh"' '"${runtimeShell}"'
+
+    substituteInPlace bin/rancid-run.in \
+      --replace '>$LOGDIR/$GROUP.`date +%Y%m%d.%H%M%S` 2>&1' ' ' \
+      --replace 'perl ' '${getExe perl} ' \
+      --replace 'sh ' '${runtimeShell} ' \
+      --replace '"control_rancid ' '"${placeholder "out"}/bin/control_rancid ' \
+
+    substituteInPlace bin/control_rancid.in \
+      --replace "'rancid-fe " "'${placeholder "out"}/bin/rancid-fe "
+  '';
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ autoreconfHook libtool makeBinaryWrapper wrappedPing ];
+
+  buildInputs = [ expect openssh perl telnet' ];
+
+  postInstall = concatStringsSep "\n" (mapAttrsToList
+    (n: v: ''
+      mkdir -p $out/libexec
+      mv $out/bin/${n} $out/libexec/
+      makeWrapper $out/libexec/${n} $out/bin/${n} \
+        --prefix PATH : ${makeBinPath v}
+    '')
+    needsBin);
+
+  meta = with lib; {
+    description = "Really Awesome New Cisco confIg Differ";
+    longDescription = ''
+      RANCID monitors a device's configuration, including software and hardware
+      and uses a VCS to maintain history of changes.
+    '';
+    homepage = "https://shrubbery.net/rancid/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.linux;
+  };
+})