Сложилась ситуация, что есть разные железки, да виртуалки под разные задачи, — если виртуалки ещё более-менее унифицированы, то для каждого железа хотелось бы иметь своё ядро по-отдельности. Просто чтоб нинужные фичи были отключены. Некоторые пакетные менеджеры позволяют собирать ядра с разными конфигами, чтобы из одного билд-скрипта получались разные пакеты. Но такое доступно не везде и не всех может устраивать.
Задумка в том, чтобы такой пакетный менеджер не был просто установщиком бинарных файлов, а можно было самому «на коленке» написать портянку текста для сборки ядра. Сценарий, который запускается, и ядро собирается.
Мой новый проект 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