Stai usando un browser non aggiornato. Potresti non visualizzare correttamente questo o altri siti web. Dovreste aggiornare o usare un browser alternativo.
#!/bin/bash
#aur_update.sh v.2.0
#script di aggiornamento pacchetti installati da AUR, by rebellion
#preferibilmente da lanciare tramite terminale per visualizzare messaggi di dialogo con lo script
controllo_dipendenze () {
dipendenze=$(pacman -Qi $package_name | grep "Dipenda da") ; dipendenze=${dipendenze:28} ; dipendenze=${dipendenze// / }
numero_dipendenze=$(($(grep -o " " <<<"$dipendenze" | wc -l)+1))
for ((i=1;i<=$numero_dipendenze;i++)) ; do dip=$(echo $dipendenze | awk -v x=$i '{print$x}') ; 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
echo ; read -s -p "premi invio per continuare..."
}
if wget -q --tries=10 --timeout=20 --spider http://google.com ; then
package_path="1"
while [ "$package_path" != "" ] ; do
dir=$(find /home/$USER -type d -name 'AUR')
package_path=$(zenity --file-selection --file-filter="*.tar.gz" --filename=$dir/ --title="Seleziona pacchetto.tar.gz AUR da aggiornare" 2>/dev/null)
if [ "$package_path" != "" ] ; then
package_name_tar=${package_path##*/}
lungh_package_name_tar=$((${#package_name_tar}+1))
package_dir=${package_path:0: -$lungh_package_name_tar}
package_name=${package_name_tar:0: -7}
package_dir_del=$(find /home/$USER -type d -name "$package_name") ; package_dir_del=$(echo $package_dir_del | awk '{print$1}')
package_path_old=$package_path".old"
package_dir_del_old=$package_dir_del"_old"
check_package=$(pacman -Q | grep $package_name)
if [ "$check_package" = "" ] ; then
dialog --title "pacchetto $package_name" --backtitle "Aggiornamento AUR" --msgbox "Aggiornamento fallito: pacchetto NON installato!" 7 60 ; clear
else
echo "Verifica versione..."
versione_new=$(curl -s "https://aur.archlinux.org/rpc.php?v=5&type=info&arg=$package_name" | grep "Version") ; versione_new=${versione_new//,/ } ; versione_new=$(echo $versione_new | awk '{print$8}') ; versione_new=${versione_new##*:} ; versione_new=${versione_new:1} ; versione_new=${versione_new:0: -1}
versione_old=$(pacman -Qi $package_name | grep "Versione" | awk '{print$3}')
if [ "$versione_new" != "$versione_old" ] ; then
echo -e "Versione installata: $versione_old\nVersione da installare: $versione_new"
echo ; echo -n "premi invio per continuare..." && read -s
echo -e "\rControllo 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
echo -n "Controllo connessione internet..."
if wget -q --tries=10 --timeout=20 --spider http://google.com ; then
echo "Connessione ok"
[[ -d "$package_dir_del" ]] && mv $package_dir_del $package_dir_del_old
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_path -C $package_dir
cd $package_dir_del
if makepkg -s ; then
echo "Disinstallazione $package_name" ; sudo pacman -R $package_name
echo "Installazione $package_name scaricato" ; sudo pacman -U *.pkg.tar.xz
rm $package_path_old
echo "Rimozione cartella $package_dir_del_old di backup..."
[[ -d "$package_dir_del_old" ]] && sudo rm -r $package_dir_del_old
dialog --title "pacchetto $package_name" --backtitle "Aggiornamento AUR" --msgbox "Aggiornamento eseguito!" 7 60 ; clear
else
echo "Rimozione cartella $package_dir_del (cartella scompattata $package_name_tar scaricato)..."
sudo rm -r $package_dir_del
[[ -d "$package_dir_del_old" ]] && mv $package_dir_del_old $package_dir_del
rm $package_path && 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
fi
else
[[ -d "$package_dir_del_old" ]] && mv $package_dir_del_old $package_dir_del
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
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
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
fi
else
clear
fi
else
echo -e "$package_name è già alla versione più recente!\npremi invio per continuare..." ; read ; clear
fi
fi
fi
done
else dialog --title "Controllo connessione internet" --backtitle "Aggiornamento AUR" --msgbox "Sembra che manchi la connessione, impossibile proseguire." 7 60
fi
exit 0
stavo pensando di far funzionare lo script in modo che cercasse in modo automatico i pacchetti AUR da aggiornare (magari con la duplice funzione: avvio programmato e avvio manuale con icona in appindicator) ma i problemi sono 2:
1. l'unico comando che lista i pacchetti 'foreign' installati è 'pacman -Qqm' però non mi restituisce univocamente i pacchetti installati da AUR
2. a volte capita che un pacchetto tar.gz scaricato da AUR abbia un numero di versione che poi non corrisponda al numero di versione che effettivamente installa e quindi tutte le volte scarica e reinstalla la stessa versione vecchia (es. il pacchetto 'grub2-theme-vimix-git'; prova a scaricarlo e scompattarlo e confronta il numero di versione presente in PKGBUILD con il numero di versione presente nel nome della cartella dell'archivio .any.pkg.tar.gz che è poi la versione che installa).
#!/bin/bash
#aur_update.sh v.2.0
#script di aggiornamento pacchetti installati da AUR, by rebellion
#preferibilmente da lanciare tramite terminale per visualizzare messaggi di dialogo con lo script
controllo_dipendenze () {
dipendenze=$(pacman -Qi $package_name | grep "Dipenda da") ; dipendenze=${dipendenze:28} ; dipendenze=${dipendenze// / }
numero_dipendenze=$(($(grep -o " " <<<"$dipendenze" | wc -l)+1))
for ((i=1;i<=$numero_dipendenze;i++)) ; do dip=$(echo $dipendenze | awk -v x=$i '{print$x}') ; 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
echo ; read -s -p "premi invio per continuare..."
}
if wget -q --tries=10 --timeout=20 --spider http://google.com ; then
package_path="1"
while [ "$package_path" != "" ] ; do
dir=$(find /home/$USER -type d -name 'AUR')
package_path=$(zenity --file-selection --file-filter="*.tar.gz" --filename=$dir/ --title="Seleziona pacchetto.tar.gz AUR da aggiornare" 2>/dev/null)
if [ "$package_path" != "" ] ; then
package_name_tar=${package_path##*/}
lungh_package_name_tar=$((${#package_name_tar}+1))
package_dir=${package_path:0: -$lungh_package_name_tar}
package_name=${package_name_tar:0: -7}
package_dir_del=$(find /home/$USER -type d -name "$package_name") ; package_dir_del=$(echo $package_dir_del | awk '{print$1}')
package_path_old=$package_path".old"
package_dir_del_old=$package_dir_del"_old"
check_package=$(pacman -Q | grep $package_name)
if [ "$check_package" = "" ] ; then
dialog --title "pacchetto $package_name" --backtitle "Aggiornamento AUR" --msgbox "Aggiornamento fallito: pacchetto NON installato!" 7 60 ; clear
else
echo "Verifica versione..."
versione_new=$(curl -s "https://aur.archlinux.org/rpc.php?v=5&type=info&arg=$package_name" | grep "Version") ; versione_new=${versione_new//,/ } ; versione_new=$(echo $versione_new | awk '{print$8}') ; versione_new=${versione_new##*:} ; versione_new=${versione_new:1} ; versione_new=${versione_new:0: -1}
versione_old=$(pacman -Qi $package_name | grep "Versione" | awk '{print$3}')
if [ "$versione_new" != "$versione_old" ] ; then
echo -e "Versione installata: $versione_old\nVersione da installare: $versione_new"
echo ; echo -n "premi invio per continuare..." && read -s
echo -e "\rControllo 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
echo -n "Controllo connessione internet..."
if wget -q --tries=10 --timeout=20 --spider http://google.com ; then
echo "Connessione ok"
[[ -d "$package_dir_del" ]] && mv $package_dir_del $package_dir_del_old
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_path -C $package_dir
cd $package_dir_del
if makepkg -s ; then
echo "Disinstallazione $package_name" ; sudo pacman -R $package_name
echo "Installazione $package_name scaricato" ; sudo pacman -U *.pkg.tar.xz
rm $package_path_old
echo "Rimozione cartella $package_dir_del_old di backup..."
[[ -d "$package_dir_del_old" ]] && sudo rm -r $package_dir_del_old
dialog --title "pacchetto $package_name" --backtitle "Aggiornamento AUR" --msgbox "Aggiornamento eseguito!" 7 60 ; clear
else
echo "Rimozione cartella $package_dir_del (cartella scompattata $package_name_tar scaricato)..."
sudo rm -r $package_dir_del
[[ -d "$package_dir_del_old" ]] && mv $package_dir_del_old $package_dir_del
rm $package_path && 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
fi
else
[[ -d "$package_dir_del_old" ]] && mv $package_dir_del_old $package_dir_del
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
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
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
fi
else
clear
fi
else
echo -e "$package_name è già alla versione più recente!\npremi invio per continuare..." ; read ; clear
fi
fi
fi
done
else dialog --title "Controllo connessione internet" --backtitle "Aggiornamento AUR" --msgbox "Sembra che manchi la connessione, impossibile proseguire." 7 60
fi
exit 0
stavo pensando di far funzionare lo script in modo che cercasse in modo automatico i pacchetti AUR da aggiornare (magari con la duplice funzione: avvio programmato e avvio manuale con icona in appindicator) ma i problemi sono 2:
1. l'unico comando che lista i pacchetti 'foreign' installati è 'pacman -Qqm' però non mi restituisce univocamente i pacchetti installati da AUR
2. a volte capita che un pacchetto tar.gz scaricato da AUR abbia un numero di versione che poi non corrisponda al numero di versione che effettivamente installa e quindi tutte le volte scarica e reinstalla la stessa versione vecchia (es. il pacchetto 'grub2-theme-vimix-git'; prova a scaricarlo e scompattarlo e confronta il numero di versione presente in PKGBUILD con il numero di versione presente nel nome della cartella dell'archivio .any.pkg.tar.gz che è poi la versione che installa).
cmq ottimo lavoro! però mi spieghi bene come funziona? l'ho eseguito e mi dice permesso negato ad alcune cartelle di ~/.cache/pacman (con sudo invece dice che non trova /home/root e arresta), proseguo ma poi si ferma dicendo che non ha trovato il pkgbuild (o qualcosa del genere)... forse sbaglio io qualcosa.
per quanto riguarda la ricerca non sarebbe male, però a quel punto sei sempre più vicino ad una bozza di wrapper... e forse continuare lo sviluppo di pacaur sarebbe meno dispendioso (es.)
per la ricerca da aur, invece, prova con pacman -Qm... dovrebbe listare solo i pacchetti aur. pacman -Qm | wc -l invece ti conta quanti pacchetti aur hai installati.
2. colpa del .ini che molti non aggiornano. non saprei come risolvere
sono d'accordo ma premere troppe volte la barra spaziatrice è un inutile spreco di energie..:D
però mi spieghi bene come funziona? l'ho eseguito e mi dice permesso negato ad alcune cartelle di ~/.cache/pacman (con sudo invece dice che non trova /home/root e arresta), proseguo ma poi si ferma dicendo che non ha trovato il pkgbuild (o qualcosa del genere)... forse sbaglio io qualcosa.
quando installi da aur probabilmente adotti un sistema diverso dal mio (scarico il tar.gz nella cartella AUR -nella home/$USER- dove scompatto l'archivio, entro poi nella cartella scompattata e makepkg e pacman -U; quindi lo script lavora in cartelle senza problemi di permessi).
per quanto riguarda la ricerca non sarebbe male, però a quel punto sei sempre più vicino ad una bozza di wrapper... e forse continuare lo sviluppo di pacaur sarebbe meno dispendioso (es.)
per la ricerca da aur, invece, prova con pacman -Qm... dovrebbe listare solo i pacchetti aur. pacman -Qm | wc -l invece ti conta quanti pacchetti aur hai installati.
ho dei pacchetti che sono stati tolti dal repository community quindi vengono listati in -Qm (o -Qqm) ma che non ho installato tramite AUR, dove ci sono con nomi diversi.
2. colpa del .ini che molti non aggiornano. non saprei come risolvere
sono d'accordo ma premere troppe volte la barra spaziatrice è un inutile spreco di energie..:D
quando installi da aur probabilmente adotti un sistema diverso dal mio (scarico il tar.gz nella cartella AUR -nella home/$USER- dove scompatto l'archivio, entro poi nella cartella scompattata e makepkg e pacman -U; quindi lo script lavora in cartelle senza problemi di permessi).
ormai è questione di orgoglio.
ho dei pacchetti che sono stati tolti dal repository community quindi vengono listati in -Qm (o -Qqm) ma che non ho installato tramite AUR, dove ci sono con nomi diversi.
non credo ci sia soluzione, dovrebbe intervenire il maintainer?:nono:
manco poco ruzzolavo giù dalle scale, era troppo bello un funssiona! il problema è che ogni volta che controllo la versione su aur mi restituisce sempre il valore sbagliato: deve farlo er mainteineer, sto mariuolo gabbamondo.
manco poco ruzzolavo giù dalle scale, era troppo bello un funssiona! il problema è che ogni volta che controllo la versione su aur mi restituisce sempre il valore sbagliato: deve farlo er mainteineer, sto mariuolo gabbamondo.
eh sì certo. se cerchi su AUR è normale ti trovi la versione vecchia che deve aggiornare il maintainer.
la modifica in locale ti serve solo se vuoi fare un update sulla tua installazione, ma aggiornare anche il build number.
Non vorrei dire ma... guardando le dipendenze di pacaur e pacaur-git, prima diventi inutilizzabile ne passerà del tempo.
A ''me mi'' piaceva Slack. :rolleyes: Se Arch per un qualche motivo dovesse essere abbandonata, tornerei a Slack.
...'sto Firefox ''quantum non me piace''. :doh: