Kernel/build packages: различия между версиями
Vt (обсуждение | вклад) |
Vt (обсуждение | вклад) м (→Сборка без тэга: fix typo) |
||
(не показано 26 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
= Самостоятельная сборка ядра с помощью средства пакетирования (hasher) на примере std-def = | = Самостоятельная сборка ядра с помощью средства пакетирования (hasher) на примере std-def = | ||
Все пакеты в Альт собираются с помощью инструмента [[Hasher|hasher]] и ядро не исключение. Для того, чтоб воспроизвести сборку пакета ядра вам понадобится около | Все пакеты в Альт собираются с помощью инструмента [[Hasher|hasher]] и ядро не исключение. Для того, чтоб воспроизвести сборку пакета ядра вам понадобится около 26 гигабайт дискового пространства. Сборка не будет на 100% совпадать с оригинальным пакетом так как у вас будет различаться сборочная среда — версии утилит с помощью которых осуществлялась сборка. | ||
== Настраиваем использование hasher == | == Настраиваем использование hasher == | ||
Строка 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 | <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> строки: | ||
allowed_mountpoints=/proc,/dev/pts,/dev/shm,/sys | <span style="color:green">allowed_mountpoints=/proc,/dev/pts,/dev/shm,/sys | ||
allowed_devices=/dev/kvm | allowed_devices=/dev/kvm | ||
allow_ttydev=yes | allow_ttydev=yes</span> | ||
Запускаем необходимый сервис: | Запускаем необходимый сервис: | ||
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/config ==== | ==== Файл ~/.hasher/config ==== | ||
known_mountpoints=/proc,/dev/pts,/dev/kvm | <span style="color:green">known_mountpoints=/proc,/dev/pts,/dev/kvm | ||
lazy_cleanup=yes | lazy_cleanup=yes | ||
def_target=x86_64 | def_target=x86_64 | ||
apt_config=~/.hasher/apt.conf | apt_config=~/.hasher/apt.conf</span> | ||
<code>lazy_cleanup=yes</code> не обязателен и нужен для того чтоб сборочная среда не была очищена после сборки, если вы захотите ей воспользоваться через <code>hsh-shell</code>. | <code>lazy_cleanup=yes</code> не обязателен и нужен для того чтоб сборочная среда не была очищена после сборки, если вы захотите ей воспользоваться через <code>hsh-shell</code>. | ||
Строка 46: | Строка 46: | ||
==== Файл ~/.hasher/apt.conf ==== | ==== Файл ~/.hasher/apt.conf ==== | ||
Dir::Etc::main "/dev/null"; | <span style="color:green">Dir::Etc::main "/dev/null"; | ||
Dir::Etc::parts "/var/empty"; | Dir::Etc::parts "/var/empty"; | ||
Dir::Etc::SourceParts "/var/empty"; | Dir::Etc::SourceParts "/var/empty"; | ||
Dir::Etc::SourceList "/home/devel/.hasher/sources.list"; | Dir::Etc::SourceList "/home/devel/.hasher/sources.list";</span> | ||
Обратите внимание, что | Обратите внимание, что в параметре <code>SourceList</code> указан полный путь в домашний каталог вашего пользователя ''devel''. | ||
==== Файл ~/.hasher/sources.list ==== | ==== Файл ~/.hasher/sources.list ==== | ||
<span style="color:green">rpm [alt] <nowiki>http://ftp.altlinux.org/pub/distributions/ALTLinux</nowiki> Sisyphus/x86_64 classic | |||
rpm [alt] http://ftp.altlinux.org/pub/distributions/ALTLinux Sisyphus/x86_64 classic | rpm [alt] <nowiki>http://ftp.altlinux.org/pub/distributions/ALTLinux</nowiki> Sisyphus/noarch classic</span> | ||
rpm [alt] http://ftp.altlinux.org/pub/distributions/ALTLinux Sisyphus/noarch classic | {{Примечание| Соответственно, для сборки под '''p10''', нужно заменить тут <code>Sisyphus</code> на <code>p10/branch</code>, в этом случае <code>[alt]</code> надо заменить на <code>[p10]</code>. (Значение в квадратных скобках указывает, какими ключами проверять подписи при установке пакетов, поэтому отсутствие в этих ссылках <code>https</code> не критично.) Для сборки под другую архитектуру заменяйте <code>x86_64</code>, скажем, на <code>i586</code> (так же надо поменять значение у <code>def_target</code> в <code>~/.hasher/config</code>).}} | ||
Соответственно, для сборки под p10, | |||
Для того чтоб убедиться, что hasher настроен и работает можно запустить <code>hsh --init</code>. | Для того чтоб убедиться, что hasher настроен и работает можно запустить <code>hsh --init</code>. | ||
Строка 69: | Строка 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/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'а). | |||
== Сборка без тэга == | |||
Более сложный вариант сборки, но позволяющий вносить ваши изменения. | |||
В релизном тэге могут содержаться важные параметры сборки — для ядра это флейвор (kflavour). Для сборки без тэга необходимо его установить в правильное значение (и не забывать менять, если вы собираете ядро другого флейвора) в Git конфиге репозитория: | |||
<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>: | |||
<span style="color:green">no_sisyphus_check="packager,changelog,gpg" | |||
packager="Test Test <test@example.org>"</span> | |||
Затем внесите ваши изменения, для примера отключим DEBUG_INFO, который включен в <code>config</code>: | |||
<span style="color:blue">linux$</span> '''scripts/config''' --file config -d 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>: | |||
<span style="color:blue">linux$</span> '''perl''' -pi -e 's/^(Release:.*alt)(\d+)/$1.($2+1)/e' kernel-image.spec | |||
<span style="color:blue">linux$</span> '''safe-add-changelog''' -e "- Turned off DEBUG_INFO." kernel-image.spec | |||
Не обязательный шаг -- коммитим изменение spec: | |||
<span style="color:blue">linux$</span> gear-commit -a --no-edit | |||
После этого воспользуемся опцией <code>--commit</code> у <code>gear-hsh</code>, которая делает автоматический временный коммит и применяет kflavour, который мы ранее ставили в конфиге. Эту опцию надо применять даже в случае если вы уже закоммитили ваши изменения, но собираете не из тэга. | |||
<span style="color:blue">linux$</span> '''gear-hsh''' --commit |& tee build.log | |||
== Сборка из своего тэга == | |||
Аналогично предыдущему варианту, 1) прописывать флейвор к конфиг не нужно, 2) коммитим свои изменения, 3) ставим тэг (например, он будет называться <code>test1</code>) командой <code>gear-create-tag</code> и 4) собираем из тэга: | |||
<span style="color:blue">linux$</span> '''gear-create-tag''' -n test1 -s kflavour=std-def | |||
<span style="color:blue">linux$</span> '''gear-hsh''' -t test1 |& tee build.log |
Текущая версия от 15:25, 13 октября 2024
Самостоятельная сборка ядра с помощью средства пакетирования (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
Для того чтоб убедиться, что 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