This commit is contained in:
kyodev 2017-09-23 11:35:46 +02:00
parent f13f972281
commit 0cfea9a198
2 changed files with 58 additions and 40 deletions

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
version=1.0.0 version=1.1.0
date="09/09/2017" date="23/09/2017"
projet="simpledeb" projet="simpledeb"
contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues/" contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues/"
script="getThunderbird" script="getThunderbird"
@ -14,7 +14,7 @@ user_agent="Mozilla/5.0 Firefox"
# contributeurs: kyodev # contributeurs: kyodev
##### #####
f__affichage(){ # v06/2017 définition couleurs f__affichage(){ # 06/2017 définition couleurs
YELLOW="$(printf "\033[0;33m")" # ? YELLOW="$(printf "\033[0;33m")" # ?
GREEN="$(printf "\033[0;32m")" # ok GREEN="$(printf "\033[0;32m")" # ok
BLUE="$(printf "\033[0;34m")" # info BLUE="$(printf "\033[0;34m")" # info
@ -35,7 +35,7 @@ EOF
} }
# détection architecture, assigne $architecture : linux|linux64, return 1 si architecture inconnue # détection architecture, assigne $architecture : linux|linux64, return 1 si architecture inconnue
f__architecture(){ # v07/2017 f__architecture(){ # 07/2017
case "$(uname -m)" in case "$(uname -m)" in
amd64 | x86_64 ) amd64 | x86_64 )
architecture="linux64";; architecture="linux64";;
@ -54,7 +54,7 @@ f__architecture(){ # v07/2017
} }
# test validité archive, $1 archive, assigne $archive_detect (gzip|xz|deb|zip), return 1 si inconnue # test validité archive, $1 archive, assigne $archive_detect (gzip|xz|deb|zip), return 1 si inconnue
f__archive_test(){ # v30/08/2017 f__archive_test(){ # 30/08/2017
local filetest="$(file -b $1)" local filetest="$(file -b $1)"
grep -q 'gzip compressed data' <<< "$filetest" && archive_detect="gzip" grep -q 'gzip compressed data' <<< "$filetest" && archive_detect="gzip"
grep -q 'bzip2 compressed data' <<< "$filetest" && archive_detect="bzip2" grep -q 'bzip2 compressed data' <<< "$filetest" && archive_detect="bzip2"
@ -65,25 +65,27 @@ f__archive_test(){ # v30/08/2017
} }
# affichage $1 en rouge, $1++ optionnels en bleu, sortie script sur erreur, log $1 si $opType=upgrade # affichage $1 en rouge, $1++ optionnels en bleu, sortie script sur erreur, log $1 si $opType=upgrade
f__error() { # v25/08/2017 f__error() { # 22/09/2017
echo -e "\n$RED $script $version, erreur critique: $1 $COLOR" echo -e "\n$RED $script $version, erreur critique: $1 $COLOR"
for (( i=2 ; i<=$# ; i++ )); do echo -e " $BLUE${!i}"; done for (( i=2 ; i<=$# ; i++ )); do echo -e " $BLUE${!i}"; done
unset i
echo "$COLOR" echo "$COLOR"
if [ "$opType" == "upgrade" ]; then f__log "$script $version: $1"; fi if [ "$opType" == "upgrade" ]; then f__log "$script $version: $1"; fi
exit 1 exit 1
} }
# affichage des paramètres en bleu, si $1=raw pas de ligne vide à la fin, si $1=log uniquement $2 logué # affichage des paramètres en bleu, si $1=raw pas de ligne vide à la fin, si $1=log uniquement $2 logué
f__info() { # v25/08/2017 f__info() { # 22/09/2017
local depart=1 local depart=1
if [ "$1" == "raw" ] || [ "$1" == "log" ]; then depart=2; fi if [ "$1" == "raw" ] || [ "$1" == "log" ]; then depart=2; fi
[ "$1" == "log" ] && f__log "$(sed -E 's/\\t//;s/\\n// ' <<< $2 | xargs )" [ "$1" == "log" ] && f__log "$(sed -E 's/\\t//;s/\\n// ' <<< $2 | xargs )"
for (( i=$depart ; i<=$# ; i++ )); do echo -e " $BLUE${!i}"; done for (( i=$depart ; i<=$# ; i++ )); do echo -e " $BLUE${!i}"; done
unset i
[ "$1" == raw ] && printf "$COLOR" || echo "$COLOR" [ "$1" == raw ] && printf "$COLOR" || echo "$COLOR"
} }
# log spécifique, fichier log limité à 10000octets, $1 message à loguer # log spécifique, fichier log limité à 10000octets, $1 message à loguer
f__log(){ # v08/O9/2017 f__log(){ # 08/O9/2017
if [ -w "$fileLogs" ]; then if [ -w "$fileLogs" ]; then
if [ "$(stat -c %s $fileLogs)" -ge "10000" ]; then if [ "$(stat -c %s $fileLogs)" -ge "10000" ]; then
echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null > "$fileLogs" echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null > "$fileLogs"
@ -101,7 +103,7 @@ f__log(){ # v08/O9/2017
# si $2=debOnly et si paquets manquants: return 1 et $debOnlyPackages ( $1=liste paquets ) # si $2=debOnly et si paquets manquants: return 1 et $debOnlyPackages ( $1=liste paquets )
# si $2=debOnly et si paquets présent: return 0 et $debOnlyPresents ( $1=liste paquets ) # si $2=debOnly et si paquets présent: return 0 et $debOnlyPresents ( $1=liste paquets )
# attention priorité $debOnlyPackages sur $debOnlyPresents # attention priorité $debOnlyPackages sur $debOnlyPresents
f__requis(){ # v30/08/2017-3 f__requis(){ # 22/09/2017
local dependsMissing packagesMissing command package local dependsMissing packagesMissing command package
unset debOnlyPackages debOnlyPresents unset debOnlyPackages debOnlyPresents
for i in $1; do for i in $1; do
@ -117,6 +119,7 @@ f__requis(){ # v30/08/2017-3
packagesMissing+="$package " packagesMissing+="$package "
fi fi
done done
unset i
[ "$debOnlyPackages" ] && debOnlyPackages="$(xargs <<< $debOnlyPackages)" # trim début & fin [ "$debOnlyPackages" ] && debOnlyPackages="$(xargs <<< $debOnlyPackages)" # trim début & fin
[ "$debOnlyPresents" ] && debOnlyPresents="$(xargs <<< $debOnlyPresents)" # trim début & fin [ "$debOnlyPresents" ] && debOnlyPresents="$(xargs <<< $debOnlyPresents)" # trim début & fin
[ "$debOnlyPackages" ] && return 1 [ "$debOnlyPackages" ] && return 1
@ -131,7 +134,7 @@ f__requis(){ # v30/08/2017-3
# user ayant initié la session graphique, assigne $user_ # user ayant initié la session graphique, assigne $user_
# return 1 sur échec identification user, return 2 sur absence home/ # return 1 sur échec identification user, return 2 sur absence home/
# gestion variable environnement user avec: USER_INSTALL=user script # gestion variable environnement user avec: USER_INSTALL=user script
f__user(){ # v30/08/2017-4 f__user(){ # 30/08/2017-4
if [ "$USER_INSTALL" ]; then # user_ via variable environnement, moyen d'injecter root if [ "$USER_INSTALL" ]; then # user_ via variable environnement, moyen d'injecter root
user_="$USER_INSTALL"; user_="$USER_INSTALL";
return 0 return 0
@ -165,7 +168,7 @@ f__user(){ # v30/08/2017-4
# test wget, $1 url à tester, sortie script, sur erreur ou retour à la normale # test wget, $1 url à tester, sortie script, sur erreur ou retour à la normale
# si $2=print affiche url testée & entêtes http & location (si présente) et sortie normale fonction # si $2=print affiche url testée & entêtes http & location (si présente) et sortie normale fonction
# si $2=loc affiche seulement location # si $2=loc affiche seulement location
f__wget_test(){ # v07/09/2017 f__wget_test(){ # 07/09/2017
local file_test_wget retourWget retourHttp location local file_test_wget retourWget retourHttp location
file_test_wget="/tmp/testWget-$RANDOM" file_test_wget="/tmp/testWget-$RANDOM"
wget -Sq --tries=1 --timeout=10 --user-agent="$user_agent" --spider --save-headers "$1" &>"$file_test_wget" || retourWget="$?" wget -Sq --tries=1 --timeout=10 --user-agent="$user_agent" --spider --save-headers "$1" &>"$file_test_wget" || retourWget="$?"
@ -208,7 +211,7 @@ f__wget_test(){ # v07/09/2017
} }
# affichage help # affichage help
f_help(){ # v09/09/2017 f_help(){ # 09/09/2017
printf $BLUE printf $BLUE
cat << 'EOF' cat << 'EOF'
---------------------------------------------------------------------- ----------------------------------------------------------------------
@ -244,7 +247,7 @@ echo -e " plus d'infos: $GREEN$urlNotice$COLOR\n"
} }
# demande confirmation pour continuer, $1=simple -> avertissement simple # demande confirmation pour continuer, $1=simple -> avertissement simple
f_tb_alertIcedove(){ # v08/09/2017 f_tb_alertIcedove(){ # 08/09/2017
if [ -d "/home/$user_/.icedove" ]; then if [ -d "/home/$user_/.icedove" ]; then
f__info "raw" "$RED""Profil icedove présent.$BLUE Sans utilisateur pour tester, le script n'a pas été conçu pour" \ f__info "raw" "$RED""Profil icedove présent.$BLUE Sans utilisateur pour tester, le script n'a pas été conçu pour" \
" prendre en charge automatiquement cette version de thunderbird." " prendre en charge automatiquement cette version de thunderbird."
@ -261,7 +264,7 @@ f_tb_alertIcedove(){ # v08/09/2017
} }
# copie du répertoire défault dans canal, $1=canal # copie du répertoire défault dans canal, $1=canal
f_tb_default(){ # v09/09/2017 f_tb_default(){ # 09/09/2017
local canal="$1" profileDefault local canal="$1" profileDefault
f__info "copie d'un profil default sur $canal" f__info "copie d'un profil default sur $canal"
[ -d "$dirProfil/$canal" ] || mkdir -p "$dirProfil/$canal" # répertoire du profil [ -d "$dirProfil/$canal" ] || mkdir -p "$dirProfil/$canal" # répertoire du profil
@ -279,17 +282,18 @@ f_tb_default(){ # v09/09/2017
} }
# détermination canal bas Thunderbird installé, assigne $thunderbirdCanalBas # détermination canal bas Thunderbird installé, assigne $thunderbirdCanalBas
f_tb_get_canalBas(){ # v08/09/2017 f_tb_get_canalBas(){ # 23/09/2017
unset ii thunderbirdCanalBas unset thunderbirdCanalBas
for ii in beta latest; do for i in beta latest; do
if [ -d "$dirInstall$ii/" ]; then thunderbirdCanalBas="$ii"; fi if [ -d "$dirInstall$i/" ]; then thunderbirdCanalBas="$i"; fi
done done
unset i
[ "$thunderbirdCanalBas" ] || return 1 [ "$thunderbirdCanalBas" ] || return 1
} }
# assigne $verLatest, $verBeta # assigne $verLatest, $verBeta
f_tb_get_versions(){ # v09/09/2017 f_tb_get_versions(){ # 23/09/2017
local recup_url prefixe verOnline verTbInstall canal tabEspaces=" " verPaquet local recup_url prefixe verOnline verTbInstall canal tabEspaces="$(printf " %.s" $(seq 6))" verPaquet
architecture="linux64" architecture="linux64"
for canal in latest beta; do for canal in latest beta; do
# version online # version online
@ -309,6 +313,7 @@ f_tb_get_versions(){ # v09/09/2017
verTbInstall+="$canal: $($dirInstall$canal/thunderbird -v | grep -Eo '[0-9].*')$tabEspaces" verTbInstall+="$canal: $($dirInstall$canal/thunderbird -v | grep -Eo '[0-9].*')$tabEspaces"
fi fi
done done
unset canal
printf "." printf "."
[ -x "/usr/lib/thunderbird/thunderbird" ] && verPaquet="$(sed -E 's/^.*Thunderbird (.*)$/\1/' <<< $(/usr/lib/thunderbird/thunderbird -v))" [ -x "/usr/lib/thunderbird/thunderbird" ] && verPaquet="$(sed -E 's/^.*Thunderbird (.*)$/\1/' <<< $(/usr/lib/thunderbird/thunderbird -v))"
printf ".\n" printf ".\n"
@ -321,7 +326,7 @@ f_tb_get_versions(){ # v09/09/2017
} }
# installation Thunderbird, $1 canal, $2 manuel, $3 archive # installation Thunderbird, $1 canal, $2 manuel, $3 archive
f_tb_install(){ # v08/09/2017 f_tb_install(){ # 08/09/2017
[ "$EUID" -eq 0 ] || f__error "vous devez être ROOT pour installer Thunderbird" [ "$EUID" -eq 0 ] || f__error "vous devez être ROOT pour installer Thunderbird"
local versArchive dirTemp fileTemp prefixe canal="$1" local versArchive dirTemp fileTemp prefixe canal="$1"
if [ "$2" == "manuel" ]; then if [ "$2" == "manuel" ]; then
@ -380,7 +385,7 @@ f_tb_install(){ # v08/09/2017
} }
# installation d'un Thunderbird chargé manuellement, $1 canal, $2 fichier archive # installation d'un Thunderbird chargé manuellement, $1 canal, $2 fichier archive
f_tb_install_manuel(){ # v07/09/2017 f_tb_install_manuel(){ # 07/09/2017
[ -e "$2" ] || f__error "fichier $2 introuvable" [ -e "$2" ] || f__error "fichier $2 introuvable"
f__archive_test "$2" || f__error "Le fichier $2 n'est pas une archive valide" f__archive_test "$2" || f__error "Le fichier $2 n'est pas une archive valide"
f_tb_install "$1" "manuel" "$2" f_tb_install "$1" "manuel" "$2"
@ -388,7 +393,7 @@ f_tb_install_manuel(){ # v07/09/2017
} }
# création lanceur.desktop, $1=canal à traiter # création lanceur.desktop, $1=canal à traiter
f_tb_lanceur_desktop(){ # v09/09/2017 f_tb_lanceur_desktop(){ # 09/09/2017
local canal="$1" fileDesktop="/usr/share/applications/thunderbird-$canal.desktop" local canal="$1" fileDesktop="/usr/share/applications/thunderbird-$canal.desktop"
echo "[Desktop Entry]" >> "$fileDesktop" echo "[Desktop Entry]" >> "$fileDesktop"
echo "Name=Thunderbird $canal" >> "$fileDesktop" echo "Name=Thunderbird $canal" >> "$fileDesktop"
@ -412,7 +417,7 @@ f_tb_lanceur_desktop(){ # v09/09/2017
} }
# traitement utilisateur, $1=canal à installer, $2=user si appel indépendant pour reconfiguration # traitement utilisateur, $1=canal à installer, $2=user si appel indépendant pour reconfiguration
f_tb_profil_user(){ # v09/09/2017 f_tb_profil_user(){ # 09/09/2017
local canal="$1" profileDefault nbProfiles local canal="$1" profileDefault nbProfiles
if [ "$2" == "user" ] && [ ! -x "/usr/bin/thunderbird-$canal" ]; then if [ "$2" == "user" ] && [ ! -x "/usr/bin/thunderbird-$canal" ]; then
f__error "thunderbird <$canal> n'est pas installé" " il faut donc utiliser l'installation et pas l'ajout d'un nouveau profil" f__error "thunderbird <$canal> n'est pas installé" " il faut donc utiliser l'installation et pas l'ajout d'un nouveau profil"
@ -459,7 +464,7 @@ f_tb_profil_user(){ # v09/09/2017
} }
# désinstallation de Thunderbird, on laisse le profil user, $1=canal # désinstallation de Thunderbird, on laisse le profil user, $1=canal
f_tb_remove(){ # v08/09/2017 f_tb_remove(){ # 08/09/2017
local canal="$1" local canal="$1"
[ "$EUID" -eq 0 ] || f__error "vous devez être ROOT pour désinstaller Thunderbird" [ "$EUID" -eq 0 ] || f__error "vous devez être ROOT pour désinstaller Thunderbird"
killall "/opt/usr/share/thunderbird-$canal/thunderbird" &>/dev/null killall "/opt/usr/share/thunderbird-$canal/thunderbird" &>/dev/null
@ -484,7 +489,7 @@ f_tb_remove(){ # v08/09/2017
} }
# lien /usr/bin/thunderbird pour le plus bas canal thunderbird installé # lien /usr/bin/thunderbird pour le plus bas canal thunderbird installé
f_tb_usr_bin(){ # v07/09/2017 f_tb_usr_bin(){ # 07/09/2017
if f_tb_get_canalBas ; then if f_tb_get_canalBas ; then
ln -sf "/usr/bin/thunderbird-$thunderbirdCanalBas" "/usr/bin/thunderbird" ln -sf "/usr/bin/thunderbird-$thunderbirdCanalBas" "/usr/bin/thunderbird"
f__info " - thunderbird lié à thunderbird-$thunderbirdCanalBas" f__info " - thunderbird lié à thunderbird-$thunderbirdCanalBas"
@ -492,7 +497,7 @@ f_tb_usr_bin(){ # v07/09/2017
} }
# inscription dans tache upgrade en anacron hebdomadaire, via cron horaire, $1=upgrade|install|remove # inscription dans tache upgrade en anacron hebdomadaire, via cron horaire, $1=upgrade|install|remove
fscript_cronAnacron(){ # v06/09/2017 fscript_cronAnacron(){ # 06/09/2017
local dirAnacron dirSpool fileAnacron local dirAnacron dirSpool fileAnacron
[ "$(type -t fscript_cronAnacron_special)" ] && fscript_cronAnacron_special # test, si fonction spécifique, appel [ "$(type -t fscript_cronAnacron_special)" ] && fscript_cronAnacron_special # test, si fonction spécifique, appel
dirAnacron="/home/$user_/.config/anacron" dirAnacron="/home/$user_/.config/anacron"
@ -527,13 +532,13 @@ fscript_cronAnacron(){ # v06/09/2017
} }
# spécifique script # spécifique script
fscript_cronAnacron_special(){ # v19/08/2017 fscript_cronAnacron_special(){ # 19/08/2017
rm "/home/$user_/.mozilla/$script.anacrontab" &>/dev/null # ancienne localisation éventuelle rm "/home/$user_/.mozilla/$script.anacrontab" &>/dev/null # ancienne localisation éventuelle
rm "/home/$user_/.config/anacron/spool/getFF"* &>/dev/null # ancien job rm "/home/$user_/.config/anacron/spool/getFF"* &>/dev/null # ancien job
} }
# version script en ligne, assigne $versionScript, $script_aJour=ok|ko # version script en ligne, assigne $versionScript, $script_aJour=ok|ko
fscript_get_version(){ # v07/09/2017 fscript_get_version(){ # 07/09/2017
f__info "raw" "$GREEN""version script en cours: $version" f__info "raw" "$GREEN""version script en cours: $version"
versionScript="$(wget -q --tries=2 --timeout=15 -O - "$urlScript" | grep '^version=' | cut -d '=' -f 2)" versionScript="$(wget -q --tries=2 --timeout=15 -O - "$urlScript" | grep '^version=' | cut -d '=' -f 2)"
if [ "$versionScript" ]; then if [ "$versionScript" ]; then
@ -548,7 +553,7 @@ fscript_get_version(){ # v07/09/2017
} }
# installation du script dans le système # installation du script dans le système
fscript_install(){ # v06/09/2017 fscript_install(){ # 06/09/2017
if grep -q 'bin' <<< "$(dirname $0)" ; then if grep -q 'bin' <<< "$(dirname $0)" ; then
f__info "$RED""l'installation dans le système doit se faire depuis un script local $GREEN(./$script -i )$COLOR" f__info "$RED""l'installation dans le système doit se faire depuis un script local $GREEN(./$script -i )$COLOR"
return return
@ -575,7 +580,7 @@ fscript_install(){ # v06/09/2017
} }
# spécifique script # spécifique script
fscript_install_special(){ # v08/09/2017 fscript_install_special(){ # 08/09/2017
f_tb_alertIcedove "simple" f_tb_alertIcedove "simple"
if f__requis "thunderbird icedove" "debOnly" && [ "$debOnlyPresents" ]; then if f__requis "thunderbird icedove" "debOnly" && [ "$debOnlyPresents" ]; then
f__info "paquet(s) installé(s) $debOnlyPresents" \ f__info "paquet(s) installé(s) $debOnlyPresents" \
@ -584,7 +589,7 @@ fscript_install_special(){ # v08/09/2017
} }
# suppression du script dans le système # suppression du script dans le système
fscript_remove(){ # v06/09/2017 fscript_remove(){ # 06/09/2017
if ! grep -q 'bin' <<< "$(dirname $0)" ; then if ! grep -q 'bin' <<< "$(dirname $0)" ; then
f__info "$RED""cette fonction doit être appelée depuis le script installé dans le système $GREEN($script -r)$COLOR" f__info "$RED""cette fonction doit être appelée depuis le script installé dans le système $GREEN($script -r)$COLOR"
return 1 return 1
@ -606,7 +611,7 @@ fscript_remove(){ # v06/09/2017
} }
# mise à jour script si dispo # mise à jour script si dispo
fscript_update(){ # v06/09/2017 fscript_update(){ # 06/09/2017
if ! grep -q 'bin' <<< "$(dirname $0)" ; then if ! grep -q 'bin' <<< "$(dirname $0)" ; then
f__info "$RED""cette fonction doit être appelée depuis le script installé dans le système $GREEN($script -u)$COLOR" f__info "$RED""cette fonction doit être appelée depuis le script installé dans le système $GREEN($script -u)$COLOR"
return return
@ -644,15 +649,17 @@ fileProfileIni="$dirProfil/profiles.ini"
produitAll="latest beta" produitAll="latest beta"
options=$@ options=$@
[ "$(dirname $0)" == "." ] && options="-i" # script install if [ "$(dirname $0)" == "." ] && [ ! -e "$fileDev" ]; then options="-i" # script install
for i in $options; do
for j in $options; do
[ -z "$i" ] && echo 'i zero' [ -z "$i" ] && echo 'i zero'
case $i in case $j in
i-latest | i-beta | i-all ) i-latest | i-beta | i-all )
f_tb_alertIcedove f_tb_alertIcedove
produit="$(sed 's/i-//; s/+//' <<< "$1")" produit="$(sed 's/i-//; s/+//' <<< "$1")"
if [ "$produit" == "all" ]; then produit="$produitAll"; fi if [ "$produit" == "all" ]; then produit="$produitAll"; fi
for i in $produit; do f_tb_install "$i"; done for k in $produit; do f_tb_install "$k"; done
unset k
exit ;; # install: installation canal thunderbird $1=produit exit ;; # install: installation canal thunderbird $1=produit
m-latest | m-beta ) m-latest | m-beta )
f_tb_alertIcedove f_tb_alertIcedove
@ -662,7 +669,8 @@ for i in $options; do
r-latest | r-beta | r-all ) r-latest | r-beta | r-all )
produit="$(sed 's/r-//; s/-//' <<< "$1")" produit="$(sed 's/r-//; s/-//' <<< "$1")"
if [ "$produit" == "all" ]; then produit="$produitAll"; fi if [ "$produit" == "all" ]; then produit="$produitAll"; fi
for i in $produit; do f_tb_remove "$i"; done for k in $produit; do f_tb_remove "$k"; done
unset k
exit ;; # remove: désinstallation thunderbird (y compris ancien répertoire éventuel) exit ;; # remove: désinstallation thunderbird (y compris ancien répertoire éventuel)
u-latest | u-beta ) u-latest | u-beta )
produit="$(sed 's/u-//' <<< "$1")" produit="$(sed 's/u-//' <<< "$1")"
@ -694,7 +702,7 @@ for i in $options; do
exit ;; # affichage help exit ;; # affichage help
esac esac
done done
unset j
exit 0 exit 0
wget -O getThunderbird https://framagit.org/kyodev/kyopages/raw/master/scripts/getThunderbird wget -O getThunderbird https://framagit.org/kyodev/kyopages/raw/master/scripts/getThunderbird

View File

@ -1,6 +1,16 @@
# changelog getThunderbird # changelog getThunderbird
## todo
* placé ln dans /usr/local/bin au lieu de /usr/bin ?
## 1.1.0 23/09/2017
* f__requis, f__info, f__error unset/for
* révision unset/for
## 1.0.0 09/09/2017 ## 1.0.0 09/09/2017
* 1ère publication * 1ère publication