X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=scripts%2Fxds-docker-create-container.sh;h=9eafeeff0cf9196384d352d077649000ad32d534;hb=ebe500f8a7a6a5413e988ecd935c0a0ef62cebca;hp=46dde9649404ea0fe54673e9b8e6056b9f41f333;hpb=43cdcfa2e6ea5583428deaee0ef78a551597952b;p=src%2Fxds%2Fxds-server.git diff --git a/scripts/xds-docker-create-container.sh b/scripts/xds-docker-create-container.sh index 46dde96..9eafeef 100755 --- a/scripts/xds-docker-create-container.sh +++ b/scripts/xds-docker-create-container.sh @@ -22,7 +22,7 @@ REGISTRY=docker.automotivelinux.org REPO=agl NAME=worker FLAVOUR=xds -VERSION=3.99.1 +VERSION=4.0 # --------------------------------------------------- # --- computed - don't touch ! @@ -30,6 +30,16 @@ VERSION=3.99.1 DOCKER_USER=devel DEFIMAGE=$REGISTRY/$REPO/$NAME-$FLAVOUR:$VERSION +docker images |grep $DEFIMAGE 2>&1 > /dev/null +if [ "$?" = "1" ]; then + VERSION=`docker images $REGISTRY/$REPO/$NAME-$FLAVOUR:* --format "{{.Tag}}"` + if [ "$VERSION" = "" ]; then + echo "ERROR: cannot automatically retrieve image tag for $REGISTRY/$REPO/$NAME-$FLAVOUR" + exit 1 + fi + DEFIMAGE=$REGISTRY/$REPO/$NAME-$FLAVOUR:$VERSION +fi + function usage() { echo "Usage: $(basename $0) [image name]" >&2 @@ -41,14 +51,18 @@ function usage() { ID="" IMAGE=$DEFIMAGE -FORCE=false +FORCE_RESTART=false +UPDATE_UID=true while [ $# -ne 0 ]; do case $1 in -h|--help|"") usage ;; -fr|-force-restart) - FORCE=true + FORCE_RESTART=true + ;; + -no-uid-update) + UPDATE_UID=false ;; *) if [[ "$1" =~ ^[0-9]+$ ]]; then @@ -61,23 +75,28 @@ while [ $# -ne 0 ]; do shift done -[ "$ID" = "" ] && usage +[ "$ID" = "" ] && ID=0 USER=$(id -un) echo "Using instance ID #$ID (user $(id -un))" NAME=agl-xds-$(hostname|cut -f1 -d'.')-$ID-$USER +docker ps -a |grep "$NAME" > /dev/null +[ "$?" = "0" ] && { echo "Image name already exist ! (use -h option to read help)"; exit 1; } + MIRRORDIR=$HOME/ssd/localmirror_$ID XDTDIR=$HOME/ssd/xdt_$ID SHAREDDIR=$HOME/$DOCKER_USER/docker/share +XDS_WKS=$HOME/xds-workspace SSH_PORT=$((2222 + ID)) WWW_PORT=$((8000 + ID)) BOOT_PORT=$((69 + ID)) NBD_PORT=$((10809 + ID)) -mkdir -p $MIRRORDIR $XDTDIR $SHAREDDIR || exit 1 +### Create the new container +mkdir -p $MIRRORDIR $XDTDIR $SHAREDDIR $XDS_WKS || exit 1 docker run \ --publish=${SSH_PORT}:22 \ --publish=${WWW_PORT}:8000 \ @@ -88,6 +107,7 @@ docker run \ --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -v $MIRRORDIR:/home/$DOCKER_USER/mirror \ -v $SHAREDDIR:/home/$DOCKER_USER/share \ + -v $XDS_WKS:/home/$DOCKER_USER/xds-workspace \ -v $XDTDIR:/xdt \ -it $IMAGE if [ "$?" != "0" ]; then @@ -95,13 +115,45 @@ if [ "$?" != "0" ]; then exit 1 fi -if ($FORCE); then - echo "Stoping xds-server..." - docker exec --user $DOCKER_USER ${NAME} bash -c "/usr/local/bin/xds-server-stop.sh" || exit 1 +### Ssh key +echo "Copying your identity to container $NAME" +echo -n wait ssh service . +res=3 +max=30 +count=0 +while [ $res -ne 0 ] && [ $count -le $max ]; do sleep 1 - echo "Starting xds-server..." - docker exec --user $DOCKER_USER ${NAME} bash -c "nohup /usr/local/bin/xds-server-start.sh" || exit 1 -fi + docker exec ${NAME} bash -c "systemctl status ssh" 2>/dev/null 1>&2 + res=$? + echo -n "." + count=$(expr $count + 1); +done +echo + +ssh-keygen -R [$(hostname)]:$SSH_PORT -f ~/.ssh/known_hosts +docker exec ${NAME} bash -c "mkdir -p /home/$DOCKER_USER/.ssh" +docker cp ~/.ssh/id_rsa.pub ${NAME}:/home/$DOCKER_USER/.ssh/authorized_keys +docker exec ${NAME} bash -c "chown $DOCKER_USER:$DOCKER_USER -R /home/$DOCKER_USER/.ssh ;chmod 0700 /home/$DOCKER_USER/.ssh; chmod 0600 /home/$DOCKER_USER/.ssh/*" +ssh -o StrictHostKeyChecking=no -p $SSH_PORT $DOCKER_USER@$(hostname) exit echo "You can now login using:" echo " ssh -p $SSH_PORT $DOCKER_USER@$(hostname)" + +### User / Group id +if ($UPDATE_UID); then + echo "Setup docker user and group id to match yours" + docker exec -t ${NAME} bash -c "systemctl stop xds-server" || exit 1 + docker exec -t ${NAME} bash -c "usermod -u $(id -u) $DOCKER_USER && groupmod -g $(id -g) $DOCKER_USER" || exit 1 + docker exec -t ${NAME} bash -c "chown -R $DOCKER_USER:$DOCKER_USER /home/$DOCKER_USER /tmp/xds*" || exit 1 + docker exec -t ${NAME} bash -c "systemctl start xds-server" || exit 1 + docker exec -t ${NAME} bash -c "systemctl start xds-server" || exit 1 +fi + +### Force xds-server restart +if ($FORCE_RESTART); then + echo "Stopping xds-server..." + docker exec -t ${NAME} bash -c "systemctl stop xds-server" || exit 1 + sleep 1 + echo "Starting xds-server..." + docker exec -t ${NAME} bash -c "systemctl start xds-server" || exit 1 +fi