1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 gitUpdater,
6 makeWrapper,
7 gawk,
8 gnused,
9 util-linux,
10 file,
11 wget,
12 python3,
13 qemu-utils,
14 e2fsprogs,
15 cdrkit,
16 gptfdisk,
17}:
18let
19 # according to https://packages.debian.org/sid/cloud-image-utils + https://packages.debian.org/sid/admin/cloud-guest-utils
20 guestDeps = [
21 e2fsprogs
22 gptfdisk
23 gawk
24 gnused
25 util-linux
26 ];
27 binDeps = guestDeps ++ [
28 wget
29 file
30 qemu-utils
31 cdrkit
32 ];
33in
34stdenv.mkDerivation rec {
35 # NOTICE: if you bump this, make sure to run
36 # $ nix-build nixos/release-combined.nix -A nixos.tests.ec2-nixops
37 # growpart is needed in initrd in nixos/system/boot/grow-partition.nix
38 pname = "cloud-utils";
39 version = "0.33";
40 src = fetchFromGitHub {
41 owner = "canonical";
42 repo = "cloud-utils";
43 tag = version;
44 hash = "sha256-YqfkmYclPZu6Mc2bFYxtiuH7uvfa3V4YlD0aHuKn1hw=";
45 };
46 nativeBuildInputs = [ makeWrapper ];
47 buildInputs = [ python3 ];
48 installFlags = [
49 "LIBDIR=$(out)/lib"
50 "BINDIR=$(out)/bin"
51 "MANDIR=$(out)/man/man1"
52 "DOCDIR=$(out)/doc"
53 ];
54
55 # $guest output contains all executables needed for cloud-init and $out the rest + $guest
56 # This is similar to debian's package split into cloud-image-utils and cloud-guest-utils
57 # The reason is to reduce the closure size
58 outputs = [
59 "out"
60 "guest"
61 ];
62
63 postFixup = ''
64 moveToOutput bin/ec2metadata $guest
65 moveToOutput bin/growpart $guest
66 moveToOutput bin/vcs-run $guest
67
68 for i in $out/bin/*; do
69 wrapProgram $i --prefix PATH : "${lib.makeBinPath binDeps}:$out/bin"
70 done
71
72 for i in $guest/bin/*; do
73 wrapProgram $i --prefix PATH : "${lib.makeBinPath guestDeps}:$guest/bin"
74 ln -s $i $out/bin
75 done
76 '';
77
78 dontBuild = true;
79
80 passthru.updateScript = gitUpdater { };
81
82 meta = with lib; {
83 description = "Useful set of utilities for interacting with a cloud";
84 homepage = "https://github.com/canonical/cloud-utils";
85 platforms = platforms.unix;
86 license = licenses.gpl3;
87 };
88}