Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Приемы работы в Ubuntu.
Глава 8: Администрирование

Оригинал: "Ubuntu Hacks: Chapter 8 - Administration"
Авторы: Кайл Ранкин, Джонатан Оксер, Билл Чайлдерс (Kyle Rankin, Jonathan Oxer, Bill Childers)
Дата публикации: June 2006
Перевод: Н.Ромоданов
Дата перевода: октябрь 2010 г.

Совет # 78: Сборка ядер в стиле Ubuntu

Специальные инструментальные средства уберегут вас от головной боли, связанной с компиляцией и установкой настроенных ядер.

В Debian есть несколько очень полезных инструментов, которые существенно упрощают работу по сборке и установке ядер, и, конечно, те же самые инструменты также доступны в Ubuntu. Они упрощают процесс компиляции ядра и создания из него пакета .deb, который позволяет устанавливать новое ядро точно таким же образом, как и любой другой пакет. Можно создать ядро на одной машине, а затем просто установить пакет на других машинах без перекомпиляции или отладки — это великолепно, если вам требуется обновить ряд аналогичных машин!

Чтобы собрать собственное ядро "в стиле Ubuntu", вам нужно получить исходные тексты ядра и различные инструментальные средства, необходимые для настройки, компиляции и сборки пакета.

Получение исходного кода

Вы, если захотите, можете самостоятельно получить официальные исходные коды ядра непосредственно с сайта http://ftp.kernel.org/pub/linux/kernel/ или с зеркала, но, конечно, есть также пакеты с исходным кодом ядра. Команда:

$ apt-cache search linux-source

позволит вам получить список пакетов с исходными кодами ядра Linux, которые уже готовы к работе. Выберите в качестве примера один из них, вам достаточно запустить следующую команду:

$ sudo apt-get install linux-source-2.6.15

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

$ cd /usr/src
$ sudo tar -xjf linux-source-2.6.15.tar.bz2

В результате вы получите директорий /usr/src/linux-source-2.6.15, который уже разархивирован и готов к конфигурированию. Все же сначала создайте символическую ссылку на этот директорий, которая будет называться linux, например, следующим образом:

$ sudo ln -sf linux-source-2.6.15 linux

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

$ cd /usr/src/linux

Необходимые инструментальные средства

Для того, чтобы установить основные инструментальные средства, вам нужно запустить следующую команду:

$ sudo apt-get install kernel-package libncurses5-dev

В результате на компьютер будет закачано большое количество вспомогательных пакетов, представляющих собой зависимости.

Способы конфигурирования

Есть несколько способов сконфигурировать ядро перед тем, как его компилировать, и во всех, кроме первого, используются различные аргументы команды make. Прежде, чем попробовать какой-нибудь из них, убедитесь, что в директории с исходными кодами ядра (которым должен быть /usr/src/linux, если вы ранее выполняли наши инструкции) у вас открыта shell-оболочка. Ниже перечислены методы конфигурирования в порядке возрастания их сложности:

Редактирование файла .config - Фактическая конфигурация хранится в директории с исходным кодом в текстовом файле с названием .config. Если вам действительно нужно его изменить (или если вы пытаетесь найти некоторый параметр, указанный в файле README, например, CONFIG_PACKET), вы можете с помощью текстового редактора, такого как vim или Anjuta, непосредственно отредактировать этот файл. Хотя это требуется делать очень редко.

make config - Основной метод, при использовании которого вам будет задана один за другим целая куча вопросов. Лично мы не нравится конфигурировать ядро таким образом, поскольку это последовательный метод и вы должны пройти через кучу вещей, на которые вам, вероятно, наплевать. Связывайтесь с этим вариантом только в том случае, если по какой-то причине другие варианты для вас недоступны.

make menuconfig - Это самый простой способ конфигурирования. В нем используется замечательное меню, навигация по которому осуществляется с помощью клавиатуры — вы можете для этого использовать клавиши со стрелками, клавишу Enter и клавишу пробела. Тем не менее, одна загвоздка, которая может коснуться вас, это то, что у вас для пакета Ncurses должны быть библиотеки разработчика, а не только сам пакет Ncurses. Вот почему мы несколько абзацев назад просили вас установить пакет libncurses5-dev!

