these 2 derivations will be built: /nix/store/y7d5kd7x2dgn209y80c971m2prsr87ay-skopeo-1.24.1.drv /nix/store/yayklshi2g3g7gnllzni2n7bla8n64r0-nix-shell.drv these 10 paths will be fetched (202.3 KiB download, 18.7 MiB unpacked): /nix/store/dv5w4p13zqys74wx6p45m52qws48ldms-btrfs-progs-7.1-dev /nix/store/v5lkm42qp2adhlih9cdlwy2b904j2lrg-btrfs-progs-7.1-lib /nix/store/jipb8y1xzhxjga5iccw8jmas0bc0px47-glib-2.88.3-dev /nix/store/2fhx5hvmnmg9cxm00fd0nv3xyl4kkp8v-glibc-iconv-2.44 /nix/store/nvvgsp1zcnnzn99vcffr7iz4awas8xfw-go-md2man-2.0.7 /nix/store/135g01w3ayyapjzaplcp5jjihjys4z5b-gpgme-2.2.0-dev /nix/store/ra8yywf70a4lyijzmgvf3dic2b7jqqh6-libassuan-3.0.2-dev /nix/store/58afjz2qz0b5q5465jjdrqi2cb2xlfkc-libgpg-error-1.61-dev /nix/store/q69wsv6ky0bm64fjqcviss8rxpx8gh5w-lvm2-2.03.41-dev /nix/store/dykidkqqwd5w1kvs29rwrpzvp9zd82cn-pth-2.0.7 building '/nix/store/y7d5kd7x2dgn209y80c971m2prsr87ay-skopeo-1.24.1.drv' skopeo-1.24.1> Running phase: unpackPhase skopeo-1.24.1> unpacking source archive /nix/store/94b2i5k17351kyhbcw1l636hbsrm66wy-source skopeo-1.24.1> source root is source skopeo-1.24.1> Running phase: patchPhase skopeo-1.24.1> Running phase: updateAutotoolsGnuConfigScriptsPhase skopeo-1.24.1> Running phase: configurePhase skopeo-1.24.1> Running phase: buildPhase skopeo-1.24.1> diff --git a/image/transports/alltransports/alltransports.go b/image/transports/alltransports/alltransports.go skopeo-1.24.1> --- a/image/transports/alltransports/alltransports.go skopeo-1.24.1> +++ b/image/transports/alltransports/alltransports.go skopeo-1.24.1> @@ -18,6 +18,7 @@ skopeo-1.24.1> _ "go.podman.io/image/v5/openshift" skopeo-1.24.1> _ "go.podman.io/image/v5/sif" skopeo-1.24.1> _ "go.podman.io/image/v5/tarball" skopeo-1.24.1> + _ "go.podman.io/image/v5/nix" skopeo-1.24.1> // The docker-daemon transport is registeredy by docker_daemon*.go skopeo-1.24.1> // The storage transport is registered by storage*.go skopeo-1.24.1> ) skopeo-1.24.1> --- /dev/null skopeo-1.24.1> +++ b/image/nix/transport.go skopeo-1.24.1> @@ -0,0 +1,206 @@ skopeo-1.24.1> +package nix skopeo-1.24.1> + skopeo-1.24.1> +import ( skopeo-1.24.1> + "context" skopeo-1.24.1> + "encoding/json" skopeo-1.24.1> + "fmt" skopeo-1.24.1> + "go.podman.io/image/v5/docker/reference" skopeo-1.24.1> + "go.podman.io/image/v5/image" skopeo-1.24.1> + "go.podman.io/image/v5/manifest" skopeo-1.24.1> + "go.podman.io/image/v5/transports" skopeo-1.24.1> + "go.podman.io/image/v5/types" skopeo-1.24.1> + "github.com/nlewo/nix2container/nix" skopeo-1.24.1> + nixtypes "github.com/nlewo/nix2container/types" skopeo-1.24.1> + digest "github.com/opencontainers/go-digest" skopeo-1.24.1> + imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1" skopeo-1.24.1> + "github.com/pkg/errors" skopeo-1.24.1> + "io" skopeo-1.24.1> +) skopeo-1.24.1> + skopeo-1.24.1> +func init() { skopeo-1.24.1> + transports.Register(Transport) skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +// Transport is an ImageTransport for nix2container JSON image specification. skopeo-1.24.1> +var Transport = nixTransport{} skopeo-1.24.1> + skopeo-1.24.1> +type nixTransport struct{} skopeo-1.24.1> + skopeo-1.24.1> +func (t nixTransport) Name() string { skopeo-1.24.1> + return "nix" skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +type nixReference struct { skopeo-1.24.1> + path string skopeo-1.24.1> + nixImage nixtypes.Image skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +// ParseReference converts a string, which should not start with the ImageTransport.Name prefix, into an ImageReference. skopeo-1.24.1> +func (t nixTransport) ParseReference(reference string) (types.ImageReference, error) { skopeo-1.24.1> + nixImage, err := nix.NewImageFromFile(reference) skopeo-1.24.1> + if err != nil { skopeo-1.24.1> + return nil, err skopeo-1.24.1> + } skopeo-1.24.1> + imageReference := nixReference{ skopeo-1.24.1> + path: reference, skopeo-1.24.1> + nixImage: nixImage, skopeo-1.24.1> + } skopeo-1.24.1> + return imageReference, nil skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +// ValidatePolicyConfigurationScope checks that scope is a valid name for a signature.PolicyTransportScopes keys skopeo-1.24.1> +// (i.e. a valid PolicyConfigurationIdentity() or PolicyConfigurationNamespaces() return value). skopeo-1.24.1> +// It is acceptable to allow an invalid value which will never be matched, it can "only" cause user confusion. skopeo-1.24.1> +// scope passed to this function will not be "", that value is always allowed. skopeo-1.24.1> +func (t nixTransport) ValidatePolicyConfigurationScope(scope string) error { skopeo-1.24.1> + // See the explanation in archiveReference.PolicyConfigurationIdentity. skopeo-1.24.1> + return errors.New(`nix: does not support any scopes except the default "" one`) skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +// StringWithinTransport returns a string representation of the reference, which MUST be such that skopeo-1.24.1> +// reference.Transport().ParseReference(reference.StringWithinTransport()) returns an equivalent reference. skopeo-1.24.1> +func (ref nixReference) StringWithinTransport() string { skopeo-1.24.1> + return fmt.Sprintf("%s", ref.path) skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +func (ref nixReference) Transport() types.ImageTransport { skopeo-1.24.1> + return Transport skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +// DeleteImage deletes the named image from the registry, if supported. skopeo-1.24.1> +func (ref nixReference) DeleteImage(ctx context.Context, sys *types.SystemContext) error { skopeo-1.24.1> + return errors.New("Deleting images not implemented for nix: images") skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +// DockerReference returns a Docker reference associated with this reference skopeo-1.24.1> +// (fully explicit, i.e. !reference.IsNameOnly, but reflecting user intent, skopeo-1.24.1> +// not e.g. after redirect or alias processing), or nil if unknown/not applicable. skopeo-1.24.1> +func (ref nixReference) DockerReference() reference.Named { skopeo-1.24.1> + return nil skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +// NewImage returns a types.ImageCloser for this reference, possibly specialized for this ImageTransport. skopeo-1.24.1> +// The caller must call .Close() on the returned ImageCloser. skopeo-1.24.1> +// NOTE: If any kind of signature verification should happen, build an UnparsedImage from the value returned by NewImageSource, skopeo-1.24.1> +// verify that UnparsedImage, and convert it into a real Image via image.FromUnparsedImage. skopeo-1.24.1> +// WARNING: This may not do the right thing for a manifest list, see image.FromSource for details. skopeo-1.24.1> +func (ref nixReference) NewImage(ctx context.Context, sys *types.SystemContext) (types.ImageCloser, error) { skopeo-1.24.1> + src, err := newImageSource(ctx, sys, ref) skopeo-1.24.1> + if err != nil { skopeo-1.24.1> + return nil, err skopeo-1.24.1> + } skopeo-1.24.1> + return image.FromSource(ctx, sys, src) skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +// NewImageSource returns a types.ImageSource for this reference. skopeo-1.24.1> +// The caller must call .Close() on the returned ImageSource. skopeo-1.24.1> +func (ref nixReference) NewImageSource(ctx context.Context, sys *types.SystemContext) (types.ImageSource, error) { skopeo-1.24.1> + return newImageSource(ctx, sys, ref) skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +// PolicyConfigurationIdentity returns a string representation of the reference, suitable for policy lookup. skopeo-1.24.1> +func (ref nixReference) PolicyConfigurationIdentity() string { skopeo-1.24.1> + return "" skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +// PolicyConfigurationNamespaces returns a list of other policy configuration namespaces to search skopeo-1.24.1> +// for if explicit configuration for PolicyConfigurationIdentity() is not set skopeo-1.24.1> +func (ref nixReference) PolicyConfigurationNamespaces() []string { skopeo-1.24.1> + return []string{} skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +// NewImageDestination returns a types.ImageDestination for this reference. skopeo-1.24.1> +// The caller must call .Close() on the returned ImageDestination. skopeo-1.24.1> +func (ref nixReference) NewImageDestination(ctx context.Context, sys *types.SystemContext) (types.ImageDestination, error) { skopeo-1.24.1> + return nil, errors.New("It is not possible to copy to nix: images") skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +// newImageSource returns an ImageSource for reading from an existing directory. skopeo-1.24.1> +// newImageSource untars the file and saves it in a temp directory skopeo-1.24.1> +func newImageSource(ctx context.Context, sys *types.SystemContext, ref nixReference) (types.ImageSource, error) { skopeo-1.24.1> + return &nixImageSource{ skopeo-1.24.1> + ref: ref, skopeo-1.24.1> + }, nil skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +type nixImageSource struct { skopeo-1.24.1> + ref nixReference skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +// Close removes resources associated with an initialized ImageSource, if any. skopeo-1.24.1> +// Close deletes the temporary directory at dst skopeo-1.24.1> +func (s *nixImageSource) Close() error { skopeo-1.24.1> + return nil skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +func (s *nixImageSource) GetBlob(ctx context.Context, info types.BlobInfo, cache types.BlobInfoCache) (io.ReadCloser, int64, error) { skopeo-1.24.1> + // TODO: returning the blob size here leads to the following error on image copy: skopeo-1.24.1> + // FATA[0000] writing blob: archive/tar: write too long skopeo-1.24.1> + rc, _, err := nix.GetBlob(s.ref.nixImage, info.Digest) skopeo-1.24.1> + return rc, -1, err skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +// GetManifest returns the image's manifest along with its MIME type (which may be empty when it can't be determined but the manifest is available). skopeo-1.24.1> +// It may use a remote (= slow) service. skopeo-1.24.1> +// If instanceDigest is not nil, it contains a digest of the specific manifest instance to retrieve (when the primary manifest is a manifest list); skopeo-1.24.1> +// this never happens if the primary manifest is not a manifest list (e.g. if the source never returns manifest lists). skopeo-1.24.1> +func (s *nixImageSource) GetManifest(ctx context.Context, instanceDigest *digest.Digest) ([]byte, string, error) { skopeo-1.24.1> + configDigest, size, err := nix.GetConfigDigest(s.ref.nixImage) skopeo-1.24.1> + if err != nil { skopeo-1.24.1> + return nil, "", err skopeo-1.24.1> + } skopeo-1.24.1> + config := imgspecv1.Descriptor{ skopeo-1.24.1> + MediaType: imgspecv1.MediaTypeImageConfig, skopeo-1.24.1> + Size: size, skopeo-1.24.1> + Digest: configDigest, skopeo-1.24.1> + } skopeo-1.24.1> + skopeo-1.24.1> + var layers []imgspecv1.Descriptor skopeo-1.24.1> + for _, layer := range s.ref.nixImage.Layers { skopeo-1.24.1> + digest, err := digest.Parse(layer.Digest) skopeo-1.24.1> + if err != nil { skopeo-1.24.1> + return nil, "", err skopeo-1.24.1> + } skopeo-1.24.1> + layers = append(layers, imgspecv1.Descriptor{ skopeo-1.24.1> + MediaType: layer.MediaType, skopeo-1.24.1> + Size: layer.Size, skopeo-1.24.1> + Digest: digest, skopeo-1.24.1> + }) skopeo-1.24.1> + } skopeo-1.24.1> + skopeo-1.24.1> + m := manifest.OCI1FromComponents( skopeo-1.24.1> + config, skopeo-1.24.1> + layers, skopeo-1.24.1> + ) skopeo-1.24.1> + manifestBytes, err := json.Marshal(&m) skopeo-1.24.1> + if err != nil { skopeo-1.24.1> + return nil, "", err skopeo-1.24.1> + } skopeo-1.24.1> + return manifestBytes, imgspecv1.MediaTypeImageManifest, nil skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +func (s *nixImageSource) GetSignatures(ctx context.Context, instanceDigest *digest.Digest) ([][]byte, error) { skopeo-1.24.1> + return [][]byte{}, nil skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +// HasThreadSafeGetBlob indicates whether GetBlob can be executed concurrently. skopeo-1.24.1> +func (s *nixImageSource) HasThreadSafeGetBlob() bool { skopeo-1.24.1> + return true skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +// LayerInfosForCopy returns either nil (meaning the values in the manifest are fine), or updated values for the layer skopeo-1.24.1> +// blobsums that are listed in the image's manifest. If values are returned, they should be used when using GetBlob() skopeo-1.24.1> +// to read the image's layers. skopeo-1.24.1> +// If instanceDigest is not nil, it contains a digest of the specific manifest instance to retrieve BlobInfos for skopeo-1.24.1> +// (when the primary manifest is a manifest list); this never happens if the primary manifest is not a manifest list skopeo-1.24.1> +// (e.g. if the source never returns manifest lists). skopeo-1.24.1> +// The Digest field is guaranteed to be provided; Size may be -1. skopeo-1.24.1> +// WARNING: The list may contain duplicates, and they are semantically relevant. skopeo-1.24.1> +func (s *nixImageSource) LayerInfosForCopy(ctx context.Context, instanceDigest *digest.Digest) ([]types.BlobInfo, error) { skopeo-1.24.1> + return nil, nil skopeo-1.24.1> +} skopeo-1.24.1> + skopeo-1.24.1> +// Reference returns the reference used to set up this source. skopeo-1.24.1> +func (s *nixImageSource) Reference() types.ImageReference { skopeo-1.24.1> + return s.ref skopeo-1.24.1> +} skopeo-1.24.1> patching file transports/alltransports/alltransports.go skopeo-1.24.1> patching file nix/transport.go skopeo-1.24.1> /build/source skopeo-1.24.1> patching script interpreter paths in . skopeo-1.24.1> ./contrib/cirrus/mac_cleanup.sh: interpreter directive changed from "#!/bin/bash" to "/nix/store/10dxp0qxqxxsyiljrh2kp0xqhz6arhcx-bash-5.3p15/bin/bash" skopeo-1.24.1> ./contrib/cirrus/runner.sh: interpreter directive changed from "#!/bin/bash" to "/nix/store/10dxp0qxqxxsyiljrh2kp0xqhz6arhcx-bash-5.3p15/bin/bash" skopeo-1.24.1> ./hack/man-page-checker: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/10dxp0qxqxxsyiljrh2kp0xqhz6arhcx-bash-5.3p15/bin/bash" skopeo-1.24.1> ./hack/tree_status.sh: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/10dxp0qxqxxsyiljrh2kp0xqhz6arhcx-bash-5.3p15/bin/bash" skopeo-1.24.1> ./hack/warn-destructive-tests.sh: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/10dxp0qxqxxsyiljrh2kp0xqhz6arhcx-bash-5.3p15/bin/bash" skopeo-1.24.1> ./hack/sqlite_tag.sh: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/10dxp0qxqxxsyiljrh2kp0xqhz6arhcx-bash-5.3p15/bin/bash" skopeo-1.24.1> ./hack/test-system.sh: interpreter directive changed from "#!/bin/bash" to "/nix/store/10dxp0qxqxxsyiljrh2kp0xqhz6arhcx-bash-5.3p15/bin/bash" skopeo-1.24.1> ./hack/btrfs_installed_tag.sh: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/10dxp0qxqxxsyiljrh2kp0xqhz6arhcx-bash-5.3p15/bin/bash" skopeo-1.24.1> ./hack/validate-git-marks.sh: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/10dxp0qxqxxsyiljrh2kp0xqhz6arhcx-bash-5.3p15/bin/bash" skopeo-1.24.1> ./hack/validate-vet.sh: interpreter directive changed from "#!/bin/bash" to "/nix/store/10dxp0qxqxxsyiljrh2kp0xqhz6arhcx-bash-5.3p15/bin/bash" skopeo-1.24.1> ./hack/libsubid_tag.sh: interpreter directive changed from "#!/usr/bin/env bash" to "/nix/store/10dxp0qxqxxsyiljrh2kp0xqhz6arhcx-bash-5.3p15/bin/bash" skopeo-1.24.1> ./systemtest/make-noarch-manifest: interpreter directive changed from "#!/bin/sh" to "/nix/store/10dxp0qxqxxsyiljrh2kp0xqhz6arhcx-bash-5.3p15/bin/sh" skopeo-1.24.1> ./systemtest/run-tests: interpreter directive changed from "#!/bin/bash" to "/nix/store/10dxp0qxqxxsyiljrh2kp0xqhz6arhcx-bash-5.3p15/bin/bash" skopeo-1.24.1> go build "-buildmode=pie" -ldflags '-X go.podman.io/image/v5/signature/internal/sequoia.sequoiaLibraryDir= ' -gcflags "" -tags " " -o bin/skopeo ./cmd/skopeo skopeo-1.24.1> sed -e 's/\((skopeo.*\.md)\)//' -e 's/\[\(skopeo.*\)\]/\1/' docs/skopeo-copy.1.md | go-md2man -in /dev/stdin -out docs/skopeo-copy.1 skopeo-1.24.1> sed -e 's/\((skopeo.*\.md)\)//' -e 's/\[\(skopeo.*\)\]/\1/' docs/skopeo-delete.1.md | go-md2man -in /dev/stdin -out docs/skopeo-delete.1 skopeo-1.24.1> sed -e 's/\((skopeo.*\.md)\)//' -e 's/\[\(skopeo.*\)\]/\1/' docs/skopeo-generate-sigstore-key.1.md | go-md2man -in /dev/stdin -out docs/skopeo-generate-sigstore-key.1 skopeo-1.24.1> sed -e 's/\((skopeo.*\.md)\)//' -e 's/\[\(skopeo.*\)\]/\1/' docs/skopeo-inspect.1.md | go-md2man -in /dev/stdin -out docs/skopeo-inspect.1 skopeo-1.24.1> sed -e 's/\((skopeo.*\.md)\)//' -e 's/\[\(skopeo.*\)\]/\1/' docs/skopeo-list-tags.1.md | go-md2man -in /dev/stdin -out docs/skopeo-list-tags.1 skopeo-1.24.1> sed -e 's/\((skopeo.*\.md)\)//' -e 's/\[\(skopeo.*\)\]/\1/' docs/skopeo-login.1.md | go-md2man -in /dev/stdin -out docs/skopeo-login.1 skopeo-1.24.1> sed -e 's/\((skopeo.*\.md)\)//' -e 's/\[\(skopeo.*\)\]/\1/' docs/skopeo-logout.1.md | go-md2man -in /dev/stdin -out docs/skopeo-logout.1 skopeo-1.24.1> sed -e 's/\((skopeo.*\.md)\)//' -e 's/\[\(skopeo.*\)\]/\1/' docs/skopeo-manifest-digest.1.md | go-md2man -in /dev/stdin -out docs/skopeo-manifest-digest.1 skopeo-1.24.1> sed -e 's/\((skopeo.*\.md)\)//' -e 's/\[\(skopeo.*\)\]/\1/' docs/skopeo-standalone-sign.1.md | go-md2man -in /dev/stdin -out docs/skopeo-standalone-sign.1 skopeo-1.24.1> sed -e 's/\((skopeo.*\.md)\)//' -e 's/\[\(skopeo.*\)\]/\1/' docs/skopeo-standalone-verify.1.md | go-md2man -in /dev/stdin -out docs/skopeo-standalone-verify.1 skopeo-1.24.1> sed -e 's/\((skopeo.*\.md)\)//' -e 's/\[\(skopeo.*\)\]/\1/' docs/skopeo-sync.1.md | go-md2man -in /dev/stdin -out docs/skopeo-sync.1 skopeo-1.24.1> sed -e 's/\((skopeo.*\.md)\)//' -e 's/\[\(skopeo.*\)\]/\1/' docs/skopeo.1.md | go-md2man -in /dev/stdin -out docs/skopeo.1 skopeo-1.24.1> go build "-buildmode=pie" -ldflags '-X go.podman.io/image/v5/signature/internal/sequoia.sequoiaLibraryDir= ' -gcflags "" -tags " " -o bin/skopeo ./cmd/skopeo skopeo-1.24.1> install -d -m 755 completions/bash completions/zsh completions/fish completions/powershell skopeo-1.24.1> ./bin/skopeo completion bash >| completions/bash/skopeo skopeo-1.24.1> ./bin/skopeo completion zsh >| completions/zsh/_skopeo skopeo-1.24.1> ./bin/skopeo completion fish >| completions/fish/skopeo.fish skopeo-1.24.1> ./bin/skopeo completion powershell >| completions/powershell/skopeo.ps1 skopeo-1.24.1> buildPhase completed in 1 minutes 31 seconds skopeo-1.24.1> Running phase: glibPreInstallPhase skopeo-1.24.1> Running phase: installPhase skopeo-1.24.1> go build "-buildmode=pie" -ldflags '-X go.podman.io/image/v5/signature/internal/sequoia.sequoiaLibraryDir= ' -gcflags "" -tags " " -o bin/skopeo ./cmd/skopeo skopeo-1.24.1> install -d -m 755 /nix/store/07gi09an7sz59yhgn5gj83pqhrlllb9z-skopeo-1.24.1/bin skopeo-1.24.1> install -m 755 bin/skopeo /nix/store/07gi09an7sz59yhgn5gj83pqhrlllb9z-skopeo-1.24.1/bin/skopeo skopeo-1.24.1> install -d -m 755 /nix/store/07gi09an7sz59yhgn5gj83pqhrlllb9z-skopeo-1.24.1/share/man/man1 skopeo-1.24.1> install -m 644 docs/*.1 /nix/store/07gi09an7sz59yhgn5gj83pqhrlllb9z-skopeo-1.24.1/share/man/man1 skopeo-1.24.1> go build "-buildmode=pie" -ldflags '-X go.podman.io/image/v5/signature/internal/sequoia.sequoiaLibraryDir= ' -gcflags "" -tags " " -o bin/skopeo ./cmd/skopeo skopeo-1.24.1> install -d -m 755 completions/bash completions/zsh completions/fish completions/powershell skopeo-1.24.1> ./bin/skopeo completion bash >| completions/bash/skopeo skopeo-1.24.1> ./bin/skopeo completion zsh >| completions/zsh/_skopeo skopeo-1.24.1> ./bin/skopeo completion fish >| completions/fish/skopeo.fish skopeo-1.24.1> ./bin/skopeo completion powershell >| completions/powershell/skopeo.ps1 skopeo-1.24.1> install -d -m 755 /nix/store/07gi09an7sz59yhgn5gj83pqhrlllb9z-skopeo-1.24.1/share/bash-completion/completions skopeo-1.24.1> install -m 644 completions/bash/skopeo /nix/store/07gi09an7sz59yhgn5gj83pqhrlllb9z-skopeo-1.24.1/share/bash-completion/completions skopeo-1.24.1> install -d -m 755 /nix/store/07gi09an7sz59yhgn5gj83pqhrlllb9z-skopeo-1.24.1/share/zsh/site-functions skopeo-1.24.1> install -m 644 completions/zsh/_skopeo /nix/store/07gi09an7sz59yhgn5gj83pqhrlllb9z-skopeo-1.24.1/share/zsh/site-functions skopeo-1.24.1> install -d -m 755 /nix/store/07gi09an7sz59yhgn5gj83pqhrlllb9z-skopeo-1.24.1/share/fish/vendor_completions.d skopeo-1.24.1> install -m 644 completions/fish/skopeo.fish /nix/store/07gi09an7sz59yhgn5gj83pqhrlllb9z-skopeo-1.24.1/share/fish/vendor_completions.d skopeo-1.24.1> # There is no common location for powershell files so do not install them. Users have to source the file from their powershell profile. skopeo-1.24.1> Running phase: fixupPhase skopeo-1.24.1> Moving /nix/store/07gi09an7sz59yhgn5gj83pqhrlllb9z-skopeo-1.24.1/share/man to /nix/store/ixhi5yzggkr752zplj4d11484pixd14g-skopeo-1.24.1-man/share/man skopeo-1.24.1> shrinking RPATHs of ELF executables and libraries in /nix/store/07gi09an7sz59yhgn5gj83pqhrlllb9z-skopeo-1.24.1 skopeo-1.24.1> shrinking /nix/store/07gi09an7sz59yhgn5gj83pqhrlllb9z-skopeo-1.24.1/bin/.skopeo-wrapped skopeo-1.24.1> checking for references to /build/ in /nix/store/07gi09an7sz59yhgn5gj83pqhrlllb9z-skopeo-1.24.1... skopeo-1.24.1> patching script interpreter paths in /nix/store/07gi09an7sz59yhgn5gj83pqhrlllb9z-skopeo-1.24.1 skopeo-1.24.1> stripping (with command strip and flags -S -p) in /nix/store/07gi09an7sz59yhgn5gj83pqhrlllb9z-skopeo-1.24.1/bin skopeo-1.24.1> shrinking RPATHs of ELF executables and libraries in /nix/store/ixhi5yzggkr752zplj4d11484pixd14g-skopeo-1.24.1-man skopeo-1.24.1> checking for references to /build/ in /nix/store/ixhi5yzggkr752zplj4d11484pixd14g-skopeo-1.24.1-man... skopeo-1.24.1> gzipping man pages under /nix/store/ixhi5yzggkr752zplj4d11484pixd14g-skopeo-1.24.1-man/share/man/ skopeo-1.24.1> patching script interpreter paths in /nix/store/ixhi5yzggkr752zplj4d11484pixd14g-skopeo-1.24.1-man building '/nix/store/yayklshi2g3g7gnllzni2n7bla8n64r0-nix-shell.drv' nix-shell> Running phase: buildPhase upload niks3: ok