Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

компиляция_ядра_в_debian_squeeze [2015/02/28 13:05] (текущий)
vovka Перенос со старой wiki
Строка 1: Строка 1:
 +**Дано:​** компьютер с установленной операционной системой Debian Lenny (стандартное ядро 2.6.32-5)\\
 +**Задача:​** установить более новое ядро, для примера 2.6.39.1\\
 +**Уровень пользователя:​** средний,​ умеющий пользоваться консолью и имеющий немного терпения.\\
 +**Решение:​**\\
 +
 +
 +==== Общие положения ====
 +Прежде чем переходить на новоя ядро, следует взвесить все "​за"​ и "​против":​ стандартное ядро в дистрибутиве выбирается исходя из совместимости с широко-распространённым железом,​ программными пакетами,​ используемыми библиотеками и компилятором. Может случиться так, что программное обеспечение из пакетов не будет работать на новом ядре. В этом случае лучше поискать патч, устраняющий ту или иную ошибку,​ и пропатчить существующую версию ядра. Тоже относится к включению поддержки новых сетевых драйверов. Если же вариант с перекомпиляцией существующей версии ядра не устраивает,​ или есть возможность поставить новое программное обеспечение для исключения зависимости от ядра, тогда смело можете браться за установку нового ядра.
 +
 +==== Выбор версии ====
 +В любом linux-дистрибутиве есть границы использования той или иной версии ядра. Определяются они стандартными ​ Си-библиотеками и компилятором используемым в системе. Приложения тоже зависят от библиотек и компилятора,​ поэтому граница в некоторых случаях может быть преодолена только переходом на более свежую версию дистрибутива.
 +
 +==== Подготовка ====
 +=== Соберите информацию о новом ядре ===
 +Не будет лишним,​ собрать информацию о ядре, версию которого Вы собираетесь ставить. Почитайте change-логи на предмет исправленных ошибок и включения кода новых драйверов.
 + 
 +=== Подготовьте установщик драйвера и документацию ===
 +Если у Вас стоит аппаратный драйвер nVidia, для нового ядра его придётся переустановить,​ поэтому подготовьте [[Установка драйвера видеокарты NVIDIA в Debian Lenny | инструкцию по установке драйвера]] в печатном виде. Также следует скачать бинарник драйвера и положить где-нибудь в домашнем каталоге,​ чтобы после успешной компиляции и установки нового ядра, можно было без проблем переустановить драйвер,​ поскольку старый драйвер на новом ядре не заработает и иксы Вы не запустите.
 +
 +=== Предварительно рассмотрите альтернативы после перехода на новое ядро ===
 +Как уже говорилось выше - возможны несовместимости программных пакетов с новым ядром.
 +
 +==== Процесс ====
 +=== Шаг 1. Выбор пространства для сбоки ===
 +Выбираем раздел\каталог с достаточным объёмом свободного места. Достаточным является объём как минимум в 3 раза больший,​ чем объём занимаемый исходниками. Например ядро 2.6.39 в tar.bz2-архиве занимает 74Мб. Распакованный из bzip2 в tar занимает уже 440Мб. Для компиляции,​ автору хватило каталога (раздела) в котором было 6Гб свободного места.\\
 +Обычно,​ в качестве каталога выбирают /usr/src, но можно выбрать и другой,​ лишь бы не /tmp (он очищается после каждой перезагрузки) и обладающий достаточным свободным объёмом.
 +
 +=== Шаг 2. Установка необходимых пакетов ===
 +Доустанавливаем необходимые пакеты вместе с зависимостями:​\\
 +mc, tar, buzip2, gcc, libc6-dev, binutils, make, module-init-tools,​ fakeroot, ncurses-base,​ libncurses5-dev,​ procps, build-essential,​ kernel-package \\
 +mc -  он же ''​Midnight Commander'',​ пригодится для работы с файлами и редактирования конфигов.
 +
 +Можно произвести установку через synaptic или в консоли:​
 +<​code>​
 +  # apt-get install tar bzip2 gcc libc6-dev binutils \ 
 +    make module-init-tools fakeroot ncurses-base libncurses5-dev \
 +    procps build-essential kernel-package ​
 +</​code>​
 +
 +=== Шаг 3. Получение исходных кодов ядра ===
 +Скачиваем ядро с http://​www.kernel.org/​ и ложим в выбранный каталог\раздел со свободным объёмом около 1 Гбайт. ​ Пускай это будет /usr/src .\\
 +Распаковываем ядро:
 +<​code>​
 +  # bunzip2 linux-2.6.39.1.tar.bz2
 +  # tar -xvf linux-2.6.39.1.tar
 +</​code>​
 +В итоге должен получиться каталог:​ /​usr/​src/​kernel-2.6.39.1 ​ , содержащий документацию и исходные коды.
 +
 +=== Шаг 4. Конфигурирование ядра ===
 +Лучшим способом сконфигурировать ядро перед компиляцией,​ является использование уже существующего конфига и правка опций в нём.\\
 +Выясняем,​ какая версия ядра работает в текущий момент:​
 +<​code>​
 +  $ uname -r
 +  2.6.32-5
 +</​code>​
 +Ядро версии 2.6.32-5. Значит конфиг должен обзываться **config-2.6.32-5-686** или **config-2.6.32-5** .\\
 +С помощью Midnight Commander`а скопируем конфиг из **/boot** в **/​usr/​src/​kernel-2.6.39.1/​** и переименуем в **.config**
 +
 +Запускаем конфигуратор ядра:
 +<​code>​
 +  # cd /​usr/​src/​kernel-2.6.39.1
 +  # make menuconfig ​
 +</​code>​
 +
 +С помощью графического конфигуратора можно отключить или задействовать в виде модулей или встроить в ядро, необходимый код. Предполагается,​ что пользователь должен ориентироваться что включать,​ а что отключать.\\ ​
 +Выбираем пункт "​**Load an Alternate Configuration File**"​ и загружаем для правки файл **.config** , который мы скопировали в текущий каталог.
 +
 +После конфигурирования,​ выбираем пункт "​**Save an Alternate Configuration File**"​ и сохраняем конфиг с тем же именем **.config**
 +
 +=== Шаг 5. Компиляция ядра ===
 +Итак, запаситесь терпением (а также чаем, кофем :-), долгожданная компиляция:​
 +<​code>​
 + # make-kpkg clean
 + # fakeroot make-kpkg --initrd --revision=custom.1.0 kernel_image
 +</​code>​
 +
 +//​Здесь,​ параметр **--initrd** даёт команду компилятору создать образ виртуальной файловой системы и поместить его в deb-файл для дальнейшей установки ядра через apt. Если не задать этот параметр,​ то придётся создавать и устанавливать образ вручную.//​
 +
 +Процесс компиляции может занять от 4-х часов на Pentium-III до 40...50 минут на Pentium-IV. ​
 +
 +<note important>​Помните,​ что процесс компиляции должен пройти без ошибок и до конца!</​note>​
 +
 +Причин,​ по которым ядро не собирается достаточно много и их нужно устранить или обойти,​ но ядро должно собраться,​ так если <color red>​**СКОМПИЛИРОВАТЬСЯ БЕЗ ОШИБОК**</​color>​. Если оно не собирается - в зависимости от сообщений компилятора об ошибках:​ меняйте конфигурацию ядра, версию ядра или компилятор.
 +
 +Если процесс завершился с выдачей ошибки - скопируйте текст ошибки или экран и попробуйте в сети Интернет по искать подобные случаи и устранить причину ошибки. ​
 +
 +Для запуска повторной компиляции,​ необходимо очистить все переменные и удалить модули:​
 +<​code>​
 + # make clean
 +</​code>​
 +, только затем повторить попытку:​
 +
 +<​code>​
 + # make-kpkg clean
 + # fakeroot make-kpkg --initrd --revision=custom.1.0 kernel_image
 +</​code>​
 +
 +=== Шаг 6. Установка ядра ===
 +
 +После успешной компиляции,​ в каталоге выше будет создан файл .deb-пакета ядра, который нужно будет установить стандартными средствами debian:
 +<​code>​
 + # dpkg -i /​usr/​src/​linux-image-2.6.39.1_1.0_i386.deb
 +</​code>​
 +
 +В итоге инсталлятор:​
 +  * поместит само ядро в /boot в виде файла /​boot/​vmlinuz-2.6.39.1, ​
 +  * поместит образ initrd туда же,
 +  * недостающие библиотеки поместит по каталогам системы (/​lib/​modules/​2.6.39.1),​
 +  * настроит загрузчик на использование нового ядра, о чем будет свидетельствовать новая строка в меню загрузчика.
 +
 +На этом, установку ядра можно считать завершённой и смело можно перейти к опробованию - **Шаг 7**.
 +
 +=== Шаг 7. Опробование ===
 +
 +Перезагружаем машину и пробуем загрузиться с нового ядра. Если загрузка прошла успешно,​ смотрим логи:
 +  * /​var/​log/​syslog
 +  * /​var/​log/​kernel
 +  * /​var/​log/​dmesg
 +, на предмет ошибок. В зависимости от наличия таковых - перезагружаемся и выбираем старое ядро. Идём в Интернет и ищем описание ошибок,​ после чего либо повторяем процесс компиляции с добавлением патчей или меням версию ядра. Если ошибок нет - тестируем те условия,​ при которых машина зависала на старом ядре, при этом посматривая в логи и если ядро устраивает,​ пробуем ставить аппаратные драйвера для видеокарты.
 +
 +В случае,​ если ядро не стартовало - делаем снимок экрана на мобильник или записываем вывод, перезагружаемся,​ выбираем рабочее ядро, загружаем операционную систему и в Интернете ищем решения проблемы.
 +
 +==== Некоторые примечания ====
 +  * Команды начинающиеся с:\\
 + **#** - нужно вводить от имени root`а.\\
 + **$** - можно вводить от имени обычного пользователя.\\
 +
 +  * На всякий случай,​ перед компиляцией ядра, сделайте резервную копию каталога /boot :
 +<​code>​
 + # cp -r /boot /boot.bak
 +</​code>​
 +При случайном удалении рабочего ядра или образа initrd, всегда можно будет восстановить из бэкапа.
 +
 +  * Шаги с 5...8 выполнялись автором через учётную запись root , поскольку операции производись на домашнем компьютере и автор уверен в своих действиях. ​
 +  * Если Вы собираетесь компилировать ядро в каталоге /usr/lib , помните,​ что права на этот каталог по умолчанию не разрешают запись обычным пользователям,​ поэтому из под root`a можно изменить права на доступ к каталогу или работать от имени root`а.
 +
 +==== Ресурсы ====
 +  * [[http://​nix.zeya.org/​forum/​index.php?​topic=131.0| Обсуждение статьи на форуме]]
 +  * Официальный сайт дистрибутива Debian http://​www.debian.org/ ​
 +  * Официальный сайт ядра Linux http://​www.kernel.org/​
 +  * [[http://​www.falkotimme.com/​howtos/​debian_kernel2.6_compile/​| Debian-Kernel-Compile-Howto]]
  
Печать/экспорт