Commit b02be5245f09c95a2efbcb1f1b7857cf0ad83225

Authored by hmalti
1 parent 17bfc359

Correctifs + gestion suppression interfaces

réseaux
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 [ &quot;$SIZE&quot; == &quot;&quot; ] || [ &quot;$SIZE&quot; -lt 0 ] || [ &quot;$SIZE&quot; -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
1 1 #!/bin/bash
2 2 for eachfile in $PATH_MANIFEST/bridges/*.manifest
3 3 do
  4 + #Test si des fichiers sont présents
  5 + test -f "$eachfile" || continue
4 6 NOM_BRIDGE=$(grep nom_bridge $eachfile | cut -d ':' -f2)
5 7 echo "----------------------"
6 8 brctl show $NOM_BRIDGE
... ...
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
1 1 #!/bin/bash
2   -NAME_BRIDGE_TO_REMOVE=$1;
3 2 while getopts b: o; do
4 3 case $o in
5 4 (b) NAME_BRIDGE_TO_REMOVE=$OPTARG;;
... ...
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
... ...