toxic: 0.15.1 -> 0.16.0
[NixPkgs.git] / pkgs / by-name / ra / rancid / package.nix
bloba6ed377ebc295f1c4427117f26f03fe05213911b
2   stdenv,
3   lib,
4   fetchFromGitHub,
5   writeShellScriptBin,
6   autoreconfHook,
7   libtool,
8   makeBinaryWrapper,
9   coreutils,
10   expect,
11   git,
12   gnugrep,
13   inetutils, # for telnet
14   gnused,
15   openssh,
16   perl,
17   runtimeShell,
20 # we cannot use resholve.mkDerivation yet - the scripts are too hairy, although it might be possible
21 # to do them bit by bit
23 let
24   inherit (lib)
25     concatStringsSep
26     getExe
27     makeBinPath
28     mapAttrsToList
29     replaceStrings
30     ;
32   # The installer executes ping to figure out how to call it and then sets the full path to the
33   # binary. This script "handles" it by pretending everything is OK and has very much not been
34   # tested on !NixOS.
35   wrappedPing = writeShellScriptBin "ping" ''
36     for b in /run/wrappers/bin/ping /usr/bin/ping /usr/local/bin/ping; do
37       if [ -x "$b" ]; then
38         exec "$b" "$@"
39       fi
40     done
42     # we are inside the installer. Pretend everything is OK so the installer will set the path to
43     # this wrapper as the ping program
44     exit 0
45   '';
47   # executables that need additional directories on their PATHs
48   needsBin = {
49     hlogin = [ (placeholder "out") ];
50     ulogin = [ (placeholder "out") ];
51     rancid-cvs = [ git ];
52   };
54   telnet' = inetutils;
57 stdenv.mkDerivation (finalAttrs: {
58   pname = "rancid";
59   version = "3.13";
61   src = fetchFromGitHub {
62     owner = "haussli";
63     repo = "rancid";
64     rev = "v" + replaceStrings [ "." ] [ "_" ] finalAttrs.version;
65     hash = "sha256-TAeOSwdDhP06OSV0en/hMVF3qWVwJUsiqt97rdgtAzE=";
66   };
68   postPatch = ''
69     patchShebangs .
71     substituteInPlace configure.ac \
72       --replace 'm4_esyscmd(configure.vers package_name),' ${finalAttrs.pname}, \
73       --replace 'm4_esyscmd(configure.vers package_version),' ${finalAttrs.version},
75     substituteInPlace etc/rancid.conf.sample.in \
76       --replace @ENV_PATH@ ${
77         makeBinPath [
78           "/run/wrappers"
79           (placeholder "out")
80           coreutils
81           git
82           gnugrep
83           gnused
84           openssh
85           perl
86           runtimeShell
87           telnet'
88         ]
89       }
91     for f in bin/*.in; do \
92       if grep -q /usr/bin/tail $f ; then
93         substituteInPlace $f --replace /usr/bin/tail ${coreutils}/bin/tail
94       fi
95     done
97     substituteInPlace bin/par.c \
98       --replace '"sh"' '"${runtimeShell}"'
100     substituteInPlace bin/rancid-run.in \
101       --replace '>$LOGDIR/$GROUP.`date +%Y%m%d.%H%M%S` 2>&1' ' ' \
102       --replace 'perl ' '${getExe perl} ' \
103       --replace 'sh ' '${runtimeShell} ' \
104       --replace '"control_rancid ' '"${placeholder "out"}/bin/control_rancid ' \
106     substituteInPlace bin/control_rancid.in \
107       --replace "'rancid-fe " "'${placeholder "out"}/bin/rancid-fe "
108   '';
110   enableParallelBuilding = true;
112   nativeBuildInputs = [
113     autoreconfHook
114     libtool
115     makeBinaryWrapper
116     wrappedPing
117   ];
119   buildInputs = [
120     expect
121     openssh
122     perl
123     telnet'
124   ];
126   postInstall = concatStringsSep "\n" (
127     mapAttrsToList (n: v: ''
128       mkdir -p $out/libexec
129       mv $out/bin/${n} $out/libexec/
130       makeWrapper $out/libexec/${n} $out/bin/${n} \
131         --prefix PATH : ${makeBinPath v}
132     '') needsBin
133   );
135   meta = with lib; {
136     description = "Really Awesome New Cisco confIg Differ";
137     longDescription = ''
138       RANCID monitors a device's configuration, including software and hardware
139       and uses a VCS to maintain history of changes.
140     '';
141     homepage = "https://shrubbery.net/rancid/";
142     license = licenses.bsd3;
143     maintainers = with maintainers; [ peterhoeg ];
144     platforms = platforms.linux;
145   };