c4c633a6cd
This reverts commit 80b92b818d
.
Change-Id: Iad9cecaaf9a0bece64f632115c626cca2c812be8
203 lines
5.6 KiB
Bash
Executable File
203 lines
5.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -o errexit
|
|
|
|
BIN_DIR=$(dirname `readlink -e $0`)
|
|
source ${BIN_DIR}/functions/build-functions || exit 1
|
|
source ${BIN_DIR}/functions/docker-functions || exit 1
|
|
|
|
main () {
|
|
local repos=()
|
|
local pins=()
|
|
local pinpkgs=()
|
|
local pinprios=()
|
|
local KEEP_CHROOT=true
|
|
# Parse parameters
|
|
while test -n "$1" ; do
|
|
case "$1" in
|
|
--config-dir|-c)
|
|
local CONFIG_DIR=$2
|
|
shift 2
|
|
;;
|
|
--no-keep-chroot| -n)
|
|
shift
|
|
unset KEEP_CHROOT
|
|
;;
|
|
--verbose|-v)
|
|
shift
|
|
VERBOSE=true
|
|
local MOCK_OPTS="${MOCK_OPTS} -v"
|
|
local BASH_OPTS="${BASH_OPTS} -x"
|
|
set -o xtrace
|
|
;;
|
|
--build|-b)
|
|
shift
|
|
local ACTION_BUILD=true
|
|
;;
|
|
--update|-u)
|
|
shift
|
|
local ACTION_UPDATE=true
|
|
;;
|
|
--shell|-s)
|
|
shift
|
|
local ACTION_SHELL=true
|
|
;;
|
|
--init|-i)
|
|
shift
|
|
local ACTION_INIT=true
|
|
;;
|
|
--no-init)
|
|
shift
|
|
local NO_INIT=true
|
|
;;
|
|
--repository|--repo|-r)
|
|
local repos[${#repos[@]}]="$2";
|
|
shift 2;
|
|
;;
|
|
--pin)
|
|
local pins[${#pins[@]}]="$2";
|
|
shift 2;
|
|
;;
|
|
--pin-package)
|
|
local pinpkgs[${#pinpkgs[@]}]="$2";
|
|
shift 2;
|
|
;;
|
|
--pin-priority)
|
|
local pinprios[${#pinprios[@]}]="$2";
|
|
shift 2;
|
|
;;
|
|
--dist|-d)
|
|
local DIST="$2";
|
|
shift 2;
|
|
;;
|
|
--source|--src)
|
|
local SOURCE_PATH="$2";
|
|
shift 2;
|
|
;;
|
|
--output|-o)
|
|
local DEST_PATH="$2";
|
|
shift 2;
|
|
;;
|
|
*)
|
|
fail_exit "ERROR: Unknow parameter \`$1\`"
|
|
;;
|
|
esac
|
|
done
|
|
|
|
[ -z "${DIST}" ] && fail_exit "ERROR: Distribution is not specified"
|
|
[ ${#pins[@]} -ne ${#pinpkgs[@]} \
|
|
-o ${#pins[@]} -ne ${#pinprios[@]} ] \
|
|
&& fail_exit "ERROR: Inconsistent Apt pinning options"
|
|
|
|
local CONFIG_DIR=${CONFIG_DIR:-${BIN_DIR}/conf}
|
|
local SOURCE_PATH=${SOURCE_PATH:-`pwd`}
|
|
local DEST_PATH=${DEST_PATH:-${SOURCE_PATH}/buildresult}
|
|
|
|
[ -e "${CONFIG_DIR}/common.conf" ] \
|
|
&& source ${CONFIG_DIR}/common.conf
|
|
|
|
source ${CONFIG_DIR}/${DIST}.conf 2>/dev/null \
|
|
|| fail_exit "ERROR: Unsupported distribution ${DIST}"
|
|
[ -z "${ROOT_NAME}" ] && fail_exit "CONFIG ERROR: Chroot name is not specified"
|
|
[ -z "${TYPE}" ] && fail_exit "CONFIG ERROR: Chroot type is not specified"
|
|
|
|
# Check docker image
|
|
local LOCK_FILE=/tmp/${CONTAINER_NAME%%:*}.lock
|
|
job_lock ${LOCK_FILE} wait 3600
|
|
[ $(docker images | egrep -c "^${CONTAINER_NAME%%:*}") -eq 0 ] \
|
|
&& local BUILD_DOCKER_IMAGE=true
|
|
|
|
[ "${BUILD_DOCKER_IMAGE}" = "true" -a "${NO_INIT}" = "true" ] \
|
|
&& fail_exit "ERROR: Can't find docker image for ${CONTAINER_NAME%%:*}"
|
|
|
|
# Build docker image
|
|
[ ! -f "${CONFIG_DIR}/${CONTAINER_NAME%%:*}/Dockerfile" ] \
|
|
&& fail_exit "CONFIG ERROR: Unsupported container ${CONTAINER_NAME%%:*}"
|
|
if [ "${BUILD_DOCKER_IMAGE}" == "true" ] ; then
|
|
docker build -t ${CONTAINER_NAME%%:*} \
|
|
${CONFIG_DIR}/${CONTAINER_NAME%%:*}/
|
|
fi
|
|
job_lock ${LOCK_FILE} unset
|
|
|
|
# Check chroot
|
|
local LOCK_FILE=/tmp/${ROOT_NAME}.lock
|
|
job_lock ${LOCK_FILE} wait 3600
|
|
[ ! -d "${CACHE_DIR}/${ROOT_NAME}" ] && local ACTION_INIT=true
|
|
[ "${ACTION_INIT}" == "true" ] && unset ACTION_UPDATE
|
|
|
|
[ "${ACTION_INIT}" = "true" -a "${NO_INIT}" = "true" ] \
|
|
&& fail_exit "ERROR: Can't find chroot for ${DIST}"
|
|
# Init chroot
|
|
if [ "${ACTION_INIT}" == "true" ] ; then
|
|
case $TYPE in
|
|
mock)
|
|
docker_init_mock
|
|
;;
|
|
sbuild)
|
|
docker_init_sbuild
|
|
;;
|
|
*)
|
|
fail_exit "CONFIG ERROR: Unsupported distribution type"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
# Update chroot
|
|
[ "${NO_INIT}" = "true" ] && unset ACTION_UPDATE
|
|
if [ "${ACTION_UPDATE}" == "true" ] ; then
|
|
case ${TYPE} in
|
|
mock)
|
|
docker_update_mock
|
|
;;
|
|
sbuild)
|
|
docker_update_sbuild
|
|
;;
|
|
*)
|
|
fail_exit "CONFIG ERROR: Unsupported distribution type"
|
|
;;
|
|
esac
|
|
fi
|
|
job_lock ${LOCK_FILE} unset
|
|
|
|
local UNAME=$(id -u)
|
|
local GNAME=$(id -g)
|
|
|
|
# Build package
|
|
if [ "${ACTION_BUILD}" == "true" ] ; then
|
|
case ${TYPE} in
|
|
mock)
|
|
docker_build_mock
|
|
;;
|
|
sbuild)
|
|
docker_build_sbuild
|
|
;;
|
|
*)
|
|
fail_exit "CONFIG ERROR: Unsupported distribution type"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
# Get into buildroot
|
|
if [ "${ACTION_SHELL}" == "true" ] ; then
|
|
case ${TYPE} in
|
|
mock)
|
|
[ ! -d "${ROOT_DIR}/${ROOT_NAME}/root/etc" ] \
|
|
&& fail_exit "ERROR: There is no buildroot for ${DIST}"
|
|
docker_shell_mock
|
|
;;
|
|
sbuild)
|
|
[ ! -d "${ROOT_DIR}/${ROOT_NAME}/build" ] \
|
|
&& fail_exit "ERROR: There is no buildroot for ${DIST}"
|
|
docker_shell_sbuild
|
|
;;
|
|
*)
|
|
fail_exit "CONFIG_ERROR: Unsupported distribution type"
|
|
;;
|
|
esac
|
|
fi
|
|
}
|
|
|
|
main "$@"
|
|
|
|
cleanup_and_exit 0
|