Commit b10879398daef21e02a107c0faf1e2c25d76c9fd
1 parent
3e470988
Ajout commandes
Showing
14 changed files
with
92 additions
and
43 deletions
Show diff stats
baleine.sh
@@ -7,8 +7,9 @@ | @@ -7,8 +7,9 @@ | ||
7 | #script qui va traiter ces cas, on garde les fichiers courts mais simples | 7 | #script qui va traiter ces cas, on garde les fichiers courts mais simples |
8 | 8 | ||
9 | 9 | ||
10 | -export PATH_BALEINE=/var/lib/baleine | ||
11 | -export PATH_MANIFEST=$PATH_BALEINE/manifest | 10 | +export PATH_BALEINE="/var/lib/baleine" |
11 | +export PATH_MANIFEST="$PATH_BALEINE/manifest" | ||
12 | + | ||
12 | 13 | ||
13 | if [ $# -lt 1 ]; then | 14 | if [ $# -lt 1 ]; then |
14 | printf "Baleine est un outil simple de gestion de conteneur.\n" | 15 | printf "Baleine est un outil simple de gestion de conteneur.\n" |
@@ -16,7 +17,7 @@ if [ $# -lt 1 ]; then | @@ -16,7 +17,7 @@ if [ $# -lt 1 ]; then | ||
16 | printf "\t \t baleine <commande> [arguments]\n" | 17 | printf "\t \t baleine <commande> [arguments]\n" |
17 | printf "Les commandes sont :\n \n" | 18 | printf "Les commandes sont :\n \n" |
18 | printf "\t \t %-10s %-10s \n" "container" "Lance ou stoppe un contenneur." | 19 | printf "\t \t %-10s %-10s \n" "container" "Lance ou stoppe un contenneur." |
19 | - printf "\t \t %-10s %-10s \n" "network" "Créée ou supprime des interfaces réseau." | 20 | + printf "\t \t %-10s %-10s \n" "bridge" "Créée ou supprime des commutateurs linux virtuels." |
20 | printf "\t \t %-10s %-10s \n \n" "image" "Créer ou supprime des images de contenneurs." | 21 | printf "\t \t %-10s %-10s \n \n" "image" "Créer ou supprime des images de contenneurs." |
21 | printf "Utilisez baleine <commande> help pour plus d'informations à propos d'une commande.\n" | 22 | printf "Utilisez baleine <commande> help pour plus d'informations à propos d'une commande.\n" |
22 | fi | 23 | fi |
@@ -28,9 +29,6 @@ case "$1" in | @@ -28,9 +29,6 @@ case "$1" in | ||
28 | #autrement dit, ./baleine.sh container create apellera le script container.sh avec les arguments $1=container et $2=create | 29 | #autrement dit, ./baleine.sh container create apellera le script container.sh avec les arguments $1=container et $2=create |
29 | bash container.sh "$@" | 30 | bash container.sh "$@" |
30 | ;; | 31 | ;; |
31 | - "network") | ||
32 | - bash network.sh "$@" | ||
33 | - ;; | ||
34 | "image") | 32 | "image") |
35 | bash image.sh "$@" | 33 | bash image.sh "$@" |
36 | ;; | 34 | ;; |
@@ -40,4 +38,7 @@ case "$1" in | @@ -40,4 +38,7 @@ case "$1" in | ||
40 | "help") | 38 | "help") |
41 | bash help.sh "$@" | 39 | bash help.sh "$@" |
42 | ;; | 40 | ;; |
41 | + "test") | ||
42 | + bash test.sh "$@" | ||
43 | + ;; | ||
43 | esac | 44 | esac |
44 | \ No newline at end of file | 45 | \ No newline at end of file |
container.sh
@@ -13,5 +13,11 @@ case $2 in | @@ -13,5 +13,11 @@ case $2 in | ||
13 | "stop") | 13 | "stop") |
14 | bash stop_container.sh "$@" | 14 | bash stop_container.sh "$@" |
15 | ;; | 15 | ;; |
16 | + "remove") | ||
17 | + bash remove_container.sh "$@" | ||
18 | + ;; | ||
19 | + "restart") | ||
20 | + bash restart_container.sh "$@" | ||
21 | + ;; | ||
16 | 22 | ||
17 | esac | 23 | esac |
18 | \ No newline at end of file | 24 | \ No newline at end of file |
create_bridge.sh
1 | #!/bin/bash | 1 | #!/bin/bash |
2 | NOM_BRIDGE=$3; | 2 | NOM_BRIDGE=$3; |
3 | ADDR_IPV4=$4; | 3 | ADDR_IPV4=$4; |
4 | -REPERTOIRE=${PWD} | 4 | + |
5 | 5 | ||
6 | 6 | ||
7 | #condition sur le nbre d'arguments | 7 | #condition sur le nbre d'arguments |
@@ -14,12 +14,12 @@ ip link add $NOM_BRIDGE type bridge | @@ -14,12 +14,12 @@ ip link add $NOM_BRIDGE type bridge | ||
14 | ip a add dev $NOM_BRIDGE $ADDR_IPV4 | 14 | ip a add dev $NOM_BRIDGE $ADDR_IPV4 |
15 | ip link set $NOM_BRIDGE down | 15 | ip link set $NOM_BRIDGE down |
16 | ip link set $NOM_BRIDGE up | 16 | ip link set $NOM_BRIDGE up |
17 | - | ||
18 | -touch $NOM_BRIDGE.manifest # On crée un fichier contenant les infos du bridge | ||
19 | -echo "$NOM_BRIDGE" >> $NOM_BRIDGE.manifest #nom du bridge | 17 | +FILE= $NOM_BRIDGE.manifest |
18 | +touch FILE # On crée un fichier contenant les infos du bridge | ||
19 | +echo "$NOM_BRIDGE" >> FILE #nom du bridge | ||
20 | 20 | ||
21 | #condition de bordure pour le dossier Bridges | 21 | #condition de bordure pour le dossier Bridges |
22 | -if [[ ! -d "$REPERTOIRE/baleine/Bridges" ]]; then | ||
23 | - mkdir -p $REPERTOIRE/baleine/Bridges && mv $NOM_BRIDGE.manifest $REPERTOIRE/baleine/Bridges | 22 | +if [[ ! -d "$PATH_MANIFEST/bridges" ]]; then |
23 | + mkdir -p $PATH_MANIFEST/bridges #&& mv FILE $PATH_MANIFEST/bridges | ||
24 | fi | 24 | fi |
25 | -mv $NOM_BRIDGE.manifest $REPERTOIRE/baleine/Bridges | ||
26 | \ No newline at end of file | 25 | \ No newline at end of file |
26 | +mv FILE $PATH_MANIFEST/bridges | ||
27 | \ No newline at end of file | 27 | \ No newline at end of file |
create_container.sh
@@ -13,7 +13,7 @@ PROGRAM=$7; | @@ -13,7 +13,7 @@ PROGRAM=$7; | ||
13 | 13 | ||
14 | 14 | ||
15 | #On veut récupérer le chemin de l'image | 15 | #On veut récupérer le chemin de l'image |
16 | -PATH_IMAGE= grep chemin $PATH_MANIFEST/$NOM_IMAGE.manifest | cut -d':' -f2 | 16 | +PATH_IMAGE= grep chemin $PATH_MANIFEST/images/$NOM_IMAGE.manifest | cut -d':' -f2 |
17 | 17 | ||
18 | #on fait une copie dans /var/BaleineImages pour mount depuis le conteneur | 18 | #on fait une copie dans /var/BaleineImages pour mount depuis le conteneur |
19 | if [[ ! -d "$PATH_BALEINE/containers/$NOM_CONTAINER" ]]; then | 19 | if [[ ! -d "$PATH_BALEINE/containers/$NOM_CONTAINER" ]]; then |
@@ -48,6 +48,15 @@ echo "nom_image:$NOM_IMAGE" >> $FILE #nom de son image | @@ -48,6 +48,15 @@ echo "nom_image:$NOM_IMAGE" >> $FILE #nom de son image | ||
48 | echo "pid:$PID" >> $FILE #Son PID | 48 | echo "pid:$PID" >> $FILE #Son PID |
49 | echo "nom_bridge:$NOM_BRIDGE" >> $FILE #SON BRIDGE | 49 | echo "nom_bridge:$NOM_BRIDGE" >> $FILE #SON BRIDGE |
50 | 50 | ||
51 | +#temps d'exécution du container ? | ||
52 | +# start_time=`date +%s` | ||
53 | +# <command-to-execute> | ||
54 | +# end_time=`date +%s` | ||
55 | +# echo execution time was `expr $end_time - $start_time` s. | ||
56 | +# ou | ||
57 | +#start_time=`date +%s` | ||
58 | +#<command-to-execute> && echo run time is $(expr `date +%s` - $start_time) s | ||
59 | + | ||
51 | if [[ ! -d "$PATH_MANIFEST/containers" ]]; then | 60 | if [[ ! -d "$PATH_MANIFEST/containers" ]]; then |
52 | mkdir -p $PATH_MANIFEST/containers | 61 | mkdir -p $PATH_MANIFEST/containers |
53 | fi | 62 | fi |
create_image.sh
1 | #!/bin/bash | 1 | #!/bin/bash |
2 | -#TOUT MARCHE BIEN ICI | ||
3 | 2 | ||
4 | NOM_IMAGE=$3; # L'utilisateur devra spécifier le nom de l'image | 3 | NOM_IMAGE=$3; # L'utilisateur devra spécifier le nom de l'image |
5 | SIZE=$4; #L'utilisateur devra spécifier la taille du disque qu'il souhaite allouer | 4 | SIZE=$4; #L'utilisateur devra spécifier la taille du disque qu'il souhaite allouer |
@@ -15,12 +14,12 @@ if [ "$SIZE" -lt 0 ] || [ "$SIZE" -gt 10240 ] || [ -z $SIZE ]; then #vérifie qu | @@ -15,12 +14,12 @@ if [ "$SIZE" -lt 0 ] || [ "$SIZE" -gt 10240 ] || [ -z $SIZE ]; then #vérifie qu | ||
15 | $SIZE=10240 | 14 | $SIZE=10240 |
16 | fi | 15 | fi |
17 | 16 | ||
18 | -mkdir -p /usr/lib/baleine/images | 17 | +mkdir -p $PATH_BALEINE/images |
19 | 18 | ||
20 | #condition pour le répertoire | 19 | #condition pour le répertoire |
21 | if [[ -z $REPERTOIRE ]]; then #si l'utilisateur oublie de donner le path on utilise celui-ci par défaut | 20 | if [[ -z $REPERTOIRE ]]; then #si l'utilisateur oublie de donner le path on utilise celui-ci par défaut |
22 | echo "Il n'y pas eu d'argements donnés pour répertoire, je fais moi même le chemin" | 21 | echo "Il n'y pas eu d'argements donnés pour répertoire, je fais moi même le chemin" |
23 | - REPERTOIRE=/var/lib/baleine/images | 22 | + REPERTOIRE=$PATH_BALEINE/images |
24 | fi | 23 | fi |
25 | 24 | ||
26 | #vérification que l'utilisateur donne bien un nom à l'image | 25 | #vérification que l'utilisateur donne bien un nom à l'image |
@@ -28,29 +27,32 @@ if [[ -z "$NOM_IMAGE" ]]; then | @@ -28,29 +27,32 @@ if [[ -z "$NOM_IMAGE" ]]; then | ||
28 | echo "Il faut donner le nom de l'image ! Relancez la commande avec les bons arguments." | 27 | echo "Il faut donner le nom de l'image ! Relancez la commande avec les bons arguments." |
29 | exit | 28 | exit |
30 | fi | 29 | fi |
31 | -#génération de nombres aléatoires afin de créer à chaque fois un fichier avec un nombre unique (éviter qu'un soit écraser) | ||
32 | -NUMBER=$(cat /dev/urandom | tr -dc '0-9' | fold -w 256 | head -n 1 | sed -e 's/^0*//' | head --bytes 3) | ||
33 | -if [ "$NUMBER" == "" ]; then | ||
34 | - NUMBER=0 | ||
35 | -fi | ||
36 | -echo $REPERTOIRE | 30 | +# #génération de nombres aléatoires afin de créer à chaque fois un fichier avec un nombre unique (éviter qu'un soit écraser) |
31 | +# NUMBER=$(cat /dev/urandom | tr -dc '0-9' | fold -w 256 | head -n 1 | sed -e 's/^0*//' | head --bytes 3) | ||
32 | +# if [ "$NUMBER" == "" ]; then | ||
33 | +# NUMBER=0 | ||
34 | +# fi | ||
35 | +echo "Le repertoire est $REPERTOIRE" | ||
37 | #Crée image | 36 | #Crée image |
37 | +FILE=$NOM_IMAGE.manifest | ||
38 | echo "Je vais commencer à allouer !" | 38 | echo "Je vais commencer à allouer !" |
39 | dd if=/dev/zero of=$REPERTOIRE/$NOM_IMAGE bs=1024k count=$SIZE | 39 | dd if=/dev/zero of=$REPERTOIRE/$NOM_IMAGE bs=1024k count=$SIZE |
40 | -touch $NOM_IMAGE.$NUMBER.manifest | ||
41 | -echo "$NOM_IMAGE" >> $NOM_IMAGE.$NUMBER.manifest #nom de l'image | ||
42 | -echo "$SIZE">> $NOM_IMAGE.$NUMBER.manifest #taille de l'image | ||
43 | -echo "$REPERTOIRE/$NOM_IMAGE">> $NOM_IMAGE.$NUMBER.manifest #son chemin | 40 | +touch FILE |
41 | +echo "nom image:$NOM_IMAGE" >> FILE #nom de l'image | ||
42 | +echo "taille:$SIZE">> FILE #taille de l'image | ||
43 | +echo "chemin:$REPERTOIRE">> FILE #son chemin | ||
44 | + | ||
45 | + | ||
44 | 46 | ||
45 | -if [[ ! -d "$REPERTOIRE/baleine/Images" ]]; then | ||
46 | - mkdir -p $REPERTOIRE/baleine/Images && mv $NOM_IMAGE.$NUMBER.manifest $REPERTOIRE/baleine/Images | 47 | +if [[ ! -d "$PATH_MANIFEST/images" ]]; then |
48 | + mkdir -p $PATH_MANIFEST/images #&& mv $NOM_IMAGE.$NUMBER.manifest $REPERTOIRE/images | ||
47 | fi | 49 | fi |
48 | -mv $NOM_IMAGE.$NUMBER.manifest $REPERTOIRE/baleine/Images | 50 | +mv $NOM_IMAGE.manifest $PATH_MANIFEST/images |
49 | 51 | ||
50 | 52 | ||
51 | 53 | ||
52 | #création du système de fichiers au format "ext4" | 54 | #création du système de fichiers au format "ext4" |
53 | -mkfs.ext4 $REPERTOIRE/$NOM_IMAGE | 55 | +mkfs.ext4 $REPERTOIRE/images/$NOM_IMAGE |
54 | 56 | ||
55 | 57 | ||
56 | 58 | ||
@@ -59,7 +61,7 @@ export http_proxy=http://proxy.polytech-lille.fr:3128 | @@ -59,7 +61,7 @@ export http_proxy=http://proxy.polytech-lille.fr:3128 | ||
59 | 61 | ||
60 | #Création de l'arborescence Debian avec debootstrap | 62 | #Création de l'arborescence Debian avec debootstrap |
61 | echo "Je vais faire le debootstrap" | 63 | echo "Je vais faire le debootstrap" |
62 | -debootstrap --include=apache2,vim,nano stable /mnt/$NOM_IMAGE | 64 | +debootstrap --include=apache2,vim,nano stable /mnt/baleine/$NOM_IMAGE |
63 | 65 | ||
64 | #On renseigne le fichier fstab du conteneur | 66 | #On renseigne le fichier fstab du conteneur |
65 | echo "proc /proc proc defaults 0 0" >> /mnt/$NOM_IMAGE/etc/fstab | 67 | echo "proc /proc proc defaults 0 0" >> /mnt/$NOM_IMAGE/etc/fstab |
66 | \ No newline at end of file | 68 | \ No newline at end of file |
list_bridges.sh
list_container.sh
list_images.sh
remove_bridge.sh
1 | #!/bin/bash | 1 | #!/bin/bash |
2 | NOM_BRIDGE_TO_REMOVE=$3; | 2 | NOM_BRIDGE_TO_REMOVE=$3; |
3 | -REPERTOIRE=${PWD} | 3 | + |
4 | 4 | ||
5 | #vérification que l'utilisateur donne bien un nom à l'image | 5 | #vérification que l'utilisateur donne bien un nom à l'image |
6 | if [[ -z "$NOM_BRIDGE_TO_REMOVE" ]]; then | 6 | if [[ -z "$NOM_BRIDGE_TO_REMOVE" ]]; then |
7 | echo "Il faut donner le nom du bridge à supprimer ! Relancez la commande avec les bons arguments." | 7 | echo "Il faut donner le nom du bridge à supprimer ! Relancez la commande avec les bons arguments." |
8 | exit | 8 | exit |
9 | fi | 9 | fi |
10 | -chmod -R 755 $REPERTOIRE/baleine | ||
11 | -rm $REPERTOIRE/baleine/Bridges/$NOM_BRIDGE_TO_REMOVE.* | 10 | +chmod -R 755 $PATH_MANIFEST |
11 | +rm $PATH_MANIFEST/bridges/$NOM_BRIDGE_TO_REMOVE.* | ||
12 | ip link delete $NOM_BRIDGE_TO_REMOVE type bridge | 12 | ip link delete $NOM_BRIDGE_TO_REMOVE type bridge |
13 | -delbr | 13 | +#delbr |
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +#!/bin/bash | ||
2 | +NOM_CONTAINER_TO_REMOVE=$3; | ||
3 | + | ||
4 | +#vérification que l'utilisateur donne bien un nom à l'CONTAINER | ||
5 | +if [[ -z "$NOM_CONTAINER_TO_REMOVE" ]]; then | ||
6 | + echo "Il faut donner le nom du conteneur! Relancez la commande avec les bons arguments." | ||
7 | + exit | ||
8 | +fi | ||
9 | +chmod -R 755 $PATH_MANIFEST | ||
10 | +rm $PATH_MANIFEST/containers/$NOM_CONTAINER_TO_REMOVE.manifest | ||
11 | +rm $PATH_BALEINE/containers/$NOM_CONTAINER_TO_REMOVE | ||
12 | + | ||
13 | +#il doit remove aussi l'image, les manifessts les bridges supprime la copie? |
remove_image.sh
1 | #!/bin/bash | 1 | #!/bin/bash |
2 | NOM_IMAGE_TO_REMOVE=$3; | 2 | NOM_IMAGE_TO_REMOVE=$3; |
3 | -REPERTOIRE=${PWD} | ||
4 | 3 | ||
5 | #vérification que l'utilisateur donne bien un nom à l'image | 4 | #vérification que l'utilisateur donne bien un nom à l'image |
6 | if [[ -z "$NOM_IMAGE_TO_REMOVE" ]]; then | 5 | if [[ -z "$NOM_IMAGE_TO_REMOVE" ]]; then |
7 | echo "Il faut donner le nom de l'image ! Relancez la commande avec les bons arguments." | 6 | echo "Il faut donner le nom de l'image ! Relancez la commande avec les bons arguments." |
8 | exit | 7 | exit |
9 | fi | 8 | fi |
10 | -chmod -R 755 $REPERTOIRE/baleine | ||
11 | -rm $REPERTOIRE/baleine/Images/$NOM_IMAGE_TO_REMOVE.manifest | ||
12 | -rm $REPERTOIRE/$NOM_IMAGE_TO_REMOVE | ||
13 | \ No newline at end of file | 9 | \ No newline at end of file |
10 | +chmod -R 755 $PATH_MANIFEST | ||
11 | +rm $PATH_MANIFEST/images/$NOM_IMAGE_TO_REMOVE.manifest | ||
12 | +rm $PATH_BALEINE/images/$NOM_IMAGE_TO_REMOVE | ||
14 | \ No newline at end of file | 13 | \ No newline at end of file |
@@ -0,0 +1,10 @@ | @@ -0,0 +1,10 @@ | ||
1 | +#!/bin/bash | ||
2 | +NOM_CONTAINER=$3; | ||
3 | +NOM_IMAGE=$4; | ||
4 | + | ||
5 | +mount -t ext4 -o loop $PATH_BALEINE/containers/$NOM_CONTAINER/$NOM_IMAGE /mnt/baleine/$NOM_CONTAINER | ||
6 | + | ||
7 | +nohup unshare -p -f -m -n -u chroot /mnt/baleine/$NOM_CONTAINER $PROGRAM -c "mount /proc" & | ||
8 | +PID=$! | ||
9 | + | ||
10 | +ps axo ppid,pid | grep "^ *$PID" | sed -e 's/.* //' |