Здравствуйте! Постепенно продвигаясь в изучении linux, все чаще приходится сталкиваться с проблемой пересборки ядра (то одно нужно добавить, то другое и т.д). Решился попробовать и пройти этот таинственный процесс. Почитал литературу, статьи в интернете и естественно возникли кой какие вопросы. Вот к примеру я зашел на сайт htttp://www.kernel.org что бы скачать ядро, где увидел следующее:
The latest stable version of the Linux kernel is: 2.6.26.6 2008-10-09 03:33 UTC F V VI C Changelog
F = full source, B = patch baseline, V = view patch, VI = view incremental, C = current changesets
кликнув по ссылке F, я закачал ядро. У меня вопрос по ссылке V, зайдя на нее я увидел:
/pub/linux/kernel/v2.6/patch-2.6.26.6.bz2
Show entire file
Documentation/ftrace.txt 0 + 1353 - 0 !
Documentation/networking/udplite.txt 1 + 1 - 0 !
Documentation/video4linux/cx18.txt 3 + 9 - 0 !
Makefile 3 + 2 - 0 !
arch/ia64/kvm/kvm-ia64.c 6 + 2 - 0 !
arch/powerpc/kernel/ppc32.h 2 + 0 - 0 !
arch/powerpc/kernel/ptrace32.c 27 + 0 - 0 !
arch/powerpc/kvm/powerpc.c 4 + 0 - 0 !
arch/powerpc/platforms/cell/cbe_cpufreq_pmi.c 6 + 0 - 0 !
arch/s390/kernel/compat_ptrace.h 1 + 0 - 0 !
arch/s390/kernel/ptrace.c 28 + 0 - 0 !
arch/s390/kvm/kvm-s390.c 4 + 0 - 0 !
arch/sparc64/kernel/irq.c 61 + 1 - 0 !
arch/sparc64/kernel/kstack.h 60 + 0 - 0 !
arch/sparc64/kernel/ldc.c 19 + 19 - 0 !
arch/sparc64/kernel/of_device.c 4 + 5 - 0 !
arch/sparc64/kernel/pci.c 1 + 1 - 0 !
arch/sparc64/kernel/pci_psycho.c
из описания понятно что это список патчей (т.е заплаток или каких то добавлений), и они могут быть установлены все вместе или каждый в отдельности, так это или нет? Что означают эти цифры в конце каждой строки? И последний вопрос который меня волнует на данном этапе это - насколько безопасна процедура пересборки ядра на рабочей машине т.е может ли пострадать система от неумелых действий во время этого таинства, следует ли перестраховаться и сохранить данные или это совершенно безопасно в этом плане?
Цифры это показатели модификации кода, не программисту они не нужны
Опасность только в том, что машина может вообще не загрузиться с новым ядром либо не все сервисы будут корректно работать.
В случае с мандривой то тут вообще не рекомендуется собирать новое ядро из ванильного ядра.
Так как разработчики накладывают свои патчи на ядро, которые не публикуются и возможны серьезные проблемы с системой. Для сборки ядра достаточно получить исходники ядра из репозитария мандривы
То есть если я правильно вас понял, после сборки ядра оно сразу становиться на место стоящего, да? А я думал его после этого можно закатать на диск и в дальнейшем использовать для своих нужд. Я подключал депозитарии, но вот где там скачать ядро что то не видел, не дадите ссылочку?
Оно не заменяет, при правильном конфигурировании, а ложится рядом и есть возможность выбора ядра при загрузке системы.
linux-sources либо kernel-sources точно не помню пакет называется добавляется ещё версия в названии
Понятно, это что то вроде, когда на машине установлено две операционные системы и машина при закрузке спрашивает какую из них загрузить. Тогда получается, что нельзя создать свой дистр, но ведь я слышал что как то пересобирают ядро и закатывают на болванки?
Если собрать универсальное ядро, типа того которое ставится при инсталяции системы, пересборку обычно делают для уменьшения ядра и заточки его под конкретное железо
Тогда получается, что если у меня на машине стоит Mandriva и мне необходимо опримизировать работу ядра, то и пересобирать я должен ядро той же мандривы и не какое другое? Я так понимаю это относится ко всем дистрам или нет, просто в статье которую я читаю, да и в книге ничего про это не говорилось. Сразу "качаем ядро и начинаем его пересобирать ....", складывается такое впечатление, что любое ядро для любого дистра бодойдет, главное скачать последнию версию!
Есть дистры где не рекомендуется использовать ванильное ядро, мандрива как раз к таким относится
Теперь, что вы мне посоветуете сделать чтобы попрактиковаться в этом деле? Если я правильно понял не стои этого делать на рабочей станции, а лучше взять для эксперимента другую машину. И еще скажите пожалуйсто, тогда получается, что пересборку ядра следует как правило делать сразу после установки OS в целях дальнейшей ее настройки и выполняемых задач, правильно?
ну собственно да по всем пунктам :)
Спасибо за разъяснения, пойду пособираю инфу почитаю литературу, а то чувствую что багаж еще маловат! :)
Скажите пожалуйста, что значить установить из исходников? Я тут на форуме прочитал
Лучше поставить из исходников - ничего сложного в этом нет, к тому же можно отключить всё лишнее.
Запусти "Центр управления"->"Установка пакетов", набери в строке поиска kernel-source
Тогда в чем разница, между этим способом и тем который обсуждал я?
это команда установка из репозитария исходников ядра
shiko - есть понятие "ванильное ядро". Это ядро, которое на kernel.org, мэйнтейнер ядра - Линус Торвальдс.
Но многие дистрибутивы вносят изменения в ядро. Со временем эти изменения могут перейти в ванильное. К примеру RedHat и Novell добавляют проприетарные модули в свое ядро, естественно их в ванильном нет. Свободные патчи тоже не обязаны появится в ванильном - они например могут быть пробой пера, платформой для каких-то программ которые этот дистр продвигает. Лучше брать исходники ядра из репозитариев своего дистра.
Все понятно, значить если сказать проще "ванильные ядра" которое на kernel.org - это ядра чистые без всяких примесей внешних разработчиков, на которые в последствии и накручивается примочки других компаний, я во всяком случаи так понял! Да, тогда конечно собирать такие ядра на своей машине с другим дистром, было бы пустой тратой времени. Спасибо за разъяснение!!
К стати я нашел через drakconf в "менеджере пакетов" kernel-source т.е версии ядер которые были загружены из репозитария, когда я подключался к нему. Только теперь мне непонятно как действовать дальше, во всех статьях описания сборки из скаченых tar архивов, а у меня rpm. Ну поставлю, я галочку на одной из версий ядра, дам команду на установку а что дальше мне делать :help: Как мне в данной ситуации запустить процесс пересборки, для того чтобы я мог что то отключить или наоборот? Подскажите пожалуйста, ну или дайте наводку где почитать. :)
Все тоже самое, установишь пакет в каталоге /usr/src появится каталог linux-<версия ядра> вот с этого места действия одни и те же
вот кстати очень удобно, почти всегда так делаю
# make cloneconfig ; make ; make modules_install install ; halt
и пашол спать
Цитировать# make cloneconfig ; make ; make modules_install install ; halt
и пашол спать
А на вопросы по конфигурации ядра, что отвечать не надо???
ЦитироватьЦитировать# make cloneconfig ; make ; make modules_install install ; halt
и пашол спать
А на вопросы по конфигурации ядра, что отвечать не надо???
cloneconfig создает конфиг
я если компиляю ядро, использую версию уже установленого чтобы поставить дрова на nvidia например, а не для того чтобы обновить
Здравствуйте! Подскажите кто знает! Вопрос в следующем, необходимо задействовать несколько пунктов в конфигурации ядра OS Linux Mandriva, на уже установленной и работающей машине. Версия ядра 2.6.22.9 . Из собранной информации понял что можно это сделать через конфигурационный файл ядра, когда стал разбираться дальше возник спорный вопрос "какой конфиг править?", дело в том что конфигов два, один лежит в директории: /usr/src/linux-2.6.22.9-desktop-1mdv/.conf , а другой в : /proc/config.gz. Вопрос, какой файл править т.е с каким мне работать и что это за файл config.gz, он по содержанию один в один как .conf ???
[quote name=\'dalvis\' post=\'3982\' date=\'17.3.2009, 11:38\']Здравствуйте! Подскажите кто знает! Вопрос в следующем, необходимо задействовать несколько пунктов в конфигурации ядра OS Linux Mandriva, на уже установленной и работающей машине. Версия ядра 2.6.22.9 . Из собранной информации понял что можно это сделать через конфигурационный файл ядра, когда стал разбираться дальше возник спорный вопрос "какой конфиг править?", дело в том что конфигов два, один лежит в директории: /usr/src/linux-2.6.22.9-desktop-1mdv/.conf , а другой в : /proc/config.gz. Вопрос, какой файл править т.е с каким мне работать и что это за файл config.gz, он по содержанию один в один как .conf ???[/quote]
1) /proc/config.gz -- это сжатый конфиг. Распаковать можно при помощи gunzip (man gunzip или тут (//\"http://www.opennet.ru/man.shtml?topic=gunzip&category=1&russian=0\")).
2) /usr/src/linux-2.6.22.9-desktop-1mdv/.conf и /proc/config.gz лучше сравнить diff'ом (man diff или тут (//\"http://www.opennet.ru/man.shtml?topic=diff&russian=0&category=&submit=%F0%CF%CB%C1%DA%C1%D4%D8+man\")).
3) Если различаются, то взять лучше /proc/config.gz и его изменять под свои нужды. Т.к. это и есть конфиг ядра, которое работает в данный момент.
обычно что config.gz, что .conf в каталоге сырцов одно и то же, разве нет?
еще бывает что в /boot тот же конфиг валяется зачастую. имхо, лучше покурить хорошенько хелпы к опциям ядра, изучить свое железо и пробежаться полностью по всему конфигу, какой бы он ни был. тогда точно будет щастье

