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 | #!/bin/bash | 1 | #!/bin/bash |
2 | +set -x | ||
2 | 3 | ||
3 | -set -x | ||
4 | while getopts i:c:b:r:a:p: o; do | 4 | while getopts i:c:b:r:a:p: o; do |
5 | case $o in | 5 | case $o in |
6 | (i) NOM_IMAGE=$OPTARG;; | 6 | (i) NOM_IMAGE=$OPTARG;; |
@@ -52,27 +52,19 @@ echo "proc /proc proc defaults 0 0" >> /mnt/baleine/$NOM_CONTAINER/etc/fstab | @@ -52,27 +52,19 @@ echo "proc /proc proc defaults 0 0" >> /mnt/baleine/$NOM_CONTAINER/etc/fstab | ||
52 | echo "$PROGRAM" >> /mnt/baleine/$NOM_CONTAINER/etc/rc.local | 52 | echo "$PROGRAM" >> /mnt/baleine/$NOM_CONTAINER/etc/rc.local |
53 | 53 | ||
54 | #On fait le unshare sur l'image passée en paramètre, | 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 | nohup unshare -p -f -m -n -u chroot /mnt/baleine/$NOM_CONTAINER /bin/sh -c "mount /proc ; $PROGRAM ; while true ; do sleep 10 ; done" & | 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 | PID=$! | 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 | echo "PID Unshare :$PID" | 59 | echo "PID Unshare :$PID" |
65 | 60 | ||
66 | - | ||
67 | -#TODO : Gerer les noms des interfaces < x caractères | ||
68 | - | ||
69 | FILE=$NOM_CONTAINER.manifest | 61 | FILE=$NOM_CONTAINER.manifest |
70 | date=$(date) | 62 | date=$(date) |
71 | 63 | ||
72 | echo "nom_container:$NOM_CONTAINER" >> $FILE #nom du conteneur | 64 | echo "nom_container:$NOM_CONTAINER" >> $FILE #nom du conteneur |
73 | echo "nom_image:$NOM_IMAGE" >> $FILE #nom de son image | 65 | echo "nom_image:$NOM_IMAGE" >> $FILE #nom de son image |
74 | echo "pid:$PID" >> $FILE #Son PID | 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 | echo "starting_time: $date" >> $FILE #starting time | 68 | echo "starting_time: $date" >> $FILE #starting time |
77 | 69 | ||
78 | 70 | ||
@@ -102,11 +94,11 @@ fi | @@ -102,11 +94,11 @@ fi | ||
102 | 94 | ||
103 | ARRAY_INTERFACES=() | 95 | ARRAY_INTERFACES=() |
104 | 96 | ||
105 | -for i in $(seq 1 $NOMBRE_INTERFACES); do | 97 | +for ((i = 0 ; i<$NOMBRE_INTERFACES ; i++)); do |
106 | #Creation d'un hash du nom du container pour créer les interfaces | 98 | #Creation d'un hash du nom du container pour créer les interfaces |
107 | HASH=$(sha1sum <<< $NOM_CONTAINER) | 99 | HASH=$(sha1sum <<< $NOM_CONTAINER) |
108 | #On prend les trois premiers caractères du hash, succédé de l'index de l'interface | 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 | ip link add $INTERFACE_NAME type veth peer name eth$i@$INTERFACE_NAME | 102 | ip link add $INTERFACE_NAME type veth peer name eth$i@$INTERFACE_NAME |
111 | #On rajoute l'interface à la liste des interfaces du container | 103 | #On rajoute l'interface à la liste des interfaces du container |
112 | ARRAY_INTERFACES+=($INTERFACE_NAME) | 104 | ARRAY_INTERFACES+=($INTERFACE_NAME) |
@@ -119,7 +111,6 @@ for i in $(seq 1 $NOMBRE_INTERFACES); do | @@ -119,7 +111,6 @@ for i in $(seq 1 $NOMBRE_INTERFACES); do | ||
119 | ip link set eth$i@$INTERFACE_NAME netns /proc/$PID/ns/net name eth$i | 111 | ip link set eth$i@$INTERFACE_NAME netns /proc/$PID/ns/net name eth$i |
120 | done | 112 | done |
121 | 113 | ||
122 | - | ||
123 | #Compte le nombre de bridges présents | 114 | #Compte le nombre de bridges présents |
124 | NOMBRE_BRIDGES=$(echo $BRIDGES | awk -F '[,]' '{print NF}') | 115 | NOMBRE_BRIDGES=$(echo $BRIDGES | awk -F '[,]' '{print NF}') |
125 | 116 | ||
@@ -130,19 +121,19 @@ ARRAY_BRIDGES=() | @@ -130,19 +121,19 @@ ARRAY_BRIDGES=() | ||
130 | ARRAY_IPV4=() | 121 | ARRAY_IPV4=() |
131 | 122 | ||
132 | for b in $BRIDGES; do | 123 | for b in $BRIDGES; do |
133 | - ARRAY_BRIDGES+=(b) | 124 | + echo "Un bridge: $b" |
125 | + ARRAY_BRIDGES+=($b) | ||
134 | done | 126 | done |
135 | 127 | ||
136 | for a in $ADDRS_IPV4; do | 128 | for a in $ADDRS_IPV4; do |
137 | - ARRAY_IPV4+=(a) | 129 | + echo "Une addr: $a" |
130 | + ARRAY_IPV4+=($a) | ||
138 | done | 131 | done |
139 | 132 | ||
140 | for (( i=0 ; i < ${#ARRAY_IPV4[*]} ; i++ )); do | 133 | for (( i=0 ; i < ${#ARRAY_IPV4[*]} ; i++ )); do |
141 | nsenter -t $PID -n ip a | 134 | nsenter -t $PID -n ip a |
142 | - | ||
143 | #Attribution de la i-ème adresse ip à l'interface i | 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 | #On redemarre l'interface i dans le container | 137 | #On redemarre l'interface i dans le container |
147 | nsenter -t $PID -n ip link set dev eth$i down | 138 | nsenter -t $PID -n ip link set dev eth$i down |
148 | nsenter -t $PID -n ip link set dev eth$i up | 139 | nsenter -t $PID -n ip link set dev eth$i up |
@@ -150,16 +141,18 @@ done | @@ -150,16 +141,18 @@ done | ||
150 | 141 | ||
151 | for (( i=0 ; i < ${#ARRAY_BRIDGES[*]} ; i++ )); do | 142 | for (( i=0 ; i < ${#ARRAY_BRIDGES[*]} ; i++ )); do |
152 | #Pour chaque interface, on la relie à son bridge associé | 143 | #Pour chaque interface, on la relie à son bridge associé |
144 | + echo "Nom bridge :${ARRAY_BRIDGES[i]}" | ||
153 | ip link set ${ARRAY_INTERFACES[i]} master ${ARRAY_BRIDGES[i]} | 145 | ip link set ${ARRAY_INTERFACES[i]} master ${ARRAY_BRIDGES[i]} |
154 | done | 146 | done |
155 | 147 | ||
156 | #Chaine de caractère contenant toutes les interfaces du container, séparées par "," | 148 | #Chaine de caractère contenant toutes les interfaces du container, séparées par "," |
157 | 149 | ||
158 | STRING_INTERFACE="" | 150 | STRING_INTERFACE="" |
159 | -for (( i=0 ; i < ${#ARRAY_INTERFACE[*]} ; i++)); do | 151 | +for (( i=0 ; i < ${#ARRAY_INTERFACES[*]} ; i++)); do |
160 | STRING_INTERFACE="$STRING_INTERFACE,${ARRAY_INTERFACES[i]}" | 152 | STRING_INTERFACE="$STRING_INTERFACE,${ARRAY_INTERFACES[i]}" |
161 | #Exemple, à la fin on aura ",vif143,vif560" | 153 | #Exemple, à la fin on aura ",vif143,vif560" |
162 | done | 154 | done |
163 | 155 | ||
164 | #On supprime la première virgule exédentaire | 156 | #On supprime la première virgule exédentaire |
165 | -STRING_INTERFACE=$(echo $STRING_INTERFACE | sed -e 's/^.//') | ||
166 | \ No newline at end of file | 157 | \ No newline at end of file |
158 | +STRING_INTERFACE=$(echo $STRING_INTERFACE | sed -e 's/^.//') | ||
159 | +echo "interfaces:$STRING_INTERFACE" >> $FILE | ||
167 | \ No newline at end of file | 160 | \ No newline at end of file |
create_image.sh
@@ -15,7 +15,8 @@ if [ "$SIZE" == "" ] || [ "$SIZE" -lt 0 ] || [ "$SIZE" -gt 10240 ]; then | @@ -15,7 +15,8 @@ if [ "$SIZE" == "" ] || [ "$SIZE" -lt 0 ] || [ "$SIZE" -gt 10240 ]; then | ||
15 | SIZE=10240 | 15 | SIZE=10240 |
16 | fi | 16 | fi |
17 | 17 | ||
18 | -echo "Le size est de $SIZE" | 18 | +echo "Création d'une image de taille $SIZE" |
19 | + | ||
19 | mkdir -p $PATH_BALEINE/images | 20 | mkdir -p $PATH_BALEINE/images |
20 | 21 | ||
21 | if [[ -z $REPERTOIRE ]]; then | 22 | if [[ -z $REPERTOIRE ]]; then |
list_bridges.sh
1 | #!/bin/bash | 1 | #!/bin/bash |
2 | for eachfile in $PATH_MANIFEST/bridges/*.manifest | 2 | for eachfile in $PATH_MANIFEST/bridges/*.manifest |
3 | do | 3 | do |
4 | + #Test si des fichiers sont présents | ||
5 | + test -f "$eachfile" || continue | ||
4 | NOM_BRIDGE=$(grep nom_bridge $eachfile | cut -d ':' -f2) | 6 | NOM_BRIDGE=$(grep nom_bridge $eachfile | cut -d ':' -f2) |
5 | echo "----------------------" | 7 | echo "----------------------" |
6 | brctl show $NOM_BRIDGE | 8 | brctl show $NOM_BRIDGE |
list_container.sh
1 | #!/bin/bash | 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 | do | 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 | done | 17 | done |
list_images.sh
@@ -2,6 +2,8 @@ | @@ -2,6 +2,8 @@ | ||
2 | 2 | ||
3 | for eachfile in $PATH_MANIFEST/images/*.manifest | 3 | for eachfile in $PATH_MANIFEST/images/*.manifest |
4 | do | 4 | do |
5 | + #Test si des fichiers sont présents | ||
6 | + test -f "$eachfile" || continue | ||
5 | NOM_IMAGE=$(grep nom_image $eachfile | cut -d ':' -f2) | 7 | NOM_IMAGE=$(grep nom_image $eachfile | cut -d ':' -f2) |
6 | TAILLE=$(grep taille $eachfile | cut -d ':' -f2) | 8 | TAILLE=$(grep taille $eachfile | cut -d ':' -f2) |
7 | CHEMIN=$(grep chemin $eachfile | cut -d ':' -f2) | 9 | CHEMIN=$(grep chemin $eachfile | cut -d ':' -f2) |
remove_bridge.sh
remove_container.sh
1 | #!/bin/bash | 1 | #!/bin/bash |
2 | +set -x | ||
2 | while getopts c: o; do | 3 | while getopts c: o; do |
3 | case $o in | 4 | case $o in |
4 | (c) NAME_CONTAINER_TO_REMOVE=$OPTARG;; | 5 | (c) NAME_CONTAINER_TO_REMOVE=$OPTARG;; |
@@ -6,19 +7,32 @@ while getopts c: o; do | @@ -6,19 +7,32 @@ while getopts c: o; do | ||
6 | done | 7 | done |
7 | #vérification que l'utilisateur donne bien un nom à l'CONTAINER | 8 | #vérification que l'utilisateur donne bien un nom à l'CONTAINER |
8 | if [[ -z "$NAME_CONTAINER_TO_REMOVE" ]]; then | 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 | exit | 11 | exit |
11 | fi | 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 | umount /mnt/baleine/$NAME_CONTAINER_TO_REMOVE | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 40 | \ No newline at end of file |
restart_container.sh
@@ -5,9 +5,11 @@ while getopts c:i: o; do | @@ -5,9 +5,11 @@ while getopts c:i: o; do | ||
5 | (i) NOM_IMAGE=$OPTARG;; | 5 | (i) NOM_IMAGE=$OPTARG;; |
6 | esac | 6 | esac |
7 | done | 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 | PID=$! | 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 | \ No newline at end of file | 16 | \ No newline at end of file |
stop_container.sh
1 | #!/bin/bash | 1 | #!/bin/bash |
2 | - | ||
3 | while getopts c: o; do | 2 | while getopts c: o; do |
4 | case $o in | 3 | case $o in |
5 | - (c) NOM_CONTAINER=$OPTARG;; | 4 | + (c) NAME_CONTAINER_TO_REMOVE=$OPTARG;; |
6 | esac | 5 | esac |
7 | done | 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 | kill $PID | 16 | kill $PID |
9 | -umount /mnt/baleine/$NOM_CONTAINER | ||
10 | \ No newline at end of file | 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 | \ No newline at end of file | 28 | \ No newline at end of file |