Kernel/build unpackaged: различия между версиями

Материал из ALT Linux Wiki
(Новая страница: «{{Внимание|Статья в процессе написания.}} = Самостоятельная сборка ядра std-def обычными средствами сборки, без создания пакета = == Настраиваем сборочную среду == Все собранные пакеты попадают в, доступные на сайте git.alt, git репозитории [https://git.altlinux.org/gears/ gears]....»)
 
Нет описания правки
 
(не показано 17 промежуточных версий этого же участника)
Строка 1: Строка 1:
{{Внимание|Статья в процессе написания.}}
= Самостоятельная сборка ядра обычными средствами сборки, без создания RPM пакетов, на примере std-def =


= Самостоятельная сборка ядра std-def обычными средствами сборки, без создания пакета =
Для скачивания и компиляции ядра в полной конфигурации из исходного кода вам понадобится примерно 20 гигабайт, а для инсталляции ещё около 5 гигабайт дискового пространства. Собранное таким образом ядро не будет на 100% идентично ядру в пакете дистрибутива, так как будет различаться ''сборочная среда'' — то какими утилитами и компилятором собиралось ваше ядро.


== Настраиваем сборочную среду ==
== Настраиваем сборочную среду ==
Все собранные пакеты попадают в, доступные на сайте git.alt, git репозитории [https://git.altlinux.org/gears/ gears]. Репозиторий называется по имени пакета, а бранчи дистрибутива (sisyphus, p10) находятся в соответствующих бранчах git репозитория. Таким образом в Сизифе для ядра с флейвором std-def пакет называется <code>kernel-image-std-def</code>, следовательно путь к его gears репозиторию на git.alt будет <code>/gears/k/kernel-image-std-def.git</code>, а бранч sisyphus.


Под рутом ставим необходимые средства сборки ядра:
Под '''root''' ставим необходимые пакеты для сборки ядра (в Сизифе):


   # apt-get update
   # '''apt-get update'''
   # apt-get install -y rpm-build bc git
   # '''apt-get install''' -y rpm-build git bc dwarves flex libelf-devel zlib-devel openssl openssl-devel


== Получаем исходный код ==
== Получаем исходный код ==
Будем использовать схему именования позволяющую работать в множеством репозиториев бранчей и апстримов — git remote для gears репозиториев называется <code>gears/флейвор</code>, то есть для std-def это будет <code>gears/std-def</code>, (затем можно будет добавить <code>gears/un-def</code> или апстрим), а git бранч называется <code>флейвор/бранч_дистрибутива</code>, то есть в нашем случае это <code>std-def/sisyphus</code>. Такая схема позволит различить remote и бранчи для разных флейворов.
Получите исходный код как описано в статье "[[Kernel/getting_sources|Получение исходного кода ядер Альт с помощью Git]]" и не забудьте проверить его целостность.


=== Метод git clone ===
== Конфигурация ядра ==
Под пользователем, клонируем репозиторий так чтоб remote назывался gears/std-def (опция <code>-o</code>) в каталог <code>kernel-image</code> (другие флейворы тоже будут там) и открываем бранч <code>std-def/sisyphus</code> из него:
Конечно можно взять готовый конфиг из <code>/boot/config-*</code> или <code>/proc/config.gz</code>, но вероятно, он не точно соответствует версии ядра, которую вы собираете — поэтому воспроизведем генерацию конфига как она происходит при сборке пакета.


  $ git clone -n -o gears/std-def http://git.altlinux.org/gears/k/kernel-image-std-def.git kernel-image
Конфиг собирается из частей находящихся в файлах <code>config*</code>, где к основному конфигу <code>config</code> добавляются конфиги соответствующих архитектуре (<code>config-архитектура</code>, в примере мы будем использовать переменную bash <code>$HOSTTYPE</code> для её определения) и флейвору (например для std-def добавляется <code>config-std</code>, а для un-def не добавляется).
  $ cd kernel-image
  $ git checkout -B std-def/sisyphus gears/std-def/sisyphus


=== Метод git remote ===
  $ '''make''' mrproper
Если у вас уже есть репозиторий с ядром можно добавить к нему наши remote и так-же открываем нужный бранч:
  $ '''scripts/kconfig/merge_config.sh''' -m config config-$HOSTTYPE config-std
  $ '''make''' olddefconfig
{{Примечание| На этом этапе вы можете редактировать получившийся <code>.config</code> или добавить свой патч. Например, для ускорения сборки и уменьшения размера итогового ядра (собранное ядро уменьшится примерно на 14 гигабайт, а инсталлированное примерно на 4.5 гигабайта) можно отключить отладочную информацию:
  $ '''scripts/config''' -d DEBUG_INFO
}}


   $ cd linux
== Компиляция ядра ==
   $ git remote add -f gears/std-def http://git.altlinux.org/gears/k/kernel-image-std-def.git
{{Примечание| Компиляцию лучше производить используя параллельную сборку с опцией <code>-j количество_потоков</code>, рекомендуемое количество потоков равно количеству ядер в системе (вывод утилиты <code>nproc</code>).}}
  $ git checkout -B std-def/sisyphus gears/std-def/sisyphus
 
   $ '''make''' -j$(nproc) bzImage
   $ '''make''' -j$(nproc) modules
 
== Инсталляция ядра в систему ==
 
Снова под '''root''', зайдите в каталог с ядром:
 
  # '''make''' -j$(nproc) modules_install
  # '''make''' install
 
Шаг <code>make modules_install</code> поместит модули ядра в каталог <code>/lib/modules/KERNELRELEASE</code>, где <code>KERNELRELEASE</code> — строка с версией ядра (её можно посмотреть запустив под пользователем <code>make kernelrelease</code>, например, это может быть <code>5.15.77+</code>.)
 
Шаг <code>make install</code> поместит файлы <code>'''config''', '''System.map''', '''vmlinuz'''</code> в каталог <code>/boot</code>, там же будет сгенерирован <code>'''initrd'''</code>. При этом, все файлы будут иметь суффикс <code>-KERNELRELEASE</code> и будут поставлены ''симлинки'' initrd и vmlinuz на новое ядро — таким образом, загрузка ядра по умолчанию (из первого пункта загрузчика) будет в это ядро.

Текущая версия от 18:34, 11 ноября 2022

Самостоятельная сборка ядра обычными средствами сборки, без создания RPM пакетов, на примере std-def

Для скачивания и компиляции ядра в полной конфигурации из исходного кода вам понадобится примерно 20 гигабайт, а для инсталляции ещё около 5 гигабайт дискового пространства. Собранное таким образом ядро не будет на 100% идентично ядру в пакете дистрибутива, так как будет различаться сборочная среда — то какими утилитами и компилятором собиралось ваше ядро.

Настраиваем сборочную среду

Под root ставим необходимые пакеты для сборки ядра (в Сизифе):

 # apt-get update
 # apt-get install -y rpm-build git bc dwarves flex libelf-devel zlib-devel openssl openssl-devel

Получаем исходный код

Получите исходный код как описано в статье "Получение исходного кода ядер Альт с помощью Git" и не забудьте проверить его целостность.

Конфигурация ядра

Конечно можно взять готовый конфиг из /boot/config-* или /proc/config.gz, но вероятно, он не точно соответствует версии ядра, которую вы собираете — поэтому воспроизведем генерацию конфига как она происходит при сборке пакета.

Конфиг собирается из частей находящихся в файлах config*, где к основному конфигу config добавляются конфиги соответствующих архитектуре (config-архитектура, в примере мы будем использовать переменную bash $HOSTTYPE для её определения) и флейвору (например для std-def добавляется config-std, а для un-def не добавляется).

 $ make mrproper
 $ scripts/kconfig/merge_config.sh -m config config-$HOSTTYPE config-std
 $ make olddefconfig
Примечание: На этом этапе вы можете редактировать получившийся .config или добавить свой патч. Например, для ускорения сборки и уменьшения размера итогового ядра (собранное ядро уменьшится примерно на 14 гигабайт, а инсталлированное примерно на 4.5 гигабайта) можно отключить отладочную информацию:
 $ scripts/config -d DEBUG_INFO

Компиляция ядра

Примечание: Компиляцию лучше производить используя параллельную сборку с опцией -j количество_потоков, рекомендуемое количество потоков равно количеству ядер в системе (вывод утилиты nproc).
 $ make -j$(nproc) bzImage
 $ make -j$(nproc) modules

Инсталляция ядра в систему

Снова под root, зайдите в каталог с ядром:

 # make -j$(nproc) modules_install
 # make install

Шаг make modules_install поместит модули ядра в каталог /lib/modules/KERNELRELEASE, где KERNELRELEASE — строка с версией ядра (её можно посмотреть запустив под пользователем make kernelrelease, например, это может быть 5.15.77+.)

Шаг make install поместит файлы config, System.map, vmlinuz в каталог /boot, там же будет сгенерирован initrd. При этом, все файлы будут иметь суффикс -KERNELRELEASE и будут поставлены симлинки initrd и vmlinuz на новое ядро — таким образом, загрузка ядра по умолчанию (из первого пункта загрузчика) будет в это ядро.