
А вот даже и не вспомню как давно приходилось пересобирать ядро Linux. Прошли те времена, когда с каждым новым релизом, устранялась какая-нибудь неприятная бага, или появлялась жизненно важная фича. Как правило всё работает из коробки, и нет числа новым адептам, праздно, без напильника, настраивающих свой свеженький Linux. Но всё же встречаются моменты когда приходится собирать кастомное ядро. Если у вас именно этот случай, тогда приступим.
Поскольку пересборку мне пришлось устраивать на RHEL-like системе, её то я и буду описывать.
Иногда, когда в одной системе нужно присовокупить к Enterprise системе Experemental фичи, приходится брать компилятор.
Нусс... приступим.
В моём случае и source и target системы являются Scientific Linux'ами, хотя, в принципе, между всеми RHEL'ами одной ветки должна быть бинарная совместимость.
Подготовка окружения:
Я не буду описывать создание пользователя "builder". В принципе, это может быть любой не привилегированный пользователь.
Получение исходных кодов:
su - builder rpmdev-setuptree mkdir ~/tmp ; cd ~/tmp yumdownloader --source kernel-$(uname -r) rpm -ivh kernel-*.src.rpm cd ~
Подготовка дерева исходных кодов ядра:
Установим зависимостиРаспакуем исходные тексты
su -c "yum-builddep --nogpgcheck /home/builder/tmp/kernel-*.src.rpm"
cd ~/rpmbuild/SPECS rpmbuild -bp --target=$(uname -m) kernel.spec
Настройка ядра:
Дабы уберечь вас от ошибки которая стоила мне нескольких часов, скажу, что при сборке ядра таким способом, я имею в виду через "spec" файл, старый, добрый, ламповый ".conf" файл генерируется изново. Что приводит к тому, что все изменения перезатираются. Генерируется он специальным perl'овым скриптом, из специальных файлов конфигурации, подключение которых можно обнаружить в "spec" файле.Список файлов конфигурации
Сами файлы находятся тут ~/rpmbuild/SOURCES
grep -P 'Source\d+:' ~/rpmbuild/SPECS/kernel.spec
Мне нужно только включить поддержку UFS в ядре, чем пожалуй и займусь.
Важно!
cd ~/rpmbuild/SOURCES sed -i -e "s/.*CONFIG_UFS_FS.*/CONFIG_UFS_FS=m/g" config-generic-rhel sed -i -e "s/.*CONFIG_UFS_FS_WRITE.*/CONFIG_UFS_FS_WRITE=y/g" config-generic
Для того, чтобы ядро не затёрлось при первом же официальном релизе, и чтобы самому понимать какое ядро установлено в системе, ядру следует присвоить кастомнный префикс.
И еще одно Важно!
cd ~/rpmbuild/SPECS sed -i -e "s/.*define buildid.*/%define buildid .mycompany/g" kernel.spec
Чтобы ядро с префиксом в последствии корректно установилось, его следует собрать с опцией "--with firmware".
Команду сборки лучше запускать через "time", чтобы можно мыло сказать как долго ого собиралось.
А теперь наберёмся терпения, и будем ждать пока оно соберётся.
Я делал сборку на слабых машинках, и время сборки у меня варьировалось от 1.5 до 4х часов.
К слову, на варнинги можно не обращать внимание, главное чтобы в конце было сообщение об удачной сборке.
Когда весь чай выпит, а последний драйвер втиснут в rpm пакет, можно приступать к установке.
time rpmbuild -bb --with firmware --target=`uname -m` kernel.spec
"kernel-firmware" необходимо устанавливать в первую очередь
su - cd /home/builder/rpmbuild/RPMS/x86_64 rpm -ivh kernel-firmware-*.rpm rpm -ivh kernel-*.rpm
Ну а теперь, перезагружаемся, и радуемся новым фичам.
https://fedoraproject.org/wiki/Building_a_custom_kernel
http://jablonskis.org/2011/howto-rebuild-centos-6-0-linux-kernel/index.html
Комментариев нет:
Отправить комментарий