Ensure .deb compression
This commit is contained in:
parent
c354c11f77
commit
fc0fcff7a6
1
Makefile
1
Makefile
|
@ -220,6 +220,7 @@ push: # I=<image> : Push Riju image to Docker registry
|
||||||
|
|
||||||
upload: # L=<lang> T=<type> : Upload .deb to S3
|
upload: # L=<lang> T=<type> : Upload .deb to S3
|
||||||
@: $${L} $${T} $${S3_BUCKET}
|
@: $${L} $${T} $${S3_BUCKET}
|
||||||
|
tools/ensure-deb-compressed.bash
|
||||||
aws s3 rm --recursive $(S3_HASH)
|
aws s3 rm --recursive $(S3_HASH)
|
||||||
aws s3 cp $(BUILD)/$(DEB) $(S3_DEB)
|
aws s3 cp $(BUILD)/$(DEB) $(S3_DEB)
|
||||||
hash="$$(dpkg-deb -f $(BUILD)/$(DEB) Riju-Script-Hash | grep .)"; aws s3 cp - "$(S3_HASH)/$${hash}" < /dev/null
|
hash="$$(dpkg-deb -f $(BUILD)/$(DEB) Riju-Script-Hash | grep .)"; aws s3 cp - "$(S3_HASH)/$${hash}" < /dev/null
|
||||||
|
|
|
@ -0,0 +1,76 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
: ${L} ${T}
|
||||||
|
|
||||||
|
deb="build/${T}/${L}/riju-${T}-${L}.deb"
|
||||||
|
tmp="build/${T}/${L}/ar-tmp"
|
||||||
|
|
||||||
|
rm -rf "${tmp}"
|
||||||
|
|
||||||
|
files="$(ar t "${deb}" | grep -F .tar | grep -Fv .xz || true)"
|
||||||
|
|
||||||
|
if [[ -z "${files}" ]]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
du -sh "${deb}"
|
||||||
|
|
||||||
|
echo >&2 "found files in ${deb} needing recompression:"
|
||||||
|
echo "${files}" | sed >&2 's/^/ /'
|
||||||
|
|
||||||
|
echo >&2 "extracting ${deb} to ${tmp}..."
|
||||||
|
mkdir -p "${tmp}"
|
||||||
|
ar xv "${deb}" --output "${tmp}" | sed >&2 's/^/ /'
|
||||||
|
|
||||||
|
echo >&2 "recompressing extracted files..."
|
||||||
|
|
||||||
|
processed_files=()
|
||||||
|
while read file; do
|
||||||
|
if echo "${file}" | grep -F .tar | grep -Fvq .xz; then
|
||||||
|
ext="$(echo "${file}" | sed -E 's/^.+\.tar//')"
|
||||||
|
case "${ext}" in
|
||||||
|
"")
|
||||||
|
echo >&2 " ${file} => ${file}.xz"
|
||||||
|
xz "${tmp}/${file}"
|
||||||
|
processed_files=("${processed_files[@]}" "${file}.xz")
|
||||||
|
;;
|
||||||
|
".gz")
|
||||||
|
echo >&2 " ${file} => ${file%.gz}.xz"
|
||||||
|
gunzip "${tmp}/${file}" -c | xz - > "${tmp}/${file%.gz}"
|
||||||
|
rm "${tmp}/${file}"
|
||||||
|
processed_files=("${processed_files[@]}" "${file%.gz}")
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo >&2 " !! unknown file extension in ${file}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
processed_files=("${processed_files[@]}" "${file}")
|
||||||
|
fi
|
||||||
|
done < <(ar t "${deb}")
|
||||||
|
|
||||||
|
# NB we need to keep track of the processed_files array because the
|
||||||
|
# order needs to be preserved, surprisingly enough:
|
||||||
|
# https://ubuntuforums.org/archive/index.php/t-1481153.html
|
||||||
|
|
||||||
|
echo >&2 "recreating archive at ${deb}.tmp..."
|
||||||
|
pushd "${tmp}" >/dev/null
|
||||||
|
ar rcv "../$(basename "${deb}").tmp" "${processed_files[@]}" | sed 's/^/ /'
|
||||||
|
popd >/dev/null
|
||||||
|
|
||||||
|
echo >&2 "cleaning up ${tmp}..."
|
||||||
|
rm -rf "${tmp}"
|
||||||
|
|
||||||
|
echo >&2 "renaming ${deb}.tmp => ${deb}..."
|
||||||
|
mv "${deb}.tmp" "${deb}"
|
||||||
|
|
||||||
|
files="$(ar t "${deb}" | grep -F .tar | grep -Fv .xz || true)"
|
||||||
|
|
||||||
|
if [[ -n "${files}" ]]; then
|
||||||
|
echo >&2 "error: still found files in ${deb} needing recompression:"
|
||||||
|
echo "${files}" | sed >&2 's/^/ /'
|
||||||
|
exit 1
|
||||||
|
fi
|
Loading…
Reference in New Issue