L'OT di Linux e altri OS

Discussione in 'Linux e altri sistemi operativi' iniziata da wine, 17 Aprile 2013.

  1. « MoMy »

    • Ingegnere HW

    Dal:
    15 Agosto 2015
    Messaggi:
    835
    Mi Piace Ricevuti:
    396
    Specifiche Hardware
    @e_ale92 Non lo so, anche perché le mie son 'robette'.
    Ahh! fai il fico con gli occhiali neri. :asd:
     
  2. e_ale92

    • Ingegnere HW

    Dal:
    7 Marzo 2010
    Messaggi:
    16.493
    Mi Piace Ricevuti:
    4.816
    Specifiche Hardware
    non importa... che dovrei dire io, allora, che ho file di configurazione stupidi?

    eeehhhhh :sac: :figo:
     
  3. rebellion

    • Guru HW

    Dal:
    8 Febbraio 2010
    Messaggi:
    1.337
    Mi Piace Ricevuti:
    341
    Specifiche Hardware
    aillora, hai provato il mio script con la funzione 'seleziona' al posto di 'zenity --file'? devi poter selezionare più pacchetti e il numero dei pacchetti deve variare..:asd:
    se pubblico devo impegnarmi a manutenere gli script, a es. sorvegliare gli url per ricavare info sulla versione dei pacchetti da aggiornare e per scaricare gli snapshot, insomma è un lavoro e non più una passione!:nono: comunque va da se che tutta la roba che metto sul forum la puoi prendere e mettere dove ti pare e farne quel che vuoi anche senza citarmi.

    ho scoperto perchè i numeri versioni di alcuni pacchetti non vengono aggiornati: in realtà succede con alcuni pacchetti '-git' o simili che sono le modifiche dello sviluppatore al sorgente non ancora definite stabili, quindi Egli non ne ha ancora modificato il numero versione/release nel pkgbuild. dovrei controllare come dicevo prima la data o l'id dell'ultimo commit.. riassumendo lo script, nel controllo versione, dovrebbe controllare se il pacchetto è un -git -bzr -svn eccetera e controllarne data/id, oppure lascio così e faccio creare dallo script un file di database con tutte le informazioni che mi servono per valutare se i pacchetti sono aggiornati o no secondo un algoritmo che dovrei sviluppare.:suicidio:
     
    A e_ale92 piace questo elemento.
  4. e_ale92

    • Ingegnere HW

    Dal:
    7 Marzo 2010
    Messaggi:
    16.493
    Mi Piace Ricevuti:
    4.816
    Specifiche Hardware
    non è vero. puoi githubbare anche continuando per passione o fregandotene degli update costanti. nel senso, git non è solo uno strumento per sviluppatori pro, nessuno ti vieta di committare per hobby e senza impegno :)

    OMG, forkare pacaur era più semplice
    unico appunto a quel che hai scritto (che trovo corretto e che condivido) è che anche i pacchetti git hanno una versione. non so se ti è mai capitato di leggere il versionig di un pacchetto... non hanno versione 1.0 1.1 etc. ma hanno una specie di sigla alfanumerica.
    ad ogni modo, questo problema lo aveva anche pacaur. non ricordo se succede anche con Spotify, ma con stm32flash-git sicuro aggiorna in loop perché la versione su AUR risulta sempre più nuova di quella installata... quindi voglio dire, non solo il tuo script ha questo problema.
    io ho risolto aggiornando a mano stm32 (che cmq ha un ciclo di aggiornamento molto lento) e mettendo in ignorelist il pacchetto.

    p.s. let me say that... l'idea del database locale per tenere traccia di questi pacchetti "difficili" è stupenda! sarebbe una feature davvero WOW!
    io la committerei pure su pacaur, se fossi il dev XD
     
    A rebellion piace questo elemento.
  5. davethecipo

    • Ingegnere HW

    Dal:
    27 Febbraio 2009
    Messaggi:
    3.278
    Mi Piace Ricevuti:
    1.112
    Specifiche Hardware
    la sigla alfanumerica di solito è una parte dell'hash della revisione git
     
    A e_ale92 e rebellion piace questo messaggio.
  6. rebellion

    • Guru HW

    Dal:
    8 Febbraio 2010
    Messaggi:
    1.337
    Mi Piace Ricevuti:
    341
    Specifiche Hardware
    1 file 1 hash, quindi se rimane il pkgbuild del pacchetto installato basta confrontarlo col pkgbuild scaricato da aur e se sono uguali (anche se i numeri versione sono differenti) allora il pacchetto è aggiornato!:brindiamo: vado a controllare...

    Edit: controllato e funziona. @e_ale92 in giornata o al massimo domani modifico lo script.
     
    A e_ale92 piace questo elemento.
  7. e_ale92

    • Ingegnere HW

    Dal:
    7 Marzo 2010
    Messaggi:
    16.493
    Mi Piace Ricevuti:
    4.816
    Specifiche Hardware
    allora rimando l'update sul portatile :3
     
  8. « MoMy »

    Dal:
    15 Agosto 2015
    Messaggi:
    835
    Mi Piace Ricevuti:
    396
    Specifiche Hardware
    Cioè segliere ''questo e quello'' per creare una lista su cui operare? Mica l' avevo capito :P :asd:
    Non è meglio il contrario? Togliere ''questo e/o quello'' e far continuare il tuo script col resto?

    EDIT: Il bello dello scriptino che ho scritto, è che gli puoi far fare qualsiasi cosa (caffé a parte). Eseguire un comando, una serie di comandi, creare una lista da far eseguire, caricare un file e lavorare su quello... tutto inserendo il giusto comando alla riga 128 (dove al momento c'è pacman -Qi <pacchetto>).
     
    #8648 « MoMy », 13 Gennaio 2018
    Ultima modifica: 13 Gennaio 2018
    A e_ale92 piace questo elemento.
  9. davethecipo

    • Ingegnere HW

    Dal:
    27 Febbraio 2009
    Messaggi:
    3.278
    Mi Piace Ricevuti:
    1.112
    Specifiche Hardware
    @rebellion da quanto ricordo era la scelta più comune, però non posso certo garantirlo per tutti i PKGBUILD.
     
  10. rebellion

    • Guru HW

    Dal:
    8 Febbraio 2010
    Messaggi:
    1.337
    Mi Piace Ricevuti:
    341
    Specifiche Hardware
    non pensavo ai pkgbuild, ma al tar.gz: lo trovo facilmente online.

    @« MoMy » no col metodo seleziona e processa posso selezionare e deselezionare a piacimento ed è tutto più immediato, a me pare. tra l'altro nel tuo script se premi arrow-left/right o pg-up/down è come se premessi invio.
     
  11. rebellion

    • Guru HW

    Dal:
    8 Febbraio 2010
    Messaggi:
    1.337
    Mi Piace Ricevuti:
    341
    Specifiche Hardware
    @e_ale92 @« MoMy » @davethecipo ecco qua, adesso ho introdotto il controllo dell'evidenza informatica per ogni pacchetto installato e magicamente mi risultano tutti -correttamente- aggiornati!:chupachup:
    Codice (Text):

    #!/bin/bash
    #aur_update.sh v4.0
    #script di aggiornamento pacchetti installati da AUR, by rebellion
    #preferibilmente da lanciare tramite terminale per visualizzare messaggi di dialogo con lo script
    #a es. con: gnome-terminal --hide-menubar --title=\"AUR update\" -e \'sh -c \"sh /home/$USER/aur_update.sh\"\'
    controllo_dipendenze () {
       dipendenze=$(pacman -Qi $package_name | grep "Dipenda da") ; dipendenze=${dipendenze:28} ; dipendenze=${dipendenze//  / }
       if [ "$dipendenze" != "Nessuna" ] ; then
          numero_dipendenze=$(($(grep -o " " <<<"$dipendenze" | wc -l)+1))
          for ((ii=1;ii<=$numero_dipendenze;ii++)) ; do dip=$(echo $dipendenze | awk -v xx=$ii '{print$xx}') ; dip=${dip%%>*} ; dip=${dip%%<*} ; dip=${dip%%=*} ; if pacman -Q | grep -w "$dip" 1>/dev/null ; then echo $dip"-----> installata" ; else echo $dip"-----> non installata" ; fi ; done
       else echo "NESSUNA dipendenza richiesta."
       fi
       echo ; read -s -p "premi invio per continuare..."
    }
    seleziona () {
       selezione=()
       row_max=$((${#aur_ok[@]}/4))
       packages="" ; for ((i=0;i<$row_max;i++)) ; do ii=$(( (i*4)+1 )) ; packages=$packages" "${aur_ok[$ii]} ; done
       clear ; echo -e "PACCHETTI DA AGGIORNARE:\n\n" ; for ((i=0;i<$row_max;i++)) ; do package=$(echo $packages | awk -v x=$(( $i+1 )) '{print$x}') ; echo "( ) $package" ; done ; echo -e "\n----------------\ncurs.su/curs.giù per scorrere - invio per (de)selezionare - q per uscire\n----------------"
       tput sc ; tput cuu $(( $row_max+4 )) ; tput cuf 1 ; riga=1
       while [ "$tasto" != "q" ] ; do
          read -s -N1
          ott1="$REPLY"
          read -s -N2 -t 0.001
          ott2="$REPLY"
          read -s -N1 -t 0.001
          ott3="$REPLY"
          tasto="$ott1$ott2$ott3"
          case "$tasto" in
             $'\x1b\x5b\x41')
                if [ "$riga" = 1 ] ; then tput cud $(( $row_max-1 )) ; riga=$row_max ; else tput cuu 1 ; riga=$(( $riga-1 )) ; fi ;;
             $'\x1b\x5b\x42')
                if [ "$riga" = $row_max ] ; then tput cuu $(( $row_max-1 )) ; riga=1 ; else tput cud 1 ; riga=$(( $riga+1 )) ; fi ;;
             "
    ")
                if [ "${selezione[$riga]}" = "" ] ; then echo "x" ; selezione[$riga]="$riga"; else echo " " ; selezione[$riga]="" ; fi ; tput cuu 1 ; tput cuf 1 ; if [ "$riga" = $row_max ] ; then tput cuu $(( $row_max-1 )) ; riga=1 ; else tput cud 1 ; riga=$(( $riga+1 )) ; fi ;;
          esac
       done
       tput rc
       update=""
       package="" ; for i in "${selezione[@]}" ; do package=$(echo $packages | awk -v x=$i '{print$x}') ; update=$update" "$package ; done
    }
    updating () {
          risultato=""
          for ((i=1;i<=$numero;i++)) ; do
             clear
             echo -n "Controllo connessione internet..."
             if ping -q -c 1 -W 1 8.8.8.8 >/dev/null || ping -q -c 1 -W 1 google.com >/dev/null ; then
                echo "Connessione ok"
                package_name=$(echo $update | awk -v x=$i '{print$x}')
                echo "Installazione $package_name:" ; echo -n "ricerca $package_name_tar..."
                package_name_tar=$package_name".tar.gz"
                package_dir_del=$(find /home/$USER -type d -name "$package_name") ; package_dir_del=$(echo $package_dir_del | awk '{print$1}')
                [[ "$package_dir_del" != "" ]] && package_dir_del_old=$package_dir_del"_old"
                package_dir=$(find /home/$USER -type d -name "AUR") ; [[ "$package_dir" = "" ]] && package_dir=/home/$USER/AUR && mkdir /home/$USER/AUR
                package_path=$(find /home/$USER -type f -name "$package_name_tar") ; package_path=$(echo $package_path | awk '{print$1}')
                [[ "$package_path" != "" ]] && package_path_old=$package_path".old"
                echo "fatto." ; echo -n "Ricerca versioni..."
                versione_new=$(curl -s "https://aur.archlinux.org/rpc.php?v=5&type=info&arg=$package_name" | grep "Version") ; outofdate=$(echo $versione_new | grep "OutOfDate\":null") ; [[ "$outofdate" = "" ]] && outofdate="(OutOfDate)" || outofdate=""
                versione_new=${versione_new//,/ } ; versione_new=$(echo $versione_new | awk '{print$8}') ; versione_new=${versione_new:11} ; versione_new=${versione_new:0: -1}$outofdate
                versione_old=$(pacman -Qi $package_name | grep "Versione" | awk '{print$3}')
                echo "fatto." ; echo -e "Versione installata: $versione_old\nVersione da installare: $versione_new"
                echo -e "\nControllo dipendenze del pacchetto $package_name:\n"
                controllo_dipendenze
                if dialog --title "pacchetto $package_name" --backtitle "Aggiornamento AUR" --yesno "Verranno installate eventuali dipendenze mancanti se non presenti in AUR, altrimenti installale manualmente. Confermi l'aggiornamento?" 7 60 ; then clear
                   [[ -d "$package_dir_del" ]] && mv $package_dir_del $package_dir_del_old
                   [[ "$package_path" != "" ]] && mv $package_path $package_path_old
                   echo -e "Aggiornamento "$package_name" in corso, non spengere il pc o la connessione.\nbackup "$package_dir_del"---> fatto\nbackup "$package_name_tar"---> fatto"
                   if wget -P $package_dir https://aur.archlinux.org/cgit/aur.git/snapshot/$package_name_tar ; then
                      tar -xvzf $package_dir/$package_name_tar -C $package_dir
                      cd $package_dir/$package_name
                      if makepkg -s ; then
                         echo "Disinstallazione $package_name" ; sudo pacman -R $package_name
                         echo "Installazione $package_name scaricato" ; sudo pacman -U *.pkg.tar.xz
                         [[ "$package_path_old" != "" ]] && echo -n "Rimozione $package_path_old..." && rm $package_path_old && echo "Fatto."
                         [[ -d "$package_dir_del_old" ]] && echo -n "Rimozione cartella $package_dir_del_old di backup..." && sudo rm -r $package_dir_del_old && echo "Fatto." ; sleep 2
                         dialog --title "pacchetto $package_name" --backtitle "Aggiornamento AUR" --msgbox "Aggiornamento eseguito!" 7 60 ; clear ; risultato=$risultato" "$package_name"-->installato\n"
                      else
                         echo "Rimozione cartella $package_dir_del (cartella scompattata $package_name_tar scaricato)..."
                         sudo rm -r $package_dir/$package_name
                         [[ -d "$package_dir_del_old" ]] && mv $package_dir_del_old $package_dir_del
                         rm $package_dir/$package_name_tar ; [[ "$package_path_old" != "" ]] && mv $package_path_old $package_path
                         dialog --title "pacchetto $package_name" --backtitle "Aggiornamento AUR" --msgbox "Aggiornamento fallito. Ripristinato il backup del pacchetto." 7 60 ; clear ; risultato=$risultato" "$package_name"-->non_installato_problemi_con_dipendenze_o_compilazione\n"
                      fi
                   else
                      [[ -d "$package_dir_del_old" ]] && mv $package_dir_del_old $package_dir_del
                      [[ "$package_path_old" != "" ]] && mv $package_path_old $package_path
                      dialog --title "pacchetto $package_name" --backtitle "Aggiornamento AUR" --msgbox "Aggiornamento fallito, sembra che AUR non contenga il pacchetto da aggiornare. Ripristinato il backup del pacchetto." 7 60 ; clear
                      risultato=$risultato" "$package_name"-->non_installato_non_presente_in_AUR\n"
                   fi
                else risultato=$risultato" "$package_name"-->non_installato_per_scelta_utente\n"
                fi
             else
                echo "Connessione assente. Ripristino ultima versione di $package_name..." ; sleep 2 ;
                [[ -d "$package_dir_del_old" ]] && mv $package_dir_del_old $package_dir_del
                [[ "$package_path_old" != "" ]] && mv $package_path_old $package_path
                dialog --title "Controllo connessione internet" --backtitle "Aggiornamento AUR" --msgbox "Connessione assente, aggiornamento fallito. $package_name ripristinato all'ultima versione." 7 60 ; clear
                risultato=$risultato" "$package_name"-->non_installato_per_assenza_connessione_internet\n"
             fi
          done
          clear ; echo "Riassunto aggiornamento:" ; echo -e "\n$risultato" ; echo ; echo "premi invio per terminare..." ; read -s -n 1
    }
    check=$(ps aux | grep "[p]acman -Syu") ; if [ "$check" = "" ] ; then
    LIGHT_RED=='\033[0;31m' ; LIGHT_GREEN='\033[0;32m' ; LIGHT_WHITE='\033[1;37m' ; NC='\033[0m'
    clear && echo -n "Controllo connessione internet..."
    if ping -q -c 1 -W 1 8.8.8.8 >/dev/null || ping -q -c 1 -W 1 google.com >/dev/null ; then
       echo "Connesso a internet."
       echo -e "\nCONTROLLO PACCHETTI AGGIORNABILI, attendere..."
       aur=()
       aur_ok=()
       update=""
       AUR=$(pacman -Qqm)
       numero_AUR=$(pacman -Qqm | wc -l)
       for ((i=0;i<$numero_AUR;i++)) ; do ii=$((i+1)) ; aur[$i]=$(echo $AUR | awk -v x=$ii '{print$x}')
          versione_new=$(curl -s "https://aur.archlinux.org/rpc.php?v=5&type=info&arg=${aur[$i]}" | grep "Version") ; outofdate=$(echo $versione_new | grep "OutOfDate\":null")
          if [ "$versione_new" != "" ] ; then
             versione_new=${versione_new//,/ } ; versione_new=$(echo $versione_new | awk '{print$8}') ; versione_new=${versione_new:11} ; versione_new=${versione_new:0: -1}
             versione_old=$(pacman -Qi ${aur[$i]} | grep "Versione" | awk '{print$3}')
             [[ $package_path != "" ]] && hash_old=$(md5sum $package_path | awk '{print$1}') || hash_old=""
             [[ $hash_old != "" ]] && hash_new=$(curl -s https://aur.archlinux.org/cgit/aur.git/snapshot/$package_name_tar | awk '{print$1}') || hash_new=""
             if [ "$versione_new" != "$versione_old" ] && [ "$hash_old" != "$hash_new" ] ; then
                if [ "$outofdate" != "" ] ; then descrizione="${LIGHT_GREEN}AGGIORNABILE${NC}" ; descr="AGGIORNABILE" ; else descrizione="${LIGHT_GREEN}AGGIORNABILE${NC}(${LIGHT_RED}OutOfDate${NC})" ; descr="AGGIORNABILE_(OutOfDate)" ; fi
                if [ "$hash_old" = "" ] ; then descrizione=$descrizione"_firme_non_confrontabili" ; fi
                aur_ok+=(False ${aur[$i]} $versione_old $versione_new)
                aur[$i]=${aur[$i]}" --->"$descrizione
             else if [ "$outofdate" != "" ] ; then descrizione="${LIGHT_WHITE}AGGIORNATO${NC}" ; else descrizione="${LIGHT_WHITE}AGGIORNATO${NC}(${LIGHT_RED}OutOfDate${NC})" ; fi ; aur[$i]=${aur[$i]}" --->"$descrizione
             fi
          else descrizione="${LIGHT_RED}NON PRESENTE IN AUR${NC}" ; aur[$i]=${aur[$i]}" --->"$descrizione
          fi
       done
       if [ "$aur_ok" = "" ] ; then
          dialog --title "Controllo pacchetti installati" --backtitle "Aggiornamento AUR" --msgbox "Tutti i pacchetti AUR installati sono aggiornati alla versione più recente!" 7 60
       else
          for ((i=0;i<$numero_AUR;i++)) ; do echo -e ${aur[$i]} ; done ; echo -e "\tt=aggiorna tutto | s=seleziona aggiornamenti | altro=esci" ; read -n 1 -s azione
          if [ "$azione" = "s" ] ; then
             update=$(zenity --list --title="PACCHETTI AUR AGGIORNABILI" --text="seleziona per aggiornare" --width=1000 --height=650 --checklist --separator=" " --column="" --column="PACCHETTO" --column="VERSIONE INSTALLATA" --column="VERSIONE DA INSTALLARE" "${aur_ok[@]}" 2>/dev/null) ; numero=$(($(grep -o " " <<<"$update" | wc -l)+1))
    #         seleziona ; numero=$(grep -o " " <<<"$update" | wc -l)
              [[ "${update// /}" != "" ]] && updating
          elif [ "$azione" = "t" ] ; then numero=$((${#aur_ok[@]}/4))
             for ((i=0;i<$numero;i++)) ; do ii=$(( (i*4)+1 )) ; update=$update" "${aur_ok[$ii]} ; done
             updating
          fi
       fi
    else
       dialog --title "Controllo connessione internet" --backtitle "Aggiornamento AUR" --msgbox "Sembra che manchi la connessione, impossibile proseguire." 7 60
    fi
    else dialog --title "Controllo gestione pacchetti (PACMAN)" --backtitle "Aggiornamento AUR" --msgbox "C'è già in esecuzione il gestore pacchetti, attenderne la fine." 7 60
    fi
    exit 0
    la nuova funzionalità della firma digitale compara l'hash del tar.gz presente in aur e l'hash del tar.gz in locale (e quindi installato); questo perchè per ogni anche minima modifica nel commit il file archivio sarà sempre anche leggermente diverso dall'ultima versione e lo stesso anche l'hash. va da se che deve essere presente il tar.gz in locale altrimenti lo script lo segnala a monito dell'utente.
     
    A e_ale92 piace questo elemento.
  12. e_ale92

    • Ingegnere HW

    Dal:
    7 Marzo 2010
    Messaggi:
    16.493
    Mi Piace Ricevuti:
    4.816
    Specifiche Hardware
    perfetto, domani aggiorno il pc e ti dico :love:
     
  13. « MoMy »

    Dal:
    15 Agosto 2015
    Messaggi:
    835
    Mi Piace Ricevuti:
    396
    Specifiche Hardware
    Come qualsiasi altro tasto preceduto da escape ^[ (la maggior parte dei tasti F-funzione, Ins, Canc, Home, Pag-su/giù ecc ecc) e mi sembra facilmente risolvibile.
     
    A rebellion piace questo elemento.
  14. rebellion

    • Guru HW

    Dal:
    8 Febbraio 2010
    Messaggi:
    1.337
    Mi Piace Ricevuti:
    341
    Specifiche Hardware
    @e_ale92 nel controllo hash avevo fatto degli errori (array trattato come variabile e mancava un'operazione logica), questo lo script definitivo:
    Codice (Text):

    #!/bin/bash

    #aur_update.sh v4.1
    #script di aggiornamento pacchetti installati da AUR, by rebellion
    #preferibilmente da lanciare tramite terminale per visualizzare messaggi di dialogo con lo script
    #a es. con: gnome-terminal --hide-menubar --title=\"AUR update\" -e \'sh -c \"sh /home/$USER/aur_update.sh\"\'

    controllo_dipendenze () {
       dipendenze=$(pacman -Qi $package_name | grep "Dipenda da") ; dipendenze=${dipendenze:28} ; dipendenze=${dipendenze//  / }
       if [ "$dipendenze" != "Nessuna" ] ; then
          numero_dipendenze=$(($(grep -o " " <<<"$dipendenze" | wc -l)+1))
          for ((ii=1;ii<=$numero_dipendenze;ii++)) ; do dip=$(echo $dipendenze | awk -v xx=$ii '{print$xx}') ; dip=${dip%%>*} ; dip=${dip%%<*} ; dip=${dip%%=*} ; if pacman -Q | grep -w "$dip" 1>/dev/null ; then echo $dip"-----> installata" ; else echo $dip"-----> non installata" ; fi ; done
       else echo "NESSUNA dipendenza richiesta."
       fi
       echo ; read -s -p "premi invio per continuare..."
    }

    seleziona () {
       selezione=()
       row_max=$((${#aur_ok[@]}/4))
       packages="" ; for ((i=0;i<$row_max;i++)) ; do ii=$(( (i*4)+1 )) ; packages=$packages" "${aur_ok[$ii]} ; done
       clear ; echo -e "PACCHETTI DA AGGIORNARE:\n\n" ; for ((i=0;i<$row_max;i++)) ; do package=$(echo $packages | awk -v x=$(( $i+1 )) '{print$x}') ; echo "( ) $package" ; done ; echo -e "\n----------------\ncurs.su/curs.giù per scorrere - invio per (de)selezionare - q per uscire\n----------------"
       tput sc ; tput cuu $(( $row_max+4 )) ; tput cuf 1 ; riga=1
       while [ "$tasto" != "q" ] ; do
          read -s -N1
          ott1="$REPLY"
          read -s -N2 -t 0.001
          ott2="$REPLY"
          read -s -N1 -t 0.001
          ott3="$REPLY"
          tasto="$ott1$ott2$ott3"
          case "$tasto" in
             $'\x1b\x5b\x41')
                if [ "$riga" = 1 ] ; then tput cud $(( $row_max-1 )) ; riga=$row_max ; else tput cuu 1 ; riga=$(( $riga-1 )) ; fi ;;
             $'\x1b\x5b\x42')
                if [ "$riga" = $row_max ] ; then tput cuu $(( $row_max-1 )) ; riga=1 ; else tput cud 1 ; riga=$(( $riga+1 )) ; fi ;;
             "
    ")
                if [ "${selezione[$riga]}" = "" ] ; then echo "x" ; selezione[$riga]="$riga"; else echo " " ; selezione[$riga]="" ; fi ; tput cuu 1 ; tput cuf 1 ; if [ "$riga" = $row_max ] ; then tput cuu $(( $row_max-1 )) ; riga=1 ; else tput cud 1 ; riga=$(( $riga+1 )) ; fi ;;
          esac
       done
       tput rc
       update=""
       package="" ; for i in "${selezione[@]}" ; do package=$(echo $packages | awk -v x=$i '{print$x}') ; update=$update" "$package ; done
    }

    updating () {
          risultato=""
          for ((i=1;i<=$numero;i++)) ; do
             clear
             echo -n "Controllo connessione internet..."
             if ping -q -c 1 -W 1 8.8.8.8 >/dev/null || ping -q -c 1 -W 1 google.com >/dev/null ; then
                echo "Connessione ok"
                package_name=$(echo $update | awk -v x=$i '{print$x}')
                echo "Installazione $package_name:" ; echo -n "ricerca $package_name_tar..."
                package_name_tar=$package_name".tar.gz"
                package_dir_del=$(find /home/$USER -type d -name "$package_name") ; package_dir_del=$(echo $package_dir_del | awk '{print$1}')
                [[ "$package_dir_del" != "" ]] && package_dir_del_old=$package_dir_del"_old"
                package_dir=$(find /home/$USER -type d -name "AUR") ; [[ "$package_dir" = "" ]] && package_dir=/home/$USER/AUR && mkdir /home/$USER/AUR
                package_path=$(find /home/$USER -type f -name "$package_name_tar") ; package_path=$(echo $package_path | awk '{print$1}')
                [[ "$package_path" != "" ]] && package_path_old=$package_path".old"
                echo "fatto." ; echo -n "Ricerca versioni..."
                versione_new=$(curl -s "https://aur.archlinux.org/rpc.php?v=5&type=info&arg=$package_name" | grep "Version") ; outofdate=$(echo $versione_new | grep "OutOfDate\":null") ; [[ "$outofdate" = "" ]] && outofdate="(OutOfDate)" || outofdate=""
                versione_new=${versione_new//,/ } ; versione_new=$(echo $versione_new | awk '{print$8}') ; versione_new=${versione_new:11} ; versione_new=${versione_new:0: -1}$outofdate
                versione_old=$(pacman -Qi $package_name | grep "Versione" | awk '{print$3}')
                echo "fatto." ; echo -e "Versione installata: $versione_old\nVersione da installare: $versione_new"
                echo -e "\nControllo dipendenze del pacchetto $package_name:\n"
                controllo_dipendenze
                if dialog --title "pacchetto $package_name" --backtitle "Aggiornamento AUR" --yesno "Verranno installate eventuali dipendenze mancanti se non presenti in AUR, altrimenti installale manualmente. Confermi l'aggiornamento?" 7 60 ; then clear
                   [[ -d "$package_dir_del" ]] && mv $package_dir_del $package_dir_del_old
                   [[ "$package_path" != "" ]] && mv $package_path $package_path_old
                   echo -e "Aggiornamento "$package_name" in corso, non spengere il pc o la connessione.\nbackup "$package_dir_del"---> fatto\nbackup "$package_name_tar"---> fatto"
                   if wget -P $package_dir https://aur.archlinux.org/cgit/aur.git/snapshot/$package_name_tar ; then
                      tar -xvzf $package_dir/$package_name_tar -C $package_dir
                      cd $package_dir/$package_name
                      if makepkg -s ; then
                         echo "Disinstallazione $package_name" ; sudo pacman -R $package_name
                         echo "Installazione $package_name scaricato" ; sudo pacman -U *.pkg.tar.xz
                         [[ "$package_path_old" != "" ]] && echo -n "Rimozione $package_path_old..." && rm $package_path_old && echo "Fatto."
                         [[ -d "$package_dir_del_old" ]] && echo -n "Rimozione cartella $package_dir_del_old di backup..." && sudo rm -r $package_dir_del_old && echo "Fatto." ; sleep 2
                         dialog --title "pacchetto $package_name" --backtitle "Aggiornamento AUR" --msgbox "Aggiornamento eseguito!" 7 60 ; clear ; risultato=$risultato" "$package_name"-->installato\n"
                      else
                         echo "Rimozione cartella $package_dir_del (cartella scompattata $package_name_tar scaricato)..."
                         sudo rm -r $package_dir/$package_name
                         [[ -d "$package_dir_del_old" ]] && mv $package_dir_del_old $package_dir_del
                         rm $package_dir/$package_name_tar ; [[ "$package_path_old" != "" ]] && mv $package_path_old $package_path
                         dialog --title "pacchetto $package_name" --backtitle "Aggiornamento AUR" --msgbox "Aggiornamento fallito. Ripristinato il backup del pacchetto." 7 60 ; clear ; risultato=$risultato" "$package_name"-->non_installato_problemi_con_dipendenze_o_compilazione\n"
                      fi
                   else
                      [[ -d "$package_dir_del_old" ]] && mv $package_dir_del_old $package_dir_del
                      [[ "$package_path_old" != "" ]] && mv $package_path_old $package_path
                      dialog --title "pacchetto $package_name" --backtitle "Aggiornamento AUR" --msgbox "Aggiornamento fallito, sembra che AUR non contenga il pacchetto da aggiornare. Ripristinato il backup del pacchetto." 7 60 ; clear
                      risultato=$risultato" "$package_name"-->non_installato_non_presente_in_AUR\n"
                   fi
                else risultato=$risultato" "$package_name"-->non_installato_per_scelta_utente\n"
                fi
             else
                echo "Connessione assente. Ripristino ultima versione di $package_name..." ; sleep 2 ;
                [[ -d "$package_dir_del_old" ]] && mv $package_dir_del_old $package_dir_del
                [[ "$package_path_old" != "" ]] && mv $package_path_old $package_path
                dialog --title "Controllo connessione internet" --backtitle "Aggiornamento AUR" --msgbox "Connessione assente, aggiornamento fallito. $package_name ripristinato all'ultima versione." 7 60 ; clear
                risultato=$risultato" "$package_name"-->non_installato_per_assenza_connessione_internet\n"
             fi
          done
          clear ; echo "Riassunto aggiornamento:" ; echo -e "\n$risultato" ; echo ; echo "premi invio per terminare..." ; read -s -n 1
    }

    check=$(ps aux | grep "[p]acman -Syu") ; if [ "$check" = "" ] ; then
    LIGHT_RED=='\033[0;31m' ; LIGHT_GREEN='\033[0;32m' ; LIGHT_WHITE='\033[1;37m' ; NC='\033[0m'
    clear && echo -n "Controllo connessione internet..."
    if ping -q -c 1 -W 1 8.8.8.8 >/dev/null || ping -q -c 1 -W 1 google.com >/dev/null ; then
       echo "Connesso a internet."
       echo -e "\nCONTROLLO PACCHETTI AGGIORNABILI, attendere..."
       aur=()
       aur_ok=()
       update=""
       AUR=$(pacman -Qqm)
       numero_AUR=$(pacman -Qqm | wc -l)
       for ((i=0;i<$numero_AUR;i++)) ; do ii=$((i+1)) ; aur[$i]=$(echo $AUR | awk -v x=$ii '{print$x}')
          tput cuu 1 ; tput cuf 47 ; echo "[$(($i+1))/$numero_AUR]" ; tput el ; echo ${aur[$i]} ; tput cuu 1
          versione_new=$(curl -s "https://aur.archlinux.org/rpc.php?v=5&type=info&arg=${aur[$i]}" | grep "Version") ; outofdate=$(echo $versione_new | grep "OutOfDate\":null")
          if [ "$versione_new" != "" ] ; then
             versione_new=${versione_new//,/ } ; versione_new=$(echo $versione_new | awk '{print$8}') ; versione_new=${versione_new:11} ; versione_new=${versione_new:0: -1}
             versione_old=$(pacman -Qi ${aur[$i]} | grep "Versione" | awk '{print$3}')
             package_path=$(find /home/$USER -type f -name "${aur[$i]}.tar.gz") ; package_path=$(echo $package_path | awk '{print$1}')
             [[ $package_path != "" ]] && hash_old=$(md5sum $package_path | awk '{print$1}') || hash_old=""
             [[ $hash_old != "" ]] && hash_new=$(curl -s https://aur.archlinux.org/cgit/aur.git/snapshot/"${aur[$i]}.tar.gz" | md5sum | awk '{print$1}') || hash_new=""
             if [ "$versione_new" != "$versione_old" ] && ([ "$hash_old" != "$hash_new" ] || [ "$hash_old" = "" ]) ; then
                if [ "$outofdate" != "" ] ; then descrizione="${LIGHT_GREEN}AGGIORNABILE${NC}" ; descr="AGGIORNABILE" ; else descrizione="${LIGHT_GREEN}AGGIORNABILE${NC}(${LIGHT_RED}OutOfDate${NC})" ; descr="AGGIORNABILE_(OutOfDate)" ; fi
                if [ "$hash_old" = "" ] ; then descrizione=$descrizione"_firme_non_confrontabili" ; fi
                aur_ok+=(False ${aur[$i]} $versione_old $versione_new)
                aur[$i]=${aur[$i]}" --->"$descrizione
             else if [ "$outofdate" != "" ] ; then descrizione="${LIGHT_WHITE}AGGIORNATO${NC}" ; else descrizione="${LIGHT_WHITE}AGGIORNATO${NC}(${LIGHT_RED}OutOfDate${NC})" ; fi ; aur[$i]=${aur[$i]}" --->"$descrizione
             fi  
          else descrizione="${LIGHT_RED}NON PRESENTE IN AUR${NC}" ; aur[$i]=${aur[$i]}" --->"$descrizione
          fi
       done
       if [ "$aur_ok" = "" ] ; then
          dialog --title "Controllo pacchetti installati" --backtitle "Aggiornamento AUR" --msgbox "Tutti i pacchetti AUR installati sono aggiornati alla versione più recente!" 7 60
       else
          tput cuu 1 ; tput el ; echo "RISULTATO RICERCA PACCHETTI AGGIORNABILI:"
          for ((i=0;i<$numero_AUR;i++)) ; do echo -e ${aur[$i]} ; done ; echo -e "\tt=aggiorna tutto | s=seleziona aggiornamenti | altro=esci" ; read -n 1 -s azione
          if [ "$azione" = "s" ] ; then
             update=$(zenity --list --title="PACCHETTI AUR AGGIORNABILI" --text="seleziona per aggiornare" --width=1000 --height=650 --checklist --separator=" " --column="" --column="PACCHETTO" --column="VERSIONE INSTALLATA" --column="VERSIONE DA INSTALLARE" "${aur_ok[@]}" 2>/dev/null) ; numero=$(($(grep -o " " <<<"$update" | wc -l)+1))
    #         seleziona ; numero=$(grep -o " " <<<"$update" | wc -l)
              [[ "${update// /}" != "" ]] && updating
          elif [ "$azione" = "t" ] ; then numero=$((${#aur_ok[@]}/4))
             for ((i=0;i<$numero;i++)) ; do ii=$(( (i*4)+1 )) ; update=$update" "${aur_ok[$ii]} ; done
             updating
          fi
       fi
    else
       dialog --title "Controllo connessione internet" --backtitle "Aggiornamento AUR" --msgbox "Sembra che manchi la connessione, impossibile proseguire." 7 60
    fi
    else dialog --title "Controllo gestione pacchetti (PACMAN)" --backtitle "Aggiornamento AUR" --msgbox "C'è già in esecuzione il gestore pacchetti, attenderne la fine." 7 60
    fi

    exit 0
    c'ho messo anche una piccola miglioria nel controllo iniziale, almeno vedi quanto manca alla fine dell'operazione.
     
    A e_ale92 piace questo elemento.
  15. e_ale92

    • Ingegnere HW

    Dal:
    7 Marzo 2010
    Messaggi:
    16.493
    Mi Piace Ricevuti:
    4.816
    Specifiche Hardware
    allor :sac:

    l'ho provato sul fisso perché non ho il portatile sotto mano. ho poca roba da aur e l'unico aggiornabile è il plugin per le gnome-extension... che ovviamente con la mia solita fortuna, non ha l'hash confrontabile e quindi non viene aggiornato ahahahahah
    nonostante questo mi sembra tu abbia fato un lavoro fantastico. già la finestra di selezione dei pacchetti è così porn*grafica che... :love: ahahahah :lol:

    appena posso lo provo meglio e se scopro bug, ti avviso :)
     
    A rebellion piace questo elemento.

Condividi questa Pagina