Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # /etc/sudoers aggiungere
- # mario http://linux.die.net/man/5/sudoers
- # Defaults pwfeedback,passwd_timeout=3,timestamp_timeout=35
- # ###############
- # colori da usare
- function Cb { # ciano grassetto
- echo -e "\e[36;1m$1\e[0m"
- }
- function Rb { # rosso grassetto
- echo -e "\e[31;1m$1\e[0m"
- }
- function Wb { # bianco grassetto
- echo -e "\e[37;1m$1\e[0m"
- }
- function Wbu { # bianco grassetto sottolinato
- echo -e "\e[37;4;1m$1\e[0m"
- }
- function G { # giallo
- echo -e "\e[33m$1\e[0m"
- }
- function Gb { # giallo grassetto
- echo -e "\e[33;1m$1\e[0m"
- }
- # ###############
- function echoLine { # il primo argomento è il testo da visualizzare
- # senza il secondo argomento stampa le 2 linee sopra e sotto
- # LINEup stampa la riga sopra, LINEdw stampa la riga sotto
- # un argomento qualsiasi non stampa le linee ne sopra ne sotto
- # in questo script uso NOline
- local LINE="$2"
- local ECHOline="-----------------------"
- if [ "$LINE" == "LINEup" ]; then
- echo $ECHOline
- elif [ -z "$LINE" ]; then
- echo $ECHOline
- fi
- echo -e "$1"
- if [ "$LINE" == "LINEdw" ]; then
- echo $ECHOline
- elif [ -z "$LINE" ]; then
- echo $ECHOline
- fi
- }
- #################
- ########################################################################
- ########################################################################
- # la var iniziano in maiuscolo le funzioni in minuscolo
- function gestError {
- if [ $1 == aptUpgrade ]; then
- echoLine " DA FARE... gestione errore \"$(Cb "$2")\" di aptGetUpgrade" LINEdw
- echoLine "riprova più tardi oppure cambia mirror in $(Gb "/etc/apt/sources.list")" Noline
- echoLine "azzera la cache e riprova" Noline
- echoLine "\"$(Gb "apt-get clean")\" e-o \"$(Gb "apt-get autoclean")\"" Noline
- echoLine "ritenta con \"$(Gb "apt-get update --fix-missing")\"" Noline
- echoLine "ritenta con \"$(Gb "apt-get upgrade --fix-missing")\"" Noline
- echoLine "Rimuovi tutto da \"$(Gb "/var/cache/apt/archives/")\"" Noline
- echoLine " \"$(Gb "/var/cache/apt/archives/partial/")\"" Noline
- echoLine "INDAGA $(Cb "man apt-get dpkg")" LINEdw
- fi
- }
- function tryResolveAptUpdateError {
- local RISPOSTA APT_ERROR ARG_ERROR TRY_RESOLVER_FAIL="$TRY_RESOLVER_FAIL"
- if [ $2 == 1 ]; then
- echoLine " sudo $(Gb "$1 errore di password ??")" LINEdw
- elif [ $2 == 130 ]; then
- echoLine " $(Gb " $1 interrotto da te") $USER" LINEdw
- else
- if [ -z "$ARG_ERROR" ]; then ARG_ERROR="$1 $2"; fi # ${ARG_ERROR%%[0-9].*}
- echoLine " Gestione errore \"$(Cb "$ARG_ERROR")\"." LINEdw
- echo " Azzera la cache e riprova"
- echo " \"$(Gb "sudo apt-get clean")\" e-o \"$(Gb "sudo apt-get autoclean")\""
- echo " Ritenta con \"$(Gb "apt-get update --fix-missing")\""
- echo " Rimuovi tutto da \"$(Gb "/var/cache/apt/archives/")\""
- echo " \"$(Gb "/var/cache/apt/archives/partial/")\""
- echo " Non rimuovere files e dir da \"$(Gb "/var/cache/apt/")\""
- echo "-$(Cb "Riprova più tardi, il server mirror potrebbe essere impegnato")."
- echo "-$(Cb "Problemi di rete ??")."
- echo "-Cambia mirror in $(Gb "/etc/apt/sources.list")."
- echoLine "-INDAGA $(Cb "man apt-get") e $(Cb "man dpkg")" LINEdw
- if [ -z $TRY_RESOLVER_FAIL ]; then
- echo " $(Gb "Tentiamo una soluzione ??")"
- echo ""
- # "< 50 spazi >|< 20 spazi >"
- echo " Esegui $(Cb "sudo apt-get autoclean")"
- echo " $(Cb "sudo apt-get update --fix-missing") $(Gb "f|F Fix??") ENTER"
- echo " $(Cb "esci") $(Gb "e|E Esci") ENTER"
- read -p ".... . . . . . . . . . . . " RISPOSTA
- case $RISPOSTA in
- f|F)
- aptGetAutoclean
- APT_ERROR=$?
- if [ $APT_ERROR -eq 0 ]; then
- unset APT_ERROR
- TRY_RESOLVER_FAIL=0
- aptGetUpdate "--fix-missing"
- APT_ERROR=$?
- if [ $APT_ERROR -eq 0 ]; then
- echoLine " $(Gb "Forse è stato risolto l'errore") $ARG_ERROR" LINEup
- echoLine " $(Gb "Ritenta ad eseguire ") $(Gb "`basename $0` apt")" LINEdw
- TRY_RESOLVER_FAIL=0
- else
- TRY_RESOLVER_FAIL=11
- tryResolveAptUpdateError "\"aptGetUpdate --fix-missing\"" $APT_ERROR
- fi
- else
- TRY_RESOLVER_FAIL=10
- tryResolveAptUpdateError "\"aptGetAutoclean\"" $APT_ERROR
- fi
- ;;
- esac
- elif [ $TRY_RESOLVER_FAIL -eq 10 ]; then # if [ -z $TRY_RESOLVER_FAIL ]; then
- echo " $1 errore $(Cb "$2")"
- echoLine " $(Cb "Una soluzione l'ho tentata, di più non posso fare")" LINEdw
- elif [ $TRY_RESOLVER_FAIL -eq 11 ]; then
- echo " $1 errore $(Cb "$2")"
- echoLine " $(Gb "Una soluzione l'ho tentata, di più non posso fare")." LINEdw
- fi # if [ -z $TRY_RESOLVER_FAIL ]; then
- fi
- return $TRY_RESOLVER_FAIL
- }
- function aptGetAutoclean {
- local APT_ERROR
- echoLine " start $(Gb "sudo apt-get autoclean")"
- sudo apt-get autoclean
- APT_ERROR=$?
- echoLine " end $(Gb "sudo apt-get autoclean") exit $APT_ERROR"
- return $APT_ERROR
- }
- function aptGetUpdate {
- local APT_ERROR ARG
- if [ "$1" == "--fix-missing" ]; then
- ARG="$1"
- fi
- echoLine " start $(Gb "sudo apt-get update $ARG")"
- sudo apt-get update $ARG
- APT_ERROR=$?
- # APT_ERROR=100
- echoLine " end $(Gb "sudo apt-get update $ARG") exit $APT_ERROR "
- return $APT_ERROR
- }
- function aptGetUpgrade {
- local APT_ERROR ARG TIME_START=$(date +"%s") TIME_END TIME_DIFF TIME_UPGRADE
- if [ "$1" == "--fix-missing" ]; then
- ARG="$1"
- fi
- echoLine " start $(Gb "sudo apt-get -y upgrade $ARG")"
- sudo apt-get -y upgrade $ARG
- APT_ERROR=$?
- # APT_ERROR=100
- TIME_END=$(date +"%s")
- TIME_DIFF=$(($TIME_END-$TIME_START))
- # TIME_UPGRADE="$(($TIME_DIFF / 3600)) ore :$((($TIME_DIFF % 3600) /60)) min.:$(($TIME_DIFF % 60)) sec."
- TIME_UPGRADE="$(($TIME_DIFF / 3600)):$((($TIME_DIFF % 3600) /60)):$(($TIME_DIFF % 60))"
- echoLine " end $(Gb "sudo apt-get -y upgrade $ARG") exit $APT_ERROR - $TIME_UPGRADE"
- TIME_upgrade="$TIME_UPGRADE"
- return $APT_ERROR
- }
- function aptGetDistUpgrade {
- local APT_ERROR ARG TIME_START=$(date +"%s") TIME_END TIME_DIFF TIME_UPGRADE
- TIME_START=$(date +"%s")
- echoLine " start $(Gb "sudo apt-get -y dist-upgrade")"
- sudo apt-get -y dist-upgrade
- APT_ERROR=$?
- # APT_ERROR=100
- TIME_END=$(date +"%s")
- TIME_DIFF=$(($TIME_END-$TIME_START))
- TIME_UPGRADE="$(($TIME_DIFF / 3600)):$((($TIME_DIFF % 3600) /60)):$(($TIME_DIFF % 60))"
- echoLine " end $(Gb "sudo apt-get -y dist-upgrade") exit $APT_ERROR - $TIME_UPGRADE"
- TIME_distUpgrade="$TIME_UPGRADE"
- return $APT_ERROR
- }
- function aptGetAutoremove {
- local APT_ERROR
- echoLine " start $(Gb "sudo apt-get -y autoremove")"
- sudo apt-get -y autoremove
- APT_ERROR=$?
- # APT_ERROR=100
- echoLine " end $(Gb "sudo apt-get -y autoremove") exit $APT_ERROR "
- return $APT_ERROR
- }
- function aptGetJustPrint {
- local PRINT_LIST COUNT_UPD RISPOSTA RETURN=0
- # ###################
- # per test
- # #####################
- # PRINT_LIST="Lettura elenco dei pacchetti...
- # Generazione albero delle dipendenze...
- # Lettura informazioni sullo stato...
- # I seguenti pacchetti saranno aggiornati:
- # gir1.2-javascriptcoregtk-3.0 gir1.2-webkit-3.0 libjavascriptcoregtk-1.0-0
- # libjavascriptcoregtk-3.0-0 libtiff5 libtiff5:i386 libwebkitgtk-1.0-0
- # libwebkitgtk-1.0-common libwebkitgtk-3.0-0 libwebkitgtk-3.0-common
- # unity-settings-daemon
- # apt-get autoremove
- # 11 aggiornati, 0 installati, 0 da rimuovere e 0 non aggiornati.
- # bla blabla blabla blabla blabla blabla blabla blabla blabla bla
- # bla blabla blabla blabla blabla blabla blabla blabla blabla bla
- # bla blabla blabla blabla blabla blabla blabla blabla blabla bla"
- # #####################
- if [ "$1" == "upgrade" -o "$1" == "dist-upgrade" ]; then
- if [ "$1" == "upgrade" ]; then JUSTPRINT_ARG=$1 ; fi
- if [ "$1" == "dist-upgrade" ]; then JUSTPRINT_ARG=$1 ; fi
- PRINT_LIST="`sudo apt-get --just-print $1`"
- PRINT_LIST="`echo -e "$PRINT_LIST" | sed -n "/^.*[...]$/,/^[[:digit:]]\{1,4\}.*/p" `"
- echoLine " $(Gb "sudo apt-get --just-print $JUSTPRINT_ARG")" LINEdw
- echo "$PRINT_LIST"
- # ###################
- # da usare per test
- #COUNT_UPD="0 aggiornati, 10 installati, 0 da rimuovere e 0 non aggiornati."
- # ###################
- # l'ultima riga contiene la lista degli aggiornamenti
- COUNT_UPD="`echo -e "$PRINT_LIST" | tail -1 | grep -Eo ".*[1-9]*.*"`"
- # ###################
- # prendo solo i numeri che non iniziano con 0
- COUNT_UPD="`echo -e "$COUNT_UPD" | grep -Eo "[1-9]{1}[0-9]{1,5}*"`"
- unset UPD_N
- if [ ! -z "$COUNT_UPD" ]; then
- COUNT_UPD=( $COUNT_UPD )
- for (( N = 0 ; N < ${#COUNT_UPD[@]} ; N++ )); do
- UPD_N=$(( $UPD_N + ${COUNT_UPD[$N]} ))
- done
- unset N
- fi
- if [ ! -z "$UPD_N" ]; then
- echoLine " comando $(Gb "sudo apt-get --just-print $JUSTPRINT_ARG")" LINEup
- if [ $UPD_N -gt 1 ]; then
- echoLine " sono disponibili $(Gb "$UPD_N") aggiornamenti" LINEdw
- else
- echoLine " è disponibile $(Gb "$UPD_N") aggiornamento" LINEdw
- fi
- else
- echoLine " $(Gb "non ci sono aggiornamenti")"
- fi
- else
- RETURN=125
- fi
- if [[ `echo -e "$PRINT_LIST" | grep -E "sudo apt.* autoremove"` ]]; then
- if [ $RETURN -eq 0 ]; then
- RETURN=10
- fi
- fi
- return $RETURN
- } #function aptGetJustPrint {
- function start {
- local RISPOSTA RISPOSTA_OK XAPT_ERROR REBOOT PROMPT_MENU
- declare -a PROMPT_MENU
- case "$1" in
- apt|aptx|x)
- aptGetUpdate
- XAPT_ERROR=$?
- if [ $XAPT_ERROR -eq 0 ]; then
- unset XAPT_ERROR
- if [ -z $JUSTPRINT_ARG ]; then
- aptGetJustPrint upgrade
- EXIT_JUST_PRINT=$?
- else
- aptGetJustPrint dist-upgrade
- EXIT_JUST_PRINT=$?
- fi
- if [ ! -z $APT_UPGRADE ]; then # APT_UPGRADE valorizzata dal successo
- # dell'aggiornamento, case i|I) Installa
- echoLine " $(Gb "sudo apt-get -y $APT_UPGRADE")" NOline
- if [ "$APT_UPGRADE" == "upgrade" ]; then
- echoLine " $(Wb "$TIME_upgrade")" NOline
- unset TIME_upgrade
- fi
- if [ "$APT_UPGRADE" == "dist-upgrade" ]; then
- echoLine " $(Wb "$TIME_distUpgrade")" NOline
- unset TIME_distUpgrade
- fi
- echoLine " $(Gb "aggiornamento eseguito con successo OK")" LINEdw
- unset APT_UPGRADE
- fi
- if [ "$APT_AUTOREMOVE" == "ok" ]; then # APT_AUTOREMOVE valorizzata dal successo
- # successo di autoremove, case a|A) Autoremove
- echoLine " $(Gb "esecuzione di sudo apt-get autoremove\n terminata con successo OK")" LINEdw
- unset APT_AUTOREMOVE
- fi
- if [ -f /var/run/reboot-required ]; then # bin di update-motd
- REBOOT="`cat /var/run/reboot-required`"
- echoLine " $(Rb "$REBOOT")" LINEdw
- fi
- if [ ! -z "$REBOOT" ]; then
- echo " $(Gb "sudo shutdown -r now")"
- echo " $(Cb "Riavvio il computer ??") $(Gb "r|R Riavvio") ENTER"
- unset REBOOT
- PROMPT_MENU=("rR" "${PROMPT_MENU[@]}")
- fi
- if [ ! -z $UPD_N ]; then # UPD_N valorizzata da aptGetJustPrint upgrade
- # se ci sono aggiornamenti
- echo " $(Gb "sudo apt-get -y $JUSTPRINT_ARG")"
- echo " $(Cb "installo tutti gli aggiornamenti ??") $(Gb "i|I Installo") ENTER"
- PROMPT_MENU=("iI" "${PROMPT_MENU[@]}")
- fi
- if [ "$EXIT_JUST_PRINT" -eq "10" ]; then # EXIT_JUST_PRINT return di aptGetJustPrint se trova
- # la necessità di 'apt-get autoremove'
- echo -e " $(Wb "consiglio"):\n considera il comando $(Gb "sudo apt-get autoremove")"
- echo " $(Cb " eseguo \"sudo apt-get autoremove\" ??") $(Gb "a|A Autoremove") ENTER"
- PROMPT_MENU=("aA" "${PROMPT_MENU[@]}")
- fi
- if [ ${#PROMPT_MENU[@]} -gt 0 ]; then
- # <..............50 spazi su schermo............................>|<.20spazi su schermo.>
- echo " $(Cb "esci") $(Gb "e|E Esci") ENTER"
- PROMPT_MENU=("${PROMPT_MENU[@]}" "eE")
- read -p ".... . . . . . . . . . . . " RISPOSTA # 50 spazi vuoti sullo shermo
- # per mantenere l'allineamento
- for (( N = 0 ; N < ${#PROMPT_MENU[@]} ; N++ )); do
- if [[ `echo "${PROMPT_MENU[$N]}" | grep -i $RISPOSTA` ]]; then
- RISPOSTA_OK=$RISPOSTA
- fi
- done
- unset N PROMPT_MENU RISPOSTA
- else
- exit 0
- fi
- case "$RISPOSTA_OK" in
- i|I) # installa gli aggiornamenti
- if [ "$JUSTPRINT_ARG" == "upgrade" ];then
- aptGetUpgrade
- XAPT_ERROR=$?
- if [ $XAPT_ERROR -eq 0 ]; then
- APT_UPGRADE=$JUSTPRINT_ARG
- unset XAPT_ERROR
- echoLine " $(Gb "sudo apt-get -y $JUSTPRINT_ARG")" NOline
- echoLine " $(Gb "aggiornamento OK")" NOline
- start apt
- else
- # gestError aptUpdate $XAPT_ERROR
- tryResolveAptUpdateError aptUpdate $XAPT_ERROR
- unset XAPT_ERROR
- fi
- fi
- if [ "$JUSTPRINT_ARG" == "dist-upgrade" ];then
- aptGetDistUpgrade
- XAPT_ERROR=$?
- if [ $XAPT_ERROR -eq 0 ]; then
- APT_UPGRADE=$JUSTPRINT_ARG
- unset XAPT_ERROR
- echoLine " $(Gb "sudo apt-get -y $JUSTPRINT_ARG")" NOline
- echoLine " $(Gb "aggiornamento OK")" NOline
- start apt
- else
- # gestError aptUpdate $XAPT_ERROR
- tryResolveAptUpdateError aptUpdate $XAPT_ERROR
- unset XAPT_ERROR
- fi
- fi
- ;;
- a|A) # Autoremove
- aptGetAutoremove
- XAPT_ERROR=$?
- if [ $XAPT_ERROR -eq 0 ]; then
- APT_AUTOREMOVE=ok
- unset XAPT_ERROR
- start apt
- else
- echoLine "----gestione errore da fare-----"
- unset XAPT_ERROR
- fi
- ;;
- r|R)
- sudo shutdown -r now
- ;;
- e|E)
- echoLine " $(Gb "bye bye")"
- exit 0
- ;;
- *)
- echoLine " $(Gb "bye bye")" LINEup
- echoLine " selezione non contemplata" LINEdw
- exit 0
- ;;
- esac
- else
- # gestError aptUpdate $XAPT_ERROR
- tryResolveAptUpdateError aptUpdate $XAPT_ERROR
- unset XAPT_ERROR
- fi
- ;;
- esac
- } #function start {
- ########################################################################
- # ###############################
- # inizializzo il da farsi
- GRUPPO_SUDO=`id -G | grep -o 27`
- if [ -z $GRUPPO_SUDO ] ; then
- echoLine " $USER $(Gb "non può eseguire") $(Rb "$0")" LINEup
- echoLine " $(Gb "solo il gruppo") $(Rb "sudo") $(Gb "può eseguire")" LINEdw
- exit 1
- fi
- NET_iface="`ip route | grep -n default | sort -b -k 9 | awk 'NR==1 {print $5}'`"
- if [ -z $NET_iface ]; then
- echoLine " $(Gb "Non c'è connessione di rete")"
- exit 1
- else
- ping -c 1 gnu.org 2>/dev/null 1>/dev/null
- PING_EXIT=$?
- if [ $PING_EXIT -gt 0 ]; then
- echoLine " $(Gb "ping -c 1 gnu.org") exit $PING_EXIT" LINEup
- echoLine " $(Gb "Non c'è connettivita su Internet")" LINEdw
- exit 1
- fi
- fi
- case "$1" in
- apt)
- start apt
- ;;
- *)
- echoLine " $(Gb "help ...???")"
- echoLine " `dirname $0`/$(Gb "`basename $0` apt") " LINEdw
- ;;
- esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement