This commit is contained in:
kyodev 2018-06-13 04:21:14 +02:00
parent a3647f09d6
commit 974a618505
2 changed files with 69 additions and 89 deletions

View File

@ -1,7 +1,7 @@
# getThunderbird
![version: 2.9.1](https://img.shields.io/badge/version-2.9.1-blue.svg?longCache=true&style=for-the-badge)
![version: 2.10.0](https://img.shields.io/badge/version-2.10.0-blue.svg?longCache=true&style=for-the-badge)
![bash langage](https://img.shields.io/badge/bash-4-brightgreen.svg?longCache=true&style=for-the-badge)
![license LPRAB / WTFPL](https://img.shields.io/badge/license-LPRAB%20%2F%20WTFPL-blue.svg?longCache=true&style=for-the-badge)
@ -33,9 +33,9 @@ chmod +x getThunderbird && ./getThunderbird
/ _' |/ _ \ __|| | | '_ \| | | | '_ \ / _' |/ _ \ '__| '_ \| | '__/ _' |
| (_| | __/ |_ | | | | | | |_| | | | | (_| | __/ | | |_) | | | | (_| |
\__, |\___|\__||_| |_| |_|\__,_|_| |_|\__,_|\___|_| |_.__/|_|_| \__,_|
|___/ version 2.8.0 - 05/03/2018
|___/ version 2.10.0 - 12/06/2018
getThunderbird 2.8.0 installé dans le système.
getThunderbird 2.10.0 installé dans le système.
maintenant, appel du script par: getThunderbird (sans ./)
```
@ -62,7 +62,7 @@ getThunderbird i-canal
/ _' |/ _ \ __|| | | '_ \| | | | '_ \ / _' |/ _ \ '__| '_ \| | '__/ _' |
| (_| | __/ |_ | | | | | | |_| | | | | (_| | __/ | | |_) | | | | (_| |
\__, |\___|\__||_| |_| |_|\__,_|_| |_|\__,_|\___|_| |_.__/|_|_| \__,_|
|___/ version 2.9.0 - 09/06/2018
|___/ version 2.10.0 - 12/06/2018
installation Thunderbird-latest
@ -76,7 +76,8 @@ getThunderbird i-canal
profil Thunderbird latest configuré
Thunderbird latest est le défaut système
Thunderbird-latest installé
Thunderbird-latest 52.8.0 installé
```
@ -105,7 +106,7 @@ getThunderbird -h
/ _' |/ _ \ __|| | | '_ \| | | | '_ \ / _' |/ _ \ '__| '_ \| | '__/ _' |
| (_| | __/ |_ | | | | | | |_| | | | | (_| | __/ | | |_) | | | | (_| |
\__, |\___|\__||_| |_| |_|\__,_|_| |_|\__,_|\___|_| |_.__/|_|_| \__,_|
|___/ version 2.9.0 - 09/06/2018
|___/ version 2.10.0 - 12/06/2018
canaux possibles: latest, beta ( <all> = tous les canaux )
@ -121,8 +122,8 @@ getThunderbird -h
getThunderbird version : versions installées et en ligne
--dev : une version de dev du script (si existante) est recherché
--sauve: le téléchargement est sauvegardé dans le répertoire courant en plus de l'installation
--dev : une version de dev du script (si existante) est recherchée
--sauve : le téléchargement est sauvegardé dans le répertoire courant en plus de l'installation
----------------------------------------------------------------------
./getThunderbird (ou ./getThunderbird -i) : installation du script dans le système (root)
getThunderbird -h, --help : affichage aide
@ -141,15 +142,15 @@ getThunderbird -h
getThunderbird version
```
```text
_ _____ _ _ _ _ _
_ _____ _ _ _ _ _
__ _ ___| ||_ _| |__ _ _ _ __ __| | ___ _ __| |__ (_)_ __ __| |
/ _' |/ _ \ __|| | | '_ \| | | | '_ \ / _' |/ _ \ '__| '_ \| | '__/ _' |
| (_| | __/ |_ | | | | | | |_| | | | | (_| | __/ | | |_) | | | | (_| |
\__, |\___|\__||_| |_| |_|\__,_|_| |_|\__,_|\___|_| |_.__/|_|_| \__,_|
|___/ version 2.9.0 - 09/06/2018
|___/ version 2.10.0 - 12/06/2018
script en place: 2.9.0
script en ligne: 2.9.0
script en place: 2.10.0
script en ligne: 2.9.1
Thunderbird en place: latest : 52.8.0
Thunderbird en ligne: latest : 52.8.0 beta : 60.0b7

View File

@ -1,7 +1,7 @@
#!/bin/bash
version=2.9.1
date="09/06/2018"
version=2.10.0
date="12/06/2018"
script="getThunderbird"
# contact="IRC ##sdeb@freenode.net ou https://framagit.org/sdeb/getThunderbird/issues"
@ -114,7 +114,7 @@ f__log(){ # 05/03/2018
# recherche commandes/paquets, $1 liste: cmd1|cmd2[>paquet] (séparées par espaces) ex: "gawk|mawk>gawk wget"
# si manque, return 1 & affiche commandes manquantes (si debian, ajout proposition paquet à installer)
f__requis(){ # 06/06/2018
f__requis(){ # 11/06/2018
local ENV_DEBIAN c_echo ireq cmds package commands command commandsMissing packagesMissing
if type -p dpkg &>/dev/null ; then
@ -128,7 +128,7 @@ f__requis(){ # 06/06/2018
for ireq in $1; do
IFS='>' read -r cmds package <<< "$ireq" # ex: "awk|gawk>gawk wget file tar killall>psmisc"
mapfile -t -d '|' commands <<< "${cmds}"
[ -z "$package" ] && package=${commands[0]%$'\n'} # pas de packages dans les options, donc = commands[0
[ -z "$package" ] && package=${commands[0]%$'\n'} # pas de packages dans les options, donc = commands[0]
for command in "${commands[@]%$'\n'}"; do
if type -p "$command" &>/dev/null ; then
unset commandsMissing packagesMissing
@ -157,40 +157,14 @@ f__requis(){ # 06/06/2018
[ "$commandsMissing" ] && return 1 || return 0
}
# $@=cmd à lancer en root avec su ou sudo. si $@ contient [':x:'] x=nombre de tentatives, 2 par défaut
# si sudo si possible sera utilisé.
# si su &2 redirigé sur &1
# si bash inexistant, return 2
f__sudo(){ # 10/06/2018
local nb sudo isudo options nbDefault=2
# $@=cmd à lancer en root avec su ou sudo. si sudo possible: prioritairesu su
f__sudo(){ # 11/06/2018
# détermination sudo possible
if sudo -v &>/dev/null && [ $EUID -ne 0 ] ; then
sudo="sudo su --preserve-environment -c "
sudo su --preserve-environment -c "$@"
else
sudo="su --preserve-environment -c "
fi
# extraction nb de tentatives éventuel
if [[ "$*" =~ :.{1,2}: ]]; then
nb="$*"
nb=${nb#*:}
nb=${nb%:*}
options=${*//:$nb:/ }
(( nb+1 )) 2>/dev/null || nb="$nbDefault" # test si numérique, sinon,
else
nb="$nbDefault"
options="$*"
fi
# lancement cmds
if [[ "$sudo" =~ ^sudo ]]; then
$sudo "$options"
else
for (( isudo=1 ; isudo<="$nb" ; isudo++ )); do
echo -e "[su] Mot de passe root :"
$sudo "$options" 2>/dev/null && break
[ "$isudo" == "$nb" ] && return 1
done
echo
echo -n "[su] "
su --preserve-environment -c "$@"
fi
}
@ -317,25 +291,25 @@ f_affichage(){ # 09/06/2018
}
# affichage help
f_help(){ # 10/06/2018
f_help(){ # 11/06/2018
cat <<- end
canaux possibles:$GREEN latest, beta$STD ( <all> = tous les canaux )
exemple, installation version Release (latest): $BLUE$script i-latest$STD
----------------------------------------------------------------------
$BLUE$script i-$STD${GREEN}canal$STD : ${RED}i${STD}nstallation de $appli <canal> $RED(root)$STD
$BLUE$script d-$STD${GREEN}canal$STD : copier un profil ${RED}.d${STD}efault existant sur <canal>
$BLUE$script m-$STD${GREEN}canal archi$STD : installation sur le <canal> d'une <archi>ve téléchargée ${RED}m${STD}anuellement $RED(root)$STD
$BLUE$script r-$STD${GREEN}canal$STD : désinstallation (${RED}r${STD}emove) du <canal> $RED(root)$STD
$BLUE$script ri$STD : ${RED}r${STD}éparation$RED i${STD}cône(s) dans le menu
$BLUE$script t-$STD${GREEN}canal$STD : téléchargement du <canal> dans le répertoire courant (sans installation)
$BLUE$script u-$STD${GREEN}canal$STD : profil pour l'${RED}u${STD}tilisateur en cours et comme défaut système $RED(root)$STD
$BLUE$script i-$STD${GREEN}canal :$STD ${RED}i${STD}nstallation de $appli <canal> $RED(root)$STD
$BLUE$script d-$STD${GREEN}canal :$STD copier un profil ${RED}.d${STD}efault existant sur <canal>
$BLUE$script m-$STD${GREEN}canal archi :$STD installation sur le <canal> d'une <archi>ve téléchargée ${RED}m${STD}anuellement $RED(root)$STD
$BLUE$script r-$STD${GREEN}canal :$STD désinstallation (${RED}r${STD}emove) du <canal> $RED(root)$STD
$BLUE$script ri$STD${GREEN} :$STD ${RED}r${STD}éparation$RED i${STD}cône(s) dans le menu
$BLUE$script t-$STD${GREEN}canal :$STD téléchargement du <canal> dans le répertoire courant (sans installation)
$BLUE$script u-$STD${GREEN}canal :$STD profil pour l'${RED}u${STD}tilisateur en cours et comme défaut système $RED(root)$STD
$BLUE$script version$STD : versions installées et en ligne
$BLUE$script version :$STD versions installées et en ligne
$GREEN --dev$STD : une version de dev du script (si existante) est recherchée
$GREEN --sauve$STD: le téléchargement est sauvegardé dans le répertoire courant ${BOLD}en$STD plus de l'installation
$GREEN --dev :$STD une version de dev du script (si existante) est recherchée
$GREEN --sauve :$STD le téléchargement est sauvegardé dans le répertoire courant ${BOLD}en$STD plus de l'installation
----------------------------------------------------------------------
$BLUE./$script$STD (ou $BLUE./$script -i$STD) : installation du script dans le système $RED(root)$STD
$BLUE$script -h$STD, --help : affichage aide
@ -415,7 +389,7 @@ f_tb_config_system(){ # 09/06/2018
# set default=1 dans profiles.ini
while read -r ligne ; do
# shellcheck disable=SC2034
[[ ${ligne} =~ ^\[Profile.*\]$ ]] && numero=${ligne//[\[Profile\]]} # n° profil, pas utilisé
[[ ${ligne} =~ ^\[Profile.*\]$ ]] && numero=${ligne//[\[Profile\]]} # n° profil, pas encore utilisé
[ "$ligne" == "Name=$canal" ] && marqueur="ok" # détection canal recherché? marqueur actif
[[ $ligne == "Default=1" ]] && continue # si Default existant, on saute, la ligne ne fera donc pas partie de $stockage (=effacement)
@ -508,18 +482,21 @@ f_tb_get_versions(){ # 10/06/2018
}
# installation, $1 canal [$2='manuel', $3 archive]
f_tb_install(){ # 10/06/2018
local versArchive fileTemp prefixe canal="$1" dirTemp="/tmp/$script-install_tb"
f_tb_install(){ # 12/06/2018
local versArchive tbVersion fileTemp prefixe canal="$1" appli="thunderbird" dirTemp="/tmp/$script-install_tb"
if [ "$2" == "manuel" ]; then
versArchive=${3%\.tar*} # version mozilla thunderbird-52.8.0.tar.bz2
versArchive=${versArchive%\.linux*} # ancienne version thunderbird-52.0.0.linux64.tar.bz2
versArchive=${versArchive%_*} # version encours
versArchive=${versArchive#*-}
versArchive=${versArchive##*-}
f__info raw "installation manuelle dans $canal de thunderbird version $versArchive ($3)"
fileTemp="$3"
mkdir -p "$dirTemp"
else
if ! mkdir -p "$dirTemp" 2>/dev/null; then # contournement bug? bash, utile si téléchargement et mauvais effacement précédent
dirTemp+="-$RANDOM"
! mkdir -p "$dirTemp" 2>/dev/null && f__error "droits insuffisants, recommencer avec les droits root"
fi
[ -z "$dl_only" ] && f__info "installation $appli-$canal"
(( x_tb_get_version == 1 )) || f_tb_get_versions quiet
case "$1" in
@ -527,25 +504,30 @@ f_tb_install(){ # 10/06/2018
beta ) tbVersion="$version_tb_beta" ;;
esac
fileTemp="$dirTemp/${appli,,}-${tbVersion}_$canal.$fu_archi.tar.bz2"
# téléchargement & test archive
f__info " - téléchargement..."
# calcul url
[ "$canal" == "beta" ] && prefixe="$canal-"
recup_url="https://download.mozilla.org/?product=thunderbird-$prefixe""latest&os=$fu_archi&lang=fr"
mkdir -p "$dirTemp"
if ! wget -q -c --show-progress --tries=2 --timeout=15 --user-agent="$user_agent" -o /dev/null -O "$fileTemp" "$recup_url" ; then
f__wget_test "$recup_url"
# téléchargement
if ! wget -q -c --show-progress --tries=2 --timeout=15 --user-agent="$user_agent" \
-o /dev/null -O "$fileTemp" "$recup_url" ; then
f__wget_test "$recup_url"
fi
fi
f__archive_test "$fileTemp" || f__error "Le fichier $fileTemp n'est pas une archive tar.bz2 valide"
echo
if [[ "$dl_to_svg" || "$dl_only" ]]; then
chown "$fu_user:" "$fileTemp"
cp "$fileTemp" ./
cp --preserve "$fileTemp" ./
fi
echo
if [ "$dl_only" ]; then
rm "$fileTemp"
rm -f "$fileTemp"
echo
return 0
fi
# décompression archive téléchargée dans dossier de travail
f__info " - décompression..."
tar -xaf "$fileTemp" -C "$dirTemp/"
@ -580,11 +562,9 @@ f_tb_install(){ # 10/06/2018
f_tb_config_profil "$canal" # profiles.ini, répertoire profil
f_tb_config_system "$canal" # lien /usr/bin, default dans le profile
if [ "$2" == "manuel" ]; then
f__info "log" "archive $appli-$canal $versArchive installée"
else
f__info "log" "$appli-$canal installé"
fi
[ "$1" != "manuel" ] && versArchive=$tbVersion
echo
f__info "log" "$appli-$canal $versArchive installé"
}
# installation d'une archive manuelle, $1=canal, $2=archive
@ -657,7 +637,7 @@ f_tb_remove(){ # 09/06/2018
}
# anacron hebdomadaire, via cron horaire, $1=upgrade|install|remove
fscript_cronAnacron(){ # 09/06/2018
fscript_cronAnacron(){ # 11/06/2018
local dirAnacron dirSpool fileAnacron
type -t fscript_cronAnacron_special &>/dev/null && fscript_cronAnacron_special # test, si fonction spécifique, appel
@ -672,7 +652,7 @@ fscript_cronAnacron(){ # 09/06/2018
echo "7 10 $script nice $script_install --upgrade 1>/dev/null" > "$fileAnacron" # juste erreurs en syslog
## anacron journalier pour dev logname
if [ -e "$fileDev" ]; then
echo "1 00 $script""Dev nice $script_install --upgrade 1>/dev/null" >> "$fileAnacron"
echo "1 00 ${script}Dev nice $script_install --upgrade 1>/dev/null" >> "$fileAnacron"
fi
# création spool anacron utilisateur
mkdir -p "$dirSpool"
@ -770,12 +750,11 @@ fscript_remove(){ # 09/06/2018
f__info "log" "$script $version supprimé du système."
}
# si upgrade en place, $1 != "", [$1 message info]
# shellcheck disable=SC2120
# function references arguments, but none are ever passed.
fscript_update(){ # 09/06/2018
local dirTemp="/tmp/$script-maj" upgradeEnPlace="$1"
# $1: update standard $1=std, si update en place $1=message d'info
fscript_update(){ # 11/06/2018
local dirTemp="/tmp/$script-maj" upgradeEnPlace
[ "$1" != 'std' ] && upgradeEnPlace="$1"
type -t fscript_update_special &>/dev/null && fscript_update_special # test, si fonction spécifique, appel
if [ -z "$upgradeEnPlace" ] && ! grep -Eq "$script_install|/usr/bin/$script" <<< "$0"; then
f__info "${RED}cette fonction doit être appelée depuis le script installé dans le système $GREEN($script -u)"
@ -889,11 +868,11 @@ for i in "${!options[@]}"; do # deuxième passe options, actions
# shellcheck disable=SC2221,SC2222
case ${options[$i]} in
-i | --install | -r | --remove | ri | i-* | m-* | r-* | u-* )
if [ "$EUID" -ne 0 ]; then
f__info raw "vous devez être$RED ROOT$BLUE pour cette opération"
f__sudo "exec $0 $script_options"
exit
fi ;;&
if [ "$EUID" -ne 0 ]; then
f__info raw "vous devez être$RED ROOT$BLUE pour cette opération"
f__sudo "exec $0 $script_options"
exit
fi ;;&
d-latest | d-beta | d-all )
[ "$produit" == "all" ] && produit="$produit_all"
for k in $produit; do
@ -921,7 +900,7 @@ for i in "${!options[@]}"; do # deuxième passe options, actions
[ "$produit" == "all" ] && produit="$produit_all"
for k in $produit; do
dl_only="ok"
f_tb_install "$k" # installation canal
f_tb_install "$k" # téléchargement
done ;;
u-latest | u-beta | u-all )
[ "$produit" == "all" ] && produit="$produit_all"
@ -944,7 +923,7 @@ for i in "${!options[@]}"; do # deuxième passe options, actions
-u | --upgrade ) # upgrade script
operation="upgrade"
# shellcheck disable=SC2119
fscript_update
fscript_update std # std argument obligatoire pour upgrade normal
exit ;;
-v | --version ) # version du script, en ligne et exécuté
fscript_get_version ;;