Что самый легкий путь состоит в том, чтобы заменить тест набора инструментальных средств GCC5 запасом GCC5?

Я добавил, что тест Набора инструментальных средств создает ppa к моей Гостеприимной системе, так, чтобы я мог использовать GCC 7 для разработки. В какой-то момент это также обновило GCC 5 к 5.4.1-2ubuntu1~16.04, последняя версия, доступная в PPA. Однако эта версия GCC 5 не имеет недавних патчей для Призрака/Краха. Так в прошлый раз я сделал обновление ядра (который был скомпилирован с теми патчами), мои модули DKMS были перекомпилированы без патчей, волшебство версии не соответствовало, и они отказались загружаться, повредив различные вещи.

Я хочу удалить набор инструментальных средств GCC 5 (и связанные пакеты) и заменить его запасом GCC 5 (ver. 5.4.0-6ubuntu1~16.04.9, который имеет патчи retpoline), но идеально я хотел бы сделать это, не инициировав удаление всех моих модулей DKMS и других вещей, которые зависят от GCC 5. Я также хочу сохранить тест набора инструментальных средств PPA для GCC-7. Что самый простой путь состоит в том, чтобы сделать это?

3
задан 4 April 2018 в 23:09

1 ответ

Что я закончил тем, что делал:

  1. Получите список пакетов, установленных от набора инструментальных средств PPA, связанный с GCC-5:

    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. Прикрепите эти пакеты так, чтобы версии PPA никогда не использовались путем создания файла в /etc/apt/preferences.d/ содержа

    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 то, что vermagic недавно-скомпилированных-модулей включает "retpoline".

  6. reboot, и надеюсь, что все все еще работает.

1
ответ дан 1 December 2019 в 17:28

Другие вопросы по тегам:

Похожие вопросы: