Перейти к содержимому. | Перейти к навигации

Разделы
Персональные инструменты
Вы здесь: Главная Members plone Быстрая сетевая загрузка "живых" образов дисков с Fedora 12 через PXE

Быстрая сетевая загрузка "живых" образов дисков с Fedora 12 через PXE

Предисловие

Многие знают, что в дистрибутивах Fedora есть инструмент 'livecd-creator' из пакета 'livecd-tools', позволяющий создавать "живые диски" для загрузки Fedora на компьютер без установки на жёсткий диск. Ещё меньшему количеству людей интересен скрипт 'livecd-iso-to-pxeboot' из того же пакета, конвертирующий полученный образ ISO в образ initrd, который можно загрузить через PXE на "тонкий клиент". Но вот проблема: образ initrd имеет размер в несколько сотен мегабайт, что выливается в оооооооооооооооооооочень долгое время загрузки только этого образа (например, образ в 200 МБ загружается через сеть около полутора минут), что, мягко говоря, непонятно и непозволительно. К тому же, на загружаемом компьютере необходимо иметь такой объём памяти, который позволит не только разместить весь образ, но и заработать потом основной ОС.

Но выход есть, и в этой статье речь пойдёт как раз о том, как в разы уменьшить время загрузки initrd.img и требования к памяти.

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

Предыстория вопроса для меня

Сетевой загрузкой Linux-систем я заинтересовался очень давно, приблизительно в 2000 году. В то время я был заведующим лаборатории с рабочими компьютерами конфигурации [CPU=i386,RAM=4MB,HDD=200MB], связанными между собой сетью на коаксиале (1Mbit). Т.к. студенты частенько убивали DOS различными способами (а свободного времени у меня было в 10 раз больше, чем сейчас), я сделал в лаборатории сетевое восстановление разделов с DOS'ом. Работало оно так: установленный в 2-х-мегабайтном разделе GRUB имел в меню пункт "Recovery" (конечно, под паролем), при выборе которого GRUB загружал ядро со включенной поддержкой NFS-root. Ядро запускало init, который запускал мой скрипт восстановления раздела, который с помощью dd копировал заранее сделанный образ DOS-раздела и производил некоторые манипуляции с файлами конфигурации на восстановленном разделе, чтобы TCP/IP в DOS'е работал корректно :-). И вот эта система восстановления компьютеров работала долгие годы, даже после того, как в лаборатории поменялся заведующий.

Первый вариант для Fedora 7

К концу 2007 года у меня был уже большой опыт работы с терминальными клиентами. Начинал с LTSP, потом перешёл к Thinstation. Однако, с течением времени менялись требования и к рабочим местам, и к их количеству. Дешевле стало купить не настоящий "тонкий клиент", а самый слабый компьютер, например, в конце 2008 года его конфигурация была такая: [CPU=AMD Sempron 3000+,RAM=512,video=itegrated,HDD=нет]. Но было бы несколько обидно отдавать "такое" на одно рабочее место, поэтому ко встроенной видеокарте добавлялась внешняя, и получалась двухголовая бездисковая рабочая станция (а точнее, таких рабочих станций было куплено три).

