Где хранятся текущие параметры сборки ядра?

Вопрос или проблема

Есть ли способ узнать, была ли ядро скомпилировано с определенной включенной опцией (например, CONFIG_PROC_EVENTS=y) без необходимости извлекать пакет исходников ядра и смотреть в файл конфигурации?

Если вы посмотрите в ваш каталог /boot, вы заметите следующие файлы:

$ ls -l /boot/|grep config
-rw-r--r--  1 root root   109919 Oct 21  2011 config-2.6.35.14-100.fc14.x86_64
-rw-r--r--  1 root root   109919 Oct 27  2011 config-2.6.35.14-103.fc14.x86_64
-rw-r--r--  1 root root   109919 Nov 23  2011 config-2.6.35.14-106.fc14.x86_64

Обратите внимание, какую версию ядра вы используете:

$ uname -r
2.6.35.14-106.fc14.x86_64

Если вы используете команду grep по соответствующему файлу “config-uname -r“, вы можете увидеть, с какими опциями ядро было собрано:

$ grep CONFIG_PROC_EVENTS= /boot/config-`uname -r`
CONFIG_PROC_EVENTS=y

Ссылки

Опции ядра можно найти в /proc/config.gz.

zgrep CONFIG_PROC_EVENTS= /proc/config.gz

если ядро было скомпилировано с CONFIG_IKCONFIG_PROC=y. Если ядро было скомпилировано с CONFIG_IKCONFIG_PROC=m, тогда может понадобиться сначала выполнить modprobe configs.

Если ваше ядро было собрано с CONFIG_IKCONFIG_PROC, вы можете найти конфигурацию в файле /proc/config.gz

zless /proc/config.gz

Пакеты ядра, основанные на Debian и Redhat, как правило, устанавливают файл config-$version в /boot,

less /boot/config-$(uname -r)

В Debian вы также можете найти опции по умолчанию в kernel-package в ./kernel/Config/config, а также варианты конфигурации, специфичные для архитектуры, в ./kernel/Config/.

mkdir /tmp/k
cd /tmp/k
apt-get source kernel-package
find . -path '*/kernel/Config/*' -type f

sudo find / -xdev -name .config(-xdev ограничивает поиск одним файловым системам)

Обычно он будет находиться в /usr/src/some-specific-kernel-header-version/.config

Просто прочитайте его как любой текст, выполните поиск с помощью grep или, чтобы увидеть, чем отличаются две версии, используйте diff -y -suppress-common-lines /path/linux2.6-r3/.config /path/linux2.6-r4/.config

Это сработало для меня

cat /boot/config-$(uname -r) | grep -v '#'

Ответ или решение

Для решения задачи определения, с какими опциями был скомпилирован ядро Linux, не требуется загрузка исходных текстов ядра. Все необходимые сведения можно найти в конфигурационных файлах, которые содержат опции компиляции ядра. Исследуем, как можно воспользоваться этими файлами для получения необходимой информации.

Теория

Когда ядро Linux компилируется, порядок сборки и настройки определяются множеством опций, находящихся в конфигурационных файлах. Эти конфигурационные файлы могут быть сохранены в разных местах, в зависимости от конфигурации системы и используемого дистрибутива.

Основные места хранения конфигураций ядра:

  • /boot/config-\<версия ядра>: В Debian и Redhat-базированных системах файл конфигурации ядра часто сохраняется в каталоге /boot, с именем, включающим версию ядра. Этот файл предоставляет удобный способ увидеть все опции, с которыми было собрано текущее или ранее установленное ядро.

  • /proc/config.gz: При условии, что ядро скомпилировано с опцией CONFIG_IKCONFIG_PROC=y, конфигурации ядра можно найти сжатым в файле /proc/config.gz. Это файл-файловая система, доступная для чтения через такие команды, как zgrep.

  • /usr/src/\<версия ядра>/.config: Директория с исходными кодами ядра, если она установлена, также содержит .config файл, где определены все конфигурационные параметры сборки.

Пример

Если ваша задача — узнать, поддерживает ли работающая версия ядра Linux конфигурационную опцию, например, CONFIG_PROC_EVENTS, можно воспользоваться следующим подходом:

  1. Узнать текущую версию ядра:
$ uname -r
  1. Проверить наличие требуемой опции в файле конфигурации в /boot:
$ grep CONFIG_PROC_EVENTS= /boot/config-$(uname -r)

Это вернет строку с y или n, показывая, включена или нет данная опция при сборке.

  1. Проверить в /proc/config.gz (при условии, что ядро собрано с CONFIG_IKCONFIG_PROC=y или модуль configs загружен):
$ zgrep CONFIG_PROC_EVENTS= /proc/config.gz
  1. Искать в исходных кодах, если они установлены:
$ sudo find /usr/src -name .config
$ grep CONFIG_PROC_EVENTS= /usr/src/`uname -r`/.config

Применение

Знание, как диагностировать параметры текущей сборки ядра, может быть критически важным для администраторов, разработчиков и инженеров DevOps, которые работают с кастомными решениями, требующими наличия определенных возможностей ядра. Контроль над параметрами конфигурации ядра позволяет не только отладить сложные ситуации, но и обеспечить стабильную работу критически важных приложений, полагающихся на специфичные функции ядра.

Кроме того, использование конфигурационных файлов позволяет оценивать различия между версиями ядра, что может быть полезно при подготовке к обновлениям системы. Например, перед миграцией на новую версию ядра можно сравнить файлы конфигурации:

$ diff -y --suppress-common-lines /boot/config-old-version /boot/config-new-version

Этот подход позволит поддерживать консистентность конфигураций и сохранить все необходимые функциональности в новом окружении.

Таким образом, грамотное управление конфигурацией ядра Linux становится неизменной практикой для обеспечения надежной и эффективной работы серверных систем. Это позволяет оставаться в курсе всех возможных изменений и всегда быть готовым к диагностике и решению возникающих проблем.

Оцените материал
Добавить комментарий

Капча загружается...