Commit b10879398daef21e02a107c0faf1e2c25d76c9fd

Authored by hmalti
1 parent 3e470988

Ajout commandes

baleine.sh
... ... @@ -7,8 +7,9 @@
7 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 14 if [ $# -lt 1 ]; then
14 15 printf "Baleine est un outil simple de gestion de conteneur.\n"
... ... @@ -16,7 +17,7 @@ if [ $# -lt 1 ]; then
16 17 printf "\t \t baleine <commande> [arguments]\n"
17 18 printf "Les commandes sont :\n \n"
18 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 21 printf "\t \t %-10s %-10s \n \n" "image" "Créer ou supprime des images de contenneurs."
21 22 printf "Utilisez baleine <commande> help pour plus d'informations à propos d'une commande.\n"
22 23 fi
... ... @@ -28,9 +29,6 @@ case &quot;$1&quot; in
28 29 #autrement dit, ./baleine.sh container create apellera le script container.sh avec les arguments $1=container et $2=create
29 30 bash container.sh "$@"
30 31 ;;
31   - "network")
32   - bash network.sh "$@"
33   - ;;
34 32 "image")
35 33 bash image.sh "$@"
36 34 ;;
... ... @@ -40,4 +38,7 @@ case &quot;$1&quot; in
40 38 "help")
41 39 bash help.sh "$@"
42 40 ;;
  41 + "test")
  42 + bash test.sh "$@"
  43 + ;;
43 44 esac
44 45 \ No newline at end of file
... ...
container.sh
... ... @@ -13,5 +13,11 @@ case $2 in
13 13 "stop")
14 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 23 esac
18 24 \ No newline at end of file
... ...
create_bridge.sh
1 1 #!/bin/bash
2 2 NOM_BRIDGE=$3;
3 3 ADDR_IPV4=$4;
4   -REPERTOIRE=${PWD}
  4 +
5 5  
6 6  
7 7 #condition sur le nbre d'arguments
... ... @@ -14,12 +14,12 @@ ip link add $NOM_BRIDGE type bridge
14 14 ip a add dev $NOM_BRIDGE $ADDR_IPV4
15 15 ip link set $NOM_BRIDGE down
16 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 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 24 fi
25   -mv $NOM_BRIDGE.manifest $REPERTOIRE/baleine/Bridges
26 25 \ No newline at end of file
  26 +mv FILE $PATH_MANIFEST/bridges
27 27 \ No newline at end of file
... ...
create_container.sh
... ... @@ -13,7 +13,7 @@ PROGRAM=$7;
13 13  
14 14  
15 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 18 #on fait une copie dans /var/BaleineImages pour mount depuis le conteneur
19 19 if [[ ! -d "$PATH_BALEINE/containers/$NOM_CONTAINER" ]]; then
... ... @@ -48,6 +48,15 @@ echo &quot;nom_image:$NOM_IMAGE&quot; &gt;&gt; $FILE #nom de son image
48 48 echo "pid:$PID" >> $FILE #Son PID
49 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 60 if [[ ! -d "$PATH_MANIFEST/containers" ]]; then
52 61 mkdir -p $PATH_MANIFEST/containers
53 62 fi
... ...
create_image.sh
1 1 #!/bin/bash
2   -#TOUT MARCHE BIEN ICI
3 2  
4 3 NOM_IMAGE=$3; # L'utilisateur devra spécifier le nom de l'image
5 4 SIZE=$4; #L'utilisateur devra spécifier la taille du disque qu'il souhaite allouer
... ... @@ -15,12 +14,12 @@ if [ &quot;$SIZE&quot; -lt 0 ] || [ &quot;$SIZE&quot; -gt 10240 ] || [ -z $SIZE ]; then #vérifie qu
15 14 $SIZE=10240
16 15 fi
17 16  
18   -mkdir -p /usr/lib/baleine/images
  17 +mkdir -p $PATH_BALEINE/images
19 18  
20 19 #condition pour le répertoire
21 20 if [[ -z $REPERTOIRE ]]; then #si l'utilisateur oublie de donner le path on utilise celui-ci par défaut
22 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 23 fi
25 24  
26 25 #vérification que l'utilisateur donne bien un nom à l'image
... ... @@ -28,29 +27,32 @@ if [[ -z &quot;$NOM_IMAGE&quot; ]]; then
28 27 echo "Il faut donner le nom de l'image ! Relancez la commande avec les bons arguments."
29 28 exit
30 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 36 #Crée image
  37 +FILE=$NOM_IMAGE.manifest
38 38 echo "Je vais commencer à allouer !"
39 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 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 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 61  
60 62 #Création de l'arborescence Debian avec debootstrap
61 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 66 #On renseigne le fichier fstab du conteneur
65 67 echo "proc /proc proc defaults 0 0" >> /mnt/$NOM_IMAGE/etc/fstab
66 68 \ No newline at end of file
... ...
list_bridges.sh
1 1 #!/bin/bash
2   -cd $PWD/baleine/Bridges
  2 +cd $PATH_MANIFEST/bridges
3 3  
4 4 for eachfile in ./*.manifest
5 5 do
... ...
list_container.sh
1 1 #!/bin/bash
2 2  
3   -cd $PWD/baleine/Containers
  3 +cd $PATH_MANIFEST/containers
4 4  
5 5 for eachfile in ./*.manifest
6 6 do
... ...
list_images.sh
1 1 #!/bin/bash
2 2  
3   -cd $PWD/baleine/Images
  3 +cd $PATH_MANIFEST/images
4 4  
5 5 for eachfile in ./*.manifest
6 6 do
... ...
remove_bridge.sh
1 1 #!/bin/bash
2 2 NOM_BRIDGE_TO_REMOVE=$3;
3   -REPERTOIRE=${PWD}
  3 +
4 4  
5 5 #vérification que l'utilisateur donne bien un nom à l'image
6 6 if [[ -z "$NOM_BRIDGE_TO_REMOVE" ]]; then
7 7 echo "Il faut donner le nom du bridge à supprimer ! Relancez la commande avec les bons arguments."
8 8 exit
9 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 12 ip link delete $NOM_BRIDGE_TO_REMOVE type bridge
13   -delbr
  13 +#delbr
... ...
remove_container.sh 0 → 100644
... ... @@ -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 1 #!/bin/bash
2 2 NOM_IMAGE_TO_REMOVE=$3;
3   -REPERTOIRE=${PWD}
4 3  
5 4 #vérification que l'utilisateur donne bien un nom à l'image
6 5 if [[ -z "$NOM_IMAGE_TO_REMOVE" ]]; then
7 6 echo "Il faut donner le nom de l'image ! Relancez la commande avec les bons arguments."
8 7 exit
9 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 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 13 \ No newline at end of file
... ...
restart_container.sh 0 → 100644
... ... @@ -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/.* //'
... ...
stop_container.sh 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +#!/bin/bash
  2 +NOM_CONTAINER=$3;
  3 +
  4 +kill $PID
  5 +umount /mnt/baleine/$NOM_CONTAINER
0 6 \ No newline at end of file
... ...
test.sh 0 → 100644
... ... @@ -0,0 +1,4 @@
  1 +#!/bin/bash
  2 +
  3 +source baleine.sh
  4 +echo "$PATH_MANIFEST"
0 5 \ No newline at end of file
... ...