Como faço para esconder pacotes de aparecer no sistema apt?

5

A lista de pacotes desinstalados que aparecem no meu aptitude é enorme, mas é cheia de pacotes que eu tenho certeza que nunca irei instalar. Por exemplo. meu laptop está usando gráficos da Intel, por isso não faz sentido instalar xserver-xorg-video-nouveau . Portanto, quero escondê-lo para sempre. Isso é importante durante a listagem usando !~i!~v , pois mostra todos os pacotes disponíveis para instalação (ainda preciso conhecer o filtro para pacotes com dependências marcadas como UNAVAILABLE), portanto, se eu puder ocultá-los, será mais fácil encontrar pacotes que não possuo. tentei.

Como faço para que, se possível, todo o banco de dados do apt ignore os pacotes desinteressantes?

    
por syockit 07.06.2011 / 01:04

2 respostas

2

#!/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

Apenas faça um script!

Emptor de advertência:

  1. Coloca listas existentes em outra pasta, enquanto as filtradas ocupam o lugar delas. Isso significa que, se for atualizado por meios convencionais, as listas filtradas serão destruídas e o script de filtro deverá ser executado novamente.
  2. O filtro não está otimizado, o processo pode demorar muito tempo.
  3. A lista menor deve significar uma inicialização mais rápida do synaptic / aptitude, embora eu não tenha garantia disso.
  4. Pode resultar em muitos pacotes não instaláveis que ainda estão na lista. Se você souber como filtrá-los, por favor responda na minha outra pergunta !

    Resultado

O resultado? Eu não vejo mais emacs e seus asseclas, não mais windowmaker. Fale sobre a paz na terra!

    
por 08.06.2011 / 21:11
1

Tenho certeza de que agora existe um jeito, a menos que você crie seu próprio repositório APT. Há um monte de ferramentas para isso, meu favorito é reprepro . Depois de configurá-lo, remover um único pacote do repositório é tão fácil quanto:

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

Remove tanto o índice como o sistema de arquivos. Depois disso, você precisará atualizar sua lista de APT, é claro, apt-get update .

    
por 07.06.2011 / 13:48

Tags