LINUX.ORG.RU

Сборка ядра Fedora

 ,


0

2

Мне надо научиться собирать ядро, что бы в дальнейшем пересобирать его с флагом, которого нет по умолчанию в базовом ядре федора, из за чего поддержка моего оборудования не полная. Опыта сборки ядра нет. Опыта сборки rpm нет.

Я использую Fedora 27, и пытался пользоваться инструкцией https://fedoramagazine.org/building-fedora-kernel она выглядит достаточно простой, кроме того, я так понял, что использование fedpkg проще и удобней чем стандартный rpmdev. Поэтому я не стал рассматривать в качестве обучения инстукцию https://wiki.russianfedora.pro/index.php?title=Сборка_собственного_ядра_Fedora Во всяком случае, пока не стал.

Для начала мне нужно, что бы у меня хотя бы базовое ядро из исходников Fedora собралось, но у меня и это не выходит. Не говоря уже о чём то большем.

Команда $ fedpkg local. У меня заканчивается вот так

    строка 1044: Possible unexpanded macro в: %package %{pae}debug-modules-extra
    строка 1044: Possible unexpanded macro в: Provides: kernel-%{pae}debug-modules-extra-x86_64 = 4.13.15-300.my_kernel.fc27+%{pae}debug
    строка 1044: Possible unexpanded macro в: Provides: kernel-%{pae}debug-modules-extra = 4.13.15-300.my_kernel.fc27+%{pae}debug
    строка 1044: Possible unexpanded macro в: Provides: kernel-%{pae}debug-modules-extra-uname-r = 4.13.15-300.my_kernel.fc27.x86_64+%{pae}debug
    строка 1044: Possible unexpanded macro в: Requires: kernel-uname-r = 4.13.15-300.my_kernel.fc27.x86_64+%{pae}debug
    строка 1044: Possible unexpanded macro в: Requires: kernel-%{pae}debug-modules-uname-r = 4.13.15-300.my_kernel.fc27.x86_64+%{pae}debug
    строка 1044: Possible unexpanded macro в: %package %{pae}debug-debuginfo
    Неверный код возврата из /var/tmp/rpm-tmp.h9GVrK (%build)


Ошибки сборки пакетов:
Could not execute local: rpmbuild --define '_sourcedir /home/sergey/kernel' --define '_specdir /home/sergey/kernel' --define '_builddir /home/sergey/kernel' --define '_srcrpmdir /home/sergey/kernel' --define '_rpmdir /home/sergey/kernel' --define 'dist .fc27' --define 'fedora 27' --eval '%undefine rhel' --define 'fc27 1' -ba /home/sergey/kernel/kernel.spec | tee .build-4.13.15-300.my_kernel.fc27.log
[sergey@localhost kernel]$ 
Я не знаю сохраняются ли подробные логи в такой ситуации, но например в .build-4.13.15-300.my_kernel.fc27.log я ничего итересного не нашёл. В любом случае. Я готов предоставить любые данные, только пожалуйста помогите понять причину проблемы. Лог терминала начиная с установки fedora-packager здесь http://my-files.ru/save/g0xjp8/termminal_log.tar.xz]. Сборка осущеставлялась на полностью дефолтной системе Fedora Workstation 27, с последними обновлениями на текущий момент.

Ответ на: комментарий от nvl

Ничего я пока не включаю. Собрать ядро для федора из исходников федора, без изменений не выходит. Я так много хочу разве? В начале первый шаг надо сделать, прежде чем переходить ко второму.

sciencel
() автор топика

Что то ты не правильно делаешь. Должно всё работать. В логах не видно что ты kernel.spec правил.

anonymous
()
Ответ на: комментарий от sciencel

Ставишь mock

# dnf install mock
Добавляешь себя в группу
# usermod -a -G mock sergey

И все, погнал сборку под свою архитектуру:

$ mock -r fedora-27-x86_64 rebuild kernel-1.1-1.src.rpm

nvl ★★★
()
Последнее исправление: nvl (всего исправлений: 1)
Ответ на: комментарий от anonymous

Вот мой правленный kernel.spec https://drop.me/aAN0Q7 Более того, раньше я пробовал в виртуалке ради интереса собирать даже на базе Fedora 24, так же неудачно завершается. Возможно тут моя вина, только в чём...

sciencel
() автор топика
Ответ на: комментарий от nvl

Я просто чётко следовал пошаговому руководству. Я менял имя ядра на my_kernel. Я даже имя дал то, которое указано в примере.

sciencel
() автор топика
Ответ на: комментарий от sciencel

Скачай srpm ядра

dnf download --source kernel
И собери через mock. Если все нормально, то в конфиге включи CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y и в spec увеличь релиз на единицу и опять собери через mock. Все просто.

nvl ★★★
()
Ответ на: комментарий от nvl

