forked from josch/mmdebstrap
75 lines
2.3 KiB
Bash
Executable file
75 lines
2.3 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
set -eu
|
|
|
|
if [ "${MMDEBSTRAP_VERBOSITY:-1}" -ge 3 ]; then
|
|
set -x
|
|
fi
|
|
|
|
rootdir="$1"
|
|
|
|
if [ -e "$rootdir/var/lib/dpkg/arch" ]; then
|
|
chrootarch=$(head -1 "$rootdir/var/lib/dpkg/arch")
|
|
else
|
|
chrootarch=$(dpkg --print-architecture)
|
|
fi
|
|
|
|
trusted=
|
|
eval "$(apt-config shell trusted Dir::Etc::trusted/f)"
|
|
trustedparts=
|
|
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 -r uri fname size hash; do
|
|
echo "processing $fname" >&2
|
|
if [ -e "$tmpdir/$fname" ]; then
|
|
echo "$tmpdir/$fname already exists" >&2
|
|
exit 1
|
|
fi
|
|
[ -z "$hash" ] && hash="Checksum-FileSize:$size"
|
|
env --chdir="$tmpdir" APT_CONFIG="$tmpfile" /usr/lib/apt/apt-helper download-file "$uri" "$fname" "$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.distrib"
|
|
cat << END > "$rootdir/usr/bin/dpkg"
|
|
#!/bin/sh
|
|
exec /usr/bin/eatmydata /usr/bin/dpkg.distrib "\$@"
|
|
END
|
|
chmod +x "$rootdir/usr/bin/dpkg"
|
|
cat << END >> "$rootdir/var/lib/dpkg/diversions"
|
|
/usr/bin/dpkg
|
|
/usr/bin/dpkg.distrib
|
|
:
|
|
END
|