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

Материал из ALT Linux Wiki
(span)
Строка 7: Строка 7:
Под '''root''' ставим необходимые пакеты и настраиваем hasher:
Под '''root''' ставим необходимые пакеты и настраиваем hasher:


   root# '''apt-get''' update
   <span style="color:brown">root#</span> '''apt-get''' update
   root# '''apt-get''' install -y hasher gear kernel-build-tools
   <span style="color:brown">root#</span> '''apt-get''' install -y hasher gear kernel-build-tools


Для вашего пользователя добавляем пользователей-сателлитов. Допустим, у вас рабочий пользователь '''devel''', тогда команды следующие:
Для вашего пользователя добавляем пользователей-сателлитов. Допустим, у вас рабочий пользователь '''devel''', тогда команды следующие:


   root# '''hasher-useradd''' devel
   <span style="color:brown">root#</span> '''hasher-useradd''' devel
   Adding user devel to group devel_a
   <span style="color:gray">Adding user devel to group devel_a
   Adding user devel to group devel_b
   Adding user devel to group devel_b
   Adding user devel to group hashman
   Adding user devel to group hashman</span>


Добавляем в <code>/etc/hasher-priv/system</code> строки:
Добавляем в <code>/etc/hasher-priv/system</code> строки:
Строка 25: Строка 25:
Запускаем необходимый сервис:
Запускаем необходимый сервис:


   root# '''systemctl''' enable --now hasher-privd
   <span style="color:brown">root#</span> '''systemctl''' enable --now hasher-privd


=== Настройка пользователя ===
=== Настройка пользователя ===
Строка 31: Строка 31:
Под пользователем создаем рабочий и конфигурационный каталоги:
Под пользователем создаем рабочий и конфигурационный каталоги:


   $ '''mkdir''' -p ~/hasher ~/.hasher
   <span style="color:blue">$</span> '''mkdir''' -p ~/hasher ~/.hasher


Дополнительно нужно сконфигурировать hasher, например для сборки из Сизифа под x86_64, примеры содержимого трех конфигурационных файлов:
Дополнительно нужно сконфигурировать hasher, например для сборки из Сизифа под x86_64, примеры содержимого трех конфигурационных файлов:
Строка 67: Строка 67:
Самый простой вариант — собрать из пакетного Git тэга. Для этого находим нужный тэг — у ядра они как правило начинаются на <code>kernel-image-</code> содержат флейвор, версию и релиз через дефис. Например, вы хотите собрать тэг <code>kernel-image-std-def-5.15.78-alt1</code>.
Самый простой вариант — собрать из пакетного Git тэга. Для этого находим нужный тэг — у ядра они как правило начинаются на <code>kernel-image-</code> содержат флейвор, версию и релиз через дефис. Например, вы хотите собрать тэг <code>kernel-image-std-def-5.15.78-alt1</code>.


   linux$ '''gear-hsh''' -t kernel-image-std-def-5.15.78-alt1 |& tee build.log
   <span style="color:blue">linux$</span> '''gear-hsh''' -t kernel-image-std-def-5.15.78-alt1 |& tee build.log
   ...
   <span style="color:gray">...
   Wrote: /usr/src/RPM/SRPMS/kernel-image-std-def-5.15.78-alt1.src.rpm (w2T16.xzdio)
   Wrote: /usr/src/RPM/SRPMS/kernel-image-std-def-5.15.78-alt1.src.rpm (w2T16.xzdio)
   Wrote: /usr/src/RPM/RPMS/x86_64/kernel-image-std-def-5.15.78-alt1.x86_64.rpm (w2T16.xzdio)
   Wrote: /usr/src/RPM/RPMS/x86_64/kernel-image-std-def-5.15.78-alt1.x86_64.rpm (w2T16.xzdio)
   ...
   ...</span>


