【Linux】【apt】apt-get install 時の依存関係エラー【トラブル】

本ページの概要
 

  • apt-get install でどのパッケージをインストールしようとしても依存関係のエラーになる問題の解決までのメモ。
  • 目次に apt-get あるいは apt をはじめとした apt システムに関するエラーを書き留めている
  • 余談として、apt-get ではなく apt の使用が推奨されている模様
    • 理由は、コマンドの使用方法に統一性を持たせるためらしい

 

 

OS サポート期限切れによる sources.list 内のリポジトリパス不一致

発生環境・状況

  • 対象 OS は Ubuntu11.04 (x86) と古い。(2017/08時点)
# date
2017814日 月曜日 13:11:50 JST
# cat /etc/issue
Ubuntu 11.04 \n \l
# uname -a
Linux XXXX-virtual-machine 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:50 UTC 2011 i686 i686 i386 GNU/Linux

 

エラー原因と対策方法

原因
  • 使用していた OS が古く /etc/apt/sources.list 内の URL を変える必要があった
対策方法

以下 1、2 を行う

  • 1. /etc/apt/sources.list 内の URL を「old-releases.ubuntu.com」に変更する
  • 2. apt-get update を実行する


 
以下は解決に至るまでの記録
 

解決までの記録

sar コマンドを導入したくて、sysstat のインストールを試みたが以下の依存関係エラー発生した。

# apt-get install sysstat
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の問題を解決するために 'apt-get -f install' を実行する必要があるかもしれません:
以下のパッケージには満たせない依存関係があります:
 gdb-multiarch : 依存: libc6 (>= 2.15) しかし、2.13-0ubuntu13.2 はインストールされようとしています
                 依存: libtinfo5 しかし、インストールすることができません
E: 未解決の依存関係です。'apt-get -f install' を実行してみてください (または解法を明示してください)

 
解決しないと思うがお決まりの apt-get update を行い、再度、apt-get install をする。

# apt-get update
()

# apt-get install sysstat
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の問題を解決するために 'apt-get -f install' を実行する必要があるかもしれません:
以下のパッケージには満たせない依存関係があります:
 gdb-multiarch : 依存: libc6 (>= 2.15) しかし、2.13-0ubuntu13.2 はインストールされようとしています
                 依存: libtinfo5 しかし、インストールすることができません
E: 未解決の依存関係です。'apt-get -f install' を実行してみてください (または解法を明示してください)

 
依存関係に関係するライブラリの削除を行った後に、再度、apt-get install を試みる。
ただし、libc6 は重要で消すとマズイので削除は見送り、xv6 デバッグはもうしないのでgdb-multiarch と 何か良くわからないがlibtinfo5 の削除 apt-get remove を試みる。

# apt-get -y remove gdb-multiarch libtinfo5
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
'libtinfo5' のような仮想パッケージは削除できません
以下のパッケージは「削除」されます:
  gdb-multiarch
アップグレード: 0 個、新規インストール: 0 個、削除: 1 個、保留: 322 個。
1 個のパッケージが完全にインストールまたは削除されていません。
この操作後に 7,395 kB のディスク容量が解放されます。
(データベースを読み込んでいます ... 現在 211892 個のファイルとディレクトリがインストールされています。)
gdb-multiarch を削除しています ...
man-db のトリガを処理しています ...
# apt-get install sysstat
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
提案パッケージ:
  isag
以下のパッケージが新たにインストールされます:
  sysstat
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 322 個。
264 kB のアーカイブを取得する必要があります。
この操作後に追加で 836 kB のディスク容量が消費されます。
警告: 以下のパッケージは認証されていません!
  sysstat
検証なしにこれらのパッケージをインストールしますか [y/N]?
エラー http://jp.archive.ubuntu.com/ubuntu/ natty/main sysstat i386 9.1.7-2ubuntu1
404  Not Found
http://jp.archive.ubuntu.com/ubuntu/pool/main/s/sysstat/sysstat_9.1.7-2ubuntu1_i386.deb の取得に失敗しました  404  Not Found
E: いくつかのアーカイブが取得できません。apt-get update を実行するか --fix-missing オプションを付けて試してみてください。

 
上記ログより、下記2つの URL が見つからないとの指摘かと思われる。

http://jp.archive.ubuntu.com/ubuntu/natty/main sysstat i386 9.1.7-2ubuntu1
http://jp.archive.ubuntu.com/ubuntu/pool/main/s/sysstat/sysstat_9.1.7-2ubuntu1_i386.deb

 
Webを検索すると、こちらのページが見つかった。
どうやら、Ubuntu のバージョンが古くなりパッケージ置き場の URL を変える必要があった模様。
security.ubuntu.comold-releases.ubuntu.com
jp.archive.ubuntu.comold-releases.ubuntu.com

# cp -p /etc/apt/sources.list /etc/apt/sources.list.bak
# sed -i 's%security.ubuntu.com%old-releases.ubuntu.com%g'   /etc/apt/sources.list
# sed -i 's%jp.archive.ubuntu.com%old-releases.ubuntu.com%g' /etc/apt/sources.list

 
再再度、apt-get install sysstat で導入に成功した。

# apt-get install sysstat
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
提案パッケージ:
  isag
以下のパッケージが新たにインストールされます:
  sysstat
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 322 個。
264 kB のアーカイブを取得する必要があります。
この操作後に追加で 836 kB のディスク容量が消費されます。
取得:1 http://old-releases.ubuntu.com/ubuntu/ natty/main sysstat i386 9.1.7-2ubuntu1 [264 kB]
264 kB を 3秒 で取得しました (76.9 kB/s)
パッケージを事前設定しています ...
未選択パッケージ sysstat を選択しています。
(データベースを読み込んでいます ... 現在 211890 個のファイルとディレクトリがインストールされています。)
(.../sysstat_9.1.7-2ubuntu1_i386.deb から) sysstat を展開しています...
man-db のトリガを処理しています ...
doc-base のトリガを処理しています ...
Processing 1 added doc-base file(s)...
Registering documents with scrollkeeper...
ureadahead のトリガを処理しています ...
ureadahead will be reprofiled on next reboot
sysstat (9.1.7-2ubuntu1) を設定しています ...

Creating config file /etc/default/sysstat with new version
update-alternatives: /usr/bin/sar (sar) を提供するために 自動モード で /usr/bin/sar.sysstat を使います。

 

sources.list 内のリポジトリパスを old-release に変えたが 404 エラーが起きる

発生環境・状況

  • Ubuntu 16.10 (2018/05上旬)
  • いわゆる old-release に変える対応をしたが、apt-get update をすると 404 (Not found) エラーが起きる
  • 当然、old-release に変えずに apt-get install vim などとしてもパッケージ見つからずとなる

 

エラー原因と対策方法

原因
  • 正確な原因不明だが、Ubuntu16.10 のサポートが切れた直後であり、old-release に変える時期が早かったのかも知れない

 

対策方法
  • /etc/apt/sources.list の URL は変えずにプロジェクト名のみをサポート期間中のものに変えた
  • 具体的には、以下のように yakkety (16.10) から artful (17.10) に変えた
    • このとき artful(17.10) はサポート期間であった
% sudo cp /etc/apt/sources.list /etc/apt/sources.lis.orig
% sudo sed -i 's/\<yakkety\>/artful/g' /etc/apt/sources.list
引用元