Как с помощью PXE настроить утилиты, загружаемые через сеть

Источник: rus-linux
Aviad Raviv; Перевод: Н.Ромоданов

Примечание: эта статья предназначена не для начинающих, но вы всегда можете продолжить ее чтение!

Обзор

В настоящем руководстве вам будет рассказано об инструментальных средствах, с помощью которых вы сможете преобразовать утилиты таким образом, чтобы их можно было загружать через сеть (в режиме PXE). Хотя, к сожалению, невозможно таким образом преобразовывать любые утилиты, мы не были бы спецами, если бы не попытались хотя бы попробовать это сделать.

Если вы еще не пользуетесь Ubuntu в качестве средства номер один для устранения неполадок, диагностики и спасательныех процедур, то чего же вы ждете?

Но к вышесказанному следует добавить, что есть то, что просто нельзя сделать в Ubuntu LiveCD (например, обновить BIOS), либо, возможно, что вы уже пользуетесь некоторым другим инструментальным средством, которое вам нравится и вы предпочитаете продолжать им пользоваться в любой ситуации.

Рекомендации, допущения и предварительные требования

  • Предполагается, что вы уже настроили сервер FOG так, как описано в статье "Что такое сетевая загрузка (PXE) и как ей можно пользоваться".
  • Вы увидите, что в качестве редактора мы используем VIM, это только потому, что я привык к нему ... Вы можете пользоваться любым другим редактором, который вам нравится.
  • Утилиты Ultimate Boot CD (UBCD) используются в качестве примера, поскольку в отличие от некоторых других наборов утилит, их можно загрузить бесплатно и можно свободно использовать программы, в которых они применяются.

Почему просто не воспользоваться образом ISO при загрузке через сеть (режим PXE)?

Часто это первый вопрос, который задают, когда речь идет о загрузке через сеть (в режиме PXE). Если отвечать кратко, то хотя технически можно взять образ ISO и загрузить его по сети на клиентские машины, почти всегда в содержимом указанного ISO будет предполагаться, что есть доступное физическое представление в виде имеющегося физического устройства CD-ROM. Таким образом, вне зависимости от того, что находится внутри образа ISO, возможны попытки найти файлы, расположенные на "постзагрузочных секторах" на физическом приводе CD-ROM клиентской машины и, поскольку их найти не удастся, загрузка выполнена не будет.

Есть два пути преодоления этой проблемы:

  • Запишите образ ISO на диске и вставить его в привод компакт-дисков на клиентской машине - Хотя этот подход простой, мы будем использовать компакт диски, от использования которых мы пытаемся отказаться ...
  • Откройте образ ISO и измените способ, который применяется в программе для доступа к драйверу CDROM, причем так, чтобы программа знала, где в оперативной памяти искать образ ISO - довольно сложный подход, причем это каждый раз будет новый способ для каждого типа загружаемой программы. Т.е. для Linux, WinPE или UBCD нет одинаковой процедуры, о чем недавно упоминались.

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

Метод, использующий ядро

Иногда программе, которую вы пытаетесь загрузить, может оказаться достаточным, хотя и очень редко, только функций ядра. Одним из типичных примеров является программа memtest86+. Программа Memtest поставляется на большинстве инсталляцинных компакт-дисков с дистрибутивами Linux, а также и с FOG. Поскольку программе Memtest должна взаимодействовать только с самыми основными функциями проверяемого аппаратного обеспечения, например, с памятью (ОЗУ), и она может нормально работать даже на не полностью поддерживаемом аппаратном обеспечении (то есть она будет тестировать память даже в том случае, когда тип памяти неизвестен, неизвестна ее скорость и т. д.), этой программе ничего не требуется и она может работать полностью автономно.

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

LABEL Run Memtest86+ kernel fog/memtest/memtest append -

В этом примере директива "LABEL Run Memtest86+" задает имя пункта, директива "kernel fog/memtest/memtest" указывает программе PXElinux, где взять ядро, которое будет отправлено клиенту, а директива "append -" указывает программе PXElinux игнорировать дополнительные параметры загрузки*.

* Примечание: эти параметры, в зависимости от настроек, могут даже не потребоваться ив FOG они, на самом деле, не используются.

Метод, использующий ядро + initrd

На сегодняшний день этот метод является наиболее типичным и широко распространенным подходом по следующим причинам:

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

Давайте в качестве примера используем утилиту стрессовой нагрузки CPU, взятую из пакета UBCD.

Что касается файловой структуры UBCD, то эта утилита находится в каталоге ubcd/boot/cpustress. Мы ищем файл bzImage, который является ядром, и файл initrd.gz, который является начальным диском RAM. Если вы используете настройку FOG, которую мы создали, то мы рекомендуем вам скопировать их каталог /tftpboot/howtogeek/utils. Как только это будет сделано, отредактируйте файл /tftpboot/howtogeek/menus/utils.cfg и добавьте к нему загрузочную запись, которая находится в пунктах меню пакета UBCD. Ее можно найти в файле ubcd/menus/syslinux/cpu.cfg. С учетом настроек, сделанных для FOG, пункт меню должен выглядеть следующим образом:

