diff --git a/package/Config.in b/package/Config.in index ce8cb95d7e..0c9b5bb6cf 100644 --- a/package/Config.in +++ b/package/Config.in @@ -2893,6 +2893,7 @@ menu "System tools" source "package/sdbusplus/Config.in" source "package/seatd/Config.in" source "package/shadow/Config.in" + source "package/skopeo/Config.in" source "package/smack/Config.in" source "package/start-stop-daemon/Config.in" source "package/supervisor/Config.in" diff --git a/package/skopeo/Config.in b/package/skopeo/Config.in new file mode 100644 index 0000000000..f1acc3a50f --- /dev/null +++ b/package/skopeo/Config.in @@ -0,0 +1,25 @@ +config BR2_PACKAGE_SKOPEO + bool "skopeo" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on BR2_USE_MMU # btrfs-progs, libgpgme, lvm2 + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgpgme + depends on BR2_TOOLCHAIN_HAS_THREADS # btrfs-progs, lvm2 + depends on !BR2_STATIC_LIBS # lvm2 + select BR2_PACKAGE_HOST_GO + select BR2_PACKAGE_BTRFS_PROGS + select BR2_PACKAGE_LIBGPGME + select BR2_PACKAGE_LVM2 + help + skopeo is a command line utility that performs various + operations on container images and image repositories. + + https://github.com/containers/skopeo + +comment "skopeo needs a toolchain w/ threads, sahred libs" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on BR2_USE_MMU + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS \ + || BR2_STATIC_LIBS diff --git a/package/skopeo/skopeo.mk b/package/skopeo/skopeo.mk index 8e3a302e8d..b3b213983f 100644 --- a/package/skopeo/skopeo.mk +++ b/package/skopeo/skopeo.mk @@ -11,13 +11,23 @@ SKOPEO_LICENSE = Apache-2.0 SKOPEO_LICENSE_FILES = LICENSE SKOPEO_CPE_ID_VALID = YES +SKOPEO_DEPENDENCIES = \ + host-pkgconf \ + btrfs-progs \ + libgpgme \ + lvm2 + HOST_SKOPEO_DEPENDENCIES = \ host-btrfs-progs \ host-libgpgme \ host-lvm2 \ host-pkgconf +SKOPEO_GO_ENV = PKG_CONFIG_PATH=$(HOST_DIR)/lib/pkgconfig +SKOPEO_BUILD_TARGETS = cmd/skopeo + HOST_SKOPEO_GO_ENV = PKG_CONFIG_PATH=$(HOST_DIR)/lib/pkgconfig HOST_SKOPEO_BUILD_TARGETS = cmd/skopeo +$(eval $(golang-package)) $(eval $(host-golang-package)) diff --git a/support/testing/tests/package/test_skopeo.py b/support/testing/tests/package/test_skopeo.py new file mode 100644 index 0000000000..79c3da8b3d --- /dev/null +++ b/support/testing/tests/package/test_skopeo.py @@ -0,0 +1,41 @@ +import infra.basetest +import json +import os + + +class TestSkopeo(infra.basetest.BRTest): + config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \ + """ + BR2_PER_PACKAGE_DIRECTORIES=y + BR2_SYSTEM_DHCP="eth0" + BR2_PACKAGE_CA_CERTIFICATES=y + BR2_PACKAGE_SKOPEO=y + BR2_PACKAGE_HOST_GO_BIN=y + BR2_TARGET_ROOTFS_CPIO=y + # BR2_TARGET_ROOTFS_TAR is not set + """ + + def test_run(self): + cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio") + self.emulator.boot(arch="armv5", + kernel="builtin", + options=["-initrd", cpio_file, "-nic", "user,model=rtl8139"]) + self.emulator.login() + + self.assertRunOk("skopeo --version", timeout=30) + + # First, check we can reach the default registry: docker.io + output, _ = self.emulator.run( + "skopeo inspect docker://busybox:latest", + timeout=60, + ) + bb_info = json.loads("".join(output)) + self.assertEqual(bb_info["Name"], "docker.io/library/busybox") + + # Now, check we can reach an arbitrary registry: quay.io + output, _ = self.emulator.run( + "skopeo inspect docker://quay.io/quay/busybox:latest", + timeout=60, + ) + skopeo_info = json.loads("".join(output)) + self.assertEqual(skopeo_info["Name"], "quay.io/quay/busybox")