From a85f6e63cfb226fa57bf1f4a075a9b0d372b154b Mon Sep 17 00:00:00 2001 From: Tiago Nobrega Date: Thu, 16 May 2024 16:47:29 +0200 Subject: [PATCH] feat(snap): expose skopeo as rockcraft.skopeo (#568) skopeo was already part of our UI because a lot of our tutorials referenced /snap/rockcraft/current/bin/skopeo directly, and this has been requested by users. --- docs/how-to/code/convert-to-pebble-layer/task.yaml | 2 +- docs/how-to/code/install-slice/task.yaml | 2 +- docs/how-to/code/migrate-to-chiselled-rock/task.yaml | 2 +- docs/tutorials/code/chisel/task.yaml | 2 +- docs/tutorials/code/hello-world/task.yaml | 2 +- docs/tutorials/code/node-app/task.yaml | 2 +- docs/tutorials/code/pyfiglet/task.yaml | 2 +- snap/snapcraft.yaml | 2 ++ tests/spread/foreign/big/task.yaml | 2 +- tests/spread/general/extension-django/task.yaml | 2 +- tests/spread/large/repo-overlay/task.yaml | 2 +- tests/spread/rockcraft/bare-base/task.yaml | 2 +- tests/spread/rockcraft/base-devel/task.yaml | 2 +- tests/spread/rockcraft/chisel/task.yaml | 2 +- tests/spread/rockcraft/craftctl/task.yaml | 2 +- tests/spread/rockcraft/entrypoint-service/task.yaml | 2 +- tests/spread/rockcraft/environment/task.yaml | 2 +- tests/spread/rockcraft/extension-flask/task.yaml | 2 +- tests/spread/rockcraft/health-checks/task.yaml | 2 +- tests/spread/rockcraft/init/task.yaml | 2 +- tests/spread/rockcraft/plugin-python-3.6/task.yaml | 2 +- tests/spread/rockcraft/plugin-python/task.yaml | 2 +- tests/spread/rockcraft/prune/check_layers.py | 2 +- tests/spread/rockcraft/repo-bare-base/task.yaml | 2 +- tests/spread/rockcraft/repo-ubuntu-base/task.yaml | 2 +- tests/spread/rockcraft/run-user-minimal/task.yaml | 2 +- tests/spread/rockcraft/run-user/task.yaml | 2 +- tests/spread/rockcraft/usrmerge-file-collision/task.yaml | 2 +- tests/spread/rockcraft/usrmerge/task.yaml | 2 +- 29 files changed, 30 insertions(+), 28 deletions(-) diff --git a/docs/how-to/code/convert-to-pebble-layer/task.yaml b/docs/how-to/code/convert-to-pebble-layer/task.yaml index ee2ba0a1f..8705a62f6 100644 --- a/docs/how-to/code/convert-to-pebble-layer/task.yaml +++ b/docs/how-to/code/convert-to-pebble-layer/task.yaml @@ -13,7 +13,7 @@ execute: | # [docs:pack-end] # [docs:skopeo] - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:custom-nginx-rock_latest_amd64.rock docker-daemon:custom-nginx-rock:latest + sudo rockcraft.skopeo --insecure-policy copy oci-archive:custom-nginx-rock_latest_amd64.rock docker-daemon:custom-nginx-rock:latest # [docs:skopeo-end] rm custom-nginx-rock_latest_amd64.rock diff --git a/docs/how-to/code/install-slice/task.yaml b/docs/how-to/code/install-slice/task.yaml index b8d94073c..442d5e2f3 100644 --- a/docs/how-to/code/install-slice/task.yaml +++ b/docs/how-to/code/install-slice/task.yaml @@ -42,7 +42,7 @@ execute: | # [docs:pack-end] # [docs:skopeo-copy] - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:custom-openssl-rock_0.0.1_amd64.rock docker-daemon:chisel-openssl:latest + sudo rockcraft.skopeo --insecure-policy copy oci-archive:custom-openssl-rock_0.0.1_amd64.rock docker-daemon:chisel-openssl:latest # [docs:skopeo-copy-end] # [docs:docker-run] diff --git a/docs/how-to/code/migrate-to-chiselled-rock/task.yaml b/docs/how-to/code/migrate-to-chiselled-rock/task.yaml index 3b28d9791..252ea0c33 100644 --- a/docs/how-to/code/migrate-to-chiselled-rock/task.yaml +++ b/docs/how-to/code/migrate-to-chiselled-rock/task.yaml @@ -46,7 +46,7 @@ execute: | docker images # [docs:skopeo-copy] - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:dotnet-runtime_chiselled_amd64.rock docker-daemon:dotnet-runtime:chiselled + sudo rockcraft.skopeo --insecure-policy copy oci-archive:dotnet-runtime_chiselled_amd64.rock docker-daemon:dotnet-runtime:chiselled # [docs:skopeo-copy-end] # [docs:inspect-rock] diff --git a/docs/tutorials/code/chisel/task.yaml b/docs/tutorials/code/chisel/task.yaml index 17c1aafa0..2177726d5 100644 --- a/docs/tutorials/code/chisel/task.yaml +++ b/docs/tutorials/code/chisel/task.yaml @@ -19,7 +19,7 @@ execute: | test -f chiselled-hello_latest_amd64.rock # [docs:skopeo-copy] - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:chiselled-hello_latest_amd64.rock docker-daemon:chiselled-hello:latest + sudo rockcraft.skopeo --insecure-policy copy oci-archive:chiselled-hello_latest_amd64.rock docker-daemon:chiselled-hello:latest # [docs:skopeo-copy-end] # [docs:docker-run] diff --git a/docs/tutorials/code/hello-world/task.yaml b/docs/tutorials/code/hello-world/task.yaml index 74dd01255..4111159ab 100644 --- a/docs/tutorials/code/hello-world/task.yaml +++ b/docs/tutorials/code/hello-world/task.yaml @@ -27,7 +27,7 @@ execute: | docker images # [docs:skopeo-copy] - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:hello_latest_amd64.rock docker-daemon:hello:latest + sudo rockcraft.skopeo --insecure-policy copy oci-archive:hello_latest_amd64.rock docker-daemon:hello:latest # [docs:skopeo-copy-end] rm hello_latest_amd64.rock diff --git a/docs/tutorials/code/node-app/task.yaml b/docs/tutorials/code/node-app/task.yaml index 6135889b8..58da9cfa6 100644 --- a/docs/tutorials/code/node-app/task.yaml +++ b/docs/tutorials/code/node-app/task.yaml @@ -18,7 +18,7 @@ execute: | docker images # [docs:skopeo-copy] - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:my-node-app_1.0_amd64.rock docker-daemon:my-node-app:1.0 + sudo rockcraft.skopeo --insecure-policy copy oci-archive:my-node-app_1.0_amd64.rock docker-daemon:my-node-app:1.0 # [docs:skopeo-copy-end] rm *.rock diff --git a/docs/tutorials/code/pyfiglet/task.yaml b/docs/tutorials/code/pyfiglet/task.yaml index 06384e64a..4f50e17e8 100644 --- a/docs/tutorials/code/pyfiglet/task.yaml +++ b/docs/tutorials/code/pyfiglet/task.yaml @@ -19,7 +19,7 @@ execute: | # [docs:build-rock-end] # [docs:skopeo-copy] - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:pyfiglet_0.7.6_amd64.rock docker-daemon:pyfiglet:0.7.6 + sudo rockcraft.skopeo --insecure-policy copy oci-archive:pyfiglet_0.7.6_amd64.rock docker-daemon:pyfiglet:0.7.6 # [docs:skopeo-copy-end] rm pyfiglet_0.7.6_amd64.rock diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 27b6fbb59..c6ca38fcc 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -16,6 +16,8 @@ environment: apps: rockcraft: command: bin/python $SNAP/bin/rockcraft + skopeo: + command: bin/skopeo build-packages: - libapt-pkg-dev diff --git a/tests/spread/foreign/big/task.yaml b/tests/spread/foreign/big/task.yaml index b2e4daf13..660046d8d 100644 --- a/tests/spread/foreign/big/task.yaml +++ b/tests/spread/foreign/big/task.yaml @@ -21,7 +21,7 @@ execute: | # copy image to docker docker images - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy "oci-archive:$ROCK" docker-daemon:big:latest + sudo rockcraft.skopeo --insecure-policy copy "oci-archive:$ROCK" docker-daemon:big:latest rm "$ROCK" docker images diff --git a/tests/spread/general/extension-django/task.yaml b/tests/spread/general/extension-django/task.yaml index a703a81b2..1730d65e5 100644 --- a/tests/spread/general/extension-django/task.yaml +++ b/tests/spread/general/extension-django/task.yaml @@ -13,7 +13,7 @@ execute: | # Ensure docker does not have this container image docker rmi --force example-django # Install container - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:example-django_0.1_amd64.rock docker-daemon:example-django:latest + sudo rockcraft.skopeo --insecure-policy copy oci-archive:example-django_0.1_amd64.rock docker-daemon:example-django:latest # Ensure container exists docker images example-django | MATCH "example-django" diff --git a/tests/spread/large/repo-overlay/task.yaml b/tests/spread/large/repo-overlay/task.yaml index f83a4e6ce..92e8e09e1 100644 --- a/tests/spread/large/repo-overlay/task.yaml +++ b/tests/spread/large/repo-overlay/task.yaml @@ -3,7 +3,7 @@ summary: package repositories in overlays test execute: | run_rockcraft pack - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:repo-overlay_0.1_amd64.rock docker-daemon:repo-overlay:0.1 + sudo rockcraft.skopeo --insecure-policy copy oci-archive:repo-overlay_0.1_amd64.rock docker-daemon:repo-overlay:0.1 docker images repo-overlay | MATCH "repo-overlay" diff --git a/tests/spread/rockcraft/bare-base/task.yaml b/tests/spread/rockcraft/bare-base/task.yaml index ed50c14ac..9957b0c54 100644 --- a/tests/spread/rockcraft/bare-base/task.yaml +++ b/tests/spread/rockcraft/bare-base/task.yaml @@ -8,7 +8,7 @@ execute: | # test container execution docker images - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:bare-base-test_latest_amd64.rock docker-daemon:bare-base-test:latest + sudo rockcraft.skopeo --insecure-policy copy oci-archive:bare-base-test_latest_amd64.rock docker-daemon:bare-base-test:latest rm bare-base-test_latest_amd64.rock docker images bare-base-test:latest id=$(docker run --rm -d bare-base-test) diff --git a/tests/spread/rockcraft/base-devel/task.yaml b/tests/spread/rockcraft/base-devel/task.yaml index 3418635a0..d310aeb00 100644 --- a/tests/spread/rockcraft/base-devel/task.yaml +++ b/tests/spread/rockcraft/base-devel/task.yaml @@ -25,7 +25,7 @@ execute: | # test container execution docker images - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy \ + sudo rockcraft.skopeo --insecure-policy copy \ oci-archive:base-devel_0.1_amd64.rock \ docker-daemon:base-devel:0.1 rm base-devel_0.1_amd64.rock diff --git a/tests/spread/rockcraft/chisel/task.yaml b/tests/spread/rockcraft/chisel/task.yaml index 3089e1f4b..22e03171f 100644 --- a/tests/spread/rockcraft/chisel/task.yaml +++ b/tests/spread/rockcraft/chisel/task.yaml @@ -10,7 +10,7 @@ execute: | # copy image to docker docker images - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy "oci-archive:$ROCK" "docker-daemon:$IMG_NAME:latest" + sudo rockcraft.skopeo --insecure-policy copy "oci-archive:$ROCK" "docker-daemon:$IMG_NAME:latest" rm "$ROCK" # Check that the file "md5sum" exists in "/bin". This file is provided diff --git a/tests/spread/rockcraft/craftctl/task.yaml b/tests/spread/rockcraft/craftctl/task.yaml index 82fe1331f..651e1d732 100644 --- a/tests/spread/rockcraft/craftctl/task.yaml +++ b/tests/spread/rockcraft/craftctl/task.yaml @@ -11,7 +11,7 @@ execute: | # test container execution docker images - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:craftctl-test_latest_craftctl.rock docker-daemon:craftctl-test:latest + sudo rockcraft.skopeo --insecure-policy copy oci-archive:craftctl-test_latest_craftctl.rock docker-daemon:craftctl-test:latest rm craftctl-test_latest_craftctl.rock docker images craftctl-test:latest docker run --rm --entrypoint /usr/bin/hello craftctl-test:latest diff --git a/tests/spread/rockcraft/entrypoint-service/task.yaml b/tests/spread/rockcraft/entrypoint-service/task.yaml index 8af1dba18..3e26e11e3 100644 --- a/tests/spread/rockcraft/entrypoint-service/task.yaml +++ b/tests/spread/rockcraft/entrypoint-service/task.yaml @@ -6,7 +6,7 @@ execute: | test -f entrypoint-service-test_latest_amd64.rock # test container execution - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:entrypoint-service-test_latest_amd64.rock docker-daemon:entrypoint-service-test:latest + sudo rockcraft.skopeo --insecure-policy copy oci-archive:entrypoint-service-test_latest_amd64.rock docker-daemon:entrypoint-service-test:latest rm entrypoint-service-test_latest*.rock docker images entrypoint-service-test:latest id=$(docker run -d entrypoint-service-test) diff --git a/tests/spread/rockcraft/environment/task.yaml b/tests/spread/rockcraft/environment/task.yaml index 31a3b23fd..c330d836f 100644 --- a/tests/spread/rockcraft/environment/task.yaml +++ b/tests/spread/rockcraft/environment/task.yaml @@ -9,7 +9,7 @@ execute: | # test container execution docker images - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:environment-test_latest_amd64v2.rock docker-daemon:environment-test:latest + sudo rockcraft.skopeo --insecure-policy copy oci-archive:environment-test_latest_amd64v2.rock docker-daemon:environment-test:latest rm environment-test_latest*.rock docker images environment-test:latest id=$(docker run --rm -d environment-test -v) diff --git a/tests/spread/rockcraft/extension-flask/task.yaml b/tests/spread/rockcraft/extension-flask/task.yaml index f40d93292..ab5c5e35d 100644 --- a/tests/spread/rockcraft/extension-flask/task.yaml +++ b/tests/spread/rockcraft/extension-flask/task.yaml @@ -10,7 +10,7 @@ execute: | # Ensure docker does not have this container image docker rmi --force flask-extension # Install container - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:flask-extension_0.1_amd64.rock docker-daemon:flask-extension:latest + sudo rockcraft.skopeo --insecure-policy copy oci-archive:flask-extension_0.1_amd64.rock docker-daemon:flask-extension:latest # Ensure container exists docker images flask-extension | MATCH "flask-extension" diff --git a/tests/spread/rockcraft/health-checks/task.yaml b/tests/spread/rockcraft/health-checks/task.yaml index f8bf34f71..99c7cc4ca 100644 --- a/tests/spread/rockcraft/health-checks/task.yaml +++ b/tests/spread/rockcraft/health-checks/task.yaml @@ -8,7 +8,7 @@ execute: | # test container execution docker images - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:healthy-rock_latest_amd64.rock docker-daemon:healthy-rock:latest + sudo rockcraft.skopeo --insecure-policy copy oci-archive:healthy-rock_latest_amd64.rock docker-daemon:healthy-rock:latest rm healthy-rock_latest_amd64.rock docker images healthy-rock:latest id=$(docker run --rm -d healthy-rock) diff --git a/tests/spread/rockcraft/init/task.yaml b/tests/spread/rockcraft/init/task.yaml index afd8ee5fa..bc4f37199 100644 --- a/tests/spread/rockcraft/init/task.yaml +++ b/tests/spread/rockcraft/init/task.yaml @@ -10,7 +10,7 @@ execute: | # test container execution docker images - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:my-rock-name_0.1_amd64.rock docker-daemon:my-rock-name:0.1 + sudo rockcraft.skopeo --insecure-policy copy oci-archive:my-rock-name_0.1_amd64.rock docker-daemon:my-rock-name:0.1 rm my-rock-name_0.1_amd64.rock docker images my-rock-name:0.1 docker run --rm my-rock-name:0.1 exec bash -c 'echo Hello World' diff --git a/tests/spread/rockcraft/plugin-python-3.6/task.yaml b/tests/spread/rockcraft/plugin-python-3.6/task.yaml index 0ffaa2bc4..cf262e32a 100644 --- a/tests/spread/rockcraft/plugin-python-3.6/task.yaml +++ b/tests/spread/rockcraft/plugin-python-3.6/task.yaml @@ -13,7 +13,7 @@ execute: | # Build the rock & load it into docker run_rockcraft pack ROCK=$(ls ./*.rock) - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:"${ROCK}" docker-daemon:${IMAGE} + sudo rockcraft.skopeo --insecure-policy copy oci-archive:"${ROCK}" docker-daemon:${IMAGE} rm "${ROCK}" docker run --rm $IMAGE exec python3.6 --version | MATCH "Python 3.6" diff --git a/tests/spread/rockcraft/plugin-python/task.yaml b/tests/spread/rockcraft/plugin-python/task.yaml index 3bf5d118d..5138f2b26 100644 --- a/tests/spread/rockcraft/plugin-python/task.yaml +++ b/tests/spread/rockcraft/plugin-python/task.yaml @@ -22,7 +22,7 @@ execute: | # Build the rock & load it into docker run_rockcraft pack test -f ${ROCK_FILE} - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:${ROCK_FILE} docker-daemon:${IMAGE} + sudo rockcraft.skopeo --insecure-policy copy oci-archive:${ROCK_FILE} docker-daemon:${IMAGE} docker images rm ${ROCK_FILE} diff --git a/tests/spread/rockcraft/prune/check_layers.py b/tests/spread/rockcraft/prune/check_layers.py index f44873c60..3abe6873f 100644 --- a/tests/spread/rockcraft/prune/check_layers.py +++ b/tests/spread/rockcraft/prune/check_layers.py @@ -52,7 +52,7 @@ def _get_tar_file(tarinfo: tarfile.TarInfo, sha: str, dest_dir: Path) -> Path: rock_name = sys.argv[1] inspect = subprocess.check_output( - ["/snap/rockcraft/current/bin/skopeo", "inspect", f"oci-archive:{rock_name}"] + ["rockcraft.skopeo", "inspect", f"oci-archive:{rock_name}"] ) as_json = json.loads(inspect) diff --git a/tests/spread/rockcraft/repo-bare-base/task.yaml b/tests/spread/rockcraft/repo-bare-base/task.yaml index 794a5bf1d..03b1158dd 100644 --- a/tests/spread/rockcraft/repo-bare-base/task.yaml +++ b/tests/spread/rockcraft/repo-bare-base/task.yaml @@ -9,7 +9,7 @@ execute: | # Ensure docker does not have this container image docker rmi --force apt-repo-static-test # Install container - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:apt-repo-static-test_latest_amd64.rock docker-daemon:apt-repo-static-test:latest + sudo rockcraft.skopeo --insecure-policy copy oci-archive:apt-repo-static-test_latest_amd64.rock docker-daemon:apt-repo-static-test:latest # Ensure container exists docker images apt-repo-static-test | MATCH "apt-repo-static-test" diff --git a/tests/spread/rockcraft/repo-ubuntu-base/task.yaml b/tests/spread/rockcraft/repo-ubuntu-base/task.yaml index 2dc789e63..d196a3fd3 100644 --- a/tests/spread/rockcraft/repo-ubuntu-base/task.yaml +++ b/tests/spread/rockcraft/repo-ubuntu-base/task.yaml @@ -9,7 +9,7 @@ execute: | # Ensure docker does not have this container docker rmi --force apt-repo-test # Install container - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:apt-repo-test_latest_amd64.rock docker-daemon:apt-repo-test:latest + sudo rockcraft.skopeo --insecure-policy copy oci-archive:apt-repo-test_latest_amd64.rock docker-daemon:apt-repo-test:latest # Ensure container exists docker images apt-repo-test | MATCH "apt-repo-test" diff --git a/tests/spread/rockcraft/run-user-minimal/task.yaml b/tests/spread/rockcraft/run-user-minimal/task.yaml index e8240817c..851e9df9c 100644 --- a/tests/spread/rockcraft/run-user-minimal/task.yaml +++ b/tests/spread/rockcraft/run-user-minimal/task.yaml @@ -9,7 +9,7 @@ execute: | # Ensure docker does not have this container image docker rmi --force run-user-minimal-test # Install container - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy \ + sudo rockcraft.skopeo --insecure-policy copy \ oci-archive:run-user-minimal-test_latest_amd64.rock \ docker-daemon:run-user-minimal-test:latest # Ensure container exists diff --git a/tests/spread/rockcraft/run-user/task.yaml b/tests/spread/rockcraft/run-user/task.yaml index 5b5571653..378279028 100644 --- a/tests/spread/rockcraft/run-user/task.yaml +++ b/tests/spread/rockcraft/run-user/task.yaml @@ -9,7 +9,7 @@ execute: | # Ensure docker does not have this container image docker rmi --force run-user-test # Install container - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:run-user-test_latest_amd64.rock docker-daemon:run-user-test:latest + sudo rockcraft.skopeo --insecure-policy copy oci-archive:run-user-test_latest_amd64.rock docker-daemon:run-user-test:latest # Ensure container exists docker images run-user-test | MATCH "run-user-test" docker inspect run-user-test --format '{{.Config.User}}' | MATCH "_daemon_" diff --git a/tests/spread/rockcraft/usrmerge-file-collision/task.yaml b/tests/spread/rockcraft/usrmerge-file-collision/task.yaml index 5e72474f5..804c661b5 100644 --- a/tests/spread/rockcraft/usrmerge-file-collision/task.yaml +++ b/tests/spread/rockcraft/usrmerge-file-collision/task.yaml @@ -9,7 +9,7 @@ execute: | # copy image to docker docker images - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:"$ROCK" docker-daemon:usrmerge:latest + sudo rockcraft.skopeo --insecure-policy copy oci-archive:"$ROCK" docker-daemon:usrmerge:latest rm "$ROCK" docker images usrmerge:latest diff --git a/tests/spread/rockcraft/usrmerge/task.yaml b/tests/spread/rockcraft/usrmerge/task.yaml index ab4dde6ec..1c2a86885 100644 --- a/tests/spread/rockcraft/usrmerge/task.yaml +++ b/tests/spread/rockcraft/usrmerge/task.yaml @@ -9,7 +9,7 @@ execute: | # copy image to docker docker images - sudo /snap/rockcraft/current/bin/skopeo --insecure-policy copy oci-archive:"$ROCK" docker-daemon:usrmerge:latest + sudo rockcraft.skopeo --insecure-policy copy oci-archive:"$ROCK" docker-daemon:usrmerge:latest rm "$ROCK" docker images usrmerge:latest