- Kernel (Русский)/Arch Build System (Русский)
- Подготовка
- Редактирование PKGBUILD
- Отключение создания документации
- Изменение prepare()
- Обновление контрольных сумм
- Компиляция
- Установка
- Загрузчик
- Обновление
- Очистка
- Смотрите также
- Arch Linux User Repository
- miffe commented on 2023-06-17 21:58 (UTC)
- proledatarian commented on 2023-06-17 19:37 (UTC) (edited on 2023-06-17 19:45 (UTC) by proledatarian)
- miffe commented on 2023-06-07 19:48 (UTC)
- kola54453 commented on 2023-06-07 19:31 (UTC)
- gamezelda commented on 2023-04-24 22:49 (UTC)
- eggz commented on 2023-02-20 07:54 (UTC)
- Arch Linux User Repository
- City-busz commented on 2023-01-19 06:17 (UTC)
- jdev082 commented on 2022-08-01 22:46 (UTC)
- ReDemoNBR commented on 2022-04-19 21:10 (UTC) (edited on 2022-04-19 21:10 (UTC) by ReDemoNBR)
- jonathon commented on 2022-01-21 20:54 (UTC)
- r08 commented on 2022-01-19 15:58 (UTC) (edited on 2022-01-19 16:00 (UTC) by r08)
- darnrain commented on 2021-10-01 20:43 (UTC) (edited on 2021-10-15 05:49 (UTC) by darnrain)
- severach commented on 2021-10-01 01:33 (UTC) (edited on 2021-10-01 02:43 (UTC) by severach)
- darnrain commented on 2021-09-30 10:07 (UTC)
- bloat commented on 2021-09-29 23:27 (UTC)
Kernel (Русский)/Arch Build System (Русский)
Состояние перевода: На этой странице представлен перевод статьи Kernel/Arch Build System. Дата последней синхронизации: 30 октября 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
С помощью Arch Build System можно собрать собственное ядро на основе официального пакета linux . Данный метод автоматизирует весь процесс компиляции и основан на тщательно протестированном пакете. Отредактировав PKGBUILD, вы можете выбрать произвольные настройки ядра или добавить некоторые патчи.
Подготовка
Сборка происходит при помощи makepkg, поэтому необходимо следовать «лучшим практикам», приведённым в соответствующей статье. Например, запустить makepkg от root/sudo не получится; следовательно, прежде всего необходимо создать каталог build внутри домашнего каталога.
Для кастомизации необходимо чистое ядро. Следующие команды загрузят PKGBUILD и прочие файлы в каталог сборки:
$ pkgctl repo clone --protocol=https linux
В данный момент дерево файлов в каталоге должно иметь примерно следующий вид (могут быть дополнительные файлы):
~/build/linux/-+ +--config \__PKGBUILD
Наконец, добудьте из соответствующих источников прочие файлы, которые могут потребоваться (файлы с новыми настройками ядра, патчи и т.п.).
Редактирование PKGBUILD
Внесите необходимые изменения в PKGBUILD . Обратите внимание на параметр pkgbase — в нём следует указать название вашего нового пакета, например:
Важно: Ни в коем случае не добавляйте строку linux в массив provides . Ваше ядро не будет совместимо с двоичными модулями стандартного ядра, поэтому удовлетворить такую зависимость будет невозможно. По той же причине не добавляйте linux-headers в provides пакета с заголовочными файлами.
Отключение создания документации
Создание документации отнимает много времени в процессе компиляции. На данный момент (16 июня 2021) следующий патч к PKGBUILD позволяет её отключить:
63d63 < make htmldocs 194c194 < pkgname=("$pkgbase" "$pkgbase-headers" "$pkgbase-docs") --- >pkgname=("$pkgbase" "$pkgbase-headers")
Этот патч удаляет строку #63 и изменяет строку #194. Если изменения не получится применить корректно, отредактируйте файл вручную.
Изменение prepare()
Внутри этой функции можно применить необходимые патчи или изменить настройки сборки.
Если необходимо изменить несколько опций, отредактируйте файл настроек в исходниках.
Также можно воспользоваться графическим инструментом для переключения опций. Закомментируйте строку make olddefconfig в функции prepare() в файле PKGBUILD и добавьте свою утилиту.
. msg2 "Setting config. " cp ../config .config #make olddefconfig make nconfig # new CLI menu for configuration #make menuconfig # CLI menu for configuration #make xconfig # X-based configuration #make oldconfig # using old config from previous kernel version # . or manually edit .config make prepare .
Важно: У systemd есть несколько требований к настройкам ядра как для стандартного режима работы, так и для отдельных вариантов использования (например, UEFI) и специфичной функциональности (например, bootchart). Несоблюдение требований может привести к нестабильной работе и отказу системы. Список необходимых и рекомендуемых параметров находится в файле /usr/share/doc/systemd/README . Сверьтесь с ним перед компиляцией. Сами требования время от времени меняются, и поскольку Arch предполагает, что вы используете официальное ядро, то изменения никак не анонсируются. Перед установкой новой версии systemd изучите сообщение о релизе и убедитесь, что ваша конфигурация ядра соответствует новым требованиям systemd.
Обновление контрольных сумм
#Изменение prepare() предполагает, что файл $_srcname/.config может быть изменён. Поскольку этого файла не было во время загрузки файлов пакета, то makepkg не проверял его контрольную сумму (на самом деле проверен был файл $_srcname/../../config ).
Если вы заменили загруженный config другим, то перед запуском makepkg установите пакет pacman-contrib и обновите котрольные суммы командой:
Компиляция
Теперь можно скопилировать ядро командой makepkg .
Если для настройки параметров ядра была выбрана интерактивная программа (например, menuconfig), то во время компиляции потребуется ваше присутствие.
С параметром -s makepkg загрузит все необходимые зависимости, используемые последними ядрами, такие как xml и docs.
- Исходные коды ядра подписаны PGP, и makepkg проверит подписи. Подробнее см. makepkg#Проверка цифровых подписей.
- Компиляция может занять несколько часов в зависимости от мощности компьютера. Параллельная компиляция позволяет значительно ускорить процесс на многоядерных системах.
Установка
После компиляции в каталоге ~/build/linux появится два пакета, один для ядра и один — для заголовочных файлов. Их названия будут иметь примерно следующий вид:
linux-custom-5.8.12-x86_64.pkg.tar.zst linux-custom-headers-5.8.12-x86_64.pkg.tar.zst
Лучше всего установить оба пакета одной командой, т.к. они могут потребоваться одновременно (например, для DKMS).
# pacman -U linux-custom-headers-5.8.12-x86_64.pkg.tar.zst linux-custom-5.8.12-x86_64.pkg.tar.zst
(замените названия пакетов на свои).
Загрузчик
Если вы изменили значение pkgbase , чтобы новое ядро устанавливалось рядом со стандартным, то необходимо внести изменения в настройки загрузчика, добавив новые значения (‘default’ и ‘fallback’) для вашего ядра и его initramfs-образа.
Обновление
Предположим, имеется набор файлов с исходным кодом ядра Arch и их необходимо обновить. Это можно сделать с помощью https://github.com/archlinux/linux. В примерах ниже предполагается, что исходники находятся в каталоге ~/build/linux/ .
В Arch файлы с исходным кодом хранятся в двух локальных git-репозиториях. Репозиторий в каталоге archlinux-linux/ — локальный bare-репозиторий git, который указывает на https://github.com/archlinux/linux.git . Второй, в каталоге src/archlinux-linux/ , скачивает исходники из первого. Локальные патчи и сборка ядра должны выполняться в src/archlinux-linux/ .
Изначально метка HEAD локального bare-репозитория в archlinux-linux/ указывает на
$ cd ~/build/linux/archlinux-linux/ $ git log --oneline --max-count 1 HEAD
4010b622f1d2 Merge branch 'dax-fix-5.3-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm
т.е. где-то между v5.2.5-arch1 и v5.2.6-arch1.
А эта команда (показывает последнюю по времени метку) вывела более свежую метку archlinux, v5.2.7-arch1. Отсутствие новых меток означало бы, что исходники archlinux не изменились.
Теперь можно обновить файлы с исходным кодом:
$ cd ~/build/linux/src/archlinux-linux/ $ git checkout master $ git pull $ git fetch --tags --verbose $ git branch --verbose 5.2.7-arch1 v5.2.7-arch1 $ git checkout 5.2.7-arch1
Проверить, что всё верно, можно следующим образом:
$ git log --oneline 5.2.7-arch1 --max-count=7
13193bfc03d4 Arch Linux kernel v5.2.7-arch1 9475c6772d05 netfilter: nf_tabf676926c7f60les: fix module autoload for redir 498d650048f6 iwlwifi: Add support for SAR South Korea limitation bb7293abdbc7 iwlwifi: mvm: disable TX-AMSDU on older NICs f676926c7f60 ZEN: Add CONFIG for unprivileged_userns_clone 5e4e503f4f28 add sysctl to disallow unprivileged CLONE_NEWUSER by default 5697a9d3d55f Linux 5.2.7
В выводе видно archlinux-патчи между ядрами Arch Linux kernel v5.2.7-arch1 и Linux 5.2.7 .
Новейшие PKGBUILD и настройки ядра можно скачать командой git :
Теперь необходимо объединить файлы ~/build/linux/linux/* с файлами в каталоге ~/build/linux/ . Слияние можно выполнить вручную или с помощью подходящих утилит. Изучите раздел #Изменение prepare() и запустите вручную команды из PKGBUILD::prepare().
В этом месте необходимо выполнить makepkg —verifysource . Во время компиляции не забудьте также добавить опцию —noextract в команду makepkg , поскольку пакеты должны собираться так, будто исходники были извлечены командой makepkg —nobuild . Наконец, после этого можно вернуться к этапу #Установка.
Очистка
После объединения файлов имеет смысл удалить ~/build/linux/linux/ . Кроме того, ~/build/linux/src/archlinux продолжит собирать ветки вида 5.2.7-arch1 при последующих обновлениях. Ненужную ветку тоже можно удалить:
$ cd ~/build/linux/src/archlinux $ git branch --delete --force --verbose 5.2.7-arch1
Смотрите также
Arch Linux User Repository
@miffe Haven’t seen any other errors that seemed relevant. But feel free to take a look at the full log.
Sorry, just saw the error now:
CERT certs/signing_key.x509 At main.c:164: - SSL error:0480006C:PEM routines::no start line: crypto/pem/pem_lib.c:763 extract-cert: certs/signing_key.pem: Success make[2]: *** [certs/Makefile:74: certs/signing_key.x509] Error 1 make[2]: *** Deleting file 'certs/signing_key.x509' make[1]: *** [scripts/Makefile.build:494: certs] Error 2 make[1]: *** Waiting for unfinished jobs.
miffe commented on 2023-06-17 21:58 (UTC)
@proledatarian: That’s just a warning. The error would be somewhere above that.
proledatarian commented on 2023-06-17 19:37 (UTC) (edited on 2023-06-17 19:45 (UTC) by proledatarian)
Build process fails for me:
CC [M] fs/xfs/scrub/agheader_repair.o CC [M] fs/xfs/scrub/repair.o LD [M] fs/xfs/xfs.o make: *** [Makefile:2026: .] Error 2 make: *** Waiting for unfinished jobs. ./include/drm/drm_connector.h:203: warning: Enum value 'DRM_MODE_TV_MODE_MAX' not described in enum 'drm_connector_tv_mode'
This is corresponding to the following line in the makefile:
2024 | PHONY += $(build-dir) 2025 | $(build-dir): prepare 2026 | $(Q)$(MAKE) $(build)=$@ need-builtin=1 need-modorder=1 $(single-goals)
miffe commented on 2023-06-07 19:48 (UTC)
@kola54453: Had a disk crash. RAID is rebuilding. Will be up sometimes tomorrow.
kola54453 commented on 2023-06-07 19:31 (UTC)
getting this error on pacman miffe.db failed to download error: failed retrieving file ‘miffe.db’ from arch.miffe.org : Failed to connect to arch.miffe.org port 443 after 3193 ms: Couldn’t connect to server
gamezelda commented on 2023-04-24 22:49 (UTC)
FWIW the kernel can be successfully built with both CONFIG_X86_KERNEL_IBT and CONFIG_DEBUG_INFO_BTF in the config like in the Arch kernel by applying this patch: https://lore.kernel.org/bpf/20230418214925.ay3jpf2zhw75kgmd@treble/
eggz commented on 2023-02-20 07:54 (UTC)
@bittin it does !? This is amazing!
Arch Linux User Repository
I will try to apply the patch City-busz suggested in previous comment.
City-busz commented on 2023-01-19 06:17 (UTC)
I suggest to apply the following changes in order to avoid error during installation with kmod>=30: https://gitlab.manjaro.org/packages/core/linux419/-/commit/e3143217878250b8321e5927dc95543c166df8da
jdev082 commented on 2022-08-01 22:46 (UTC)
Latest: 4.19.254 Provides: 4.19.251
I use this package for perfect WiFi drivers. I hope you can update this soon.
ReDemoNBR commented on 2022-04-19 21:10 (UTC) (edited on 2022-04-19 21:10 (UTC) by ReDemoNBR)
Forgot to update the checksums for the patch-4.19.238.xz source
- md5sum: 240c7745ad92a96fee6c1bd9a0a179f4
- sha256sum: a76a953175f283ffb0e5b0f5471ffc96922a6332e2414d7de09d64ce72081926
jonathon commented on 2022-01-21 20:54 (UTC)
r08 commented on 2022-01-19 15:58 (UTC) (edited on 2022-01-19 16:00 (UTC) by r08)
FYI, if you’re running a non systemd setup, full disk encryption with luks+cryptsetup, and this kernel package; recent changes to cryptsetup makes the system unbootable.
Adding to the hook file install-encrypt:
below «add_binary ‘cryptsetup'» makes the system bootable again.
Just in case you have exotic setups hope this helps.
darnrain commented on 2021-10-01 20:43 (UTC) (edited on 2021-10-15 05:49 (UTC) by darnrain)
That worked I had coreutils 9.0-1 and downgraded to coreutils 8.32-1 and the linux-lts419 4.19.208-1 compiled just fine. Thanks
severach commented on 2021-10-01 01:33 (UTC) (edited on 2021-10-01 02:43 (UTC) by severach)
https://bugs.archlinux.org/task/72253 Only happens for me in chroot fakeroot. makepkg and yay running fakeroot outside of chroot work fine for me. Broken in coreutils 9.0-1. Downgrade to coreutils 8.32-1 or upgrade to 9.0-2.
Edit: outside only worked because it was still at 8.32-1. Upgrade to 9.0-1 and it fails everywhere.
darnrain commented on 2021-09-30 10:07 (UTC)
I cant seem to compile the new 4.19.208 I am getting an error message
==> ERROR: A failure occurred in package_linux-lts419-headers(). Aborting.
Anyone have any idea on how to fix this?
bloat commented on 2021-09-29 23:27 (UTC)
Stripping build tools. Adding symlink. Fixing permissions. ==> ERROR: A failure occurred in package_linux-lts419-headers(). Aborting. error making: linux-lts419
Copyright © 2004-2023 aurweb Development Team.
AUR packages are user produced content. Any use of the provided files is at your own risk.