На производительной машине это может занять 20-30 минут. RPM пакеты появятся в архитектурно-зависимых каталогах в <code>~/hasher/repo/</code> (пути из строк <code>Wrote: /usr/src/RPM/…</code> это пути внутри chroot hasher'а).
На производительной машине это может занять 20-30 минут. RPM пакеты появятся в архитектурно-зависимых каталогах в <code>~/hasher/repo/</code> (пути из строк <code>Wrote: /usr/src/RPM/…</code> это пути внутри chroot hasher'а).
Строка 81: Строка 81:
В релизном тэге могут содержаться важные параметры сборки — для ядра это флейвор (kflavour). Для сборки без тэга необходимо его установить в правильное значение (и не забывать менять, если вы собираете ядро другого флейвора) в Git конфиге репозитория:
В релизном тэге могут содержаться важные параметры сборки — для ядра это флейвор (kflavour). Для сборки без тэга необходимо его установить в правильное значение (и не забывать менять, если вы собираете ядро другого флейвора) в Git конфиге репозитория:


   linux$ '''git config''' --local gear.specsubst.kflavour std-def
   <span style="color:blue">linux$</span> '''git config''' --local gear.specsubst.kflavour std-def


Если вы не член ALT Linux Team, то надо отключить некоторые проверки при сборке пакетов, добавив в <code>~/.hasher/config</code> параметр <code>no_sisyphus_check=</code> и указать ваш Е-мэйл адрес в <code>packager=</code>:
Если вы не член ALT Linux Team, то надо отключить некоторые проверки при сборке пакетов, добавив в <code>~/.hasher/config</code> параметр <code>no_sisyphus_check=</code> и указать ваш Е-мэйл адрес в <code>packager=</code>:
Строка 90: Строка 90:
Затем внесите ваши изменения, для пример отключим DEBUG_INFO, который включен в <code>config</code>:
Затем внесите ваши изменения, для пример отключим DEBUG_INFO, который включен в <code>config</code>:


   linux$ '''scripts/config''' --file config -d DEBUG_INFO
   <span style="color:blue">linux$</span> '''scripts/config''' --file config -d DEBUG_INFO
   linux$ '''git commit''' -a -m "Turn off DEBUG_INFO"
   <span style="color:blue">linux$</span> '''git commit''' -a -m "Turn off DEBUG_INFO"


Если вы не меняли версию ядра а лишь применили изменения конфигурации или наложили патч, то поменяйте в <code>kernel-image.spec</code> сверху, в строке <code>Release:</code> число после <code>alt</code> (например с <code>alt1</code> на <code>alt2</code>). Это позволит не перепутать собранное вами ядро с ядром из репозитория. Данное изменение требует добавления записи в <code>%changelog</code>:
Если вы не меняли версию ядра а лишь применили изменения конфигурации или наложили патч, то поменяйте в <code>kernel-image.spec</code> сверху, в строке <code>Release:</code> число после <code>alt</code> (например с <code>alt1</code> на <code>alt2</code>). Это позволит не перепутать собранное вами ядро с ядром из репозитория. Данное изменение требует добавления записи в <code>%changelog</code>:


   linux$ '''perl''' -pi -e 's/^(Release:.*alt)(\d+)/$1.($2+1)/e' kernel-image.spec
   <span style="color:blue">linux$</span> '''perl''' -pi -e 's/^(Release:.*alt)(\d+)/$1.($2+1)/e' kernel-image.spec
   linux$ '''safe-add-changelog''' -e "- Turned off DEBUG_INFO." kernel-image.spec
   <span style="color:blue">linux$</span> '''safe-add-changelog''' -e "- Turned off DEBUG_INFO." kernel-image.spec


Не обязательный шаг -- коммитим изменение spec:
Не обязательный шаг -- коммитим изменение spec:


   linux$ gear-commit -a --no-edit
   <span style="color:blue">linux$</span> gear-commit -a --no-edit


После этого воспользуемся опцией <code>--commit</code> у <code>gear-hsh</code>, которая делает автоматический временный коммит и применяет kflavour, который мы ранее ставили в конфиге. Эту опцию надо применять даже в случае если вы уже закоммитили ваши изменения, но собираете не из тэга.
После этого воспользуемся опцией <code>--commit</code> у <code>gear-hsh</code>, которая делает автоматический временный коммит и применяет kflavour, который мы ранее ставили в конфиге. Эту опцию надо применять даже в случае если вы уже закоммитили ваши изменения, но собираете не из тэга.


   linux$ '''gear-hsh''' --commit |& tee build.log
   <span style="color:blue">linux$</span> '''gear-hsh''' --commit |& tee build.log


== Сборка из своего тэга ==
== Сборка из своего тэга ==
Строка 110: Строка 110:
Аналогично предыдущему варианту, 1) прописывать флейвор к конфиг не нужно, 2) коммитим свои изменения, 3) ставим тэг (например, он будет называться <code>test1</code>) командой <code>gear-create-tag</code> и 4) собираем из тэга:
Аналогично предыдущему варианту, 1) прописывать флейвор к конфиг не нужно, 2) коммитим свои изменения, 3) ставим тэг (например, он будет называться <code>test1</code>) командой <code>gear-create-tag</code> и 4) собираем из тэга:


   linux$ '''gear-create-tag''' -n test1 -s kflavour=std-def
   <span style="color:blue">linux$</span> '''gear-create-tag''' -n test1 -s kflavour=std-def
   linux$ '''gear-hsh''' -t test1 |& tee build.log
   <span style="color:blue">linux$</span> '''gear-hsh''' -t test1 |& tee build.log