MENU LABEL StressCPU V2.0 (requires CPU with SSE) TEXT HELP Torture-test your CPU in order to make sure that you don't have overheating problems. Requires SSE-equipped x86 CPUs. Executes a special version of the Gromacs innerloops that mixes SSE and normal assembly instructions to heat your CPU as much as possible. ENDTEXT KERNEL howtogeek/utils/cpustress/bzImage INITRD howtogeek/utils/cpustress/initrd.gz APPEND root=/dev/ram0 ramdisk_size=12000 noapic ubcdcmd=stresscpu2

Где:

  • MENU LABEL - указывается имя записи
  • TEXT HELP - это необязательная директива, она задает текстовую справку, которая будет показана в меню для того, чтобы предоставить информацию о выбранной записи.
  • KERNEL - определяет местоположение файла ядра kernel в каталоге TFTPD.
  • INITRD - то же самое, что и выше, но только для файла initrd.
  • APPEND - дополнительные параметры, которые необходимо передать в загружаемую программу.

Пару вещей, на которые следует обратить внимание:

  • Наиболее въедливые читатели должны были заметить, что мы заменили оригинальную директиву LINUX на директиву KERNEL. Это обусловлено следующим: 1) пример легче читать, 2) в данном примере это не имеет большого значения. С учетом сказанного, когда используется директива LINUX, то лучше оставить ее такой, как она есть, поскольку она указывает программе pxelinux/syslinux на то, что мы используем не просто любое ядро, а ядро Linux.
  • Мы сознательно из добавляемых параметров убрали директиву quiet (тихо). Это связано с тем, что Syslinux в последних версиях обрабатывает параметр quiet по-другому.
  • Можно изменить работу программы StressCPU, если просто изменить параметр ubcdcmd. Так что для того, чтобы использовать другие функции, нужно лишь скопировать запись и заменить stresscpu2 на: cpuinfo, cpuburn или mprime24.

Хотя это очень простой пример, его для начала должно быть достаточно.

Метод, использующий ядро + initrd + NFS

Этот метод является одним из тех, которым мы пользовались в статье "Как воспользоваться сетевой загрузкой (PXE) для Ubuntu LiveCD". Он основывается на предыдущем метеде и использует тот факт, что в некоторых дистрибутивах Linux поддерживается своя собственная "корневая файловая система", монтируемая из NFS. Прекрасным примером является руководство по Ubuntu, но будьте уверены, что у нас уже есть еще один пример, запланированный на ближайшее время. "Следите за Black Mushroom".

Метод MEMDISK

MEMDISK является утилитой, распространяемой с пакетом Syslinux. Назначение этой утилиты состоит в том, чтобы вы могли эмулировать "диск" (в основном, это касается флоппи дисков), используя его образ. Утилита размещает образ диска в памяти, указывая, что с ним нужно работать как с флоппи диском (т. е. обработчиком прерываний), причем все это обрабатывается программой MEMDISK. При использовании данного метода ядром kernel является утилита MEMDISK, а файлом initrd является файл образа дискеты (.img).

Следует отметить, что FOG поставляется с версией memdisk, совместимой с версией pxelinux.0, которая ее использует. Поэтому не рекомендуется копировать файл memdisk, поставляемый в комплекте с файлом img.

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

Говорят, что болтать достаточно просто, так что давайте посмотрим на то, как мы можем адаптировать одну из утилит из пакета UBCD при помощи метода MEMDISK так, чтобы она работала в режиме PXE.

Утилиту TestMemIV можно найти в файловой структуре пакета UBCD в архиве ubcd/images/testmem4.img.gz. Поскольку у нас уже есть дисковая утилита memdisk, то в каталог howtogeek/utils/ нужно скопировать только файл img. С учетом настроек, сделанных для FOG, пункт меню должен выглядеть следующим образом:

MENU LABEL TestMemIV TEXT HELP Tests system memory and memory on Nvidia video cards. ENDTEXT LINUX memdisk INITRD howtogeek/utils/testmem4.img.gz

Хотя в этом примере есть свой собственный файл образа флоппи диска из пакета UBCD, большинство других программ UBCD используют тот же самый образ для того, чтобы начать работу (fdubcd.img.gz) и использовать дополнительный параметр ubcdcmd для автозапуска программ с постзагрузочной части CD-ROM. Это означает, что вы не сможете преобразовать большую часть этих утилит в вариант, позволяющий загружаться через сеть, если не воспользуетесь реверсным инжинирингом. Хотя такой реверсный инженеринг возможен (об этом можно узнать здесь) и является упражнением для глубокого изучения вопроса, это выходит за рамки данного руководства.

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


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=36694