You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mmdebstrap/hooks/eatmydata/extract.sh

64 lines
2.1 KiB
Bash

#!/bin/sh
set -exu
rootdir="$1"
if [ -e "$rootdir/var/lib/dpkg/arch" ]; then
chrootarch=$(head -1 "$rootdir/var/lib/dpkg/arch")
else
chrootarch=$(dpkg --print-architecture)
fi
eval $(apt-config shell trusted Dir::Etc::trusted/f)
eval $(apt-config shell trustedparts Dir::Etc::trustedparts/d)
tmpfile=$(mktemp --tmpdir="$rootdir/tmp")
cat << END > "$tmpfile"
Apt::Architecture "$chrootarch";
Apt::Architectures "$chrootarch";
Dir "$rootdir";
Dir::Etc::Trusted "$trusted";
Dir::Etc::TrustedParts "$trustedparts";
END
# we run "apt-get download --print-uris" in a temporary directory, to make sure
# that the packages do not already exist in the current directory, or otherwise
# nothing will be printed for them
tmpdir=$(mktemp --directory --tmpdir="$rootdir/tmp")
env --chdir="$tmpdir" APT_CONFIG="$tmpfile" apt-get download --print-uris eatmydata libeatmydata1 \
| sed -ne "s/^'\([^']\+\)'\s\+\([^\s]\+\)\s\+\([0-9]\+\)\s\+\(SHA256:[a-f0-9]\+\)$/\1 \2 \3 \4/p" \
| while read uri fname size hash; do
echo "processing $fname" >&2
if [ -e "$tmpdir/$fname" ]; then
echo "$tmpdir/$fname already exists" >&2
exit 1
fi
env --chdir="$tmpdir" APT_CONFIG="$tmpfile" /usr/lib/apt/apt-helper download-file "$uri" "$fname" Checksum-FileSize:"$size" "$hash"
case "$fname" in
eatmydata_*_all.deb)
mkdir -p "$rootdir/usr/bin"
dpkg-deb --fsys-tarfile "$tmpdir/$fname" \
| tar --directory="$rootdir/usr/bin" --strip-components=3 --extract --verbose ./usr/bin/eatmydata
;;
libeatmydata1_*_$chrootarch.deb)
libdir="/usr/lib/$(dpkg-architecture -a $chrootarch -q DEB_HOST_MULTIARCH)"
mkdir -p "$rootdir$libdir"
dpkg-deb --fsys-tarfile "$tmpdir/$fname" \
| tar --directory="$rootdir$libdir" --strip-components=4 --extract --verbose --wildcards ".$libdir/libeatmydata.so*"
;;
*)
echo "unexpected filename: $fname" >&2
exit 1
;;
esac
rm "$tmpdir/$fname"
done
rm "$tmpfile"
rmdir "$tmpdir"
mv "$rootdir/usr/bin/dpkg" "$rootdir/usr/bin/dpkg.orig"
cat << END > "$rootdir/usr/bin/dpkg"
#!/bin/sh
exec /usr/bin/eatmydata /usr/bin/dpkg.orig "\$@"
END
chmod +x "$rootdir/usr/bin/dpkg"