projects/guix·blob javascript-team · refs

3532 lines · 144.2 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2016 David Thompson <[email protected]>
3;;; Copyright © 2018 宋文武 <[email protected]>
4;;; Copyright © 2018, 2023 Efraim Flashner <[email protected]>
5;;; Copyright © 2019 Leo Famulari <[email protected]>
6;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <[email protected]>
7;;; Copyright © 2019, 2020, 2021, 2023 Maxim Cournoyer <[email protected]>
8;;; Copyright © 2018, 2019, 2021, 2022, 2024 Tobias Geerinckx-Rice <[email protected]>
9;;; Copyright © 2020 Jelle Licht <[email protected]>
10;;; Copyright © 2020 Ludovic Courtès <[email protected]>
11;;; Copyright © 2020 Michael Rohleder <[email protected]>
12;;; Copyright © 2020 Katherine Cox-Buday <[email protected]>
13;;; Copyright © 2020 Jesse Dowell <[email protected]>
14;;; Copyright © 2021 Léo Le Bouter <[email protected]>
15;;; Copyright © 2021 Maxim Cournoyer <[email protected]>
16;;; Copyright © 2021 Timmy Douglas <[email protected]>
17;;; Copyright © 2021, 2022 Oleg Pykhalov <[email protected]>
18;;; Copyright © 2022 Michael Rohleder <[email protected]>
19;;; Copyright © 2022 Pierre Langlois <[email protected]>
20;;; Copyright © 2022 Zhu Zihao <[email protected]>
21;;; Copyright © 2022 Pierre Langlois <[email protected]>
22;;; Copyright © 2023 Hilton Chain <[email protected]>
23;;; Copyright © 2023 Ricardo Wurmus <[email protected]>
24;;; Copyright © 2023 Zongyuan Li <[email protected]>
25;;; Copyright © 2024 Ashish SHUKLA <[email protected]>
26;;; Copyright © 2024 Foundation Devices, Inc. <[email protected]>
27;;; Copyright © 2024 Nicolas Graves <[email protected]>
28;;; Copyright © 2024 Jean-Pierre De Jesus DIAZ <[email protected]>
29;;; Copyright © 2024-2026 Sharlatan Hellseher <[email protected]>
30;;; Copyright © 2024-2026 Tomas Volf <[email protected]>
31;;; Copyright © 2025, 2026 Foster Hangdaan <[email protected]>
32;;; Copyright © 2025 Artyom V. Poptsov <[email protected]>
33;;; Copyright © 2025 Vinicius Monego <[email protected]>
34;;; Copyright © 2025 John Kehayias <[email protected]>
35;;; Copyright © 2025 Arthur Rodrigues <[email protected]>
36;;; Copyright © 2026 Giacomo Leidi <[email protected]>
37;;; Copyright © 2026 Konstantin Suntsov <[email protected]>
38;;;
39;;; This file is part of GNU Guix.
40;;;
41;;; GNU Guix is free software; you can redistribute it and/or modify it
42;;; under the terms of the GNU General Public License as published by
43;;; the Free Software Foundation; either version 3 of the License, or (at
44;;; your option) any later version.
45;;;
46;;; GNU Guix is distributed in the hope that it will be useful, but
47;;; WITHOUT ANY WARRANTY; without even the implied warranty of
48;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
49;;; GNU General Public License for more details.
50;;;
51;;; You should have received a copy of the GNU General Public License
52;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
53
54(define-module (gnu packages containers)
55 #:use-module (guix gexp)
56 #:use-module ((guix licenses) #:prefix license:)
57 #:use-module (guix modules)
58 #:use-module (gnu packages)
59 #:use-module (guix packages)
60 #:use-module (guix download)
61 #:use-module (guix gexp)
62 #:use-module (guix git-download)
63 #:use-module (guix build-system cmake)
64 #:use-module (guix build-system copy)
65 #:use-module (guix build-system gnu)
66 #:use-module (guix build-system go)
67 #:use-module (guix build-system guile)
68 #:use-module (guix build-system meson)
69 #:use-module (guix build-system pyproject)
70 #:use-module ((guix search-paths) #:select ($GUIX_EXTENSIONS_PATH))
71 #:use-module (guix utils)
72 #:use-module (gnu packages admin)
73 #:use-module (gnu packages autotools)
74 #:use-module (gnu packages base)
75 #:use-module (gnu packages bash)
76 #:use-module (gnu packages check)
77 #:use-module (gnu packages compression)
78 #:use-module (gnu packages glib)
79 #:use-module (gnu packages gcc)
80 #:use-module (gnu packages gettext)
81 #:use-module (gnu packages glib)
82 #:use-module (gnu packages gnupg)
83 #:use-module (gnu packages golang)
84 #:use-module (gnu packages golang-build)
85 #:use-module (gnu packages golang-check)
86 #:use-module (gnu packages golang-compression)
87 #:use-module (gnu packages golang-crypto)
88 #:use-module (gnu packages golang-maths)
89 #:use-module (gnu packages golang-web)
90 #:use-module (gnu packages golang-xyz)
91 #:use-module (gnu packages guile)
92 #:use-module (gnu packages guile-xyz)
93 #:use-module (gnu packages linux)
94 #:use-module (gnu packages man)
95 #:use-module (gnu packages pcre)
96 #:use-module (gnu packages python)
97 #:use-module (gnu packages networking)
98 #:use-module (gnu packages package-management)
99 #:use-module (gnu packages pkg-config)
100 #:use-module (gnu packages prometheus)
101 #:use-module (gnu packages python)
102 #:use-module (gnu packages python-build)
103 #:use-module (gnu packages python-check)
104 #:use-module (gnu packages python-crypto)
105 #:use-module (gnu packages python-xyz)
106 #:use-module (gnu packages python-web)
107 #:use-module (gnu packages rust-apps)
108 #:use-module (gnu packages selinux)
109 #:use-module (gnu packages version-control)
110 #:use-module (gnu packages web)
111 #:use-module (gnu packages wget))
112
113;;; Code:
114
115;;;
116;;; Libraries:
117;;;
118
119(define-public go-github-com-checkpoint-restore-checkpointctl
120 (package
121 (name "go-github-com-checkpoint-restore-checkpointctl")
122 (version "1.5.0")
123 (source
124 (origin
125 (method git-fetch)
126 (uri (git-reference
127 (url "https://github.com/checkpoint-restore/checkpointctl")
128 (commit (string-append "v" version))))
129 (file-name (git-file-name name version))
130 (sha256
131 (base32 "0qvgld9vji5f7h2idk6r3q30909hqws0rkpvgina43i57bsfh2sv"))
132 (snippet
133 #~(begin
134 (use-modules (guix build utils))
135 (delete-file-recursively "vendor")))))
136 (build-system go-build-system)
137 (arguments
138 (list
139 #:skip-build? #t
140 #:import-path "github.com/checkpoint-restore/checkpointctl"))
141 (native-inputs
142 (list go-github-com-spf13-cobra))
143 (propagated-inputs
144 (list go-github-com-checkpoint-restore-go-criu-v8
145 go-github-com-containers-storage
146 go-github-com-opencontainers-runtime-spec
147 go-github-com-xlab-treeprint))
148 (home-page "https://github.com/checkpoint-restore/checkpointctl")
149 (synopsis "Tool for in-depth analysis of container checkpoints")
150 (description
151 "This package provides a Go library to read and manipulate checkpoint
152archives as created by Podman, CRI-O and containerd.")
153 (license license:asl2.0)))
154
155(define-public go-github-com-compose-spec-compose-go-v2
156 (package
157 (name "go-github-com-compose-spec-compose-go-v2")
158 (version "2.9.0")
159 (source
160 (origin
161 (method git-fetch)
162 (uri (git-reference
163 (url "https://github.com/compose-spec/compose-go")
164 (commit (string-append "v" version))))
165 (file-name (git-file-name name version))
166 (sha256
167 (base32 "18z626vjd0cbqs130nsqhx0vfr6hxarvwgrw5acydy7hfv594aiq"))
168 (modules '((guix build utils)))
169 (snippet
170 #~(begin
171 ;; Build fails when this file is kept: Code in directory
172 ;; /tmp/<...>/src/github.com/compose-spec/compose-go/v2 expects
173 ;; import "github.com/compose-spec/compose-go"
174 (delete-file "package.go")))))
175 (build-system go-build-system)
176 (arguments
177 (list
178 #:skip-build? #t
179 #:embed-files
180 #~(list "applicator"
181 "content"
182 "core"
183 "format"
184 "format-annotation"
185 "format-assertion"
186 "meta-data"
187 "schema"
188 "unevaluated"
189 "validation")
190 #:import-path "github.com/compose-spec/compose-go/v2"
191 #:test-flags
192 #~(list "-skip" (string-join
193 ;; error decoding 'services[test].environment':
194 ;; environment variable DEBUG is declared with a
195 ;; trailing space
196 (list "TestEnvironmentWhitespace"
197 ;; ports_test.go:80: assertion failed: expected
198 ;; error "Invalid ip address: 127.0.1", got
199 ;; "invalid IP address: 127.0.1"
200 "Test_transformPorts/invalid_IP"
201 ;; types_test.go:190: assertion failed: expected
202 ;; error "Invalid containerPort: 9999999", got
203 ;; "invalid containerPort: 9999999"
204 "TestParsePortConfig")
205 "|"))))
206 (native-inputs
207 (list go-github-com-google-go-cmp
208 go-github-com-stretchr-testify
209 go-gotest-tools-v3))
210 (propagated-inputs
211 (list go-github-com-distribution-reference
212 go-github-com-docker-go-connections
213 go-github-com-docker-go-units
214 go-github-com-go-viper-mapstructure-v2
215 go-github-com-mattn-go-shellwords
216 go-github-com-opencontainers-go-digest
217 go-github-com-santhosh-tekuri-jsonschema-v6
218 go-github-com-sirupsen-logrus
219 go-github-com-xhit-go-str2duration-v2
220 go-go-yaml-in-yaml-v3
221 go-golang-org-x-sync
222 go-golang-org-x-text))
223 (home-page "https://compose-spec.io/")
224 (synopsis "Reference library for parsing and loading Compose YAML files")
225 (description
226 "This package provides a Golang reference library for parsing and
227loading Compose files as specified by the
228@url{https://github.com/compose-spec/compose-spec, Compose specification}.")
229 (license license:asl2.0)))
230
231(define-public go-github-com-containerd-accelerated-container-image
232 (package
233 (name "go-github-com-containerd-accelerated-container-image")
234 (version "1.4.3")
235 (source
236 (origin
237 (method git-fetch)
238 (uri (git-reference
239 (url "https://github.com/containerd/accelerated-container-image")
240 (commit (string-append "v" version))))
241 (file-name (git-file-name name version))
242 (sha256
243 (base32 "086ywdk8mnqnjj3a07ggcyf52cqqsr8cbx2iw2qrncd1slb9l0vv"))
244 (modules '((guix build utils)))
245 (snippet
246 #~(begin
247 ;; It requires Windows-only packages in check phase
248 ;; (go-github-com-microsoft-hcsshim)
249 (delete-file-recursively "cmd/ctr")))))
250 (build-system go-build-system)
251 (arguments
252 (list
253 #:skip-build? #t
254 #:import-path "github.com/containerd/accelerated-container-image"
255 #:test-flags
256 ;; Requires network connection
257 #~(list "-skip" "TestConvertReferrer")))
258 (native-inputs
259 (list go-github-com-containerd-log
260 go-github-com-prometheus-client-golang
261 go-github-com-sirupsen-logrus
262 go-github-com-spf13-cobra
263 go-github-com-urfave-cli-v2))
264 (propagated-inputs
265 (list go-github-com-containerd-containerd-api
266 go-github-com-containerd-containerd-v2
267 go-github-com-containerd-continuity
268 go-github-com-containerd-errdefs
269 go-github-com-containerd-go-cni
270 go-github-com-containerd-platforms
271 go-github-com-data-accelerator-zdfs
272 go-github-com-docker-go-units
273 go-github-com-go-sql-driver-mysql
274 go-github-com-moby-locker
275 go-github-com-moby-sys-mountinfo
276 go-github-com-opencontainers-go-digest
277 go-github-com-opencontainers-image-spec
278 go-github-com-opencontainers-runtime-spec
279 go-golang-org-x-sync
280 go-golang-org-x-sys
281 go-google-golang-org-grpc
282 go-oras-land-oras-go-v2))
283 (home-page "https://github.com/containerd/accelerated-container-image")
284 (synopsis "Remote container image format")
285 (description
286 "Accelerated Container Image is an implementation of paper
287@url{https://www.usenix.org/conference/atc20/presentation/li-huiba, DADI:
288Block-Level Image Service for Agile and Elastic Application Deployment. USENIX
289ATC'20}.")
290 (license license:asl2.0)))
291
292(define-public go-github-com-containerd-accelerated-container-image-pkg-types
293 ;; Submodule to break cycle in github.com/data-accelerator/zdfs.
294 (hidden-package
295 (package
296 (name "go-github-com-containerd-accelerated-container-image-pkg-types")
297 (version "1.4.3")
298 (source
299 (origin
300 (method git-fetch)
301 (uri (git-reference
302 (url "https://github.com/containerd/accelerated-container-image")
303 (commit (string-append "v" version))))
304 (file-name (git-file-name name version))
305 (sha256
306 (base32 "086ywdk8mnqnjj3a07ggcyf52cqqsr8cbx2iw2qrncd1slb9l0vv"))
307 (modules '((guix build utils)))
308 (snippet
309 #~(begin
310 (delete-all-but "." "pkg")
311 (delete-all-but "pkg" "types")))))
312 (build-system go-build-system)
313 (arguments
314 (list
315 #:skip-build? #t
316 #:tests? #f
317 #:import-path "github.com/containerd/accelerated-container-image"))
318 (home-page "https://github.com/containerd/accelerated-container-image")
319 (synopsis "Remote container image format types")
320 (description
321 "This packages provides types from
322@url{https://github.com/containerd/accelerated-container-image}.")
323 (license license:asl2.0))))
324
325(define-public go-github-com-containerd-aufs
326 (package
327 (name "go-github-com-containerd-aufs")
328 (version "1.0.0")
329 (source
330 (origin
331 (method git-fetch)
332 (uri (git-reference
333 (url "https://github.com/containerd/aufs")
334 (commit (string-append "v" version))))
335 (file-name (git-file-name name version))
336 (sha256
337 (base32 "0jyyyf6sr910m602axmp4h4j1l2n680cpp60z09pvprz55zi4ba0"))))
338 (build-system go-build-system)
339 (arguments
340 (list
341 #:skip-build? #t ;source only package
342 #:tests? #f
343 #:import-path "github.com/containerd/aufs"))
344 (propagated-inputs
345 (list ;; go-github-com-containerd-containerd ; cycles
346 go-github-com-containerd-continuity
347 go-github-com-pkg-errors
348 go-golang-org-x-sys))
349 (home-page "https://github.com/containerd/aufs")
350 (synopsis "AUFS snapshotter containerd v1")
351 (description
352 "This package provides an @acronym{Advanced multi-layered Unification
353FilesyStem, AUFS} implementation of the snapshot interface for containerd.")
354 (license license:asl2.0)))
355
356(define-public go-github-com-containerd-containerd-v2
357 (package
358 (name "go-github-com-containerd-containerd-v2")
359 (version "2.2.3")
360 (source
361 (origin
362 (method git-fetch)
363 (uri (git-reference
364 (url "https://github.com/containerd/containerd")
365 (commit (string-append "v" version))))
366 (file-name (git-file-name name version))
367 (sha256
368 (base32 "0wxy5np689571s6lw77mx63nw75fx85w5svi0jplksmqzmjqp8wd"))
369 (snippet
370 #~(begin (use-modules (guix build utils))
371 (delete-file-recursively "vendor")
372 ;; Submodules with their own go.mod files and packaged separately:
373 ;;
374 ;; - github.com/containerd/containerd/api
375 (delete-file-recursively "api")))))
376 (build-system go-build-system)
377 (arguments
378 (list
379 #:skip-build? #t
380 #:import-path "github.com/containerd/containerd/v2"
381 #:test-subdirs
382 #~(list "cmd/protoc-gen-go-fieldpath/..."
383 "core/containers/..."
384 "core/content/..."
385 "core/diff"
386 "core/diff/apply"
387 "core/events/..."
388 "core/images/..."
389 "core/introspection/..."
390 "core/leases/..."
391 "core/metrics/..."
392 "core/remotes/..."
393 "core/sandbox/..."
394 "core/streaming/..."
395 "core/transfer"
396 "core/transfer/archive/..."
397 "core/transfer/image/..."
398 "core/transfer/local/..."
399 "core/transfer/plugins/..."
400 "core/transfer/streaming/..."
401 "core/unpack/..."
402 "internal/cleanup/..."
403 "internal/erofsutils/..."
404 "internal/eventq/..."
405 "internal/failpoint/..."
406 "internal/fsverity/..."
407 "internal/kmutex/..."
408 "internal/lazyregexp/..."
409 "internal/pprof/..."
410 "internal/randutil/..."
411 "internal/registrar/..."
412 "internal/tomlext/..."
413 "internal/truncindex/..."
414 "internal/userns/..."
415 "internal/wintls/..."
416 "pkg/apparmor/..."
417 "pkg/archive/..."
418 "pkg/atomicfile/..."
419 "pkg/blockio/..."
420 "pkg/cap/..."
421 "pkg/cio..."
422 "pkg/deprecation/..."
423 "pkg/dialer/..."
424 "pkg/display/..."
425 "pkg/epoch/..."
426 "pkg/fifosync/..."
427 "pkg/filters/..."
428 "pkg/gc/..."
429 "pkg/httpdbg/..."
430
431 ;; TODO: Check why these submodule fail to build.
432 ;; "client/..."
433 ;; "cmd/containerd-shim-runc-v2/..."
434 ;; "cmd/containerd-stress/..."
435 ;; "cmd/containerd/..."
436 ;; "cmd/ctr/..."
437 ;; "cmd/gen-manpages/..."
438 ;; "contrib/..."
439 ;; "core/diff/proxy"
440 ;; "core/metadata/..."
441 ;; "core/mount/..."
442 ;; "core/runtime/..."
443 ;; "core/snapshots/..."
444 ;; "core/transfer/proxy/..."
445 ;; "core/transfer/registry/..."
446 ;; "integration/..."
447 ;; "internal/cri/..."
448 ;; "internal/nri/..."
449 ;; "pkg/cdi/..."
450 #;"plugins/...")
451 #:test-flags
452 #~(list "-skip" (string-join
453 ;; panic: cannot statfs cgroup root [recovered]
454 (list "TestValidateConfig"
455 ;; io_test.go:40: failed to start binary process:
456 ;; fork/exec /bin/echo: no such file or directory
457 "TestNewBinaryIO"
458 ;; expected success: got executable file not found in $PATH
459 "TestExecutorWithArgs"
460 "TestSetEnv"
461 "TestStdIOPipes"
462 ;; panic: cannot statfs cgroup root
463 "TestContainerCapabilities"
464 "TestContainerSpecTty"
465 "TestContainerSpecReadonlyRootfs"
466 "TestContainerSpecWithExtraMounts"
467 "TestContainerAndSandboxPrivileged"
468 "TestPrivilegedBindMount"
469 "TestCgroupNamespace"
470 "TestPidNamespace/node_namespace_mode"
471 ;; failed to apply b: invalid argument
472 "TestDiffTar/IgnoreSockets"
473 "TestBinDirVerifyImage/max_verifiers_=_-1,_with_timeout"
474 "TestContainerSpecDefaultPath"
475 ;; Error: Not equal:
476 ;; expected: 1000
477 ;; actual : 123
478 "TestSetPositiveOomScoreAdjustment")
479 "|"))))
480 (native-inputs
481 (list go-github-com-stretchr-testify))
482 (propagated-inputs
483 (list go-dario-cat-mergo
484 go-github-com-adalogics-go-fuzz-headers
485 go-github-com-checkpoint-restore-checkpointctl
486 go-github-com-checkpoint-restore-go-criu-v7
487 go-github-com-containerd-btrfs-v2
488 go-github-com-containerd-cgroups-v3
489 go-github-com-containerd-console
490 go-github-com-containerd-containerd-api
491 go-github-com-containerd-continuity
492 go-github-com-containerd-errdefs
493 go-github-com-containerd-errdefs-pkg
494 go-github-com-containerd-fifo
495 go-github-com-containerd-go-cni
496 go-github-com-containerd-go-runc
497 go-github-com-containerd-imgcrypt-v2
498 go-github-com-containerd-log
499 go-github-com-containerd-nri
500 go-github-com-containerd-otelttrpc
501 go-github-com-containerd-platforms
502 go-github-com-containerd-plugin
503 go-github-com-containerd-ttrpc
504 go-github-com-containerd-typeurl-v2
505 go-github-com-containerd-zfs-v2
506 go-github-com-containernetworking-cni
507 go-github-com-containernetworking-plugins
508 go-github-com-coreos-go-systemd-v22
509 go-github-com-davecgh-go-spew
510 go-github-com-distribution-reference
511 go-github-com-docker-go-events
512 go-github-com-docker-go-metrics
513 go-github-com-docker-go-units
514 go-github-com-emicklei-go-restful-v3
515 go-github-com-fsnotify-fsnotify
516 go-github-com-google-certtostore
517 go-github-com-google-go-cmp
518 go-github-com-google-uuid
519 go-github-com-grpc-ecosystem-go-grpc-middleware-providers-prometheus
520 go-github-com-intel-goresctrl
521 go-github-com-klauspost-compress
522 go-github-com-mdlayher-vsock
523 ;;go-github-com-microsoft-go-winio ;Windows only
524 ;;go-github-com-microsoft-hcsshim ;Windows only
525 go-github-com-moby-locker
526 go-github-com-moby-sys-mountinfo
527 go-github-com-moby-sys-sequential
528 go-github-com-moby-sys-signal
529 go-github-com-moby-sys-symlink
530 go-github-com-moby-sys-user
531 go-github-com-moby-sys-userns
532 go-github-com-opencontainers-go-digest
533 go-github-com-opencontainers-image-spec
534 go-github-com-opencontainers-runtime-spec
535 go-github-com-opencontainers-runtime-tools
536 go-github-com-opencontainers-selinux
537 go-github-com-pelletier-go-toml-v2
538 go-github-com-prometheus-client-golang
539 go-github-com-sirupsen-logrus
540 go-github-com-tchap-go-patricia-v2
541 go-github-com-urfave-cli-v2
542 go-github-com-vishvananda-netlink
543 go-github-com-vishvananda-netns
544 go-go-etcd-io-bbolt
545 go-go-opentelemetry-io-contrib-instrumentation-google-golang-org-grpc-otelgrpc
546 go-go-opentelemetry-io-contrib-instrumentation-net-http-otelhttp
547 go-go-opentelemetry-io-otel
548 go-go-opentelemetry-io-otel-exporters-otlp-otlptrace
549 go-go-opentelemetry-io-otel-exporters-otlp-otlptrace-otlptracegrpc
550 go-go-opentelemetry-io-otel-exporters-otlp-otlptrace-otlptracehttp
551 go-go-opentelemetry-io-otel-sdk
552 go-go-opentelemetry-io-otel-trace
553 go-go-uber-org-goleak
554 go-golang-org-x-mod
555 go-golang-org-x-sync
556 go-golang-org-x-sys
557 go-golang-org-x-time
558 go-google-golang-org-genproto-googleapis-rpc
559 go-google-golang-org-grpc
560 go-google-golang-org-protobuf
561 go-gopkg-in-inf-v0
562 go-k8s-io-apimachinery
563 go-k8s-io-client-go
564 go-k8s-io-cri-api
565 go-k8s-io-klog-v2
566 go-tags-cncf-io-container-device-interface))
567 (home-page "https://containerd.io/")
568 (synopsis "Container runtime support daemon")
569 (description
570 "Containerd is a container runtime with an emphasis on simplicity,
571robustness, and portability. It is available as a daemon, which can manage
572the complete container lifecycle of its host system: image transfer and
573storage, container execution and supervision, low-level storage and network
574attachments, etc.")
575 (license license:asl2.0)))
576
577(define-public go-github-com-containerd-stargz-snapshotter
578 (package
579 (name "go-github-com-containerd-stargz-snapshotter")
580 (version "0.18.2")
581 (source
582 (origin
583 (method git-fetch)
584 (uri (git-reference
585 (url "https://github.com/containerd/stargz-snapshotter")
586 (commit (string-append "v" version))))
587 (file-name (git-file-name name version))
588 (sha256
589 (base32 "06nksi5xpbys6bfqsfm7bax9lxnwynl7y3hw6pcxhv5hckxnb8fp"))
590 (modules '((guix build utils)))
591 (snippet
592 #~(begin
593 ;; Submodules with their own go.mod files and packaged separately:
594 (delete-file-recursively "cmd")
595 (delete-file-recursively "estargz")
596 (delete-file-recursively "ipfs")))))
597 (build-system go-build-system)
598 (arguments
599 (list
600 #:skip-build? #t
601 #:import-path "github.com/containerd/stargz-snapshotter"
602 ;; TODO: Remove when all transitive inputs are packaged.
603 #:test-subdirs
604 #~(list "fs" "task" "cache" "estargz" "fs/layer" "fs/reader"
605 "fs/remote" "util/cacheutil" "metadata/memory"
606 "analyzer/recorder" "estargz/errorutil" "estargz/externaltoc"
607 "estargz/zstdchunked" "util/decompressutil")))
608 (propagated-inputs
609 (list go-github-com-containerd-console
610 go-github-com-containerd-containerd-v2
611 go-github-com-containerd-continuity
612 go-github-com-containerd-errdefs
613 go-github-com-containerd-log
614 go-github-com-containerd-platforms
615 go-github-com-containerd-plugin
616 go-github-com-distribution-reference
617 go-github-com-docker-cli
618 go-github-com-docker-go-metrics
619 go-github-com-gogo-protobuf
620 go-github-com-golang-groupcache
621 go-github-com-hanwen-go-fuse-v2
622 go-github-com-hashicorp-go-retryablehttp
623 go-github-com-klauspost-compress
624 go-github-com-moby-sys-mountinfo
625 go-github-com-opencontainers-go-digest
626 go-github-com-opencontainers-image-spec
627 go-github-com-opencontainers-runtime-spec
628 go-github-com-prometheus-client-golang
629 go-github-com-rs-xid
630 go-github-com-sirupsen-logrus
631 go-go-etcd-io-bbolt
632 go-golang-org-x-sync
633 go-golang-org-x-sys
634 go-google-golang-org-grpc
635 go-k8s-io-api
636 go-k8s-io-apimachinery
637 go-k8s-io-client-go
638 go-k8s-io-cri-api))
639 (home-page "https://github.com/containerd/stargz-snapshotter")
640 (synopsis "Fast container image distribution plugin with lazy pulling")
641 (description
642 "This package provides a container image distribution plugin with lazy
643pulling for Containerd implemented in @code{eStargz} - Standard-Compatible
644Extensions to Tar.gz Layers for Lazy Pulling Container Images.")
645 (license license:asl2.0)))
646
647(define-public go-github-com-containers-gvisor-tap-vsock
648 (package
649 (name "go-github-com-containers-gvisor-tap-vsock")
650 (version "0.8.9")
651 (source
652 (origin
653 (method git-fetch)
654 (uri (git-reference
655 (url "https://github.com/containers/gvisor-tap-vsock")
656 (commit (string-append "v" version))))
657 (file-name (git-file-name name version))
658 (sha256
659 (base32 "1knivsg39x46i4zhbz7cjrcykdkg4xwqy0qf24zyd022hzjznykr"))
660 (modules '((guix build utils)))
661 (snippet
662 #~(begin
663 (delete-file-recursively "vendor")
664 ;; Submodules with their own go.mod files and packaged separately:
665 ;;
666 ;; - github.com/containers/gvisor-tap-vsock/tools
667 (delete-file-recursively "tools")))))
668 (build-system go-build-system)
669 (arguments
670 (list
671 #:skip-build? #t
672 #:import-path "github.com/containers/gvisor-tap-vsock"
673 #:unpack-path "github.com/containers/gvisor-tap-vsock"
674 #:build-flags
675 #~(list (string-append "-ldflags="
676 "-X github.com/containers/gvisor-tap-vsock"
677 "/pkg/types.gitVersion=" #$version))
678 #:test-flags
679 #~(list "-skip"
680 (string-join
681 ;; Received unexpected error:
682 ;; listen unix /tmp/guix-.../test.sock: bind: invalid argument
683 (list "TestNotificationSender_Success"
684 ;; Requires network
685 "TestSuite"
686 "TestDNS")
687 "|"))
688 #:phases
689 #~(modify-phases %standard-phases
690 (add-after 'unpack 'prune-tests
691 (lambda* (#:key unpack-path #:allow-other-keys)
692 (with-directory-excursion (string-append "src/" unpack-path)
693 ;; Requires working DNS.
694 (substitute* "pkg/services/dns/dns_test.go"
695 (("Should pass DNS requests to default system DNS.*" all)
696 (string-append all "\n" "ginkgo.Skip(\"No network.\");"))
697 (("\"redhat.com\",")
698 "\"localhost\",")
699 (("\"52.200.142.250\"")
700 "\"127.0.0.1\""))))))))
701 (native-inputs
702 (list go-github-com-stretchr-testify
703 go-github-com-foxcpp-go-mockdns))
704 (propagated-inputs
705 (list go-github-com-apparentlymart-go-cidr
706 go-github-com-containers-winquit
707 go-github-com-coreos-stream-metadata-go
708 go-github-com-dustin-go-humanize
709 go-github-com-google-gopacket
710 go-github-com-inetaf-tcpproxy
711 go-github-com-insomniacslk-dhcp
712 ;; go-github-com-linuxkit-virtsock ;Windows only
713 go-github-com-mdlayher-vsock
714 ;; go-github-com-microsoft-go-winio ;Windows only
715 go-github-com-miekg-dns
716 go-github-com-onsi-ginkgo
717 go-github-com-onsi-gomega
718 go-github-com-opencontainers-go-digest
719 go-github-com-sirupsen-logrus
720 go-github-com-songgao-packets
721 go-github-com-songgao-water
722 go-github-com-vishvananda-netlink
723 go-golang-org-x-crypto
724 go-golang-org-x-mod
725 go-golang-org-x-sync
726 go-golang-org-x-sys
727 go-gopkg-in-yaml-v3
728 go-gvisor-dev-gvisor-source))
729 (home-page "https://github.com/containers/gvisor-tap-vsock")
730 (synopsis "Network stack for virtualization based on gVisor")
731 (description "This package provides a replacement for @code{libslirp} and
732@code{VPNKit}, written in pure Go. It is based on the network stack of gVisor
733and brings a configurable DNS server and dynamic port forwarding.
734
735It can be used with QEMU, Hyperkit, Hyper-V and User-Mode Linux.
736
737The binary is called @command{gvproxy}.")
738 (license license:asl2.0)))
739
740(define-public go-github-com-data-accelerator-zdfs
741 (package
742 (name "go-github-com-data-accelerator-zdfs")
743 (version "0.1.5")
744 (source
745 (origin
746 (method git-fetch)
747 (uri (git-reference
748 (url "https://github.com/data-accelerator/zdfs")
749 (commit (string-append "v" version))))
750 (file-name (git-file-name name version))
751 (sha256
752 (base32 "0j2xr9li2qciqdi6is82aw3fx1lm673bfddgfg3zhbpx3r95mwsy"))))
753 (build-system go-build-system)
754 (arguments
755 (list
756 #:import-path "github.com/data-accelerator/zdfs"))
757 (native-inputs
758 (list go-github-com-stretchr-testify
759 go-github-com-containerd-accelerated-container-image-pkg-types))
760 (propagated-inputs
761 (list go-github-com-containerd-containerd-v2
762 go-github-com-containerd-continuity
763 go-github-com-distribution-reference
764 go-github-com-pkg-errors
765 go-github-com-sirupsen-logrus))
766 (home-page "https://github.com/data-accelerator/zdfs")
767 (synopsis "Extension package of Overlaybd-snapshotter")
768 (description
769 "This package provides an extension overlaybd-snapshotter. It constructs
770the overlaybd image in OCIv1 tgz format through a tricky method which makes
771'overlaybd-snapshotter' adapter for a normal OCIv1 image.")
772 (license license:asl2.0)))
773
774(define-public go-github-com-docker-docker
775 (package
776 (name "go-github-com-docker-docker")
777 (version "28.5.2")
778 (source
779 (origin
780 (method git-fetch)
781 (uri (git-reference
782 (url "https://github.com/moby/moby")
783 (commit (string-append "v" version))))
784 (file-name (git-file-name name version))
785 (sha256
786 (base32 "1jy92qqpdj78af8m0qy0agykhmc9h0apx0lfxc8x6mcbakbg772g"))
787 (snippet
788 #~(begin (use-modules (guix build utils))
789 (delete-file-recursively "vendor")))))
790 (build-system go-build-system)
791 (arguments
792 (list
793 #:import-path "github.com/docker/docker"
794 #:skip-build? #t
795 ;; These tests open SCTP sockets, which fails with "protocol not
796 ;; supported" on a kernel built without SCTP; the build environment
797 ;; cannot rely on it.
798 #:test-flags
799 #~(list "-skip" (string-join
800 (list "TestSCTP4ProxyNoListener"
801 "TestSCTP6ProxyNoListener")
802 "|"))
803 #:test-subdirs
804 ;; XXX: Remove when all inputs are packaged.
805 ;;
806 ;; daemon/graphdriver/btrfs is left out: its tests exercise the driver
807 ;; on the file system holding the build directory, so on btrfs they
808 ;; activate and fail because the build user cannot chown, and on any
809 ;; other file system they merely skip.
810 #~(list "oci" "opts" "image" "layer" "quota" "client" "plugin" "errdefs"
811 "registry" "testutil" "pkg/pools" "pkg/stack" "plugin/v2"
812 "reference" "runconfig" "pkg/system" "pkg/tarsum" "image/cache"
813 "pkg/homedir" "pkg/idtools" "pkg/ioutils" "pkg/meminfo"
814 "pkg/parsers" "pkg/pidfile" "pkg/process" "pkg/stdcopy"
815 "pkg/sysinfo" "daemon/links" "internal/mod" "pkg/longpath"
816 "pkg/progress" "pkg/stringid" "pkg/tailfile" "volume/local"
817 "daemon/events" "daemon/logger" "dockerversion" "internal/opts"
818 "pkg/fileutils" "pkg/useragent" "volume/mounts"
819 "api/types/time" "daemon/network" "restartmanager"
820 "volume/drivers" "volume/service" "pkg/jsonmessage"
821 "cmd/docker-proxy" "cmd/dockerd/trap" "container/stream"
822 "internal/ioutils" "libnetwork/types" "api/types/filters"
823 "api/types/network" "cmd/dockerd/debug" "distribution/xfer"
824 "internal/cleanups" "internal/platform" "libnetwork/bitmap"
825 "libnetwork/config" "libnetwork/ipbits" "pkg/authorization"
826 "api/types/registry" "api/types/strslice" "api/types/versions"
827 "daemon/graphdriver" "integration/plugin"
828 "internal/directory" "internal/sliceutil"
829 "internal/usergroup" "libnetwork/options"
830 "pkg/namesgenerator" "pkg/parsers/kernel"
831 "registry/resumable" "api/types/container"
832 "daemon/logger/local" "internal/lazyregexp"
833 "internal/multierror" "libcontainerd/queue"
834 "libnetwork/etchosts" "libnetwork/netlabel"
835 "pkg/streamformatter" "api/server/httputils"
836 "daemon/logger/splunk" "daemon/logger/syslog"
837 "internal/containerfs" "libnetwork/datastore"
838 "libnetwork/driverapi" "libnetwork/networkdb"
839 "api/server/middleware" "daemon/logger/awslogs"
840 "distribution/metadata" "libnetwork/ipams/null"
841 "libnetwork/osl/kernel" "pkg/plugins/transport"
842 "daemon/logger/journald" "libnetwork/drvregistry"
843 "api/server/router/swarm" "daemon/graphdriver/copy"
844 "daemon/logger/templates" "libnetwork/drivers/host"
845 "libnetwork/drivers/null" "api/server/router/system"
846 "api/server/router/volume" "libnetwork/portallocator"
847 "daemon/logger/jsonfilelog"
848 "daemon/logger/loggerutils" "libnetwork/drivers/ipvlan"
849 "pkg/plugins/pluginrpc-gen" "container/stream/bytespipe"
850 "libnetwork/drivers/macvlan" "libnetwork/drivers/overlay"
851 "libnetwork/internal/caller" "daemon/graphdriver/overlay2"
852 "libnetwork/internal/addrset" "pkg/parsers/operatingsystem"
853 "daemon/internal/capabilities" "libnetwork/ipams/defaultipam"
854 "builder/remotecontext/urlutil" "libnetwork/internal/netiputil"
855 "libnetwork/internal/setmatrix"
856 "libnetwork/internal/resolvconf"
857 "daemon/internal/filedescriptors"
858 "daemon/logger/loggerutils/cache"
859 "daemon/graphdriver/fuse-overlayfs"
860 "daemon/logger/jsonfilelog/jsonlog"
861 "libnetwork/drivers/overlay/ovmanager"
862 "daemon/logger/journald/internal/export"
863 "integration/plugin/logging/cmd/discard"
864 "libnetwork/drivers/overlay/overlayutils")))
865 (native-inputs
866 (list go-github-com-google-go-cmp
867 go-github-com-spf13-cobra
868 go-github-com-spf13-pflag))
869 (propagated-inputs
870 (list go-cloud-google-com-go-compute-metadata
871 go-cloud-google-com-go-logging
872 go-code-cloudfoundry-org-clock
873 go-dario-cat-mergo
874 go-github-com-adalogics-go-fuzz-headers
875 ;; go-github-com-azure-go-ansiterm ;Windows only
876 go-github-com-graylog2-go-gelf
877 ;; go-github-com-microsoft-go-winio ;Windows only
878 ;; go-github-com-microsoft-hcsshim ;Windows only
879 go-github-com-racksec-srslog
880 go-github-com-aws-aws-sdk-go-v2
881 go-github-com-aws-aws-sdk-go-v2-config
882 go-github-com-aws-aws-sdk-go-v2-credentials
883 go-github-com-aws-aws-sdk-go-v2-feature-ec2-imds
884 go-github-com-aws-aws-sdk-go-v2-service-cloudwatchlogs
885 go-github-com-aws-smithy-go
886 go-github-com-cloudflare-cfssl
887 go-github-com-containerd-cgroups-v3
888 go-github-com-containerd-containerd-api
889 go-github-com-containerd-containerd-v2
890 go-github-com-containerd-continuity
891 go-github-com-containerd-errdefs
892 go-github-com-containerd-errdefs-pkg
893 go-github-com-containerd-fifo
894 go-github-com-containerd-log
895 go-github-com-containerd-platforms
896 go-github-com-containerd-typeurl-v2
897 go-github-com-coreos-go-systemd-v22
898 go-github-com-cpuguy83-tar2go
899 go-github-com-creack-pty
900 go-github-com-deckarep-golang-set-v2
901 go-github-com-distribution-reference
902 go-github-com-docker-distribution
903 go-github-com-docker-go-connections
904 go-github-com-docker-go-events
905 go-github-com-docker-go-metrics
906 go-github-com-docker-go-units
907 go-github-com-fluent-fluent-logger-golang
908 go-github-com-godbus-dbus-v5
909 go-github-com-gogo-protobuf
910 go-github-com-golang-protobuf
911 go-github-com-google-uuid
912 go-github-com-gorilla-mux
913 go-github-com-hashicorp-go-immutable-radix-v2
914 go-github-com-hashicorp-go-memdb
915 go-github-com-hashicorp-go-multierror
916 go-github-com-hashicorp-memberlist
917 go-github-com-hashicorp-serf
918 go-github-com-ishidawataru-sctp
919 go-github-com-miekg-dns
920 go-github-com-mistifyio-go-zfs-v3
921 go-github-com-mitchellh-copystructure
922 go-github-com-moby-docker-image-spec
923 go-github-com-moby-go-archive
924 go-github-com-moby-ipvs
925 go-github-com-moby-locker
926 go-github-com-moby-patternmatcher
927 go-github-com-moby-profiles-apparmor
928 go-github-com-moby-profiles-seccomp
929 go-github-com-moby-pubsub
930 go-github-com-moby-sys-atomicwriter
931 go-github-com-moby-sys-mount
932 go-github-com-moby-sys-mountinfo
933 go-github-com-moby-sys-reexec
934 go-github-com-moby-sys-sequential
935 go-github-com-moby-sys-signal
936 go-github-com-moby-sys-symlink
937 go-github-com-moby-sys-user
938 go-github-com-moby-sys-userns
939 go-github-com-moby-term
940 go-github-com-morikuni-aec
941 go-github-com-opencontainers-cgroups
942 go-github-com-opencontainers-go-digest
943 go-github-com-opencontainers-image-spec
944 go-github-com-opencontainers-runtime-spec
945 go-github-com-opencontainers-selinux
946 go-github-com-pelletier-go-toml
947 go-github-com-pkg-errors
948 go-github-com-prometheus-client-golang
949 go-github-com-sirupsen-logrus
950 go-github-com-tonistiigi-go-archvariant
951 go-github-com-vbatts-tar-split
952 go-github-com-vishvananda-netlink
953 go-github-com-vishvananda-netns
954 go-go-etcd-io-bbolt
955 go-go-opentelemetry-io-contrib-instrumentation-google-golang-org-grpc-otelgrpc
956 go-go-opentelemetry-io-contrib-instrumentation-net-http-otelhttp
957 go-go-opentelemetry-io-otel
958 go-go-opentelemetry-io-otel-exporters-otlp-otlptrace-otlptracehttp
959 go-go-opentelemetry-io-otel-sdk
960 go-go-opentelemetry-io-otel-trace
961 go-golang-org-x-mod
962 go-golang-org-x-net
963 go-golang-org-x-sync
964 go-golang-org-x-sys
965 go-golang-org-x-text
966 go-golang-org-x-time
967 go-google-golang-org-genproto-googleapis-api
968 go-google-golang-org-grpc
969 go-google-golang-org-protobuf
970 go-gotest-tools-v3
971 go-resenje-org-singleflight
972 go-tags-cncf-io-container-device-interface
973
974 ;; TODO: Complete packaging.
975 ;; go-github-com-golang-gddo
976 ;; go-github-com-moby-buildkit
977 ;; go-github-com-moby-swarmkit-v2
978 ;; go-github-com-rootless-containers-rootlesskit-v2
979 #;go-go-opentelemetry-io-contrib-processors-baggagecopy))
980 (home-page "https://github.com/docker/docker")
981 (synopsis "The Moby Project")
982 (description
983 "Moby is an open-source project created by Docker to enable and accelerate
984software containerization.")
985 (license license:asl2.0)))
986
987(define-public go-github-com-docker-go-events
988 (package
989 (name "go-github-com-docker-go-events")
990 (version "0.0.0-20250808211157-605354379745")
991 (source
992 (origin
993 (method git-fetch)
994 (uri (git-reference
995 (url "https://github.com/docker/go-events")
996 (commit (go-version->git-ref version))))
997 (file-name (git-file-name name version))
998 (sha256
999 (base32 "0q3ylzyl670m3an32nhb0l5bsc3f4d9b963x3pjwsc94brg9l5qp"))))
1000 (build-system go-build-system)
1001 (arguments
1002 (list
1003 #:import-path "github.com/docker/go-events"))
1004 (propagated-inputs
1005 (list go-github-com-sirupsen-logrus))
1006 (home-page "https://github.com/docker/go-events")
1007 (synopsis "Composable event distribution for Golang")
1008 (description
1009 "This package implements a composable event distribution library,
1010originally created to implement the notifications in
1011@url{https://github.com/distribution/distribution/blob/v3.0.0/docs/content/about/notifications.md,
1012Docker Registry 2}.")
1013 (license license:asl2.0)))
1014
1015(define-public go-github-com-docker-go-metrics
1016 (package
1017 (name "go-github-com-docker-go-metrics")
1018 (version "0.0.1")
1019 (source
1020 (origin
1021 (method git-fetch)
1022 (uri (git-reference
1023 (url "https://github.com/docker/go-metrics")
1024 (commit (string-append "v" version))))
1025 (file-name (git-file-name name version))
1026 (sha256
1027 (base32 "1b6f1889chmwlsgrqxylnks2jic16j2dqhsdd1dvaklk48ky95ga"))))
1028 (build-system go-build-system)
1029 (arguments
1030 (list
1031 #:import-path "github.com/docker/go-metrics"))
1032 (propagated-inputs (list go-github-com-prometheus-client-golang))
1033 (home-page "https://github.com/docker/go-metrics")
1034 (synopsis "Go library for metrics collection from Docker projects")
1035 (description
1036 "This package is a small wrapper around the Prometheus Go client to help
1037enforce convention and best practices for metrics collection in Docker
1038projects.")
1039 (license (list license:asl2.0 license:cc-by-sa4.0))))
1040
1041(define-public go-github-com-moby-policy-helpers
1042 (package
1043 (name "go-github-com-moby-policy-helpers")
1044 (version "0.0.0-20260507153417-a39d60132186")
1045 (source
1046 (origin
1047 (method git-fetch)
1048 (uri (git-reference
1049 (url "https://github.com/moby/policy-helpers")
1050 (commit (go-version->git-ref version))))
1051 (file-name (git-file-name name version))
1052 (sha256
1053 (base32 "12fa602jianip7dg98f2i9i686s2a9bsclw8sqxw1ac1v19qlqr8"))
1054 (modules '((guix build utils)))
1055 (snippet '(delete-file-recursively "vendor"))))
1056 (build-system go-build-system)
1057 (arguments
1058 (list
1059 #:embed-files #~(list ".*\\.json")
1060 #:import-path "github.com/moby/policy-helpers"))
1061 (native-inputs
1062 (list go-github-com-stretchr-testify))
1063 (propagated-inputs
1064 (list go-github-com-containerd-containerd-v2
1065 go-github-com-containerd-errdefs
1066 go-github-com-containerd-platforms
1067 go-github-com-distribution-reference
1068 go-github-com-gofrs-flock
1069 go-github-com-in-toto-in-toto-golang
1070 go-github-com-opencontainers-go-digest
1071 go-github-com-opencontainers-image-spec
1072 go-github-com-pkg-errors
1073 go-github-com-sigstore-protobuf-specs
1074 go-github-com-sigstore-sigstore
1075 go-github-com-sigstore-sigstore-go
1076 go-github-com-theupdateframework-go-tuf-v2
1077 go-golang-org-x-sync))
1078 (home-page "https://github.com/moby/policy-helpers")
1079 (synopsis "Policy helpers for Docker")
1080 (description "This package provides a policy helpers for Moby (Docker)
1081and BuildKit. It is a work in progress.")
1082 (license license:asl2.0)))
1083
1084(define-public go-github-com-opencontainers-image-spec-schema
1085 (package
1086 (name "go-github-com-opencontainers-image-spec-schema")
1087 (version "0.0.0-20260514171043-13cff54902ec")
1088 (source
1089 (origin
1090 (method git-fetch)
1091 (uri (git-reference
1092 (url "https://github.com/opencontainers/image-spec")
1093 (commit (go-version->git-ref version))))
1094 (file-name (git-file-name name version))
1095 (sha256
1096 (base32 "0jg1wfbr6rva24cz6q6d73wgaridzkh9sclzm2dwxpiwmbkcas38"))
1097 (modules '((guix build utils)))
1098 (snippet #~(delete-all-but "." "schema"))))
1099 (build-system go-build-system)
1100 (arguments
1101 (list
1102 #:embed-files
1103 ;; For go-github-com-santhosh-tekuri-jsonschema-v6:
1104 #~(list "applicator"
1105 "content"
1106 "core"
1107 "format"
1108 "format-annotation"
1109 "format-assertion"
1110 "meta-data"
1111 "schema"
1112 "unevaluated"
1113 "validation")
1114 #:import-path "github.com/opencontainers/image-spec/schema"
1115 #:unpack-path "github.com/opencontainers/image-spec"))
1116 (propagated-inputs
1117 (list go-github-com-opencontainers-go-digest
1118 go-github-com-opencontainers-image-spec
1119 go-github-com-russross-blackfriday-v2
1120 go-github-com-santhosh-tekuri-jsonschema-v6))
1121 (home-page "https://github.com/opencontainers/image-spec")
1122 (synopsis "OCI Image Format")
1123 (description
1124 "Package schema defines the OCI image media types, schema definitions and
1125validation functions.")
1126 (license license:asl2.0)))
1127
1128(define-public go-github-com-opencontainers-image-tools
1129 (package
1130 (name "go-github-com-opencontainers-image-tools")
1131 (version "0.3.0")
1132 (source
1133 (origin
1134 (method git-fetch)
1135 (uri (git-reference
1136 (url "https://github.com/opencontainers/image-tools")
1137 (commit (string-append "v" version))))
1138 (file-name (git-file-name name version))
1139 (sha256
1140 (base32 "0drxjgcxm268cwv547anl23rv1jx7mvdfxp7nxr6fjbzpxav6bd2"))))
1141 (build-system go-build-system)
1142 (arguments
1143 (list
1144 #:skip-build? #t
1145 #:import-path "github.com/opencontainers/image-tools"))
1146 (home-page "https://github.com/opencontainers/image-tools")
1147 (synopsis "OCI Image Tooling")
1148 (description
1149 "@code{oci-image-tool} is a collection of tools for working with the
1150@url{https://github.com/opencontainers/image-spec, OCI image format
1151specification}.")
1152 (license license:asl2.0)))
1153
1154(define-public go-github-com-opencontainers-runc
1155 (package
1156 (name "go-github-com-opencontainers-runc")
1157 (version "1.3.0")
1158 (source
1159 (origin
1160 (method git-fetch)
1161 (uri (git-reference
1162 (url "https://github.com/opencontainers/runc")
1163 (commit (string-append "v" version))))
1164 (file-name (git-file-name name version))
1165 (sha256
1166 (base32 "0midvxwmj4fvhy5mqv616bhlx39j0gd6y890adx7dnz5in506ym1"))
1167 (snippet
1168 #~(begin (use-modules (guix build utils))
1169 (delete-file-recursively "vendor")))))
1170 (build-system go-build-system)
1171 (arguments
1172 (list
1173 #:import-path "github.com/opencontainers/runc"
1174 ;; Most tests require additinoal set up and downloading images from
1175 ;; Internet.
1176 #:test-subdirs #~(list "."
1177 "libcontainer/capabilities"
1178 "libcontainer/devices"
1179 "libcontainer/intelrdt"
1180 "libcontainer/internal/userns"
1181 "libcontainer/logs"
1182 "libcontainer/nsenter/test"
1183 "libcontainer/specconv"
1184 "libcontainer/system"
1185 "libcontainer/system/kernelversion"
1186 "libcontainer/utils")))
1187 (propagated-inputs
1188 (list go-github-com-checkpoint-restore-go-criu-v6
1189 go-github-com-containerd-console
1190 go-github-com-coreos-go-systemd-v22
1191 go-github-com-cyphar-filepath-securejoin-0.4.1
1192 go-github-com-docker-go-units
1193 go-github-com-godbus-dbus-v5
1194 go-github-com-moby-sys-capability
1195 go-github-com-moby-sys-mountinfo
1196 go-github-com-moby-sys-user
1197 go-github-com-moby-sys-userns
1198 go-github-com-mrunalp-fileutils
1199 go-github-com-opencontainers-cgroups-0.0.1
1200 go-github-com-opencontainers-runtime-spec-1.2.1
1201 go-github-com-opencontainers-selinux
1202 go-github-com-seccomp-libseccomp-golang
1203 go-github-com-sirupsen-logrus
1204 go-github-com-urfave-cli
1205 go-github-com-vishvananda-netlink
1206 go-golang-org-x-net
1207 go-golang-org-x-sys
1208 go-google-golang-org-protobuf))
1209 (home-page "https://github.com/opencontainers/runc")
1210 (synopsis "Tool for running containers according to the OCI specification")
1211 (description
1212 "@code{runc} is a CLI tool and library for spawning and running
1213containers on Linux according to the OCI specification.")
1214 (license license:asl2.0)))
1215
1216(define-public go-github-com-opencontainers-umoci
1217 (package
1218 (name "go-github-com-opencontainers-umoci")
1219 (version "0.5.0")
1220 (source
1221 (origin
1222 (method git-fetch)
1223 (uri (git-reference
1224 (url "https://github.com/opencontainers/umoci")
1225 (commit (string-append "v" version))))
1226 (file-name (git-file-name name version))
1227 (sha256
1228 (base32 "10pxiqk4194nbnvlvfvlbk31wp8k35in3g694y20f9261nn0qx6n"))
1229 (snippet
1230 #~(begin (use-modules (guix build utils))
1231 (delete-file-recursively "vendor")))))
1232 (build-system go-build-system)
1233 (arguments
1234 (list
1235 #:import-path "github.com/opencontainers/umoci"
1236 ;; convert spec to rootless: inspecting mount flags of /etc/resolv.conf:
1237 ;; no such file or directory
1238 #:test-flags
1239 #~(list "-skip" "TestUnpackManifestCustomLayer|TestUnpackStartFromDescriptor")
1240 #:test-subdirs
1241 ;; cmd/umoci needs older version of image-spec, excluding it.
1242 #~(list "." "mutate"
1243 "oci/cas/dir"
1244 "oci/casext/blobcompress"
1245 "oci/config/generate"
1246 "pkg/funchelpers"
1247 "pkg/hardening"
1248 "pkg/idtools"
1249 "pkg/mtreefilter"
1250 "pkg/pathtrie"
1251 "pkg/system"
1252 "pkg/unpriv")))
1253 (native-inputs
1254 (list go-github-com-mohae-deepcopy
1255 go-github-com-stretchr-testify))
1256 (propagated-inputs
1257 (list go-github-com-adalogics-go-fuzz-headers
1258 go-github-com-apex-log
1259 go-github-com-blang-semver-v4
1260 go-github-com-cyphar-filepath-securejoin-0.4.1
1261 go-github-com-docker-go-units
1262 go-github-com-klauspost-compress
1263 go-github-com-klauspost-pgzip
1264 go-github-com-moby-sys-user
1265 go-github-com-moby-sys-userns
1266 go-github-com-opencontainers-go-digest
1267 go-github-com-opencontainers-image-spec
1268 go-github-com-opencontainers-runtime-spec
1269 go-github-com-rootless-containers-proto-go-proto
1270 go-github-com-urfave-cli
1271 go-github-com-vbatts-go-mtree
1272 go-golang-org-x-sys
1273 go-google-golang-org-protobuf))
1274 (home-page "https://umo.ci/")
1275 (synopsis "Modifies Open Container images")
1276 (description
1277 "umoci modifies Open Container images (pronounced /uːmoˈʨi/) is a
1278reference implementation of the @url{OCI image specification,
1279https://github.com/opencontainers/image-spec} and provides users with the
1280ability to create, manipulate, and otherwise interact with container images.
1281It is designed to be as small and unopinonated as possible, so as to act as a
1282foundation for larger systems to be built on top of.")
1283 (license license:asl2.0)))
1284
1285(define-public go-github-com-rootless-containers-rootlesskit-v3
1286 (package
1287 (name "go-github-com-rootless-containers-rootlesskit-v3")
1288 (version "3.0.0")
1289 (source
1290 (origin
1291 (method git-fetch)
1292 (uri (git-reference
1293 (url "https://github.com/rootless-containers/rootlesskit")
1294 (commit (string-append "v" version))))
1295 (file-name (git-file-name name version))
1296 (sha256
1297 (base32 "0giw1whjpm64h8f1iamgym246rr3wl01w7zgw4lygrj7dqk3clmb"))))
1298 (build-system go-build-system)
1299 (arguments
1300 (list
1301 #:skip-build? #t
1302 #:import-path "github.com/rootless-containers/rootlesskit/v3"))
1303 (propagated-inputs
1304 (list go-github-com-containernetworking-plugins
1305 go-github-com-containers-gvisor-tap-vsock
1306 go-github-com-gofrs-flock
1307 go-github-com-google-uuid
1308 go-github-com-gorilla-mux
1309 go-github-com-insomniacslk-dhcp
1310 go-github-com-masterminds-semver-v3
1311 go-github-com-moby-sys-mountinfo
1312 go-github-com-moby-vpnkit
1313 go-github-com-sirupsen-logrus
1314 go-github-com-songgao-water
1315 go-github-com-urfave-cli-v2
1316 go-golang-org-x-sync
1317 go-golang-org-x-sys
1318 go-gotest-tools-v3))
1319 (home-page "https://github.com/rootless-containers/rootlesskit")
1320 (synopsis "Linux-native fakeroot using user namespaces in Golang")
1321 (description
1322 "@code{RootlessKit} is a Linux-native implementation of \"fake root\" using
1323@url{http://man7.org/linux/man-pages/man7/user_namespaces.7.html,(code
1324user_namespaces(7))}. It is used to run containers engines as an
1325unprivileged user, known as \"Rootless mode\".")
1326 (license license:asl2.0)))
1327
1328(define-public go-go-podman-io-common
1329 (package
1330 (name "go-go-podman-io-common")
1331 (version "0.68.1")
1332 (source
1333 (origin
1334 (method git-fetch)
1335 (uri (git-reference
1336 (url "https://github.com/podman-container-tools/container-libs")
1337 (commit (go-version->git-ref version #:subdir "common"))))
1338 (file-name (git-file-name name version))
1339 (sha256
1340 (base32 "040snqsg3il98pz9w8442wdzwm2rm07yqbch87f4jic4p4s0707s"))
1341 (modules '((guix build utils)))
1342 (snippet
1343 #~(begin
1344 (delete-all-but "." "common")
1345 ;; Module name has been changed upstream.
1346 (substitute* (find-files "." "\\.go$")
1347 (("github.com/disiqueira/gotree")
1348 "github.com/d6o/GoTree"))))))
1349 (build-system go-build-system)
1350 (arguments
1351 (list
1352 #:skip-build? #t
1353 #:import-path "go.podman.io/common"
1354 #:unpack-path "go.podman.io"
1355 #:embed-files
1356 #~(list "^VERSION$")
1357 #:test-subdirs
1358 ;; XXX: Remove when go-go-podman-io-image-v5 and go-go-podman-io-storage
1359 ;; are updated.
1360 #~(list "pkg/auth" "pkg/flag" "pkg/chown" "pkg/parse" "pkg/umask"
1361 "pkg/report" "pkg/sysctl" "pkg/cgroups" "pkg/filters"
1362 "pkg/formats" "pkg/machine" "pkg/seccomp" "pkg/secrets"
1363 "pkg/sysinfo" "pkg/timetype" "pkg/manifests" "pkg/configmaps"
1364 "pkg/hooks/0.1.0" "pkg/strongunits" "pkg/capabilities"
1365 "pkg/subscriptions" "pkg/secrets/filedriver"
1366 "pkg/configmaps/filedriver" "pkg/apparmor/internal/supported")))
1367 (native-inputs
1368 (list go-github-com-onsi-ginkgo-v2
1369 go-github-com-davecgh-go-spew
1370 go-github-com-onsi-gomega
1371 go-github-com-spf13-cobra
1372 go-github-com-spf13-pflag
1373 go-github-com-stretchr-testify))
1374 (propagated-inputs
1375 (list go-github-com-checkpoint-restore-checkpointctl
1376 go-github-com-checkpoint-restore-go-criu-v8
1377 go-github-com-containerd-platforms
1378 go-github-com-containers-ocicrypt
1379 go-github-com-coreos-go-systemd-v22
1380 go-github-com-cyphar-filepath-securejoin-0.4.1
1381 go-github-com-davecgh-go-spew
1382 go-github-com-d6o-gotree-v3 ;go-github-com-disiqueira-gotree-v3
1383 go-github-com-docker-distribution
1384 go-github-com-docker-go-units
1385 go-github-com-fsnotify-fsnotify
1386 go-github-com-godbus-dbus-v5
1387 go-github-com-hashicorp-go-multierror
1388 go-github-com-jinzhu-copier
1389 go-github-com-json-iterator-go
1390 go-github-com-moby-sys-capability
1391 go-github-com-moby-sys-devices
1392 go-github-com-opencontainers-cgroups
1393 go-github-com-opencontainers-go-digest
1394 go-github-com-opencontainers-image-spec
1395 go-github-com-opencontainers-runtime-spec
1396 go-github-com-opencontainers-runtime-tools
1397 go-github-com-opencontainers-selinux
1398 go-github-com-pkg-sftp
1399 go-github-com-pmezard-go-difflib
1400 go-github-com-seccomp-libseccomp-golang
1401 go-github-com-sirupsen-logrus
1402 go-github-com-skeema-knownhosts
1403 go-github-com-vishvananda-netlink
1404 go-go-etcd-io-bbolt
1405 go-go-podman-io-image-v5
1406 go-go-podman-io-storage
1407 go-golang-org-x-crypto
1408 go-golang-org-x-sync
1409 go-golang-org-x-sys
1410 go-golang-org-x-term
1411 go-sigs-k8s-io-yaml
1412 go-tags-cncf-io-container-device-interface))
1413 (home-page "https://go.podman.io")
1414 (synopsis "Go code and configuration used across containers projects")
1415 (description
1416 "This package provides shared common files and common Go code to manage
1417those files in github.com/containers repos.")
1418 (license license:asl2.0)))
1419
1420(define-public go-go-podman-io-image-v5
1421 (package
1422 (name "go-go-podman-io-image-v5")
1423 (version "5.39.2")
1424 (source
1425 (origin
1426 (method git-fetch)
1427 (uri (git-reference
1428 (url "https://github.com/podman-container-tools/container-libs")
1429 (commit (go-version->git-ref version #:subdir "image"))))
1430 (file-name (git-file-name name version))
1431 (sha256
1432 (base32 "17qjzgc3h89sa0y8qkviz5gry1kvkkm3j79yhn78c7gbmqcx5v0j"))
1433 (modules '((guix build utils)))
1434 (snippet
1435 #~(begin
1436 (delete-all-but "." "image")
1437 ;; This is a workaround to provide a correct import-path.
1438 (rename-file "image" "tmp")
1439 (mkdir-p "image/v5")
1440 (copy-recursively "tmp" "image/v5")
1441 (delete-file-recursively "tmp")))))
1442 (build-system go-build-system)
1443 (arguments
1444 (list
1445 #:skip-build? #t
1446 #:import-path "go.podman.io/image/v5"
1447 #:unpack-path "go.podman.io"
1448 #:embed-files
1449 #~(list "^VERSION$"
1450 ;; For go-github-com-santhosh-tekuri-jsonschema-v6:
1451 "applicator"
1452 "content"
1453 "core"
1454 "format"
1455 "format-annotation"
1456 "format-assertion"
1457 "meta-data"
1458 "schema"
1459 "unevaluated"
1460 "validation")
1461 #:test-flags
1462 #~(list "-skip" (string-join
1463 ;; Tests try to access local directories: /usr/share,
1464 ;; /var/tmp; remote source https://quay.io/v2/,
1465 ;; https://registry.suse.com/auth.
1466 (list "TestComputeBlobInfo"
1467 "TestCreateBigFileTemp"
1468 "TestGPGSigningMechanismSign"
1469 "TestMkDirBigFileTemp"
1470 "TestReferenceNewImage"
1471 "TestReferenceNewImageSource"
1472 "TestReferencePolicyConfigurationNamespaces"
1473 "TestSetCredentialsInteroperability"
1474 "TestSetupCertificates"
1475 "TestSign"
1476 "TestSignDockerManifest"
1477 "TestSignDockerManifestWithPassphrase"
1478 "TestSimpleSignerSignImageManifest"
1479 "TestSourcePrepareLayerData")
1480 "|"))
1481 #:phases
1482 #~(modify-phases %standard-phases
1483 (add-before 'check 'set-HOME
1484 (lambda _
1485 (setenv "HOME" "/tmp"))))))
1486 (native-inputs
1487 (list btrfs-progs
1488 eudev
1489 gnupg
1490 go-github-com-stretchr-testify
1491 gpgme
1492 libassuan))
1493 (propagated-inputs
1494 (list go-dario-cat-mergo
1495 go-github-com-burntsushi-toml
1496 go-github-com-containers-libtrust
1497 go-github-com-containers-ocicrypt
1498 go-github-com-cyberphone-json-canonicalization
1499 go-github-com-distribution-reference
1500 go-github-com-docker-cli
1501 go-github-com-docker-distribution
1502 go-github-com-docker-docker
1503 go-github-com-docker-docker-credential-helpers
1504 go-github-com-docker-go-connections
1505 go-github-com-hashicorp-go-cleanhttp
1506 go-github-com-hashicorp-go-retryablehttp
1507 go-github-com-klauspost-compress
1508 go-github-com-klauspost-pgzip
1509 go-github-com-manifoldco-promptui
1510 go-github-com-mattn-go-sqlite3
1511 go-github-com-opencontainers-go-digest
1512 go-github-com-opencontainers-image-spec
1513 go-github-com-proglottis-gpgme
1514 go-github-com-santhosh-tekuri-jsonschema-v6
1515 go-github-com-secure-systems-lab-go-securesystemslib
1516 go-github-com-sigstore-fulcio
1517 go-github-com-sigstore-sigstore
1518 go-github-com-sirupsen-logrus
1519 go-github-com-sylabs-sif-v2
1520 go-github-com-ulikunitz-xz
1521 go-github-com-vbauerster-mpb-v8
1522 go-go-etcd-io-bbolt
1523 go-go-podman-io-storage
1524 go-golang-org-x-crypto
1525 go-golang-org-x-oauth2
1526 go-golang-org-x-sync
1527 go-golang-org-x-term
1528 go-gopkg-in-yaml-v3))
1529 (home-page "https://go.podman.io")
1530 (synopsis "Go library to work in various way with containers' images")
1531 (description
1532 "@code{image} is a set of Go libraries aimed at working in various way
1533with containers' images and container image registries. The
1534@code{containers/image} library allows application to pull and push images
1535from container image registries, like the docker.io and quay.io registries. It
1536also implements \"simple image signing\". It's a successor of
1537@url{https://github.com/containers/image} project.")
1538 (license license:asl2.0)))
1539
1540(define-public go-go-podman-io-storage
1541 (package
1542 (name "go-go-podman-io-storage")
1543 (version "1.62.0")
1544 (source
1545 (origin
1546 (method git-fetch)
1547 (uri (git-reference
1548 (url "https://github.com/podman-container-tools/container-libs")
1549 (commit (go-version->git-ref version #:subdir "storage"))))
1550 (file-name (git-file-name name version))
1551 (sha256
1552 (base32 "0ywj80wkpyq2yhizsdlfh0n2fxip75042rsk7jm4vyp98bb18rb6"))
1553 (modules '((guix build utils)))
1554 (snippet #~(delete-all-but "." "storage"))))
1555 (build-system go-build-system)
1556 (arguments
1557 (list
1558 #:import-path "go.podman.io/storage"
1559 #:unpack-path "go.podman.io"
1560 #:test-flags
1561 #~(list "-skip" (string-join
1562 ;; Root access is required.
1563 (list "TestAttachLoopbackDeviceRace"
1564 "TestChangesWithChangesGH13590"
1565 "TestChroot.*"
1566 "TestCopyDir"
1567 "TestCopyWithTarInexistentDestWillCreateIt"
1568 "TestEnsureRemoveAllWithMount"
1569 "TestLookupAdditionalLayerDecodeError"
1570 "TestLookupAdditionalLayerSuccess"
1571 "TestMkdir.*"
1572 "TestReplaceFileTarWrapper"
1573 "TestStoreDelete"
1574 "TestStoreMultiList"
1575 "TestSupportsShifting"
1576 "TestTarUntarWithXattr"
1577 "TestTarWithBlockCharFifo"
1578 "TestTarWithMaliciousSymlinks"
1579 "TestUnshareOOMScoreAdj"
1580 "TestUntarHardlinkToSymlink"
1581 "TestUntarPath"
1582 "TestUntarWithMaliciousSymlinks"
1583 "TestVfs.*")
1584 "|"))))
1585 (native-inputs
1586 (list go-github-com-stretchr-testify))
1587 (inputs
1588 (list btrfs-progs))
1589 (propagated-inputs
1590 (list go-github-com-burntsushi-toml
1591 go-github-com-containerd-stargz-snapshotter-estargz
1592 go-github-com-cyphar-filepath-securejoin-0.4.1
1593 go-github-com-docker-go-units
1594 go-github-com-google-go-intervals
1595 go-github-com-json-iterator-go
1596 go-github-com-klauspost-compress
1597 go-github-com-klauspost-pgzip
1598 go-github-com-mattn-go-shellwords
1599 go-github-com-mistifyio-go-zfs-v3
1600 go-github-com-moby-sys-capability
1601 go-github-com-moby-sys-mountinfo
1602 go-github-com-moby-sys-user
1603 go-github-com-opencontainers-go-digest
1604 go-github-com-opencontainers-runtime-spec
1605 go-github-com-opencontainers-selinux
1606 go-github-com-sirupsen-logrus
1607 go-github-com-tchap-go-patricia-v2
1608 go-github-com-ulikunitz-xz
1609 go-github-com-vbatts-tar-split
1610 go-golang-org-x-sync
1611 go-golang-org-x-sys
1612 go-gotest-tools-v3))
1613 (home-page "https://go.podman.io")
1614 (synopsis "Manage layer/image/container storage")
1615 (description
1616 "@code{storage} is a Go library which aims to provide methods for storing
1617filesystem layers, container images, and containers.")
1618 (license license:asl2.0)))
1619
1620(define-public python-docker
1621 (package
1622 (name "python-docker")
1623 (version "7.1.0")
1624 (source
1625 (origin
1626 (method git-fetch)
1627 (uri (git-reference
1628 (url "https://github.com/docker/docker-py")
1629 (commit version)))
1630 (file-name (git-file-name name version))
1631 (sha256
1632 (base32 "1dd4p0xfv6vja4mgzwn2yfyna7vi7bc1pr5f59jg9yd4nxj96kmj"))))
1633 (build-system pyproject-build-system)
1634 (arguments
1635 (list
1636 ;; Integration tests need a running Docker daemon.
1637 #:test-flags #~(list "--ignore" "tests/integration")))
1638 (native-inputs (list python-hatch-vcs python-hatchling python-pytest))
1639 (inputs
1640 (list python-requests python-urllib3))
1641 (propagated-inputs
1642 (list python-paramiko ;adds SSH support
1643 python-websocket-client))
1644 (home-page "https://github.com/docker/docker-py/")
1645 (synopsis "Python client for Docker")
1646 (description "Docker-Py is a Python client for the Docker container
1647management tool.")
1648 (license license:asl2.0)))
1649
1650(define-public python-docker-pycreds
1651 (package
1652 (name "python-docker-pycreds")
1653 (version "0.4.0")
1654 (source
1655 (origin
1656 (method url-fetch)
1657 (uri (pypi-uri "docker-pycreds" version))
1658 (sha256
1659 (base32
1660 "1m44smrggnqghxkqfl7vhapdw89m1p3vdr177r6cq17lr85jgqvc"))))
1661 (build-system pyproject-build-system)
1662 (arguments
1663 (list ; XXX: These tests require docker credentials to run.
1664 #:test-flags '(list "--ignore=tests/store_test.py")))
1665 (native-inputs
1666 (list python-pytest python-setuptools python-wheel))
1667 (propagated-inputs
1668 (list python-six))
1669 (home-page "https://github.com/shin-/dockerpy-creds")
1670 (synopsis
1671 "Python bindings for the Docker credentials store API")
1672 (description
1673 "Docker-Pycreds contains the Python bindings for the docker credentials
1674store API. It allows programmers to interact with a Docker registry using
1675Python without keeping their credentials in a Docker configuration file.")
1676 (license license:asl2.0)))
1677
1678;; Needed for old v1 of docker-compose; remove once Docker is updated to a
1679;; more recent version which has the command "docker compose" built-in.
1680(define-public python-docker-5
1681 (package
1682 (inherit python-docker)
1683 (name "python-docker")
1684 (version "5.0.3")
1685 (source
1686 (origin
1687 (method git-fetch)
1688 (uri (git-reference
1689 (url "https://github.com/docker/docker-py")
1690 (commit version)))
1691 (file-name (git-file-name name version))
1692 (sha256
1693 (base32 "0m5ifgxdhcf7yci0ncgnxjas879sksrf3im0fahs573g268farz9"))))
1694 (build-system pyproject-build-system)
1695 ;; Integration tests need a running Docker daemon.
1696 (arguments (list #:tests? #f))
1697 (native-inputs (list python-setuptools))
1698 (inputs (modify-inputs inputs
1699 (prepend python-six)
1700 (delete "python-urllib3")))
1701 (propagated-inputs
1702 (modify-inputs propagated-inputs
1703 (prepend python-docker-pycreds python-urllib3-1.26)))))
1704
1705;; Needed for old v1 of docker-compose; remove once Docker is updated to a
1706;; more recent version which has the command "docker compose" built-in, see:
1707;; <https://codeberg.org/guix/guix/milestone/30347>.
1708(define-public python-dockerpty
1709 (package
1710 (name "python-dockerpty")
1711 (version "0.4.1")
1712 (source
1713 (origin
1714 (method url-fetch)
1715 (uri (pypi-uri "dockerpty" version))
1716 (sha256
1717 (base32
1718 "1kjn64wx23jmr8dcc6g7bwlmrhfmxr77gh6iphqsl39sayfxdab9"))))
1719 (build-system pyproject-build-system)
1720 (arguments
1721 (list #:tests? #f)) ; XXX: Requires outdated python-expects
1722 (native-inputs
1723 (list python-setuptools python-six))
1724 (home-page "https://github.com/d11wtq/dockerpty")
1725 (synopsis "Python library to use the pseudo-TTY of a Docker container")
1726 (description "Docker PTY provides the functionality needed to operate the
1727pseudo-terminal (PTY) allocated to a Docker container using the Python
1728client.")
1729 (license license:asl2.0)))
1730
1731(define-public python-udocker
1732 (package
1733 (name "python-udocker")
1734 (version "1.3.17")
1735 (source
1736 (origin
1737 (method git-fetch)
1738 (uri (git-reference
1739 (url "https://github.com/indigo-dc/udocker")
1740 (commit version)))
1741 (file-name (git-file-name name version))
1742 (sha256
1743 (base32 "1nbsj3kwlnkr12ykl1xd0r2hykikhrs0z9wgfb26y2nxpf85z3rz"))))
1744 (build-system pyproject-build-system)
1745 ;; Daemon chroot inconsistencies.
1746 (arguments (list #:test-flags #~(list "-k" "not test_05__get_volume_bindings")))
1747 (native-inputs (list python-pytest python-setuptools))
1748 (home-page "https://github.com/indigo-dc/udocker")
1749 (synopsis "Execute simple docker containers without root privileges")
1750 (description
1751 "This package provides a basic user tool to execute simple docker containers in
1752batch or interactive systems without root privileges.")
1753 (license license:asl2.0)))
1754
1755;;;
1756;;; Executables:
1757;;;
1758
1759;; Note - when changing Docker versions it is important to update the versions
1760;; of several associated packages (docker-libnetwork and go-sctp).
1761(define %docker-version "20.10.27")
1762
1763(define-public buildah
1764 (package
1765 (name "buildah")
1766 (version "1.44.1")
1767 (source
1768 (origin
1769 (method git-fetch)
1770 (uri (git-reference
1771 (url "https://github.com/containers/buildah")
1772 (commit (string-append "v" version))))
1773 (sha256
1774 (base32 "0ivy7i0pqzhpsnd38l9favi32vgm0xcsn5bg4cxxqg6yzgw0fshh"))
1775 (file-name (git-file-name name version))))
1776 (build-system gnu-build-system)
1777 (arguments
1778 (list
1779 #:make-flags
1780 #~(list (string-append "CC=" #$(cc-for-target))
1781 (string-append "PREFIX=" #$output)
1782 (string-append "GOMD2MAN=" #$go-md2man "/bin/go-md2man"))
1783 #:tests? #f ; /sys/fs/cgroup not set up in guix sandbox
1784 #:test-target "test-unit"
1785 #:phases
1786 #~(modify-phases %standard-phases
1787 (delete 'configure)
1788 (add-after 'unpack 'set-env
1789 (lambda _
1790 ;; When running go, things fail because HOME=/homeless-shelter.
1791 (setenv "HOME" "/tmp")))
1792 ;; Add -trimpath to build flags to avoid keeping references to go
1793 ;; packages.
1794 (add-after 'set-env 'patch-buildflags
1795 (lambda _
1796 (substitute* "Makefile"
1797 (("BUILDFLAGS :=") "BUILDFLAGS := -trimpath "))))
1798 (replace 'check
1799 (lambda* (#:key tests? #:allow-other-keys)
1800 (when tests?
1801 (invoke "make" "test-unit")
1802 (invoke "make" "test-conformance")
1803 (invoke "make" "test-integration"))))
1804 (add-after 'install 'symlink-helpers
1805 (lambda _
1806 (mkdir-p (string-append #$output "/_guix"))
1807 (for-each
1808 (lambda (what)
1809 (symlink (string-append (car what) "/bin/" (cdr what))
1810 (string-append #$output "/_guix/" (cdr what))))
1811 ;; Only tools that cannot be discovered via $PATH are
1812 ;; symlinked. Rest is handled in the 'wrap-buildah phase.
1813 `((#$aardvark-dns . "aardvark-dns")
1814 (#$netavark . "netavark")))))
1815 (add-after 'install 'wrap-buildah
1816 (lambda _
1817 (wrap-program (string-append #$output "/bin/buildah")
1818 `("CONTAINERS_HELPER_BINARY_DIR" =
1819 (,(string-append #$output "/_guix")))
1820 `("PATH" suffix
1821 (,(string-append #$crun "/bin")
1822 ,(string-append #$gcc "/bin") ; cpp
1823 ,(string-append #$passt "/bin")
1824 "/run/privileged/bin")))))
1825 (add-after 'install 'install-completions
1826 (lambda _
1827 (invoke "make" "install.completions"
1828 (string-append "PREFIX=" #$output)))))))
1829 (inputs (list bash-minimal
1830 btrfs-progs
1831 eudev
1832 glib
1833 gpgme
1834 libassuan
1835 libseccomp
1836 lvm2))
1837 (native-inputs
1838 (list bats
1839 go
1840 go-md2man
1841 pkg-config))
1842 (synopsis "Build @acronym{OCI, Open Container Initiative} images")
1843 (description
1844 "Buildah is a command-line tool to build @acronym{OCI, Open Container
1845Initiative} container images. More generally, it can be used to:
1846
1847@itemize
1848@item
1849create a working container, either from scratch or using an image as a
1850starting point;
1851@item
1852create an image, either from a working container or via the instructions
1853in a @file{Dockerfile};
1854@item
1855mount a working container's root filesystem for manipulation;
1856@item
1857use the updated contents of a container's root filesystem as a filesystem
1858layer to create a new image.
1859@end itemize")
1860 (home-page "https://buildah.io")
1861 (license license:asl2.0)))
1862
1863(define-public catatonit
1864 (package
1865 (name "catatonit")
1866 (version "0.2.1")
1867 (source
1868 (origin
1869 (method git-fetch)
1870 (uri (git-reference
1871 (url "https://github.com/openSUSE/catatonit/")
1872 (commit (string-append "v" version))))
1873 (file-name (git-file-name name version))
1874 (sha256
1875 (base32 "14vh0xpg6lzmh7r52vi9w1qfc14r7cfhfrbca7q5fg62d3hx7kxi"))))
1876 (build-system gnu-build-system)
1877 (native-inputs
1878 (list autoconf automake libtool))
1879 (home-page "https://github.com/openSUSE/catatonit")
1880 (synopsis "Container init")
1881 (description
1882 "Catatonit is a simple container init tool developed as a rewrite of
1883@url{https://github.com/cyphar/initrs, initrs} in C due to the need for static
1884compilation of Rust binaries with @code{musl}. Inspired by other container
1885inits like @url{https://github.com/krallin/tini, tini} and
1886@url{https://github.com/Yelp/dumb-init, dumb-init}, catatonit focuses on
1887correct signal handling, utilizing @code{signalfd(2)} for improved stability.
1888Its main purpose is to support the key usage by @code{docker-init}:
1889@code{/dev/init} – <your program>, with minimal additional features planned.")
1890 (license license:gpl2+)))
1891
1892(define-public checkpointctl
1893 (package/inherit go-github-com-checkpoint-restore-checkpointctl
1894 (name "checkpointctl")
1895 (arguments
1896 (substitute-keyword-arguments
1897 (package-arguments go-github-com-checkpoint-restore-checkpointctl)
1898 ((#:build-flags _) #~(list (string-append "-X main.version="
1899 #$version)))
1900 ((#:install-source? _ #t) #f)
1901 ((#:skip-build? _ #t) #f)
1902 ((#:tests? _ #t) #f)))
1903 (native-inputs
1904 (append
1905 (package-native-inputs go-github-com-checkpoint-restore-checkpointctl)
1906 (package-propagated-inputs go-github-com-checkpoint-restore-checkpointctl)))
1907 (propagated-inputs '())
1908 (inputs '())
1909 (description
1910 "This package provides a tool to read and manipulate checkpoint archives
1911as created by Podman, CRI-O and containerd.")))
1912
1913(define-public cni-plugins
1914 (package
1915 (name "cni-plugins")
1916 (version "1.9.1")
1917 (source
1918 (origin
1919 (method git-fetch)
1920 (uri (git-reference
1921 (url "https://github.com/containernetworking/plugins")
1922 (commit (string-append "v" version))))
1923 (file-name (git-file-name name version))
1924 (sha256
1925 (base32 "12z6w2jk6xgfiwdxys7skpkxldz1cgaa7scgfcr90lsghay59s6w"))
1926 (snippet
1927 #~(begin (use-modules (guix build utils))
1928 (delete-file-recursively "vendor")))))
1929 (build-system go-build-system)
1930 (arguments
1931 (list
1932 #:install-source? #f
1933 ;; XXX: Tests require root access, see test_linux.sh.
1934 #:tests? #f
1935 #:import-path "github.com/containernetworking/plugins/plugins/..."
1936 #:unpack-path "github.com/containernetworking/plugins"))
1937 (native-inputs
1938 (list go-github-com-alexflint-go-filemutex
1939 go-github-com-buger-jsonparser
1940 go-github-com-containernetworking-cni
1941 go-github-com-coreos-go-iptables
1942 go-github-com-coreos-go-systemd-v22
1943 go-github-com-godbus-dbus-v5
1944 go-github-com-insomniacslk-dhcp
1945 go-github-com-mattn-go-shellwords
1946 ;; go-github-com-microsoft-hcsshim
1947 go-github-com-networkplumbing-go-nft
1948 go-github-com-onsi-ginkgo-v2
1949 go-github-com-onsi-gomega
1950 go-github-com-opencontainers-selinux
1951 go-github-com-pkg-errors
1952 go-github-com-safchain-ethtool
1953 go-github-com-vishvananda-netlink
1954 go-github-com-vishvananda-netns
1955 go-golang-org-x-sys
1956 go-sigs-k8s-io-knftables
1957 util-linux))
1958 (home-page "https://github.com/containernetworking/plugins")
1959 (synopsis "Container Network Interface (CNI) network plugins")
1960 (description
1961 "This package provides Container Network Interface (CNI) plugins to
1962configure network interfaces in Linux containers.")
1963 (license license:asl2.0)))
1964
1965(define-public conmon
1966 (package
1967 (name "conmon")
1968 (version "2.2.1")
1969 (source
1970 (origin
1971 (method git-fetch)
1972 (uri (git-reference
1973 (url "https://github.com/containers/conmon")
1974 (commit (string-append "v" version))))
1975 (sha256
1976 (base32 "0n9l6030ibhk7pmsq85rarcf9b0kzglxibd1xnb6vzmkz3ywg1il"))
1977 (file-name (git-file-name name version))))
1978 (build-system gnu-build-system)
1979 (arguments
1980 (list #:make-flags
1981 #~(list (string-append "CC=" #$(cc-for-target))
1982 (string-append "PREFIX=" #$output))
1983 #:test-target "test"
1984 #:phases
1985 #~(modify-phases %standard-phases
1986 (delete 'configure)
1987 (add-before 'check 'prepare-tests
1988 (lambda* (#:key inputs #:allow-other-keys)
1989 (setenv "RUNTIME_BINARY"
1990 (search-input-file inputs "sbin/runc"))
1991
1992 ;; We need to skip all tests requiring journald.
1993 (for-each
1994 (lambda (test file)
1995 (substitute* file
1996 (((string-append "@test \"" test "\" \\{\n$") all)
1997 (string-append all "skip 'no journald in Guix';"))))
1998 '("log driver as journald should pass"
1999 "log driver as journald with short cid should fail"
2000 "multiple log drivers should pass"
2001 "log management: should work with multiple log drivers")
2002 '("test/01-basic.bats"
2003 "test/01-basic.bats"
2004 "test/01-basic.bats"
2005 "test/06-log-management.bats")))))))
2006 (inputs
2007 (list crun
2008 glib
2009 libseccomp))
2010 (native-inputs
2011 (list bats
2012 git
2013 go-md2man
2014 pkg-config
2015 socat
2016 runc))
2017 (home-page "https://github.com/containers/conmon")
2018 (synopsis "Monitoring tool for Open Container Initiative (OCI) runtime")
2019 (description
2020 "Conmon is a monitoring program and communication tool between a container
2021manager (like Podman or CRI-O) and an Open Container Initiative (OCI)
2022runtime (like runc or crun) for a single container.")
2023 (license license:asl2.0)))
2024
2025(define-public containerd
2026 (package
2027 (name "containerd")
2028 (version "1.6.22")
2029 (source
2030 (origin
2031 (method git-fetch)
2032 (uri (git-reference
2033 (url "https://github.com/containerd/containerd")
2034 (commit (string-append "v" version))))
2035 (file-name (git-file-name name version))
2036 (sha256
2037 (base32 "1m31y00sq2m76m1jiq4znws8gxbgkh5adklvqibxiz1b96vvwjk8"))
2038 (patches
2039 (search-patches "containerd-create-pid-file.patch"
2040 "containerd-fix-includes.patch"))))
2041 (build-system go-build-system)
2042 (arguments
2043 (let ((make-flags #~(list (string-append "VERSION=" #$version)
2044 (string-append "DESTDIR=" #$output)
2045 "PREFIX="
2046 "REVISION=0")))
2047 (list
2048 #:import-path "github.com/containerd/containerd"
2049 ;; XXX: This package contains full vendor, tests fail when run with
2050 ;; "...", limit to the project's root. Try to unvendor.
2051 #:test-subdirs #~(list ".")
2052 #:phases
2053 #~(modify-phases %standard-phases
2054 (add-after 'unpack 'patch-paths
2055 (lambda* (#:key inputs import-path outputs #:allow-other-keys)
2056 (with-directory-excursion (string-append "src/" import-path)
2057 (substitute* "runtime/v1/linux/runtime.go"
2058 (("defaultRuntime[ \t]*=.*")
2059 (string-append "defaultRuntime = \""
2060 (search-input-file inputs "/sbin/runc")
2061 "\"\n"))
2062 (("defaultShim[ \t]*=.*")
2063 (string-append "defaultShim = \""
2064 (assoc-ref outputs "out")
2065 "/bin/containerd-shim\"\n")))
2066 (substitute* "pkg/cri/config/config_unix.go"
2067 (("DefaultRuntimeName: \"runc\"")
2068 (string-append "DefaultRuntimeName: \""
2069 (search-input-file inputs "/sbin/runc")
2070 "\""))
2071 ;; ContainerdConfig.Runtimes
2072 (("\"runc\":")
2073 (string-append "\""
2074 (search-input-file inputs "/sbin/runc")
2075 "\":")))
2076 (substitute* "vendor/github.com/containerd/go-runc/runc.go"
2077 (("DefaultCommand[ \t]*=.*")
2078 (string-append "DefaultCommand = \""
2079 (search-input-file inputs "/sbin/runc")
2080 "\"\n")))
2081 (substitute* "vendor/github.com/containerd/continuity/testutil\
2082/loopback/loopback_linux.go"
2083 (("exec\\.Command\\(\"losetup\"")
2084 (string-append "exec.Command(\""
2085 (search-input-file inputs "/sbin/losetup")
2086 "\"")))
2087 (substitute* "archive/compression/compression.go"
2088 (("exec\\.LookPath\\(\"unpigz\"\\)")
2089 (string-append "\""
2090 (search-input-file inputs "/bin/unpigz")
2091 "\", error(nil)"))))))
2092 (replace 'build
2093 (lambda* (#:key import-path #:allow-other-keys)
2094 (with-directory-excursion (string-append "src/" import-path)
2095 (apply invoke "make" #$make-flags))))
2096 (replace 'install
2097 (lambda* (#:key import-path #:allow-other-keys)
2098 (with-directory-excursion (string-append "src/" import-path)
2099 (apply invoke "make" "install" #$make-flags))))))))
2100 (inputs
2101 (list btrfs-progs libseccomp pigz runc util-linux))
2102 (native-inputs
2103 (list go pkg-config))
2104 (synopsis "Docker container runtime")
2105 (description "This package provides the container daemon for Docker.
2106It includes image transfer and storage, container execution and supervision,
2107network attachments.")
2108 (home-page "https://containerd.io/")
2109 (license license:asl2.0)))
2110
2111(define-public cqfd
2112 (package
2113 (name "cqfd")
2114 (version "5.6.0")
2115 (source (origin
2116 (method git-fetch)
2117 (uri (git-reference
2118 (url "https://github.com/savoirfairelinux/cqfd")
2119 (commit (string-append "v" version))))
2120 (file-name (git-file-name name version))
2121 (sha256
2122 (base32
2123 "1p0093hx2ryxng2l53cqaca8g7gw888ydq2i328raip62pcdrccp"))))
2124 (build-system gnu-build-system)
2125 (arguments
2126 ;; The test suite requires a docker daemon and connectivity.
2127 (list
2128 #:tests? #f
2129 #:make-flags #~(list (string-append "COMPLETIONSDIR="
2130 #$output "/etc/bash_completion.d")
2131 (string-append "PREFIX=" #$output))
2132 #:phases #~(modify-phases %standard-phases
2133 (delete 'configure)
2134 (delete 'build))))
2135 (home-page "https://github.com/savoirfairelinux/cqfd")
2136 (synopsis "Convenience wrapper for Docker")
2137 (description "cqfd is a Bash script that provides a quick and convenient
2138way to run commands in the current directory, but within a Docker container
2139defined in a per-project configuration file.")
2140 (license license:gpl3+)))
2141
2142(define-public crun
2143 (package
2144 (name "crun")
2145 (version "1.30.1")
2146 (source
2147 (origin
2148 (method git-fetch)
2149 (uri (git-reference
2150 (url "https://github.com/containers/crun")
2151 (commit version)
2152 (recursive? #t)))
2153 (sha256
2154 (base32
2155 "0xcplka3n3blj7yycdxc0v9231fbcpbhn2kx9vdysa5p13bv1hvh"))
2156 (file-name (git-file-name name version))))
2157 (build-system gnu-build-system)
2158 (arguments
2159 (list
2160 #:configure-flags #~(list "--disable-systemd")
2161 #:tests? #f ; XXX: needs /sys/fs/cgroup mounted
2162 #:phases
2163 #~(modify-phases %standard-phases
2164 (add-after 'unpack 'git-version-h
2165 (lambda _
2166 (call-with-output-file "git-version.h"
2167 (lambda (port)
2168 (format
2169 port
2170 "#ifndef GIT_VERSION\n# define GIT_VERSION ~s\n#endif"
2171 #$version)))))
2172 (add-after 'unpack 'fix-tests
2173 (lambda _
2174 (substitute* (find-files "tests" "\\.(c|py)")
2175 (("/bin/true") (which "true"))
2176 (("/bin/false") (which "false"))
2177 ;; relies on sd_notify which requires systemd?
2178 (("\"sd-notify\" : test_sd_notify,") "")
2179 (("\"sd-notify-file\" : test_sd_notify_file,") "")))))))
2180 (inputs
2181 (list json-c
2182 libcap
2183 libseccomp
2184 yajl))
2185 (native-inputs
2186 (list automake
2187 autoconf
2188 git-minimal/pinned
2189 libtool
2190 pkg-config
2191 python-minimal-wrapper))
2192 (home-page "https://github.com/containers/crun")
2193 (synopsis "Open Container Initiative (OCI) Container runtime")
2194 (description
2195 "crun is a fast and low-memory footprint Open Container Initiative (OCI)
2196Container Runtime fully written in C.")
2197 (license license:gpl2+)))
2198
2199(define-public distrobox
2200 (package
2201 (name "distrobox")
2202 (version "1.8.2.4")
2203 (source
2204 (origin
2205 (method git-fetch)
2206 (uri (git-reference
2207 (url "https://github.com/89luca89/distrobox")
2208 (commit version)))
2209 (sha256
2210 (base32 "07kqgr5diwvkks3fn1r0nnpfqq6gngqyx4x7lxs06ri6g0a4knvf"))
2211 (file-name (git-file-name name version))))
2212 (build-system copy-build-system)
2213 (arguments
2214 (list #:phases
2215 #~(modify-phases %standard-phases
2216 ;; This script creates desktop files but when the store path for
2217 ;; distrobox changes it leaves the stale path on the desktop
2218 ;; file, so remove the path to use the profile's current
2219 ;; distrobox.
2220 (add-after 'unpack 'patch-distrobox-generate-entry
2221 (lambda _
2222 (substitute* "distrobox-generate-entry"
2223 (("\\$\\{distrobox_path\\}/distrobox") "distrobox"))))
2224 ;; Use WRAP-SCRIPT to wrap all of the scripts of distrobox,
2225 ;; excluding the host side ones.
2226 (add-after 'install 'wrap-scripts
2227 (lambda _
2228 (let ((path (search-path-as-list
2229 (list "bin")
2230 (list #$(this-package-input "podman")
2231 #$(this-package-input "wget")))))
2232 (for-each (lambda (script)
2233 (wrap-script
2234 (string-append #$output "/bin/distrobox-"
2235 script)
2236 `("PATH" ":" prefix ,path)))
2237 '("assemble"
2238 "create"
2239 "enter"
2240 "ephemeral"
2241 "generate-entry"
2242 "list"
2243 "rm"
2244 "stop"
2245 "upgrade")))))
2246 ;; These scripts are used in the container side and the
2247 ;; /gnu/store path is not shared with the containers.
2248 (add-after 'patch-shebangs 'unpatch-shebangs
2249 (lambda _
2250 (for-each (lambda (script)
2251 (substitute*
2252 (string-append #$output "/bin/distrobox-"
2253 script)
2254 (("#!.*/bin/sh") "#!/bin/sh\n")))
2255 '("export" "host-exec" "init"))))
2256 (replace 'install
2257 (lambda _
2258 (invoke "./install" "--prefix" #$output))))))
2259 (inputs
2260 (list guile-3.0 ; for wrap-script
2261 podman
2262 wget))
2263 (home-page "https://distrobox.it")
2264 (synopsis "Create and start containers highly integrated with the hosts")
2265 (description
2266 "Distrobox is a fancy wrapper around Podman or Docker to create and start
2267containers highly integrated with the hosts.")
2268 (license license:gpl3)))
2269
2270(define-public dive
2271 (package
2272 (name "dive")
2273 (version "0.12.0") ;newer version needs docker/docker@28+
2274 (source
2275 (origin
2276 (method git-fetch)
2277 (uri (git-reference
2278 (url "https://github.com/wagoodman/dive")
2279 (commit (string-append "v" version))))
2280 (file-name (git-file-name name version))
2281 (sha256
2282 (base32 "0p60bq0lc820p7x3nq8kxc8cx646c0z7zxqc7vav77zc4qbm3r8a"))))
2283 (build-system go-build-system)
2284 (arguments
2285 (list
2286 #:install-source? #f
2287 #:build-flags
2288 #~(list (string-append "-ldflags=-X main.version=" #$version))
2289 #:import-path "github.com/wagoodman/dive"
2290 #:test-flags #~(list "-vet=off")))
2291 (native-inputs
2292 (list go-github-com-awesome-gocui-gocui
2293 go-github-com-awesome-gocui-keybinding
2294 go-github-com-cespare-xxhash
2295 go-github-com-docker-cli
2296 go-github-com-docker-docker
2297 go-github-com-dustin-go-humanize
2298 go-github-com-fatih-color
2299 go-github-com-google-uuid
2300 go-github-com-logrusorgru-aurora
2301 go-github-com-lunixbochs-vtclean
2302 go-github-com-mitchellh-go-homedir
2303 go-github-com-phayes-permbits
2304 go-github-com-sergi-go-diff
2305 go-github-com-sirupsen-logrus
2306 go-github-com-spf13-afero
2307 go-github-com-spf13-cobra
2308 go-github-com-spf13-viper
2309 go-golang-org-x-net))
2310 (home-page "https://github.com/wagoodman/dive")
2311 (synopsis "Tool for exploring each layer in a docker image")
2312 (description
2313 "This package provides a tool for exploring a Docker image, layer
2314contents, and discovering ways to shrink the size of Docker/OCI image.")
2315 (license license:expat)))
2316
2317;; TODO: Patch out modprobes for ip_vs, nf_conntrack,
2318;; brige, nf_conntrack_netlink, aufs.
2319(define-public docker
2320 (package
2321 (name "docker")
2322 (version %docker-version)
2323 (source
2324 (origin
2325 (method git-fetch)
2326 (uri (git-reference
2327 (url "https://github.com/moby/moby")
2328 (commit (string-append "v" version))))
2329 (file-name (git-file-name name version))
2330 (sha256
2331 (base32 "017frilx35w3m4dz3n6m2f293q4fq4jrk6hl8f7wg5xs3r8hswvq"))))
2332 (build-system gnu-build-system)
2333 (arguments
2334 (list
2335 #:modules
2336 '((guix build gnu-build-system)
2337 ((guix build go-build-system) #:prefix go:)
2338 (guix build union)
2339 (guix build utils))
2340 #:imported-modules
2341 `(,@%default-gnu-imported-modules
2342 (guix build union)
2343 (guix build go-build-system))
2344 #:phases
2345 #~(modify-phases %standard-phases
2346 (add-after 'unpack 'patch-paths
2347 (lambda* (#:key inputs #:allow-other-keys)
2348 (substitute* "builder/builder-next/executor_unix.go"
2349 (("CommandCandidates:.*runc.*")
2350 (string-append "CommandCandidates: []string{\""
2351 (search-input-file inputs "/sbin/runc")
2352 "\"},\n")))
2353 (substitute* "vendor/github.com/containerd/go-runc/runc.go"
2354 (("DefaultCommand = .*")
2355 (string-append "DefaultCommand = \""
2356 (search-input-file inputs "/sbin/runc")
2357 "\"\n")))
2358 (substitute* "vendor/github.com/containerd/containerd/\
2359runtime/v1/linux/runtime.go"
2360 (("defaultRuntime[ \t]*=.*")
2361 (string-append "defaultRuntime = \""
2362 (search-input-file inputs "/sbin/runc")
2363 "\"\n"))
2364 (("defaultShim[ \t]*=.*")
2365 (string-append "defaultShim = \""
2366 (search-input-file inputs "/bin/containerd-shim")
2367 "\"\n")))
2368 (substitute* "daemon/daemon_unix.go"
2369 (("DefaultShimBinary = .*")
2370 (string-append "DefaultShimBinary = \""
2371 (search-input-file inputs "/bin/containerd-shim")
2372 "\"\n"))
2373 (("DefaultRuntimeBinary = .*")
2374 (string-append "DefaultRuntimeBinary = \""
2375 (search-input-file inputs "/sbin/runc")
2376 "\"\n")))
2377 (substitute* "daemon/runtime_unix.go"
2378 (("defaultRuntimeName = .*")
2379 (string-append "defaultRuntimeName = \""
2380 (search-input-file inputs "/sbin/runc")
2381 "\"\n")))
2382 (substitute* "daemon/config/config.go"
2383 (("StockRuntimeName = .*")
2384 (string-append "StockRuntimeName = \""
2385 (search-input-file inputs "/sbin/runc")
2386 "\"\n"))
2387 (("DefaultInitBinary = .*")
2388 (string-append "DefaultInitBinary = \""
2389 (search-input-file inputs "/bin/tini-static")
2390 "\"\n")))
2391 (substitute* "daemon/config/config_common_unix_test.go"
2392 (("expectedInitPath: \"docker-init\"")
2393 (string-append "expectedInitPath: \""
2394 (search-input-file inputs "/bin/tini-static")
2395 "\"")))
2396 (substitute* "vendor/github.com/moby/buildkit/executor/\
2397runcexecutor/executor.go"
2398 (("var defaultCommandCandidates = .*")
2399 (string-append "var defaultCommandCandidates = []string{\""
2400 (search-input-file inputs "/sbin/runc") "\"}")))
2401 (substitute* "vendor/github.com/docker/libnetwork/portmapper/proxy.go"
2402 (("var userlandProxyCommandName = .*")
2403 (string-append "var userlandProxyCommandName = \""
2404 (search-input-file inputs "/bin/proxy")
2405 "\"\n")))
2406 (substitute* "pkg/archive/archive.go"
2407 (("string\\{\"xz")
2408 (string-append "string{\"" (search-input-file inputs "/bin/xz"))))
2409
2410 (let ((source-files (filter (lambda (name)
2411 (not (string-contains name "test")))
2412 (find-files "." "\\.go$"))))
2413 (let-syntax ((substitute-LookPath*
2414 (syntax-rules ()
2415 ((_ (source-text path) ...)
2416 (substitute* source-files
2417 (((string-append "\\<exec\\.LookPath\\(\""
2418 source-text
2419 "\")"))
2420 (string-append "\""
2421 (search-input-file inputs path)
2422 "\", error(nil)")) ...))))
2423 (substitute-Command*
2424 (syntax-rules ()
2425 ((_ (source-text path) ...)
2426 (substitute* source-files
2427 (((string-append "\\<(re)?exec\\.Command\\(\""
2428 source-text
2429 "\"") _ re?)
2430 (string-append (if re? re? "")
2431 "exec.Command(\""
2432 (search-input-file inputs path)
2433 "\"")) ...)))))
2434 (substitute-LookPath*
2435 ("containerd" "/bin/containerd")
2436 ("ps" "/bin/ps")
2437 ("mkfs.xfs" "/sbin/mkfs.xfs")
2438 ("lvmdiskscan" "/sbin/lvmdiskscan")
2439 ("pvdisplay" "/sbin/pvdisplay")
2440 ("blkid" "/sbin/blkid")
2441 ("unpigz" "/bin/unpigz")
2442 ("iptables" "/sbin/iptables")
2443 ("ip6tables" "/sbin/ip6tables")
2444 ("iptables-legacy" "/sbin/iptables")
2445 ("ip" "/sbin/ip"))
2446
2447 (substitute-Command*
2448 ("modprobe" "/bin/modprobe")
2449 ("pvcreate" "/sbin/pvcreate")
2450 ("vgcreate" "/sbin/vgcreate")
2451 ("lvcreate" "/sbin/lvcreate")
2452 ("lvconvert" "/sbin/lvconvert")
2453 ("lvchange" "/sbin/lvchange")
2454 ("mkfs.xfs" "/sbin/mkfs.xfs")
2455 ("xfs_growfs" "/sbin/xfs_growfs")
2456 ("mkfs.ext4" "/sbin/mkfs.ext4")
2457 ("tune2fs" "/sbin/tune2fs")
2458 ("blkid" "/sbin/blkid")
2459 ("resize2fs" "/sbin/resize2fs")
2460 ("ps" "/bin/ps")
2461 ("losetup" "/sbin/losetup")
2462 ("uname" "/bin/uname")
2463 ("dbus-launch" "/bin/dbus-launch")
2464 ("git" "/bin/git")))
2465 ;; docker-mountfrom ??
2466 ;; docker
2467 ;; docker-untar ??
2468 ;; docker-applyLayer ??
2469 ;; /usr/bin/uname
2470 ;; grep
2471 ;; apparmor_parser
2472
2473 ;; Make compilation fail when, in future versions, Docker
2474 ;; invokes other programs we don't know about and thus don't
2475 ;; substitute.
2476 (substitute* source-files
2477 ;; Search for Java in PATH.
2478 (("\\<exec\\.Command\\(\"java\"")
2479 "xxec.Command(\"java\"")
2480 ;; Search for AUFS in PATH (mainline Linux doesn't support it).
2481 (("\\<exec\\.Command\\(\"auplink\"")
2482 "xxec.Command(\"auplink\"")
2483 ;; Fail on other unsubstituted commands.
2484 (("\\<exec\\.Command\\(\"([a-zA-Z0-9][a-zA-Z0-9_-]*)\""
2485 _ executable)
2486 (string-append "exec.Guix_doesnt_want_Command(\""
2487 executable "\""))
2488 (("\\<xxec\\.Command")
2489 "exec.Command")
2490 ;; Search for ZFS in PATH.
2491 (("\\<LookPath\\(\"zfs\"\\)") "LooxPath(\"zfs\")")
2492 ;; Do not fail when buildkit-qemu-<target> isn't found.
2493 ;; FIXME: We might need to package buildkit and docker's
2494 ;; buildx plugin, to support qemu-based docker containers.
2495 (("\\<LookPath\\(\"buildkit-qemu-\"") "LooxPath(\"buildkit-qemu-\"")
2496 ;; Fail on other unsubstituted LookPaths.
2497 (("\\<LookPath\\(\"") "Guix_doesnt_want_LookPath\\(\"")
2498 (("\\<LooxPath") "LookPath")))))
2499 (add-after 'patch-paths 'delete-failing-tests
2500 (lambda _
2501 ;; Needs internet access.
2502 (delete-file "builder/remotecontext/git/gitutils_test.go")
2503 ;; Permission denied.
2504 (delete-file "daemon/graphdriver/devmapper/devmapper_test.go")
2505 ;; Operation not permitted (idtools.MkdirAllAndChown).
2506 (delete-file "daemon/graphdriver/vfs/vfs_test.go")
2507 ;; Timeouts after 5 min.
2508 (delete-file "plugin/manager_linux_test.go")
2509 ;; Operation not permitted.
2510 (delete-file "daemon/graphdriver/aufs/aufs_test.go")
2511 (delete-file "daemon/graphdriver/btrfs/btrfs_test.go")
2512 (delete-file "daemon/graphdriver/overlay/overlay_test.go")
2513 (delete-file "daemon/graphdriver/overlay2/overlay_test.go")
2514 (delete-file "pkg/chrootarchive/archive_unix_test.go")
2515 (delete-file "daemon/container_unix_test.go")
2516 ;; This file uses cgroups and /proc.
2517 (delete-file "pkg/sysinfo/sysinfo_linux_test.go")
2518 ;; This file uses cgroups.
2519 (delete-file "runconfig/config_test.go")
2520 ;; This file uses /var.
2521 (delete-file "daemon/oci_linux_test.go")
2522 ;; Signal tests fail in bizarre ways
2523 (delete-file "pkg/signal/signal_linux_test.go")))
2524 (replace 'configure
2525 (lambda _
2526 (setenv "DOCKER_BUILDTAGS" "seccomp")
2527 (setenv "DOCKER_GITCOMMIT" (string-append "v" #$%docker-version))
2528 (setenv "VERSION" (string-append #$%docker-version "-ce"))
2529 ;; Automatically use bundled dependencies.
2530 ;; TODO: Unbundle - see file "vendor.conf".
2531 (setenv "AUTO_GOPATH" "1")
2532 ;; Respectively, strip the symbol table and debug
2533 ;; information, and the DWARF symbol table.
2534 (setenv "LDFLAGS" "-s -w")
2535 ;; Make build faster
2536 (setenv "GOCACHE" "/tmp")))
2537 (add-before 'build 'setup-go-environment
2538 (assoc-ref go:%standard-phases 'setup-go-environment))
2539 (replace 'build
2540 (lambda _
2541 ;; Our LD doesn't like the statically linked relocatable things
2542 ;; that go produces, so install the dynamic version of
2543 ;; dockerd instead.
2544 (setenv "BUILDFLAGS" "-trimpath")
2545 (invoke "hack/make.sh" "dynbinary")))
2546 (replace 'check
2547 (lambda* (#:key tests? #:allow-other-keys)
2548 (when tests?
2549 ;; The build process generated a file because the environment
2550 ;; variable "AUTO_GOPATH" was set. Use it.
2551 (setenv "GOPATH" (string-append (getcwd) "/.gopath"))
2552 ;; ".gopath/src/github.com/docker/docker" is a link to the current
2553 ;; directory and chdir would canonicalize to that.
2554 ;; But go needs to have the uncanonicalized directory name, so
2555 ;; store that.
2556 (setenv "PWD" (string-append
2557 (getcwd) "/.gopath/src/github.com/docker/docker"))
2558 (with-directory-excursion ".gopath/src/github.com/docker/docker"
2559 (invoke "hack/test/unit"))
2560 (setenv "PWD" #f))))
2561 (replace 'install
2562 (lambda* (#:key outputs #:allow-other-keys)
2563 (let* ((out (assoc-ref outputs "out"))
2564 (out-bin (string-append out "/bin")))
2565 (install-file "bundles/dynbinary-daemon/dockerd" out-bin)
2566 (install-file (string-append "bundles/dynbinary-daemon/dockerd-"
2567 (getenv "VERSION"))
2568 out-bin)))))))
2569 (inputs
2570 (list btrfs-progs
2571 containerd ; for containerd-shim
2572 coreutils
2573 dbus
2574 docker-libnetwork-cmd-proxy
2575 e2fsprogs
2576 git
2577 iproute
2578 iptables
2579 kmod
2580 libseccomp
2581 pigz
2582 procps
2583 runc
2584 util-linux
2585 lvm2
2586 tini
2587 xfsprogs-5.9
2588 xz))
2589 (native-inputs
2590 (list eudev ; TODO: Should be propagated by lvm2 (.pc -> .pc)
2591 go-1.22 gotestsum pkg-config))
2592 (synopsis "Container component library and daemon")
2593 (description "This package provides a framework to assemble specialized
2594container systems. It includes components for orchestration, image
2595management, secret management, configuration management, networking,
2596provisioning etc.")
2597 (home-page "https://mobyproject.org/")
2598 (license license:asl2.0)))
2599
2600(define-public docker-cli
2601 (package
2602 (name "docker-cli")
2603 (version %docker-version)
2604 (source
2605 (origin
2606 (method git-fetch)
2607 (uri (git-reference
2608 (url "https://github.com/docker/cli")
2609 (commit (string-append "v" version))))
2610 (file-name (git-file-name name version))
2611 (sha256
2612 (base32 "0szwaxiasy77mm90wj2qg747zb9lyiqndg5halg7qbi41ng6ry0h"))))
2613 (build-system go-build-system)
2614 (arguments
2615 `(#:import-path "github.com/docker/cli"
2616 ;; TODO: Tests require a running Docker daemon.
2617 #:tests? #f
2618 #:phases
2619 (modify-phases %standard-phases
2620 (add-before 'build 'setup-environment-2
2621 (lambda _
2622 ;; Respectively, strip the symbol table and debug
2623 ;; information, and the DWARF symbol table.
2624 (setenv "LDFLAGS" "-s -w")
2625
2626 ;; Make sure "docker -v" prints a usable version string.
2627 (setenv "VERSION" ,%docker-version)
2628
2629 ;; Make build reproducible.
2630 (setenv "BUILDTIME" "1970-01-01 00:00:01.000000000+00:00")
2631 (symlink "src/github.com/docker/cli/scripts" "./scripts")
2632 (symlink "src/github.com/docker/cli/docker.Makefile" "./docker.Makefile")))
2633 (replace 'build
2634 (lambda _
2635 (setenv "GO_LINKMODE" "dynamic")
2636 (invoke "./scripts/build/binary")))
2637 (replace 'check
2638 (lambda* (#:key make-flags tests? #:allow-other-keys)
2639 (setenv "PATH" (string-append (getcwd) "/build:" (getenv "PATH")))
2640 (when tests?
2641 ;; Use the newly-built docker client for the tests.
2642 (with-directory-excursion "src/github.com/docker/cli"
2643 ;; TODO: Run test-e2e as well?
2644 (apply invoke "make" "-f" "docker.Makefile" "test-unit"
2645 (or make-flags '()))))))
2646 (replace 'install
2647 (lambda* (#:key outputs #:allow-other-keys)
2648 (let* ((out (assoc-ref outputs "out"))
2649 (out-bin (string-append out "/bin"))
2650 (etc (string-append out "/etc")))
2651 (with-directory-excursion "src/github.com/docker/cli/contrib/completion"
2652 (install-file "bash/docker"
2653 (string-append etc "/bash_completion.d"))
2654 (install-file "fish/docker.fish"
2655 (string-append etc "/fish/completions"))
2656 (install-file "zsh/_docker"
2657 (string-append etc "/zsh/site-functions")))
2658 (install-file "build/docker" out-bin)))))))
2659 (native-inputs
2660 (list go libltdl pkg-config))
2661 (synopsis "Command line interface to Docker")
2662 (description "This package provides a command line interface to Docker.")
2663 (home-page "https://www.docker.com/")
2664 (license license:asl2.0)))
2665
2666;;; TODO: This package needs to be updated to its 2.x series, now authored in
2667;;; Go.
2668(define-public docker-compose
2669 (package
2670 (name "docker-compose")
2671 (version "1.29.2")
2672 (source
2673 (origin
2674 (method url-fetch)
2675 (uri (pypi-uri "docker-compose" version))
2676 (sha256
2677 (base32
2678 "1dq9kfak61xx7chjrzmkvbw9mvj9008k7g8q7mwi4x133p9dk32c"))))
2679 (build-system pyproject-build-system)
2680 ;; TODO: Tests require running Docker daemon.
2681 (arguments
2682 (list
2683 #:tests? #f
2684 #:phases
2685 #~(modify-phases %standard-phases
2686 (add-after 'unpack 'fix-pyyaml
2687 (lambda _
2688 (substitute* "setup.py"
2689 ((", < 6")
2690 "")))))))
2691 (native-inputs (list python-setuptools))
2692 (inputs
2693 (list python-cached-property
2694 python-distro
2695 python-docker-5
2696 python-dockerpty
2697 python-docopt
2698 python-dotenv-0.13.0
2699 python-jsonschema-3
2700 python-pyyaml
2701 python-requests
2702 python-six
2703 python-texttable
2704 python-websocket-client-0.59))
2705 (home-page "https://www.docker.com/")
2706 (synopsis "Multi-container orchestration for Docker")
2707 (description "Docker Compose is a tool for defining and running
2708multi-container Docker applications. A Compose file is used to configure an
2709application’s services. Then, using a single command, the containers are
2710created and all the services are started as specified in the configuration.")
2711 (license license:asl2.0)))
2712
2713;;; Private package that shouldn't be used directly; its purposes is to be
2714;;; used as a template for the various packages it contains. It doesn't build
2715;;; anyway, as it needs many dependencies that aren't being satisfied.
2716(define docker-libnetwork
2717 ;; There are no recent release for libnetwork, so choose the last commit of
2718 ;; the branch that Docker uses, as can be seen in the 'vendor.conf' Docker
2719 ;; source file. NOTE - It is important that this version is kept in sync
2720 ;; with the version of Docker being used.
2721 (let ((commit "3797618f9a38372e8107d8c06f6ae199e1133ae8")
2722 (version (version-major+minor %docker-version))
2723 (revision "3"))
2724 (package
2725 (name "docker-libnetwork")
2726 (version (git-version version revision commit))
2727 (source (origin
2728 (method git-fetch)
2729 (uri (git-reference
2730 ;; Redirected from github.com/docker/libnetwork.
2731 (url "https://github.com/moby/libnetwork")
2732 (commit commit)))
2733 (file-name (git-file-name name version))
2734 (sha256
2735 (base32
2736 "1km3p6ya9az0ax2zww8wb5vbifr1gj5n9l82i273m9f3z9f2mq2p"))
2737 ;; Delete bundled ("vendored") free software source code.
2738 (modules '((guix build utils)))
2739 (snippet '(delete-file-recursively "vendor"))))
2740 (build-system go-build-system)
2741 (arguments
2742 `(#:import-path "github.com/moby/libnetwork/"))
2743 (home-page "https://github.com/moby/libnetwork/")
2744 (synopsis "Networking for containers")
2745 (description "Libnetwork provides a native Go implementation for
2746connecting containers. The goal of @code{libnetwork} is to deliver a robust
2747container network model that provides a consistent programming interface and
2748the required network abstractions for applications.")
2749 (license license:asl2.0))))
2750
2751(define-public docker-libnetwork-cmd-proxy
2752 (package
2753 (inherit docker-libnetwork)
2754 (name "docker-libnetwork-cmd-proxy")
2755 (arguments
2756 (list
2757 ;; The tests are unsupported on all architectures except x86_64-linux.
2758 #:tests? (and (not (%current-target-system)) (target-x86-64?))
2759 #:install-source? #f
2760 #:import-path "github.com/docker/libnetwork/cmd/proxy"
2761 #:unpack-path "github.com/docker/libnetwork"))
2762 (native-inputs
2763 (list go-github-com-sirupsen-logrus ; for tests.
2764 go-github-com-vishvananda-netlink
2765 go-github-com-vishvananda-netns
2766 go-golang-org-x-crypto
2767 go-golang-org-x-sys
2768 go-sctp))
2769 (synopsis "Docker user-space proxy")
2770 (description
2771 "This package provides a proxy running in the user space. It is used by
2772the built-in registry server of Docker.")
2773 (license license:asl2.0)))
2774
2775(define-public docker-policy-helper
2776 (package/inherit go-github-com-moby-policy-helpers
2777 (name "docker-policy-helper")
2778 (arguments
2779 (substitute-keyword-arguments arguments
2780 ((#:import-path _) "github.com/moby/policy-helpers/cmd/policy-helper")
2781 ((#:install-source? _ #t) #f)
2782 ((#:skip-build? _ #t) #f)
2783 ((#:tests? _ #t) #f)
2784 ((#:unpack-path _ "") "github.com/moby/policy-helpers")
2785 ((#:phases phases '%standard-phases)
2786 #~(modify-phases #$phases
2787 (add-after 'install 'fix-bin-name
2788 (lambda _
2789 (rename-file (string-append #$output "/bin/policy-helper")
2790 (string-append #$output "/bin/docker-policy-helper"))))))))
2791 (native-inputs (package-propagated-inputs go-github-com-moby-policy-helpers))
2792 (propagated-inputs '())
2793 (inputs '())))
2794
2795(define-public docker-registry
2796 (package
2797 (name "docker-registry")
2798 ;; XXX: The project ships a "vendor" directory containing all
2799 ;; dependencies, consider to review and package them. The Golang library
2800 ;; is packaged in (gnu packges golang-xyz) as
2801 ;; go-github-com-docker-distribution.
2802 (version "2.8.3")
2803 (source (origin
2804 (method git-fetch)
2805 (uri (git-reference
2806 (url "https://github.com/docker/distribution")
2807 (commit (string-append "v" version))))
2808 (file-name (git-file-name name version))
2809 (sha256
2810 (base32
2811 "0dbaxmkhg53anhkzngyzlxm2bd4dwv0sv75zip1rkm0874wjbxzb"))))
2812 (build-system go-build-system)
2813 (arguments
2814 (list
2815 #:import-path "github.com/docker/distribution"
2816 #:test-subdirs #~(list "configuration"
2817 "context"
2818 "health"
2819 "manifest"
2820 "notifications/..."
2821 "uuid")
2822 #:phases
2823 #~(modify-phases %standard-phases
2824 (add-after 'unpack 'chdir-to-src
2825 (lambda _ (chdir "src/github.com/docker/distribution")))
2826 (add-after 'chdir-to-src 'fix-versioning
2827 (lambda _
2828 ;; The Makefile use git to compute the version and the
2829 ;; revision. This requires the .git directory that we don't have
2830 ;; anymore in the unpacked source.
2831 (substitute* "Makefile"
2832 (("^VERSION=\\$\\(.*\\)")
2833 (string-append "VERSION=v" #$version))
2834 ;; The revision originally used the git hash with .m appended
2835 ;; if there was any local modifications.
2836 (("^REVISION=\\$\\(.*\\)") "REVISION=0"))))
2837 (replace 'build
2838 (lambda _
2839 (invoke "make" "binaries")))
2840 (replace 'install
2841 (lambda _
2842 (let ((bin (string-append #$output "/bin")))
2843 (mkdir-p bin)
2844 (for-each
2845 (lambda (file)
2846 (install-file (string-append "bin/" file) bin))
2847 '("digest"
2848 "registry"
2849 "registry-api-descriptor-template")))
2850 (let ((doc (string-append
2851 #$output "/share/doc/" #$name "-" #$version)))
2852 (mkdir-p doc)
2853 (for-each
2854 (lambda (file)
2855 (install-file file doc))
2856 '("BUILDING.md"
2857 "CONTRIBUTING.md"
2858 "LICENSE"
2859 "MAINTAINERS"
2860 "README.md"
2861 "ROADMAP.md"))
2862 (copy-recursively "docs/" (string-append doc "/docs")))
2863 (let ((examples
2864 (string-append
2865 #$output "/share/doc/" #$name "-" #$version
2866 "/registry-example-configs")))
2867 (mkdir-p examples)
2868 (for-each
2869 (lambda (file)
2870 (install-file (string-append "cmd/registry/" file) examples))
2871 '("config-cache.yml"
2872 "config-example.yml"
2873 "config-dev.yml")))))
2874 (delete 'install-license-files))))
2875 (home-page "https://github.com/docker/distribution")
2876 (synopsis "Docker registry server and associated tools")
2877 (description "The Docker registry server enable you to host your own
2878docker registry. With it, there is also two other utilities:
2879@itemize
2880@item The digest utility is a tool that generates checksums compatibles with
2881various docker manifest files.
2882@item The registry-api-descriptor-template is a tool for generating API
2883specifications from the docs/spec/api.md.tmpl file.
2884@end itemize")
2885 (license license:asl2.0)))
2886
2887(define-public guix-compose
2888 (package
2889 (name "guix-compose")
2890 (version "0.2.0")
2891 (source
2892 (origin
2893 (method git-fetch)
2894 (uri (git-reference
2895 (url "https://codeberg.org/fishinthecalculator/guix-compose")
2896 (commit version)))
2897 (file-name (git-file-name name version))
2898 (sha256
2899 (base32 "1dy48qkz3ifxagijpvwg7rmq7hz3pikhdcfral6djyc9ppmz8mbm"))))
2900 (build-system guile-build-system)
2901 (arguments
2902 (list
2903 #:source-directory "src"
2904 #:phases
2905 #~(modify-phases %standard-phases
2906 (add-after 'unpack 'set-load-paths-in-entry-point
2907 (lambda _
2908 (define load-path
2909 (cons (string-append #$output "/share/guile/site/3.0")
2910 (parse-path (getenv "GUILE_LOAD_PATH"))))
2911 (define load-compiled-path
2912 (cons (string-append #$output "/lib/guile/3.0/site-ccache")
2913 (parse-path (getenv "GUILE_LOAD_COMPILED_PATH"))))
2914 (define search-paths-header
2915 `(begin
2916 (set! %load-path
2917 (append (list ,@load-path) %load-path))
2918 (set! %load-compiled-path
2919 (append (list ,@load-compiled-path)
2920 %load-compiled-path))))
2921
2922 (substitute* "src/guix/extensions/compose.scm"
2923 ((";;@load-paths@")
2924 (with-output-to-string
2925 (lambda () (write search-paths-header)))))))
2926 (add-after 'build 'add-extension-to-search-path
2927 (lambda _
2928 (with-directory-excursion #$output
2929 (mkdir-p "share/guix/extensions")
2930 (symlink
2931 (string-append
2932 #$output "/share/guile/site/3.0/guix/extensions/compose.scm")
2933 "share/guix/extensions/compose.scm"))))
2934 (add-after 'add-extension-to-search-path 'check
2935 (lambda* (#:key tests? #:allow-other-keys)
2936 (when tests?
2937 (invoke
2938 "guile" "-L" "./modules" "-s" "tests/test-compose.scm")))))))
2939 (native-inputs (list guile-3.0))
2940 ;; Avoid setting propagated so that we use the user’s profile.
2941 (inputs (list guix guile-dotenv guile-yamlpp))
2942 (synopsis "Guix' docker compose compatibility layer")
2943 (description "A toolkit to run, read and write docker-compose.yml files with
2944Guix machinery.")
2945 (home-page "https://codeberg.org/fishinthecalculator/guix-compose")
2946 (license license:gpl3+)))
2947
2948(define-public gvisor-tap-vsock
2949 (package/inherit go-github-com-containers-gvisor-tap-vsock
2950 (name "gvisor-tap-vsock")
2951 (arguments
2952 (substitute-keyword-arguments arguments
2953 ((#:install-source? _ #t) #f)
2954 ((#:skip-build? _ #t) #f)
2955 ((#:tests? _ #t) #f)
2956 ((#:phases _ '%standard-phases)
2957 #~(modify-phases %standard-phases
2958 ;; Build binary outputs are taken from project's Makefile.
2959 (replace 'build
2960 (lambda arguments
2961 (for-each
2962 (lambda (cmd)
2963 (apply (assoc-ref %standard-phases 'build)
2964 `(,@arguments #:import-path ,cmd)))
2965 (list "github.com/containers/gvisor-tap-vsock/cmd/gvproxy"
2966 "github.com/containers/gvisor-tap-vsock/cmd/qemu-wrapper"
2967 "github.com/containers/gvisor-tap-vsock/cmd/vm"))))
2968 (add-after 'install 'fix-bin-name
2969 (lambda _
2970 (rename-file (string-append #$output "/bin/vm")
2971 (string-append #$output "/bin/gvforwarder"))))))))
2972 (native-inputs
2973 (package-propagated-inputs go-github-com-containers-gvisor-tap-vsock))
2974 (propagated-inputs '())
2975 (inputs '())))
2976
2977(define-public libslirp
2978 (package
2979 (name "libslirp")
2980 (version "4.9.4")
2981 (source
2982 (origin
2983 (method git-fetch)
2984 (uri (git-reference
2985 (url "https://gitlab.freedesktop.org/slirp/libslirp")
2986 (commit (string-append "v" version))))
2987 (sha256
2988 (base32 "19f1p37b4ybqbgk817g3sqhdvr1gl3d1063hj7zg1jqa301s2afw"))
2989 (file-name (git-file-name name version))))
2990 (build-system meson-build-system)
2991 (propagated-inputs
2992 ;; In Requires of slirp.pc.
2993 (list glib))
2994 (native-inputs
2995 (list pkg-config))
2996 (home-page "https://gitlab.freedesktop.org/slirp/libslirp")
2997 (synopsis "User-mode networking library")
2998 (description
2999 "libslirp is a user-mode networking library used by virtual machines,
3000containers or various tools.")
3001 (license license:bsd-3)))
3002
3003(define-public passt
3004 (package
3005 (name "passt")
3006 (version "2024_12_11.09478d5")
3007 (source
3008 (origin
3009 (method url-fetch)
3010 (uri (string-append "https://passt.top/passt/snapshot/passt-" version
3011 ".tar.gz"))
3012 (sha256
3013 (base32 "1arkir4784chw9x37174rc12cp353501m43p6iwvk5mqrlq02k90"))))
3014 (build-system gnu-build-system)
3015 (arguments
3016 (list
3017 #:make-flags
3018 #~(list (string-append "CC=" #$(cc-for-target))
3019 "RLIMIT_STACK_VAL=1024" ; ¯\_ (ツ)_/¯
3020 (string-append "VERSION=" #$version)
3021 (string-append "prefix=" #$output))
3022 #:tests? #f
3023 #:phases
3024 #~(modify-phases %standard-phases
3025 (delete 'configure))))
3026 (home-page "https://passt.top")
3027 (synopsis "Plug A Simple Socket Transport")
3028 (description
3029 "passt implements a thin layer between guest and host, that only
3030implements what's strictly needed to pretend processes are running locally.
3031The TCP adaptation doesn't keep per-connection packet buffers, and reflects
3032observed sending windows and acknowledgements between the two sides. This TCP
3033adaptation is needed as passt runs without the CAP_NET_RAW capability: it
3034can't create raw IP sockets on the pod, and therefore needs to map packets at
3035Layer-2 to Layer-4 sockets offered by the host kernel.
3036
3037Also provides pasta, which similarly to slirp4netns, provides networking to
3038containers by creating a tap interface available to processes in the
3039namespace, and mapping network traffic outside the namespace using native
3040Layer-4 sockets.")
3041 (license (list license:gpl2+ license:bsd-3))))
3042
3043(define-public podman
3044 (package
3045 (name "podman")
3046 (version "6.1.3")
3047 (outputs '("out" "docker"))
3048 (properties
3049 `((output-synopsis "docker" "docker alias for podman")))
3050 (source
3051 (origin
3052 (method git-fetch)
3053 (uri (git-reference
3054 (url "https://github.com/podman-container-tools/podman")
3055 (commit (string-append "v" version))))
3056 (sha256
3057 (base32 "17wqxxw0jkqgzf6w68qichxi7hsj709p3hnn7a8yypi6l1vnqnxn"))
3058 (file-name (git-file-name name version))))
3059 (build-system gnu-build-system)
3060 (arguments
3061 (list
3062 #:make-flags
3063 #~(list (string-append "CC=" #$(cc-for-target))
3064 (string-append "PREFIX=" #$output)
3065 (string-append "HELPER_BINARIES_DIR=" #$output "/_guix")
3066 (string-append "GOMD2MAN=" #$go-md2man "/bin/go-md2man")
3067 (string-append "BUILDFLAGS=-trimpath"))
3068 #:tests? #f ; /sys/fs/cgroup not set up in guix sandbox
3069 #:test-target "test"
3070 #:phases
3071 #~(modify-phases %standard-phases
3072 (delete 'configure)
3073 (add-after 'unpack 'set-env
3074 (lambda _
3075 ;; When running go, things fail because HOME=/homeless-shelter.
3076 (setenv "HOME" "/tmp")))
3077 (replace 'check
3078 (lambda* (#:key tests? #:allow-other-keys)
3079 (when tests?
3080 (invoke "make" "localsystem")
3081 (invoke "make" "remotesystem"))))
3082 (add-after 'unpack 'fix-hardcoded-paths
3083 (lambda _
3084 (substitute* "vendor/go.podman.io/common/pkg/config/config_linux.go"
3085 (("/usr/local/libexec/podman")
3086 (string-append #$output "/libexec/podman"))
3087 (("/usr/local/lib/podman")
3088 (string-append #$output "/bin")))))
3089 (add-after 'install 'symlink-helpers
3090 (lambda _
3091 (mkdir-p (string-append #$output "/_guix"))
3092 (for-each
3093 (lambda (what)
3094 (symlink (string-append (car what) "/bin/" (cdr what))
3095 (string-append #$output "/_guix/" (cdr what))))
3096 ;; Only tools that cannot be discovered via $PATH are
3097 ;; symlinked. Rest is handled in the 'wrap-podman phase.
3098 `((#$aardvark-dns . "aardvark-dns")
3099 ;; Required for podman-machine, which is *not* supported out
3100 ;; of the box. But it cannot be discovered via $PATH, so
3101 ;; there is no other way for the user to install it. It
3102 ;; costs ~10MB, so let's leave it here.
3103 (#$gvisor-tap-vsock . "gvproxy")
3104 (#$netavark . "netavark")))))
3105 (add-after 'install 'wrap-podman
3106 (lambda _
3107 (wrap-program (string-append #$output "/bin/podman")
3108 `("PATH" suffix
3109 (,(string-append #$catatonit "/bin")
3110 ,(string-append #$conmon "/bin")
3111 ,(string-append #$crun "/bin")
3112 ,(string-append #$gcc "/bin") ; cpp
3113 ,(string-append #$iptables "/sbin")
3114 ,(string-append #$nftables "/sbin")
3115 ,(string-append #$passt "/bin")
3116 ,(string-append #$procps "/bin") ; ps
3117 "/run/privileged/bin")))))
3118 (add-after 'install 'install-docker
3119 (lambda _
3120 ;; So it picks podman of the other output.
3121 (substitute* "docker/docker.in"
3122 (("[$][{]BINDIR[}]") (string-append #$output "/bin"))
3123 (("[$][{]ETCDIR[}]") "/etc"))
3124 (invoke "make" "install.docker"
3125 (string-append "PREFIX=" #$output:docker)
3126 (string-append "ETCDIR=" #$output:docker "/etc"))))
3127 (add-after 'install 'install-completions
3128 (lambda _
3129 (invoke "make" "install.completions"
3130 (string-append "PREFIX=" #$output)))))))
3131 (inputs
3132 (list bash-minimal
3133 btrfs-progs
3134 gpgme
3135 libassuan
3136 libseccomp
3137 libselinux))
3138 (native-inputs
3139 (list grep
3140 bats
3141 git-minimal/pinned
3142 go-1.26
3143 go-md2man
3144 gettext-minimal ; for envsubst
3145 mandoc
3146 pkg-config
3147 python))
3148 (home-page "https://podman.io")
3149 (synopsis "Manage containers, images, pods, and their volumes")
3150 (description
3151 "Podman (the POD MANager) is a tool for managing containers and images,
3152volumes mounted into those containers, and pods made from groups of
3153containers.
3154
3155Not all commands are working out of the box due to requiring additional
3156binaries to be present in the $PATH.
3157
3158To get @code{podman compose} working, install either @code{podman-compose} or
3159@code{docker-compose} packages.
3160
3161To get @code{podman machine} working, install @code{qemu-minimal}, and
3162@code{openssh} packages.")
3163 (license license:asl2.0)))
3164
3165(define-public podman-compose
3166 (package
3167 (name "podman-compose")
3168 (version "1.6.0")
3169 (source
3170 (origin
3171 (method git-fetch)
3172 (uri (git-reference
3173 (url "https://github.com/containers/podman-compose")
3174 (commit (string-append "v" version))))
3175 (file-name (git-file-name name version))
3176 (sha256
3177 (base32 "0lp4s7j1dwrnl8r9k93kd0396jwy0rkyq545ca88d90nyrjwniff"))))
3178 (build-system pyproject-build-system)
3179 (arguments
3180 (list
3181 ;; Only run tests in `tests/unit`, skipping the ones in
3182 ;; `tests/integration`. The integration tests need an environment with
3183 ;; the ability to manage containers and volumes using the `podman`
3184 ;; command.
3185 ;;
3186 ;; tests: 378 tests
3187 #:test-backend #~'unittest
3188 #:test-flags #~(list "discover" "tests/unit")))
3189 (native-inputs
3190 (list python-parameterized
3191 python-setuptools))
3192 (propagated-inputs
3193 (list python-dotenv
3194 python-pyyaml))
3195 (home-page "https://github.com/containers/podman-compose")
3196 (synopsis "Script to run docker-compose.yml using podman")
3197 (description
3198 "This package provides an implementation of
3199@url{https://compose-spec.io/, Compose Spec} for @code{podman} focused on
3200being rootless and not requiring any daemon to be running.")
3201 (license license:gpl2)))
3202
3203(define-public podman-containers-storage
3204 (package/inherit go-go-podman-io-storage
3205 (name "podman-containers-storage")
3206 (arguments
3207 (substitute-keyword-arguments arguments
3208 ((#:import-path _ "") "go.podman.io/storage/cmd/...")
3209 ((#:install-source? #t #t) #f)
3210 ((#:tests? #t #t) #f)
3211 ((#:phases phases '%standard-phases)
3212 #~(modify-phases #$phases
3213 (add-after 'install 'build-and-install-docs
3214 (lambda* (#:key unpack-path #:allow-other-keys)
3215 (with-directory-excursion (string-append "src/" unpack-path
3216 "/storage")
3217 (setenv "PREFIX" #$output)
3218 (invoke "make" "-C" "docs" "docs" "install"))))))))
3219 (native-inputs
3220 (append
3221 (modify-inputs native-inputs
3222 (append go-md2man))
3223 (package-propagated-inputs go-go-podman-io-storage)))
3224 (propagated-inputs '())
3225 (description
3226 "@code{containers-storage} is a command line tool for manipulating local
3227layer/image/container stores.")))
3228
3229(define-public runc
3230 ;; TODO: Inheerit form go-github-com-opencontainers-runc when it's moved
3231 ;; here.
3232 (package
3233 (name "runc")
3234 (version "1.3.0")
3235 (source
3236 (origin
3237 (method git-fetch)
3238 (uri (git-reference
3239 (url "https://github.com/opencontainers/runc")
3240 (commit (string-append "v" version))))
3241 (file-name (git-file-name name version))
3242 (sha256
3243 (base32 "0midvxwmj4fvhy5mqv616bhlx39j0gd6y890adx7dnz5in506ym1"))
3244 (snippet
3245 #~(begin
3246 (use-modules (guix build utils))
3247 (delete-file-recursively "vendor")))))
3248 (build-system go-build-system)
3249 (arguments
3250 (list
3251 ;; XXX: 20/139 tests fail due to missing /var, cgroups and apparmor in
3252 ;; the build environment.
3253 #:tests? #f
3254 #:install-source? #f
3255 #:import-path "github.com/opencontainers/runc"
3256 #:phases
3257 #~(modify-phases %standard-phases
3258 (add-after 'unpack 'patch-source
3259 (lambda* (#:key import-path #:allow-other-keys)
3260 (substitute* (string-append "src/" import-path "/Makefile")
3261 (("/bin/bash") (which "bash")))))
3262 (replace 'build
3263 (lambda* (#:key import-path #:allow-other-keys)
3264 (with-directory-excursion (string-append "src/" import-path)
3265 (invoke "make" "all" "man"))))
3266 (replace 'install
3267 (lambda* (#:key import-path outputs #:allow-other-keys)
3268 (with-directory-excursion (string-append "src/" import-path)
3269 (invoke "make" "install" "install-bash" "install-man"
3270 (string-append "PREFIX=" #$output))))))))
3271 (native-inputs
3272 (list go-github-com-checkpoint-restore-go-criu-v6
3273 go-github-com-containerd-console
3274 go-github-com-coreos-go-systemd-v22
3275 go-github-com-cyphar-filepath-securejoin-0.4.1
3276 go-github-com-docker-go-units
3277 go-github-com-godbus-dbus-v5
3278 go-github-com-moby-sys-capability
3279 go-github-com-moby-sys-mountinfo
3280 go-github-com-moby-sys-user
3281 go-github-com-moby-sys-userns
3282 go-github-com-mrunalp-fileutils
3283 go-github-com-opencontainers-cgroups-0.0.1
3284 go-github-com-opencontainers-runtime-spec-1.2.1
3285 go-github-com-opencontainers-selinux
3286 go-github-com-seccomp-libseccomp-golang
3287 go-github-com-sirupsen-logrus
3288 go-github-com-urfave-cli
3289 go-github-com-vishvananda-netlink
3290 go-golang-org-x-net
3291 go-golang-org-x-sys
3292 go-google-golang-org-protobuf
3293 go-md2man
3294 pkg-config))
3295 (inputs
3296 (list libseccomp))
3297 (synopsis "Open container initiative runtime")
3298 (home-page "https://opencontainers.org/")
3299 (description
3300 "@command{runc} is a command line client for running applications
3301packaged according to the
3302@uref{https://github.com/opencontainers/runtime-spec/blob/master/spec.md, Open
3303Container Initiative (OCI) format} and is a compliant implementation of the
3304Open Container Initiative specification.")
3305 (license license:asl2.0)))
3306
3307(define-public skopeo
3308 (package
3309 (name "skopeo")
3310 (version "1.24.0")
3311 (source (origin
3312 (method git-fetch)
3313 (uri (git-reference
3314 (url "https://github.com/podman-container-tools/skopeo")
3315 (commit (string-append "v" version))))
3316 (file-name (git-file-name name version))
3317 (sha256
3318 (base32
3319 "05a2xp3ss59nld8i4zf85rqrqlsid1ipj5484vp23a5sdiybl0j4"))))
3320 (build-system gnu-build-system)
3321 (native-inputs
3322 (list go
3323 go-md2man
3324 pkg-config))
3325 (inputs
3326 (list bash-minimal
3327 btrfs-progs
3328 eudev
3329 libassuan
3330 libselinux
3331 libostree
3332 lvm2
3333 glib
3334 gpgme))
3335 (arguments
3336 (list
3337 #:make-flags
3338 #~(list (string-append "CC=" #$(cc-for-target))
3339 "PREFIX="
3340 (string-append "DESTDIR=" #$output)
3341 "GOGCFLAGS=-trimpath"
3342 (string-append "GOMD2MAN=" #$go-md2man "/bin/go-md2man"))
3343 #:tests? #f ; The tests require Docker
3344 #:test-target "test-unit"
3345 #:imported-modules
3346 (source-module-closure `(,@%default-gnu-imported-modules
3347 (guix build go-build-system)))
3348 #:phases
3349 #~(modify-phases %standard-phases
3350 (delete 'configure)
3351 (add-after 'unpack 'set-env
3352 (lambda _
3353 ;; When running go, things fail because HOME=/homeless-shelter.
3354 (setenv "HOME" "/tmp")
3355 ;; Required for detecting btrfs in hack/btrfs* due to bug in GNU
3356 ;; Make <4.4 causing CC not to be propagated into $(shell ...)
3357 ;; calls. Can be removed once we update to >4.3.
3358 (setenv "CC" #$(cc-for-target))))
3359 (add-after 'install 'wrap-skopeo
3360 (lambda _
3361 (wrap-program (string-append #$output "/bin/skopeo")
3362 `("PATH" suffix
3363 ;; We need at least newuidmap, newgidmap and mount.
3364 ("/run/privileged/bin"))))))))
3365 (home-page "https://github.com/podman-container-tools/skopeo")
3366 (synopsis "Interact with container images and container image registries")
3367 (description
3368 "@command{skopeo} is a command line utility providing various operations
3369with container images and container image registries. It can:
3370@enumerate
3371
3372@item Copy container images between various containers image stores,
3373converting them as necessary.
3374
3375@item Convert a Docker schema 2 or schema 1 container image to an OCI image.
3376
3377@item Inspect a repository on a container registry without needlessly pulling
3378the image.
3379
3380@item Sign and verify container images.
3381
3382@item Delete container images from a remote container registry.
3383
3384@end enumerate")
3385 (license license:asl2.0)))
3386
3387(define-public slirp4netns
3388 (package
3389 (name "slirp4netns")
3390 (version "1.3.3")
3391 (source
3392 (origin
3393 (method git-fetch)
3394 (uri (git-reference
3395 (url "https://github.com/rootless-containers/slirp4netns")
3396 (commit (string-append "v" version))))
3397 (sha256
3398 (base32 "165z1ccsb8w901965rlzcrbln17l1jdg9k7vsiamlx0q06v24b96"))
3399 (file-name (git-file-name name version))))
3400 (build-system gnu-build-system)
3401 (arguments
3402 '(#:tests? #f ; XXX: open("/dev/net/tun"): No such file or directory
3403 #:phases (modify-phases %standard-phases
3404 (add-after 'unpack 'fix-hardcoded-paths
3405 (lambda _
3406 (substitute* (find-files "tests" "\\.sh")
3407 (("ping") "/run/privileged/bin/ping")))))))
3408 (inputs
3409 (list glib
3410 libcap
3411 libseccomp
3412 libslirp))
3413 (native-inputs
3414 (list automake
3415 autoconf
3416 iproute ; iproute, jq, nmap (ncat) and util-linux are for tests
3417 jq
3418 nmap
3419 pkg-config
3420 util-linux))
3421 (home-page "https://github.com/rootless-containers/slirp4netns")
3422 (synopsis "User-mode networking for unprivileged network namespaces")
3423 (description
3424 "slirp4netns provides user-mode networking (\"slirp\") for unprivileged
3425network namespaces.")
3426 (license license:gpl2+)))
3427
3428(define-public tini
3429 (package
3430 (name "tini")
3431 (version "0.19.0")
3432 (source (origin
3433 (method git-fetch)
3434 (uri (git-reference
3435 (url "https://github.com/krallin/tini")
3436 (commit (string-append "v" version))))
3437 (file-name (git-file-name name version))
3438 (sha256
3439 (base32
3440 "1hnnvjydg7gi5gx6nibjjdnfipblh84qcpajc08nvr44rkzswck4"))))
3441 (build-system cmake-build-system)
3442 (arguments
3443 `(#:tests? #f ;tests require a Docker daemon
3444 ;; 'tini-static' is a static binary, which leads CMake to fail with
3445 ;; ‘file RPATH_CHANGE could not write new RPATH: ...’. Clear
3446 ;; CMAKE_INSTALL_RPATH to avoid that problem.
3447 #:configure-flags '("-DCMAKE_INSTALL_RPATH=")))
3448 (home-page "https://github.com/krallin/tini")
3449 (synopsis "Tiny but valid init for containers")
3450 (description "Tini is an init program specifically designed for use with
3451containers. It manages a single child process and ensures that any zombie
3452processes produced from it are reaped and that signals are properly forwarded.
3453Tini is integrated with Docker.")
3454 (license license:expat)))
3455
3456(define-public umoci
3457 (package
3458 (name "umoci")
3459 (version "0.6.0")
3460 (source
3461 (origin
3462 (method git-fetch)
3463 (uri (git-reference
3464 (url "https://github.com/opencontainers/umoci")
3465 (commit (string-append "v" version))))
3466 (file-name (git-file-name name version))
3467 (sha256
3468 (base32 "0m50x2q2h34g6sh786blf8r9wh098yzgwnicdlx0cgsqqwjsn0ia"))
3469 (snippet
3470 #~(begin
3471 (use-modules (guix build utils))
3472 (delete-file-recursively "vendor")))))
3473 (build-system go-build-system)
3474 (arguments
3475 (list
3476 #:install-source? #f
3477 #:import-path "github.com/opencontainers/umoci/cmd/umoci"
3478 #:unpack-path "github.com/opencontainers/umoci"
3479 #:test-flags
3480 ;; Two tests fail with error: unpack config.json: convert spec to
3481 ;; rootless: inspecting mount flags of /etc/resolv.conf: no such file or
3482 ;; directory
3483 #~(list "-skip" (string-append "TestUnpackManifestCustomLayer"
3484 "|TestUnpackStartFromDescriptor"))
3485 #:test-subdirs #~(list "../../...") ;test the whole library
3486 #:build-flags
3487 #~(list (string-append "-ldflags="
3488 "-X github.com/opencontainers/umoci.version="
3489 #$version))
3490 #:phases
3491 #~(modify-phases %standard-phases
3492 (add-after 'install 'build-and-install-man-pages
3493 (lambda* (#:key unpack-path #:allow-other-keys)
3494 (with-directory-excursion
3495 (string-append "src/" unpack-path "/doc/man")
3496 (mkdir-p (string-append #$output "/share/man/man1"))
3497 (for-each
3498 (lambda (file)
3499 (let* ((file (string-drop-right file 3)) ;cut .md
3500 (in-md (string-append file ".md"))
3501 (out-man (string-append #$output
3502 "/share/man/man1/" file)))
3503 (invoke "go-md2man" "-in" in-md "-out" out-man)))
3504 (find-files "." "\\.md$"))))))))
3505 (native-inputs
3506 (list go-github-com-adalogics-go-fuzz-headers
3507 go-github-com-apex-log
3508 go-github-com-blang-semver-v4
3509 go-github-com-containerd-platforms
3510 go-github-com-cyphar-filepath-securejoin-0.4.1
3511 go-github-com-cyphar-go-mtree
3512 go-github-com-docker-go-units
3513 go-github-com-klauspost-compress
3514 go-github-com-klauspost-pgzip
3515 go-github-com-moby-sys-user
3516 go-github-com-moby-sys-userns
3517 go-github-com-mohae-deepcopy
3518 go-github-com-opencontainers-go-digest
3519 go-github-com-opencontainers-image-spec
3520 go-github-com-opencontainers-runtime-spec
3521 go-github-com-rootless-containers-proto-go-proto
3522 go-github-com-stretchr-testify
3523 go-github-com-urfave-cli
3524 go-golang-org-x-sys
3525 go-google-golang-org-protobuf
3526 go-md2man))
3527 (home-page "https://umo.ci/")
3528 (synopsis "Tool for modifying Open Container images")
3529 (description
3530 "@command{umoci} is a tool that allows for high-level modification of an
3531Open Container Initiative (OCI) image layout and its tagged images.")
3532 (license license:asl2.0)))