web-dev-qa-db-ja.com

ツールチェーンテストGCC 5をストックGCC 5に置き換える最も簡単な方法は何ですか?

開発にGCC 7を使用できるように、Xenialシステムに Toolchain test builds ppa を追加しました。ある時点で、GCC 5を5.4.1-2ubuntu1~16.04(PPAで利用可能な最新バージョン)に更新しました。ただし、GCC 5のこのバージョンには、Spectre/Meltdownの最新のパッチはありません。そのため、前回カーネルアップデート(これらのパッチでwasコンパイル)を行ったとき、DKMSモジュールはパッチなしで再コンパイルされましたが、バージョンマジックはそうではありませんでした一致し、ロードを拒否し、さまざまなものを壊しました。

ツールチェーンGCC 5(および関連パッケージ)を削除し、ストックGCC 5(ver。5.4.0-6ubuntu1~16.04.9、retpolineパッチを含む)に置き換えたいが、理想的にはアンインストールをトリガーせずにこれを実行したいGCC 5に依存するすべてのDKMSモジュールおよびその他の項目について。GCC-7のツールチェーンテストPPAも保持したい。これを行う最も簡単な方法は何ですか?

3
Maskull

私がやったこと:

  1. GCC-5に関連付けられたツールチェーンPPAからインストールされたパッケージのリストを取得します。

    aptitude -F "%p" search "?origin(ubuntu-toolchain-r) ?version(5.4.1) ?installed"
    
  2. これらのそれぞれについて、正しいバージョンを手動でダウンロードします。

    aptitude download cpp-5=5.4.0-6ubuntu1~16.04.9
    ...
    
  3. ダウンロードしたすべての.debsをインストールします。

    Sudo dpkg -i *.deb
    

    (今はapt checkになり、何も壊さないようにしましょう。)

  4. 次を含む/etc/apt/preferences.d/にファイルを作成して、PPAバージョンが使用されないようにこれらのパッケージを固定します

    Package: gcc-5 cpp-5 g++-5 gcc-5-base gcc-5-base:i386 gcc-5-doc libasan2 libgcc-5-dev libgcj16 libmpx0 libobjc-5-dev libstdc++-5-dev
    Pin: release o=LP-PPA-ubuntu-toolchain-r-test
    Pin-Priority: -1
    

    apt-cache policy gcc-5を実行し、古いバージョンが優先されることを確認します。

  5. すべてのDKMSモジュールを再構築します。

    dkms status      # list DKMS modules
    Sudo dkms remove modulename/version -k $(uname -r)
    Sudo dkms build modulename/version -k $(uname -r)
    Sudo dkms install modulename/version -k $(uname -r)
    

    modinfoを使用して、新しくコンパイルされたモジュールの魔法に「retpoline」が含まれていることを再確認します。

  6. reboot、およびすべてが引き続き機能することを願っています。

1
Maskull