| 1 | #!/usr/bin/env bash
 | 
| 2 | #
 | 
| 3 | # Test building the tarball on Gentoo.  Adapted from test/alpine.sh.
 | 
| 4 | #
 | 
| 5 | # https://wiki.gentoo.org/wiki/Chroot
 | 
| 6 | #
 | 
| 7 | # Usage:
 | 
| 8 | #   test/gentoo.sh <function name>
 | 
| 9 | 
 | 
| 10 | set -o nounset
 | 
| 11 | set -o pipefail
 | 
| 12 | set -o errexit
 | 
| 13 | 
 | 
| 14 | # 188 MB -- big!
 | 
| 15 | # TODO: These are http-only, and need to be verified!
 | 
| 16 | readonly ROOTFS_URL='http://distfiles.gentoo.org/releases/amd64/autobuilds/20180116T214503Z/stage3-amd64-20180116T214503Z.tar.xz'
 | 
| 17 | readonly CHROOT_DIR=_chroot/gentoo
 | 
| 18 | 
 | 
| 19 | readonly PORTAGE_URL='http://distfiles.gentoo.org/snapshots/portage-20180202.tar.xz'
 | 
| 20 | 
 | 
| 21 | download() {
 | 
| 22 |   wget --no-clobber --directory _tmp $ROOTFS_URL
 | 
| 23 |   wget --no-clobber --directory _tmp $PORTAGE_URL
 | 
| 24 | }
 | 
| 25 | 
 | 
| 26 | _extract() {
 | 
| 27 |   local dest=${1:-$CHROOT_DIR}
 | 
| 28 | 
 | 
| 29 |   local tarball=_tmp/$(basename $ROOTFS_URL)
 | 
| 30 | 
 | 
| 31 |   mkdir -p $dest
 | 
| 32 |   # Must be run as root
 | 
| 33 |   tar --extract --xz --directory $dest < $tarball
 | 
| 34 | }
 | 
| 35 | extract() { sudo $0 _extract "$@"; }
 | 
| 36 | 
 | 
| 37 | _extract-portage() {
 | 
| 38 |   local dest=${1:-$CHROOT_DIR}
 | 
| 39 |   local portage_dest=$dest/usr
 | 
| 40 | 
 | 
| 41 |   local tarball=_tmp/$(basename $PORTAGE_URL)
 | 
| 42 | 
 | 
| 43 |   # Must be run as root
 | 
| 44 |   tar --extract --xz --directory $portage_dest < $tarball
 | 
| 45 | }
 | 
| 46 | extract-portage() { sudo $0 _extract-portage "$@"; }
 | 
| 47 | 
 | 
| 48 | # Copied from the wiki page.
 | 
| 49 | _mount-dirs() {
 | 
| 50 |   mount --rbind /dev $CHROOT_DIR/dev
 | 
| 51 |   mount --make-rslave $CHROOT_DIR/dev
 | 
| 52 |   mount -t proc /proc $CHROOT_DIR/proc
 | 
| 53 |   mount --rbind /sys $CHROOT_DIR/sys
 | 
| 54 |   mount --make-rslave $CHROOT_DIR/sys
 | 
| 55 |   mount --rbind /tmp $CHROOT_DIR/tmp 
 | 
| 56 | }
 | 
| 57 | mount-dirs() { sudo $0 _mount-dirs "$@"; }
 | 
| 58 | 
 | 
| 59 | _setup-portage() {
 | 
| 60 |   cp -v $CHROOT_DIR/usr/share/portage/config/make.conf.example $CHROOT_DIR/etc/portage
 | 
| 61 | }
 | 
| 62 | setup-portage() { sudo $0 _setup-portage "$@"; }
 | 
| 63 | 
 | 
| 64 | # From alpine:
 | 
| 65 | 
 | 
| 66 | # Don't need chmod-chroot, I guess the tarball handles it.
 | 
| 67 | #
 | 
| 68 | # test/alpine.sh setup-dns _chroot/gentoo
 | 
| 69 | # test/alpine.sh copy-tar _chroot/gentoo
 | 
| 70 | # test/alpine.sh enter-chroot _chroot/gentoo
 | 
| 71 | 
 | 
| 72 | # emerge --sync -- Ran it manually
 | 
| 73 | 
 | 
| 74 | add-oil-build-deps() {
 | 
| 75 |   local chroot_dir=${1:-$CHROOT_DIR}
 | 
| 76 |   sudo chroot $chroot_dir /bin/sh <<EOF
 | 
| 77 | apk update
 | 
| 78 | apk add bash make gcc musl-dev 
 | 
| 79 | EOF
 | 
| 80 | }
 | 
| 81 | 
 | 
| 82 | 
 | 
| 83 | "$@"
 |