the other night i accidentally deleted the debs i normally keep in the /var/cache/apt/archives directory and while i do keep a backup of them in another directory it is along with all the previous versions too, so it isn't as easy as just copying them.
instead i have to figure out which is the installed version (because that is the one i am most interested in having in there in case i do have to do a reinstall). so i started playing with my favorite scripting language (no, not perl, i've just never been able to get into perl - i guess i'm stuck in my ways :) ). so here is round 1 of the script (which gets 90% of the packages back for me from my backup archive at /myarchive/debian/jessie). oops, i see one thing i should do for the next version already (make that archive name a variable :) ). ===== #!/bin/sh # # pkglist=`dpkg -l | egrep '^ii ' | cut --delimiter=' ' -f3,3 | cut --delimiter=':' -f1,1` versionlist=`dpkg -l | egrep '^ii ' | sed -e 's/ */ /g' | cut -d ' ' -f3,3` for pkgname in $pkglist; do version=`echo $versionlist | cut -d ' ' -f1,1` versionlist=`echo $versionlist | cut -d ' ' -f2-` debname=`apt-cache show $pkgname=$version | egrep '^Filename: ' | sed -e 's/^Filename: //' | awk --field-separator='/' -e '{print \$NF}'` if test -f "/myarchive/debian/jessie/$debname" ; then echo "/myarchive/debian/jessie/$debname /var/cache/apt/archives" > /dev/null cp -a "/myarchive/debian/jessie/$debname" /var/cache/apt/archives else echo "$debname missing?" fi done chown root /var/cache/apt/archives/* chgrp root /var/cache/apt/archives/* sync ===== looks like the problem for all but a few remaining debs is the use of a ":" in the name, but perhaps it is some other character too (for just a few cases). to explore it in more detail in one example look at what apt-cache show reports for gawk, what dpkg -l says and what the actual filename in the directory looks like: ----- apt-cache show Package: gawk Version: 1:4.1.1+dfsg-1 ... Filename: pool/main/g/gawk/gawk_4.1.1+dfsg-1_i386.deb ----- ----- dpkg -l | grep gawk ii gawk 1:4.1.1+dfsg-1 i386 GNU awk, a pattern scanning and processing language ----- ----- ls -l gawk* -rwxr-xr-x 1 me me 932638 Mar 16 2013 gawk_1%3a4.0.1+dfsg-2.1_i386.deb -rwxr-xr-x 1 me me 427810 Apr 8 07:44 gawk_1%3a4.0.1+dfsg-3_i386.deb -rwxr-xr-x 1 me me 495938 Apr 21 08:25 gawk_1%3a4.1.1+dfsg-1_i386.deb ----- how to reconcile? my LANG environment is set to: LANG=en_US.utf8 fixing this would get me another 256-260 debs (of 2377 that i have installed) (with 4 more i'm not sure yet what's going on there)... those last 4 give me a completely missing name for some reason i've not dug into yet. 90% of an answer with a few minutes of tinkering with a script is better than doing it manually for sure! happy hacking and thanks for any help :) songbird -- To UNSUBSCRIBE, email to debian-user-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: https://lists.debian.org/3sim9b-cv2....@id-306963.user.uni-berlin.de