Qual é a maneira mais fácil de substituir o toolchain-test GCC5 pelo estoque GCC5?

3

Eu adicionei o teste Toolchain para construir o ppa no meu sistema Xenial, para que eu poderia usar o GCC 7 para desenvolvimento. Em algum momento, também atualizou o GCC 5 para 5.4.1-2ubuntu1~16.04 , a última versão disponível no PPA. No entanto, esta versão do GCC 5 não possui os patches recentes para o Specter / Meltdown. Então, da última vez que fiz uma atualização do kernel (que foi compilada com esses patches), meus módulos DKMS foram recompilados sem os patches, as magics da versão não combinavam e eles se recusaram a carregar, quebrando várias coisas .

Eu quero remover o toolchain GCC 5 (e os pacotes associados) e substituí-lo pelo estoque GCC 5 (ver. 5.4.0-6ubuntu1~16.04.9 , que tem as correções de retpolina), mas, idealmente, gostaria de fazer isso sem acionar um desinstalar todos os meus módulos DKMS e outras coisas que dependem do GCC 5. Eu também quero manter o PPA de teste toolchain, para o GCC-7. Qual é a maneira mais simples de fazer isso?

    
por Maskull 04.04.2018 / 18:33

1 resposta

1

O que acabei fazendo:

  1. Obtenha a lista de pacotes instalados a partir do PPA de conjunto de ferramentas associado ao GCC-5:

    aptitude -F "%p" search "?origin(ubuntu-toolchain-r) ?version(5.4.1) ?installed"
    
  2. Para cada um deles, faça o download da versão correta manualmente:

    aptitude download cpp-5=5.4.0-6ubuntu1~16.04.9
    ...
    
  3. Instale todos os .debs baixados:

    sudo dpkg -i *.deb
    

    (Agora é um bom momento para apt check e certifique-se de que você não quebrou nada.)

  4. Defina esses pacotes para que as versões do PPA nunca sejam usadas, criando um arquivo em /etc/apt/preferences.d/ contendo

    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
    

    Execute apt-cache policy gcc-5 e verifique se a versão antiga é a preferida.

  5. Reconstrua todos os módulos 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)
    

    Verifique com modinfo se o vermagic dos módulos recém-compilados inclui "retpoline".

  6. reboot e espero que tudo ainda funcione.

por Maskull 04.04.2018 / 22:12