diff --git a/docs/scripts/getFirefox.md b/docs/scripts/getFirefox.md index 8f069c0..5cdf50c 100644 --- a/docs/scripts/getFirefox.md +++ b/docs/scripts/getFirefox.md @@ -11,8 +11,8 @@ > le script peut désinstaller les canaux Firefox souhaités -* les installations/désinstallations doivent être faites avec les privilèges **root** -* les opérations sur l'utilisateur, ou sur la mise à jour du script, peuvent être faites en utilisateur. +* les installations/désinstallations/opérations système doivent être faites avec les privilèges **root** +* la mise à jour du script ou autres opérations légères peuvent être faites en utilisateur. > le programme Tor Browser est dorénavant pris en charge par [getXfox](https://kyodev.frama.io/kyopages/scripts/getXfox/) @@ -33,9 +33,9 @@ chmod +x getFirefox && ./getFirefox | (_| | __/ |_| _| | | | | __/ _| (_) > < \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ |___/ - version 4.0.0 - 22/12/2017 + version 4.6.0 - 26/12/2017 - getFirefox 4.0.0 installé dans le système. + getFirefox 4.6.0 installé dans le système. maintenant, appel du script par: getFirefox (sans ./) ``` @@ -61,21 +61,21 @@ getFirefox i-canal | (_| | __/ |_| _| | | | | __/ _| (_) > < \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ |___/ - version 4.0.0 - 22/12/2017 + version 4.6.0 - 26/12/2017 installation Firefox-latest - téléchargement... -/tmp/getFirefox-install-23584/firefox-nig 100%[===============================>] 57,26M 5,09MB/s in 13s +/tmp/getFirefox-install_ffx/firefox-latest. 100%[=============================>] 53,75M 4,66MB/s in 12s - décompression... - installation... - Firefox latest est le canal par défaut du système - - Firefox-nightly installé + profil Firefox latest configuré + Firefox latest est le défaut système + Firefox-latest installé ``` @@ -119,7 +119,7 @@ getFirefox -h | (_| | __/ |_| _| | | | | __/ _| (_) > < \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ |___/ - version 4.0.0 - 22/12/2017 + version 4.6.0 - 26/12/2017 ---------------------------------------------------------------------- canaux possibles: latest, beta, nightly, dev, esr @@ -127,19 +127,18 @@ getFirefox -h exemple, installation version Release (latest): getFirefox i-latest - getFirefox i-canal : installation de Firefox (root) + getFirefox i-canal : installation de (root) getFirefox d-canal : copier un profil .default existant sur getFirefox m-canal : installation sur le d'une archive téléchargée manuellement (root) - getFirefox r-canal : désinstallation (remove) de Firefox (root) - getFirefox s-canal : canal comme défaut du système (update-alternatives & commande firefox) (root) - getFirefox u-canal : ajouter un profil pour l'utilisateur en cours + getFirefox r-canal : désinstallation (remove) du (root) + getFirefox u-canal : profil pour l'utilisateur en cours et comme défaut système (root) getFirefox p-canal : personnalisation sur le de user.js & userChrome.css getFirefox pr-canal : suppression des personnalisations (remove) sur le getFirefox pu : mise à jour des personnalisations (update) installées - getFirefox version : versions installées et en ligne + getFirefox version : versions installées et en ligne ---------------------------------------------------------------------- ./getFirefox (ou ./getFirefox -i) : installation du script dans le système (root) @@ -149,6 +148,7 @@ getFirefox -h getFirefox -v, --version : versions du script plus d'infos: https://kyodev.frama.io/kyopages/scripts/getFirefox/ + Tor Browser, voir getXfox: https://kyodev.frama.io/kyopages/scripts/getXfox/ ``` @@ -159,24 +159,24 @@ getFirefox -h getFirefox version ``` ```text - _ _____ _ __ + _ _____ _ __ __ _ ___| |_| ___(_)_ __ ___ / _| _____ __ / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / | (_| | __/ |_| _| | | | | __/ _| (_) > < \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ |___/ - version 4.0.0 - 22/12/2017 + version 4.6.0 - 26/12/2017 - script en place: 4.0.0 - script en ligne: 3.16.0 + script en place: 4.6.0 + script en ligne: 4.6.0 .....++++ - Firefox en place: esr : 52.5.2 latest : 56.0.2 beta : 56.0 nightly: 59.0a1 - Firefox en ligne: esr : 52.5.2 latest : 57.0.2 beta : 58.0b12 nightly: 59.0a1 + Firefox en place: latest: 56.0.2 nightly: 59.0a1 + Firefox en ligne: esr: 52.5.2 latest: 57.0.2 beta: 58.0b12 nightly: 59.0a1 - perso. Firefox en place : esr: 0.6 latest: 0.6 beta: 0.6 nightly: 0.6 - perso. Firefox en ligne : 0.6 + perso. Firefox en place: esr: 0.6 latest: 0.6 beta: 0.6 nightly: 0.6 + perso. Firefox en ligne: 0.6 ``` @@ -209,11 +209,13 @@ getFirefox d-canal getFirefox u-canal ``` -* `getFirefox d-all` possible +* `getFirefox d-all` possible (plus haut canal comme défaut système) * ajoute un profil pour un canal Firefox **installé** +* configure le canal comme navigateur par **défaut** (alternatives, commande firefox, profil Firefox) * évite de télécharger inutilement une nouvelle fois pour un nouvel utilisateur: * ajout à l'utilisateur en cours -* ajout pour un autre utilisateur, titi pas exemple: `USER_INSTALL=titi getFirefox u-beta` +* pour ajouter un autre utilisateur, titi par exemple: `USER_INSTALL=titi getFirefox u-beta`, ça devrait + marcher (pas testé) ## personnalisation (installation) @@ -270,8 +272,8 @@ getFirefox r-canal * `getFirefox p-canal` possible * le profil pour firefox **n'est pas supprimé**, il sera donc utilisable en cas de réinstallation * si firefox-canal est ouvert, il sera fermé -* update-alternatives, si supportée, sera configurée sur le plus bas canal installé -* la commande en console `firefox` sera aussi configurée pour le plus bas canal installé +* le navigateur par **défaut** sera configuré sur le plus bas canal encore installé + ## installation manuelle d'une archive diff --git a/scripts/getFirefox b/scripts/getFirefox index f4b602f..483a9a4 100755 --- a/scripts/getFirefox +++ b/scripts/getFirefox @@ -1,7 +1,7 @@ #!/bin/bash -version=4.5.0 -date="25/12/2017" +version=4.6.0 +date="26/12/2017" projet="simpledeb" contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues/" script="getFirefox" @@ -72,16 +72,16 @@ f__error(){ # 18/12/2017 exit 1 } - # affichage des paramètres en bleu, si $1=raw pas de ligne vide à la fin, si $1=log alors uniquement $2 logué -f__info(){ # 18/12/2017 + # affichage en bleu, si $1=raw pas de ligne vide à la fin, si $1=log alors uniquement $2 logué, combiné: $1="log:raw" +f__info(){ # 26/12/2017 local depart=1 i - [[ "$1" == "raw" || "$1" == "log" ]] && depart=2 - [ "$1" == "log" ] && f__log "$(sed -E 's/\\t//;s/\\n// ' <<< $2 | xargs )" + [[ "$1" =~ "raw" || "$1" =~ "log" ]] && depart=2 + [[ "$1" =~ "log" ]] && f__log "$(sed -E 's/\\t//;s/\\n// ' <<< $2 | xargs )" for (( i=$depart ; i<=$# ; i++ )); do echo -e " $BLUE${!i}$STD" done - [ "$1" == raw ] || echo + [[ "$1" =~ raw ]] || echo } # log spécifique, fichier log limité à 10000 octets, $1 message à loguer @@ -268,7 +268,7 @@ EOF } # affichage help -f_help(){ # 25/12/2017 +f_help(){ # 26/12/2017 local appli="Firefox" ih help=( " ----------------------------------------------------------------------" " canaux possibles:$GREEN latest, beta, nightly, dev, esr$STD" @@ -281,8 +281,7 @@ f_help(){ # 25/12/2017 " $BLUE$script d-$STD$GREEN""canal$STD : copier un profil $RED"".d$STD""efault existant sur " " $BLUE$script m-$STD$GREEN""canal$STD : installation sur le d'une archive 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 $RED(root)$STD" - " $BLUE$script s-$STD$GREEN""canal$STD : canal comme défaut du $RED""s$STD""ystème (profil défaut, update-alternatives & commande$BLUE firefox$STD) $RED(root)$STD" - " $BLUE$script u-$STD$GREEN""canal$STD : ajouter un profil pour l'$RED""u$STD""tilisateur en cours" + " $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 p-$STD$GREEN""canal$STD : $RED""p$STD""ersonnalisation sur le de user.js & userChrome.css" " $BLUE$script pr-$STD$GREEN""canal$STD : suppression des $RED""p$STD""ersonnalisations ($RED""r$STD""emove) sur le " @@ -303,7 +302,92 @@ f_help(){ # 25/12/2017 echo -e "$ih" done IFS="$IFS_INI" - echo -e "\n$STD plus d'infos: $YELLOW$url_notice\n$STD" + echo -e "\n$STD plus d'infos: $YELLOW$url_notice$STD" + echo -e "$STD Tor Browser, voir getXfox:$YELLOW https://kyodev.frama.io/kyopages/scripts/getXfox/\n$STD" +} + + # traitement utilisateur(profiles.ini), $1=canal +ffx_config_profil(){ # 26/12/2017 + local nbProfiles canal="$1" appli="Firefox" + + if [ ! -d "$dirInstallFfx$canal" ] && [ "$2" == "user" ]; then # pas de répertoire programme + f__info "$appli $canal n'est pas installé" + return 1 + fi + + if [ ! -d "$dirProfilFfx/$canal" ] ; then # pas de répertoire profil + mkdir -p "$dirProfilFfx/$canal" # répertoire du répertoire profil + chown -R "$fu_user:" "$dirProfilFfx/$canal/" # propriété du répertoire profil à l'user + chmod g-rx,o-rx "$dirProfilFfx/$canal/" # droits répertoire + fi + if [ ! -e "$dirProfilFfx/profiles.ini" ]; then # pas de profile.ini + echo -e "[General]\nStartWithLastProfile=1" > "$dirProfilFfx/profiles.ini" + chown "$fu_user:" "$dirProfilFfx/profiles.ini" # propriété du fichier profile.ini à l'user + chmod u+rw,go+r "$dirProfilFfx/profiles.ini" # permissions du fichier profile.ini à l'user + fi + # inscription canal dans profil.ini, à la fin, si inexistant + if ! grep -q "Name=$canal" "$dirProfilFfx/profiles.ini" ; then + # comptage profils existants + nbProfiles=$( grep -cEs '\[Profile[0-9]+\]' "$dirProfilFfx/profiles.ini" ) + # création profil dans profile.ini + echo >> "$dirProfilFfx/profiles.ini" + echo "[Profile$nbProfiles]" >> "$dirProfilFfx/profiles.ini" + echo "Name=$canal" >> "$dirProfilFfx/profiles.ini" + echo "IsRelative=1" >> "$dirProfilFfx/profiles.ini" + echo "Path=$canal" >> "$dirProfilFfx/profiles.ini" + fi + + f__info "log:raw" "profil $appli $canal configuré" +} + + # traitement système: lien /usr/bin & alternatives, $1 canal +ffx_config_system(){ # 26/12/2017 + local canal="$1" appli="Firefox" profileIni="$dirProfilFfx/profiles.ini" + local ligne numero marqueur stockage + if [ "$EUID" -ne 0 ]; then + f__info "vous devez être$RED ROOT$BLUE pour configurer $canal comme défaut dans le système" + f__sudo "exec $0 u-$canal" + return $? + fi + if [ ! -d "$dirInstallFfx$canal" ]; then + f__info "$appli $canal n'est pas installé" + return 1 + fi + + #lanceurs + ln -sf "/usr/bin/firefox-$canal" "/usr/bin/firefox" # lien "lanceur" sur lanceur réel + + # 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' "/usr/bin/firefox-$canal" 100 # nouvelle alternative + update-alternatives --quiet --install $( type -p gnome-www-browser 2>/dev/null ) 'gnome-www-browser' "/usr/bin/firefox-$canal" 100 # nouvelle alternative + update-alternatives --quiet --set 'x-www-browser' "/usr/bin/firefox-$canal" # si le priorité n'est pas suffisante + update-alternatives --quiet --set 'gnome-www-browser' "/usr/bin/firefox-$canal" # si le priorité n'est pas suffisante + fi + + # set default=1 dans profiles.ini + while read ligne ; do + [[ ${ligne} =~ ^\[Profile.*\]$ ]] && numero=${ligne//[\[Profile\]]} # n° profil, peu utile + [[ $ligne == "Name=$canal" ]] && marqueur="ok" # détection canal recherché, marqueur actif + [[ $ligne == "Default=1" ]] && continue # si Default existant, on saute + + if [ "$marqueur" == "ok" ]; then # marqueur actif + if [[ ${ligne} =~ ^# || -z "${ligne}" ]]; then # première ligne vide rencontrée + ligne+="Default=1"$'\n' # ajout du Default=1 + unset marqueur # effaement marqueur + fi + fi + stockage+="$ligne"$'\n' # stockage des lignes + done < "$profileIni" + stockage=${stockage%[[:cntrl:]]} # suppression dernier saut de ligne superflu + + if type -p uniq &>/dev/null ; then # si commande uniq dispo + uniq <<< "$stockage" > "$profileIni" # on élimine doublons adjacents (lignes vides éventuelles) + else + echo "$stockage" > "$profileIni" + fi + + f__info "log:raw" "$appli $canal est le défaut système" } # copie du répertoire .default dans canal, $1=canal @@ -326,36 +410,6 @@ ffx_copie_default(){ # 22/12/2017 chmod g-rx,o-rx "$dirProfilFfx/$canal/" # droits répertoire } - # lien /usr/bin & alternatives, $1 canal -ffx_defaut_system(){ # 23/12/2017 - local canal="$1" appli="Firefox" - - if [ "$EUID" -ne 0 ]; then - f__info "vous devez être$RED ROOT$BLUE pour configurer $canal comme défaut dans le système" - f__sudo "exec $0 s-$canal" - return $? - fi - if [ ! -d "$dirInstallFfx$canal" ]; then - f__info "$appli $canal n'est pas installé" - return 1 - fi - if [ ! -d "$dirProfilFfx/$canal" ]; then # mise en place profil si inexistant, équivalent option u- - ffx_profil_user "$canal" - fi - - unlink "/usr/bin/firefox" &>/dev/null # lien éventuel - ln -sf "/usr/bin/firefox-$canal" "/usr/bin/firefox" - # 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' "/usr/bin/firefox-$canal" 100 # nouvelle alternative - update-alternatives --quiet --install $( type -p gnome-www-browser 2>/dev/null ) 'gnome-www-browser' "/usr/bin/firefox-$canal" 100 # nouvelle alternative - update-alternatives --quiet --set 'x-www-browser' "/usr/bin/firefox-$canal" # si le priorité n'est pas suffisante - update-alternatives --quiet --set 'gnome-www-browser' "/usr/bin/firefox-$canal" # si le priorité n'est pas suffisante - fi - - f__info "$appli $canal est le canal par défaut du système" -} - # détermination canal bas installé, assigne $ffx_canal_bas ffx_get_canalBas(){ # 18/12/2017 local ii @@ -448,7 +502,7 @@ EOF } # installation, $1 canal [$2='manuel', $3 archive] -ffx_install(){ # 25/12/2017 +ffx_install(){ # 26/12/2017 local fileTemp canal="$1" verArchive dirTemp="/tmp/$script-install_ffx" appli="Firefox" if [ "$EUID" -ne 0 ]; then @@ -500,13 +554,11 @@ ffx_install(){ # 25/12/2017 chmod -R g+wrs,a+r "$dirInstallFfx$canal/" rm -rf "$dirTemp/" - # finalisation utilisateur - ffx_profil_user "$canal" # profiles.ini, répertoire profil , profil default # traitement finaux système ln -sf "$dirInstallFfx$canal/browser/chrome/icons/default/default48.png" "/usr/share/pixmaps/firefox-$canal.png" ffx_lanceur_desktop "$canal" - # suppression liens lanceurs éventuels - unlink "/usr/bin/firefox-$canal" &>/dev/null # lien éventuel paquet debian + # suppression liens lanceurs éventuels + unlink "/usr/bin/firefox-$canal" &>/dev/null unlink "/usr/bin/firefox" &>/dev/null # lanceur dans /usr/bin echo "#!/bin/sh" > "/usr/bin/firefox-$canal" @@ -514,8 +566,9 @@ ffx_install(){ # 25/12/2017 echo "echo \"\$@\" | grep -qE '\-P|\-\-ProfileManager' && exec $dirInstallFfx$canal/firefox -P || \\" >> "/usr/bin/firefox-$canal" echo " exec $dirInstallFfx$canal/firefox -P $canal \"\$@\"" >> "/usr/bin/firefox-$canal" chmod a+x "/usr/bin/firefox-$canal" - # lien /usr/bin & alternatives - ffx_defaut_system "$canal" + + ffx_config_profil "$canal" # traitement de profile.ini + ffx_config_system "$canal" # lien /usr/bin, alternatives, default dans le profile if [ "$2" == "manuel" ]; then f__info "log" "archive $appli-$canal $verArchive installée" @@ -651,46 +704,8 @@ ffx_pers_upgrade(){ # 21/12/2017 fi } - # traitement utilisateur, $1=canal, [$2='user' si appel indépendant pour reconfiguration] -ffx_profil_user(){ # 25/12/2017 - local nbProfiles canal="$1" appli="Firefox" - - if [ ! -d "$dirInstallFfx$canal" ] && [ "$2" == "user" ]; then - f__info "$appli $canal n'est pas installé" - return 1 - fi - - if [ ! -d "$dirProfilFfx/$canal" ] ; then # création répertoire cible si inexistant - mkdir -p "$dirProfilFfx/$canal" # répertoire du répertoire profil - chown -R "$fu_user:" "$dirProfilFfx/$canal/" # propriété du répertoire profil à l'user - chmod g-rx,o-rx "$dirProfilFfx/$canal/" # droits répertoire - fi - if [ ! -e "$dirProfilFfx/profiles.ini" ]; then # si profile.ini inexistant, on crée profile.ini avec entête minimum - echo -e "[General]\nStartWithLastProfile=1" > "$dirProfilFfx/profiles.ini" - chown "$fu_user:" "$dirProfilFfx/profiles.ini" # propriété du fichier profile.ini à l'user - chmod u+rw,go+r "$dirProfilFfx/profiles.ini" # permissions du fichier profile.ini à l'user - fi - # inscription dans profil.ini, si ProfilX inexistant dans profiles.ini - if ! grep -q "Name=$canal" "$dirProfilFfx/profiles.ini" ; then - # comptage profils existants - nbProfiles=$( grep -cEs '\[Profile[0-9]+\]' "$dirProfilFfx/profiles.ini" ) - # création profil dans profile.ini - echo >> "$dirProfilFfx/profiles.ini" - echo "[Profile$nbProfiles]" >> "$dirProfilFfx/profiles.ini" - echo "Name=$canal" >> "$dirProfilFfx/profiles.ini" - echo "IsRelative=1" >> "$dirProfilFfx/profiles.ini" - echo "Path=$canal" >> "$dirProfilFfx/profiles.ini" - fi - # Default=1 au dernier installé, si besoin autre utiliser u- - sed -i '/Default=1/d' "$dirProfilFfx/profiles.ini" # effacement éventuel Default=existant - echo "Default=1" >> "$dirProfilFfx/profiles.ini" # réinscription - echo "$( uniq $dirProfilFfx/profiles.ini )" > "$dirProfilFfx/profiles.ini" # suppression lignes vides en double - - [ "$2" == "user" ] && f__info "log" "profil $appli $canal configuré pour $fu_user" -} - # désinstallation, $1=canal -ffx_remove(){ # 25/12/2017 +ffx_remove(){ # 26/12/2017 local canal="$1" fileDesktop="/usr/share/applications/firefox-$1.desktop" appli="Firefox" if [ "$EUID" -ne 0 ]; then @@ -711,11 +726,12 @@ ffx_remove(){ # 25/12/2017 rm -f "/usr/bin/firefox-$canal" # suppression des liens unlink "/usr/share/pixmaps/firefox-$canal.png" &>/dev/null - unlink "/usr/bin/firefox" &>/dev/null #finalisation system update-alternatives --quiet --remove 'x-www-browser' /usr/bin/firefox-$canal &>/dev/null update-alternatives --quiet --remove 'gnome-www-browser' /usr/bin/firefox-$canal &>/dev/null - ffx_get_canalBas && ffx_defaut_system "$ffx_canal_bas" # nouveau canal par défaut + + # canal bas comme nouveau défaut + ffx_get_canalBas && ffx_config_system "$ffx_canal_bas" f__info "log" "$appli-$canal désinstallé, mais le profil est toujours en place" \ " le supprimer manuellement si nécessaire, avec un autre caanl, pour cela:" \ @@ -1006,15 +1022,12 @@ for j in $options; do ffx_remove "$k" done exit ;; - s-latest | s-esr | s-dev | s-beta | s-nightly ) - produit=${j#*-} - ffx_defaut_system "$produit" # défaut système - exit ;; u-latest | u-esr | u-dev | u-beta | u-nightly | -all ) produit=${j#*-} [ "$produit" == "all" ] && produit="$produit_all" for k in $produit; do - ffx_profil_user "$k" "user" # configurer un canal pour user en cours + ffx_config_profil "$k" # configurer un canal pour user en cours + ffx_config_system "$k" # défaut système done exit ;;