Версия от 05:01, 26 ноября 2022

Самостоятельная сборка ядра с помощью средства пакетирования (hasher) на примере std-def

Все пакеты в Альт собираются с помощью инструмента hasher и ядро не исключение. Для того, чтоб воспроизвести сборку пакета ядра вам понадобится около 26 гигабайт дискового пространства. Сборка не будет на 100% совпадать с оригинальным пакетом так как у вас будет различаться сборочная среда — версии утилит с помощью которых осуществлялась сборка.

Настраиваем использование hasher

Настройка системы

Под root ставим необходимые пакеты и настраиваем hasher:

 root# apt-get update
 root# apt-get install -y hasher gear kernel-build-tools

Для вашего пользователя добавляем пользователей-сателлитов. Допустим, у вас рабочий пользователь devel, тогда команды следующие:

 root# hasher-useradd devel
 Adding user devel to group devel_a
 Adding user devel to group devel_b
 Adding user devel to group hashman

Добавляем в /etc/hasher-priv/system строки:

 allowed_mountpoints=/proc,/dev/pts,/dev/shm,/sys
 allowed_devices=/dev/kvm
 allow_ttydev=yes

Запускаем необходимый сервис:

 root# systemctl enable --now hasher-privd

Настройка пользователя

По умолчанию hasher использует системные APT репозитории, но все это настраивается (через ~/.hasher/config документация в man hsh). Под пользователем создаем рабочий и конфигурационный каталоги:

 $ mkdir -p ~/hasher ~/.hasher

Дополнительно нужно сконфигурировать hasher, например для сборки из Сизифа под x86_64, примеры содержимого трех конфигурационных файлов:

Файл ~/.hasher/config

 known_mountpoints=/proc,/dev/pts,/dev/kvm
 lazy_cleanup=yes
 def_target=x86_64
 apt_config=~/.hasher/apt.conf

lazy_cleanup=yes не обязателен и нужен для того чтоб сборочная среда не была очищена после сборки, если вы захотите ей воспользоваться через hsh-shell.

Файл ~/.hasher/apt.conf

 Dir::Etc::main "/dev/null";
 Dir::Etc::parts "/var/empty";
 Dir::Etc::SourceParts "/var/empty";
 Dir::Etc::SourceList "/home/devel/.hasher/sources.list";

Обратите внимание, что в параметре SourceList указан полный путь в домашний каталог вашего пользователя devel.

Файл ~/.hasher/sources.list

