Зачем я написал Инсталятор Ядра (Install Kernel (ik))и как он работает
 
Автор: (C) Justin Piszcz
Перевод: (C) Владимир Меренков


Инсталятор ядра (ik (Install Kernel)) доступен на http://freshmeat.net/projects/ik и http://www.ramdown.com/war/ik.

В декабре 2000 года, после 4 лет использования Linux, я понял, что на компиляцию и установку ядер стало уходить расточительно много времени. И я решил написать свой собственный скрипт установки ядра, назвав его Install Kernel (ik), так как других скриптов на тот момент не было, а мне нужно было что-то, что устанавливало бы ядро Linux и автоматически конфигурировало загрузчик без какого-либо вмешательства пользователя. Ik взаимодействует с ОС Linux, перемещая и редактируя файлы. Без использования ik, при обновлении ядра время в основном тратится на: перемещение файлов и обновление конфигурационных фалов. Срипт ik состоит из трех основных блоков: проверка зависимостей, компиляция ядра, копирование файлов в соответствующие места и редактирования конфигурационных файлов загрузчика. Цель ik -- оказать помощь либо людям впервые устанавливающим ядро, либо тем, кто решил эффективнее использовать свое время.

Каждая операционная система имеет ядро какого-либо типа, ядро -- это "сердце" операционной системы. Текущая версия ядра Linux -- 2.4.17. Большинство пользователей либо перекомпилируют, либо просто обновляют ядра. Пользователю может потребоваться обновить используемое ядро с намерением добавить в него поддержку определенного вида устройств. Например, если появился USB (Universal Serial Bus) сканер, то можно сделать соответствующие изменения в файле конфигурации ядра, перекомпилировать и установить его. Причины для обновления ядра могут включать также улучшение подсистемы виртуальной памяти или устранение дефектов в безопасности. Примером могло бы послужить ядро Linux версии 2.4.11. Оно было уязвимо для атак типа "отказ в обслуживании". Это побудило пользователей, работающих на ядре 2.4.11, немедленно обновиться до версии 2.4.12, как только она появилась (благодаря этой уязвимости). Вот основные причины, по которым пользователю может захотеться перекомпилировать ядро своей системы или обновить его.

"Инсталятор ядра" работает с ОС Linux, запуская последовательность функций, или групп команд, которые автоматизируют процесс компиляции (перекомпиляции) и установки. Он состоит из трех групп функций: проверка зависимостей, сборка ядра и копирование файлов, редактирование конфигурационных файлов загрузчика. Благодаря разбиению функций на три группы, гораздо легче поддерживать скрипт и вносить в него изменения. "Инсталятор ядра" можно рассматривать и как программу, потому что программа делает поверки и соответственно выбирает путь выполнения. Обычно скрипт -- это файл, который содержит определенное количество команд, не имеющих внутренней логики исполнения. Таким образом, в техническом смысле ik -- это скрипт, но его можно назвать и программой.

Проверка зависимостей делается перед сборкой ядра для того, чтобы удостовериться в том, что текущая системная конфигурация не содержит внутренних противоречий. Всего выполняется семь проверок: проверка прав пользователя, наличие свободного дискового пространства, наличие правильных ссылок на файлы, проверка загрузчика, проверка конфигурации, проверка модулей. Первое -- проверка прав пользователя: является ли пользователь суперпользователем, то есть имеет ли он возможность редактировать важные системные файлы, доступные только для root-а. Проверка свободного места на диске проводится, чтобы убедиться в наличии по крайней мере 200 свободных мегабайт. На сегодняшний день только исходные тексты ядра занимают около 150 мегабайт. При компиляции ядра может потребоваться еще 50 мегабайт или более. Таким образом ik проверяет наличие 200MB свободного места на диске, чтобы при компиляции избежать риска нехватки дискового пространства. Далее, хотя это и не требуется, но по стандарту требуется символическая ссылка /usr/src/linux на /usr/src/linux-x.y.z. Четвертая проверка -- проверка наличия директории /boot, т.е. места, куда будут установлены файлы ядра Linux. Пятая проверка определяет начальный загрузчик, который будет использоваться. Для Linux существует два основных загрузчика: LILO и GRUB. Здесь определяется, было ли ядро загружено LILO либо GRAB, в зависимости от того, какой загрузчик использовался последним. Далее соотвествующим образом редактируется конфигурация выбранного загрузчика. Шестая проверка конфигурации "убеждается", что пользователь создал соответствующий файл конфигурации ядра, который будет использоваться при его сборке. Финальная проверка -- проверка модулей: если поддержка модулей отключена, то скрипт это определит и изменит процесс инсталяции для установки ядра без поддержки модулей. Главная идея, заключенная в проверке зависимостей -- убедиться в том, что пользователь не сможет навредить системе, даже если сделает что-то неправильно.

