lol
1{
2 lib,
3 stdenv,
4 bash,
5 coreutils,
6 curl,
7 fetchFromGitHub,
8 gnugrep,
9 gnused,
10 installShellFiles,
11 iproute2,
12 makeBinaryWrapper,
13 nix-update-script,
14 systemd,
15 udevCheckHook,
16 util-linuxMinimal,
17}:
18
19stdenv.mkDerivation (finalAttrs: {
20 pname = "amazon-ec2-net-utils";
21 version = "2.6.0";
22
23 src = fetchFromGitHub {
24 owner = "amazonlinux";
25 repo = "amazon-ec2-net-utils";
26 tag = "v${finalAttrs.version}";
27 hash = "sha256-PtnRgNmVrIGndLjYjXWWx85z4oxjn637iZqXd6OSiQg=";
28 };
29
30 strictDeps = true;
31
32 nativeBuildInputs = [
33 installShellFiles
34 makeBinaryWrapper
35 udevCheckHook
36 ];
37
38 buildInputs = [
39 bash
40 ];
41
42 # See https://github.com/amazonlinux/amazon-ec2-net-utils/blob/v2.5.4/GNUmakefile#L26-L37.
43 installPhase = ''
44 runHook preInstall
45
46 mkdir -p $out
47
48 for file in bin/*.sh; do
49 install -D -m 755 "$file" $out/bin/$(basename --suffix ".sh" "$file")
50 substituteInPlace $out/bin/$(basename --suffix ".sh" "$file") \
51 --replace-fail AMAZON_EC2_NET_UTILS_LIBDIR $out/share/amazon-ec2-net-utils
52 done
53
54 substituteInPlace $out/bin/setup-policy-routes \
55 --replace-fail /lib/systemd ${systemd}/lib/systemd
56
57 wrapProgram $out/bin/setup-policy-routes \
58 --prefix PATH : ${
59 lib.makeBinPath [
60 coreutils
61 # bin/setup-policy-roots.sh sources lib/lib.sh which needs these.
62 #
63 # lib/lib.sh isn't executable so we can't use it with wrapProgram.
64 curl
65 gnugrep
66 gnused
67 iproute2
68 systemd
69 util-linuxMinimal
70 ]
71 }
72
73 for file in lib/*.sh; do
74 install -D -m 644 -t $out/share/amazon-ec2-net-utils "$file"
75 done
76
77 substituteInPlace $out/share/amazon-ec2-net-utils/lib.sh \
78 --replace-fail /usr/lib/systemd $out/lib/systemd
79
80 for file in udev/*.rules; do
81 install -D -m 644 -t $out/lib/udev/rules.d "$file"
82 done
83
84 substituteInPlace $out/lib/udev/rules.d/99-vpc-policy-routes.rules \
85 --replace-fail /usr/bin/systemctl ${lib.getExe' systemd "systemctl"}
86
87 for file in systemd/network/*.network; do
88 install -D -m 644 -t $out/lib/systemd/network "$file"
89 done
90
91 for file in systemd/system/*.{service,timer}; do
92 install -D -m 644 -t $out/lib/systemd/system "$file"
93 done
94
95 substituteInPlace $out/lib/systemd/system/policy-routes@.service \
96 --replace-fail /usr/bin/setup-policy-routes $out/bin/setup-policy-routes
97
98 substituteInPlace $out/lib/systemd/system/refresh-policy-routes@.service \
99 --replace-fail /usr/bin/setup-policy-routes $out/bin/setup-policy-routes
100
101 installManPage doc/*.8
102
103 runHook postInstall
104 '';
105
106 doInstallCheck = true;
107
108 outputs = [
109 "out"
110 "man"
111 ];
112
113 passthru = {
114 updateScript = nix-update-script { };
115 };
116
117 meta = {
118 description = "Contains a set of utilities for managing elastic network interfaces on Amazon EC2";
119 homepage = "https://github.com/amazonlinux/amazon-ec2-net-utils";
120 license = lib.licenses.asl20;
121 platforms = lib.platforms.linux;
122 maintainers = with lib.maintainers; [ sielicki ];
123 };
124})