私のフォルダに表示される削除されたパッケージのリストはaptitude
膨大ですが、決してインストールしないパッケージでいっぱいです。たとえば、私のラップトップはIntelグラフィックを使用しているのでインストールされているので、xserver-xorg-video-nouveau
永遠に隠したいと思います。これはインストールに使用できるすべてのパッケージを表示するため、リストを使用するときに重要です!~i!~v
(UNAVAILABLEとマークされている依存関係を持つパッケージのフィルタを知る必要があります)。したがって、そのパッケージを隠すことができれば、見つけるのは簡単です。まだパッケージを試していません。
可能であれば、aptデータベース全体が興味深いパッケージを無視するようにするにはどうすればよいですか?
答え1
#!/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
スクリプトを書くだけです!
注意事項:
- 既存のリストを別のフォルダに配置し、フィルタリングされたリストがそのリストを置き換えます。これは、既存の方法で更新すると、フィルタリストが破損し、フィルタスクリプトを再実行する必要があることを意味します。
- フィルタが最適化されていないため、プロセスに時間がかかることがあります。
- リストが小さいほど、シナプス/能力の開始が速くなることを意味しますが、これを保証することはできません。
- これにより、削除可能な多くのパッケージがまだ一覧表示されます。フィルタリングする方法をご存知でしたら、私の他の質問に答えてください!
結果
結果?私はもはやemacsとその下手やwindowmakerを見ることができません。地球上の平和について話す!
答え2
独自のAPTリポジトリを作成しない限り、今は方法があると確信しています。これを達成するための多くのツールがありますが、私のお気に入りはレプリカ。設定が完了したら、リポジトリから個々のパッケージを削除するのは簡単です。
reprepro --basedir /path/to/.custom_repo remove custom_repo_name unwanted_package
インデックスとファイルシステムの両方が削除されます。その後、もちろんAPTリストを更新する必要がありますapt-get update
。