65 lines
1.6 KiB
Bash
Executable file
65 lines
1.6 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
set -eu
|
|
|
|
if [ "${MMDEBSTRAP_VERBOSITY:-1}" -ge 3 ]; then
|
|
set -x
|
|
fi
|
|
|
|
rootdir="$1"
|
|
|
|
# process all configured apt repositories
|
|
env APT_CONFIG="$MMDEBSTRAP_APT_CONFIG" apt-get indextargets --no-release-info --format '$(REPO_URI)' \
|
|
| sed -ne 's/^file:\/\+//p' \
|
|
| sort -u \
|
|
| while read -r path; do
|
|
mkdir -p "$rootdir/run/mmdebstrap"
|
|
case $MMDEBSTRAP_MODE in
|
|
root|unshare)
|
|
echo "bind-mounting /$path into the chroot" >&2
|
|
mkdir -p "$rootdir/$path"
|
|
mount -o ro,bind "/$path" "$rootdir/$path"
|
|
;;
|
|
*)
|
|
echo "copying /$path into the chroot" >&2
|
|
mkdir -p "$rootdir/$(dirname "$path")"
|
|
cp -av "/$path" "$rootdir/$(dirname "$path")"
|
|
;;
|
|
esac
|
|
printf '/%s\0' "$path" >> "$rootdir/run/mmdebstrap/file-mirror-automount"
|
|
done
|
|
|
|
# process all files given via --include
|
|
set -f # turn off pathname expansion
|
|
IFS=',' # split by comma
|
|
for pkg in $MMDEBSTRAP_INCLUDE; do
|
|
set +f; unset IFS
|
|
case $pkg in
|
|
./*|../*|/*) : ;; # we are interested in this case
|
|
*) continue ;; # not a file
|
|
esac
|
|
# undo escaping
|
|
pkg="$(printf '%s' "$pkg" | sed 's/%2C/,/g; s/%25/%/g')"
|
|
# check for existance
|
|
if [ ! -f "$pkg" ]; then
|
|
echo "$pkg does not exist" >&2
|
|
continue
|
|
fi
|
|
# make path absolute
|
|
pkg="$(realpath "$pkg")"
|
|
mkdir -p "$rootdir/run/mmdebstrap"
|
|
mkdir -p "$rootdir/$(dirname "$pkg")"
|
|
case $MMDEBSTRAP_MODE in
|
|
root|unshare)
|
|
echo "bind-mounting $pkg into the chroot" >&2
|
|
touch "$rootdir/$pkg"
|
|
mount -o bind "$pkg" "$rootdir/$pkg"
|
|
;;
|
|
*)
|
|
echo "copying $pkg into the chroot" >&2
|
|
cp -av "$pkg" "$rootdir/$pkg"
|
|
;;
|
|
esac
|
|
printf '/%s\0' "$pkg" >> "$rootdir/run/mmdebstrap/file-mirror-automount"
|
|
done
|
|
set +f; unset IFS
|