Commit b02be5245f09c95a2efbcb1f1b7857cf0ad83225
1 parent
17bfc359
Correctifs + gestion suppression interfaces
réseaux
Showing
9 changed files
with
83 additions
and
46 deletions
Show diff stats
create_container.sh
1 | 1 | #!/bin/bash |
2 | +set -x | |
2 | 3 | |
3 | -set -x | |
4 | 4 | while getopts i:c:b:r:a:p: o; do |
5 | 5 | case $o in |
6 | 6 | (i) NOM_IMAGE=$OPTARG;; |
... | ... | @@ -52,27 +52,19 @@ echo "proc /proc proc defaults 0 0" >> /mnt/baleine/$NOM_CONTAINER/etc/fstab |
52 | 52 | echo "$PROGRAM" >> /mnt/baleine/$NOM_CONTAINER/etc/rc.local |
53 | 53 | |
54 | 54 | #On fait le unshare sur l'image passée en paramètre, |
55 | -#nohup unshare -p -f -m -n -u chroot /mnt/baleine/$NOM_CONTAINER "/bin/bash" -c "mount /proc" & | |
56 | 55 | |
57 | 56 | nohup unshare -p -f -m -n -u chroot /mnt/baleine/$NOM_CONTAINER /bin/sh -c "mount /proc ; $PROGRAM ; while true ; do sleep 10 ; done" & |
58 | - | |
59 | 57 | PID=$! |
60 | 58 | |
61 | -#Récupère tous les processus fils du unshare (donc ici le programme qu'on lance) | |
62 | -#ps axo ppid,pid | grep "^ *$PID" | sed -e 's/.* //' | |
63 | - | |
64 | 59 | echo "PID Unshare :$PID" |
65 | 60 | |
66 | - | |
67 | -#TODO : Gerer les noms des interfaces < x caractères | |
68 | - | |
69 | 61 | FILE=$NOM_CONTAINER.manifest |
70 | 62 | date=$(date) |
71 | 63 | |
72 | 64 | echo "nom_container:$NOM_CONTAINER" >> $FILE #nom du conteneur |
73 | 65 | echo "nom_image:$NOM_IMAGE" >> $FILE #nom de son image |
74 | 66 | echo "pid:$PID" >> $FILE #Son PID |
75 | -echo "nom_bridge:$NOM_BRIDGE" >> $FILE #SON BRIDGE | |
67 | +echo "nom_bridges:$BRIDGES" >> $FILE #SON BRIDGE | |
76 | 68 | echo "starting_time: $date" >> $FILE #starting time |
77 | 69 | |
78 | 70 | |
... | ... | @@ -102,11 +94,11 @@ fi |
102 | 94 | |
103 | 95 | ARRAY_INTERFACES=() |
104 | 96 | |
105 | -for i in $(seq 1 $NOMBRE_INTERFACES); do | |
97 | +for ((i = 0 ; i<$NOMBRE_INTERFACES ; i++)); do | |
106 | 98 | #Creation d'un hash du nom du container pour créer les interfaces |
107 | 99 | HASH=$(sha1sum <<< $NOM_CONTAINER) |
108 | 100 | #On prend les trois premiers caractères du hash, succédé de l'index de l'interface |
109 | - INTERFACE_NAME="vif${HASH:0:3}_$i" | |
101 | + INTERFACE_NAME="vif${HASH:0:4}_$i" | |
110 | 102 | ip link add $INTERFACE_NAME type veth peer name eth$i@$INTERFACE_NAME |
111 | 103 | #On rajoute l'interface à la liste des interfaces du container |
112 | 104 | ARRAY_INTERFACES+=($INTERFACE_NAME) |
... | ... | @@ -119,7 +111,6 @@ for i in $(seq 1 $NOMBRE_INTERFACES); do |
119 | 111 | ip link set eth$i@$INTERFACE_NAME netns /proc/$PID/ns/net name eth$i |
120 | 112 | done |
121 | 113 | |
122 | - | |
123 | 114 | #Compte le nombre de bridges présents |
124 | 115 | NOMBRE_BRIDGES=$(echo $BRIDGES | awk -F '[,]' '{print NF}') |
125 | 116 | |
... | ... | @@ -130,19 +121,19 @@ ARRAY_BRIDGES=() |
130 | 121 | ARRAY_IPV4=() |
131 | 122 | |
132 | 123 | for b in $BRIDGES; do |
133 | - ARRAY_BRIDGES+=(b) | |
124 | + echo "Un bridge: $b" | |
125 | + ARRAY_BRIDGES+=($b) | |
134 | 126 | done |
135 | 127 | |
136 | 128 | for a in $ADDRS_IPV4; do |
137 | - ARRAY_IPV4+=(a) | |
129 | + echo "Une addr: $a" | |
130 | + ARRAY_IPV4+=($a) | |
138 | 131 | done |
139 | 132 | |
140 | 133 | for (( i=0 ; i < ${#ARRAY_IPV4[*]} ; i++ )); do |
141 | 134 | nsenter -t $PID -n ip a |
142 | - | |
143 | 135 | #Attribution de la i-ème adresse ip à l'interface i |
144 | - nsenter -t $PID -n ip add ${ARRAY_IPV4[i]} dev eth$i | |
145 | - | |
136 | + nsenter -t $PID -n ip a add ${ARRAY_IPV4[i]} dev eth$i | |
146 | 137 | #On redemarre l'interface i dans le container |
147 | 138 | nsenter -t $PID -n ip link set dev eth$i down |
148 | 139 | nsenter -t $PID -n ip link set dev eth$i up |
... | ... | @@ -150,16 +141,18 @@ done |
150 | 141 | |
151 | 142 | for (( i=0 ; i < ${#ARRAY_BRIDGES[*]} ; i++ )); do |
152 | 143 | #Pour chaque interface, on la relie à son bridge associé |
144 | + echo "Nom bridge :${ARRAY_BRIDGES[i]}" | |
153 | 145 | ip link set ${ARRAY_INTERFACES[i]} master ${ARRAY_BRIDGES[i]} |
154 | 146 | done |
155 | 147 | |
156 | 148 | #Chaine de caractère contenant toutes les interfaces du container, séparées par "," |
157 | 149 | |
158 | 150 | STRING_INTERFACE="" |
159 | -for (( i=0 ; i < ${#ARRAY_INTERFACE[*]} ; i++)); do | |
151 | +for (( i=0 ; i < ${#ARRAY_INTERFACES[*]} ; i++)); do | |
160 | 152 | STRING_INTERFACE="$STRING_INTERFACE,${ARRAY_INTERFACES[i]}" |
161 | 153 | #Exemple, à la fin on aura ",vif143,vif560" |
162 | 154 | done |
163 | 155 | |
164 | 156 | #On supprime la première virgule exédentaire |
165 | -STRING_INTERFACE=$(echo $STRING_INTERFACE | sed -e 's/^.//') | |
166 | 157 | \ No newline at end of file |
158 | +STRING_INTERFACE=$(echo $STRING_INTERFACE | sed -e 's/^.//') | |
159 | +echo "interfaces:$STRING_INTERFACE" >> $FILE | |
167 | 160 | \ No newline at end of file | ... | ... |
create_image.sh
... | ... | @@ -15,7 +15,8 @@ if [ "$SIZE" == "" ] || [ "$SIZE" -lt 0 ] || [ "$SIZE" -gt 10240 ]; then |
15 | 15 | SIZE=10240 |
16 | 16 | fi |
17 | 17 | |
18 | -echo "Le size est de $SIZE" | |
18 | +echo "Création d'une image de taille $SIZE" | |
19 | + | |
19 | 20 | mkdir -p $PATH_BALEINE/images |
20 | 21 | |
21 | 22 | if [[ -z $REPERTOIRE ]]; then | ... | ... |
list_bridges.sh
list_container.sh
1 | 1 | #!/bin/bash |
2 | 2 | |
3 | -cd $PATH_MANIFEST/containers | |
4 | - | |
5 | -for eachfile in ./*.manifest | |
3 | +for eachfile in $PATH_MANIFEST/containers/*.manifest | |
6 | 4 | do |
7 | - echo $eachfile | |
8 | - val=$(cat "$eachfile") | |
9 | - echo $val | |
5 | + #Test si des fichiers sont présents | |
6 | + test -f "$eachfile" || continue | |
7 | + NOM_CONTAINER=$(grep nom_container $eachfile | cut -d ':' -f2) | |
8 | + NOM_IMAGE=$(grep nom_image $eachfile | cut -d ':' -f2) | |
9 | + PID=$(grep pid $eachfile | cut -d ':' -f2) | |
10 | + TIME=$(grep starting_time $eachfile | cut -d':' -f2) | |
11 | + echo "----------------------" | |
12 | + echo "Nom container $NOM_CONTAINER" | |
13 | + echo "Nom image: $NOM_IMAGE" | |
14 | + echo "PID: $PID" | |
15 | + echo "Startint time: $TIME" | |
16 | + echo "----------------------" | |
10 | 17 | done | ... | ... |
list_images.sh
... | ... | @@ -2,6 +2,8 @@ |
2 | 2 | |
3 | 3 | for eachfile in $PATH_MANIFEST/images/*.manifest |
4 | 4 | do |
5 | + #Test si des fichiers sont présents | |
6 | + test -f "$eachfile" || continue | |
5 | 7 | NOM_IMAGE=$(grep nom_image $eachfile | cut -d ':' -f2) |
6 | 8 | TAILLE=$(grep taille $eachfile | cut -d ':' -f2) |
7 | 9 | CHEMIN=$(grep chemin $eachfile | cut -d ':' -f2) | ... | ... |
remove_bridge.sh
remove_container.sh
1 | 1 | #!/bin/bash |
2 | +set -x | |
2 | 3 | while getopts c: o; do |
3 | 4 | case $o in |
4 | 5 | (c) NAME_CONTAINER_TO_REMOVE=$OPTARG;; |
... | ... | @@ -6,19 +7,32 @@ while getopts c: o; do |
6 | 7 | done |
7 | 8 | #vérification que l'utilisateur donne bien un nom à l'CONTAINER |
8 | 9 | if [[ -z "$NAME_CONTAINER_TO_REMOVE" ]]; then |
9 | - echo "Il faut donner le NAME du conteneur! Relancez la commande avec les bons arguments." | |
10 | + echo "Il faut donner le nom du conteneur! Relancez la commande avec les bons arguments." | |
10 | 11 | exit |
11 | 12 | fi |
12 | -rm -rf $PATH_MANIFEST/containers/$NAME_CONTAINER_TO_REMOVE.manifest | |
13 | -rm -rf $PATH_BALEINE/containers/$NAME_CONTAINER_TO_REMOVE | |
14 | 13 | |
15 | -#umount /mnt/container | |
14 | +PID=$(grep "pid" $PATH_MANIFEST/containers/$NAME_CONTAINER_TO_REMOVE.manifest | cut -d":" -f2) | |
15 | + | |
16 | +echo "Kill du container" | |
17 | +kill $PID | |
18 | + | |
19 | +echo "Démontage de /mnt/baleine/$NAME_CONTAINER_TO_REMOVE" | |
16 | 20 | umount /mnt/baleine/$NAME_CONTAINER_TO_REMOVE |
17 | -#supprime mnt/container | |
18 | -rm -rf /mnt/baleine/$NAME_CONTAINER_TO_REMOVE | |
19 | -#supprime l'image associé au container (manifest du container) | |
20 | -rm -rf /var/lib/baleine/containers/$NAME_CONTAINER_TO_REMOVE | |
21 | - | |
22 | -#TODO : Supprimer interfaces réseaux | |
23 | -#TODO : Grep manifeste container, récupère les interfaces | |
24 | -#TODO : Boucle sur les interfaces, les supprime une à une | |
25 | 21 | \ No newline at end of file |
22 | + | |
23 | +echo "Suppression de /mnt/baleine/$NAME_CONTAINER_TO_REMOVE" | |
24 | + | |
25 | +echo "Suppression de $PATH_BALEINE/containers/$NAME_CONTAINER_TO_REMOVE" | |
26 | +rm -rf $PATH_BALEINE/containers/$NAME_CONTAINER_TO_REMOVE | |
27 | + | |
28 | +INTERFACES=$(grep "interfaces" $PATH_MANIFEST/containers/$NAME_CONTAINER_TO_REMOVE.manifest | cut -d":" -f2) | |
29 | + | |
30 | +echo "Suppression des interfaces réseau :" | |
31 | +IFS="," | |
32 | +#On supprime les interfaces réseaux associées à ce container | |
33 | +for interface in $INTERFACES; do | |
34 | + echo "Suppression de $interface" | |
35 | + ip link del $interface | |
36 | +done | |
37 | + | |
38 | +echo "Suppression du manifeste du container" | |
39 | +rm -rf $PATH_MANIFEST/containers/$NAME_CONTAINER_TO_REMOVE.manifest | |
26 | 40 | \ No newline at end of file | ... | ... |
restart_container.sh
... | ... | @@ -5,9 +5,11 @@ while getopts c:i: o; do |
5 | 5 | (i) NOM_IMAGE=$OPTARG;; |
6 | 6 | esac |
7 | 7 | done |
8 | -mount -t ext4 -o loop $PATH_BALEINE/containers/$NOM_CONTAINER/$NOM_IMAGE /mnt/baleine/$NOM_CONTAINER | |
9 | 8 | |
10 | -nohup unshare -p -f -m -n -u chroot /mnt/baleine/$NOM_CONTAINER $PROGRAM -c "mount /proc" & | |
9 | +mount -t ext4 -o loop $PATH_BALEINE/containers/$NOM_CONTAINER/$NOM_IMAGE /mnt/baleine/$NOM_CONTAINER | |
10 | +nohup unshare -p -f -m -n -u chroot /mnt/baleine/$NOM_CONTAINER /bin/sh -c "mount /proc ; $PROGRAM ; while true ; do sleep 10 ; done" & | |
11 | 11 | PID=$! |
12 | 12 | |
13 | -ps axo ppid,pid | grep "^ *$PID" | sed -e 's/.* //' | |
13 | + | |
14 | +#TODO: *Rajouter les interfaces réseau au container | |
15 | +# * | |
14 | 16 | \ No newline at end of file | ... | ... |
stop_container.sh
1 | 1 | #!/bin/bash |
2 | - | |
3 | 2 | while getopts c: o; do |
4 | 3 | case $o in |
5 | - (c) NOM_CONTAINER=$OPTARG;; | |
4 | + (c) NAME_CONTAINER_TO_REMOVE=$OPTARG;; | |
6 | 5 | esac |
7 | 6 | done |
7 | +#vérification que l'utilisateur donne bien un nom à l'CONTAINER | |
8 | +if [[ -z "$NAME_CONTAINER_TO_REMOVE" ]]; then | |
9 | + echo "Il faut donner le nom du conteneur! Relancez la commande avec les bons arguments." | |
10 | + exit 1 | |
11 | +fi | |
12 | + | |
13 | +PID=$(grep "PID" $PATH_MANIFEST/containers/$NAME_CONTAINER_TO_REMOVE.manifest | cut -d":" -f2) | |
14 | + | |
15 | +echo "Kill du container" | |
8 | 16 | kill $PID |
9 | -umount /mnt/baleine/$NOM_CONTAINER | |
10 | 17 | \ No newline at end of file |
18 | + | |
19 | +rm -rf $PATH_MANIFEST/containers/$NAME_CONTAINER_TO_REMOVE.manifest | |
20 | +rm -rf $PATH_BALEINE/containers/$NAME_CONTAINER_TO_REMOVE | |
21 | + | |
22 | +echo "Démontage de /mnt/baleine/$NAME_CONTAINER_TO_REMOVE" | |
23 | +umount /mnt/baleine/$NAME_CONTAINER_TO_REMOVE | |
24 | +#supprime mnt/container | |
25 | + | |
26 | +echo "Suppression de /mnt/baleine/$NAME_CONTAINER_TO_REMOVE" | |
27 | +#supprime l'image associé au container (manifest du container) | |
11 | 28 | \ No newline at end of file | ... | ... |