I finally got around to making/finishing a somewhat simple little script that compiles a list of all packages installed on the system, and cross-references it with the package list from your slackpkg-configured remote server, to show you which versions you have that are older/newer as well as what packages you have installed that are out-of-tree, which you need to do updates for on your own.
It also shows what official packages you do NOT have installed, for the heck of it.
Maybe/probably/possibly there's something else around that does the same basic thing, I don't know, but this is my version. Maybe someone else will find it helpful too. Here is:
Code:
#!/bin/sh
# Slackware 11 Out-Of-Tree Package-lister
# Filename: '/var/lib/slackpkg/list-out-of-tree.runme'
# Author: Sasha Alexandr / GrapefruiTgirl
# License: GPL (Use at own risk, do what you like with it)
# Version 1.01 Date: June 21 2009
# Tested on Slackware 11 w/slackpkg 2.60 and I have no idea
# if it will work as-is on any other Slackware releases.
#
# This script is intended to be located in /var/lib/slackpkg
# (obviously assuming 'slackpkg' installed and configured.)
# It provides a breakdown of Slackware packages that you
# have installed on your machine which are OUT-OF-TREE
# meaning they are not part of the official Slackware release
# and therefore you need to maintain/update them yourself.
# (I have a lot of those installed, which is why I wrote this.)
# This script also shows you a list of official Slackware
# packages on the remote server which are NOT installed on
# your machine (FYI), as well as indicating if your locally
# installed official packages are the same or a different
# version as the remote packages. It's not rocket science
# but it helps with keeping those extra things you install
# along the way, up to date.
#
#----------------------------------------------------------------
# If you want this script to update your slackpkg package-list
# when you execute it, be sure to make the accompanying tiny
# script ('list-out-of-tree.update' ) that goes with this one,
# and save it in the same directory; then uncomment the next line:
# echo "no" | list-out-of-tree.update
# Or just update slackpkg yourself before executing this.
# Here's what goes into the accompanying script (3 lines).
# Copy/paste the three lines from inside this unused function
# to a new file, and save it as 'list-out-of-tree.update'
three_line_file () {
#!/bin/sh
/sbin/slackpkg update
exit 0
}
#------------------------------------------------------------------
#
# Now execute this in a shell and wait a while. When it is done
# you will have a file called 'local.vs.remote.list' and a file
# called 'no.remote.version' for your reading pleasure.
#
# begin:
column=/usr/bin/column
rm -f ./final ./local.vs.remote.list ./no.remote.version 2>&1 >/dev/null
ls /var/log/packages > ./local.list
cat ./pkglist | grep "tgz" | gawk '{print $6}' | sed 's/.tgz//' > ./remote.list
local_list="`cat ./local.list`"
remote_list="`cat ./remote.list`"
butcher () {
return=`echo "$1" | cut -f1 -d . | gawk '{ gsub (/-.$/,"",$0) ; print }'`
}
echo -e " Status & Local Package Name%%Remote Status & Package Name\n\n" >> ./final
let counter=0
for local_item in `echo -e "$local_list"`; do
let counter++ ; unset is_on_remote version
butcher "$local_item"
short_local_item_name="$return"
for remote_item in `echo -e "$remote_list"`; do
butcher "$remote_item"
short_remote_item_name="$return"
if [ "$short_remote_item_name" = "$short_local_item_name" ]; then
[ "$local_item" = "$remote_item" ] && version='Same.' || version="$remote_item"
echo "$counter: Installed: $local_item%%$counter: Remote-version: $version" >> ./final
is_on_remote='1'
fi;
[ "$is_on_remote" ] && break;
done;
[ ! "$is_on_remote" ] && echo "$counter: Installed: $local_item%%$counter: Remote-version: NO REMOTE VERSION" >> ./final
done
let counter=0
echo -e "-Remote packages that are NOT installed locally (FYI)-" >> ./final
for remote_item in `echo -e "$remote_list"`; do
let counter++ ; unset is_installed
butcher "$remote_item"
short_remote_item_name="$return"
for local_item in `echo -e "$local_list"`; do
butcher "$local_item"
short_local_item_name="$return"
[ "$short_local_item_name" = "$short_remote_item_name" ] && is_installed='1'
[ "$is_installed" ] && break;
done;
[ ! "$is_installed" ] && echo "$counter: Not Installed locally:%%$counter: $remote_item" >> ./final
done;
$column -tx -s %% ./final > ./local.vs.remote.list
cat ./local.vs.remote.list | grep "NO REMOTE VERSION" > ./no.remote.version
rm -f ./final
exit 0
# EOF
Sample output:
Code:
43: Installed: cdrdao-1.2.1-i486-1 43: REMOTE-VERSION: Same.
44: Installed: cdrtools-2.01.01a23-i486-1 44: REMOTE-VERSION: cdrtools-2.01-i486-1
45: Installed: cg-2.0-jan2008-x86 45: REMOTE-VERSION: NO REMOTE VERSION
46: Installed: chkrootkit-0.47-i486-1 46: REMOTE-VERSION: NO REMOTE VERSION
47: Installed: clisp-2.39-i486-1 47: REMOTE-VERSION: Same.
48: Installed: cmake-2.6-i686-0 48: REMOTE-VERSION: NO REMOTE VERSION
49: Installed: coreutils-5.97-i486-1 49: REMOTE-VERSION: Same.
50: Installed: cpio-2.5-i486-3 50: REMOTE-VERSION: cpio-2.5-i386-1
51: Installed: cscope-15.5-i486-2 51: REMOTE-VERSION: Same.
52: Installed: ctl-1.4.1-i686-0 52: REMOTE-VERSION: NO REMOTE VERSION
53: Installed: cups-1.1.23-i486-5_slack11.0 53: REMOTE-VERSION: Same.
54: Installed: curl-7.15.5-i486-2_slack11.0 54: REMOTE-VERSION: Same.
55: Installed: cvs-1.11.22-i486-1 55: REMOTE-VERSION: Same.
56: Installed: cxxlibs-6.0.8-i486-3 56: REMOTE-VERSION: cxxlibs-6.0.3-i486-1
57: Installed: cyrus-sasl-2.1.23-i486-1_slack11.0 57: REMOTE-VERSION: Same.
58: Installed: db42-4.2.52-i486-3 58: REMOTE-VERSION: Same.
59: Installed: db44-4.4.20-i486-1 59: REMOTE-VERSION: Same.
60: Installed: dbus-1.1.20-i686-0 60: REMOTE-VERSION: NO REMOTE VERSION
61: Installed: dbus-glib-0.73-i686-0 61: REMOTE-VERSION: NO REMOTE VERSION
62: Installed: dcron-2.3.3-i486-6 62: REMOTE-VERSION: dcron-2.3.3-i486-5
63: Installed: dejavu-ttf-2.10-noarch-1 63: REMOTE-VERSION: Same.
64: Installed: desktop-file-utils-0.11-i486-1 64: REMOTE-VERSION: Same.
65: Installed: devs-2.3.1-noarch-25 65: REMOTE-VERSION: Same.
66: Installed: dhcp-3.1.2-i686-0 66: REMOTE-VERSION: dhcp-3.0.4-i486-2
67: Installed: dhcpcd-2.0.4-i486-2 67: REMOTE-VERSION: Same.
68: Installed: dialog-1.1_20070528-i486-1 68: REMOTE-VERSION: NO REMOTE VERSION
69: Installed: diffstat-1.43-i486-1 69: REMOTE-VERSION: Same.
70: Installed: diffutils-2.8.1-i486-3 70: REMOTE-VERSION: Same.
Sample output:
Code:
1: Installed: P7zip-4.57-i686-0 1: Remote-version: NO REMOTE VERSION
8: Installed: acpica-20080213-i686-1 8: Remote-version: NO REMOTE VERSION
35: Installed: boost-1.38.0-i686-0 35: Remote-version: NO REMOTE VERSION
45: Installed: cg-2.0-jan2008-x86 45: Remote-version: NO REMOTE VERSION
46: Installed: chkrootkit-0.47-i486-1 46: Remote-version: NO REMOTE VERSION
48: Installed: cmake-2.6-i686-0 48: Remote-version: NO REMOTE VERSION
52: Installed: ctl-1.4.1-i686-0 52: Remote-version: NO REMOTE VERSION
60: Installed: dbus-1.1.20-i686-0 60: Remote-version: NO REMOTE VERSION
61: Installed: dbus-glib-0.73-i686-0 61: Remote-version: NO REMOTE VERSION
68: Installed: dialog-1.1_20070528-i486-1 68: Remote-version: NO REMOTE VERSION
73: Installed: dmidecode-2.9-i486-1 73: Remote-version: NO REMOTE VERSION
95: Installed: flash-player-plugin-9.0.31.0-i386-1 95: Remote-version: NO REMOTE VERSION
Sasha
UPDATE: See 'reason for editing' below.