- Как собрать ядро в SUSE
- Необходимый минимум для сборки ядра
- Загрузка исходников
- Патчи (Optional)
- Конфигурация ядра
- Сборка ядра
- Инсталляция нового ядра
- Конфигурация GRUB
- Блог веселого программиста
- Я надеюсь здесь собрать все, что мне кажется интересным. Возможно, это понравится и Вам.
- Как собрать ядро для OpenSuSe 11
- Как собрать ядро для OpenSuSe 11 : 4 комментария
- Сборка нового ядра для OpenSUSE?
- Похожие темы
Как собрать ядро в SUSE
Каждый дистрибутив имеет набор специфичных средств для сборки ядра из исходников. В этой статье пойдет речь о сборке ядра в SuSE. Будут использованы исходники с www.kernel.org (vanilla kernel). Будет показано,как патчить исходники ядра.
Все это было протестировано на 10.1.
Это не единственный способ достижения данной задачи. Я ничего не могу гарантировать насчет того, что это будет работать у вас
Цель статьи — собрать kernel rpm package , который может быть инсталлирован на вашу систему, а затем на другие SUSE-системы.
Необходимый минимум для сборки ядра
Нужно проинсталлировать пакет ncurses-devel , который понадобится для команды make menuconfig :
Далее надо будет модифицировать несколько средств. Если мы это не сделаем то получим предупреждение во время сборки ядра:
/usr/lib/rpm/find-requires.ksyms: line 12: /usr/bin/nm: Argument list too long
и мы не сможем инсталлировать наш kernel rpm package.
Для начала, давайте подстрахуемся:
cp /usr/lib/rpm/find-provides.ksyms /usr/lib/rpm/find-provides.ksyms_orig
cp /usr/lib/rpm/find-requires.ksyms /usr/lib/rpm/find-requires.ksyms_orig
cp /usr/lib/rpm/find-supplements.ksyms /usr/lib/rpm/find-supplements.ksyms_orig
Далее мы открываем каждый из 3-х вышеназванных скриптов и заменяем строку kernel-*) is_kernel_package=1 ;;
на строку
kernel*) is_kernel_package=1 ;; :
[. ] #kernel-*) is_kernel_package=1 ;; kernel*) is_kernel_package=1 ;; [. ]
[. ] #kernel-*) is_kernel_package=1 ;; kernel*) is_kernel_package=1 ;; [. ]
[. ] #kernel-*) is_kernel_package=1 ;; kernel*) is_kernel_package=1 ;; [. ]
Загрузка исходников
Идем на www.kernel.org и выбираем там linux-2.6.18.2.tar.bz2 (здесь: http://www.kernel.org/pub/linux/kernel/v2.6/). Заходим в каталог /usr/src и качаем :
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.2.tar.bz2
Распаковываем и создаем symlink linux :
tar xjf linux-2.6.18.2.tar.bz2
ln -s linux-2.6.18.2 linux
cd /usr/src/linux
Патчи (Optional)
Вам могут понадобиться драйвера,которых нет в ядре, или вам нужна поддержка виртуализации, или какая-то иная технология,которой еще нет в ядре. Во всех этих случаях вам нужен патч.
Теперь представим,что вы загрузили нужный вам патч (я обзову его условно patch.bz2 ). Делается это следующим образом : (вы по-прежнему находитесь в /usr/src/linux ):
bzip2 -dc /usr/src/patch.bz2 | patch -p1 —dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1
Первая команда-просто тест,который ничего не делает. Если в нем не будет ошибок, только тогда вы можете запускать вторую команду.
Если патч имеет расширение ( .gz ) вместо bzip2 ( .bz2 ), ядро патчится так :
gunzip -c /usr/src/patch.gz | patch -p1 —dry-run
gunzip -c /usr/src/patch.gz | patch -p1
Можно также выполнить prepatches. Например,если вам нужна фича,которая доступна только в 2.6.19-rc6. Для этого доступен патч patch-2.6.19-rc6.bz2 . Его можно применить для ядра 2.6.18 kernel, но не для 2.6.18.1 или 2.6.18.2. Причину смотрите на http://kernel.org/patchtypes/pre.html:
Препатч — это фактически альфа-релиз. Он живет в тестовом каталоге архива.
Поэтому,если вы хотите собрать версию ядра 2.6.19-rc6 , нужно загрузить версию 2.6.18 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2) вместо 2.6.18.2!
Как наложить патч 2.6.19-rc6 patch для 2.6.18:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.19-rc6.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.19-rc6.bz2 | patch -p1 —dry-run
bzip2 -dc /usr/src/patch-2.6.19-rc6.bz2 | patch -p1
Конфигурация ядра
Мы будем итспользовать конфигурацию текущего ядра как основу для нового ядра. Скопируем существующий конфиг в /usr/src/linux :
make mrproper
cp /boot/config-`uname -r` ./.config
Появляется конфигурационное меню. Выбираем Load an Alternate Configuration File
Далее выбираем General Setup —>
(-default) Local version
-default
Наш kernel rpm package будет назван как kernel-2.6.18.2default-1.i386.rpm . Можно выбрать -custom по вкусу.
Если вы проинсталлируете kernel-2.6.18.2default-1.i386.rpm и затем надумаете собрать новое ядро версиит 2.6.18.2, нужно использовать другую version string, т.е. -default1 , -default2 , и т.д., а иначе вы не сможете его проинсталлировать, потому что kernel-2.6.18.2default-1.i386.rpm уже есть!
В конце , когда нажмете Exit , На следующий вопрос ( Do you wish to save your new kernel configuration? ) нужно ответить Yes :
Сборка ядра
Для сборки наберите команду:
И отдаемся на волю времени.
Инсталляция нового ядра
После успешной компиляци будут созданы 2 пакета src.rpm и rpm . src.rpm лежит в /usr/src/packages/SRPMS/ каталоге. Выполним:
У меня он был назван kernel-2.6.18.2default-1.src.rpm .
rpm package лежит в /usr/src/packages/RPMS/i386/ , /usr/src/packages/RPMS/i586/ , /usr/src/packages/RPMS/i686/ , /usr/src/packages/RPMS/x86_64/ , и т.д. в зависимости от вашей архитектуры. У меня он в /usr/src/packages/RPMS/i386/ , набираем
ls -l /usr/src/packages/RPMS/i386/
Он назван как kernel-2.6.18.2default-1.i386.rpm .
Теперь мы можем проинсталлировать наш kernel rpm package :
cd /usr/src/packages/RPMS/i386/
rpm -ivh kernel-2.6.18.2default-1.i386.rpm
Теперь вы можете провести инсталляцию на любой SUSE машине.
Создадим ramdisk для ядра, иначе система не загрузится с него :
(Фактически эта команда содает ramdisks для всех имеющихся ядер)
Конфигурация GRUB
Нужно сконфигурировать GRUB . Вместо изменения /boot/grub/menu.lst запустим
Идем в System -> Boot Loader :
На следующем экране вы увидите содержимое конфига GRUB. Выбираем Add для добавления:
Выбираем Clone Selected Section для копирования существующей записи GRUB:
Набираем имя для ядра , например SUSE Linux 10.1 — 2.6.18.2 , выбираем Kernel -> Browse :
Вы увидите содержимое каталога /boot где лежит ваше новое ядро. Выберите файл, который обычно начинается с vmlinuz (типа vmlinuz-2.6.18.2-default ):
Выбираем Initial RAM Disk -> Browse :
Вы увидите содержимое каталога /boot . Нужно выбрать соответственный ramdisk , который обычно начинается с initrd (типа initrd-2.6.18.2-default ):
Вы увидите новую запись GRUB . Отмечаем ее и жмем на Up :
Затем жмем на Set as Default :
Теперь можно проверить /boot/grub/menu.lst
# Modified by YaST2. Last modification on Wed Nov 15 14:37:56 CET 2006 color white/blue black/light-gray default 0 timeout 8 title SUSE Linux 10.1 - 2.6.18.2 root (hd0,0) kernel /vmlinuz-2.6.18.2-default root=/dev/sda3 vga=0x314 resume=/dev/sda2 splash=silent showopts initrd /initrd-2.6.18.2-default ###Don't change this comment - YaST2 identifier: Original name: linux### title SUSE Linux 10.1 root (hd0,0) kernel /vmlinuz root=/dev/sda3 vga=0x314 resume=/dev/sda2 splash=silent showopts initrd /initrd ###Don't change this comment - YaST2 identifier: Original name: floppy### title Floppy chainloader (fd0)+1 ###Don't change this comment - YaST2 identifier: Original name: failsafe### title Failsafe -- SUSE Linux 10.1 root (hd0,0) kernel /vmlinuz root=/dev/sda3 vga=normal showopts ide=nodma apm=off acpi=off noresume nosmp noapic maxcpus=0 edd=off 3 initrd /initrd
(Можно было вместо яста просто ручками добавить
title SUSE Linux 10.1 - 2.6.18.2 root (hd0,0) kernel /vmlinuz-2.6.18.2-default root=/dev/sda3 vga=0x314 resume=/dev/sda2 splash=silent showopts initrd /initrd-2.6.18.2-default
в самом начале /boot/grub/menu.lst
Если все ОК,новое ядро загрузится. Вы можете проверить,действительно ли оно новое:
Если система НЕ грузится,перезагружаемся и выбираем старое ядро:
Попробуйте пересобрать все по новой.
Блог веселого программиста
Я надеюсь здесь собрать все, что мне кажется интересным. Возможно, это понравится и Вам.
Как собрать ядро для OpenSuSe 11
Ядро, которое идет вместе с дистрибутивом OpenSuSe 11, достаточно компактное и неплохо напичкано всякими примочками. Но если есть желание выжать из своей системы максимум возможностей, без пересборки ядра не обойтись.
Для начала надо установить пакет kernel-source через Yast. Исходники ядра лягут в свои директории, и создастся симлинк на эти исходники – /usr/src/linux.
После этого выполняем следующие команды:
cd /usr/src/linux
make mrproper
make mrproper создает такую же конфигурацию для компиляции ядра, которая сейчас используется в системе. Это очень удобно, из нее всего лишь надо будет выкинуть лишее или добавить желаемое.
Это самый отвественный этап. Здесь выкидывается всякая ненужная хрень. Например, я собирал ядро для своего ноутбука. Там была масса всякой ненужной гадости, которая совершенно точно не пригодится на нем – поддержка RAID-массивов, виртуализация и многое другое. Если эти фичи поотключать, ядро становится меньше и соответственно, при использовании облегченного ядра остается больше ресурсов для других процессов. Здесь еще важно поменять название ядра. Если оно именовалось как default, то лучше его переименовать, например, в mykernel001. Потому что при выходе нового ядра kernel-default Yast просто-напросто перепишет облегченное ядро новой версией.
Ядро собирается очень долго, на моем старом ноутбуке процесс сборки занял около двух часов.
RPM пригодится, если у вас есть несколько ноутбуков одинаковых моделей. Для установки на другой ноутбук собранного ядра достаточно скопировать получившися rpm. Нет нужды повторно собирать ядро.
Получившееся ядро в виде rpm легко установить на любой из ноутбуков с помощью команд:
rpm -ivh kernel-2.6.25.160.1-2.i386.rpm
mkinitrd
После этого остается только поправить конфиг загрузчика (grub или lilo), чтобы была возможность выбрать версию ядра, с которой будет загружаться система. Сразу отказываться от старого проверенного ядра не стоит, вдруг при сборке ядра отключили что-то лишее и какое-нибудь устройство перестало работать. Поэтому не исключено, что ядро придется пересобирать несколько раз для того, чтобы достичь оптимальной производительности системы.
Как собрать ядро для OpenSuSe 11 : 4 комментария
Камрад, какой у тебя получается размер rpm после сборки ядра через make rpm?
У меня оно просто гигантское получается, хотя делаю на основе действующего конфига. rpm 215 метров.
По-разному получается. Если вклепать в ядро все загружаемые модули, ядро действительно получится гигантское, но это не наш путь.
Последнее ядро что я собрал занимало примерно 2,6 Мб. Но как правило, компактное ядро получается не сразу, периодически приходится пересобирать его по нескольку раз с различными опциями.
В том то и штука, что для пробы собрал готовое дефолтное ядро на основе конфига из /boot. 245 мегов как с куста вся rpm-ка. И само ядрышко 80 метров в /boot заняло.
Через make && make install получилось как положено, хотя конфиг не менял.
Странно. Сборку начинал с make mrproper? По идее ядро должно собраться с теми опциями, с какими и было собрано дефолтное ядро.
Сборка нового ядра для OpenSUSE?
Кто-нибудь на форуме собирал rpm пакеты kernel в opensuse из src.rpm? С успешным наложением своих патчей? Там очень страшное содержимое в src.rpm которое даже не понятно как редактировать.
5.15 пока что там нету, хотел опробовать новый ntfs, и заодно наложить патчи xanmod ядра. Там видимо лютый гемор с наложением своих патчей и их тучей скриптовой каши на которой нет никакой документации, поэтому автор xanmod не желает поддерживать opensuse, хотя, казалось бы, он мог собирать в их OBS, да и для дебианов убунт тоже.
bhfq ★★★★★ ( 02.11.21 11:23:21 MSK )
Последнее исправление: bhfq 02.11.21 11:24:16 MSK (всего исправлений: 2)
Там видимо лютый гемор с наложением своих патчей
Вот в Магейе ядра довольно просто пересобираются, можно легко добавить свои патчи.
Блин опять переустанавливать систему xd
Посмотрел что там с пересборкой ядра. Да, разработчики openSUSE нагородили огород.
В Магейе вообще всё в одном .src.rpm файле. Можно распаковать, подправить и пересобрать. В openSUSE так не получится.
Исходные пакеты разных видов ядер типа .nosrc.rpm. Внутри только .spec файлы. При этом, например, частично используются файлы из пакета kernel-source. Но этого мало.
По ходу, разработчики openSUSE просто добавляют нужные файлы руками и собирают пакеты. А где их брать теперь совершенно непонятно.
Кстати, теперь обновления ядра openSUSE Leap приходят в репозиторий sle-update.
А где их брать теперь совершенно непонятно.
А, стоп. Они обнаружились в kernel-source*.src.rpm.
- Содержимое kernel-source*.src.rpm извлекаем в rpmbuild/SOURCES/
- Содержимое какого-нибудь kernel-default*.nosrc.rpm извлекаем в rpmbuild/SPECS/
Всё. Можно накладывать свои патчи в rpmbuild/SOURCES/ и пересобирать.
saahriktu ★★★★★ ( 03.11.21 01:35:58 MSK )
Последнее исправление: saahriktu 03.11.21 01:36:19 MSK (всего исправлений: 1)
Похожие темы
- Форум RPM пакет не ставится и не ругается. (2006)
- Форум Rh 7.1 and kernel compiling (2001)
- Форум сборка source rpm (2004)
- Форум Обновление ядра openSUSE: вопросы, и поиск уже написанного руководства (2012)
- Форум как заставить opensuse сохранять rpm (2007)
- Форум kotd в opensuse (2008)
- Форум Кастомная сборка GHC (2015)
- Форум Установка нового ядра на Red Hat 6.2 (2001)
- Форум Сборка ядра из исходников (2015)
- Форум Screenleats в openSUSE 11.4 (2014)