PPAs are really a great thing in Ubuntu: they allow you to have quite recent programs without upgrading all your system; most Ubuntu users use them extensively.
They have just one problematic side — the havoc that can happen on an upgrade. You see, when you upgrade your system, PPAs are disabled, but the program they have installed are not downgraded automatically. That means that the upgrade process can have to deal with some program which is different from the expected one, causing problems sometime. So I normally when I upgrade my system I will purge all the PPAs and then I reinstall them after the upgrade (if they are available).
To do that rapidly I have a couple of scripts that are quite useful at least to me. The first one is this one:
#! /bin/bash # # listppa Script to get all the PPA installed on a system ready to share for reininstall for APT in `find /etc/apt/ -name \*.list`; do grep -o "^deb http://ppa.launchpad.net/[\._a-z0-9\-]\+/[\._a-z0-9\-]\+" $APT | while read ENTRY ; do USER=`echo $ENTRY | cut -d/ -f4` PPA=`echo $ENTRY | cut -d/ -f5` echo sudo apt-add-repository ppa:$USER/$PPA done done
save it as, for example, list_ppa
and upon calling it, you’ll have:
[romano:~/software/scripts] % ./list_ppa.sh sudo apt-add-repository ppa:tualatrix/ppa sudo apt-add-repository ppa:fransschreuder1/qucs [...]
Even more useful is this one, call it list_ppa_packages
:
#! /bin/bash # list_all_packages_repos() { apt-cache policy $(dpkg -l | awk 'NR >= 6 { print $2 }') | awk '/^[^ ]/ { split($1, a, ":"); pkg = a[1] } nextline == 1 { nextline = 0; printf("%-40s %-50s %s\n", pkg, $2, $3) } /\*\*\*/ { nextline = 1 }' } list_packages_of() { #1 is the tmpfile, $2 is the ppa regexp grep $2 $1 | awk '{print "---> ", $1}' } # cache all packages files now tmpfile=/tmp/list_pcks.$$.txt list_all_packages_repos > $tmpfile # listppa Script to get all the PPA installed on a system ready to share for reininstall for APT in `find /etc/apt/ -name *.list`; do grep -o "^deb http://ppa.launchpad.net/[a-z0-9\-]\+/[a-z0-9\-]\+" $APT | while read ENTRY ; do USER=`echo $ENTRY | cut -d/ -f4` PPA=`echo $ENTRY | cut -d/ -f5` echo PPA:$USER/$PPA list_packages_of $tmpfile "$USER/$PPA" done done rm $tmpfile
This will give an output like that (it’s slow — be patient):
[romano:~/software/scripts] % ./list_ppa_packages.sh PPA:tualatrix/ppa ---> ubuntu-tweak PPA:fransschreuder1/qucs ---> qucs PPA:nilarimogard/webupd8 ---> ap-hotspot ---> libguess1 ---> libmowgli-2-0 [...]
…and with the output of these two command is really a breeze to reinstall your PPAs after an upgrade.
Leave a Reply