LinuxForum.Fans
Тема

Легкая Slackware на пальцах

Автор: SergMarkov 101 сообщений 48294 просмотров
#222848

А какие ? Там же вроде все есть, как создавать пакеты. Другое дело что там формулировки в некоторых местах были не совсем внятные, но только что залил новую версию, где наряду со многими дополнениями и изменениями, вообще то такие формулировки исправлены. Подстройка под свой процессор осуществляется заданием флагов компиляции. В общем случае native, далее уже надо (ну или не надо :-) экспериментировать под свой проц и задачи. Одно "но", флаги компиляции приведены под x86, под x86-64 свои заморочки, но приобретать еше комп только для этого описания мне как то влом :-)

#222850

Да вот охота такая. Не раз приходилось устанавливать ядро, а создать пакет, что бы не возвращаться при "сломе" системы. Переустановил и всё. Я делал это не раз, только объяснять не умею.
Короче, пожелание такое - как сделать установочный пакет с ядром для своего компьютера. И всё.

Интересует описание механизма, а там, каждый со своим пером в руках...

#222851
cdrw написал:
Да вот охота такая. Не раз приходилось устанавливать ядро, а создать пакет, что бы не возвращаться при "сломе" системы. Переустановил и всё. Я делал это не раз, только объяснять не умею.
Короче, пожелание такое - как сделать установочный пакет с ядром для своего компьютера. И всё.

