summaryrefslogtreecommitdiff
path: root/skel/multistrap-hooks/completion_50_configscript.sh
blob: cef64205eaaf083c417ed3b8897c772f765298b0 (plain)
  1. #!/bin/sh
  2. #
  3. # completion_50_configscript.sh
  4. # Copyright 2015 Jonas Smedegaard <dr@jones.dk>
  5. # License: GNU Public License version 3 or newer
  6. #
  7. # multistrap completion hook supporting alien arch with fakeroot
  8. #
  9. # Recommends: fakeroot proot qemu-user
  10. # Suggests: qemu-user-static
  11. # Enhances: multistrap
  12. #
  13. # TODO: avoid need for libfakeroot installed into target system
  14. # TODO: avoid install static QEMU into target system when run as real root
  15. # TODO: optimize by having proot bypass select binaries
  16. #  candidates:
  17. #  * /bin/sh
  18. #  * /usr/bin/perl
  19. #  * /usr/bin/mandb
  20. #  * /usr/sbin/update-ca-certificates
  21. #  * /usr/bin/c_rehash
  22. set -eu
  23. set -x
  24. fs="$1"
  25. # TODO: replace with multiarch-safe method
  26. arch=$(grep -Pom1 '(?<=Architecture: )(?!all)(.*)' "$fs/var/lib/dpkg/available"#'
  27. arch_host=$(dpkg --print-architecture)
  28. # libssl needs either HOME or RANDFILE defined
  29. export RANDFILE=/root/.rnd.installer
  30. if "$arch" != "$arch_host" ]; then
  31.     # Favor dpkg-dev tools (most reliable but pulls many packages)
  32.     if which dpkg-architecturethen
  33.         multiarch=$(dpkg-architecture -a"$arch" -qDEB_TARGET_MULTIARCH)
  34.         cpu=$(dpkg-architecture -a"$arch" -qDEB_TARGET_GNU_CPU)
  35.     else
  36.         multiarch=$(basename "$(dirname "$(find "$fs/usr/lib" -type -name libfakeroot)")")
  37.         cpu=$(echo "$multiarch" | cut -d- -f1)
  38.     fi
  39.     if which arch-test ] && arch-test "$arch"then
  40.         qemu=
  41.     else
  42.         qemu=$(/usr/sbin/update-binfmts --display "qemu-$cpu" | grep -Po '(?<=interpreter = /usr/bin/).*'#'
  43.     fi
  44. fi
  45. if -n "${FAKEROOTKEY:-}" ] && [ "${FAKECHROOT:-}" != "true" ]; then
  46.     PATH=/usr/sbin:/usr/bin:/sbin:/bin \
  47.         LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}/usr/lib/$multiarch/libfakeroot" \
  48.         ${qemu:+QEMU_LD_PREFIX="$fs"} \
  49.         proot -r "$fs" -b /proc -b /sys -b /dev ${qemu:+-q "$qemu"} -w / /multistrap-configure.sh
  50.     rm -f "$fs/multistrap-configure.sh"
  51. else
  52.     sudo=sudo
  53.     if "$(whoami)" "root" ]; then
  54.         sudo=
  55.     fi
  56.     $sudo mount --bind /proc "$fs/proc"
  57.     $sudo mount --bind /sys "$fs/sys"
  58.     $sudo mount --bind /dev "$fs/dev"
  59.     -z "$qemu" || cp "/usr/bin/$qemu" "$fs/usr/bin/"
  60.     $sudo chroot "$fs" /multistrap-configure.sh
  61.     -z "$qemu" || rm "$fs/usr/bin/$qemu"
  62.     $sudo umount "$fs/proc"
  63.     $sudo umount "$fs/sys"
  64.     $sudo umount "$fs/dev"
  65.     $sudo rm -f "$fs/multistrap-configure.sh"
  66. fi
  67. rm -f "$fs/$RANDFILE"