リポジトリにはまだ登録されていないパッケージを手動でdpkgを使ってアップデートする時の話。
個別にパッケージをダウンロードしたり、自分でパッケージを作成したりした場合、複数のdebパッケージが存在する場合があります。
例えば、aaa_1.1_amd64.deb というパッケージには、aaa-lib_1.1_amd64.deb とか、aaa-dev_1.1_amd64.deb とかが付属することがあります。この時、実際にインストールされているパッケージがaaa_1.0_amd64.debとaaa_1.0_amd64-lib.deb だった場合、アップデート時にaaa_1.1_amd64-dev.deb をインストールする必要は通常ありません。
パッケージが3つの場合、dpkg -l で個別にインストールされているかどうかを確認するのはそれ程手間ではありませんが、ファイルが多いと確認も一苦労です。
RedHat系のrpm では、-Fvh オプションでアップデートすれば、すでにインストール済みのパッケージのみアップデートすることができますが、dpkgだとできそうにありません。こんな時には、シェル一発で確認してみましょう。
例えば、上記を例に、カレントディレクトリに以下の三つのファイルがあるとします。
aaa_1.1_amd64.deb aaa-lib_1.1_amd64.deb aaa-dev_1.1_amd64.deb
この時、同名のパッケージがインストールされているかどうかを確認するには、こんな感じのコマンドを叩くだけです。
# for i in `ls *.deb`; do dpkg -l | grep ".. "`echo $i | cut -d "_" -f 1`" " ; done ii aaa 1.0 amd64 aaa ii aaa-lib 1.0 amd64 aaa libraries
これで、アップデートが必要なパッケージはわかりました。