Мне удалось собрать ядро без проблем, как с помощью варинта который посоветовал ты «nvl», так и с помощью инструкции из fedoramagazine.org (ещё +2 способа, какой же лучше). Раньше сборка не завершалась удачно по причине нехватки системных ресурсов. Сборку производил в виртуальной машине, и чего то не хватало, или ОЗУ, или размера диска. Скорей всего первого. Я увеличил размер диска и добавил SWAP и всё теперь хорошо. Пока не понимаю, почему при использовании fedpkg, ядро получается новей, это типа скачивается из Rawhide?

Пока пытаюсь разобраться где находится тот самый config который мне надо править.

В дальнейшем мне нужно будет разобраться как всё это делать в COPR.

Любая помощь и любые советы от вас приветствуются.

sciencel
() автор топика
Ответ на: комментарий от sciencel

по причине нехватки системных ресурсов. Сборку производил в виртуальной машине

Вся прелесть mock в том, что создается временное чистое chroot-окружение, все необходимое ставится автоматом. Система вообще не загаживается. Потому нет никакой необходимости в виртуальной машине.

Пока пытаюсь разобраться где находится тот самый config который мне надо править.

kernel-x86_64.config

# CONFIG_ACPI_REV_OVERRIDE_POSSIBLE is not set

nvl ★★★
()
Ответ на: комментарий от nvl

Спасибо, это понятно. Сейчас идёт тестовая сборка с помощью fedpkg. А насчёт mock и chroot интересно... В случае если твоим способом получать исходник dnf download --source kernel Он скачивается в каком то архиве, как мне вносить изменения в него лучше?

sciencel
() автор топика
Ответ на: комментарий от sciencel

Нужно создать дерево каталогов, также как у тебя в виртуалке (rpmdev-setuptree).

Этот, как ты называешь, какой-то архив - обычный rpm с исходниками. Его нужно установить командой

$ rpm -ihv kernel-4.13.13-300.fc27.src.rpm
После этой команды все исходные данные будут распакованы в директорию ~/rpmbuild/SOURCES, а kernel.spec в ~/rpmbuild/SPECS где ты и сможешь их править.

После правки нужно будет собрать обратно kernel.src.rpm командой

$ rpmbuild -bs kernel.spec
После сборки пакет kernel-4.13.13-300.dell.fc27.src.rpm будет в ~/rpmbuild/SRPMS

Ну а дальше ты знаешь уже

$ mock -r fedora-27-x86_64 rebuild kernel-4.13.13-300.dell.fc27.src.rpm

PS
В spec лучше всего сделать как в COPR-репозитории, который ты приводил, т.е. раскоментировать 27-ю строчку и исправить на

%define buildid .dell
Тогда твое ядро будет: kernel-4.13.13-300.dell.fc27.src.rpm

nvl ★★★
()
Последнее исправление: nvl (всего исправлений: 3)
Ответ на: комментарий от nvl

Этот, как ты называешь, какой-то архив - обычный rpm с исходниками. Его нужно установить командой

rpm -ihv kernel-4.13.13-300.fc27.src.rpm

Если его надо устанавливать, имеет ли смысл его в начале скачивать а потом устанавливать. Может быть проще сразу дать команду на установку по типу тому как это принято в бинарных пакетах

dnf install name_packager 
Я не знаю можно ли так, просто консультируюсь.

sciencel
() автор топика
Ответ на: комментарий от nvl

В spec лучше всего сделать как в COPR-репозитории, который ты приводил, т.е. раскоментировать 27-ю строчку и исправить на

Это логично. Я так и собрал себе. Но всё же я целюсь в итоге на создание copr репозитория. Так будет намного удобней.

sciencel
() автор топика
Ответ на: комментарий от nvl

После этой команды все исходные данные будут распакованы в директорию ~/rpmbuild/SOURCES, а kernel.spec в ~/rpmbuild/SPECS где ты и сможешь их править.

Это всё? А потом достаточно просто удалить каталог rpmbuild и следов от исходников в системе не останется? Или src.rpm надо удалять как бинарный rpm? :)

sciencel
() автор топика
Ответ на: комментарий от sciencel

rpmbuild и его дерево пригодится, места он не занимает. Все файлы в дереве можно удалять как обычные файлы.

nvl ★★★
()
Ответ на: комментарий от nvl

А зачем, оно может мне пригодится? Я так понимаю, что пересборка если понадобиться, то это когда выйдет новая версия, а от новой версии, мне скачивать новые исходники и распаковывать, и править... Кстати, как я могу запросить у репозитория с терминала информацию о последней доступной версии. Ну то есть, что бы не скачивать каждый раз исходник

dnf download --source kernel
, а потом видеть, что это та же самая версия. А просто спросить имя файла srpm? Или может есть какие то другие методы получения такой информации, email рассылка, copr уведомление, или что нибудь в таком духе...

sciencel
() автор топика
Ответ на: комментарий от sciencel

А зачем, оно может мне пригодится? Я так понимаю, что пересборка если понадобиться, то это когда выйдет новая версия

Сам ответил на свой вопрос.

как я могу запросить у репозитория с терминала информацию о последней доступной версии.

Например так:

dnf info kernel | grep Version

nvl ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.