/smile.gif\' class=\'bbc_emoticon\' alt=\':)\' />
[quote name=\'dr Motor\' post=\'3994\' date=\'17.3.2009, 21:29\']обычно что config.gz, что .conf в каталоге сырцов одно и то же, разве нет?[/quote]
Неизвестно, что могли напихать мэйнтейнеры его дистрибутива в пакет исходников ядра и в пакет образа ядра. Это в Gentoo они совпадают, т.к. собираешь и тут-же ставишь образ ядра.
Цитировать1) /proc/config.gz -- это сжатый конфиг. Распаковать можно при помощи gunzip
Скажите а тогда что получается мне что его перед тем как править нужно я так понимаю распаковать, а потом что запаковать т.е вернуть в исходное положение? Так что ли? Или можно оставить как есть?
И еще такой вопрос после внесения изменений в файл config.gz мне его надо просто сохранить или дать еще команду типа ($ make all) для пере компиляции ядра, подскажите что мне делать в моем случаи после внесения изменений в конфигурационный файл ядра.
[quote name=\'dalvis\' post=\'4001\' date=\'18.3.2009, 14:14\']
Цитировать1) /proc/config.gz -- это сжатый конфиг. Распаковать можно при помощи gunzip
Скажите а тогда что получается мне что его перед тем как править нужно я так понимаю распаковать, а потом что запаковать т.е вернуть в исходное положение? Так что ли? Или можно оставить как есть?
И еще такой вопрос после внесения изменений в файл config.gz мне его надо просто сохранить или дать еще команду типа ($ make all) для пере компиляции ядра, подскажите что мне делать в моем случаи после внесения изменений в конфигурационный файл ядра.
[/quote]
слово "распаковать" здесь как то не очень применимо. достаточно дать команду zcat /proc/config.gz > /папка_с_исходниками_ядра/.config. только предварительно убрав куда нить файл конфиг который уже лежит в папке с исходниками, а потом сравнть их. чтобы сконфигурировать ядро есть несколько способов -
простейший - открыть этот файл в редакторе и ручками подправить то что нужно. можно запустить режим опроса - последовательно отвечем на более 3000 вопросов

