Segui il video qui sotto per vedere come installare il nostro sito come web app sulla tua schermata principale.
Nota: Questa funzionalità potrebbe non essere disponibile in alcuni browser.
Pubblicità
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:@rebellion Ekkilo.
Il comando (ho indicato pacman -Qi <applicazione> tanto per fargli fare qualcosa) lo trovi alla riga 128. Da me funziona, provato e riprovato... :asd:
Metto un credito a oTo (anche se non so chi sia) perché mi ha ispirato leggendo un suo lavoro.
Visualizza allegato 276913 Visualizza allegato 276914 Visualizza allegato 276915
Codice:#/bin/bash # Credito by oTo per avermi ispirato. :P packages="yaourt xterm skippy-xd-git skippy-xd-git anamnesis aurvote cower fontconfig-infinality-ultimate" pack_exit="$packages EXIT" PACCHETTI_PKG=($packages) SEL_PAK=${#PACCHETTI_PKG[*]} LISTA_MENU=($pack_exit) TOT_PACCHETTI=${#LISTA_MENU[*]} FONDO_MENU=$((${#LISTA_MENU[*]}+4)) trap "R;exit" 2 ESCHEIP=$( echo -en "\033") T_PUT(){ echo -en "\033[${1};${2}H";} CoLORA(){ echo -en "\033[7m";} DeCOLORA(){ echo -en "\033[27m";} MENU_ALTO() { CoLORA T_PUT 1 2 echo -e " PACCHETTI DA AGGIORNARE " DeCOLORA for each in $(seq 1 ${#LISTA_MENU[*]}) do echo -e "" done } i=0 echo -en "\033c" NULL=/dev/null MENU_SOTTO() { CoLORA;T_PUT $FONDO_MENU 2 printf " Su/Giù = Per Muoversi - Invio = Seleziona " DeCOLORA } TASTI_SUGIU() { read -s -n3 TASTO 2>/dev/null >&2 if [[ $TASTO = $ESCHEIP[A ]]; then echo SU fi if [[ $TASTO = $ESCHEIP[B ]]; then echo GIU fi } POSIZIONE() { if [[ $cur = SU ]]; then ((i--)) fi if [[ $cur = GIU ]]; then ((i++)) fi if [[ i -lt 0 ]]; then i=$SEL_PAK fi if [[ i -gt $SEL_PAK ]];then i=0 fi } ADD_LISTA() { LTIPUT=$(($1+3)); T_PUT $LTIPUT 5; echo -en ${LISTA_MENU[$1]} } AGG_MENU() { PRIMADI=$((i+1)); DOPODI=$((i-1)) if [[ $DOPODI -lt 0 ]]; then DOPODI=$SEL_PAK fi if [[ $PRIMADI -gt $SEL_PAK ]]; then PRIMADI=0 fi if [[ $j -lt $i ]]; then DeCOLORA fi if [[ $PRIMADI -eq 0 ]] || [[ $DOPODI -eq $SEL_PAK ]]; then DeCOLORA ADD_LISTA $DOPODI ADD_LISTA $PRIMADI fi j=$i DeCOLORA ADD_LISTA $DOPODI ADD_LISTA $PRIMADI } MENU() { for ((a=0; a <= ${#PACCHETTI_PKG[*]}; a++)) do LTIPUT=$(($a+3)); T_PUT $LTIPUT 5; ADDLISTA[$a]=$(echo -en ${LISTA_MENU[$a]}) echo ${ADDLISTA[$a]} done } AVVIO_M() { echo -en "\033c" MENU_ALTO MENU_SOTTO MENU } SCAMBIA() { AGG_MENU CoLORA ADD_LISTA "$S" cur=`TASTI_SUGIU` } TORNA_M() { CoLORA echo -en "\nInvio = Menu " $b read AVVIO_M }; AVVIO_M while [[ "$O" != " " ]]; do if [[ "$i" ]]; then S="$i" SCAMBIA if [[ $cur = "" ]]; then if [[ ${LISTA_MENU[$i]} = EXIT ]]; then echo -en "\033c" exit 0 else echo -en "\033c" echo -en "$(pacman -Qi ${PACCHETTI_PKG[$i]})\n\n\n" TORNA_M fi fi fi POSIZIONE done
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.
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 :)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:
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...la sigla alfanumerica di solito è una parte dell'hash della revisione git
allora rimando l'update sul portatile :31 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.
Cioè segliere ''questo e quello'' per creare una lista su cui operare? Mica l' avevo capito :P :asd: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:
non pensavo ai pkgbuild, ma al tar.gz: lo trovo facilmente online.@rebellion da quanto ricordo era la scelta più comune, però non posso certo garantirlo per tutti i PKGBUILD.
#!/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
perfetto, domani aggiorno il pc e ti dico :love:@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: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.Codice:#!/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
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.@« 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.
#!/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
@e_ale92 nel controllo hash avevo fatto degli errori (array trattato come variabile e mancava un'operazione logica), questo lo script definitivo:c'ho messo anche una piccola miglioria nel controllo iniziale, almeno vedi quanto manca alla fine dell'operazione.Codice:#!/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