apt で google の更新に失敗する + 「破損パッケージ」

Linux Mint 18.2 でパッケージのアップデートに失敗します。

署名照合中にエラーが発生しました。リポジトリは更新されず、過去のインデックスファイルが使われます。GPG エラー: http://dl.google.com/linux/chrome/deb stable Release: 
公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 6494C6D6997C215Ehttp://dl.google.com/linux/chrome/deb/dists/stable/Release.gpg 
の取得に失敗しました  公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 6494C6D6997C215Eいくつかのインデックスファイルのダウンロードに失敗しました。
これらは無視されるか、古いものが代わりに使われます。

これは例えばここなどにあるとおり、

$ wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -

で OK なようです。

しかしこれでシステムをアップデートしようとすると、

システム上に 1 個の破損パッケージがあります!

それを特定するために"破損"フィルタを使用してください。

というエラーがでます。「"破損"フィルタ」というのがよくわからないが、Synaptic の「カスタムフィルタ」の「破損」を適用すると vlc が壊れているようである。ここで「破損パッケージの修復」というのがあるので実行。すると「依存問題の修復に成功しました」とあるのでいいかなという感じ。で、「適用」を選択すると

E: /var/cache/apt/archives/vlc-bin_2.2.6-3~xenial1_amd64.deb: '/usr/bin/rvlc' を上書きしようとしています。これはパッケージ vlc-nox 2.2.2-5ubuntu0.16.04.3 にも存在します

というエラーが出て意味不明。

なので、もういちどコマンドライン

$ sudo apt-get -f install

をすると

.../vlc-bin_2.2.6-3~xenial1_amd64.deb を展開する準備をしています ...
vlc-bin (2.2.6-3~xenial1) を展開しています...
dpkg: アーカイブ /var/cache/apt/archives/vlc-bin_2.2.6-3~xenial1_amd64.deb の処理中にエラーが発生しました (--unpack):
 '/usr/bin/rvlc' を上書きしようとしています。これはパッケージ vlc-nox 2.2.2-5ubuntu0.16.04.3 にも存在します
dpkg-deb: エラー: サブプロセス ペースト がシグナル (Broken pipe) によって強制終了されました
処理中にエラーが発生しました:
 /var/cache/apt/archives/vlc-bin_2.2.6-3~xenial1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

でダメ。
 

$ sudo aptitude install vlc-bin

.../vlc-bin_2.2.6-3~xenial1_amd64.deb を展開する準備をしています ...
vlc-bin (2.2.6-3~xenial1) を展開しています...
dpkg: アーカイブ /var/cache/apt/archives/vlc-bin_2.2.6-3~xenial1_amd64.deb の処理中にエラーが発生しました (--unpack):
 '/usr/bin/rvlc' を上書きしようとしています。これはパッケージ vlc-nox 2.2.2-5ubuntu0.16.04.3 にも存在します
dpkg-deb: エラー: サブプロセス ペースト がシグナル (Broken pipe) によって強制終了されました
処理中にエラーが発生しました:
 /var/cache/apt/archives/vlc-bin_2.2.6-3~xenial1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
Failed to perform requested operation on package.  Trying to recover:
dpkg: 依存関係の問題により vlc の設定ができません:
 vlc は以下に依存 (depends) します: vlc-bin (= 2.2.6-3~xenial1) ...しかし:
  パッケージ vlc-bin はまだインストールされていません。

dpkg: パッケージ vlc の処理中にエラーが発生しました (--configure):
 依存関係の問題 - 設定を見送ります
処理中にエラーが発生しました:
 vlc

となってダメ。これで詰みました。もう少し情報が出てくるのを待つしかないみたい。

 

続き

再チャレンジ。

vlc-bin, vlc-nox あたりが問題源だとわかったので、次のコマンドを実行。

$ dpkg -s vlc-bin
Package: vlc-bin
Status: install ok not-installed
Priority: optional
Section: video
Architecture: amd64

$ dpkg -s vlc-nox
Package: vlc-nox
Status: deinstall ok installed
Priority: optional
Section: video
Installed-Size: 9266
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Source: vlc
Version: 2.2.2-5ubuntu0.16.04.3
Provides: mp3-decoder
Depends: liba52-0.7.4, ...

 
なるほど、vlc-nox を deinstall すればいいと。しかし deinstall って何だということで、$ man dpkg を実行。すると

 deinstall
              The package is selected for  deinstallation  (i.e.  we  want  to
              remove all files, except configuration files).

とある。コンフィグファイル以外は消せと。さらに見てみると

ACTIONS
       -r, --remove package...|-a|--pending
              Remove  an  installed  package.  This  removes everything except
              conffiles, which may avoid having to reconfigure the package  if
              it  is reinstalled later (conffiles are configuration files that
              are listed in the DEBIAN/conffiles  control  file).   If  -a  or
              --pending  is given instead of a package name, then all packages
              unpacked, but marked to be removed in file /var/lib/dpkg/status,
              are removed.

              Removing of a package consists of the following steps:

              1. Run prerm script

              2. Remove the installed files

              3. Run postrm script

どうやらこれのようだ。

なので

$ sudo dpkg -r vlc-nox
(データベースを読み込んでいます ... 現在 873604 個のファイルとディレクトリがインストールされています。)
vlc-nox (2.2.2-5ubuntu0.16.04.3) を削除しています ...
man-db (2.7.5-1) のトリガを処理しています ...

うまくいったっぽい。で、

$ sudo apt-get -f install

をしたら vlc-bin がインストールされた。これで OK!

あとは $ sudo apt-get upgrade でおしまい。


※参考
apt-getによる依存関係の解決方法