rpm [alt] http://ftp.altlinux.org/pub/distributions/ALTLinux Sisyphus/x86_64 classic
rpm [alt] http://ftp.altlinux.org/pub/distributions/ALTLinux Sisyphus/noarch classic
Примечание: Соответственно, для сборки под p10, нужно заменить тут Sisyphus на p10/branch, в этом случае [alt] надо заменить на [p10]. (Значение в квадратных скобках указывает, какими ключами проверять подписи при установке пакетов, поэтому отсутствие в этих ссылках https не критично.) Для сборки под другую архитектуру заменяйте x86_64, скажем, на i586 (так же надо поменять значение у def_target в ~/.hasher/config).

Для того чтоб убедиться, что hasher настроен и работает можно запустить hsh --init.

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

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

Сборка из пакетного тэга

Самый простой вариант — собрать из пакетного Git тэга. Для этого находим нужный тэг — у ядра они как правило начинаются на kernel-image- содержат флейвор, версию и релиз через дефис. Например, вы хотите собрать тэг kernel-image-std-def-5.15.78-alt1.

 linux$ gear-hsh -t kernel-image-std-def-5.15.78-alt1 |& tee build.log
 ...
 Wrote: /usr/src/RPM/SRPMS/kernel-image-std-def-5.15.78-alt1.src.rpm (w2T16.xzdio)
 Wrote: /usr/src/RPM/RPMS/x86_64/kernel-image-std-def-5.15.78-alt1.x86_64.rpm (w2T16.xzdio)
 ...

На производительной машине это может занять 20-30 минут. RPM пакеты появятся в архитектурно-зависимых каталогах в ~/hasher/repo/ (пути из строк Wrote: /usr/src/RPM/… это пути внутри chroot hasher'а).

Сборка без тэга

Более сложный вариант сборки, но позволяющий вносить ваши изменения.

В релизном тэге могут содержаться важные параметры сборки — для ядра это флейвор (kflavour). Для сборки без тэга необходимо его установить в правильное значение (и не забывать менять, если вы собираете ядро другого флейвора) в Git конфиге репозитория:

 linux$ git config --local gear.specsubst.kflavour std-def

Если вы не член ALT Linux Team, то надо отключить некоторые проверки при сборке пакетов, добавив в ~/.hasher/config параметр no_sisyphus_check= и указать ваш Е-мэйл адрес в packager=:

 no_sisyphus_check="packager,changelog,gpg"
 packager="Test Test <test@example.org>"

Затем внесите ваши изменения, для пример отключим DEBUG_INFO, который включен в config:

 linux$ scripts/config --file config -d DEBUG_INFO
 linux$ git commit -a -m "Turn off DEBUG_INFO"

Если вы не меняли версию ядра а лишь применили изменения конфигурации или наложили патч, то поменяйте в kernel-image.spec сверху, в строке Release: число после alt (например с alt1 на alt2). Это позволит не перепутать собранное вами ядро с ядром из репозитория. Данное изменение требует добавления записи в %changelog:

 linux$ perl -pi -e 's/^(Release:.*alt)(\d+)/$1.($2+1)/e' kernel-image.spec
 linux$ safe-add-changelog -e "- Turned off DEBUG_INFO." kernel-image.spec

Не обязательный шаг -- коммитим изменение spec:

 linux$ gear-commit -a --no-edit

После этого воспользуемся опцией --commit у gear-hsh, которая делает автоматический временный коммит и применяет kflavour, который мы ранее ставили в конфиге. Эту опцию надо применять даже в случае если вы уже закоммитили ваши изменения, но собираете не из тэга.

 linux$ gear-hsh --commit |& tee build.log

Сборка из своего тэга

Аналогично предыдущему варианту, 1) прописывать флейвор к конфиг не нужно, 2) коммитим свои изменения, 3) ставим тэг (например, он будет называться test1) командой gear-create-tag и 4) собираем из тэга:

 linux$ gear-create-tag -n test1 -s kflavour=std-def
 linux$ gear-hsh -t test1 |& tee build.log