blob: 7ffe8e5b77428c8bbff2c46fc88a2a647fa3e96a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
#!/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
|