slackware.ru
http://www.slackware.ru/forum/

Как собрать ядро в пакет txz?
http://www.slackware.ru/forum/viewtopic.php?f=28&t=782
Страница 3 из 3

Автор:  nk [ 06 окт 2018 03:36 ]
Заголовок сообщения:  Re: Как собрать ядро в пакет txz?

Да, так оно и есть "прямой и безопасный путь", мало ли у кого на /tmp нет места, а mv мы часть сольем...
или во время свет моргнет, а tmp у нас на tmpfs

Ладно это, спросить хочу: держать в системе 2 разных по версии пакета ядра по сути же это возможно,
допустим если одно из поставить через installpkg, т.е. 1 использовать постоянно, а 2 напосмотреть мало ли что исправили.
И вот допустим, то которое на посмотреть выберем его huge-версию, можно ли просто в_лоб прописать в lilo.conf (ниже пример, ничего более):
Код:
# generic
image = /boot/vmlinuz-generic-smp-4.4.14-smp
  initrd = /boot/initrd.gz
  root = /dev/sda1
  label = slack14.2
  read-only

# huge
image = /boot/vmlinuz-huge-4.4.157-smp
  root = /dev/sda1
  label = slack14.2_huge
  read-only
и при этом (из примера выше) для vmlinuz-huge-4.4.157-smp только пакет kernel-huge-smp-4.4.157_smp-i686-1 будет стоять
а для vmlinuz-generic-smp-4.4.14-smp весь набор, кроме kernel-huge-4.4.14 (само-собой и за исключением -headers-):
    kernel-generic-smp-4.4.14_smp-i686-1
    kernel-modules-smp-4.4.14_smp-i686-1
    kernel-source-4.4.14_smp-noarch-1
Это пример, но вопрос сводится к тому что kernel-huge-ВЕРСИЯ будет ли работать без аналогичного набора, как в примере выше,
(особенно без kernel-modules) скажем главное что бы загрузился и только железки проверить? Во всем этом смущают:
Код:
( cd boot ; ln -sf config-huge-4.4.14 config )
( cd boot ; ln -sf System.map-huge-4.4.14 System.map )
и в тоже самое время для старого ядра, при каждом обновлении через slackpkg upgrade-all команду lilo он пошлет, но не хочется делать постоянно:
Код:
# /usr/share/mkinitrd/mkinitrd_command_generator.sh -k 4.4.14-smp | sh

Автор:  bormant [ 06 окт 2018 09:10 ]
Заголовок сообщения:  Re: Как собрать ядро в пакет txz?

Одного kernel-huge без kernel-modules недосточно, не настолько оно огромное. В него вшиты по максимуму драйвера устройств хранения данных на носителях и, собственно все. Как установочно-ремонтное ядро это отличный вариант, как основное — условно хороший.

Прописывать в лоб в /etc/lilo.conf придется. Либо помнить и проверять, куда ведут симлинки (а при необходимости — переставлять на нужный комплект), ведь установочный сценарий пакета перенацелит симлминки в /boot на поставленное из пакета ядро. Переставлять можно вручную ln -s ;), а можно позвать установочный сценарий нужного пакета:
( cd / ; var/log/scripts/kernel-... )

slackpkg откажется работать вообще, если видит установленными более одного пакета, одноименного с точностью до версии. Тут варианты: 1) блэклист 2) переименовать файл пакета в части родового имени (то, что до третьего дефиса справа), например, kernel-huge-smp1-..., 3) переименовать после установки соответствующие файлы в /var/log/{packages,scripts}/

Про initrd: можно делать по одному на каждое ядро (указывая разные имена), можно делать один на всех, указывая -c только при первом вызове, при остальных добавлять другие -k версия без очистки дерева). На самом деле удобнее прописать необходимое в /etc/initrd.conf и звать
mkinitrd -c -k версия -F
и, если надо, без -c или с -o /boot/initrd-версия.gz (можно скриптик накалякать).

Если подобные эксперименты частые, есть смысл в GRUB — у него есть редактируемая командная строка, можно загрузить то, что не прописано в конфигах, если даже забыл их поправить (но initrd оттуда создать нельзя все равно — дозволенный склероз ограничен).

