This commit is contained in:
kyodev 2017-08-18 20:16:52 +02:00
parent 7e769247a3
commit 651c081b62
2 changed files with 120 additions and 111 deletions

View File

@ -8,6 +8,7 @@ script="getFirefox"
urlScript="https://framagit.org/kyodev/kyopages/raw/master/scripts/getFirefox"
urlNotice="https://kyodev.frama.io/kyopages/scripts/getFirefox/"
user_agent="Mozilla/5.0 Firefox"
lognameDev="kyodev"
##### license LPRAB/WTFPL
# auteur: simpledeb
@ -90,7 +91,7 @@ f__log(){ # v08/2017
}
# test dépendances/paquets, $1 liste commande[>paquet] (ex: killall>psmisc)
# si manque, info commandes manquantes, si debian, proposition paquet à installer et SORTIE
# si manque, SORTIE & info commandes manquantes, si debian, SORTIE & proposition paquet à installer
# 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 )
# attention priorité $debOnlyPackages sur $debOnlyPresents
@ -155,19 +156,20 @@ f__wget_test(){ # v07/2017
}
# inscription dans tache upgrade en anacron hebdomadaire, via cron horaire
fscript_cronAnacron(){ # v17/08/2017
fscript_cronAnacron(){ # v18/08/2017-2
rm "/home/$user_/.mozilla/$script.anacrontab" &>/dev/null # ancienne localisation éventuelle, spécifique getFirefox
rm "/home/$user_/.config/anacron/spool/getFF"* &>/dev/null # ancien job, spécifique getFirefox
local dirAnacron="/home/$user_/.config/anacron"
local dirSpool="$dirAnacron/spool"
local fileAnacron="$dirAnacron/$script.anacrontab"
sed -i "/$script.anacrontab/d" /etc/crontab
[ $EUID -eq 0 ] && sed -i "/$script.anacrontab/d" /etc/crontab
case "$1" in
install | upgrade )
mkdir -p "$dirAnacron"
# table anacron
echo "7 01 $script nice /opt/bin/$script --upgrade" > "$fileAnacron"
## test: anacron journalier: echo "1 01 $script test nice /opt/bin/$script --upgrade" >> "$fileAnacron"
## dev: anacron journalier:
[ "$user_" == "$lognameDev" ] && echo "1 01 $script""Dev nice /opt/bin/$script --upgrade 1>/dev/null" >> "$fileAnacron"
# création spool anacron utilisateur
mkdir -p "$dirSpool"
chown -R "$user_": "$dirAnacron" "$dirSpool"
@ -189,11 +191,11 @@ fscript_cronAnacron(){ # v17/08/2017
}
# mise à jour script si dispo
fscript_dl(){ # v17/08/2017
fscript_dl(){ # v18/08/2017
f__requis "wget"
if [ "$script_aJour" == "ok" ]; then return 0; fi
local dirTemp="/tmp/$script-$RANDOM/"
mkdir -p "$dirTemp"
opType="upgrade"
wget -q --show-progress --tries=2 --timeout=15 -O "$dirTemp$script" "$urlScript"
if [ "$?" != "0" ]; then f__wget_test "$urlScript"; fi
chmod 755 "$dirTemp$script"
@ -207,7 +209,8 @@ fscript_dl(){ # v17/08/2017
}
# version script en ligne, assigne $versionScript, $script_aJour=ok|ko
fscript_get_version(){ # v08/2017
fscript_get_version(){ # v18/08/2017
f__requis "wget"
versionScript="$(wget -q --tries=2 --timeout=15 -O - "$urlScript" | grep '^version=' | cut -d '=' -f 2)"
if [ "$versionScript" ]; then
if [ "$version" != "$versionScript" ]; then
@ -221,14 +224,13 @@ fscript_get_version(){ # v08/2017
}
# installation du script dans le système
fscript_install(){ # v08/2017
[ -e "/var/log/sdeb_getFF.log" ] && mv "/var/log/sdeb_getFF.log" "$fileLogs" # changement ancien logs
if f__requis "firefox-esr firefox" "debOnly" && [ "$debOnlyPresents" ]; then
f__info "paquet(s) installé(s) $debOnlyPresents" \
"\n à moins d'être certain, vous devriez peut-être le désinstaller:$RED apt remove firefox* $COLOR" \
"\n Sur Gnome, attention, consulter:$GREEN https://kyodev.frama.io/kyopages/scripts/getFirefox/#gnome $COLOR"
fscript_install(){ # v18/08/2017
if dirname "$0" | grep -q 'bin' ; then
f__info "$script $version est déjà installé"
return 1
fi
[ $EUID -eq 0 ] || f__error "vous devez être ROOT pour installer ce script dans le système"
f__requis "wget anacron cron"
# install /opt
mkdir -p /opt/bin/
cp -d "$(basename $0)" "/opt/bin/$script"
@ -259,6 +261,43 @@ fscript_remove(){ # v08/2017
f__log "$script $version supprimé du système"
}
# détermination canal bas Firefox installé, assigne $firefoxCanalBas
ffx_get_canalBas(){
for ii in nightly dev beta esr latest; do
if [ -d "$dirInstall$ii/" ]; then firefoxCanalBas="$ii"; fi
done
[ "$firefoxCanalBas" ] || return 1
}
# version Firefox en ligne
ffx_get_versionsFF(){
printf "."
local fileTmp="/tmp/getFirefox-wgetVer-$RANDOM"
local recup_url="https://www.mozilla.org/en-US/firefox/notes/"
wget -q --tries=2 --timeout=15 --user-agent=$user_agent -O - "$recup_url" &>"$fileTmp"
local verLatest="$(grep -Eo 'data-latest-firefox="[0-9\.]+"' $fileTmp | grep -Eo '[0-9\.]+')"
local verEsr="$(grep -Eo 'data-esr-versions="[0-9\.]+"' $fileTmp | grep -Eo '[0-9\.]+')"
printf "."
local recup_url="https://download.mozilla.org/?product=firefox-beta-latest&os=linux64&lang=fr"
wget -Sq --tries=1 --timeout=10 --user-agent="$user_agent" --spider --save-headers "$recup_url" &>"$fileTmp"
local verBeta="$(grep -i 'location' $fileTmp | sed -E 's/.*firefox-(.*)\.tar.bz2/\1/')"
printf "."
local recup_url="https://download.mozilla.org/?product=firefox-nightly-latest-l10n-ssl&os=linux64&lang=fr"
wget -Sq --tries=1 --timeout=10 --user-agent="$user_agent" --spider --save-headers "$recup_url" &>"$fileTmp"
local verNightly="$(grep -i 'location' $fileTmp | sed -E 's/.*firefox-(.*)\.fr.linux.*/\1/')"
printf "."
rm "$fileTmp"
for prod in latest esr beta dev nightly; do
if [ -x "$dirInstall$prod/firefox" ]; then
printf "."
versionInstall+="\n $prod: $($dirInstall$prod/firefox -v | grep -Eo '[0-9].*')"
fi
done
printf ".\n"
f__info "Firefox installé(s): $versionInstall"
f__info "version Firefox en ligne:\n Release : $verLatest\n Beta/dev: $verBeta\n Nightly : $verNightly\n ESR : $verEsr"
}
# ascii art godzilla; ligne vide finale
ffx_godzilla(){
printf "$RED"
@ -309,33 +348,45 @@ EOF
echo -e " plus d'infos:$GREEN https://framagit.org/kyodev/kyopages/raw/master/scripts/getFirefox$COLOR\n"
}
# version Firefox en ligne
ffx_get_versionsFF(){
printf "."
local fileTmp="/tmp/getFirefox-wgetVer-$RANDOM"
local recup_url="https://www.mozilla.org/en-US/firefox/notes/"
wget -q --tries=2 --timeout=15 --user-agent=$user_agent -O - "$recup_url" &>"$fileTmp"
local verLatest="$(grep -Eo 'data-latest-firefox="[0-9\.]+"' $fileTmp | grep -Eo '[0-9\.]+')"
local verEsr="$(grep -Eo 'data-esr-versions="[0-9\.]+"' $fileTmp | grep -Eo '[0-9\.]+')"
printf "."
local recup_url="https://download.mozilla.org/?product=firefox-beta-latest&os=linux64&lang=fr"
wget -Sq --tries=1 --timeout=10 --user-agent="$user_agent" --spider --save-headers "$recup_url" &>"$fileTmp"
local verBeta="$(grep -i 'location' $fileTmp | sed -E 's/.*firefox-(.*)\.tar.bz2/\1/')"
printf "."
local recup_url="https://download.mozilla.org/?product=firefox-nightly-latest-l10n-ssl&os=linux64&lang=fr"
wget -Sq --tries=1 --timeout=10 --user-agent="$user_agent" --spider --save-headers "$recup_url" &>"$fileTmp"
local verNightly="$(grep -i 'location' $fileTmp | sed -E 's/.*firefox-(.*)\.fr.linux.*/\1/')"
printf "."
rm "$fileTmp"
for prod in latest esr beta dev nightly; do
if [ -x "$dirInstall$prod/firefox" ]; then
printf "."
versionInstall+="\n $prod: $($dirInstall$prod/firefox -v | grep -Eo '[0-9].*')"
fi
done
printf ".\n"
f__info "Firefox installé(s): $versionInstall"
f__info "version Firefox en ligne:\n Release : $verLatest\n Beta/dev: $verBeta\n Nightly : $verNightly\n ESR : $verEsr"
# installation Firefox
ffx_install(){
[ $EUID -eq 0 ] || f__error "vous devez être ROOT pour installer Firefox"
f__info " - installation Firefox-$produit"
local dirTemp="/tmp/$script-$RANDOM/"
local file="firefox-$produit.$architecture.tar.bz2"
mkdir -p "$dirTemp" # dossier temporaire de travail
# téléchargement & test archive
f__info " - téléchargement..."
ffx_recup_url
wget -q -c --show-progress --tries=2 --timeout=15 --user-agent="$user_agent" -O "$dirTemp$file" "$recup_url"
if [ "$?" != "0" ]; then f__wget_test "$recup_url"; fi
f__archive_test "$dirTemp$file" || f__error "Le fichier $dirTemp$file n'est pas une archive tar.gz valide"
# décompression
f__info "\n - décompression..."
tar -xaf "$dirTemp$file" -C "$dirTemp"
# mise en place finale
f__info " - installation..."
rm -rf "/opt/firefox-$produit/" # effacement ancien répertoire éventuel
rm -rf "$dirInstall$produit"/ # effacement éventuel répertoire existant: "vraie" install
mkdir -p "$dirInstall$produit"/
mv -f "$dirTemp"firefox/* "$dirInstall$produit"/
chown -R "$user_": "$dirInstall$produit"/
chmod -R g+wrs,a+r "$dirInstall$produit"/
rm -rf "$dirTemp"
# lien icône Firefox
ln -sf "$dirInstall$produit/browser/chrome/icons/default/default48.png" "/usr/share/pixmaps/firefox-$produit.png"
# lanceur dans /usr/bin
echo '#!/bin/sh' > "/usr/bin/firefox-$produit"
echo >> "/usr/bin/firefox-$produit"
echo 'echo "$@"'" | grep -qE '\-P|\-\-ProfileManager' && exec $dirInstall$produit/firefox -P || \\" >> "/usr/bin/firefox-$produit"
echo " exec $dirInstall$produit/firefox -P $produit "'$@' >> "/usr/bin/firefox-$produit"
chmod a+x "/usr/bin/firefox-$produit"
ffx_usr_bin
# traitement user
ffx_profil_user
f__info "$GREEN""Firefox-$produit installé."
f__log "Firefox-$produit installé"
ffx_godzilla
}
# création lanceur.desktop
@ -381,35 +432,6 @@ ffx_profilIni_inscription(){
else echo "" >> "$fileProfileIni"; fi
}
# détermination canal bas Firefox installé, assigne $firefoxCanalBas
ffx_get_canalBas(){
for ii in nightly dev beta esr latest; do
if [ -d "$dirInstall$ii/" ]; then firefoxCanalBas="$ii"; fi
done
[ "$firefoxCanalBas" ] || return 1
}
# traitement update-alternatives
ffx_update_alternatives(){
[ "$(which update-alternatives)" ] || return 0 # update-alternatives n'est pas sur cette distrib
if ffx_get_canalBas ; then
update-alternatives --quiet --install /usr/bin/firefox x-www-browser "/usr/bin/firefox-$firefoxCanalBas" 100
f__info " - alternatives installées pour <$firefoxCanalBas>"
else # plus aucun canal installé, on efface
if update-alternatives --get-selections | grep firefox | grep -q x-www-browser; then
update-alternatives --quiet --remove-all x-www-browser
fi
fi
}
# lien /usr/bin/firefox pour le plus bas canal Firefox installé, utile si update-alternatives pas fonctionnel
ffx_usr_bin(){
if ffx_get_canalBas ; then
ln -sf "/usr/bin/firefox-$firefoxCanalBas" "/usr/bin/firefox"
f__info " - firefox lié à firefox-$firefoxCanalBas"
fi
}
# traitement utilisateur, $1 user si appel indépendant pour reconfiguration
ffx_profil_user(){
if [ "$1" == "user" ] && [ ! -x "/usr/bin/firefox-$produit" ]; then
@ -457,47 +479,6 @@ ffx_recup_url(){
recup_url="https://download.mozilla.org/?product=firefox-$produit-latest-l10n-ssl&os=$architecture&lang=fr" ;fi
}
# installation Firefox
ffx_install(){
[ $EUID -eq 0 ] || f__error "vous devez être ROOT pour installer Firefox"
f__info " - installation Firefox-$produit"
local dirTemp="/tmp/$script-$RANDOM/"
local file="firefox-$produit.$architecture.tar.bz2"
mkdir -p "$dirTemp" # dossier temporaire de travail
# téléchargement & test archive
f__info " - téléchargement..."
ffx_recup_url
wget -q -c --show-progress --tries=2 --timeout=15 --user-agent="$user_agent" -O "$dirTemp$file" "$recup_url"
if [ "$?" != "0" ]; then f__wget_test "$recup_url"; fi
f__archive_test "$dirTemp$file" || f__error "Le fichier $dirTemp$file n'est pas une archive tar.gz valide"
# décompression
f__info "\n - décompression..."
tar -xaf "$dirTemp$file" -C "$dirTemp"
# mise en place finale
f__info " - installation..."
rm -rf "/opt/firefox-$produit/" # effacement ancien répertoire éventuel
rm -rf "$dirInstall$produit"/ # effacement éventuel répertoire existant: "vraie" install
mkdir -p "$dirInstall$produit"/
mv -f "$dirTemp"firefox/* "$dirInstall$produit"/
chown -R "$user_": "$dirInstall$produit"/
chmod -R g+wrs,a+r "$dirInstall$produit"/
rm -rf "$dirTemp"
# lien icône Firefox
ln -sf "$dirInstall$produit/browser/chrome/icons/default/default48.png" "/usr/share/pixmaps/firefox-$produit.png"
# lanceur dans /usr/bin
echo '#!/bin/sh' > "/usr/bin/firefox-$produit"
echo >> "/usr/bin/firefox-$produit"
echo 'echo "$@"'" | grep -qE '\-P|\-\-ProfileManager' && exec $dirInstall$produit/firefox -P || \\" >> "/usr/bin/firefox-$produit"
echo " exec $dirInstall$produit/firefox -P $produit "'$@' >> "/usr/bin/firefox-$produit"
chmod a+x "/usr/bin/firefox-$produit"
ffx_usr_bin
# traitement user
ffx_profil_user
f__info "$GREEN""Firefox-$produit installé."
f__log "Firefox-$produit installé"
ffx_godzilla
}
# désinstallation de Firefox, on laisse le profil user
ffx_remove(){
[ $EUID -eq 0 ] || f__error "vous devez être ROOT pour désinstaller firefox"
@ -525,12 +506,33 @@ ffx_remove(){
ffx_godzilla
}
# traitement update-alternatives
ffx_update_alternatives(){
[ "$(which update-alternatives)" ] || return 0 # update-alternatives n'est pas sur cette distrib
if ffx_get_canalBas ; then
update-alternatives --quiet --install /usr/bin/firefox x-www-browser "/usr/bin/firefox-$firefoxCanalBas" 100
f__info " - alternatives installées pour <$firefoxCanalBas>"
else # plus aucun canal installé, on efface
if update-alternatives --get-selections | grep firefox | grep -q x-www-browser; then
update-alternatives --quiet --remove-all x-www-browser
fi
fi
}
# lien /usr/bin/firefox pour le plus bas canal Firefox installé, utile si update-alternatives pas fonctionnel
ffx_usr_bin(){
if ffx_get_canalBas ; then
ln -sf "/usr/bin/firefox-$firefoxCanalBas" "/usr/bin/firefox"
f__info " - firefox lié à firefox-$firefoxCanalBas"
fi
}
# initialisation
PATH='/usr/sbin:/usr/bin:/sbin:/bin' ; IFS=' '
f__affichage
f__architecture || f__error "Seules les architecture 32 et 64 bits sont supportée (i686 & amd64) par Firefox"
f__user || f__error "échec détection user"
f__requis "wget file tar killall>psmisc anacron cron" #syntaxe command>package, /!\ sortie sur erreur
f__requis "file tar killall>psmisc" # pour fonctionnement programme
fileLogs="/var/log/sdeb_$script.log"
dirInstall="/opt/usr/share/firefox-"
@ -582,6 +584,7 @@ for i in "$options"; do
fscript_remove
;;
-u | --upgrade | upgrade ) # upgrade script
opType="upgrade"
fscript_get_version
fscript_dl
;;

View File

@ -8,6 +8,12 @@
* user.pref (autoplay, ...)
* peaufiner contexte upgrade lors cron (affichage, requis, user)
## 2.0.6 18/08/2017
* maj fscript_cronAnacron lors upgrade et spécial pour dev
* maj fscript_get_version, fscript_dl, fscript_install
* vérification requis pour fonctionnement script
## 2.0.5 17/08/2017
* test inscription crontab pour recherche bug siduction