Магия загрузки. Умный Gujin, новаторский netboot.me и ванильный boot.kernel.orgМаксим «hatchet» Полевой, maks.hatchet@yandex.ru Скажи, как ты относишься к тому, чтобы обзавестись бутлоадером, который не требует настройки и умеет самостоятельно искать ОС на твоем жестком диске? А как тебе идея загрузки всегда свежей версии ОС через интернет, без необходимости ее установки, обновления и восстановления в случае сбоя? Заманчиво? Тогда читай дальше, твоему вниманию будет представлен умный загрузчик Gujin, а также онлайновые сервисы netboot.me и boot.kernel.org. Gujin. Умный зверьLiLo дал Linux возможность быть загруженным, Grub позволил избавиться от необходимости перезаписи загрузчика после изменения конфигурационного файла, а Gujin (http://gujin.sourceforge.net) не требует ни перезаписи загрузчика, ни конфигурационного файла. Ключевая особенность этого загрузчика - автоматический анализ разделов и файловых систем в поисках Linux-ядер, образов загрузочных дисков (*.bdi) и ISO-образов без необходимости ручной настройки. Фактически Gujin вообще не имеет конфигурационного файла. Все, что нужно сделать для добавления нового ядра в загрузочное меню - просто скопировать его в каталог /boot. Всю остальную работу загрузчик сделает во время своей инициализации. При этом, если помимо Linux в твоей системе есть и другие ОС - они также будут добавлены в меню. Кроме жесткого диска, Gujin может быть установлен на самые разные накопители, такие как флоппи-диски, USB-брелки, CD-ROM, SD-карты. Особая версия загрузчика существует для операционной системы DOS. Gujin умеет напрямую загружать файлы ELF32 и ELF64, сжатые gzip, понимает такие файловые системы, как FAT12, FAT16, FAT32, ext2, ext3, ext4 (с постоянным размером inode) и ISO 9660. Он способен загрузить операционную систему практически с любого накопителя, даже будучи неустановленным на нем (например, загрузить ОС с USB-накопителя после загрузки с жесткого диска). Автор загрузчика прикладывает все усилия, чтобы его детище оставалось максимально совместимым с самыми разными операционными системами. Во-первых, Gujin почти все время работает в реальном режиме процессора, благодаря чему не теряет возможности передавать управление другим загрузчикам, которые ожидают точку вхождения в реальном режиме, а также передавать управление загружаемым CD/DVDROM-образам и отвечать на неизвестные прерывания BIOS. Во-вторых, Gujin не пытается установить страничный режим памяти, так как это работа ядра: 64-битные ELF-файлы должны поддерживать трансляцию с 32-х на 64 бита собственными силами. В-третьих, даже после перехода в защищенный режим Gujin не активирует прерывания: это опять-таки должно делать ядро. Gujin распространяется в виде исходных текстов и собранных пакетов почти для всех дистрибутивов Linux; получить их можно на страничке http://sourceforge.net/projects/gujin/files. Дистрибутивные пакеты предварительно упакованы в tar.gz-архивы, поэтому перед установкой их придется извлечь:
После окончания установки в каталоге /sbin появится исполняемый файл gujin, с помощью которого производятся все манипуляции с загрузчиком, каталог /usr/share/doc/gujin/ с документацией, man-страница и «вторая голова» загрузчика /boot/gujin.ebios. Уже на этом этапе работоспособность Gujin можно проверить, просто перезагрузив машину. Если желания перезагружать машину нет, просто установи qemu и выполни команду:
На экране ты должен увидеть меню загрузчика и список операционных систем на выбор. Клавиши <F1-F12> предназначены для выбора вариантов загрузки, клавиши «+» и «-» позволяют изменить разрешение экрана, клавиша «точка» переводит загрузчик в текстовый режим и обратно, клавиши «/» и «*» изменяют количество цветов, пробел открывает меню настроек. В идеале должна работать еще и мышь, но в qemu она почему-то отказывается фурычить. Меню настроек позволяет контролировать многие аспекты поведения и внешнего вида загрузчика. Такие как информация, отображаемая в меню выбора ОС, опции графического режима (например, активация режима VESA), области поиска ядер и загрузочных дисков (например, ISO-образы, CD-ROM, флоппи-диски, скрытые разделы), активация джойстика (!) и многое другое. Включая и такой пункт, как удаление Gujin и восстановление прежнего загрузчика. Изменения будут сохранены. Командный интерфейс Gujin достаточно прост и включает в себя: 1. Установку загрузчика на выбранное устройство:
Устройством может быть и USB-брелок, и простой файл. 2. Получение информации о наличии загрузчика на выбранном устройстве:
Кроме имени установленного загрузчика, на экран будет выведена масса другой диагностической информации. 3. Удаление gujin и восстановление предыдущего загрузчика:
С помощью Gujin легко создавать весьма нестандартные конфигурации для загрузки ОС с самых разных носителей. Например, ты можешь разместить «вторую голову» загрузчика в нужном тебе каталоге, просто выполнив команду:
Или расположить первую и вторую головы gujin на разных жестких дисках:
Причем расширение .ebios указывает на метод, который будет использовать первая голова gujin для загрузки второй. Возможные варианты: bios, ebios, idechs, idelba, and idel48.
После этого на флоппи-диске останется поместить дистрибутив и/или ядро и образ initrd в каталог /boot. Чтобы Gujin не выводил почем зря меню, используй флаг '-t' во время установки загрузчика.
На устройстве будет создан один раздел с файловой системой FAT12/16/32 в зависимости от размера. В случае наличия таблицы разделов команда вернет ошибку, а флешку придется очистить с помощью команды dd:
Не каждый BIOS сможет использовать USB-накопитель с таблицей разделов для загрузки операционной системы. Поэтому предпочтительнее отформатировать флешку в так называемом формате superfloppy, при котором она будет представлять собой один большой раздел (без таблицы разделов):
Gujin можно использовать для создания загрузочных CD (расширение El-Torito). Для этого подготовь с помощью mkiso или другой программы ISO-образ с нужным тебе дистрибутивом (конечно, его придется немного допилить) и выполни команду:
Команда изменит первые 512 байт файла и допишет в его конец небольшой FAT-раздел, содержащий вторую голову загрузчика. После файл можно записать на диск или USB-флешку. Опция '-t' сработает и в этом случае.
Gujin. ВыводыНа моей машине Gujin отработал идеально. Все, что понадобилось сделать - установить пакет и перезагрузить машину. Меню содержало все найденные ядра, а сам загрузчик благополучно отдавал управление ОС. Учитывая, что Gujin способен искать не только ядра, но и MBR-записи, ISO-образы, другие ОС на жестких дисках, USB-брелках, флоппи-дисках, и при этом сам благополучно загружается со всех этих устройств, осмелюсь предположить, что на сегодня это самый продвинутый и простой в использовании бутлоадер. Поэтому я буду вспоминать о нем каждый раз, когда мне понадобится организовать нестандартную схему загрузки чего-либо. Сетевой загрузчикХотел бы иметь флешку, содержащую множество самых разных Linux-дистрибутивов и различных диагностических утилит, которые находились бы в актуальном состоянии в любой момент времени? Скажешь, это невозможно? Отнюдь нет, создатели проекта netboot.me предлагают скачать образ такой флешки весом меньше одного мегабайта. Все просто: образ всего-навсего содержит сетевой загрузчик, который позволяет загрузить (и установить) ОС прямо из интернета, предлагая на выбор несколько вариантов дистрибутивов. Да, это очень медленный и «трафико-затратный» способ, но он имеет массу достоинств:
В основе netboot.me лежит загрузчик gPXE (http://etherboot.org/wiki), созданный для обеспечения возможности сетевой загрузки машин, не имеющих поддержки PXE. В отличие от PXE, располагающегося в памяти сетевого адаптера, загрузчик gPXE может быть записан на жесткий диск, флоппи-диск, USB-флешку и поддерживает дополнительный набор сетевых протоколов, таких как FTP, HTTP и NFS. После загрузки gPXE запрашивает меню операционных систем у сайта netboot.me и отдает управление пользователю. Кроме всего прочего, netboot.me позволяет добавлять в меню загрузчика собственные пункты. Для этого необходимо оставить на сайте пути к собственным kernel и initrd и прописать необходимые опции. Если конфигурация понравится администраторам сервиса, она будет добавлена в меню. На данный момент netboot.me предлагает три образа gPXE-загрузчика: для записи на USB-брелок, флоппи-диск и CD. Чтобы воспользоваться его возможностями, достаточно выполнить ряд простых действий: 1. Скачать gPXE-загрузчик. 2. Записать его на носитель:
3. Загрузиться с носителя. В случае статической настройки сети тебе придется указать свои сетевые реквизиты, но если сетью управляет DHCP-сервер, все заработает «из коробки». 4. Выбрать операционную систему для загрузки/установки. Сейчас поддерживается установка следующих ОС:
В виде загружаемых по Сети LiveCD доступны:
Также доступны следующие инструменты:
Кроме всего перечисленного, в наличии имеется игра nethack и система меню сервиса boot.kernel.org. Сервис boot.kernel.org (или сокращенно BKO) представляет абсолютно идентичную netboot.me функциональность. Он использует тот же gPXE и предлагает собственный вариант загрузочного меню, содержащий дистрибутивы:
Цель проекта: распространение загрузочных образов систем диагностики, инсталляторов дистрибутивов и LiveCD, тестирование экспериментальных версий ядра. Собственная конфигурация и сервер сетевой загрузкиВыше я уже упоминал о том, что netboot.me позволяет добавлять в сервис собственную конфигурацию для загрузки. Для этого необходимо залить ядро и образ initrd (дистрибутив должен быть в нем) на какую-нибудь сетевую машину с белым адресом, войти на сайт netboot.me (регистрация не требуется, сервис использует аккаунты google для управления пользователями), перейти по ссылке «MY CONFIGS», нажать на ссылку «new». В появившемся поле ввести имя новой конфигурации, описание, указать адрес ядра в поле «Kernel/Image», адрес initrd-образа в поле «Initrd» и необходимые аргументы ядра в поле «Args». После того, как конфигурация будет создана, в поле «Chainload URL» появится ее адрес, последним элементом которого будет ID конфигурации, — его необходимо запомнить. При следующей загрузке с помощью netboot.me нажми любую клавишу после появления строки «Press any key for options or wait n seconds». Выбери опцию «Boot a configuration directly» и введи ID своей конфигурации. В отличие от netboot.me, сервис boot.kernel.org не позволяет создавать собственные конфигурации, зато он полностью открыт. А это значит, что всю используемую ими платформу сетевой загрузки можно скачать и установить на свой сервер. Попробуем так и сделать. Для начала установим инструменты сборки, систему управления версиями git и ассемблер nasm:
Затем получим исходные тексты системы BKO:
Отредактируем конфигурационный файл config так, чтобы опция BASE_URL содержала URL, по которому будет доступен BKO (он будет вшит в gpxe), а опция ISO_LOCATION_LOCAL - URL ISO-образов дистрибутивов (сделаем его равным BASE_URL/ISO). Теперь запускаем процесс сборки gpxe и всех остальных компонентов BKO:
Скачаем модифицированные образы initramfs поддерживаемых дистрибутивов и их ISO-образы:
Все, осталось только перенести содержимое каталога BKO в корень веб-сервера (например, /var/www) и выставить на файлы корректные права доступа. Полезные опции командной строки Gujin
Ограничения Gujin
Проблема загрузки netboot.me и BKOНа некоторых машинах загрузочные диски netboot.me и boot.kernel.org могут отработать неправильно, в результате чего ты не увидишь загрузочное меню и не сможешь произвести выбор ОС. Причина в установке загрузчиком неподдерживаемого видеоадаптером режима. Исправить ситуацию пока нельзя, но ты можешь воспользоваться режимом командной строки (комбинация <Ctrl+B>) для ручной загрузки нужной конфигурации. WARNINGПо умолчанию Gujin ищет ядра, образы загрузочных дискет (*.bdi) и ISO-образы в каталогах / и /boot. Чтобы научить загрузчик искать файлы и в других каталогах, необходимо использовать опцию «--bootdir=/путь/до/каталога» во время установки загрузчика. |