Процесс инсталяции также состоит из семи функций. Обычно он содержит всего несколько команд. Однако, из-за отличий, которые могут быть в пользовательских файлах конфигурации, каждая часть процесса сборки ядра должна быть проверена и, при необходимости, изменена. Первая функция производит проверку корректности установки зависимостей для всех файлов в директории с исходными текстами ядра. Вторая функция удаляет неактуальные объектные файлы и (или) файлы старого ядра. Следующая, третья функция - функция сборки ядра, она выполняет команды сборки ядра Linux. Далее функции четыре и пять создают и инсталируют модули в случае, если пользователь определил их поддержку в файле конфигурации ядра. Шестая функция помещает ядро Linux и его карту системных зависимостей в загрузочный раздел диска. И, наконец, последняя функция устанавливает модульные зависимости для нового ядра, если таковые опрделены. Процесс инсталяции включает также небольшую проверку ошибок для каждой части сборки ядра. Если какая-либо часть процесса завершилась неудачей, работа скрипта будет прекращена без модификации конфигурационных файлов загрузчиков. Это важно, так как если процесс не прекратить, он может изменить конфигурацию загрузчика и таким образом сделать систему "незагружаемой". Из-за широкого использования срипта важно поддерживать все конфигурации Linux.

Конфигурация начального загрузчика и процесс установки, вероятно, наиболее важная часть инсталяции нового ядра. Неверно сконфигурированный начальный загрузчик может либо вообще не загружать систему, либо не загружать ее с новым ядром. Этот этап важен и потому, что на некоторых системах установлено два или более начальных загрузчика. Для этого процесса определены четыре функции. Первая функция использует загрузчик, определенный в ходе проверки конфигурации системы. Вторая функция определяет, где находятся файлы конфигурации LILO или GRUB. Далее, в зависимости от того, какой загрузчик найден, конфигурационные файлы LILO или GRUB редактируются автоматически sed-ом. Sed -- это потоковый редактор, который может изменять файлы автоматически без вмешательства пользователя. Если бы требовалось вмешательство пользователя, то оно было бы представлено между определенными частями установки ядра. С помощь ik более эффективно используется время пользователя, так как для полной установки ядра требуется ввести только одну команду.

"Инсталятор ядра" -- полезный иснтрумент для тех, кто является новичком в Linux, кто часто пересобирает ядро или для тех кто ценит свое время. Количество команд для инсталяции ядра уменьшается с (примерно) тринадцати до одной. Новички в Linux могут найти его весьма привлекательным, поскольку вся внутренняя работа автоматизирована, а если что-то не так, то в большинстве случаев ik объявит пользователю, что именно случилось и как исправить ошибку. С другой стороны, для опытных пользователей, не желающих тратить ценное время на инсталяцию нового ядра, он также может показаться удобным. Эффективность инсталятора ядра в том, что он не требует вмешательства пользователя и уменьшает время, затрачиваемое на установку ядер, и эффективен тем, что, облегчая обновление ядра, позволяет новичкам реализовать право выбора.


Copyright (C) 2002, Justin Piszcz.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 75 of Linux Gazette, February 2002

Команда переводчиков:
Владимир Меренков, Александр Михайлов, Иван Песин, Сергей Скороходов, Александр Саввин, Роман Шумихин, Александр Куприн

Со всеми предложениями, идеями и комментариями обращайтесь к Сергею Скороходову ([email protected]). Убедительная просьба: указывайте сразу, не возражаете ли Вы против публикации Ваших отзывов в рассылке.

Сайт рассылки: http://gazette.linux.ru.net
Эту статью можно взять здесь: http://gazette.linux.ru.net/lg75/articles/rus-piszcz.html