Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

The list of uninstalled packages appearing in my aptitude is massive, but is full of packages that I'm very sure I will never ever install. E.g. my laptop is using intel graphics, so it doesn't make sense to install xserver-xorg-video-nouveau. Therefore I want to hide it forever. This is important while listing using !~i!~v, as it shows all packages available for installation (I still need to know the filter for packages with dependencies marked UNAVAILABLE), so if I can hide them, it's easier to find packages that I haven't tried out.

How do I make it so, if possible, for the whole apt database to ignore the uninteresting packages?

share|improve this question
    
Sorry, I misinterpreted your question. I've deleted my answer. –  camh Jun 7 '11 at 7:36
add comment

2 Answers

#!/bin/sh
# apt-filter
# Shell script for filtering the apt packages list. Useful if you don't want to
# see too many packages in your synaptic/aptitude. Improves startup time of
# both, at the expense of time taken for filtering the updates.
# © 2011 Ahmad Syukri
listpath=/var/lib/apt/lists
skiplist=/etc/apt/skiplist  # This is user defined list of package to skip. Put yours there
skiplist_prev=/var/cache/apt/skiplist
statustmp=/tmp/apt-update.1

cd $listpath
if [ ! -e orig ]
then
  #first time running. create the required folder
  mkdir -p orig
  mv *_dists_* orig
  skiplist_changed=1
else
  #compare current skiplist with  last time's
  skiplist_changed=$(diff -q $skiplist $skiplist_prev)
  #delete prev skiplist, in case update fails, then it will be forced to refilter  
  [ -e $skiplist_prev ] && rm $skiplist_prev
fi
#check for new package lists. Save the output to list, with progress visible.
apt-get update -o Dir::State::Lists=$listpath/orig | tee $statustmp

cd orig
cp *InRelease ..
if [ ! $skiplist_changed ]
then
  #skip processing package lists with no updates
  #apt-get update displays "Get" for each repository that has updated
  pkgs=$(grep Get $statustmp | awk '{\
  if (/Packages/ && !/Diff/){\
    sub(/(ht|f)tp:\/*/,"",$2);\
    sub(/\//,"_",$3);\
    print $2"_debian_dists_"$3"_binary-"$4"_Packages"\
  }\
  }')
else
  #skiplist changed, must reprocess all
  pkgs=$(ls *Packages 2>/dev/null)
fi
#now let the fun begin!
for pkglist in $pkgs
do
  #there is chance the list failed to download, check if it exists
  if [ -e $pkglist ]
  then
    echo Processing $pkglist...
    awk '{\
      skiplist = "'$skiplist'";\
      if (/^Package/){\
        skip = 0;\
        while (!skip && (getline pkg < skiplist) > 0)\
          skip=(pkg==$2);\
          close(skiplist);\
        };\
      if (!skip) print $0\
      }' $pkglist > ../$pkglist
  fi
done
#finally, save state of skiplist for future comparison
cp $skiplist $skiplist_prev

Just script it!

Caveat emptor:

  1. It puts existing lists in another folder, while the filtered ones take their place. This means if updated via conventional means, the filtered lists will be destroyed, and filter script must be run again.
  2. The filter isn't optimized, process may take long time.
  3. Smaller list should mean faster synaptic/aptitude startup, though I have no guarantee on that.
  4. May result in many non-installable packages which still are on the list. If you know how to filter them, please answer on my other question!

    Outcome

The result? I no longer see emacs and its minions, no more windowmaker. Talk about peace on earth!

share|improve this answer
add comment

I'm sure there's now way, unless you create your own APT repository. There's a bunch of tools for that, my favorite being reprepro. Once you got it setup, removing a single package from the repository is as easy as:

reprepro --basedir /path/to/.custom_repo remove custom_repo_name unwanted_package

It removes both from the index and the filesystem. After that, you'll need to update your APT list of course, apt-get update.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.