LINUX.ORG.RU
решено ФорумTalks

Пакетный менеджер, только для ядер?

 ,


0

1

Сложилась ситуация, что есть разные железки, да виртуалки под разные задачи, — если виртуалки ещё более-менее унифицированы, то для каждого железа хотелось бы иметь своё ядро по-отдельности. Просто чтоб нинужные фичи были отключены. Некоторые пакетные менеджеры позволяют собирать ядра с разными конфигами, чтобы из одного билд-скрипта получались разные пакеты. Но такое доступно не везде и не всех может устраивать.

Задумка в том, чтобы такой пакетный менеджер не был просто установщиком бинарных файлов, а можно было самому «на коленке» написать портянку текста для сборки ядра. Сценарий, который запускается, и ядро собирается.

Мой новый проект newkernel: https://github.com/sp00f1ng/newkernel

Он умеет скачивать ядро. Вот. Всё. :)

Ладно, не всё так просто. Для того, чтобы скачать сорцы ядра нужно выполнить одну простую команду:

cd `newkernel`

Да, вот так вот просто. newkernel скачает, распакует сорцы и вернёт директорию для команды cd чтобы туда зайти. После чего можно приступать к сборке.

Скрипт умный, и если долгое выполнение команды cd (пока ядро скачивается в фоне) отменить нажатием Ctrl + C, то повторным запуском загрузка будет продолжена с того момента, где остановилась.

Допустим, мы хотим ядро определённой версии. Не вопрос! Это по-умолчанию без параметров скачивается последнее ядро, а можно указать

cd `newkernel 5.7.0`

и получить определённую версию ядра.

Если ядро уже скачано и распаковано, то скрипт не будет его повторно скачивать, а просто выполнит make mrproper, после чего уже зайдёт в директорию с чистеньким ядром. Однако можно принудительно попросить скачать ядро ещё раз, если мы совсем параноики, для этого есть опция -f. press F to pay respect o7

cd `newkernel -f 5.4.3`

А ещё можно указать директорию, куда будут скачиваться сорцы, по-умолчанию это /usr/src

cd `newkernel -s /tmp`

Так вот после выполнения этой команды, вы оказываетесь в директории с сорцами ядра. Выполняете все необходимые настройки, ну там make defconfig, make.

После чего ядро нужно установить или получить архив со всеми файлами. Для этого есть команда welldone, она тоже возвращает просто путь, куда будет установлено ядро.

Например, чтобы запаковать полученное ядро в архив, просто выполните:

tar -cJvf ~/linux-latest.tar.xz -C `welldone` .

~/linux-latest.tar.xz с вашим ядром и модулями готов к распаковке в чрут или корень!

Ну а можно просто сразу в корень ядро со всеми модулями скопировать.

cp -a `welldone`/* /

Вот так всё просто. :)

Т.е. суть очень проста, вы используете cd `newkernel` чтобы скачать нужное ядро и зайти в директорию, затем выполняете команды, и в конце получаете `welldone` директорию со всеми установленными файлами и модулями ядра!

Для примера небольшой скрипт, который просто запускаете и он всё делает:

cd `newkernel`
make defconfig

# Sound
scripts/config -e SND_HDA_INPUT_BEEP
scripts/config -e SND_HDA_PATCH_LOADER
scripts/config -e SND_HDA_CODEC_REALTEK
scripts/config -e SND_HDA_CODEC_HDMI
scripts/config -e SND_USB_AUDIO
# AMD GPU
scripts/config -m DRM_AMDGPU
scripts/config -e DRM_AMD_ACP
# nVidia GPU
scripts/config -m DRM_NOUVEAU

make olddefconfig
make

cp -a `welldone`/* /

Как всё просто. :)

Перемещено Zhbert из linux-install

★★★★★

А хэш коммита можно указать?

anonymous
()

Не совсем понял. Это как genkernel, только без установки?

Radjah ★★★★★
()

в пакете (далее про deb, но не думаю что иные менее функциональны) есть скрипт пре-инсталл пост-инсталл.
через енти скрипты хоть полсистемы можешь перековырять.
создаешь свой реп с набором пакетов с нужными сорцами и скриптами по компиляции и установке ядра и профит.
система стандартная обновления и автообновления давно отработаны.

pfg ★★★★★
()

а пресеты есть какие-нибудь, чтобы всё не тыкать? типа «ядро без звука», «ядро для старых компов», «ядро для очень старых компов», «ядро для kvm»?

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

нет, пресетов нету, пишите свои и предлагайте )

ядро для квм есть из коробки через make kvmconfig

Spoofing ★★★★★
() автор топика

Ты изобрёл emerge gentoo-sources + eselect?

upcFrost ★★★★★
()

Какой знатный велосипед. Линус в своё время что-бы не делать каждый раз так как вы - изобрёл GIT.

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

DawnCaster ★★
()
Последнее исправление: DawnCaster (всего исправлений: 1)

А нельзя вместо разных ядер использовать разный набор модулей ядра, которые можно положить в пакеты? Или ядро Линукса настолько монолитное, что так не работает?

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

:) так ты конфликов наделал и не умеешь их разруливать. Нужно работать с бранчами, чтоб такого было мало.

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

Нельзя гит заюзать в качестве основы

мы подумали и я решил........

ваша идея действительно имеет право на жизнь.

я думаю добавлю опцию (-m | --manager) git

в таком случае скрипт переключится с использования wget'а на git в качестве бэкенда, и будет не выкаичивать тарболлы определённых версий, а просто делать git clone, а затем git (какая команда переключиться в нужную ветку?)

вот. давайте так, будет норм ага?

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

Да, думаю так будет хорошо.

а затем git (какая команда переключиться в нужную ветку?)

git checkout

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

Хотя можно пойти ещё дальше. Можно единоразово сделать «git clone –bare» для создания единого локального репозитария. А из него уже делать в отдельных каталогах локальные копии для версии указанной пользователем на входе скрипта. Тогда ничего загружать вообще больше не придётся, только обновлять локальный репозитарий (можно это делать при запуске скрипта, в случае если нужный бранч, тэг, или коммит не найден).

DawnCaster ★★
()
Последнее исправление: DawnCaster (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.