А какие ? Там же вроде все есть, как создавать пакеты. Другое дело что там формулировки в некоторых местах были не совсем внятные, но только что залил новую версию, где наряду со многими дополнениями и изменениями, вообще то такие формулировки исправлены. Подстройка под свой процессор осуществляется заданием флагов компиляции. В общем случае native, далее уже надо (ну или не надо :-) экспериментировать под свой проц и задачи. Одно "но", флаги компиляции приведены под x86, под x86-64 свои заморочки, но приобретать еше комп только для этого описания мне как то влом :-)
Легкая Slackware на пальцах
Да вот охота такая. Не раз приходилось устанавливать ядро, а создать пакет, что бы не возвращаться при "сломе" системы. Переустановил и всё. Я делал это не раз, только объяснять не умею.
Короче, пожелание такое - как сделать установочный пакет с ядром для своего компьютера. И всё.
Интересует описание механизма, а там, каждый со своим пером в руках...
Да вот охота такая. Не раз приходилось устанавливать ядро, а создать пакет, что бы не возвращаться при "сломе" системы. Переустановил и всё. Я делал это не раз, только объяснять не умею.
Короче, пожелание такое - как сделать установочный пакет с ядром для своего компьютера. И всё.
Проще наверное /usr/src/linux скопировать куда то :-) , потом восстановить и тупо сделать make modules_install, make install
Можно сделать и пакет, но это возиться надо, в принципе все что в этот пакет будет входить это System.map и vmlinuz из /boot и /lib/modules/** Так наверное
Создать какую то временную папку с такой структурой директорий и запустить в ней /sbin/makepkg -l y -c n /tmp/kernel-***.txz
Можно сделать и пакет, но это возиться надо, в принципе все что в этот пакет будет входить это System.map и vmlinuz из /boot и /lib/modules/** Так наверное
Не, не поняли Вы мою мысль.
Скажу так. Я скомпилировал ядро удачно, но запорол систему на более позднем этапе.
Компилировать заново?
Проще переустановить пакет
Не, не поняли Вы мою мысль.
Скажу так. Я скомпилировал ядро удачно, но запорол систему на более позднем этапе.
Компилировать заново?
Проще переустановить пакет
Ну так скопировать сразу /usr/src/linux куда то , или если не загружается вообще, скопировать ее с livecd. Также и пакет можно сразу создать. Не, ну можно конечно добавить в Makefile ядра секцию типа kernel-package, ничего особо сложного в этом нет, чтобы сразу сделать make modules_install, make install, make kernel-package, но зачем ? :-)
Допустим, собранное ядро /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-ами в комплекте, в том числе и для бинарных пакетов ядер.
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)
Придирка: в комплекте идёт cfdisk, если нет необходимости двигать разделы или менять их размер, то его более чем достаточно даже новичку.
Исправлю, сорри :-) Нет, ну возня с cfdisk далеко не лучший способ в сравнении с gparted, там хоть более привычно.
-полагаю, имелся в виду Cyr_a8x16 (cyrillic, alt encoding, 8x16)
Да,конечно, мой косяк :-), исправлю
bormant
Утяну в описание пример создания пакета с ядром ? Можно ? Объединю только в один и добавлю в doinst.sh вызов lilo
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):
То есть, после установки пакета автоматом выполнится doinst.sh, заменит ссылку /boot/vmlinuz на актуальное ядро. Теперь достаточно позвать lilo, править /etc/lilo.conf нет необходимости.
cp $KERNEL $PKG/boot/vmlinuz-$KERNNAME-${VERSION}-smp
( cd $PKG/boot ; ln -sf vmlinuz-$KERNNAME-${VERSION}-smp vmlinuz )
Кроме того, при помощи этих же скриптов можно переключиться на прежнее ядро. 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, погружусь в этот запасной вариант.
SergMarkov,
я не против, но у Патрика (а следовательно и у каждого обладателя Slackware*-DVD*iso) есть более достойные готовые примеры, лежат в /source/k на диске, или в Интернете на любом зеркале, ссылку уже давал вверху.
Про добавление вызова LILO -- это уместно, если собирается ядро, содержащее в себе все драйвера всех потенциальных корневых файловых систем, чтобы обходиться без initrd. Но в родных пакетах с ядрами звать lilo после установки не принято.
Но тем не менее make install автоматом вызывает lilo. Вызывать его или нет при установке пакета, да вообщем наверное можно и так и этак, кроме как идеологических причин других тут вроде нет.
А так, предпочитаю перед make install прописать в lilo.conf допольнительную секцию с загрузкой vmlinuz.old, который автоматом создается при make install
А как пакет создать, тут тут вообще надо подумать как лучше сделать, пусть и неидеологически чисто :-)
SergMarkov,
тут на вкус и цвет все фломастеры разные. Я обычно не делаю "make install", делаю "make bzImage", слакбилдом собираю пакет с ядром и ставлю либо копирую руками, "make modules_install", собираю пакет с модулями (они берутся "cp -a /lib/modules/${VERSION} $PKG/lib/modules").
Не написал про копирование System.map -- по хорошему тоже стоило бы добавлять, если речь не о командах, набираемых вручную а о скрипте. А скрипты в поставке готовые лежат, отчего б не воспользоваться ;)
Вот 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
А в чём сомнения?
Это как раз и есть реализация концепции ссылок (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 -- тот самый очень тонкий слой икры поверх толстого куска ванильных исходников.
А в чём сомнения?
Это как раз и есть реализация концепции ссылок (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
Вот прописывание в /etc/lilo.conf как раз самый спорный момент.
Во-первых, у меня может быть невероятно кучерявый lilo.conf, уверены, что не испортите?
Во-вторых, у меня может вообще не быть lilo (например, grub-legacy из /extra/grub/, grub(2) или какой-нибудь лысый-в-ступе загрузчик).
ps. [console]make bzImage[/console] (и латинская заглавная).
Вот прописывание в /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 ?
В-третьих, в /boot/vmlinuz.old, возможно уже лежит резервное ядро.
В-четвёртых, /etc/lilo.conf уже может содержать ссылку на /boot/vmlinuz.old.
Если всё же будете писать рекомендации с правкой lilo.conf и вызовом lilo скриптом, обратите внимание на эти 2 момента тоже.
В-третьих, в /boot/vmlinuz.old, возможно уже лежит резервное ядро.
В-четвёртых, /etc/lilo.conf уже может содержать ссылку на /boot/vmlinuz.old.
Если всё же будете писать рекомендации с правкой lilo.conf и вызовом lilo скриптом, обратите внимание на эти 2 момента тоже.
Да нет с lilo вопрос снят,на самом деле не стоит, где неоднозначность установки там проблемы и непонятки.
Даже make install просто затирает старый vmlinuz.old, можно конечно соорудить его нумерование, но зачем быть святее римского предстоятеля ? :-) В любом случае быстренько соорудить линк на соотвествующий бинарник не составляет никакого труда
SergMarkov,
браво! Принцип KISS снова одержал верх :lol: