Вопрос или проблема
На Debian 12 с KDE cat /proc/version
возвращает:
Версия Linux 5.10.0-17-amd64 ([email protected]) (gcc-10
(Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils для Debian)
2.35.2) #1 SMP Debian 5.10.136-1 (2022-08-13)
Почему отображается gcc-10
/ Debian 10
, а не gcc-12
/ Debian 12
? Это проблема?
Я узнал об этом, когда исследовал, почему xbindkeys продолжал работать долгое время после обновления до D12 и Wayland, несмотря на то, что он не должен работать под Wayland. Он продолжал работать несколько месяцев после обновления пока вдруг не перестал работать, сломав мою конфигурацию мыши, поэтому я хотел увидеть свой номер версии, так как подозревал, что это может быть связано с недавним точечным обновлением. У меня последняя версия Debian, и на данный момент это 12.7 (подтверждено с помощью cat /etc/debian_version
).
gcc --version
показывает gcc (Debian 12.2.0-14) 12.2.0
.
Возможно, у меня установлены права доступа для gcc по этой причине в целях безопасности, как рекомендовано sudo lynis audit system
: sudo chmod 0444 /usr/bin/gcc
, которые я изменяю только когда компилирую что-то с помощью gcc. Я не видел никаких сообщений об ошибках или подобных проблем во время обновления. Нужно ли изменить эти права перед обновлением?
Пакеты ядра не обязательно используют системную версию GCC; иногда они используют немного более старую версию. «Debian» версия, указанная наряду с версией GCC, не является релизом Debian, это версия пакета GCC для Debian.
Однако в вашем случае несоответствие происходит от того, что вы используете ядро Debian 11, и Debian 11 в основном использовал GCC 10. Debian 12 использует ядра серии 6.1, а не 5.10.
(В любом случае, большинство пакетов собираются с любой версией соответствующего компилятора, которая находится в нестабильной ветке на момент их загрузки или когда они в последний раз пересобирались; это может не быть компилятором по умолчанию в окончательном релизе Debian. Исключение составляют пакеты, которые обновляются в рамках релиза; они собираются с соответствующим компилятором в этом релизе.)
Права доступа не имеют значения во время обновления пакетов, если они не мешают запуску необходимой программы во время preinst
; это не проблема с GCC. Права доступа возвращаются к значениям по умолчанию для пакета, когда пакет распаковывается.
Ответ или решение
Почему в Debian 12 используется gcc-10?
Когда вы выполните команду cat /proc/version
в системе Debian 12 с KDE, вы, возможно, заметите следующую строку:
Linux version 5.10.0-17-amd64 (...)(gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.136-1 (2022-08-13)
Это может вызвать вопрос, почему система показала версию gcc-10, а не gcc-12, который является стандартным компилятором в Debian 12.
Почему используется gcc-10?
Основные причины включают следующее:
-
Обоснования выбора версии компилятора для ядра:
- Пакеты ядра в Debian не всегда компилируются с последней версией компилятора, доступной на данный момент. В данном случае ядро версии 5.10 скомпилировано с использованием gcc-10. Это распространённая практика, направленная на поддержание стабильности и предсказуемости. Разработчики Debian могут использовать более старую, но проверенную версию компилятора, чтобы избежать возможных проблем с совместимостью и стабильностью.
-
Версия компилятора и версии Debian:
- Указанная версия компилятора gcc, как и пометка "Debian 10.2.1-6", относится не к версии самой ОС, а к пакету gcc в Debian. Это означает, что gcc-10 был актуальным в рамках предыдущей версии Debian (11), и его использовали для сборки пакетов, куда входило и текущее ядро.
-
Версии ядра и стабильность:
- Как было упомянуто, Debian 12 в основном использует ядра из серии 6.1, но ваше ядро 5.10 является частью предыдущего выпуска, что и объясняет использование более старой версии gcc.
-
Обновление пакетов и компиляция:
- Большинство пакетов повседневного использования компилируются с последней доступной версией компилятора в момент их загрузки в репозитории unstable. Это означает, что пакеты, которые обновляются в рамках существующей версии, будут использовать в качестве компилятора ту версию, которая была актуальна в момент их сборки. Исходя из вашего описания, возможно, вы используете комбинацию старого ядра и более новых пользовательских пакетов.
О правами доступа к gcc и их влиянии на обновления
Судя по тому, что вы указали в вопросе, вы изменили права доступа к исполняемому файлу gcc с помощью команды sudo chmod 0444 /usr/bin/gcc
. Этот шаг может ограничивать возможности использования gcc для компиляции, но не должен оказывать влияния на обновление пакетов, если вы не изменили права доступа к важным исполняемым файлам, которые используются в установочных скриптах. Права доступа к исполняемым файлам будут восстановлены при следующем обновлении пакета, если они были изменены.
Однако, если вы собираетесь самостоятельно компилировать программы, то перед этим желательно восстановить права доступа до стандартных значений:
sudo chmod 755 /usr/bin/gcc
Заключение
Использование gcc-10 в Debian 12 связано с необходимостью поддержания стабильности и надежности системы, особенно когда речь идет о сборке ядра. Это не является ошибкой и отображает общепринятые методы управления версиями программного обеспечения в дистрибутивах на основе Debian. Если у вас есть дополнительные вопросы или понадобятся уточнения по другим аспектам Debian, не стесняйтесь обращаться за помощью.