78 lines
3.8 KiB
Bash
Executable File
78 lines
3.8 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
SAB_WORKSPACE="${SAB_WORKSPACE:-$PWD}"
|
|
DOCKER_IMAGE="${DOCKER_IMAGE:-sabayon/builder-amd64}"
|
|
SAB_ARCH="${SAB_ARCH:-intel}"
|
|
DOCKER_PULL_IMAGE="${DOCKER_PULL_IMAGE:-0}"
|
|
MAKE_CONF="${MAKE_CONF:-$SAB_WORKSPACE/specs/make.conf}"
|
|
OUTPUT_DIR="${OUTPUT_DIR:-$SAB_WORKSPACE/portage_artifacts/}"
|
|
LOCAL_OVERLAY="${LOCAL_OVERLAY:-$SAB_WORKSPACE/local_overlay}"
|
|
ENTROPY_REPOSITORY="${ENTROPY_REPOSITORY:-main}" # Can be weekly, main, testing
|
|
DOCKER_OPTS="${DOCKER_OPTS:--ti --rm}"
|
|
TEMPDIR=$(mktemp -d)
|
|
|
|
. /sbin/sabayondevkit-functions.sh
|
|
|
|
if [ $# -eq 0 ]
|
|
then
|
|
echo "No arguments supplied, at least you should provide some package you wish to compile. e.g. $0 app-text/tree"
|
|
exit 1
|
|
fi
|
|
|
|
docker_env=(-e "LC_ALL=en_US.UTF-8")
|
|
docker_volumes=( -v "$OUTPUT_DIR:/usr/portage/packages" )
|
|
|
|
[ -z "$PORTAGE_CACHE" ] || docker_volumes+=(-v "$PORTAGE_CACHE:/usr/portage")
|
|
[ -z "$BUILDER_PROFILE" ] || docker_env+=(-e "BUILDER_PROFILE=$BUILDER_PROFILE")
|
|
[ -z "$BUILDER_JOBS" ] || docker_env+=(-e "BUILDER_JOBS=$BUILDER_JOBS")
|
|
[ -z "$USE_EQUO" ] || docker_env+=(-e "USE_EQUO=$USE_EQUO")
|
|
[ -z "$PRESERVED_REBUILD" ] || docker_env+=(-e "PRESERVED_REBUILD=$PRESERVED_REBUILD")
|
|
[ -z "$EQUO_INSTALL_ATOMS" ] || docker_env+=(-e "EQUO_INSTALL_ATOMS=$EQUO_INSTALL_ATOMS")
|
|
[ -z "$DEPENDENCY_SCAN_DEPTH" ] || docker_env+=(-e "DEPENDENCY_SCAN_DEPTH=$DEPENDENCY_SCAN_DEPTH")
|
|
[ -z "$EMERGE_DEFAULTS_ARGS" ] || docker_env+=(-e "EMERGE_DEFAULTS_ARGS=$EMERGE_DEFAULTS_ARGS")
|
|
[ -z "$EQUO_INSTALL_VERSION" ] || docker_env+=(-e "EQUO_INSTALL_VERSION=$EQUO_INSTALL_VERSION")
|
|
[ -z "$EQUO_SPLIT_INSTALL" ] || docker_env+=(-e "EQUO_SPLIT_INSTALL=$EQUO_SPLIT_INSTALL")
|
|
[ -z "$ARTIFACTS_DIR" ] || docker_env+=(-e "ARTIFACTS_DIR=$ARTIFACTS_DIR")
|
|
[ -z "$ENTROPY_REPOSITORY" ] || docker_env+=(-e "ENTROPY_REPOSITORY=$ENTROPY_REPOSITORY")
|
|
[ -z "$DISTFILES" ] || docker_volumes+=(-v "$DISTFILES:/usr/portage/distfiles")
|
|
[ -z "$ENTROPY_DOWNLOADED_PACKAGES" ] || docker_volumes+=(-v "$ENTROPY_DOWNLOADED_PACKAGES:/var/lib/entropy/client/packages")
|
|
|
|
if [ -n "$REMOTE_OVERLAY" ]; then
|
|
git clone "$REMOTE_OVERLAY" "$TEMPDIR"
|
|
LOCAL_OVERLAY=$TEMPDIR
|
|
fi
|
|
|
|
function cleanup {
|
|
rm -rf "$TEMPDIR"
|
|
}
|
|
|
|
trap cleanup EXIT
|
|
|
|
[ -d "$LOCAL_OVERLAY" ] && docker_volumes+=(-v "$LOCAL_OVERLAY:/usr/local/portage")
|
|
|
|
if [ -e $MAKE_CONF ]; then
|
|
echo "You specified a make.conf. I hope you know what are you doing"
|
|
docker_volumes+=(-v "$MAKE_CONF:/etc/portage/make.conf.custom") # file make.conf.custom is in the docker container
|
|
docker_env+=(-e "MAKE_CONF=/etc/portage/make.conf.custom") # tell to the builder where is our custom make.conf
|
|
fi
|
|
|
|
check_docker_requirements
|
|
|
|
[ $DOCKER_PULL_IMAGE -eq 1 ] && docker pull $DOCKER_IMAGE
|
|
|
|
if [ -d "$SAB_WORKSPACE"/specs ]; then
|
|
|
|
[ -e "$SAB_WORKSPACE"/specs/custom.mask ] && docker_volumes+=(-v "$SAB_WORKSPACE/specs/custom.mask:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.mask/99-custom.mask")
|
|
[ -e "$SAB_WORKSPACE"/specs/custom.unmask ] && docker_volumes+=(-v "$SAB_WORKSPACE/specs/custom.unmask:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.unmask/99-custom.unmask")
|
|
[ -e "$SAB_WORKSPACE"/specs/custom.use ] && docker_volumes+=(-v "$SAB_WORKSPACE/specs/custom.use:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.use/99-custom.use")
|
|
[ -e "$SAB_WORKSPACE"/specs/custom.env ] && docker_volumes+=(-v "$SAB_WORKSPACE/specs/custom.env:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.env/99-custom.env")
|
|
[ -e "$SAB_WORKSPACE"/specs/custom.keywords ] && docker_volumes+=(-v "$SAB_WORKSPACE/specs/custom.keywords:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.keywords/99-custom.keywords")
|
|
|
|
fi
|
|
|
|
echo "Spawning the package builder container for '$@'."
|
|
echo ""
|
|
echo "docker run $DOCKER_OPTS ${docker_env[@]} ${docker_volumes[@]} $DOCKER_IMAGE $@"
|
|
|
|
docker run $DOCKER_OPTS "${docker_env[@]}" "${docker_volumes[@]}" $DOCKER_IMAGE $@
|