web-dev-qa-db-fra.com

Quelle est la façon la plus simple de remplacer le GCC 5 de la chaîne d’outils par le GCC 5 de série?

J'ai ajouté le Toolchain test builds ppa à mon système Xenial, afin de pouvoir utiliser GCC 7 pour le développement. À un moment donné, il a également mis à jour GCC 5 en 5.4.1-2ubuntu1~16.04, la dernière version disponible dans le PPA. Cependant, cette version de GCC 5 ne dispose pas des correctifs récents pour Spectre/Meltdown. Ainsi, la dernière fois que j'ai effectué une mise à jour du noyau (qui était compilée avec ces correctifs), mes modules DKMS ont été recompilés sans les correctifs, la version magique n'a pas été identique et ils ont refusé. charge, briser diverses choses.

Je souhaite supprimer la chaîne d'outils GCC 5 (et les packages associés) et la remplacer par le stock GCC 5 (ver. 5.4.0-6ubuntu1~16.04.9, qui contient les correctifs de retpoline), mais idéalement, j'aimerais le faire sans déclencher de désinstallation. de tous mes modules DKMS et d’autres éléments qui dépendent de GCC 5. Je souhaite également conserver le PPA toolchain-test, pour GCC-7. Quel est le moyen le plus simple de faire cela?

3
Maskull

Ce que j'ai fini par faire:

  1. Obtenez la liste des paquets installés à partir de la chaîne d'outils PPA associée à GCC-5:

    aptitude -F "%p" search "?origin(ubuntu-toolchain-r) ?version(5.4.1) ?installed"
    
  2. Pour chacun d’entre eux, téléchargez manuellement la version appropriée:

    aptitude download cpp-5=5.4.0-6ubuntu1~16.04.9
    ...
    
  3. Installez tous les fichiers téléchargés:

    Sudo dpkg -i *.deb
    

    (C'est maintenant le bon moment pour apt check et vous assurer de ne rien casser.)

  4. Épinglez ces paquets pour que les versions de PPA ne soient jamais utilisées, en créant un fichier dans /etc/apt/preferences.d/ contenant

    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
    

    Exécutez apt-cache policy gcc-5 et vérifiez que l'ancienne version est préférée.

  5. Reconstruisez tous les modules 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)
    

    Vérifiez à nouveau avec modinfo que le vermagique des modules nouvellement compilés inclut "retpoline".

  6. reboot, et j'espère que tout fonctionne encore.

1
Maskull