На случай склероза и неохоты искать установочный носитель при факапе можно тупо положить в загрузку установочную среду (без дерева пакетов):
http://docs.slackware.com/howtos:slackw ... l_from_hdd

Автор:  nk [ 08 окт 2018 00:29 ]
Заголовок сообщения:  Re: Как собрать ядро в пакет txz?

В общем-то на тестовой системе получилось, сделать задуманное
Код:
image = /boot/vmlinuz-generic-smp
  initrd = /boot/initrd.gz
  root = /dev/sdb1
  label = lin3_gen
  read-only

image = /boot/vmlinuz-huge-smp
  root = /dev/sdb1
  label = lin4_huge-smp
  read-only

image = /boot/vmlinuz-huge
  root = /dev/sdb1
  label = lin4_huge
  read-only
kernel-generic-smp-3.10.108_smp-i686
kernel-modules-smp-3.10.108_smp-i686
kernel-source-3.10.108_smp-noarch
+ kernel-headers-4.4.157_smp-x86-1
kernel-huge-4.4.157-i586-1
kernel-huge-smp-4.4.157_smp-i686-1
Код:
# slackpkg install kernel-huge-smp
# /usr/share/mkinitrd/mkinitrd_command_generator.sh -k 3.10.108-smp | sh
# lilo

Да, для -huge не достаточно пакет ядра, ему еще modules соответствующей версии нужны,
(в результате у меня usb-клавиатура подключенная к ноуту не заработала, но это из замеченного)

Цитата:
> Dell inspiron-17-3721
> ноутбук, при kernel-4 на 32, не умеет уходить в спячку, вместо этого идет kernel-panic.
Но я на этом не остановился и представляете, в общем решил поставить неSMP ядро-4.x
> # slackpkg install kernel-huge
и там что бы вы думали, cpu одно, но спячка (pm-hibernate) не вызывает у ядра - kernel panic
И в итоге, для моей железки, при ядре32 с SMP на 4.x - kernel panic есть
с SMP, но на 3.10.x и без SMP на 4.x - нет, все нормально

Автор:  bormant [ 08 окт 2018 09:40 ]
Заголовок сообщения:  Re: Как собрать ядро в пакет txz?

Насчет паники: есть смысл поизучать какой конкретный модуль приводит к ней, и выгружать/зашружать его перед/после спячки. Так-то там уже есть подобный список, сама по себе проблема не нова...

Автор:  nk [ 11 окт 2018 04:54 ]
Заголовок сообщения:  Re: Как собрать ядро в пакет txz?

bormant, спасибо большое за ответы/консультацию
Если у кого-то вопросы, какие пакеты такие ядра в slackware используются - прежде чем задать прочитайте данную тему. Отдельным пунктом прочтения еще служит статья на docs.slackware.com: > что делать с пакетом Slackware kernel-headers
> Как связаны пакеты kernel-headers и glibc?

По сути самому собрать ядро просто, если есть готовый конфиг, в итоге, если нет подходящего config задача сводится к его собственному созданию через ответ ряда вопросов, как это реализовать думаю уместнее всего задать вопрос будет в параллельной теме:

Так ладно, сказ о тому, как собрать ядро с готовым .config в пакет, так сказать slackware linux kernel. Нам понадобятся:
1) исходники ядра, взятые в виде tar-архива на https://www.kernel.org/

2.1) Т.к. собираем с готовым config, то и config-generic, config-huge понадобятся
2.2) взять их можно в каталоге slackwareX32X64-ВЕРСИЯ/source/k/ или
slackwareX32X64-ВЕРСИЯ/testing/source/ в дереве репозитория. Примеры:
  • slackware-14.1/source/k/: config-x86_64 - основной config для 14.1_32
  • slackware64-14.2/testing/source/: linux-4.6-configs - config из testing, который дает возможность собрать отличное от того, которое в 14.2 (обращайте внимание на версию)

3.1) И конечно же готовые, подготовленные или уже написанные SlackBuild'ы и slack-desc'ы
3.2) Если своими руками писать не хотите, можно взять у Патрика в основном это каталог packaging-* и в нем kernel-generic/, kernel-huge/, kernel-modules/
3.3) И будем исходить из того что имеем, а на сегодня у нас последняя версия slackware - 14.2.
Для kernel-source и kernel-headers нет SlackBuild'ов, но есть описание/я (slack-desc), для 14.2_64

