Advertisement
marioq

aggiorna apt

Sep 13th, 2016
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 14.73 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # /etc/sudoers aggiungere
  4. # mario http://linux.die.net/man/5/sudoers
  5. # Defaults  pwfeedback,passwd_timeout=3,timestamp_timeout=35
  6.  
  7. # ###############
  8. # colori da usare
  9. function Cb { # ciano grassetto
  10.     echo -e "\e[36;1m$1\e[0m"
  11. }
  12. function Rb { # rosso grassetto
  13.     echo -e "\e[31;1m$1\e[0m"
  14. }
  15. function Wb { # bianco grassetto
  16.     echo -e "\e[37;1m$1\e[0m"
  17. }
  18. function Wbu { # bianco grassetto sottolinato
  19.     echo -e "\e[37;4;1m$1\e[0m"
  20. }
  21. function G { # giallo
  22.     echo -e "\e[33m$1\e[0m"
  23. }
  24. function Gb { # giallo grassetto
  25.     echo -e "\e[33;1m$1\e[0m"
  26. }
  27. # ###############
  28. function echoLine { # il primo argomento è il testo da visualizzare
  29.     # senza il secondo argomento stampa le 2 linee sopra e sotto
  30.     # LINEup stampa la riga sopra, LINEdw stampa la riga sotto
  31.     # un argomento qualsiasi non stampa le linee ne sopra ne sotto
  32.     # in questo script uso NOline
  33.  
  34.     local LINE="$2"
  35.     local ECHOline="-----------------------"
  36.     if [ "$LINE" == "LINEup" ]; then
  37.         echo $ECHOline
  38.     elif [ -z "$LINE" ]; then
  39.         echo $ECHOline
  40.     fi
  41.     echo -e "$1"
  42.     if [ "$LINE" == "LINEdw" ]; then
  43.         echo $ECHOline
  44.     elif [ -z "$LINE" ]; then
  45.         echo $ECHOline
  46.     fi
  47. }
  48. #################
  49.  
  50.  
  51. ########################################################################
  52. ########################################################################
  53. # la var iniziano in maiuscolo le funzioni in minuscolo
  54.  
  55. function gestError {
  56.     if [ $1 == aptUpgrade ]; then
  57.             echoLine "   DA FARE... gestione errore \"$(Cb "$2")\" di aptGetUpgrade" LINEdw
  58.             echoLine "riprova più tardi oppure cambia mirror in $(Gb "/etc/apt/sources.list")" Noline
  59.             echoLine "azzera la cache e riprova" Noline
  60.             echoLine "\"$(Gb "apt-get clean")\" e-o \"$(Gb "apt-get autoclean")\"" Noline
  61.             echoLine "ritenta con \"$(Gb "apt-get update --fix-missing")\"" Noline
  62.             echoLine "ritenta con \"$(Gb "apt-get upgrade --fix-missing")\"" Noline
  63.             echoLine "Rimuovi tutto da \"$(Gb "/var/cache/apt/archives/")\"" Noline
  64.             echoLine "                 \"$(Gb "/var/cache/apt/archives/partial/")\"" Noline
  65.             echoLine "INDAGA $(Cb "man apt-get dpkg")" LINEdw
  66.     fi
  67. }
  68.  
  69. function tryResolveAptUpdateError {
  70.     local RISPOSTA APT_ERROR ARG_ERROR TRY_RESOLVER_FAIL="$TRY_RESOLVER_FAIL"
  71.     if [ $2 == 1 ]; then
  72.         echoLine " sudo $(Gb "$1 errore di password ??")" LINEdw
  73.     elif [ $2 == 130 ]; then
  74.         echoLine " $(Gb " $1 interrotto da te") $USER" LINEdw
  75.     else
  76.         if [ -z "$ARG_ERROR" ]; then ARG_ERROR="$1  $2"; fi # ${ARG_ERROR%%[0-9].*}
  77.         echoLine " Gestione errore \"$(Cb "$ARG_ERROR")\"." LINEdw
  78.         echo     " Azzera la cache e riprova"
  79.         echo     " \"$(Gb "sudo apt-get clean")\" e-o \"$(Gb "sudo apt-get autoclean")\""
  80.         echo     " Ritenta con \"$(Gb "apt-get update --fix-missing")\""
  81.         echo     " Rimuovi tutto da             \"$(Gb "/var/cache/apt/archives/")\""
  82.         echo     "                              \"$(Gb "/var/cache/apt/archives/partial/")\""
  83.         echo     " Non rimuovere files e dir da \"$(Gb "/var/cache/apt/")\""
  84.         echo     "-$(Cb "Riprova più tardi, il server mirror potrebbe essere impegnato")."
  85.         echo     "-$(Cb "Problemi di rete ??")."
  86.         echo     "-Cambia mirror in $(Gb "/etc/apt/sources.list")."
  87.         echoLine "-INDAGA $(Cb "man apt-get") e $(Cb "man dpkg")" LINEdw
  88.  
  89.         if [ -z $TRY_RESOLVER_FAIL ]; then
  90.             echo     " $(Gb "Tentiamo una soluzione ??")"
  91.             echo     ""
  92.             #        "<              50 spazi                          >|<     20 spazi     >"
  93.             echo     " Esegui $(Cb "sudo apt-get autoclean")"
  94.             echo     "        $(Cb "sudo apt-get update --fix-missing")        $(Gb "f|F Fix??")        ENTER"
  95.             echo     "                                            $(Cb "esci") $(Gb "e|E Esci")         ENTER"
  96.             read -p  ".... .  .  .  .   .   .   .    .    .     .     . " RISPOSTA
  97.             case $RISPOSTA in
  98.             f|F)
  99.             aptGetAutoclean
  100.             APT_ERROR=$?
  101.             if [ $APT_ERROR -eq 0 ]; then
  102.                 unset APT_ERROR
  103.                 TRY_RESOLVER_FAIL=0
  104.                 aptGetUpdate "--fix-missing"
  105.                 APT_ERROR=$?
  106.                 if [ $APT_ERROR -eq 0 ]; then
  107.                     echoLine " $(Gb "Forse è stato risolto l'errore") $ARG_ERROR" LINEup
  108.                     echoLine " $(Gb "Ritenta ad eseguire ") $(Gb "`basename $0` apt")" LINEdw
  109.                     TRY_RESOLVER_FAIL=0
  110.                 else
  111.                     TRY_RESOLVER_FAIL=11
  112.                     tryResolveAptUpdateError "\"aptGetUpdate --fix-missing\"" $APT_ERROR
  113.                 fi
  114.             else
  115.                 TRY_RESOLVER_FAIL=10
  116.                 tryResolveAptUpdateError "\"aptGetAutoclean\"" $APT_ERROR
  117.             fi
  118.             ;;
  119.             esac
  120.  
  121.         elif [ $TRY_RESOLVER_FAIL -eq 10 ]; then # if [ -z $TRY_RESOLVER_FAIL ]; then
  122.             echo     " $1  errore $(Cb "$2")"
  123.             echoLine " $(Cb "Una soluzione l'ho tentata, di più non posso fare")" LINEdw
  124.         elif [ $TRY_RESOLVER_FAIL -eq 11 ]; then
  125.             echo     " $1  errore $(Cb "$2")"
  126.             echoLine " $(Gb "Una soluzione l'ho tentata, di più non posso fare")." LINEdw
  127.         fi # if [ -z $TRY_RESOLVER_FAIL ]; then
  128.     fi
  129.     return $TRY_RESOLVER_FAIL
  130. }
  131.  
  132. function aptGetAutoclean {
  133.     local APT_ERROR
  134.     echoLine " start $(Gb "sudo apt-get autoclean")"
  135.     sudo apt-get autoclean
  136.     APT_ERROR=$?
  137.     echoLine "   end $(Gb "sudo apt-get autoclean") exit $APT_ERROR"
  138.     return $APT_ERROR
  139. }
  140.  
  141. function aptGetUpdate {
  142.     local APT_ERROR ARG
  143.     if [ "$1" == "--fix-missing" ]; then
  144.         ARG="$1"
  145.     fi
  146.     echoLine " start $(Gb "sudo apt-get update $ARG")"
  147.     sudo apt-get update $ARG
  148.     APT_ERROR=$?
  149.     # APT_ERROR=100
  150.     echoLine "   end $(Gb "sudo apt-get update $ARG") exit $APT_ERROR "
  151.     return $APT_ERROR
  152. }
  153.  
  154. function aptGetUpgrade {
  155.     local APT_ERROR ARG TIME_START=$(date +"%s") TIME_END TIME_DIFF TIME_UPGRADE
  156.     if [ "$1" == "--fix-missing" ]; then
  157.         ARG="$1"
  158.     fi
  159.     echoLine " start $(Gb "sudo apt-get -y upgrade $ARG")"
  160.     sudo apt-get -y upgrade $ARG
  161.     APT_ERROR=$?
  162.     # APT_ERROR=100
  163.     TIME_END=$(date +"%s")
  164.     TIME_DIFF=$(($TIME_END-$TIME_START))
  165.     # TIME_UPGRADE="$(($TIME_DIFF / 3600)) ore :$((($TIME_DIFF % 3600) /60)) min.:$(($TIME_DIFF % 60)) sec."
  166.     TIME_UPGRADE="$(($TIME_DIFF / 3600)):$((($TIME_DIFF % 3600) /60)):$(($TIME_DIFF % 60))"
  167.     echoLine "   end $(Gb "sudo apt-get -y upgrade $ARG") exit $APT_ERROR - $TIME_UPGRADE"
  168.     TIME_upgrade="$TIME_UPGRADE"
  169.     return $APT_ERROR
  170. }
  171.  
  172. function aptGetDistUpgrade {
  173.     local APT_ERROR ARG TIME_START=$(date +"%s") TIME_END TIME_DIFF TIME_UPGRADE
  174.     TIME_START=$(date +"%s")
  175.     echoLine " start $(Gb "sudo apt-get -y dist-upgrade")"
  176.     sudo apt-get -y dist-upgrade
  177.     APT_ERROR=$?
  178.     # APT_ERROR=100
  179.     TIME_END=$(date +"%s")
  180.     TIME_DIFF=$(($TIME_END-$TIME_START))
  181.     TIME_UPGRADE="$(($TIME_DIFF / 3600)):$((($TIME_DIFF % 3600) /60)):$(($TIME_DIFF % 60))"
  182.     echoLine "   end $(Gb "sudo apt-get -y dist-upgrade") exit $APT_ERROR - $TIME_UPGRADE"
  183.     TIME_distUpgrade="$TIME_UPGRADE"
  184.     return $APT_ERROR
  185. }
  186.  
  187. function aptGetAutoremove {
  188.     local APT_ERROR
  189.     echoLine " start $(Gb "sudo apt-get -y autoremove")"
  190.     sudo apt-get -y autoremove
  191.     APT_ERROR=$?
  192.     # APT_ERROR=100
  193.     echoLine "   end $(Gb "sudo apt-get -y autoremove") exit $APT_ERROR "
  194.     return $APT_ERROR
  195. }
  196.  
  197. function aptGetJustPrint {
  198.     local PRINT_LIST COUNT_UPD RISPOSTA RETURN=0
  199. # ###################
  200. # per test
  201. # #####################
  202. # PRINT_LIST="Lettura elenco dei pacchetti...
  203. # Generazione albero delle dipendenze...
  204. # Lettura informazioni sullo stato...
  205. # I seguenti pacchetti saranno aggiornati:
  206.   # gir1.2-javascriptcoregtk-3.0 gir1.2-webkit-3.0 libjavascriptcoregtk-1.0-0
  207.   # libjavascriptcoregtk-3.0-0 libtiff5 libtiff5:i386 libwebkitgtk-1.0-0
  208.   # libwebkitgtk-1.0-common libwebkitgtk-3.0-0 libwebkitgtk-3.0-common
  209.   # unity-settings-daemon
  210.   # apt-get autoremove
  211. # 11 aggiornati, 0 installati, 0 da rimuovere e 0 non aggiornati.
  212. # bla blabla blabla blabla blabla blabla blabla blabla blabla bla
  213. # bla blabla blabla blabla blabla blabla blabla blabla blabla bla
  214. # bla blabla blabla blabla blabla blabla blabla blabla blabla bla"
  215. # #####################
  216.  
  217.     if [ "$1" == "upgrade" -o "$1" == "dist-upgrade" ]; then
  218.         if [ "$1" == "upgrade" ]; then JUSTPRINT_ARG=$1 ; fi
  219.         if [ "$1" == "dist-upgrade" ]; then JUSTPRINT_ARG=$1 ; fi
  220.         PRINT_LIST="`sudo apt-get --just-print $1`"
  221.         PRINT_LIST="`echo -e "$PRINT_LIST" | sed -n "/^.*[...]$/,/^[[:digit:]]\{1,4\}.*/p" `"
  222.         echoLine " $(Gb "sudo apt-get --just-print $JUSTPRINT_ARG")" LINEdw
  223.         echo     "$PRINT_LIST"
  224.         # ###################
  225.         # da usare per test
  226.         #COUNT_UPD="0 aggiornati, 10 installati, 0 da rimuovere e 0 non aggiornati."
  227.         # ###################
  228.         # l'ultima riga contiene la lista degli aggiornamenti
  229.         COUNT_UPD="`echo -e "$PRINT_LIST" | tail -1 | grep -Eo ".*[1-9]*.*"`"
  230.         # ###################
  231.         # prendo solo i numeri che non iniziano con 0
  232.         COUNT_UPD="`echo -e "$COUNT_UPD" | grep -Eo "[1-9]{1}[0-9]{1,5}*"`"
  233.         unset UPD_N
  234.         if [ ! -z "$COUNT_UPD" ]; then
  235.             COUNT_UPD=( $COUNT_UPD )
  236.             for (( N = 0 ; N < ${#COUNT_UPD[@]} ; N++ )); do
  237.                 UPD_N=$(( $UPD_N + ${COUNT_UPD[$N]} ))
  238.             done
  239.             unset N
  240.         fi
  241.         if [ ! -z "$UPD_N" ]; then
  242.         echoLine " comando $(Gb "sudo apt-get --just-print $JUSTPRINT_ARG")" LINEup
  243.             if [ $UPD_N -gt 1 ]; then
  244.                 echoLine " sono disponibili $(Gb "$UPD_N") aggiornamenti" LINEdw
  245.             else
  246.                 echoLine " è disponibile $(Gb "$UPD_N") aggiornamento" LINEdw
  247.             fi
  248.         else
  249.             echoLine " $(Gb "non ci sono aggiornamenti")"
  250.         fi
  251.     else
  252.         RETURN=125
  253.     fi
  254.     if [[ `echo -e "$PRINT_LIST" | grep -E "sudo apt.* autoremove"` ]]; then
  255.         if [ $RETURN -eq 0 ]; then
  256.             RETURN=10
  257.         fi
  258.     fi
  259.     return $RETURN
  260. } #function aptGetJustPrint {
  261.  
  262. function start {
  263.     local RISPOSTA RISPOSTA_OK XAPT_ERROR REBOOT PROMPT_MENU
  264.     declare -a PROMPT_MENU
  265.  
  266. case "$1" in
  267. apt|aptx|x)
  268.     aptGetUpdate
  269.     XAPT_ERROR=$?
  270.     if [ $XAPT_ERROR -eq 0 ]; then
  271.         unset XAPT_ERROR
  272.         if [ -z $JUSTPRINT_ARG ]; then
  273.             aptGetJustPrint upgrade
  274.             EXIT_JUST_PRINT=$?
  275.         else
  276.             aptGetJustPrint dist-upgrade
  277.             EXIT_JUST_PRINT=$?
  278.         fi
  279.  
  280.         if [ ! -z $APT_UPGRADE ]; then # APT_UPGRADE valorizzata dal successo
  281.                                        # dell'aggiornamento, case i|I) Installa
  282.             echoLine " $(Gb "sudo apt-get -y $APT_UPGRADE")" NOline
  283.             if [ "$APT_UPGRADE" == "upgrade" ]; then
  284.                 echoLine " $(Wb "$TIME_upgrade")" NOline
  285.                 unset TIME_upgrade
  286.             fi
  287.             if [ "$APT_UPGRADE" == "dist-upgrade" ]; then
  288.                 echoLine " $(Wb "$TIME_distUpgrade")" NOline
  289.                 unset TIME_distUpgrade
  290.             fi
  291.             echoLine " $(Gb "aggiornamento eseguito con successo OK")" LINEdw
  292.             unset APT_UPGRADE
  293.         fi
  294.  
  295.         if [ "$APT_AUTOREMOVE" == "ok" ]; then # APT_AUTOREMOVE valorizzata dal successo
  296.                                                # successo di autoremove, case a|A) Autoremove
  297.             echoLine " $(Gb "esecuzione di sudo apt-get autoremove\n terminata con successo OK")" LINEdw
  298.             unset APT_AUTOREMOVE
  299.         fi
  300.  
  301.         if [ -f /var/run/reboot-required ]; then # bin di update-motd
  302.             REBOOT="`cat /var/run/reboot-required`"
  303.             echoLine " $(Rb "$REBOOT")" LINEdw
  304.         fi
  305.  
  306.         if [ ! -z "$REBOOT" ]; then
  307.             echo "                         $(Gb "sudo shutdown -r now")"
  308.             echo "                         $(Cb "Riavvio il computer ??") $(Gb "r|R Riavvio")      ENTER"
  309.             unset REBOOT
  310.             PROMPT_MENU=("rR" "${PROMPT_MENU[@]}")
  311.         fi
  312.  
  313.         if [ ! -z $UPD_N ]; then # UPD_N valorizzata da aptGetJustPrint upgrade
  314.                                  # se ci sono aggiornamenti
  315.             echo "            $(Gb "sudo apt-get -y $JUSTPRINT_ARG")"
  316.             echo "            $(Cb "installo tutti gli aggiornamenti ??") $(Gb "i|I Installo")     ENTER"
  317.             PROMPT_MENU=("iI" "${PROMPT_MENU[@]}")
  318.         fi
  319.  
  320.         if [ "$EXIT_JUST_PRINT" -eq "10" ]; then # EXIT_JUST_PRINT return di aptGetJustPrint se trova
  321.                                                  # la necessità di 'apt-get autoremove'
  322.             echo -e " $(Wb "consiglio"):\n considera il comando $(Gb "sudo apt-get autoremove")"
  323.             echo " $(Cb "           eseguo \"sudo apt-get autoremove\" ??") $(Gb "a|A Autoremove")   ENTER"
  324.             PROMPT_MENU=("aA" "${PROMPT_MENU[@]}")
  325.         fi
  326.  
  327.         if [ ${#PROMPT_MENU[@]} -gt 0 ]; then
  328.                 # <..............50 spazi su schermo............................>|<.20spazi su schermo.>
  329.             echo "                                           $(Cb "esci") $(Gb "e|E Esci")         ENTER"
  330.             PROMPT_MENU=("${PROMPT_MENU[@]}" "eE")
  331.             read -p ".... .  .  .  .   .   .   .    .    .     .    . " RISPOSTA # 50 spazi vuoti sullo shermo
  332.                                                                                  # per mantenere l'allineamento
  333.             for (( N = 0 ; N < ${#PROMPT_MENU[@]} ; N++ )); do
  334.                 if [[ `echo "${PROMPT_MENU[$N]}" | grep -i $RISPOSTA` ]]; then
  335.                     RISPOSTA_OK=$RISPOSTA
  336.                 fi
  337.             done
  338.             unset N PROMPT_MENU RISPOSTA
  339.  
  340.         else
  341.             exit 0
  342.         fi
  343.  
  344.         case "$RISPOSTA_OK" in
  345.         i|I) # installa gli aggiornamenti
  346.             if [ "$JUSTPRINT_ARG" == "upgrade" ];then
  347.                 aptGetUpgrade
  348.                 XAPT_ERROR=$?
  349.                 if [ $XAPT_ERROR -eq 0 ]; then
  350.                     APT_UPGRADE=$JUSTPRINT_ARG
  351.                     unset XAPT_ERROR
  352.                     echoLine " $(Gb "sudo apt-get -y $JUSTPRINT_ARG")" NOline
  353.                     echoLine " $(Gb "aggiornamento OK")" NOline
  354.                     start apt
  355.                 else
  356.                     # gestError aptUpdate $XAPT_ERROR
  357.                     tryResolveAptUpdateError aptUpdate $XAPT_ERROR
  358.                     unset XAPT_ERROR
  359.                 fi
  360.             fi
  361.  
  362.             if [ "$JUSTPRINT_ARG" == "dist-upgrade" ];then
  363.                 aptGetDistUpgrade
  364.                 XAPT_ERROR=$?
  365.                 if [ $XAPT_ERROR -eq 0 ]; then
  366.                     APT_UPGRADE=$JUSTPRINT_ARG
  367.                     unset XAPT_ERROR
  368.                     echoLine " $(Gb "sudo apt-get -y $JUSTPRINT_ARG")" NOline
  369.                     echoLine " $(Gb "aggiornamento OK")" NOline
  370.                     start apt
  371.                 else
  372.                     # gestError aptUpdate $XAPT_ERROR
  373.                     tryResolveAptUpdateError aptUpdate $XAPT_ERROR
  374.                     unset XAPT_ERROR
  375.                 fi
  376.             fi
  377.  
  378.         ;;
  379.         a|A) # Autoremove
  380.             aptGetAutoremove
  381.             XAPT_ERROR=$?
  382.             if [ $XAPT_ERROR -eq 0 ]; then
  383.                 APT_AUTOREMOVE=ok
  384.                 unset XAPT_ERROR
  385.                 start apt
  386.             else
  387.                 echoLine "----gestione errore da fare-----"
  388.                 unset XAPT_ERROR
  389.             fi
  390.         ;;
  391.         r|R)
  392.             sudo shutdown -r now
  393.         ;;
  394.         e|E)
  395.             echoLine " $(Gb "bye bye")"
  396.             exit 0
  397.         ;;
  398.         *)
  399.             echoLine " $(Gb "bye bye")" LINEup
  400.             echoLine " selezione non contemplata" LINEdw
  401.             exit 0
  402.         ;;
  403.         esac
  404.     else
  405.         # gestError aptUpdate $XAPT_ERROR
  406.         tryResolveAptUpdateError aptUpdate $XAPT_ERROR
  407.         unset XAPT_ERROR
  408.     fi
  409. ;;
  410. esac
  411. } #function start {
  412.  
  413. ########################################################################
  414. # ###############################
  415. # inizializzo il da farsi
  416.  
  417. GRUPPO_SUDO=`id -G | grep -o 27`
  418. if [ -z $GRUPPO_SUDO ] ; then
  419.     echoLine " $USER $(Gb "non può eseguire") $(Rb "$0")" LINEup
  420.     echoLine " $(Gb "solo il gruppo") $(Rb "sudo") $(Gb "può eseguire")" LINEdw
  421.     exit 1
  422. fi
  423.  
  424. NET_iface="`ip route | grep -n default | sort -b -k 9 | awk 'NR==1 {print $5}'`"
  425. if [ -z $NET_iface ]; then
  426.     echoLine " $(Gb "Non c'è connessione di rete")"
  427.     exit 1
  428. else
  429.     ping -c 1 gnu.org 2>/dev/null 1>/dev/null
  430.     PING_EXIT=$?
  431.     if [ $PING_EXIT -gt 0 ]; then
  432.         echoLine " $(Gb "ping -c 1 gnu.org") exit $PING_EXIT" LINEup
  433.         echoLine " $(Gb "Non c'è connettivita su Internet")" LINEdw
  434.         exit 1
  435.     fi
  436. fi
  437.  
  438. case "$1" in
  439. apt)
  440.     start apt
  441. ;;
  442.  
  443. *)
  444.     echoLine " $(Gb "help ...???")"
  445.     echoLine " `dirname $0`/$(Gb "`basename $0` apt") " LINEdw
  446. ;;
  447. esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement