Ну и последний гвоздик.
Alex писал(а):Для удаленной загрузки неважно, с какого сервера будет происходить загрузка (поскольку от него требуется предоставление стандартных сервисов - dhcp и tftp - про RPL не говорим!!). Важно на какой клиент будет загружаться образ и по какому протоколу.
Плясать начинаем от имеющихся на клиентских машинах bootrom'ов - если на клиентах прошит pxe код, забудем об etherboot'е, читаем все, что относится к pxe.
Про сервер уже сказано, от него требуется предоставление стандартных сервисов - dhcp и tftp, причем для обеспечения скорости желательно расширенный tftp - он работает на другом порту в отличие от стандартного (если мне не изменяет память, стандартный на 68 порту, расширенный на 69 - это для тех, кто озабочен безопасностью и фильтрует пакеты на брандмауэрах), и передает пакеты большего размера, а также dhcp должен поставлять клиенту необходимый набор опций. Но мы сейчас не будем забивать говову настройкой сервера, считаем, что он у нас полностью настроен, вернемся к клиентам.
Во-первых, если на клиенте используем bootrom спецификации pxe, клиенты должны быть с архитектурой x86 - поэтому про mac'и (здесь не имеется в виду mac-адрес ) и прочие powerpc и sparc'и забываем - для них есть другие технологии.
Во-вторых, нужно создать загрузочный образ, положить его на сервер, и обеспечить, чтобы клиент его получил.
Поскольку самый простой путь при этом - создание образа на основе готовой загрузочной дискеты, намечается небольшая проблема, а именно - bios x86 имеет дело только с так называемой conventional (часто по русски переводят как "базовая") памятью - кто работал с dos'ом, тот знает, что это та память, которая располагается ниже адресов, отведенных под видеовывод, - но опять таки не будем забивать себе этим голову, просто вспомним, что ее объем не превышает 640 кб. Сопоставив этот объем с размером дискеты (1,44 Мб), понимаем, что без применения спецсредств не обойтись (без их использования будем получать ошибку - "Too big image" или что вроде того). Как раз в качестве такого средства выступает так называемый загрузчик (bootstrap), который неявно включен в состав загрузочного меню, создаваемого программой imgedit.exe от 3Com. По эти причинам файл загрузочного меню необходим, даже если вы не собираетесь использовать выбор при загрузке. (Замечу, что есть и другой способ - включить загрузчик в загрузочный образ, однако это требует соответствующей настройки сервера, чтобы дать понять клиенту, что он работает именно в среде pxe - опять-таки, не будет забивать этим говову, пойдем простым и кратчайшим логическим путем...).
Итак, мы должны создать файл загрузочного меню, в котором указать по крайней мере один пукт меню с произвольным заголовком (он будет появляться на экране при загрузке) и именем файла загрузочного образа, который будет создан на следующем шаге. Не усложняйте себе жизнь - не задавайте никаких путей в имени файла!... и следуйте старому доброму стандарту - 8.3 - кто не помнит, это количество символов в имени файла(.)расширении. Кроме того, для *nix'а может оказаться важным, в каком регистре дано имя файлу, так, к примеру *nix'овский демон tftp может не обнаружить файл mba.pxe, когда вы сохраните его как MBA.PXE ; это важно при операциях создания файла на платформе windows с дальнейшей передачей его через сервер samba. Наконец следующий шаг - создание собственно загрузочного образа. Для этого нужно взять готовую загрузочную дискету, запустить 3Com'овскую imgedit.exe, щелкнуть "Create a TCP/IP or PXE image file..." и отметить опции "Writeable" и "Track copy" - для пущей надежности. Имя файлу даем именно такое, как указали в файле загрузочного меню.
После того, как оба файла будут готовы, нужно их скопировать в каталог, который обслуживает демон tftp, не забывая при этом про регистрочувствительность *nix'а.
После этого остается последняя операция - указать клиенту, какой именно файл он должен запрашивать для загрузки. Для этого и нужна опция dhcp 067 - именно такая, под номером, а уж то, что в файле конфигурации демона dhcp на *nix'ах она имеет строковое наименование отнесем к особенностям реализации. Итак, присваиваем этой опции значение, соответствующее имени файла загрузочного меню. Для Linux с dhcp ISC 3.0 это будет выглядеть например так - filename "/home/tftpboot/mba.pxe". Для других *nix'ов или других демонов синтаксис будет возможно другой, как и необходимость указания полного пути к файлу или сокращенного.
Все... .
Включаем клиента и смотрим на процесс загрузки.
В заключении опишу весь процесс, как он должен протекать.
1. На клиенте bios передает управление коду bootrom, который запрашивает у dhcp сервера ip адрес и опции dhcp, в том числе имя файла загрузочного образа.
2. dhcp сервер за несколько итераций предоставляет клиенту всю необходимую информацию.
3. Клиент в соответствии с полученной информацией запрашивает загрузочный файл с сервера tftp, получает его, размещает в памяти и передает ему управление.
4. Поскольку получивший управление код является загрузчиком (bootstrap), совмещенным с менеджером меню, он выполняет свои функции - запрашивает у оператора выбор одного из пунктов меню, создает в расширенной (extended) памяти виртуальный диск для эмуляции флоппи-диска, меняет вектора прерываний для подпрограмм, обслуживающий ввод-вывод флоппи затем в соответствии с выбором оператора загружает (опять-таки с сервера tftp) файл загрузочного образа, размещает его содержимое на созданном виртуальном диске и передает ему управление.
5. Дальнейшая загрузка происходит аналогично старту с дискеты, с учетом того, что флоппи-дисковод теперь эмулируется виртуальным диском в оперативной памяти клиента. Об этом необходимо помнить при запуске программ, использующих расширенную память. Вполне возможна ситуация, когда реальная загрузочная дискета обеспечивает надежный старт, а загрузочный образ, созданный с этой дискеты зависает или вызывает перезагрузку. Решение таких проблем носит индивидуальных характер, к счастью встречаются они достаточно редко.