blob: ca22f322d081e76409498dd0ecf8da32b675423e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
#!/bin/bash
##########################################
# WARNING WARNING WARNING WARNING
#
# This script is an example to start a new AGL container
#
# You should customize it to fit your environment and in particular
# adjust the paths and permissions where needed.
#
# Note that sharing volumes with host system is not mandatory: it
# was just added for performances reasons: building from a SSD is
# just faster than using the container filesystem: that's why /xdt is
# mounted from there. Same applies to ~/mirror and ~/share, which are
# just 2 convenient folders to store reference build caches (used in prepare_meta script)
#
##########################################
CURDIR=$(cd $(dirname $0) && pwd -P)
PREFIX=agl-worker
DEFIMAGE=$(make -s -C $CURDIR/.. show-image)
OCCUPIED_ID=$(docker ps -a -f name=${PREFIX} --format "{{.Names}}" | grep -oE "[0-9]" | sort -n | sed ':a;N;$!ba;s/\n/ /g')
function usage() {
echo "Usage: $(basename $0) <instance ID> [image name]" >&2
echo "Instance ID must be 0 or a positive integer (1,2,...)" >&2
echo "Image name is optional: 'make show-image' is used by default to get image" >&2
echo "Default image: $DEFIMAGE" >&2
exit 1
}
case $1 in
-h|--help|"")
usage
;;
esac
ID=$1
IMAGE=${2:-$DEFIMAGE}
USER=$(id -un)
echo "Using instance ID #$ID (user $(id -un))"
NAME=${PREFIX}-$(hostname|cut -f1 -d'.')-$ID-$USER
for n in $(docker ps -a -f name=${PREFIX} --format "{{.Names}}")
do
if [ $NAME = $n ]
then
echo "This id is already taken."
echo "Please choose anohter one."
echo "Already taken id are: ${OCCUPIED_ID}"
exit 2
fi
done
MIRRORDIR=$HOME/ssd/localmirror_$ID
XDTDIR=$HOME/ssd/xdt_$ID
SHAREDDIR=$HOME/ssd/share
SSH_PORT=$((2222 + ID))
WWW_PORT=$((8000 + ID))
BOOT_PORT=$((69 + ID))
NBD_PORT=$((10809 + ID))
mkdir -p $MIRRORDIR $XDTDIR $SHAREDDIR
docker run \
--publish=${SSH_PORT}:22 \
--publish=${WWW_PORT}:8000 \
--publish=${BOOT_PORT}:69/udp \
--publish=${NBD_PORT}:10809 \
--detach=true \
--hostname=$NAME --name=$NAME \
--privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
-v $MIRRORDIR:/home/devel/mirror \
-v $SHAREDDIR:/home/devel/share \
-v $XDTDIR:/xdt \
-it $IMAGE
echo "Copying your identity to container $NAME"
#wait ssh service
echo -n wait ssh service .
res=3
max=30
count=0
while [ $res -ne 0 ] && [ $count -le $max ]; do
sleep 1
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/devel/.ssh"
docker cp ~/.ssh/id_rsa.pub ${NAME}:/home/devel/.ssh/authorized_keys
docker exec ${NAME} bash -c "chown devel:devel -R /home/devel/.ssh ;chmod 0700 /home/devel/.ssh;chmod 0600 /home/devel/.ssh/*"
ssh -o StrictHostKeyChecking=no -p $SSH_PORT devel@$(hostname) exit
echo "You can now login using:"
echo " ssh -p $SSH_PORT devel@$(hostname)"
|