Skip to content

Commit

Permalink
Fix Supervisor image corruption detection (#2953)
Browse files Browse the repository at this point in the history
* Fix Supervisor image corruption detection

When multiple images match the reference, multiple IDs are passed as a
single argument to docker image rm, leading to an error:
Error response from daemon: page not found

Make sure to pass the ids as separate argument to make the delete work
in any case.

* Cleanup reusing Supervisor from an old/unused reference

As noted in #2113, we don't need this logic anymore after a major OS
releases. So simply drop the logic to also make the image corruption
detection work again.

* Make sure image IDs are sorted to make them unique
  • Loading branch information
agners authored Nov 30, 2023
1 parent 2c6d0de commit c59c887
Showing 1 changed file with 7 additions and 9 deletions.
16 changes: 7 additions & 9 deletions buildroot-external/rootfs-overlay/usr/sbin/hassos-supervisor
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,20 @@ if [ -f "${SUPERVISOR_STARTUP_MARKER}" ]; then
echo "[WARNING] Supervisor container did not remove the startup marker file. Assuming container image or container corruption."
docker container rm --force hassio_supervisor || true
SUPERVISOR_CONTAINER_ID=""

# Make sure we delete all supervisor images
SUPERVISOR_IMAGE_IDS=$(docker images --no-trunc --filter "reference=${SUPERVISOR_IMAGE}" --format "{{.ID}}" | uniq || echo "")
docker image rm --force "${SUPERVISOR_IMAGE_IDS}" || true
SUPERVISOR_IMAGE_IDS=$(docker images --no-trunc --filter "reference=${SUPERVISOR_IMAGE}" --format "{{.ID}}" | sort | uniq || echo "")
# Intended splitting of SUPERVISOR_IMAGE_IDS
# Busybox sh doesn't support arrays
# shellcheck disable=SC2086
docker image rm --force ${SUPERVISOR_IMAGE_IDS} || true
SUPERVISOR_IMAGE_ID=""
fi

# If Supervisor image is missing, pull it
mkdir -p "$(dirname ${SUPERVISOR_STARTUP_MARKER})"
touch ${SUPERVISOR_STARTUP_MARKER}
if [ -z "${SUPERVISOR_IMAGE_ID}" ]; then
# Try tagging legacy image with current name and try get its ID
echo "[WARNING] Supervisor image missing, trying to use the legacy image name"
docker tag "homeassistant/${SUPERVISOR_ARCH}-hassio-supervisor:latest" "${SUPERVISOR_IMAGE}:latest" || true
SUPERVISOR_IMAGE_ID=$(docker images --no-trunc --filter "reference=${SUPERVISOR_IMAGE}:latest" --format "{{.ID}}" || echo "")
fi

# If Supervisor image is missing, pull it
if [ -z "${SUPERVISOR_IMAGE_ID}" ]; then
# Get the latest from update information
# Using updater information instead of config. If the config version is
Expand Down

0 comments on commit c59c887

Please sign in to comment.