From 5518b80dea6ea57ffe3c3aea3a2cb0267ed02254 Mon Sep 17 00:00:00 2001 From: kyodev <> Date: Tue, 23 Jan 2018 22:29:15 +0100 Subject: [PATCH] getXfox 4.11.0 --- scripts/getXfox | 262 +++++++++++++++++------------------ scripts/getXfox_changelog.md | 14 ++ 2 files changed, 145 insertions(+), 131 deletions(-) diff --git a/scripts/getXfox b/scripts/getXfox index d26fce9..57b73e0 100755 --- a/scripts/getXfox +++ b/scripts/getXfox @@ -1,7 +1,7 @@ #!/bin/bash -version=4.9.0 -date="29/12/2017" +version=4.11.0 +date="16/01/2018" projet="simpledeb" contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues/" script="getXfox" @@ -136,9 +136,10 @@ f__requis(){ # 4/12/2017 fi } - # $1=cmd si $2: nb de tentatives pour s'identifier, sinon 2 tentatives par défaut, suppose bash existant -f__sudo(){ # 23/12/2017 - local nb=2 sudo isudo toBash + # $@=cmd à lancer en root avec su ou sudo. si $@ contient :x: x=nombre de tentatives, sinon 2 tentatives par défaut + # si bash inexistant, return 2 +f__sudo(){ # 14/01/2018 + local nb sudo isudo toBash options type -p bash &>/dev/null && toBash=$( type -p bash ) || return 2 # sudo --shell bash équivalent su ? @@ -147,9 +148,16 @@ f__sudo(){ # 23/12/2017 else sudo="su --shell $toBash --preserve-environment -c " fi - [ "$2" ] && nb=$(( "$2" )) + if [[ "$@" =~ :??: ]]; then + nb="$@" + nb=${nb#*:} + nb=${nb%:*} + else + nb=2 + fi + options=${@//:$nb:/ } for (( isudo=1 ; isudo<="$nb" ; isudo++ )); do - $sudo " $1" + $sudo " $options" [ "$?" == 0 ] && break [ "$isudo" == "$nb" ] && return 1 done @@ -204,7 +212,7 @@ f__user(){ # 3/12/2017 # si $2=print affiche url testée & entêtes http & location, return 0 # si $2=loc affiche seulement location, return 0 # si $2=test return 0 si ok, return 1 si KO -f__wget_test(){ # 24/12/2017 +f__wget_test(){ # 16/01/2018 local file_test_wget="/tmp/testWget-$script" retourWget retourHttp location wget -Sq --timeout=5 --tries=2 --user-agent="$user_agent" --spider --save-headers "$1" &>"$file_test_wget" @@ -227,15 +235,14 @@ f__wget_test(){ # 24/12/2017 fi if [ "$2" == "print" ]; then if [ "$retourWget" != "0" ]; then - echo "erreur wget: erreur $RED$retourWget" - echo -e "$BLUE $1$STD\t$RED $retourHttp" + echo " erreur wget: erreur $RED$retourWget" + echo -e "$BLUE $1$STD\t$RED $retourHttp$STD" else - echo -e "$BLUE $1$STD\t$GREEN $retourHttp" + echo -e "$BLUE $1$STD\t$GREEN $retourHttp$STD" fi - echo "$STD" fi if [ "$2" == "print" ] || [ "$2" == "loc" ]; then - [ "$location" ] && echo -n "$YELLOW$location" || echo -n "$YELLOW""no location" + [ "$location" ] && echo -n "$YELLOW $location" || echo -n "$YELLOW no location" echo "$STD" rm -f "$file_test_wget" return 0 @@ -269,7 +276,7 @@ EOF } # affichage help -f_help(){ # 26/12/2017 +f_help(){ # 15/01/2018 local ih help=( " ----------------------------------------------------------------------" " softs possibles:$GREEN tor, wfx $BLUE(Tor Browser, Waterfox)$STD" @@ -278,11 +285,12 @@ f_help(){ # 26/12/2017 " installation Waterfox: $BLUE$script i-wfx$STD" " " " $BLUE$script i-$STD$GREEN""soft$STD : $RED""i$STD""nstallation de $RED(root)$STD" + " avec option $GREEN--sauve$STD l'archive téléchargée est sauvegardée dans le répertoire courant" " " " $BLUE$script m-$STD$GREEN""soft$STD : installation de à partir d'une archive téléchargée $RED""m$STD""anuellement $RED(root)$STD" " $BLUE$script r-$STD$GREEN""soft$STD : désinstallation ($RED""r$STD""emove) de $RED(root)$STD" - " $BLUE$script u-$STD$GREEN""soft$STD : profil pour l'$RED""u$STD""tilisateur en cours et comme défaut système $RED(root)$STD" - " (Tor Browser n'est pas cpncerné par le profil)" + " $BLUE$script ri$STD : $RED""r$STD""éparation$RED i$STD""cône(s) dans le menu (Tor Browser ou Waterfox)" + " $BLUE$script u-$STD$GREEN""soft$STD : profil pour l'$RED""u$STD""tilisateur en cours et comme défaut système $RED(root)$STD (Tor Browser n'est pas concerné)" " " " $BLUE$script p-$STD$GREEN""soft$STD : $RED""p$STD""ersonnalisation sur de user.js & userChrome.css" " $BLUE$script pr-$STD$GREEN""soft$STD : suppression des $RED""p$STD""ersonnalisations ($RED""r$STD""emove) sur " @@ -332,19 +340,10 @@ f_tor_get_version(){ # 25/12/2017 } # installation, [$1='manuel', $2 archive] -f_tor_install(){ # 26/12/2017 +f_tor_install(){ # 15/01/2018 local fileDesktop="/usr/share/applications/tor-browser.desktop" appli="Tor Browser" local verArchive fileTemp archi recup_urlTor dirTemp="/tmp/$script-install_tor" - if [ "$EUID" -ne 0 ]; then - f__info "vous devez être$RED ROOT$BLUE pour installer $appli dans le système" - if [ "$1" == "manuel" ]; then - f__sudo "exec $0 m-tor $2" - else - f__sudo "exec $0 i-tor" - fi - return $? - fi if [ "$1" == "manuel" ]; then verArchive=$( sed -En 's/.*tor-browser-linux[0-9]{2}-(.*)\.tar\.xz.*$/\1/p' <<< $(basename $2) ) f__info "installation manuelle de $appli version $verArchive ($2)" @@ -374,6 +373,10 @@ f_tor_install(){ # 26/12/2017 mv -f "$dirTemp/tor-browser_fr/"* "$dirInstallTor/" chown -R "$fu_user:" "$dirInstallTor/" chmod -R g+wrs,a+r "$dirInstallTor/" + if [ "$dl_to_svg" == "ok" ]; then + chown -R "$fu_user:" "$fileTemp" + mv "$fileTemp" ./ + fi rm -rf "$dirTemp/" # traitement finaux système @@ -404,9 +407,11 @@ f_tor_install_manuel(){ # 23/12/2017 } # création lanceur desktop -f_tor_lanceur_desktop(){ # 25/12/2017 +f_tor_lanceur_desktop(){ # 13/01/2018 local appli="Tor Browser" + [ -d "$dirInstallTor" ] || return 0 # pas d'installation? sortie + echo "[Desktop Entry]" > "$fileDesktop" echo "Name=Tor Browser" >> "$fileDesktop" echo "X-GNOME-FullName=$appli" >> "$fileDesktop" @@ -508,14 +513,9 @@ f_tor_pers_upgrade(){ # 23/12/2017 } # désinstallation -f_tor_remove(){ # 23/12/2017 +f_tor_remove(){ # 14/01/2018 local fileDesktop="/usr/share/applications/tor-browser.desktop" appli="Tor Browser" - if [ "$EUID" -ne 0 ]; then - f__info "vous devez être$RED ROOT$BLUE pour désinstaller $appli" - f__sudo "exec $0 r-tor" - return $? - fi if [ ! -d "$dirInstallTor/" ]; then f__info "$appli n'est pas installé" return 1 @@ -531,22 +531,18 @@ f_tor_remove(){ # 23/12/2017 # suppression lien unlink "/usr/share/pixmaps/tor-browser.png" &>/dev/null #finalisation system - update-alternatives --quiet --remove 'x-www-browser' /usr/bin/tor-browser &>/dev/null - update-alternatives --quiet --remove 'gnome-www-browser' /usr/bin/tor-browser &>/dev/null + update-alternatives --quiet --remove 'x-www-browser' /usr/bin/tor-browser # &>/dev/null inutile avec --quiet + update-alternatives --quiet --remove 'gnome-www-browser' /usr/bin/tor-browser # &>/dev/null inutile avec --quiet f__info "log" "$appli désinstallé" } - # alternatives, $1=soft wfx|tor [$2=cible lanceur /usr/bin $3=no_set] -f_w_config_system(){ # 26/12/2017 + # alternatives, $1=soft wfx|tor [$2=cible lanceur (/usr/bin/$2) $3=no_set] + # no_set: inscription update alternatives mais de configuration comme prioritaire +f_w_config_system(){ # 15/01/2018 local soft="$1" dirSoft dirSoft="dirInstall${soft^}" # dirInstall + soft avec lettre 1 en majuscule (nom d'une variable) - if [ "$EUID" -ne 0 ]; then - f__info "vous devez être$RED ROOT$BLUE pour configurer $soft comme défaut dans le système" - f__sudo "exec $0 s-$soft" - return $? - fi if [ ! -d "${!dirSoft}" ]; then # référence à la variable $dirInstallSoft f__info "$soft n'est pas installé" return 1 @@ -554,14 +550,17 @@ f_w_config_system(){ # 26/12/2017 # update-alternatives if type -p "update-alternatives" &>/dev/null ; then # update-alternatives existe? - update-alternatives --quiet --install $( type -p x-www-browser 2>/dev/null ) 'x-www-browser' "$2" 100 # nouvelle alternative - update-alternatives --quiet --install $( type -p gnome-www-browser 2>/dev/null ) 'gnome-www-browser' "$2" 100 # nouvelle alternative - if [ "$3" != "no_set" ]; then # pas de sélection pour tor - update-alternatives --quiet --set 'x-www-browser' "$2" # si le priorité n'est pas suffisante - update-alternatives --quiet --set 'gnome-www-browser' "$2" # si le priorité n'est pas suffisante + update-alternatives --quiet --install $( type -p x-www-browser 2>/dev/null ) 'x-www-browser' "$2" 100 # nouvelle alternative + if [ "$3" != "no_set" ]; then # pas de sélection comme prioritaire pour tor + update-alternatives --quiet --set 'x-www-browser' "$2" # si la priorité n'était pas suffisante + fi + if type -p gnome-www-browser &>/dev/null; then # commande gnome-www-browser existe ? + update-alternatives --quiet --install $( type -p gnome-www-browser 2>/dev/null ) 'gnome-www-browser' "$2" 100 # nouvelle alternative + if [ "$3" != "no_set" ]; then # pas de sélection comme prioritaire pour tor + update-alternatives --quiet --set 'gnome-www-browser' "$2" # si la priorité n'était pas suffisante + fi fi fi - [ "$3" != "no_set" ] && f__info "log:raw" "$soft est le défaut système" } @@ -627,19 +626,10 @@ f_wfx_get_version(){ # 25/12/2017 } # installation, [$1='manuel', $2 archive] -f_wfx_install(){ # 26/12/2017 +f_wfx_install(){ # 15/01/2018 local fileDesktop="/usr/share/applications/waterfox.desktop" verArchive dirTemp fileTemp local dirTemp="/tmp/$script-install_wfx" appli="Waterfox" - if [ "$EUID" -ne 0 ]; then - f__info "vous devez être$RED ROOT$BLUE pour installer $appli dans le système" - if [ "$1" == "manuel" ]; then - f__sudo "exec $0 m-wfx $2" - else - f__sudo "exec $0 i-wfx" - fi - return $? - fi if [ "$fu_archi" == "linux64" ]; then fu_archi="x86_64" else @@ -653,7 +643,7 @@ f_wfx_install(){ # 26/12/2017 else (( x_wfx_get_version == 1 )) || f_wfx_get_version "quiet" f__info "installation $appli $ver_wfx_online" - fileTemp="$dirTemp/$appli-$ver_wfx_online.en-US.linux-$fu_archi.tar.bz2" + fileTemp="$dirTemp/${appli,,}-$ver_wfx_online.en-US.linux-$fu_archi.tar.bz2" # téléchargement & test archive f__info " - téléchargement..." mkdir -p "$dirTemp" @@ -673,6 +663,10 @@ f_wfx_install(){ # 26/12/2017 mv -f "$dirTemp/waterfox/"* "$dirInstallWfx/" chown -R "$fu_user:" "$dirInstallWfx/" chmod -R g+wrs,a+r "$dirInstallWfx/" + if [ "$dl_to_svg" == "ok" ]; then + chown -R "$fu_user:" "$fileTemp" + mv "$fileTemp" ./ + fi rm -rf "$dirTemp/" # traitement finaux système @@ -714,9 +708,11 @@ f_wfx_install_manuel(){ # 23/12/2017 } # création lanceur desktop -f_wfx_lanceur_desktop(){ # 26/12/2017 +f_wfx_lanceur_desktop(){ # 16/01/2018 local appli="Waterfox" + [ -d "$dirInstallWfx" ] || return 0 # pas d'installation? sortie + echo "[Desktop Entry]" > "$fileDesktop" echo "Name=$appli" >> "$fileDesktop" echo "Name[fr]=$appli" >> "$fileDesktop" @@ -739,7 +735,7 @@ f_wfx_lanceur_desktop(){ # 26/12/2017 echo "X-MultipleArgs=false" >> "$fileDesktop" echo "Type=Application" >> "$fileDesktop" echo "Categories=Network;WebBrowser;" >> "$fileDesktop" - echo "MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;" >> "$fileDesktop" + echo "MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;x-scheme-handler/http;x-scheme-handler/https;" >> "$fileDesktop" echo "StartupNotify=true" >> "$fileDesktop" } @@ -821,14 +817,9 @@ f_wfx_pers_upgrade(){ # 23/12/2017 } # désinstallation -f_wfx_remove(){ # 23/12/2017 +f_wfx_remove(){ # 14/01/2018 local fileDesktop="/usr/share/applications/waterfox.desktop" appli="Waterfox" - if [ "$EUID" -ne 0 ]; then - f__info "vous devez être$RED ROOT$BLUE pour désinstaller $appli" - f__sudo "exec $0 r-wfx" - return $? - fi if [ ! -d "$dirInstallWfx" ]; then f__info "$BLUE$appli n'est pas installé." return 1 @@ -844,8 +835,8 @@ f_wfx_remove(){ # 23/12/2017 unlink "/usr/share/pixmaps/waterfox.png" &>/dev/null unlink "/usr/bin/waterfox" &>/dev/null #finalisation system - update-alternatives --quiet --remove 'x-www-browser' /usr/bin/waterfox &>/dev/null - update-alternatives --quiet --remove 'gnome-www-browser' /usr/bin/waterfox &>/dev/null + update-alternatives --quiet --remove 'x-www-browser' /usr/bin/waterfox # &>/dev/null inutile avec --quiet + update-alternatives --quiet --remove 'gnome-www-browser' /usr/bin/waterfox # &>/dev/null inutile avec --quiet f__info "log" "$appli désinstallé, mais le profil est toujours en place" \ "le supprimer manuellement si nécessaire, pour cela supprimer le répertoire:" \ @@ -916,17 +907,12 @@ fscript_get_version(){ # 03/01/2018 } # installation du script dans le système -fscript_install(){ # 27/12/2017 +fscript_install(){ # 15/01/2018 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 )" return 1 fi - if [ "$EUID" -ne 0 ]; then - f__info "vous devez être$RED ROOT$BLUE pour installer ce script dans le système" - f__sudo "exec $0 -i" - return $? - fi [ "$( type -t fscript_install_special )" ] && fscript_install_special # test, si fonction spécifique, appel f__requis "wget anacron cron" || exit 1 @@ -947,7 +933,7 @@ fscript_install(){ # 27/12/2017 } # suppression du script dans le système -fscript_remove(){ # 27/12/2017 +fscript_remove(){ # 15/01/2018 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)" @@ -957,11 +943,6 @@ fscript_remove(){ # 27/12/2017 f__info "$RED$script n'est pas installé" return 1 fi - if [ "$EUID" -ne 0 ]; then - f__info "vous devez être$RED ROOT$BLUE pour supprimer ce script dans le système" - f__sudo "exec $0 -r" - return $? - fi [ "$( type -t fscript_remove_special )" ] && fscript_remove_special # test, si fonction spécifique, appel # suppression de /opt lien /usr/bin @@ -1094,12 +1075,30 @@ chromeWfxr="userChrome.css" # nom du fichier userChrome.css sur un dépôt dista options=$@ -if [ "$( dirname $0 )" == "." ] && [ ! -e "$fileDev" ]; then - options="-i" # script install + # auto-installation script éventuel, si pas de marqueur $fileDev +if [[ $( dirname $0 ) != $( dirname $script_install ) && $( dirname $0 ) != "/usr/bin" && ! -e "$fileDev" ]]; then + options="-i" # option installation script fi -[ "$options" ] || options="-h" -for j in $options; do +for j in $options; do # première passe options + case $j in + -i | --install | -r | --remove | ri | i-* | m-* | r-* | u-* ) + if [ "$EUID" -ne 0 ]; then + f__info "vous devez être$RED ROOT$BLUE pour cette opération" + f__sudo "exec $0 $@" + exit + fi + ;;& + --sauve ) + dl_to_svg="ok" + ;;& + esac +done +options=${options//--sauve/ } + +[ "$options" ] || options="-h" # vide? help + +for j in $options; do # deuxième passe options, actions case $j in version | versions ) # versions en ligne & installées @@ -1109,65 +1108,66 @@ for j in $options; do f_wfx_get_version f_wfx_pers_get_version ;; + ri ) # réparation icônes + f_tor_lanceur_desktop + f_wfx_lanceur_desktop + ;; - i-tor ) # installation - f_tor_install - exit ;; - m-tor ) # installation manuelle d'une archive, $2 fichier archive - f_tor_install_manuel "$2" - exit ;; - p-tor ) # personnalisation - f_tor_pers_install - exit ;; - pr-tor ) # supression personnalisation - f_tor_pers_remove - exit ;; - r-tor ) # désinstallation - f_tor_remove - exit ;; - s-tor ) - f_w_config_system "tor" "/usr/bin/tor-browser" # update alternatives - exit ;; + i-tor ) + f_tor_install # installation + ;; + m-tor ) + f_tor_install_manuel "$2" # installation manuelle d'une archive, $2 fichier archive + ;; + p-tor ) + f_tor_pers_install # personnalisation + ;; + pr-tor ) + f_tor_pers_remove # personnalisation remove + ;; + r-tor ) + f_tor_remove # remove tor + ;; u-tor ) # configurer un profil pour un user - f__info "sans objet, Tor Browser est mono utilisateur" - exit ;; - v-tor ) # version + f__info "sans objet, Tor Browser est mono utilisateur, pas de profil à configurer" + ;; + v-tor ) # tor: versions & personnalisations f_tor_get_version f_tor_pers_get_version ;; - - i-wfx ) # installation - f_wfx_install - exit ;; - m-wfx ) # installation manuelle archive, $2 fichier archive - f_wfx_install_manuel "$2" - exit ;; - p-wfx ) # personnalisation - f_wfx_pers_install - exit ;; - pr-wfx ) # supression personnalisation - f_wfx_pers_remove - exit ;; - u-wfx ) # configurer un profil pour un user - f_wfx_config_profil "menu" - f_w_config_system "wfx" "/usr/bin/waterfox" +### + i-wfx ) + f_wfx_install # installation + ;; + m-wfx ) + f_wfx_install_manuel "$2" # installation manuelle archive, $2 fichier archive + ;; + p-wfx ) + f_wfx_pers_install # personnalisation + ;; + pr-wfx ) + f_wfx_pers_remove # personnalisation remove + ;; + r-wfx ) + f_wfx_remove # remove + ;; + u-wfx ) + f_wfx_config_profil "menu" # configurer un canal pour user en cours + f_w_config_system "wfx" "/usr/bin/waterfox" # défaut système echo - exit ;; - r-wfx ) # désinstallation - f_wfx_remove - exit ;; - v-wfx ) # version + ;; + v-wfx ) # waterfox: versions & personnalisations f_wfx_get_version f_wfx_pers_get_version ;; - +### -i | --install ) # installation du script dans le système fscript_install exit ;; - -r | --remove | sysremove ) # désinstallation du script + -r | --remove ) # remove script fscript_remove exit ;; - -u | --upgrade | upgrade ) # upgrade script & personnalisations + -u | --upgrade ) # upgrade script & personnalisations operation="upgrade" fscript_update f_tor_pers_upgrade @@ -1178,7 +1178,7 @@ for j in $options; do ;; -h | --help | * ) # affichage help f_help - exit ;; + ;; esac done diff --git a/scripts/getXfox_changelog.md b/scripts/getXfox_changelog.md index 53cd141..d315948 100644 --- a/scripts/getXfox_changelog.md +++ b/scripts/getXfox_changelog.md @@ -1,6 +1,20 @@ # getXfox +*todo + * Default dans profiles.ini à implanter pour le futur? +## getXfox 4.11.0 - 16/01/2018 + +* nouveau: cumul options (opérations) possibles (sauf opés scripts) +* nouveau: option --sauve pour conserver le téléchargement à l'installation +* révision: ffx_lanceur_desktop, mimetype, plus de xul, pas de déclaration images +* révision; f__wget_test +* révision: f_sudo abandonné dans fscript_install et fscript_remove, au profit appel au traitement général des options +* révision: général, invocation f__sudo dans traitement options, plus confortable si su & _all_ +* révision: f_sudo, format nombre de tentatives et options appel possibles > 1 +* révision: menu réparation icône pour tous les canaux installés, menu help en conséquence +* révision: auto-installation, potentiel bug selon conditions appel +* fix: test gnome-www-browser avant installation (erreur kde) ## getXfox 4.10.0 - 12/01/2018