В качестве примера соберем на 14.2_32 Slackware ядро последнее из серии 3.10 с smp,
да еще и с патчем что бы показать как все это дело полностью имеет вид. Соберем:
  • kernel-huge
  • kernel-generic
  • kernel-modules
  • kernel-source
далее, чисто листинг. По поводу вопроса того что за патч такой и почему именно он нужен на 14.2...
вот здесь более-менее разобрано и пояснено linux-3.10.x на 32 - lguest-asmlinkage.patch

Код:
$ mkdir -p /tmp/14.2_kernel-3.10.108-smp
$ cd /tmp/14.2_kernel-3.10.108-smp

$ wget -c https://cdn.kernel.org/pub/linux/kernel/v3.x/linux-3.10.108.tar.xz
$ wget -c http://slackware.osuosl.org/slackware-14.1/source/k/config-x86/config-generic-smp-3.10.17-smp
$ wget -c http://slackware.osuosl.org/slackware-14.1/source/k/config-x86/config-huge-smp-3.10.17-smp
$ rsync -avrh --delete --progress rsync.osuosl.org::slackware/slackware-14.1/source/k/packaging-x86/kernel-generic-smp .
$ rsync -avrh --delete --progress rsync.osuosl.org::slackware/slackware-14.1/source/k/packaging-x86/kernel-huge-smp .
$ rsync -avrh --delete --progress rsync.osuosl.org::slackware/slackware-14.1/source/k/packaging-x86/kernel-modules-smp .

$ wget -c https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/patch/drivers/lguest/x86/core.c?id=cdd77e87eae52b7251acc5990207a1c4500a84ce -O lguest-asmlinkage.patch

$ su -
# cd /usr/src
# tar xvf /tmp/14.2_kernel-3.10.108-smp
# cd linux-3.10.108/

# patch -p1 -i /tmp/14.2_kernel-3.10.108-smp/lguest-asmlinkage.patch

# cat /tmp/14.2_kernel-3.10.108-smp/config-huge-smp-3.10.17-smp > .config
# make oldconfig
# make bzImage
# cd /tmp/14.2_kernel-3.10.108-smp/packaging-x86/kernel-huge-smp/
# VERSION=3.10.108 ./kernel-huge-smp.SlackBuild

# cd /usr/src/linux-3.10.108/
# make mrproper
# cat /tmp/14.2_kernel-3.10.108-smp/config-generic-smp-3.10.17-smp > .config
# make oldconfig
# make bzImage modules modules_install

# cd /tmp/14.2_kernel-3.10.108-smp/packaging-x86/kernel-generic-smp/
# VERSION=3.10.108 ./kernel-generic-smp.SlackBuild

# cd /tmp/14.2_kernel-3.10.108-smp/kernel-modules-smp/
# VERSION=3.10.108 KERNELRELEASE=3.10.108-smp ./kernel-modules-smp.SlackBuild

# cd /tmp/
# installpkg "kernel-*-3.10.108_smp-*t?z"
# lilo

# cd /usr/src/linux-3.10.108/
# make clean
# make prepare
# rm .version

# cd ..
# rm -v linux
# ln -sf linux-3.10.108 linux

# mkdir -p /tmp/package-linux-3.10.108/{install,usr/src}
# cd /tmp/package-linux-3.10.108
# wget -c http://slackware.osuosl.org/slackware-14.1/slackware/k/kernel-source-3.10.17_smp-noarch-3.txt -O install/slack-desc
# cp -av /usr/src/linux-3.10.108 /usr/src/linux usr/src

# mkdir -p /tmp/package-linux-3.10.108/usr/doc/kernel-source-3.10.108_smp/
# cd  /tmp/package-linux-3.10.108/usr/doc/kernel-source-3.10.108_smp/
# cp -av /tmp/14.2_kernel-3.10.108-smp/*.patch .
# cp -av /tmp/14.2_kernel-3.10.108-smp/packaging-x86/kernel-*-smp .
# cp -av /tmp/14.2_kernel-3.10.108-smp/config-*-smp  .