Проще наверное /usr/src/linux скопировать куда то :-) , потом восстановить и тупо сделать make modules_install, make install
Можно сделать и пакет, но это возиться надо, в принципе все что в этот пакет будет входить это System.map и vmlinuz из /boot и /lib/modules/** Так наверное
Создать какую то временную папку с такой структурой директорий и запустить в ней /sbin/makepkg -l y -c n /tmp/kernel-***.txz

#222852
SergMarkov написал:
Можно сделать и пакет, но это возиться надо, в принципе все что в этот пакет будет входить это System.map и vmlinuz из /boot и /lib/modules/** Так наверное

Не, не поняли Вы мою мысль.
Скажу так. Я скомпилировал ядро удачно, но запорол систему на более позднем этапе.
Компилировать заново?
Проще переустановить пакет

#222853
cdrw написал:

Не, не поняли Вы мою мысль.
Скажу так. Я скомпилировал ядро удачно, но запорол систему на более позднем этапе.
Компилировать заново?
Проще переустановить пакет

Ну так скопировать сразу /usr/src/linux куда то , или если не загружается вообще, скопировать ее с livecd. Также и пакет можно сразу создать. Не, ну можно конечно добавить в Makefile ядра секцию типа kernel-package, ничего особо сложного в этом нет, чтобы сразу сделать make modules_install, make install, make kernel-package, но зачем ? :-)

#222930

Допустим, собранное ядро /boot/vmlinuz-3.0-smp, версия 3.0-smp, следовательно модули установлены в /lib/modules/3.0-smp

Тогда как-то так:
[console]
# mkdir -p /tmp/package-kernel/boot
# cd /tmp/package-kernel/
# cp /boot/vmlinuz-3.0-smp ./boot/
# cp /lib/modules/3.0-smp/build/.config ./boot/config-3.0-smp
# makepkg -l y -c n /tmp/kernel-3.0-smp-i686-1.txz

# mkdir -p /tmp/package-kernel-modules/lib/modules
# cd /tmp/package-kernel-modules/
# cp -a /lib/modules/3.0-smp lib/modules/
# mkdir install
# cat << EOF > install/doinst.sh
# A good idea whenever kernel modules are added or changed:
if [ -x sbin/depmod ]; then
chroot . /sbin/depmod -a 3.0-smp 1> /dev/null 2> /dev/null
fi

EOF
# makepkg -l y -c n /tmp/kernel-modules-3.0-smp-i686-1.txz

# cd ; rm -rf /tmp/package-kernel /tmp/package-kernel-modules
[/console]


Чуть более сложнее см. тут: /source/k/ и ниже.

ps. Slackware поставляется в бинарном виде, но с исходниками и SlackBuild-ами в комплекте, в том числе и для бинарных пакетов ядер.

#222956

SergMarkov,


- подготавливаем разделы для установки (минимум 19Гб под /) при помощи какого нибудь liveCD где есть gparted.
...
- root (здесь можно и разделы создать, но fdisk явно не лучшее средство для этого)

Придирка: в комплекте идёт cfdisk, если нет необходимости двигать разделы или менять их размер, то его более чем достаточно даже новичку.
[console]. cfdisk (util-linux 2.19)

Disk Drive: /dev/sda
Size: 34359738368 bytes, 34.3 GB
Heads: 255 Sectors per Track: 63 Cylinders: 4177

Name Flags Part Type FS Type [Label] Size (MB)
-------------------------------------------------------------------------------
sda1 Primary swap 518.20
sda2 Boot Primary ext4 33841.55*



[ Bootable ] [ Delete ] [ Help ] [ Maximize ] [ Print ]
[ Quit ] [ Type ] [ Units ] [ Write ]

Toggle bootable flag of the current partition
[/console]

- ставим русский шрифт Сyr8*16

полагаю, имелся в виду Cyr_a8x16 (cyrillic, alt encoding, 8x16)

#222971
bormant написал:

Придирка: в комплекте идёт cfdisk, если нет необходимости двигать разделы или менять их размер, то его более чем достаточно даже новичку.

Исправлю, сорри :-) Нет, ну возня с cfdisk далеко не лучший способ в сравнении с gparted, там хоть более привычно.

-полагаю, имелся в виду Cyr_a8x16 (cyrillic, alt encoding, 8x16)

Да,конечно, мой косяк :-), исправлю

#222975

bormant
Утяну в описание пример создания пакета с ядром ? Можно ? Объединю только в один и добавлю в doinst.sh вызов lilo

#223012

SergMarkov,
я не против, но у Патрика (а следовательно и у каждого обладателя Slackware*-DVD*iso) есть более достойные готовые примеры, лежат в /source/k на диске, или в Интернете на любом зеркале, ссылку уже давал вверху.

Про добавление вызова LILO -- это уместно, если собирается ядро, содержащее в себе все драйвера всех потенциальных корневых файловых систем, чтобы обходиться без initrd. Но в родных пакетах с ядрами звать lilo после установки не принято.

Про LILO, /etc/lilo.conf, пакеты с ядрами. Хочу обратить внимание на умолчальную конструкцию, пользоваться ей или нет -- дело десятое, но знать не повредит.
В /etc/lilo.conf прописывается по умолчанию:


# Linux bootable partition config begins
image = /boot/vmlinuz
...
# Linux bootable partition config ends

/boot/vmlinuz -- это после установки символьная ссылка на бинарник ядра, причём на бинарник, поставленный последним. Почему так и откуда она там берётся? Посмотрим на install/doinst.sh из пакета с ядром (создаётся слакбилдом, например, http://slackware.osuosl.org/slackware-13.37/source/k/kernel-huge-smp/kernel-huge-smp.SlackBuild):


cp $KERNEL $PKG/boot/vmlinuz-$KERNNAME-${VERSION}-smp
( cd $PKG/boot ; ln -sf vmlinuz-$KERNNAME-${VERSION}-smp vmlinuz )
То есть, после установки пакета автоматом выполнится doinst.sh, заменит ссылку /boot/vmlinuz на актуальное ядро. Теперь достаточно позвать lilo, править /etc/lilo.conf нет необходимости.
Кроме того, при помощи этих же скриптов можно переключиться на прежнее ядро. doinst.sh от пакета после установки попадает в /var/log/scripts/имя_пакета. Поэтому для возврата к прежнему ядру достаточно либо переустановить пакет, либо, если не удалили бинарники, переделать ссылки, запустив скрипт в корне системы: cd / ; var/log/scripts/kernel-huge-smp-2.6.37.6_smp-i486-2 (если ремонтируете систему в /mnt, то cd /mnt ; ...). Угу, теперь выполнить lilo.

Почему ставить пакеты с ядрами лучше через installpkg, а не upgradepkg? Первый поставит пакет рядом, но не удалит файлы одноименённого пакета прежней версии, а второй -- удалит. Поэтому в первом случае в /boot окажутся оба ядра, старое и новое, но если что-то будет не так с новым -- достаточно загрузиться с диска Slackware, выполнить скрипт, возвращающий ссылки на место, выполнить lilo и перезагрузиться.
Не спорю, есть и другая стратегия, я использую её в дополнение к описанной. Отдельным пунктом в /etc/lilo.conf прописано ядро по его полному имени файла. Если что-то случится с дефолтным /boot/vmlinuz, погружусь в этот запасной вариант.
#223018
bormant написал:
SergMarkov,
я не против, но у Патрика (а следовательно и у каждого обладателя Slackware*-DVD*iso) есть более достойные готовые примеры, лежат в /source/k на диске, или в Интернете на любом зеркале, ссылку уже давал вверху.
Про добавление вызова LILO -- это уместно, если собирается ядро, содержащее в себе все драйвера всех потенциальных корневых файловых систем, чтобы обходиться без initrd. Но в родных пакетах с ядрами звать lilo после установки не принято.

Но тем не менее make install автоматом вызывает lilo. Вызывать его или нет при установке пакета, да вообщем наверное можно и так и этак, кроме как идеологических причин других тут вроде нет.
А так, предпочитаю перед make install прописать в lilo.conf допольнительную секцию с загрузкой vmlinuz.old, который автоматом создается при make install
А как пакет создать, тут тут вообще надо подумать как лучше сделать, пусть и неидеологически чисто :-)

#223023

SergMarkov,
тут на вкус и цвет все фломастеры разные. Я обычно не делаю "make install", делаю "make bzImage", слакбилдом собираю пакет с ядром и ставлю либо копирую руками, "make modules_install", собираю пакет с модулями (они берутся "cp -a /lib/modules/${VERSION} $PKG/lib/modules").

Не написал про копирование System.map -- по хорошему тоже стоило бы добавлять, если речь не о командах, набираемых вручную а о скрипте. А скрипты в поставке готовые лежат, отчего б не воспользоваться ;)

#223041

Вот doinst.sh из родного пакета
( cd boot ; rm -rf vmlinuz )
( cd boot ; ln -sf vmlinuz-huge-smp-2.6.37.6-smp vmlinuz )
( cd boot ; rm -rf System.map )
( cd boot ; ln -sf System.map-huge-smp-2.6.37.6-smp System.map )
( cd boot ; rm -rf config )
чего то меня это не вдохновляет

Тут cобственно два пути - или скрипт с самого начала, компиляция - создание пакета, или make modules bzimage - создание пакета.
Но в любом случае что бы хотелось в самом пакете, не знаю насколько это корректно, это создание vmlinuz.old, прописывание его в lilo.conf и вызов самого lilo

#223047

А в чём сомнения?
Это как раз и есть реализация концепции ссылок (vmlinuz, config, System.map) на актуальные файлы пакета.
Эту часть install/doinst.sh генерит makepkg, который не упаковывает ссылки в tar, а лепит пересоздание ссылок внутрь doinst.sh файла. Подробнее в
[console]# less $(which makepkg)[/console]начиная с «echo "Searching for symbolic links:"».
или в man makepkg

-l, --linkadd y|n
If y, add any symbolic links found to the install script (doinst.sh) and delete them. This is the recommended action. If this
option is not used, makepkg will prompt if symbolic links are found.
выделение -- моё.

Простой эксперимент для иллюстрации сказанного:
[console]
# mkdir package-test
# cd package-test
# touch test-target
# ln -s test-target test-link
# makepkg -l y -c n ../test.txz

# # смотрим:
# cat install/doinst.sh
( cd . ; rm -rf test-link )
( cd . ; ln -sf test-target test-link )
[/console]

К слову сказать, что сейчас мы обсуждаем именно Slackware -- тот самый очень тонкий слой икры поверх толстого куска ванильных исходников.
#223048
bormant написал:
А в чём сомнения?
Это как раз и есть реализация концепции ссылок (vmlinuz, config, System.map) на актуальные файлы пакета.

да нет, зачем нужен doinst и что он делает понятно, речь о том что в родном кернеловском doinst.sh нет именно вот этих вещей - создание vmlinuz.old, прописывание его в lilo.conf и вызов самого lilo
Просто склоняюсь к тому чтобы создать скриптик начиная с
make modules&& make bzimage&& make modules_install&& make install
и заканчивая созданием пакета с doinst.sh который создает vmlinuz.old, прописывает его в lilo.conf и вызывает сам lilo

#223052

Вот прописывание в /etc/lilo.conf как раз самый спорный момент.
Во-первых, у меня может быть невероятно кучерявый lilo.conf, уверены, что не испортите?
Во-вторых, у меня может вообще не быть lilo (например, grub-legacy из /extra/grub/, grub(2) или какой-нибудь лысый-в-ступе загрузчик).

ps. [console]make bzImage[/console] (и латинская заглавная).

#223053
bormant написал:
Вот прописывание в /etc/lilo.conf как раз самый спорный момент.
Во-первых, у меня может быть невероятно кучерявый lilo.conf, уверены, что не испортите?
Во-вторых, у меня может вообще не быть lilo (например, grub-legacy из /extra/grub/, grub(2) или какой-нибудь лысый-в-ступе загрузчик).

ps. [console]make bzImage[/console] (и латинская заглавная).

Теоретически конечно может испортиться, но если lilo.conf написан по стандартам то дописывание в его конец лишней секции вообще то не может повредить
Ну а на "нет" и спора нет, выведет какое то предупреждение типа "grub идет лесом, прописывайте сами" :-)
Хотя, гм, да наверное лучше не стоит. Пусть просто создаст vmlinuz.old
Пойдет такой скриптик для описания - make modules&& make bzimage&& make modules_install&& make install
и заканчивая созданием пакета с doinst.sh который создает vmlinuz.old ?

#223055

В-третьих, в /boot/vmlinuz.old, возможно уже лежит резервное ядро.
В-четвёртых, /etc/lilo.conf уже может содержать ссылку на /boot/vmlinuz.old.

Если всё же будете писать рекомендации с правкой lilo.conf и вызовом lilo скриптом, обратите внимание на эти 2 момента тоже.

#223059
bormant написал:
В-третьих, в /boot/vmlinuz.old, возможно уже лежит резервное ядро.
В-четвёртых, /etc/lilo.conf уже может содержать ссылку на /boot/vmlinuz.old.

Если всё же будете писать рекомендации с правкой lilo.conf и вызовом lilo скриптом, обратите внимание на эти 2 момента тоже.

Да нет с lilo вопрос снят,на самом деле не стоит, где неоднозначность установки там проблемы и непонятки.
Даже make install просто затирает старый vmlinuz.old, можно конечно соорудить его нумерование, но зачем быть святее римского предстоятеля ? :-) В любом случае быстренько соорудить линк на соотвествующий бинарник не составляет никакого труда

#223060

SergMarkov,
браво! Принцип KISS снова одержал верх :lol:

Войдите или зарегистрируйтесь, чтобы ответить.