А вот с программной частью начались проблемы. Thinstation был не готов работать ни со встроенной сетевой картой (из-за отсутствия в старом ядре поддержки новой сетевой карты), ни с двухголовой конфигурацией. Я понял, что с ПО для новых тонких клиентов придётся повозиться. Вот тут-то и пришла в голову идея использовать "живые образы" из ISO. Программы "livecd-iso-to-pxeboot" тогда ещё не было, поэтому начинал практически с нуля. В общем, после недели ежедневной возни с livecd-tools (а также его вспомогательной программой mayflower), и десятков перезагрузок родилось вполне рабочее решение для сетевой загрузки образов. Но, оно было неполноценным, в том плане, что драйвера сетевых карт можно было указывать, изменяя сам скрипт 'livecd-creator'а. Времени для "причёсывания" кода у меня тогда не было, поэтому всё это отложилось на годы и не публиковалось :-(.

Отдельно хочу сказать о выборе второй видеокарты. Я не подумал о последствиях, и в заказе на поставку к интегрированной на материнскую плату NVidia была добавлена внешняя двухголовая ATI... Я проклял всё, когда пытался завести их все вместе, с разными комбинациями драйверов. Но в итоге было найдено решение - скрипт, который перед нормальным запуском X'ов запускал Xorg с ключом '-probeonly' и инициализировал видеокарты по очереди и в различных комбинациях на screen'ах, с использованием драйверов nv, nvidia и radeonhd. Поиск этого решения занял ещё две недели.

Текущий вариант для Fedora 12

В конце января 2010 года мне пришлось снова задуматься над этим вопросом. Новые "тонкие клиенты", хоть и были одноголовыми, но имели на борту другие сетевые- и видеокарты, к тому же дистрибутив Fedora сильно подрос. Попробовав результат работы программы 'livecd-iso-to-pxeboot', я пришёл к выводу, что так нельзя. Но взять готовые варианты из решения для Fedora 7 было невозможно - в новом дистрибутиве начал использоваться dracut, и livecd-creator использовал образ initrd, который собирал dracut.

Но решение снова было найдено, теперь всего за два рабочих дня. Предлагаемый минимальный патч к dracut'у + конвертер 'livecd-iso-to-nfssquash' решают вопрос подключения сжатого образа squashfs к тонкому клиенту с помощью NFS.

Патч состоит из 3-х основных частей:

  • предварительный парсер параметров командной строки, добавляющий некоторые хаки в систему событий dracut'а (кстати, система событий сделана довольно-таки просто, но без документации потребовала некоторое время на изучение).

  • модификации в скрипте 'dmsquash-live-root', отключающие монтирование блочного устройства, которого у нас нет.

  • модификации в скрипте init, добавляющие некоторую полезную функциональность (описывается ниже в разделе "Бонус").

Все эти изменения активируются только в случае использования в командной строке ядра параметра "nfssquash".

Итак, что нужно сделать, чтобы всё это заработало:

  1. Загрузить пакеты dracut, dracut-network, livecd-tools-nfssquash и nfssquash-setup-client c этого сайта.

  2. Скопировать пакеты dracut и dracut-network, в каталог, где будет сделан репозиторий пакетов.

  3. В этом же каталоге выполнить команду "createrepo -d ." для создания репозитория.

  4. Добавить в файл kickstart репозиторий, в котором находится изменённый пакет dracut.

  5. Добавить в раздел "packages" файла kickstart пакет "dracut-network". Простое включение этого пакета в список на установку позволяет производить загрузку с NFS-root.

  6. Собрать образ диска ISO с помощью инструмента livecd-creator.

  7. Установить пакет livecd-tools-nfssquash и сконвертировать образ диска с помощью скрипта livecd-iso-to-nfssquash. Результат работы скрипта будет лежать в подкаталоге tftpboot текущего каталога.

  8. Скопировать содержимое tftpboot в соответствующее место на PXE/NFS-сервере (рекомендуется сделать тестовый раздел).

  9. Добавить в список экспортируемых каталогов NFS-сервера /tftpboot/liveimg и /tftpboot/livecfg (с параметром "только для чтения").

  10. Загрузить тестовый "тонкий клиент".

Бонус

Плюсом сетевой загрузки описанного выше способа является то, что из сети можно загрузить не только образ диска тонкого клиента, но и модификации в "живой" образ, уникальные для каждого компьютера (или группы). Настройки, сделанные для его работы, копируются администратором на NFS-сервер и "тонкий" клиент, сразу после подключения образа, копирует эти изменения в свою файловую систему. Например:

  • на одном из используемых "тонких клиентов" установлен сканер;

  • персональная тонкая настройка "рабочего стола" пользователя;

  • ключи SSH хоста, генерируемые клиентом при первой загрузке, всё время будут одними и теми же.

И всё это можно динамически изменять, не пересобирая подключаемый образ.

Функциональность изменения файлов образа включается параметром 'nfssquash_conf' в командной строке ядра (пример можно увидеть в файле tftpboot/pxelinux.cfg/default). Если этот параметр есть, то производится попытка подключения соответствующего каталога с NFS-сервера, и уже из него производится запуск скрипта, который и производит действия по копированию файлов в подключенный "живой" образ. На NFS-сервере для этого необходимо установить пакет nfssquash-setup-client, в этом же пакете находится небольшая документация на русском языке.

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

Предостережение о безопасности. Если в сети имеются недоверенные хосты, может быть необходимо ограничить список тех хостов, которые имеют доступ к /tftpboot/livecfg, т.к. ключи SSH могут попасть в руки злоумышленника.

Прочее

 

Файлы

 

Приветствуется перевод статьи на другие языки, и перепечатка без изменения текста, с указанием автора.

Автор: Резцов М.В., системный администратор ЛВС АКВТ
Дата последнего изменения: 2010-02-09

Действия с Документом