Я добавил, что тест Набора инструментальных средств создает 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. Что самый простой путь состоит в том, чтобы сделать это?
Что я закончил тем, что делал:
Получите список пакетов, установленных от набора инструментальных средств PPA, связанный с GCC-5:
aptitude -F "%p" search "?origin(ubuntu-toolchain-r) ?version(5.4.1) ?installed"
Для каждого из них загрузите правильную версию вручную:
aptitude download cpp-5=5.4.0-6ubuntu1~16.04.9
...
Установите весь загруженный .debs:
sudo dpkg -i *.deb
(Теперь хорошее время к apt check
и удостоверьтесь, что Вы ничего не повредили.)
Прикрепите эти пакеты так, чтобы версии 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
и проверьте, чтобы удостовериться, что старая версия предпочтена.
Восстановите все модули 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".
reboot
, и надеюсь, что все все еще работает.