set -xeuo pipefail
shopt -s inherit_errexit
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
. "${SCRIPT_DIR}/lib.sh"
TARGET_IMAGE="quay.io/fedora/fedora-coreos:stable"
CHUNKED_IMAGE="localhost/fcos-chunked:test"
output_dir="${OUTPUT_DIR:?}"
cleanup() {
cleanup_images "${CHUNKED_IMAGE}"
}
trap cleanup EXIT
podman pull "${TARGET_IMAGE}"
set +x
config_str=$(podman inspect "${TARGET_IMAGE}")
set -x
buildah_build \
--from "${TARGET_IMAGE}" --build-arg CHUNKAH="${CHUNKAH_IMG:?}" \
--build-arg CHUNKAH_CONFIG_STR="${config_str}" \
--build-arg "CHUNKAH_ARGS=-v --prune /sysroot/ --max-layers 96 --write-peak-mem-to /run/output/peak-mem --write-manifest-to /run/output/manifest.json --trace-logfile /run/output/trace.log" \
-v "${output_dir}:/run/output" \
-t "${CHUNKED_IMAGE}" "${REPO_ROOT}/Containerfile.splitter"
podman run --rm "${CHUNKED_IMAGE}" cat /etc/os-release | grep CoreOS
assert_has_components "${CHUNKED_IMAGE}" "rpm/kernel" "rpm/systemd" "rpm/ignition" "rpm/podman"
assert_layer_count "${CHUNKED_IMAGE}" 96
unclaimed_size=$(jq '.components["chunkah/unclaimed"].size' "${output_dir}/manifest.json")
[[ -n "${unclaimed_size}" ]]
if [[ ${unclaimed_size} -gt 5242880 ]]; then
echo "ERROR: unclaimed size ${unclaimed_size} exceeds 5MB"
jq '.components["chunkah/unclaimed"]' "${output_dir}/manifest.json"
exit 1
fi
jq < "${output_dir}/manifest.json" -e \
'.components["rpm/selinux-policy"].files[]
| select(test("/etc/selinux/targeted/active/modules/100/systemd/cil"))' > /dev/null
shim_dir=$(podman run --rm "${CHUNKED_IMAGE}" ls /usr/lib/efi/shim)
jq < "${output_dir}/manifest.json" --arg subdir "${shim_dir}" -e \
'.components["rpm/shim"].files[]
| select(test("/usr/lib/efi/shim/" + $subdir + "/EFI/fedora/shim.efi"))' > /dev/null
size_original=$(podman image inspect "${TARGET_IMAGE}" | jq '.[0].Size')
size_chunked=$(podman image inspect "${CHUNKED_IMAGE}" | jq '.[0].Size')
max_size=$((size_original * 101 / 100))
[[ ${size_chunked} -le ${max_size} ]]
assert_no_diff "${TARGET_IMAGE}" "${CHUNKED_IMAGE}" --skip /sysroot/
peak_mem_bytes=$(cat "${output_dir}/peak-mem")
[[ ${peak_mem_bytes} -le 209715200 ]]
podman run --rm "${CHUNKED_IMAGE}" bootc container lint