# cd /tmp/package-linux-3.10.108
# /sbin/makepkg -l y -c n /tmp/kernel-source-3.10.108_smp-noarch-1.txz
# upgradepkg --reinstall --install-new /tmp/kernel-source-3.10.108_smp-noarch-1.txz

Если полностью уверены в себе и делаете на тестовой системе, в виртуалке или просто умеете восстановить систему,
то можно вместо installpkg использовать # upgradepkg --reinstall --install-new , пример:
Код:
# upgradepkg --reinstall --install-new /tmp/kernel-huge-smp-3.10.108-smp-*t?z

и конечно же если препочитаете generic-ядро, не забудьте про initrd = /boot/initrd.gz в lilo.conf и
Код:
# /usr/share/mkinitrd/mkinitrd_command_generator.sh -k 3.10.108-smp | sh && lilo

Автор:  nk [ 26 окт 2018 02:53 ]
Заголовок сообщения:  Re: Как собрать ядро в пакет txz?

Резюмируя все что было сказано раннее примером в качестве листинга выше, заметил вот что,
файл install/doinst.sh получаемый после сборки в пакетах kernel-${KERNEL_NAME}-smp-ВЕРСИЯ_smp-i686-$BUILD
отличается от Патриковских, а именно, если собирать как продемонстрировано выше - не будет только строчек примерного вида
Код:
( cd boot ; rm -rf vmlinuz-huge-smp )
( cd boot ; ln -sf vmlinuz-huge-smp-4.4.157-smp vmlinuz-huge-smp )
Код:
( cd boot ; rm -rf vmlinuz-generic )
( cd boot ; ln -sf vmlinuz-generic-4.4.157 vmlinuz-generic )

Не столь критично, к тому же что-то да создается
Код:
( cd boot ; rm -rf config )
( cd boot ; ln -sf config-huge-smp-3.10.108-smp config )
( cd boot ; rm -rf System.map )
( cd boot ; ln -sf System.map-huge-smp-3.10.108-smp System.map )
( cd boot ; rm -rf vmlinuz )
( cd boot ; ln -sf vmlinuz-huge-smp-3.10.108-smp vmlinuz )
просто учитывайте и этот момент, что в lilo.conf придется прописать сам vmlinuz,
либо конкретно image = vmlinuz-ВИД-ВЕРСИЯ (не забудьте посмотреть ls -l /boot/ что куда ссылается)

Причина же, далеко ходить не надо, т.к. мы собирали по Slackbuild'ам из 14.1, если посмотреть и сравнить
14.1 -> http://slackware.osuosl.org/slackware-1 ... SlackBuild
14.2 -> http://slackware.osuosl.org/slackware-1 ... SlackBuild
я думаю разница и результат сами понимаете очевидный
Код:
cp $KERNEL $PKG/boot/vmlinuz-$KERNNAME-${VERSION}-smp
( cd $PKG/boot ; ln -sf vmlinuz-$KERNNAME-${VERSION}-smp vmlinuz )
( cd $PKG/boot ; ln -sf vmlinuz-$KERNNAME-${VERSION}-smp vmlinuz-huge-smp )

Автор:  bormant [ 26 окт 2018 12:22 ]
Заголовок сообщения:  Re: Как собрать ядро в пакет txz?

Как это не будет? Почему бы вот это не отработает?
http://slackware.uk/slackware/slackware ... SlackBuild
Код:
rm -rf $PKG
mkdir -p $PKG
mkdir -p $PKG/boot
cp $KERNEL $PKG/boot/vmlinuz-$KERNNAME-${VERSION}-smp
( cd $PKG/boot ; ln -sf vmlinuz-$KERNNAME-${VERSION}-smp vmlinuz )
( cd $PKG/boot ; ln -sf vmlinuz-$KERNNAME-${VERSION}-smp vmlinuz-generic-smp )

В остальных -- аналогично.

Подсобные симлинки без версий /boot/kernel-{huge,generic}{,-smp} появились начиная с 14.2 благодаря вашему покорному слуге (писать на LQ иногда весьма полезно :-) ).
Может просто используете слакбилды от старых версий?

PS. Ага, поторопился, не дочитал до конца ;-)

Страница 3 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/