tools/tb.sh
ChantYuCN 9a155283f1 feat: Modify layer build process
After compile-layer build, there should be a new container for distro-layer.
So do flock-layer.
These three layer's environemnt are different. However, the container is hard to change environment after launched.
So, Three layers, three environments and three containers.

The process is

cp localrc-compiler localrc
./tb.sh env
./tb.sh run
./tb.sh exec

cp localrc-distro localrc
./tb.sh env
./tb.sh run
./tb.sh exec

docker ps | awk 'NR>1{print $12}'
stx-distro-centos-builder
stx-compiler-centos-builder

Signed-off-by: ChantYuCN <chengde.yu@intel.com>
Change-Id: Ibded97dbc9f7541b0a7f0f8c71fb90816510a8b6
2022-06-21 16:39:26 +00:00

142 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
# tb.sh - tbuilder commands
#
# Subcommands:
# env - Display a selection of configuration values
# exec - Starts a shell inside a running container
# run - Starts a container
# stop - Stops a running container
#
# Configuration
# tb.sh expects to find its configuration file buildrc in the current
# directory, like Vagrant looks for Vagrantfile.
SCRIPT_DIR=$(cd $(dirname "$0") && pwd)
WORK_DIR=$(pwd)
# Load tbuilder configuration
if [[ -r ${WORK_DIR}/buildrc ]]; then
source ${WORK_DIR}/buildrc
fi
CMD=$1
TC_CONTAINER_NAME=${MYUNAME}-${LAYER}-centos-builder
TC_CONTAINER_TAG=local/${MYUNAME}-stx-builder:7.8
TC_DOCKERFILE=Dockerfile
NO_CACHE=0
function create_container {
local EXTRA_ARGS=""
if [ ! -z ${MY_EMAIL} ]; then
EXTRA_ARGS+="--build-arg MY_EMAIL=${MY_EMAIL}"
fi
if [ $NO_CACHE -eq 1 ]; then
EXTRA_ARGS+=" --no-cache"
fi
docker build \
--build-arg MYUID=$(id -u) \
--build-arg MYUNAME=${USER} \
${EXTRA_ARGS} \
--ulimit core=0 \
--network host \
-t ${TC_CONTAINER_TAG} \
-f ${TC_DOCKERFILE} \
.
}
function exec_container {
echo "docker cp ${WORK_DIR}/buildrc ${TC_CONTAINER_NAME}:/home/${MYUNAME}"
docker cp ${WORK_DIR}/buildrc ${TC_CONTAINER_NAME}:/home/${MYUNAME}
docker cp ${WORK_DIR}/localrc ${TC_CONTAINER_NAME}:/home/${MYUNAME}
docker exec -it --user=${MYUNAME} -e MYUNAME=${MYUNAME} ${TC_CONTAINER_NAME} script -q -c "/bin/bash" /dev/null
}
function run_container {
# create localdisk
mkdir -p ${LOCALDISK}/designer/${MYUNAME}/${PROJECT}
#create centOS mirror
mkdir -p ${HOST_MIRROR_DIR}/CentOS
docker run -it --rm \
--name ${TC_CONTAINER_NAME} \
--detach \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(readlink -f ${LOCALDISK}):/${GUEST_LOCALDISK} \
-v ${HOST_MIRROR_DIR}:/import/mirrors:ro \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
-v ~/.ssh:/mySSH:ro \
--tmpfs /tmp \
--tmpfs /run \
-e "container=docker" \
-e MYUNAME=${MYUNAME} \
--privileged=true \
--security-opt seccomp=unconfined \
${TC_CONTAINER_TAG}
}
function stop_container {
docker stop ${TC_CONTAINER_NAME}
}
function kill_container {
docker kill ${TC_CONTAINER_NAME}
}
function clean_container {
docker rm ${TC_CONTAINER_NAME} || true
docker image rm ${TC_CONTAINER_TAG}
}
function usage {
echo "$0 [create|create_no_cache|run|exec|env|stop|kill|clean]"
}
case $CMD in
env)
echo "LOCALDISK=${LOCALDISK}"
echo "GUEST_LOCALDISK=${GUEST_LOCALDISK}"
echo "TC_DOCKERFILE=${TC_DOCKERFILE}"
echo "TC_CONTAINER_NAME=${TC_CONTAINER_NAME}"
echo "TC_CONTAINER_TAG=${TC_CONTAINER_TAG}"
echo "SOURCE_REMOTE_NAME=${SOURCE_REMOTE_NAME}"
echo "SOURCE_REMOTE_URI=${SOURCE_REMOTE_URI}"
echo "HOST_MIRROR_DIR=${HOST_MIRROR_DIR}"
echo "MY_RELEASE=${MY_RELEASE}"
echo "MY_REPO_ROOT_DIR=${MY_REPO_ROOT_DIR}"
echo "LAYER=${LAYER}"
echo "MYUNAME=${MYUNAME}"
echo "MY_EMAIL=${MY_EMAIL}"
;;
create)
create_container
;;
create_no_cache)
NO_CACHE=1
create_container
;;
exec)
exec_container
;;
run)
run_container
;;
stop)
stop_container
;;
kill)
kill_container
;;
clean)
clean_container
;;
*)
echo "Unknown command: $CMD"
usage
exit 1
;;
esac