make xconfig - Предпочтительный метод для машин с X; этот вариант очень похож на вариант с menuconfig, за исключением лишь того, что все это делается в замечательном графическом интерфейсе с использованием мыши для навигации. Для того, чтобы воспользоваться механизмом gotcha, вам нужен пакет tk8.3. Если вы получите ошибки, указывающие, что не удается найти "желаемое", выполните следующую команду:

$ sudo apt-get install tk8.3

и проблема должна разрешиться.

Конфигурирование ядра

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

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

Мы не будем вдаваться в подробности конфигурирования ядра, т. к. конкретные вариант конфигурирования могут существенно различаться и в сети есть много учебников, в том числе и Kernel-HowTo, в которых конфигурирование объясняется подробно. Хотя, в общем случае, вы должны пройтись по каждому меню и найти параметры и модули, которые вы хотите конфигурировать, и установить для них значение off (не используется), on (компилируется прямо в ядре) или module (компилируется отдельно и можно загрузить при необходимости).

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

Отметим один маленький трюк, основанный на том, что фактические данные о конфигурации хранятся в директории с исходным кодом ядра в файле с именем .config. После того, как вы решите все проблемы, касающиеся настройки ядра, и получите то, что хотите, все же переход на новое ядро может оказаться нелегким из-за того, что вам потребовалось пройти весь процесс конфигурации с нуля, и вы, почти наверняка, упустили что-нибудь важное - мы знаем, что это, как правило, случается! Для того, чтобы упростить себе жизнь, вы можете скопировать файл .config в новый директорий с исходными кодами ядра и автоматически перенести туда все ваши настройки. Затем вы можете снова запустить конфигурацию только для того, чтобы просто проверить настройки, сохранять их и двигаться дальше, как и раньше. Если вы не переходите на совершенно новый тип ядра, этот прием поможет вам сэкономить массу времени. Будьте аккуратны с этим приемом, если вы переходите на совершенно другое ядро, например, с версии 2.4.x на версию 2.6.x, поскольку многие из настроек будут совершенно другими и, хотя старая конфигурация будет все еще работать, в ней могут отсутствовать некоторые активированные параметры, которые есть только в новом ядре. Вы также можете после копирования старого файла .config запустить команду make oldconfig, которая вас будет спрашивать только о новых параметрах или о тех, которые изменились с момента настройки предыдущего ядра.

Компиляция и сборка пакетов

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

Если вы читали традиционное описание Kernel HOWTO, вы, вероятно, видели последовательности таких команд, как make dep && make clean && make bzImage, которые используются для сборки зависимостей, а затем сборки самого ядра. Вам не нужно ничего этого делать, вместо этого перейдите в директорий /usr/src/linux и просто наберите:

$ sudo make-kpkg kernel-image

Все будет выполнено в директории /usr/src/linux так, как это необходимо. Инструментальные средства ядра сначала откомпилируют ваше ядро и модули в соответствии с конфигурацией, которую вы создали, а затем соберут пакет Debian, который будет называться kernel-image-<версия_архитектуры>.deb и будет находиться вне текущего директория с исходным кодом, например, в /usr/src.

В зависимости от скорости вашей машины и от того, какие модули вы выбрали, на выполнение этот этапа может потребоваться продолжительное время. Подождите от 10 минут до получаса – в течение всего этого времени будет постоянно выдаваться большое количество отладочной информации, которая, вероятно, вообще не будет для вас интересна, если, конечно, не произойдет что-нибудь серьезное.

Установка пакета с вашим ядром

Вы почти у цели! Теперь у вас есть ядро, специально откомпилированное в соответствие с вашими требованиями и собранное в виде пакета Debian, уже готового к установке.

Теперь для установки вашего нового ядра потребуется лишь установить пакет с помощью dpkg точно также, как и любой другой пакет Debian:

$ sudo dpkg -i kernel-image-2.6.15_10.00.Custom_i386.deb

