Дисклеймер

Внимание: в этом блоге могут описываться события, явления и факты при помощи ненормативной лексики. Убедитесь, что Вы готовы к этому.

вторник, 28 января 2014 г.

Автоматизация сборки и обновления ядра в Gentoo

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

Стандартный способ с update-grub и т.п. не подходил по причине того, что некорректно определялись ядра и были проблемы с дуалбутом (ибо рядом был Windows для игруль и виндо-специфичного софта).

Собственно, кусок кода, находящийся ниже, нужно поместить в /root/.bashrc (запускается root'ом):
srcomp () {
cd /usr/src/linux; zcat /proc/config.gz > .config; make oldconfig
make -j6; make modules; make install; make modules_install; emerge @module-rebuild -vb --keep-going
a="$(uname -r | grep -Eo '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}')"
b="$(ls -l /usr/src/linux | grep -Eo '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}')"
sed -ri "s/$a/$b/g" /boot/grub2/grub.cfg
}
Для его корректной работы потребуется иметь доступный конфиг по адресу /proc/config.gz (опция Enable access to .config through /proc/config.gz, обозначается в текстовом конфиге как CONFIG_IKCONFIG_PROC).

Примечание: Portage примерно с 2014 года умеет делать пересборку модулей. До этого вместо emerge @module-rebuild следовало указывать module-rebuild rebuild и, само собой, иметь предустановленный пакет module-rebuild.

Допустим, текущее ядро 3.12.8 и нужно скомпилировать свежепринесённую портежем версию 3.12.9. Для этого, получив список доступных к сборке ядер через eselect kernel list, устанавливаем нужное нам ядро через eselect kernel set.

Затем остаётся только запустить команду srcomp (можно поменять в коде выше на любое подходящее по вкусу). Микроскрипт сам вытащит текущий конфиг, обновит для соответствия компилируемому ядру (при наличии новых опций в новом ядре конфигуратор может остановиться и спросить об их добавлении), затем скомпилирует ядро с модулями, положит их куда нужно, пересоберёт "внешние" модули (virtualbox, realtek, nvidia и т.п.) и заменит загрузочные строки в grub.cfg.

Пробовал много раз, пока что не подводило.

Комментариев нет:

Отправить комментарий