Ubuntu 16.04にて、少し前からapt-get
で新しいパッケージを入れようとすると「壊れた変更禁止パッケージがあります」エラーが出てインストールできない事象に悩まされていました。
$ sudo apt-get install libgfortran3 パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 インストールすることができないパッケージがありました。おそらく、あり得 ない状況を要求したか、(不安定版ディストリビューションを使用しているの であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移 動されていないことが考えられます。 以下の情報がこの問題を解決するために役立つかもしれません: 以下のパッケージには満たせない依存関係があります: libgfortran3 : 依存: gcc-5-base (= 5.3.1-14ubuntu2) しかし、5.4.0-6ubuntu1~16.04.4 はインストールされようとしています E: 問題を解決することができません。壊れた変更禁止パッケージがあります。
aptitude
を使ってこの問題への対応を試みました(参考:apt - E: Unable to correct problems, you have held broken packages - Ask Ubuntu)。以下にその方法について記します。自分でもこれが正しい方法なのかよくわかっていません。試す場合は自己責任でお願いします。
$ sudo aptitude install libgfortran3
とすると、以下のように、壊れたパッケージを修正するための改善案が表示されます。改善案を受け入れるならY
、他の改善案を探すならn
です。
以下の新規パッケージがインストールされます: libgfortran3{b} 0 個のパッケージを更新、 1 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。 260 k バイトのアーカイブを取得する必要があります。 展開後に 1,290 k バイトのディスク領域が新たに消費されます。 以下のパッケージには満たされていない依存関係があります: libgfortran3 : 依存: gcc-5-base (= 5.3.1-14ubuntu2) [5.4.0-6ubuntu1~16.04.4 が既にインストール済みです] 以下のアクションでこれらの依存関係の問題は解決されます: 以下のパッケージを現在のバージョンに一時固定する: 1) libgfortran3 [インストールされていません] この解決方法を受け入れますか? [Y/n/q/?]
私の場合、Y
としてもパッケージをインストールできなかったので、n
で次の改善案を探しました。その結果が以下です。
以下のアクションでこれらの依存関係の問題は解決されます: 以下のパッケージを削除する: 1) build-essential 2) g++ 3) g++-5 4) gcc 5) gcc-5 6) libasan2 7) libatomic1 8) libcilkrts5 9) libgcc-5-dev 10) libitm1 11) liblsan0 12) libmpx0 13) libstdc++-5-dev 14) libtsan0 15) libubsan0 以下のパッケージをインストールする: 16) tcc [0.9.27~git20151227.933c223-1 (xenial)] 以下のパッケージをダウングレードする: 17) cpp-5 [5.4.0-6ubuntu1~16.04.4 (now) -> 5.3.1-14ubuntu2 (xenial)] 18) gcc-5-base [5.4.0-6ubuntu1~16.04.4 (now) -> 5.3.1-14ubuntu2 (xenial)] 19) libcc1-0 [5.4.0-6ubuntu1~16.04.4 (now) -> 5.3.1-14ubuntu2 (xenial)] 20) libgomp1 [5.4.0-6ubuntu1~16.04.4 (now) -> 5.3.1-14ubuntu2 (xenial)] 21) libquadmath0 [5.4.0-6ubuntu1~16.04.4 (now) -> 5.3.1-14ubuntu2 (xenial)] 22) libstdc++6 [5.4.0-6ubuntu1~16.04.4 (now) -> 5.3.1-14ubuntu2 (xenial)] 以下の依存関係を未解決のままにする: 23) codeblocks が gcc | g++ を推奨 24) dpkg-dev が build-essential を推奨 25) cmake が gcc を推奨 この解決方法を受け入れますか? [Y/n/q/?]
ここでY
とすると、無事所望のパッケージをインストールできました。しかし、今度はgccとg++がアンインストールされ、利用できなくなってしまいました。
sudo aptitude install g++
で
以下の新規パッケージがインストールされます: g++ g++-5{a} gcc{a} gcc-5{a} libasan2{a} libatomic1{a} libc-dev-bin{a} libc6-dev{ab} libcilkrts5{a} libgcc-5-dev{a} libitm1{a} liblsan0{a} libmpx0{a} libstdc++-5-dev{a} libtsan0{a} libubsan0{a} linux-libc-dev{a} manpages-dev{a} 0 個のパッケージを更新、 18 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。 26.5 M バイトのアーカイブを取得する必要があります。 展開後に 101 M バイトのディスク領域が新たに消費されます。 以下のパッケージには満たされていない依存関係があります: libc6-dev : 依存: libc6 (= 2.23-0ubuntu3) [2.23-0ubuntu7 が既にインストール済みです] 以下のアクションでこれらの依存関係の問題は解決されます: 以下のパッケージを現在のバージョンに一時固定する: 1) g++ [インストールされていません] 2) g++-5 [インストールされていません] 3) libc6-dev [インストールされていません] 4) libstdc++-5-dev [インストールされていません] 以下の依存関係を未解決のままにする: 5) gcc が libc6-dev | libc-dev を推奨 6) gcc-5 が libc6-dev (>= 2.13-0ubuntu6) を推奨 7) libgcc-5-dev が libc6-dev (>= 2.13-0ubuntu6) を推奨
にY
で答えましたが、まだgccもg++も利用できません。再びsudo aptitude install g++
で、いちどn
したあとの
以下のアクションでこれらの依存関係の問題は解決されます: 以下のパッケージをダウングレードする: 1) libc6 [2.23-0ubuntu7 (now) -> 2.23-0ubuntu3 (xenial)] 2) libc6-dbg [2.23-0ubuntu7 (now) -> 2.23-0ubuntu3 (xenial)]
をY
で受け入れると、gccとg++が使えるようになりました。