(замените kernel-image-2.6.15_10.00.Custom_i386.deb на название вашего пакета). Вам может быть задан вопрос о том, хотите ли вы создать загрузочную дискету, которая будет использовать этот образ; на десятках машин, которыми мы управляем, отсутствуют дисководы флоппи дисков, поэтому мы всегда говорим "no" ("нет"), но если вы хотите, вы можете ответить "yes" ("да"), чтобы создать загрузочную дискету.

dpkg также позаботится об обновлении конфигурации загрузчика, так что новое ядро будет доступно при следующей загрузке. Как для GRUB, так и для LILO, изменения будут сделаны автоматически, но если вы используете другой загрузчик, вам потребуется обновить его самостоятельно.

Когда вы устанавливаете пакет, dpkg помещает ваш новый образ ядра в директорий /boot, в котором обычно хранятся ядра, создает на ваше новое ядро символическую ссылку из /vmlinuz (вы можете убедиться в этом, набрав команду ls -l /vmlinuz), модифицирует файл /boot/grub/menu.lst или /etc/lilo.conf, необходимый для того, чтобы загрузчик мог найти ваше новое ядро, и перемещает и переименовывает предыдущее ядро так, чтобы оно было запасным на случай, если ваше новое ядро окажется неработоспособным.

Обратите внимание, что в данный момент, вы, в действительности, не пользуетесь новым ядром; оно просто создано и готово для перехода на него при следующей перезагрузке. Установка нового ядра является одним из тех немногих событий, для которых действительно требуется перезагрузка системы Linux.

Перезагрузка и тестирование

Время большой проверки! Если вы работаете в X, выйдите из сессии и перезагрузите компьютер. Если нет, то просто наберите команду sudo reboot. Когда GRUB будет загружен, вы сможете нажать клавишу Esc для того, чтобы увидеть список имеющихся ядер, в том числе и новое. Выберите его и нажмите клавишу Enter.

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

$ uname -a

Для получения дополнительной информации о том, какие модули были загружены, и правильно ли новое ядро определило ваше оборудование, вы можете посмотреть журнал dmesg:

$ dmesg | less

Если все работает так, как ожидалось, поздравляем! Вы только что скомпилировали и установили ядро "в стиле [Debian | Ubuntu]".

Установка на другие машины

Становится абсолютно очевидным удобство сборки ядер в виде пакетов. Если вы хотите установить ваше настроенное ядро на другие машинах, это сделать будет очень просто: просто скопируйте пакет .deb, который вы создали, на целевую машину и установите его с помощью dpkg точно так, как и раньше. Все просто!

На каждой машине не нужно компилировать ядро, копировать на машины исходный код и даже устанавливать на них компиляторы. Вся сложная работа будет сделана один раз на одной машине и ее не потребуется повторять.

Если вы работаете в организации, в которой много серверов, или в компьютерной лаборатории и у вас много машин, на которые нужно установить ядро, лучшим способом сделать это, вероятно, является размещение пакета с ядром в локальном репозитарии пакетов и переноса его по сети на все ваши компьютеры. О том, как сделать это, вы можете узнать в разделе "Создание своего собственного репозитария пакетов" [Совет # 65].

Установка нескольких копий одной версии ядра

Во время тестирования вам часто будет требоваться устанавливать несколько копий одной и той же версии ядра, но это может привести к проблемам: модули устанавливаются в директорий в соответствие с номером версии ядра, поэтому если вы захотите попробовать различные варианты конфигурации, вы, вероятно, столкнетесь с проблемами. К счастью, инструментальные средства ядра позволяют обойти это ограничение путем добавления произвольной строки к обычной строке версии. Это означает, что вы можете устанавливать много вариантов одной и той же версии ядра и все аккуратно хранить на диске, а также выбирать, какую из них вы хотите использовать при запуске.

Чтобы изменить строку, в которой указана версия, при создании пакета просто воспользуйтесь параметром --append-to-version, например следующим образом:

$ fakeroot make-kpkg --append_to_version=-jon17 kernel-package

В результате будет создан пакет с ядром с названием kernel-image-2.6.15-jon17_10.00.Custom_i386.deb.


Назад Оглавление Вперед