/biggrin.gif\' class=\'bbc_emoticon\' alt=\':D\' /> - не лучший вариант.
самый приемлемый для вас будет пожалуй зайти в папку с исходниками и конфигурить с помощью меню - make menuconfig- конфигурим, сохраняем. потом компилим.
есть и полностью иксовые варианты конфигурационного меню - gconfig или kconfig - но лучше все таки использовать menuconfig, имхо.
Спасибо за подробное разъяснения! У меня еще вопрос после компиляции ядра необходимо внести изменения в загрузчик lilo а именно отредактировать файл /etc/lilo.conf честно говоря я у себя этот файл найти не смог, а так же конфигов других загрузчиков так же нет: /etc/aspldr.conf и /boot/grub/grub.conf хотя у последнего директория /boot/grub есть, а конфига в ней нет. Как мне все таки вычислить какой используется у меня загрузчик и где его конфиг может быть, работаю на Linux Mandriva 2008.1???
[quote name=\'dalvis\' post=\'4020\' date=\'19.3.2009, 1:05\']Спасибо за подробное разъяснения! У меня еще вопрос после компиляции ядра необходимо внести изменения в загрузчик lilo а именно отредактировать файл /etc/lilo.conf честно говоря я у себя этот файл найти не смог, а так же конфигов других загрузчиков так же нет: /etc/aspldr.conf и /boot/grub/grub.conf хотя у последнего директория /boot/grub есть, а конфига в ней нет. Как мне все таки вычислить какой используется у меня загрузчик и где его конфиг может быть, работаю на Linux Mandriva 2008.1???[/quote]
)) lilo.conf и не найдешь - по дефолту майнтейнеры этот загрузчик сейчас уже не ставят на свои дистры. тем более что нашлась таки /boot/grub - вот это то и есть то что нужно - згрузчик grub. файл grub.conf в нем есть опять же не всегда, но зато обязательно есть файл menu.lst - вот он тоже подойдет. после сборки ядра это самое свежесобранное ядро нужно будет скопировать в boot поименовав его как будет удобно (главное чтобы название НЕ совпадало со старым ядром )) и затем дописать в файле /boot/grub/menu.lst строки для возможности загрузки нового ядра. если все будет сделано верно, при перезагрузке машины получаете в обычном загрузочном меню еще один пункт - новое ядро - выбираете его и загружаетесь. если же загрузка будет неудачной, можно всегда ребутнуть машину и загрузиться со старым ядром - и спокойно искать причину неработоспособности нового - система будет работать как раньше. кстати, при самосборном ядре становится не нужен initrd, так что его в опции загрузки нового ядра можно не включать.
p.s. вообще то все это уже сто раз описано, и дабы исключить в дальнейшем такие простые вопросы приведу несколько полезных для вас ссылок, если вы еще не ознакомились с этими материалами, конечно.
в первую очередь для вас будут обязательны к прочтению статьи "ядерная физика для домохозяйки" (//\"http://www.linuxforum.ru/lib/articles/system/kernel26_install.phtml\") и "ядерный распад или термоядерный синтез" (//\"http://rus-linux.net/main.php?name=kernel.koi\").
также рекомендуются раскуриванию еще немножко

/biggrin.gif\' class=\'bbc_emoticon\' alt=\':D\' /> материалов тут (//\"http://rus-linux.net/main.php?name=kernel.koi\") и тут (//\"http://www.linux.brestauto.com/linux_kernel.html\") (там уж выбирайте сами что именно вас больше интересует). также будет полезен к ознакомлению этот замечательный ресурс (//\"http://wiki.kryukov.biz/wiki/Параметры_ядра_Linux\"), где хотя бы частично описаны хелпы к параметрам ядра
на русском.
после ознакомления с этими материалами думаю пересборка ядра не составит труда

/wink.gif\' class=\'bbc_emoticon\' alt=\';)\' />
p.p.s дорогу осилит идущий... © хз_кто-не_помню
Огромное мерси, за помощь !!! Предложенный вами материал для изучения я в основном прочитал, но как правила вопросы возникают как раз тогда, когда начитаешь ковыряться практически, то не так, это не там находится, вот так вот! Еще раз спасибо!!!

/biggrin.gif\' class=\'bbc_emoticon\' alt=\':D\' />
Здравствуйте! Тоже столкнулся с проблемой компиляции ядра и ситуация даже чем то похожа. Мне необходимо сделать шлюз из линукс машины, а для этого необходимо настроить iptables, что собственно и привело меня к вопросу компиляции ядра. Так вот если ближе к телу. То у меня возник следующий вопрос по поводу файла menu.lst у меня он выглядит так:
timeout 10
color black/cyan yellow/cyan
gfxmenu (hd0,0)/boot/gfxmenu
default 0
title linux
kernel (hd0,0)/boot/vmlinuz BOOT_IMAGE=linux root=/dev/sda1 resume=/dev/sda5 splash=silent vga=788
initrd (hd0,0)/boot/initrd.img
title linux-nonfb
kernel (hd0,0)/boot/vmlinuz BOOT_IMAGE=linux-nonfb root=/dev/sda1 resume=/dev/sda5
initrd (hd0,0)/boot/initrd.img
title failsafe
kernel (hd0,0)/boot/vmlinuz BOOT_IMAGE=failsafe root=/dev/sda1 failsafe
initrd (hd0,0)/boot/initrd.img
какую запись
и куда сделать в данном файле, что бы система загрузилась с нужного мне ядра т.к во всех примерах описывается работа и примеры к файлу lilo.conf а про menu.lst можно было бы конечно и поэкспериментировать но не тот случай не хочется рисковать, подскажите как решить этот вопрос???
Вообще-то у меня при компиляции ядра Grub сам апдейтит menu.lst
Чтобы грузиться с ядра которое ты собрал у себя на машине нужно:
напиши выше [color=\"#FF0000\"]title linux[/color] запись (дабы в случае чего можно было загрузиться со старого ядра (здесь - linux)):
[color=\"#8B0000\"]Примечание[/color]: Вместо newkernel ты должен указать скомпилированое ядро (смотрим здесь его: [color=\"#FF0000\"]/boot[/color]) например [color=\"#FF0000\"]2.6.27-14-generic[/color]
title linux-newkernel
kernel /boot/vmlinuz-newkernel root=/dev/sda1 resume=/dev/sda5 splash=silent vga=788
initrd /boot/initrd.img-newkernel
"Живой" пример:
title linux-2.6.27-14-generic
kernel /boot/vmlinuz-2.6.27-14-generic root=/dev/sda1 resume=/dev/sda5 splash=silent vga=788
initrd /boot/initrd.img-2.6.27-14-generic
Перезагрузись и попробуй загрузиться с linux-newkernel, отпишись потом как прошло. Кстати у тебя дистр Mandriva стоит?
2 Drone: а зачем initrd ? если ядро собирается вручную то инитрд не нужен ведь.
Разве? Вродь когда ядро инсталлируется оно же создает initrd.img, который необходимые модули ядра содержит. Разве нет?..
[quote name=\'Drone\' post=\'4156\' date=\'27.3.2009, 22:25\']Разве? Вродь когда ядро инсталлируется оно же создает initrd.img, который необходимые модули ядра содержит. Разве нет?..[/quote]
тут еще смотря как собирается ядро. если генкернелом, то да - так и есть. если же ядро собрано полностью вручную и потом командой make && make modules_install, и затем скопировано в /boot/, то initrd не нужен. вообще, всех тонкостей уже не припомню, но я пересобираю ядро именно так. полностью с нуля ядро собирал только дважды - один раз для десктопа, и один раз для ноута. все остальные пересборки (а они были раз двадцать

/biggrin.gif\' class=\'bbc_emoticon\' alt=\':D\' />) - добавление убирание чего-либо происходят очень быстро и просто. и никогда не юзал инитрд.
[quote name=\'dr Motor\' post=\'4158\' date=\'27.3.2009, 22:35\'][quote name=\'Drone\' post=\'4156\' date=\'27.3.2009, 22:25\']Разве? Вродь когда ядро инсталлируется оно же создает initrd.img, который необходимые модули ядра содержит. Разве нет?..[/quote]
тут еще смотря как собирается ядро. если генкернелом, то да - так и есть. если же ядро собрано полностью вручную и потом командой make && make modules_install, и затем скопировано в /boot/, то initrd не нужен. вообще, всех тонкостей уже не припомню, но я пересобираю ядро именно так. полностью с нуля ядро собирал только дважды - один раз для десктопа, и один раз для ноута. все остальные пересборки (а они были раз двадцать

/biggrin.gif\' class=\'bbc_emoticon\' alt=\':D\' />) - добавление убирание чего-либо происходят очень быстро и просто. и никогда не юзал инитрд.
[/quote]
Дело конечно занятное

/smile.gif\' class=\'bbc_emoticon\' alt=\':)\' />
Надо будет как-нить время найти тоже пересобрать с нуля полностью - так сказать набраться опыта)
Да у меня Linux Mandriva 2008.1
Цитироватьkernel (hd0,0)/boot/vmlinuz BOOT_IMAGE=linux root=/dev/sda1 resume=/dev/sda5 splash=silent vga=788
initrd (hd0,0)/boot/initrd.img
Вопрос чисто для перестраховки

/rolleyes.gif\' class=\'bbc_emoticon\' alt=\':rolleyes:\' />
скажите а вот у вас в примере нет вот этих параметров в начале строки
(hd0,0) это критично или нет по моему они обозначают диск на котором стоит ось. Так мне указывать их или нет???
[quote name=\'norman\' post=\'4163\' date=\'27.3.2009, 23:44\']Да у меня Linux Mandriva 2008.1
Цитироватьkernel (hd0,0)/boot/vmlinuz BOOT_IMAGE=linux root=/dev/sda1 resume=/dev/sda5 splash=silent vga=788
initrd (hd0,0)/boot/initrd.img
Вопрос чисто для перестраховки

/rolleyes.gif\' class=\'bbc_emoticon\' alt=\':rolleyes:\' />
скажите а вот у вас в примере нет вот этих параметров в начале строки
(hd0,0) это критично или нет по моему они обозначают диск на котором стоит ось. Так мне указывать их или нет???
[/quote]
Я так и подумал что Мандрива - оформление menu.lst характерно для Мандривы

/smile.gif\' class=\'bbc_emoticon\' alt=\':)\' />
Если у вас ядро находиться на другом разделе, отличающемся от раздела содержащего корневую файловую систему, то тогда вам нужно указать
(hd0,0) (в вашем случае).
[quote name=\'norman\' post=\'4163\' date=\'27.3.2009, 23:44\']вопрос чисто для перестраховки

/rolleyes.gif\' class=\'bbc_emoticon\' alt=\':rolleyes:\' />
скажите а вот у вас в примере нет вот этих параметров в начале строки
(hd0,0) это критично или нет по моему они обозначают диск на котором стоит ось. Так мне указывать их или нет???[/quote]
hd(0,0) - это параметр груба. дело в том, что в грубе физические диски и разделы на них обозначаются немного иначе чем в системе.
в данном случае первая цифра обозначает первый физический диск, а вторая логический раздел на этом диске. получается нумерация в грубе происходит с нуля. то есть если бы ядро находилось на 3 м разделе второго физического диска - параметр был бы hd(1,2).
но в вашем случае изменять их не нужно, ибо свежесобранное ядро положите рядом со старым, то есть на тот же физический диск и логический раздел. параметры нужно тупо скопипастить - в том же файле menu.lst сделав еще одну запись.
title newkernel
kernel (hd0,0)/boot/vmlinuz BOOT_IMAGE=linux root=/dev/sda1 resume=/dev/sda5 splash=silent vga=788
initrd (hd0,0)/boot/initrd.img
только лишь изменив название ядра.
p.s. а вообще man grub в таких случаях обязателен к раскуривванию

/wink.gif\' class=\'bbc_emoticon\' alt=\';)\' /> ну и гуголь в помощь - пока вы это не осознаете мало что будет получаться ). да и метод научного тыка тоже очень просветляющая штука

/biggrin.gif\' class=\'bbc_emoticon\' alt=\':D\' />