mirror of
https://github.com/containers/podman.git
synced 2025-08-01 07:40:22 +08:00
system test image: build it multiarch
buildah now supports running under emulation[1] as well as creating manifests. Use those features to create a multiarch testimage that can be used to test podman on other arches. [1] on Fedora 33, this requires the qemu-user-static package We also build a new :00000001 image, replacing :00000000, because (sigh) some tests try to run 'true' in the container. Include instructions on building said image. Signed-off-by: Ed Santiago <santiago@redhat.com>
This commit is contained in:
@ -139,7 +139,7 @@ echo $rand | 0 | $rand
|
|||||||
is "$output" "" "--pull=never [present]: no output"
|
is "$output" "" "--pull=never [present]: no output"
|
||||||
|
|
||||||
# Now test with a remote image which we don't have present (the 00 tag)
|
# Now test with a remote image which we don't have present (the 00 tag)
|
||||||
NONLOCAL_IMAGE="$PODMAN_TEST_IMAGE_REGISTRY/$PODMAN_TEST_IMAGE_USER/$PODMAN_TEST_IMAGE_NAME:00000000"
|
NONLOCAL_IMAGE="$PODMAN_NONLOCAL_IMAGE_FQN"
|
||||||
|
|
||||||
run_podman 125 run --pull=never $NONLOCAL_IMAGE true
|
run_podman 125 run --pull=never $NONLOCAL_IMAGE true
|
||||||
is "$output" "Error: unable to find a name and tag match for $NONLOCAL_IMAGE in repotags: no such image" "--pull=never [with image not present]: error"
|
is "$output" "Error: unable to find a name and tag match for $NONLOCAL_IMAGE in repotags: no such image" "--pull=never [with image not present]: error"
|
||||||
@ -175,7 +175,7 @@ echo $rand | 0 | $rand
|
|||||||
# 'run --rmi' deletes the image in the end unless it's used by another container
|
# 'run --rmi' deletes the image in the end unless it's used by another container
|
||||||
@test "podman run --rmi" {
|
@test "podman run --rmi" {
|
||||||
# Name of a nonlocal image. It should be pulled in by the first 'run'
|
# Name of a nonlocal image. It should be pulled in by the first 'run'
|
||||||
NONLOCAL_IMAGE="$PODMAN_TEST_IMAGE_REGISTRY/$PODMAN_TEST_IMAGE_USER/$PODMAN_TEST_IMAGE_NAME:00000000"
|
NONLOCAL_IMAGE="$PODMAN_NONLOCAL_IMAGE_FQN"
|
||||||
run_podman 1 image exists $NONLOCAL_IMAGE
|
run_podman 1 image exists $NONLOCAL_IMAGE
|
||||||
|
|
||||||
# Run a container, without --rm; this should block subsequent --rmi
|
# Run a container, without --rm; this should block subsequent --rmi
|
||||||
|
@ -305,8 +305,10 @@ Cmd[0] | /bin/mydefaultcmd
|
|||||||
Cmd[1] | $s_echo
|
Cmd[1] | $s_echo
|
||||||
WorkingDir | $workdir
|
WorkingDir | $workdir
|
||||||
Labels.$label_name | $label_value
|
Labels.$label_name | $label_value
|
||||||
Labels.\"io.buildah.version\" | $buildah_version
|
|
||||||
"
|
"
|
||||||
|
# FIXME: 2021-02-24: Fixed in buildah #3036; reenable this once podman
|
||||||
|
# vendors in a newer buildah!
|
||||||
|
# Labels.\"io.buildah.version\" | $buildah_version
|
||||||
|
|
||||||
parse_table "$tests" | while read field expect; do
|
parse_table "$tests" | while read field expect; do
|
||||||
actual=$(jq -r ".[0].Config.$field" <<<"$output")
|
actual=$(jq -r ".[0].Config.$field" <<<"$output")
|
||||||
|
@ -12,6 +12,9 @@
|
|||||||
# still need a fedora image for that.
|
# still need a fedora image for that.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# Buildah binary
|
||||||
|
BUILDAH=${BUILDAH:-buildah}
|
||||||
|
|
||||||
# Tag for this new image
|
# Tag for this new image
|
||||||
YMD=$(date +%Y%m%d)
|
YMD=$(date +%Y%m%d)
|
||||||
|
|
||||||
@ -58,7 +61,8 @@ chmod 755 pause
|
|||||||
# - check for updates @ https://hub.docker.com/_/alpine
|
# - check for updates @ https://hub.docker.com/_/alpine
|
||||||
# busybox-extras provides httpd needed in 500-networking.bats
|
# busybox-extras provides httpd needed in 500-networking.bats
|
||||||
cat >Containerfile <<EOF
|
cat >Containerfile <<EOF
|
||||||
FROM docker.io/library/alpine:3.12.0
|
ARG ARCH=please-override-arch
|
||||||
|
FROM docker.io/\${ARCH}/alpine:3.12.0
|
||||||
RUN apk add busybox-extras
|
RUN apk add busybox-extras
|
||||||
ADD testimage-id pause /home/podman/
|
ADD testimage-id pause /home/podman/
|
||||||
LABEL created_by=$create_script
|
LABEL created_by=$create_script
|
||||||
@ -69,26 +73,44 @@ EOF
|
|||||||
|
|
||||||
# --squash-all : needed by 'tree' test in 070-build.bats
|
# --squash-all : needed by 'tree' test in 070-build.bats
|
||||||
podman rmi -f testimage &> /dev/null || true
|
podman rmi -f testimage &> /dev/null || true
|
||||||
podman build --squash-all -t testimage .
|
|
||||||
|
# We need to use buildah because (as of 2021-02-23) only buildah has --manifest
|
||||||
|
# and because Dan says arch emulation is not currently working on podman
|
||||||
|
# (no further details).
|
||||||
|
# Arch emulation on Fedora requires the qemu-user-static package.
|
||||||
|
for arch in amd64 ppc64le s390x;do
|
||||||
|
${BUILDAH} bud \
|
||||||
|
--arch=$arch \
|
||||||
|
--build-arg ARCH=$arch \
|
||||||
|
--manifest=testimage \
|
||||||
|
--squash \
|
||||||
|
.
|
||||||
|
done
|
||||||
|
|
||||||
# Clean up
|
# Clean up
|
||||||
cd /tmp
|
cd /tmp
|
||||||
rm -rf $tmpdir
|
rm -rf $tmpdir
|
||||||
|
|
||||||
# Tag and push to quay.
|
# Tag image and push (all arches) to quay.
|
||||||
podman tag testimage quay.io/libpod/testimage:$YMD
|
remote_tag=quay.io/libpod/testimage:$YMD
|
||||||
podman push quay.io/libpod/testimage:$YMD
|
podman tag testimage ${remote_tag}
|
||||||
|
${BUILDAH} manifest push --all ${remote_tag} docker://${remote_tag}
|
||||||
|
|
||||||
# Side note: there should always be a testimage tagged ':00000000'
|
# Side note: there should always be a testimage tagged ':0000000<X>'
|
||||||
# (eight zeroes) in the same location; this is used by tests which
|
# (eight digits, zero-padded sequence ID) in the same location; this is
|
||||||
# need to pull a non-locally-cached image. This image will rarely
|
# used by tests which need to pull a non-locally-cached image. This
|
||||||
# if ever need to change, nor in fact does it even have to be a
|
# image will rarely if ever need to change, nor in fact does it even
|
||||||
# copy of this testimage since all we use it for is 'true'.
|
# have to be a copy of this testimage since all we use it for is 'true'.
|
||||||
|
# However, it does need to be multiarch :-(
|
||||||
#
|
#
|
||||||
# As of 2020-09-02 it is simply busybox, because it is super small:
|
# As of 2021-02-24 it is simply busybox, because it is super small,
|
||||||
|
# but it's complicated because of multiarch:
|
||||||
#
|
#
|
||||||
# podman pull docker.io/library/busybox:1.32.0
|
# img=quay.io/libpod/testimage:00000001
|
||||||
# podman tag docker.io/library/busybox:1.32.0 \
|
# buildah manifest create $img
|
||||||
# quay.io/libpod/testimage:00000000
|
# for arch in amd64 ppc64le s390x;do
|
||||||
# podman push quay.io/libpod/testimage:00000000
|
# buildah pull --arch $arch docker.io/$arch/busybox:1.32.0
|
||||||
|
# buildah manifest add $img docker.io/$arch/busybox:1.32.0
|
||||||
|
# done
|
||||||
|
# buildah manifest push --all $img docker://$img
|
||||||
#
|
#
|
||||||
|
@ -7,9 +7,14 @@ PODMAN=${PODMAN:-podman}
|
|||||||
PODMAN_TEST_IMAGE_REGISTRY=${PODMAN_TEST_IMAGE_REGISTRY:-"quay.io"}
|
PODMAN_TEST_IMAGE_REGISTRY=${PODMAN_TEST_IMAGE_REGISTRY:-"quay.io"}
|
||||||
PODMAN_TEST_IMAGE_USER=${PODMAN_TEST_IMAGE_USER:-"libpod"}
|
PODMAN_TEST_IMAGE_USER=${PODMAN_TEST_IMAGE_USER:-"libpod"}
|
||||||
PODMAN_TEST_IMAGE_NAME=${PODMAN_TEST_IMAGE_NAME:-"testimage"}
|
PODMAN_TEST_IMAGE_NAME=${PODMAN_TEST_IMAGE_NAME:-"testimage"}
|
||||||
PODMAN_TEST_IMAGE_TAG=${PODMAN_TEST_IMAGE_TAG:-"20200929"}
|
PODMAN_TEST_IMAGE_TAG=${PODMAN_TEST_IMAGE_TAG:-"20210223"}
|
||||||
PODMAN_TEST_IMAGE_FQN="$PODMAN_TEST_IMAGE_REGISTRY/$PODMAN_TEST_IMAGE_USER/$PODMAN_TEST_IMAGE_NAME:$PODMAN_TEST_IMAGE_TAG"
|
PODMAN_TEST_IMAGE_FQN="$PODMAN_TEST_IMAGE_REGISTRY/$PODMAN_TEST_IMAGE_USER/$PODMAN_TEST_IMAGE_NAME:$PODMAN_TEST_IMAGE_TAG"
|
||||||
|
|
||||||
|
# Remote image that we *DO NOT* fetch or keep by default; used for testing pull
|
||||||
|
# This changed from 0 to 1 on 2021-02-24 due to multiarch considerations; it
|
||||||
|
# should change only very rarely.
|
||||||
|
PODMAN_NONLOCAL_IMAGE_FQN="$PODMAN_TEST_IMAGE_REGISTRY/$PODMAN_TEST_IMAGE_USER/$PODMAN_TEST_IMAGE_NAME:00000001"
|
||||||
|
|
||||||
# Because who wants to spell that out each time?
|
# Because who wants to spell that out each time?
|
||||||
IMAGE=$PODMAN_TEST_IMAGE_FQN
|
IMAGE=$PODMAN_TEST_IMAGE_FQN
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user