Библиотека сайта rus-linux.net
Мини-HOWTO: Удаленная загрузка и Linux: Настройка удаленно загружаемых рабочих станций с Linux, DOS, Windows 95/98 и Windows NT
Версия 3.19, Февраль 1999 года
В этом документе содержится информация о том, как создать защищенный кластер PC,
основанный на сервере и позволяющий каждому клиенту выбирать при загрузке
компьютера необходимую операционную систему. Основой подобной конфигурации
является программа, базирующаяся на BootPROM, позволяющая пользователю
выбирать при загрузке один из образов загрузочного диска. Ее можно
реализовать, при помощи InCom TCP/IP BootPROM (дополнительный компонент,
подходящий почти ко всем сетевым картам) или любого PXE-совместимого BootROM
(он часто бывает установлен в компьютеры со встроенными сетевыми картами).
Последнюю версию этого документа (со ссылками на программы и сопутствующие
материалы) можно найти по адресу
http://cuiwww.unige.ch/info/pc/remote-boot/howto.html. В том же каталоге
находятся версии этого документа в формате Linuxdoc-SGML, DVI и
PostScript. Если вы хотите, чтобы вам присылалась информация о дальнейшем
развитии проекта, пишите по адресу David.Clerc@cui.unige.ch
.
- Содержание
- 1. Disclaimer and Copyrights
- 2. Авторские права
- 3. Что изменилось...
- 4. Введение
- 5. Описание конфигурации
- 5.1. Конфигурирование сервера
- 5.1.1. Настройка DHCP
- 5.1.2. Настройка Прокси-DHCP
- 5.1.3. Настройка TFTP
- 5.2. Настройка клиентских машин
- 5.3. Настройка процесса загрузки
- 5.3.1. Изучаем BpBatch
- 5.4. Настройка Linux
- 5.4.1. Настройка клиентской машины
- 5.4.2. Проверка конфигурации
- 5.4.3. Создаем образ диска
- 5.4.4. Поддержка системы и обновления
- 5.5. Настройка DOS 6 и Windows 3.1
- 5.6. Настройка Windows 95
- 5.7. Настройка Windows NT
- 5.7.1. Создаем образ диска
- 5.7.2. Поддержка системы и обновления
- 5.8. Проблемы и их решение (FAQ)
- 6. Справочное руководство по утилитам удаленной загрузки
- 6.1. BpBatch, MrBatch и MrZip
- 6.1.1. Опции командной строки
- 6.1.2. Синтаксические правила
- 6.1.3. Кэш-раздел
- 6.1.4. Специальные переменные
- 6.1.5. Команды контроля состояния
- 6.1.6. Команды управления
- 6.1.7. Команды работы с клавиатурой
- 6.1.8. Команды вывода текста
- 6.1.9. Команды вывода графики
- 6.1.10. Команды системы безопасности
- 6.1.11. Команды работы с диском
- 6.1.12. Команды загрузки системы
- 6.1.13. Поддержка различных языков
- 6.1.14. Команды MrZip
- 6.2. NoBreak.sys
- 7. Специальные TFTP-сервера
1. Disclaimer and Copyrights
This document and the related software are provided as is to the Linux and Internet community, with no form of warranty. Please note that some operations related in this document may destroy the content of your hard-disk. We assume no liability for any use, correct or not, of this document and of the related software.
You are free to do anything you want with the remote-boot tools as long as you do not make money by selling them or by distributing them with a commercial product. If you want to commercialize a product derived from these tools, please contact the authors first to make a commercial agreement. These remote-boot tools will remain available for free forever, but we may authorize derived commercial tools.
These provisions shall be interpreted under and in accordance with the laws of Switzerland, canton of Geneva. All disputes, defenses, controversies or claims arrising in conncetion with this document and the related software, shall be subject to the exclusive juridiction of the courts of the canton of Geneva, Switzerland.
If you like this program, you can send us a Postcard and/or make a gift to the International Committee of the Red Cross (ICRC) or to the UNICEF.
2. Авторские права
Авторские права на русский перевод этого текста принадлежат © 2000 SWSoft Pte Ltd. Все права зарезервированы.
Этот документ является частью проекта Linux HOWTO.
Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.
Все переводы и производные работы, выполненные по документам Linux HOWTO, должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу приведенному ниже.
Мы бы хотели распространить эту информацию по всем возможным каналам. Но
при этом сохранить авторские права и быть уведомленными о всех планах
распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь
к координатору проекта Linux HOWTO по электронной почте:
<linux-howto@metalab.unc.edu>
или к координатору русского
перевода Linux HOWTO компании SWSoft Pte Ltd. по адресу
<linux-howto@asplinux.ru>
3. Что изменилось...
3.1. ...по сравнению с версией 2.x?
Честно говоря - практически все... Концепции сохранились практически без изменений, но программное обеспечение полностью переделано - оно не имеет ограничений предыдущих версий и значительно удобнее в работе. Краткий обзор новых возможностей:
Все функции (bpmenu, bpclean, bpunzip) объединены в одну программу.
Программа может запускаться не только из ПЗУ удаленной загрузки (Boot ROM), но и из DOS, Windows 95 и Linux.
Программа теперь имеет возможность восстанавливать образы разделов FAT16, FAT32 и EXT2FS. Если кто-то желает реализовать поддержку NTFS - дайте мне знать... Пока пользователи NT должны оставаться на FAT16.
Программа имеет возможность не только восстанавливать образы дисков, но и добавлять и исправлять конкретные файлы, чтобы удовлетворять любые нужды пользователя клиентской машины.
Образы дисков больше не привязаны к 87 MB. Теперь это - независимые от файловой системы архивы.
Также существует средство автоматической загрузки дисковых образов на достаточно большое количество клиентских машин одновременно (широковещание (broadcast)).
Вы теперь можете написать защищенный загрузочный скрипт, который будет определять поведение машины перед загрузкой.
Вы можете загрузить любое ядро Linux без исправлений. Также возможно указывать ядру параметры и использовать образ электронного диска.
Вы имеете возможность производить авторизацию пользователей в процессе загрузки, используя сервер Unix, NT или Radius и отказывать в любом доступе к машине.
Включена полная поддержка любых языков.
И много, очень много других хороших возможностей...
- Существует ли программа, конвертирующая старые архивы в новый формат?
Нет, потому что внутренний формат архива полностью отличается от старого. Но вы можете легко сами произвести конвертацию, сделав следующее:
Загрузите старый образ (разархивируйте его на ваш диск)
Уберите вызов старой утилиты
unzipreg
и замените его на соответствующие вызовы командыpatch
(это очень просто - смотри подробные инструкции ниже )Запустите новую программу
mrzip
, чтобы создать новый образ диска
3.2. ...по сравнению с версией 3.0?
Версия 3.0 была бета-версией. Дюжина сайтов по всему миру тестировала ее в течение месяца и отдала достаточно много времени поиску ошибок, и предложениям о доработках. Спасибо им всем за беспокойство, особенно Maciek Uhlig, Dick Velders и Jeff Teeters.
Несколько незначительных возможностей были добавлены в версии 3.01, такие, как поддержка бездисковой загрузки Linux (с запретом использования кэша).
Начиная с версии 3.10, внесена совместимость со стандартом сетевых машин "Wired for Management 1.1a" фирмы Intel. Эти утилиты теперь работают с любым PXE-совместимым ПЗУ удаленной загрузки (наиболее часто устанавливаемыми на встроенные сетевые карты boot ROM). Большое спасибо компании InCom GmbH за предоставленное PXE-ППЗУ, которые сделали возможным создание этой версии. Мы также удачно протестировали эти утилиты с PXE-BootROM, которое я случайно обнаружил в моем компьютере Dell, на встроенной сетевой карте (под названием LanDesk Service Agent).
В версиях 3.11 и 3.12 добавлены утилиты для серверов UNIX (PXE-Прокси DHCP-сервер для Solaris и Linux, и улучшенный TFTP-сервер для Linux), а также полностью и подробно описана настройка сервера и процесса загрузки PXE.
В версии 3.13 добавлена поддержка Расширенного Управления Питанием (Advanced Power Management) (команда PowerOff (Выключить)).
В версию 3.14 внесены незначительные улучшения и некоторые исправления. Мы решили проблему, возникавшую с терминалом RedHat 5.1, и другую ошибку в синтаксисе команды "if". Также добавлены некоторые функции, предложенные Laboratori de Cаlcul de la Facultat d'Informаtica de Barcelona (LCFIB) :
Новая переменная APM указывает, поддерживает ли ваша система Расширенное Управление Питанием (Advanced Power Management) (т.е. есть ли поддержка команды poweroff).
Команда "beep".
Новый параметр команды DrawWindow, добавляющий заголовок окна при его создании. Теперь вы можете использовать команду DrawWindow 200 200 400 200 "Заголовок".
В версию 3.15 добавлена полная поддержка VESA. Программа BpBatch теперь поддерживает несколько видеорежимов, чтобы ее можно было использовать на старых компьютерах, не поддерживающих графику 800x600. К команде InitGraph добавлена возможность задавать видеорежим, и из новой переменной VESA-Modes можно получить список поддерживаемых видеорежимов.
В версии 3.16 исправлены следующие ошибки:
Сообщение "Malloc failed" при процессе Fullunzip из разбитого на части zip-образа. Большое спасибо Christian Meyer за содействие.
Ошибка, не позволявшая linux-версии MrBatch правильно распаковывать образы дисков. Эта ошибка была обнаружена в функциях низкого уровня MrBatch, поэтому она могла вызывать другие проблемы, возникавшие с linux-версией MrBatch. Большое спасибо Jeff Teeters за его содействие.
Ошибка, которая была в таблицах перекодировки. Эта ошибка была обнаружена в Laboratori de Cаlcul de la Facultat d'Informаtica de Barcelona (LCFIB). Отчет о ней вы можете прочитать в форуме BpBatch.
В версии 3.17 добавлены незначительные функции и исправлены ошибки:
Fullunzip отключал Расширенную (Extended) память
Работает загрузка с загрузочных дисков RedHat
Файловая система FAT разжималась с ошибками, если было очень много каталогов.
Мы добавили повторные попытки пересылки текстовых файлов по TFTP. BpBatch теперь будет пытаться передать их три раза перед тем, как сказать "Не могу переслать файл"("Could not transfer the file").
Данные о времени теперь правильно обновляются в файловой системе FAT. (спасибо Francis Chan)
В версии 3.18 исправлена ошибка в функции IncrUnzip. Спасибо Gary Pike за содействие.
В версии 3.19 исправлена ошибка в обработке ошибок команды delete
на
ext2fs, а также неправильная обработка имен файлов, начинающихся с A: в
Linux. Добавлены следующие возможности:
Есть возможность использовать новый синтаксис, вида
if valid disk:partition
, чтобы проверить, отформатирован ли разделОбразы дисков FAT32 теперь полностью работают (теперь они правильно загружаются)
Поддерживаются разделы Linux EXT2, размером больше 2 Гб
Поддерживаются разделы Linux Swap, размером больше 128 Мб (эта возможность работает только с новыми ядрами, как минимум, версии 2.1.x)
Опцию FullUnzip можно запускать и без использования кэш-раздела, установив параметр
CacheNever
в "ON
". Это может быть полезно в единичных случаях, но, вообще, не рекомендуется, в связи с возникающей, вследствие этого, большой загрузкой сети.
4. Введение
Конфигурация, описываемая здесь, создавалась с лета 1996 в CUI, Университет Женевы. Факультет Компьютерных Наук использовал несколько серверов и большое количество рабочих станций, которые можно поделить
компьютеры для студентов
компьютеры для исследований и обучения ассистентов
Каждый компьютер должен работать в Linux, DOS, Windows 3.1, Windows 95 или Windows NT. Пользователь должен иметь возможность выбирать необходимую ОС при каждом сеансе работы.
Все программы, включая операционные системы, должны браться с серверов, чтобы облегчить процедуры установки программ и их обновление.
Клиентские компьютеры должны иметь возможность работать без записи на сервер (из соображений безопасности), кроме домашнего каталога (куда запись разрешена).
Конфигурирование клиентских машин должно быть предельно упрощено. Клиенты должны автоматически получать параметры их IP-конфигурации, и вся эта конфигурация должна находиться в одном файле, используемом для всех операционных систем.
Так как почти каждый компьютер сегодня имеет жесткий диск, то клиенты должны иметь возможность воспользоваться им для облегчения нагрузки на сеть, а также использовать его, как место временного хранения данных пользователя.
Пользователь должен иметь имя входа, чтобы использовать любой из компьютеров.
Это имя входа должно быть одинаковым для всех операционных систем и должно позволять доступ к персональному домашнему каталогу, общему для всех операционных систем.
Компьютеры студентов (и секретарши :-) должны быть абсолютно чисты при каждом запуске. Таким образом, компьютер должен выглядеть так, как будто его только что установили.
Каждый компьютер должен быть защищен от вирусных атак.
http://www.intel.com/managedpc
.4.1. Boot ROM и Жесткий диск
ППЗУ удаленной загрузки существуют достаточно давно, но, до недавних пор, они продавались исключительно с бездисковыми станциями. С 1996 года этот How-to утверждает, что BootPROM значительно более интересны при использовании в машинах с локальным жестким диском, потому что они позволяют использовать плюсы и тех, и других:
ППЗУ удаленной загрузки позволяет иметь более "живучие" конфигурации, потому что с ним компьютер загружается всегда одинаково, не зависимо от вирусов или разрушения таблицы разделов. Он может использоваться даже (как у нас) для очистки диска до загрузки операционной системы.
Локальный диск может сделать конфигурацию более эффективной, потому что он может сократить сетевой трафик при помощи кэширования, и позволяет сделать подкачку более эффективной.
Заметьте, что вы можете использовать утилиты, описанные ниже, по-старому, в качестве простого загрузчика ядра/электронного диска, даже на бездисковых компьютерах. Однако, мы бы не рекомендовали, такое их использование.
4.2. Сеть
Университет Женевы владеет сетью класса B, разделенной на несколько подсетей. Компьютерный факультет использует четыре подсети, из которых одна выделена для студентов.
В исходном варианте наши компьютеры использовали два сетевых протокола: IPX и IP. Для IPX мы использовали сервер Novell Netware 3 для совместного использования программ и файлов пользователей в DOS и Windows. Для IP у нас был сервер SUN с программами и разделами пользователей для Linux, использующих NFS.
В последней версии конфигурации мы больше не используем IPX. У нас стоит один сервер Unix (Это может быть и Linux, и SUN), позволяющий совместное использование программ и файлов пользователей, при помощи NFS, для Linux-клиентов и SMB (NetBIOS) поверх TCP/IP для Dos- и Windows-клиентов. Таким образом, мы можем предоставить один общий домашний каталог на всех операционных системах.
4.3. Как это работает
Когда клиентский компьютер включается, он производит стандартную проверку системы до того, как управление передается TCP/IP Bootprom или PXE Boot ROM.
ППЗУ удаленной загрузки посылает запрос BOOTP/DHCP, чтобы узнать параметры IP-конфигурации.
Если сервер узнает компьютер, пославший запрос, он посылает обратно BOOTP/DHCP-ответ с различной информацией: IP адрес клиента, шлюз по умолчанию и образ загрузочного диска, который нужно использовать.
В случае PXE Boot ROM, может существовать кое-какой дополнительный обмен информацией между клиентом и сервером до полного определения параметров загрузки.
После этого BootPROM скачивает загрузочный образ с сервера, используя протокол TFTP. Этот образ представляет из себя небольшую программу
bpbatch
, наш интерпретатор пакетных файлов загрузки систем.Затем запускается наш интерпретатор пакетных файлов. К этому моменту он единственный находится в памяти. Еще не загружена ни одна операционная система, кроме дозагрузочного исполнительного окружения, формируемого Boot ROM.
Интерпретатор обрабатывает ответ BOOTP/DHCP в поисках различных опций, и, иногда, имени пакетного файла, который надо исполнить.
В соответствии с инструкциями пакетного файла он, например:
Загрузить национальную раскладку клавиатуры
Произведет авторизацию пользователя на сервере (Unix, Radius или Windows NT)
Даст возможность пользователю выбрать операционную систему
В соответствии с выбранной операционной системой, он создаст разделы на жестком диске и произведет быстрое форматирование некоторых разделов
Проверит, имеется ли соответствующий компрессированный образ выбранной ОС в конце жесткого диска. Если нет, то загружает его, при помощи TFTP
Разархивирует выбранную ОС на основной раздел
Если ОС - это Linux, загрузит ядро и запустит его
Если ОС - это DOS или Windows, то просто позволит компьютеру загрузиться со свежего жесткого диска
disk1
поdisk4
) в качестве SMB-клиента. Microsoft LanManager поддерживает динамическую конфигурацию, при помощи DHCP. После входа в систему пользователь оказывается в DOS и затем обычным образом может запустить Windows 3.1, набрав традиционную командуwin
. Заметьте, что с этого момента DOS и Windows 3.1 выглядят так, как будто установлены на локальной машине. Для Windows 95 и Windows NT, мы также используем клиент SMB фирмы Microsoft (называемый Клиент сетей Microsoft), поддерживающий динамическое конфигурирование, при помощи DHCP. Мы уменьшаем нагрузку на сеть, используя "Разделенный кэш локальных сетей"
В "безопасных" компьютерах (напр. компьютерах лаборантов), как только компьютер однажды загрузился с использованием вышеописанной системы, скрипт может просто переключаться на загрузку с локального диска без его повторной очистки. Это позволяет пользователям хранить данные на локальных дисках. Но если, вдруг, конфигурация их компьютера откажет, то пользователь может в любое время выбрать соответствующий пункт из загрузочного меню, получив, таким образом, свежую инсталляцию
4.4. Сопутствующая некоммерческая документация
Эта конфигурация была успешно воспроизведена в нескольких других местах по
всему миру. Некоторые, из участвовавших в проекте, написали советы
и хитрости в дополнение к этому How-To. Если у вас тоже есть совет, и на
этой странице нет ссылок на вас, то пишите по адресу
Marc.VuilleumierStuckelberg@cui.unige.ch
. Если у вас возникнут проблемы с
воспроизведением этой конфигурации, взгляните на эти страницы!
http://www.br.fgov.be/RESEARCH/INFORMATICS/info/bootp.html
, автор - Alain Empain из Национального Ботанического Сада Бельгии. Много полезных примеров скриптов, и красивая программа на PERL, позволяющая автоматически создавать меню и HTML-документацию из описания более высокого уровня.http://www.katedral.se/system/elevsyst
, автор - Johan Carlstedt из Кафедральной школы в Uppsala, Швеция. На настоящий момент, конфигурация, описанная на этой странице базируется на старой версии утилит удаленной загрузки, однако, практически все работает. А также там приводятся некоторые советы.http://vitoria.upf.tche.br/~fred/
, на португальском, автор - Frederico Goldschmidt из Университета Passo Fundo, Бразилия.http://www.etse.urv.es/~larinyo
,на испанском, автор - Lluis Arino, из Высшей Инженерно-Технической Школы (Escola Tecnica Superio d'Enginyeria), Испания.
Вы можете послать мне свой BpBatch-скрипт, чтобы я внес его в коллекцию скриптов.
5. Описание конфигурации
Во-первых, сделайте так, чтобы у вас под рукой было две машины:
Сервер - обычно машина с Unix или Windows NT
Клиентская машина - компьютер с включенным BootPROM, у которого на жестком диске нет ничего ценного.
http://www.incom.de
. При помощи этой
программы, ваш компьютер будет работать так, как будто в него вставлен
TCP/IP BootPROM.Если же у вас уже есть Boot ROM, то надо его включить. Если у вас TCP/IP BootPROM фирмы Incom, то вам надо использовать специальную программу производителя вашей сетевой карты. Если же у вас PXE-совместимое ППЗУ, то надо это сделать в BIOS, сменив устройство загрузки по умолчанию.
На компьютерах студентов мы первым пунктом ставим загрузку с сети и запрещаем загрузку с винчестера или флоппи-диска. У ассистентов первым пунктом также идет сеть, затем жесткий диск и флоппи.
5.1. Конфигурирование сервера
На сервере вам понадобится настроить следующее:
BOOTP/DHCP-сервер
Возможно - Прокси- DHCP сервер
TFTP-сервер
ndd /dev/ip ip_path_mtu_discovery
, чтобы узнать, включена ли эта
опция, и команду ndd -set /dev/ip ip_path_mtu_discovery 0
, чтобы эту опцию
выключить. Однако, эти команды не работают для широковещательных пакетов
(Спросите SUN, почему) Это означает, что работать будет только TFTP, но не
DHCP :-(. Intel недавно исправил эту ошибку - если вы купили свой компьютер
позже Июня 1998 года, то, скорее всего, у вас эта ошибка исправлена.5.1.1. Настройка DHCP
Задачей DHCP-сервера является выделение клиенту IP-адреса и указание ему
загрузить с TFTP-сервера файл bpbatch.P
. DHCP в данном случае действует,
как дополнение к протоколу BOOTP. Если вы используете TCP/IP BootPROM фирмы
InCom, то вы можете обойтись без DHCP (используя старую версию
BOOTP-сервера).
На Windows NT вы, вероятнее всего, будете использовать встроенный DHCP-сервер. Если у вас TCP/IP BootPROM фирмы InCom, то вам придется использовать одну хитрость, чтобы указать имя загрузочного файла (подробную информацию смотрите на веб-сайте фирмы InCom). Если же у вас PXE-совместимое ППЗУ, то вам понадобится Прокси-DHCP-сервер, но никаких дополнительных хитростей не потребуется, потому что имя загрузочного файла будет передаваться Прокси-DHCP-сервером.
В Linux лучшим будет стандартный DHCP-сервер производства Internet Software Consortium. Если у вас PXE- BootPROM, то, в дополнение к обычным опциям, вам придется указать следующее:
option dhcp-class-identifier "PXEClient"
option vendor-encapsulated-options ff;
В Solaris вы можете использовать либо тот же стандартный DHCP-сервер производства Internet Software Consortium (его можно взять на веб-сайте), или Solaris DHCP-сервер (он входит в Solaris, начиная с версии 2.5). Однако, DHCP-сервер в Solaris, по-видимому, не вставляет в ответ на DHCP-запрос идентификатор класса клиента - чтобы исправить это, вам придется использовать Прокси-DHCP-сервер. Более того, Прокси-DHCP-сервер должен находиться не на сервере, потому что родной DHCP-сервер в Solaris блокирует порт DHCP.
Мы предлагаем установить бесконечное время жизни выделенного DHCP для клиентов IP-адреса. Не забудьте, что BOOTP/DHCP-запросы ограничены внутри подсети. Если клиент и сервер находятся в разных подсетях, то вам придется установить между этими подсетями мост BOOTP/DHCP (Relay agent). С этого момента мы предполагаем, что обе машины находятся в одной подсети.
5.1.2. Настройка Прокси-DHCP
Прокси-DHCP-сервер предназначен для того, чтобы обойти ограничения, существующие в некоторых версиях серверов DHCP, а также реализовать специфичные для PXE дополнения протокола DHCP. Использование Прокси-DHCP-сервера имеет смысл только с PXE BootPROM.
Дополнения протокола DHCP, специфичные для PXE (меню и т.п.), вам не понадобятся, потому что это входит в возможности BpBatch. Однако, вам придется использовать Прокси-DHCP-сервер для дальнейшей работы, если ваш DHCP-сервер полностью не совместим с PXE.
На Windows NT вы можете попытаться использовать WfM PDK фирмы Intel (этот пакет есть на их веб-сайте), но это не очень просто. Мы бы посоветовали все-таки установить небольшую Linux-машину в необходимой подсети и установить на нем нашу версию прокси-DHCP. Основным плюсом нашей версии Прокси-DHCP-сервера для BpBatch является поддержка дополнительной опции производителя 155, которую BpBatch использует в качестве командной строки.
В Linux и Solaris вы можете запустить нашу Прокси- DHCP программу, которой
в качестве аргументов передаются IP-адрес TFTP-сервера, имя загрузочного
файла и дополнительные опции - и все остальное эта программа делает за вас.
Если DHCP-порт на сервере уже используется другим демоном, то прокси-DHCP
будет использовать порт 4011. В этом случае, очень важно, чтобы этот другой
демон в ответе на DHCP-запрос устанавливал класс клиента в PXEClient
, чтобы
PXE-клиенты знали, что им надо работать через порт 4011.
На веб-сайте Intel есть полная документация по PXE расширениям протокола DHCP. Однако эти документы достаточно сложны - протокол в них разбит на несколько стадий, обеспечивая тем самым большую гибкость. Суть же состоит в том, что PXE-клиенту необходим полный расширенный DHCP-ответ. Если он получает лишь стандартный DHCP-ответ, то он продолжит поиск, пока не получит
класс клиента (T60), установленный в
PXEClient
дополнительные опции производителя (T43) (возможно пустые, т.е. шестнадцатеричное
ff
)непустое имя загрузочного файла
5.1.3. Настройка TFTP
TFTP - это очень простой файловый сервер. В базовой версии TFTP данные передавались блоками по 512 байт, что достаточно неэффективно. TCP/IP BootPROM фирмы Incom и PXE-BootPROM поддерживают длину блока до 1408 байт, что существенно увеличивает скорость передачи. Однако это работает только с улучшенной версией TFTP-сервера.
В Windows NT мы рекомендуем использовать улучшенный TFTP-сервер фирмы Incom, который можно взять на их веб-сайте.
В Linux вы можете использовать нашу версию улучшенного TFTP-сервера, который можно взять по адресу
http://cuiwww.unige.ch/info/pc/remote-boot/soft/etftpd.tar.gz
.
В Solaris вы должны использовать улучшенный TFTP-сервер фирмы Incom, который есть на диске утилит, поставляемом вместе с TCP/IP BootPROM.
Если вы хотите использовать стандартный TFTP-демон,
уберите P
из всех расширений имен файлов
загрузочных образов, чтобы BootPROM использовало только стандартный порт
TFTP (Этот метод был впервые применен компанией InCom GmbH в TCP/IP
BootPROM. Мы также используем его, потому что это наиболее простой путь
заставить PXE BootPROM использовать стандартный порт TFTP).
5.2. Настройка клиентских машин
Сначала мы настроим часть, общую для всех операционных систем - интерпретатор пакетных файлов BpBatch. После этого для каждой операционной системы мы сделаем следующее:
Настроим отдельную клиентскую машину
Сохраним его конфигурацию на сервере
Протестируем его работу в качестве клиента с удаленной загрузкой
Адаптируем эту настройку для любой подобной клиентской машины
В наших примерах мы предполагаем, что у вас есть жесткий диск, объемом не менее 1,4 Гб. Если у вас диск меньшего размера, то уменьшите размеры разделов, но не забудьте оставить свободными несколько сот мегабайт в конце диска, предназначенных для специального кэш-раздела. Более того, кэш всегда начинается с цилиндра, следующего за последним занятым стандартными разделами цилиндра, поэтому, если вы не будете использовать один и тот же размер стандартных разделов для всех ОС, то вам придется всегда загружать с сети необходимые файлы (кэш, в этом случае, очищается).
Никогда не отчаивайтесь. Если вы не можете заставить это все работать,
сначала взгляните в главу Проблемы и их решение - возможно, решение
находится там (возьмите самую свежую версию этого документа). Затем
посетите форум BpBatch. Может быть у кого-то возникали подобные трудности,
и ответ находится в форуме по адресу
http://cuiwww.unige.ch/info/pc/remote-boot/forum/
. Если вы не нашли там
ответ на свой вопрос, попытайтесь последить за сетевым трафиком, на предмет
проблем с передачей данных в сети (используйте tcpdump
на Linux или snoop
на Solaris). Если и это не поможет, то можно послать письмо по адресу
David.Clerc@cui.unige.ch
или Marc.VuilleumierStuckelberg@cui.unige.ch
. Если
ваша проблема действительно относится исключительно к конфигурированию
удаленной загрузки, и мы не перегружены, то попытаемся решить вашу
проблему.
5.3. Настройка процесса загрузки
Скачайте программу BpBatch
в любом формате: .zip
или .tar.gz
. Ее можно
найти по адресу
В каталоге /tftpboot
сервера поместите три специальных загрузочных образа,
которые вместе составляют предзагрузочный пакетный интерпретатор:
bpbatch.P
, динамический загрузчик (сохраните верхний регистр расширения!)bpbatch.ovl
, перемещаемый интерпретаторbpbatch.hlp
, файл помощи
"bpbatch.P"
. Задайте дополнительную опцию производителя 155 (десятичное
155), присвоив ей значение "-i"
(в стандартном DHCP-сервере это задается
командой option option-155 "-i";
. Эту строку bpbatch
воспринимает в
качестве командной, в которой -i
означает "интерактивный".Включите клиентский компьютер. Через некоторое время вы увидите
Копирайт BootPROM
Строку
DHCP
, означающую, что машина ожидает ответ DHCPСтроку
TFTP
, означающую, что машина ожидает первый пакет от TFTPСтроку
Loading BpBatch
в процессе загрузки интерпретатораПосле этого вы увидите нашу заставку, за которой последует красивое приглашение.
help
.Заметьте, что можно использовать этот же интерпретатор в DOS и Linux,
запустив программу MrBatch
. Существуют, правда, незначительные различия
этих версий - в Linux-версии нет поддержки графики, а DOS-версия может
посылать BOOTP- и TFTP-запросы только в том случае, если BootPROM не скрыт
операционной системой.
Неплохо было бы прочитать и главу Синтаксические правила BpBatch
, а
также главы, относящиеся к Ссылкам на файлы и Кэш-разделу. Это вам поможет
понять приводимые здесь примеры.
После настройки всех операционных систем сделайте меню, позволяющее пользователю загрузить необходимую операционную систему. Вы, скорее всего, сами сможете понять, как настроить такое меню. Все необходимые для этого команды находятся в конце этого документа.
5.3.1. Изучаем BpBatch
Попробуйте дать команду LogVars
. Вы увидите
список, состоящий примерно из тридцати переменных. Если кратко, сначала идут установки
BpBatch, затем параметры из ответа на BOOTP/DHCP-запрос, и последняя
переменная - список размеров дисков в Мегабайтах.
Дайте команду GetPartitions part
, а затем
снова LogVars
. К списку должна добавиться еще
одна переменная, содержащая список разделов на вашем первом жестком диске.
Предположим, что ваш первый раздел - это BIGDOS, FAT32 or LINUX-EXT2. Дайте
команду LogDir "{:1}"
, чтобы увидеть
содержимое корневого каталога, затем LogDir
"{:1}/usr"
, если на диске есть каталог usr
. Вы даже можете увидеть дерево каталогов, при
помощи команды LogTree LogTree "{:1}/etc"
.
Поместите на TFTP-сервер картинку в формате GIF (GIF-87a, чересстрочный или
обычный, но не GIF-89a). Предположим, этот файл будет называться
image.gif
. Вы можете скопировать его в любой каталог на
клиентской машине командой вида Copy "image.gif"
"{:1}/temp/image.gif"
. Можно использовать его напрямую
с сервера. Теперь выполните команду Logvars
"V*"
и посмотрите на значение переменной VESA
. Если оно равно On
,
то это означает, что у вас VESA-совместимый видеоадаптер. Вы можете увидеть
список доступных видеорежимов, при помощи команды Echo
"$VESA-Modes"
. Чтобы вывести картинку на экран, используйте
команду DrawGif "image.gif"
. Картинка
появится в верхнем левом углу экрана. Вы можете вывести ее в любое место
экрана, задав координаты после имени файла. Есть вохможность выводить любой
текст командой вида DrawText 200 200 "Hello world"
yellow
. Или нарисовать окно: DrawWindow 200
200 300 150
. Нарисовать окно с заголовком: DrawWindow 200 200 300 150 "My Window"
. Когда вам
надоест графический режим, наберите CloseGraph
.
Небольшое замечание : по умолчанию все графические команды работают в
VESA-режиме 800x600 (256 цветов) - это первое поле в значении переменной
VESA-Modes
. Чтобы использовать другой видеорежим, измените значение
переменной так, чтобы необходимый видео-режим был первым в списке.
test.bpb
в каталоге
tftpboot
, написав в нем следующее:
:again DrawWindow 150 200 400 160 "Identity check" TextAttr Black LightGray At 15,20 Print "Username : " Input username 8 At 17,20 Print "Password : " Getpasswd userpass 8 if "$username" != "smith" goto again if not "$userpass" match-passwd "BpR8oiIlRR9bo" goto again # clear DrawWindow 200 200 150 100 green blue "Congratulations" DrawText 220 250 "You got it !" yellow WaitForKey 3 CloseGraph interactВ конфигурации BOOTP/DHCP измените опцию 155 (
"-i"
) на "test"
и
перезагрузите клиентскую машину. Этот небольшой скрипт должен автоматически
запуститься, и вам будет задан вопрос, относительно имени пользователя и
пароля. Если вы не наберете smith
и justdoit
, то не сможете загрузить свой компьютер.
Позже вы узнаете, как производить аутентификацию, при помощи Unix, NT или
Radius.5.4. Настройка Linux
Чтобы установить Linux, вам понадобится загрузочный флоппи-диск, идущий в
комплекте поставки дистрибутива RedHat Linux. В BpBatch входит команда,
позволяющая загрузить систему с флоппи: FloppyBoot
.
Установите на клиентскую машину RedHat Linux, включая поддержку сети, и все пакеты, которые могут понадобиться. Вы также можете пересобрать ядро специально для клиентской машины, но это не обязательно.
5.4.1. Настройка клиентской машины
Неплохой идеей будет включить поддержку BOOTP в ядро, чтобы не настраивать IP-адрес клиента вручную.
Чтобы уменьшить нагрузку на сеть, используйте filecache
для кэширования на жестком диске файлов,
взятых с NFS. Грубо говоря, принцип файлового кэша состоит в следующем -
когда эта система встречает, в подкаталоге cache
, символьную ссылку на файл, она заменяет его на
сам файл. Если это каталог, то для каждого элемента каталога создается
символьная ссылка на источник на сервере. Filecache был написан компанией
Unifix GmbH, и является частью Unifix Linux 2.0. Это некоммерческий
продукт, и все необходимые файлы можно взять по адресу http://cuiwww.unige.ch/info/pc/remote-boot/soft/filecache.tar.gz
. Для того, чтобы использовать filecache вам надо
внести изменения в ядро (патч
patch-filecache
), включить поддержку filecache вmake config
, и пересобрать ядроскопировать исполняемый файл filecache в
/sbin
создать точку подключения
/mnt/nfs
(используяmkdir
)скопировать файл
filecache.conf
в/etc
. Этот файл содержит следующие строки: Max 100 MB 50 % # Cache /mnt/nfs/usr /usr Cache /mnt/nfs/opt /optскопируйте содержимое каталогов
/usr
и/opt
на сервер, экспортируйте их в режиме "только чтение" с флагомanon=0
(для того, чтобы root имел к ним доступ), и подключите к/mnt/nfs
(добавьте соответствующую строку в/etc/fstab
)переименуйте
/usr
в/usr.orig
создайте символьную ссылку
/usr
на/mnt/nfs/usr
переименуйте
/opt
в/opt.orig
создайте символьную ссылку
/opt
на/mnt/nfs/opt
проверьте, чтобы
/usr
и/opt
не были пусты, и в них было правильное содержаниерекурсивно удалите
/usr.orig
и/opt.orig
скопируйте
filecache.init
в/etc/rc.d/init.d
И последнее: создайте символьную ссылку
/etc/rc.d/rc3.d/S35filecache
на/etc/rc.d/init.d/filecache.init
5.4.2. Проверка конфигурации
Скопируйте компрессированный образ ядра (zImage
, bzImage
, vmlinuz
или как
вы там его называете) в каталог /tftpboot
на сервере, назвав его linux.krn
.
Если вам пришлось убрать BootPROM из клиентской машины, то вставьте его
обратно. Когда запустится BpBatch
, наберите LinuxBoot "linux.krn" "root=/dev/hda1 BOOT_IMAGE=linux"
(предполагаем, что первый раздел - это
корневая файловая система ext2). С другой стороны, если вы уже настроили
конфигурацию на компьютере без BootPROM, просто дайте ему загрузиться, при
помощи стандартного загрузчика (lilo, ...). Правда, во втором случае вам
придется для этого отдельно установить ядро с поддержкой filecache в
соответствующее место.
Дождитесь, пока загрузится система. Если у вас установлен filecache, то вы
можете проверить его работу - каталог /usr
должен был развернуться в
каталог на диске, состоя наполовину из символьных ссылок на каталоги,
наполовину из таких же развернутых каталогов. Теперь запустите наиболее
часто используемые пользователями программы, чтобы они попали на жесткий
диск.
Теперь вы можете вносить любые изменения в систему, как будто работаете на обычной выделенной linux-машине.
5.4.3. Создаем образ диска
root
, перейдите в
каталог /tmp
и запустите нашу программу mrzip
. MrZip
- это интерпретатор
команд, такой же, как и BpBatch
, но понимающий большее количество команд, по
сравнению с BpBatch
. В частности, он знает следующие команды:
showlog filter -"tmp/*" filter -"var/log/*" fullzip "/" "/tmp/linux.imz"С их помощью вы создадите образ диска в файле
/tmp/linux.imz
. Перенесите
его на сервер в каталог /tftpboot
. Затем создайте пакетный файл
/tftpboot/linux.bpb
:, написав в нем следующее:
hidelog setpartitions "linux-ext2:992 linux-swap:32" fullunzip "linux.imz" 1 clean 2 linuxboot "linux.krn" "root=/dev/hda1 BOOT_IMAGE=linux"
Опция BOOT_IMAGE
должна присутствовать для совместимости lilo
с rc.sysinit
в RedHat версии 5.1 и позже.
Ваш удаленно загружаемый linux готов! Теперь вы можете установить опцию
BOOTP-155 в "linux"
, или запустить команду include "linux.bpb"
в BpBatch
для ее проверки.
5.4.4. Поддержка системы и обновления
Если в будущем вам понадобится обновить версию программы, установить патчи и т.п., то сделайте следующее:
Загрузите с сети клиентскую машину, чтобы получить свежую инсталляцию linux
Внесите изменения
Вновь создайте образ диска
Скопируйте новый образ диска поверх старого на сервер
5.5. Настройка DOS 6 и Windows 3.1
Загрузите клиентский компьютер с любимой загрузочной DOS-дискеты (уберите
BootPROM или выполните команду FloppyBoot
в BpBatch). Отформатируйте
DOS-раздел на вашем диске с ключом /S
, чтобы на нем была операционная
система. Размер раздела не имеет значения, так как компрессированная версия
этого раздела создается MrZip
Создайте каталог DOS
и скопируйте туда DOS.
Установите предпочитаемый вами сетевой клиент (например, Microsoft
LanManager), Windows 3.1, и т.п.. Если вы используете Microsoft LanManager,
не используйте DHCP для настройки IP, потому что он там достаточно слабо
реализован и, скорее всего, не сработает в достаточно загруженной сети.
Чтобы сделать это, добавьте следующие строки в файл protocol.ref
, в раздел,
загружающий, tcptsr
(конечно, замените xxx
на настоящие параметры IP):
IPADDRESS0 = xxx xxx xxx xxx
SUBNETMASK0 = 255 255 xxx xxx
DEFAULTGATEWAY0 = xxx xxx xxx xxx
DISABLEDHCP = 1
Не бойтесь оптимизировать использование памяти, при помощи EMM386 - вы
можете даже использовать область, занятую ПЗУ сетевого адаптера, так как
оно нам больше не понадобится. Но аккуратно исключите из использования ОЗУ
сетевой карты, или вы не сможете связаться с сервером. При необходимости
используйте параметр NOEMS
.
nobreak
(его можно взять по адресу
http://cuiwww.unige.ch/info/pc/remote-boot/soft/nobreak.zip
) и запустите
его в начале вашего config.sys
. Затем добавьте в autoexec.bat
примерно
следующее:
rem -- мы используем файл c:\logged в качестве флага del c:\logged >nul :loginneeded cls echo Пожалуйста, укажите свое имя и пароль echo. net logon * rem -- скрипт входа должен был создать c:\logged if not exist c:\logged goto loginneeded del c:\logged rem -- теперь снова разрешаем break echo Yes >NOBRK
Проверьте, загружается ли в DOS ваша клиентская машина после перезагрузки
компьютера и выполнения в BpBatch
следующих команд:
HideBootprom
HdBoot
5.5.1. Создаем образ диска
Создайте на сервере разделенный ресурс, назвав его, например, admin
, в
который вы поместите некоторые файлы, необходимые системному
администратору. Если сервер работает под управлением Unix, то неплохо было
бы создать в admin
символьную ссылку на каталог /tftpboot
, чтобы было можно
помещать туда образы напрямую с клиентской машины. В admin
создайте каталог
/utils
и поместите туда следующие файлы:
mrbatch.exe
, DOS-версиюBpBatch
mrzip.exe
, DOS-версию программы, создающей образы дисковbpbatch.hlp
, файл помощи
zipdos.mrz
, содержащий команды, необходимые для создания образа
DOS-раздела, например такие:
showlog filter -"lanman.dos/lmuser.ini" filter -"temp/*" filter -"*.swp" fullzip "c:/" "L:/tftpboot/dos.imz"
Теперь вернитесь на клиентскую машину, подключите ресурс admin
к диску L:
,
перейдите в каталог utils
и выполните следующую команду:
mrzip -b zipdos
/tftpboot
появится новый файл
dos.imz
, представляющий из себя компрессированный образ вашего жесткого
диска. Создайте файл /tftpboot/dos.bpb
и напишите в нем следующее:
hidelog setpartitions "bigdos:1024" setbootpart 1 fullunzip "dos.imz" 1 hidebootprom hdboot :1
Ваша конфигурация DOS для удаленной загрузки готова! Теперь вы можете
установить опцию BOOTP-155 в "dos"
, или запустить команду include "dos.bpb"
в BpBatch для ее проверки.
5.5.2. Адаптируем конфигурацию для других машин
BpBatch
изменять некоторые файлы перед загрузкой.
Сначала зайдите в каталог lanman.dos
и сделайте следующее
copy *.ini *.ref
Затем отредактируйте файлы .ref
и замените все фиксированные параметры на
имена переменных BOOTP следующим образом:
computername = ${BOOTP-Host-Name}
ipaddress0 = ${MS-IPAddress}
subnetmask0 = ${MS-IPSubnet}
defaultgateway = ${MS-IPRouter}
Затем снова создайте образ диска, как было описано в предыдущей главе. Мы
не можем напрямую использовать IP-параметры из переменных BOOTP, потому что
LanManager использует в качестве разделителей пробелы, а не точки. Измените
dos.bpb
примерно так:
hidelog setpartitions "bigdos:1024" setbootpart 1 fullunzip "dos.imz" 1 set MS-IPAddress="$BOOTP-Your-IP"/.= / set MS-IPSubnet="$BOOTP-Subnet-Mask"/.= / set MS-IPRouter="$BOOTP-Routers"/.= / patch "{:1}lanman.dos/protocol.ref" "{:1}lanman.dos/protocol.ini" patch "{:1}lanman.dos/tcpputils.ref" "{:1}lanman.dos/tcputils.ini" patch "{:1}lanman.dos/lanman.ref" "{:1}lanman.dos/lanman.ini" hidebootprom hdboot :1Вы можете поместить
.ref
-файлы на сервер в каталог /tftpboot
вместо того,
чтобы поместить их в образ диска.Неплохо также иметь возможность менять настройки клиентских машин без
повторного создания образов дисков. Для этого можно скопировать файлы
autoexec.bat
и config.sys
в autoexec.ref
и config.ref
соответственно,
поместить их на сервер в каталог /tftpboot
и добавить две строки в пакетный
файл, приведенный выше:
patch "autoexec.ref" "{:1}autoexec.bat"
patch "config.ref" "{:1}config.sys"
Вы можете теперь спокойно изменять эти файлы на сервере, и даже настраивать
в них машинно-зависимые параметры, получаемые от BOOTP.
После внесения изменений в конфигурацию клиентской машины не забывайте
создавать образы диска, при помощи mrzip
, иначе все эти изменения не
сохранятся.
5.5.3. Поддержка системы и обновления
Если в будущем вам понадобится установить новую программу или что-то изменить, то сделайте следующее:
Загрузите с сети клиентскую машину, чтобы получить свежую инсталляцию
Внесите изменения
Вновь создайте образ диска
Скопируйте новый образ диска поверх старого на сервер
5.6. Настройка Windows 95
В предыдущих версиях этого документа мы советовали использовать серверную установку Microsoft Windows 95, но ничего, кроме головной боли и проблем, это не приносит:
Это очень, очень плохо реализованная конфигурация
Многие программы ее не поддерживают, и их установка не работает. Среди них Microsoft Internet Explorer, OnNet 32, Novell's Protected-mode client (кстати, ЗНАЧИТЕЛЬНО более безопасный и защищенный, чем "Клиент для сетей Netware" от Microsoft).
Его нельзя использовать с "Клиентом для сетей Microsoft" по TCP/IP, потому что у Microsoft нет драйвера TCP/IP для DOS-режима, совместимого с Windows 95. Это означает, что эту конфигурацию нельзя использовать с Samba
Обновления программ становятся практически невозможны - после включения клиентской машины многие DLL на сервере оказываются заблокированы, и, при попытке их изменения, выдается ошибка sharing violations.
5.6.1. Настройка клиентской машины
Установите стандартную клиентскую конфигурацию Windows 95, либо начиная с нуля (как было описано в установке DOS-клиента), либо запустив инсталляцию в DOS-клиенте с сети (так сделали мы). Вы также можете использовать предустановленную версию Windows, поставляемую вместе с компьютером, но вы, скорее всего, не будете знать, что же там установлено.
[Options]
файла MSDOS.SYS
(да-да, это текстовый файл):
AUTOSCAN=0Таким образом, ScanDisk не будет автоматически запускаться при загрузке Windows .
Если вы хотите облегчить нагрузку на сервер и сеть (что очень ускорит работу всей системы) и держать все программы на сервере - мы бы посоветовали использовать прекрасную программу: Shared LAN Cache компании Measurement Techniques, Inc (см. http://www.lancache.com). Эта программа запускается на каждой клиентской машине и кэширует на локальный жесткий диск все данные, приходящие из сети. Даже MS-Office запускается второй раз значительно быстрее... Вам нужна лицензия на каждый компьютер, но она не очень дорогая, и существуют скидки для образовательных учреждений. Наиболее простой способ - посетить их веб-сайт и взять бесплатную оценочную версию.
5.6.2. Создаем образ диска
zipwin95.mrz
и будет содержать следующее:
showlog filter -"temp/*" filter -"*.swp" fullzip "c:/" "L:/tftpboot/win95.imz"
Чтобы создать образ, подключите ресурс admin
к диску L:
, перейдите в каталог
utils
и запустите следующую команду:
mrzip -b zipwin95
Через несколько минут на сервере в каталоге /tftpboot
появится новый файл
win95.imz
, представляющий из себя компрессированный образ вашего жесткого
диска. Если ваш компрессированный образ больше 87 Мб, то, скорее всего, он
будет разбит на несколько частей. Эти части будут автоматически загружаться
друг за другом при необходимости. Заметьте, что образ размером больше 87 Мб
обычно будет устанавливаться при загрузке Больше одной минуты, что может
плохо сказаться на пользователях. Наш образ Windows 95 имеет размер около
70 Мб, потому что большинство программ (кроме Office и Explorer) полностью
находятся на сервере. На декомпрессирование и восстановление диска тратится
около 45 секунд.
/tftpboot/win95.bpb
и напишите в нем следующее:
hidelog setpartitions "bigdos:1024" setbootpart 1 fullunzip "win95.imz" 1 hidebootprom hdboot :1
Ваша конфигурация Windows 95 для удаленной загрузки готова! Теперь вы
можете установить опцию BOOTP-155 в "win95"
или запустить команду include "win95.bpb"
в BpBatch для ее проверки.
5.6.3. Адаптируем конфигурацию для других машин
Существует серьезное различие между Windows 3.1 и Windows 95: в последний встроена поддержка Plug-and-play ,т.е. автоматическое определения оборудования. Это не очень плохая штука, но иногда с ней возникают проблемы: порой она слишком чувствительная, а порой не срабатывает.
Если вы попытаетесь загрузить другую клиентскую машину с тем же загрузочным образом, вы, скорее всего, получите при загрузке сообщения о том, что Windows обнаружила новое оборудование: новую звуковую карту, новый жесткий диск, новую сетевую карты и даже новую мышь... Это может возникать по двум причинам:
устройства используют разные ресурсы (скажем, мышь включена в другой порт, или звуковая карта включена в другой слот - да-да это тоже определяется)
устройства могут давать Windows 95 свои персональные серийные номера (например, Windows 95 различают сетевые карты на основе их уникального Ethernet-адреса)
Правда, существует одно устройство, которое уникально на каждом компьютере - это сетевая карта. Для PCI-карт это неважно, но с ISA PnP картами будут проблемы. Нам очень не повезло - PnP код наших карт SMC EtherEZ "вешал" компьютер. Единственное решение - заставить Win95 считать, что он уже знает о сетевой карте и что не надо трогать PnP. Для этого в системный реестр до загрузки Windows 95 необходимо внести данные о сетевой карте. Еще раз напоминаем, что для PCI-карт этого делать не надо.
autoexec.bat
на сервер, как было ранее описано для DOS.
Отредактируйте его (на сервере), добавив следующие строки:
rem --- Вносим изменения в реестр Windows для того, чтобы не работало определение PnP ISA карты regedit /L:c:\windows\system.dat /R:c:\windows\user.dat c:\temp\patch.reg
regedit
- это стандартная программа, входящая в комплект Windows 95,
позволяющая вам просматривать содержимое реестра в Windows 95, или
производить простые операции с ним из DOS. Запустите regedit в Windows 95,
найдите вашу сетевую карту, обычно в
HKEY_LOCAL_MACHINE\Enum\ISAPNPи экспортируйте ветвь дерева реестра, используя меню Реестр. Вы получите текстовый файл - назовите его
patch.ref
и поместите в каталог /tftpboot
на
сервере. Откройте этот файл и найдите, где хранится Ethernet-адрес этой
карты (сделайте это на двух разных машинах и сравните файлы, если не можете
сами найти необходимую строку). Замените его на ${MACID}
. Добавьте в скрипт
win95.bpb
примерно такие строки:
set macid = "$BOOTP-Client-ID" patch "patch.ref" "{:1}temp/patch.reg"(если в реестре записан не совсем Ethernet-адрес карты клиентской машины, то вам придется произвести кое-какие манипуляции с переменной
MACID
). Это
все - ваши клиентские машины должны прекратить попытки автоматически
определить сетевую карту.patch.ref
следующее:
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP] "ComputerName"="${BOOTP-Host-Name}" [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP] "HostName"="${BOOTP-Host-Name}" [HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\ComputerName\ComputerName] "ComputerName"="${BOOTP-Host-Name}"
Используя этот метод исправления реестра, вашу конфигурацию можно перенести на любую машину с подобной конфигурацией. Если все-таки не удается избежать автоматического определения устройств Windows, то попытайтесь вновь создать образ диска. Таким образом, в реестре будет находиться специфичная именно для этой машины информация, и проблема должна быть решена.
5.6.4. Поддержка системы и обновления
Если в будущем вам понадобится обновить версию программы, установить патчи и т.п., то сделайте следующее:
Загрузите с сети клиентскую машину, чтобы получить свежую инсталляцию
Внесите изменения
Вновь создайте образ диска
Скопируйте новый образ диска поверх старого на сервер
5.7. Настройка Windows NT
Мы в настоящий момент не используем Windows NT на удаленно загружаемых машинах, но проверили нашу систему для NT. И она работает.
В наших утилитах нет поддержки NTFS (у нас нет ни документации, ни времени ее реализовывать, но я буду рад помочь тому, кому это интересно) - вам придется установить NT на FAT16 (просто не преобразовывайте ваши разделы в NTFS в процессе установки).
win95.bpb
в winnt.bpb
. Замените строку setpartitions
в winnt.bpb
на следующее:
setpartitions "BIGDOS:512 BIGDOS:512"Используя этот скрипт загрузите Windows 95 и установите NT на диск C. Пока не волнуйтесь насчет второго раздела. Очень много не устанавливайте - иначе у вас получится слишком большой и медленно разжимающийся образ диска. Уберите Windows 95 с диска C - он вам больше не нужен (загрузочное меню обрабатывает BootPROM, а не NT-loader).
winnt
, а просто дайте две команды:
hidebootprom hdbootВаша рабочая станция NT должна нормально загрузиться. Настройте систему необходимым образом.
5.7.1. Создаем образ диска
MrZip
не сможет прочитать даже загрузочные
сектора. Лучший способ сделать образ диска - загрузить Windows 95 и
запустить MrZip
из окна DOS. Чтобы сделать это, подправьте скрипт winnt.bpb
так, чтобы он восстанавливал образ Windows 95 не на первый, а на второй
раздел:
hidelog setpartitions "BIGDOS:512 BIGDOS:512" setbootpart 2 fullunzip "win95.imz" 2 hidebootprom hdboot :2(если имеется дополнительный патч, замените в нем
"{:1}"
на
"{:2}"
).
Загрузитесь при помощи этого скрипта - у вас должна запуститься Windows 95,
и должен появиться диск D:
, на котором будет Windows NT.D:
), и запишите его на
сервер под именем winnt.imz
в каталог /tftpboot
. Еще раз отредактируйте
скрипт winnt.bpb
, добавив в него примерно следующее:
hidelog setpartitions "BIGDOS:512 BIGDOS:512" setbootpart 1 fullunzip "winnt.imz" 1 clean 2 #fullunzip "win95.imz" 2 hidebootprom hdboot :1Ваша конфигурация для удаленной загрузки Windows NT готова. Конечно, если вам не нравится иметь два раздела, можете оставить один. Но, когда понадобится перестроить образ диска, вам придется снова установить второй раздел для загрузки Windows 95.
5.7.2. Поддержка системы и обновления
Если в будущем вам понадобится обновить версию программы, установить патчи и т.п., то сделайте следующее:
Загрузите с сети клиентскую машину, чтобы получить свежую инсталляцию
Внесите изменения
Отредактируйте
winnt.bpb
: закомментируйте строкиclean
иfullunzip
winnt, и уберите комментарий со строкиfullunzip
для win95Вновь создайте образ диска
Скопируйте новый образ диска поверх старого на сервер
5.8. Проблемы и их решение (FAQ)
В этом разделе приводится решение наиболее часто возникающих проблем.
- 5.8.1. Загрузка образа не работает
- 5.8.2. Процедура разархивации образа раздела сразу выдает ошибку
- 5.8.3. Компьютер повисает во время загрузки/разархивирования (1)
- 5.8.4. Компьютер повисает вместо загрузки/разархивирования (2)
- 5.8.5. Прокрутка экрана в VESA не работает
- 5.8.6. В кэше находится испорченный файл
- 5.8.7. В пакетном файле не работает команда EXIT
- 5.8.8. Команда Print ничего не выводит
- 5.8.9. MrZip выдает ошибку
Malloc failed
- 5.8.10. MrZip прерывает работу при чтении каталогов
- 5.8.11. MrZip не может прочитать некоторые файлы
- 5.8.12. Образы дисков всегда читаются с сервера
- 5.8.13. Red Hat Linux 5.1 не загружается
- 5.8.14. Электронный диск широковещательного TFTP повисает (Оставаясь в подключенном состоянии)
- 5.8.15. BpBatch повисает при доступе к файлу, а MrBatch работает нормально
- 5.8.16. Разархивирование образа, разбитого на части, не работает (выдается ошибка Malloc failed)
- 5.8.17. MrBatch и MrZip жалуются на терминал в RedHat 5.x
- 5.8.18. "libncurses.so.3.0: невозможно открыть разделенный объектный файл" в Linux
- 5.8.19. MrBatch и MrZip не работают в Linux (файл не найден)
- 5.8.20. У меня не работают никакие видеорежимы, кроме используемого по умолчанию VESA 800x600
- 5.8.21. BpBatch выводит сообщение "Malloc failed" при разархивировании образов, разбитых на несколько частей
- 5.8.22. Команда Fullunzip в Linux-версии MrBatch не работает
- 5.8.23. Scandisk выдает сообщение об ошибках на диске
- 5.8.24. RedHat не загружается с загрузочного диска, при помощи команды FloppyBoot
- 5.8.25. Диск с файловой системой FAT32 не загружается
Вы, скорее всего, используете стандартный TFTP-севрер, который не поддерживает передачу более 65535 пакетов данных, размером по 512 байт (а в Solaris, вообще, только 32767 пакетов!). В результате этого образ раздела должен быть разбит на части, не более 30 Мб каждая (или не более 15 Мб в Solaris). Смотрите описание команды CopyArchive, которая имеет возможность разбивать на части уже существующий образ раздела. Однако мы настоятельно рекомендуем вам использовать улучшенный TFTP-сервер фирмы InCom - он значительно более эффективен (используя пакеты размером 1408 байт, вместо 512).
Существуют три варианта: или образ раздела на диске содержит ошибку (используйте MrZip, чтобы определить, есть ли такие ошибки), или файл передан неправильно, из-за превышения времени ожидания в протоколе TFTP, или из-за несовместимости протокола.
Превышение времени ожидания TFTP происходит, если сеть перегружена
(например, если вы пытаетесь загрузить большие образы разделов более, чем
на 4 машины одновременно). В этом случае, BpBatch
не пытается повторять
процедуру загрузки бесконечно, потому что это все равно не поможет.
Выключите несколько компьютеров и попытайтесь снова не более, чем на 4
компьютерах (или даже на трех). Если у вас есть необходимость часто
загружать образы на большое количество компьютеров, то используйте наш
специальный широковещательный TFTP-сервер (смотрите посвященный ему
раздел).
Несовместимость протокола возникает при попытке использования стандартного TFTP-сервера (обычно входящего в комплект вашего UNIX-сервера), вместе с указанием BpBatch работать с улучшенной версией TFTP. Если вы используете стандартный TFTP-сервер, то должны убрать расширение .P у файла загрузочного образа (это будет разъяснено в ответе на следующий вопрос).
Если вы используете TFTP-сервер фирмы Incom - попытайтесь указать ему опцию
-s 1408 59 в командной строке. Если вы не используете улучшенную версию
TFTP-сервера, уберите на сервере расширение .P
в имени файла BpBatch и в
bootptab
.
Подробное разъяснение: эта проблема возникает в том случае, если вы, не
установив улучшенную версию TFTP-сервера, использовали bpbatch.P
в качестве
тэга "имя файла загрузки" в DHCP/BOOTP. BpBatch будет пытаться связаться с
улучшенной версией TFTP-сервера, если имя файла загрузки оканчивается на
.P
. Чтобы решить эту проблему, можно либо убрать расширение .P
из имени
файла загрузки (таким образом, BpBatch будет использовать стандартный TFTP),
либо установить улучшенной версию TFTP-сервера. Единственный,
поддерживаемый нами на сегодняшний день, улучшенный TFTP-сервер - это
сервер фирмы Incom. Вы можете найти собранную версию на их веб-сайте, или в
нашем каталоге дистрибутива нашей системы. Для того, чтобы TFTP-сервер
фирмы Incom корректно работал с дополнительными функциями TFTP, ему надо в
командной строке указать опцию -s 1408 59
.
Возможно, в вашем компьютере некорректно работает поддержка VESA.
Попробуйте использовать опцию -v
в командной строке или установите
переменную VESA в "OFF"
.
Мы используем для прокрутки функции VESA версии 1.1. Если ваш видеоадаптер не поддерживает VESA 1.1, то забудьте о прокрутке. Если же прокрутка работает на одну страницу, а затем на экране появляется странная сдвинутая картинка - не волнуйтесь. Я знаю об этой ошибке, и исправлю ее, как только у меня появится свободное время (прокрутка VESA, на самом деле, не очень то и важна...)
Если файл в кэше бывает испорчен внешней программой, то он оттуда
автоматически удаляется. Если файл не полностью записан в кэш (это может
произойти, если компьютер выключить во время передачи файла), то он также
автоматически удаляется. Однако, если сервер передал испорченный файл или
передача остановлена со стороны сервера, то, возможно, этот файл останется
в кэше. Вы можете очистить кэш, нажав одновременно две клавиши Shift при
загрузке BpBatch
. Вы также можете использовать команду clean -1
в
интерактивном режиме BpBatch.
Это не ошибка. Exit - это не команда. В BpBatch нет команд exit или quit - нет никакого смысла в том, чтобы выходить из загрузочного скрипта без загрузки системы. И MrBatch - это полная копия BpBatch. Вместо этой команды вы можете вызвать HdBoot. Вот это имеет смысл - DOS версия просто прекратит свою работу без перезагрузки. Заметьте, что вы в любое время можете выйти из DOS-версии, нажав Ctrl-Break. Перед выходом программа также восстановит все прерывания, которые она использовала.
Если вы пытаетесь что-то печатать, а затем сразу же входите в интерактивный
режим, то можно и не увидеть свой текст. Это происходит потому, что
текст выводится на рабочий экран, а команда Interact
переключила вас на
экран Журнала. Поместите команду GetKey
сразу после команд Print, и
увидите свой текст.
MrZip требует большое количество памяти для своей работы. Если вы
столкнулись с этой проблемой, то, во-первых, убедитесь в том, что
BootPROM выгружен командой HideBootprom
или при помощи утилиты bputil
фирмы Incom. Если вы запускаете MrZip из чистого MS-DOS (не в окне MSDOS в
Windows 95) - используйте EMM386 для загрузки сетевых драйверов в верхнюю
память, чтобы максимально высвободить основную память. В окне DOS в Windows
95 эта проблема обычно не возникает (если только вы не оставили много
старых 16-битных программ в autoexec.bat
после установки Windows 95).
Эту ошибку уже исправили. Возьмите свежую версию MrZip
. Если ошибка
повторилась, то попробуйте создать образ раздела вновь с опцией Trace
,
установленной в "ON"
(и, обычно, PauseLog
, установленной в "OFF"
); это
поможет вам узнать причину проблемы. Если возможно, то пошлите нам
подробный отчет о найденной ошибке.
MrZip, скорее всего, пытается прочитать заблокированный, открытый или
специальный файл, например, файл подкачки Windows. Обычно нет необходимости
включать подобные файлы в образ раздела, и их, в этом случае, необходимо
отфильтровывать (при помощи команды filter
). Также возможно, что файл не
дает вам прочитать сама операционная система. Если MrZip не указывает, с
каким именно файлом у него возникли проблемы, попытайтесь создать образ с
опцией Trace
, установленной в "ON"
(и, обычно, PauseLog
, установленной в
"OFF"
). Вы также можете попытаться использовать прямой доступ к диску (то
есть ссылаясь на раздел не как на "C:"
или "/"
, а на "{:1}"
). Создание
образа с использованием прямого доступа к диску обычно продолжается дольше,
но, иногда, оно оказывается значительно надежнее.
Образы дисков хранятся на локальной машине в специальном кэш-разделе и не должны загружаться с сети, если они не изменились на сервере. Однако, кэш-раздел начинается сразу за последним существующим разделом - соответственно, если суммарный объем разделов в системах изменяется, то изменяется и месторасположение кэша, и, вследствие этого, теряется его содержимое. Вторая возможная причина исчезновения файла из кэша - предыдущий файл увеличился больше, чем в полтора раза, заняв, тем самым, место, в котором был исчезнувший файл. Данные этого файла были испорчены, и он должен быть загружен с сервера. Так, практически, никогда не происходит. Третья причина - слишком маленький размер кэш-раздела. Если свободное от разделов место меньше, чем сумма объемов всех компрессированных образов, умноженная на 1,5, то в кэше будут храниться только наиболее новые образы, а остальные будут загружаться с сервера при необходимости.
Этот дистрибутив предполагает, что Linux загружается при помощи lilo
, и
проверяет наличие в командной строке ядра аргумента BOOT_IMAGE
(в скрипте
/etc/rc.d/rc.sysinit
). Просто добавьте этот аргумент к команде linuxboot
,
или подправьте rc.sysinit
.
Клиент DHCP в Linux - это специальная программа, меняющая IP-адрес клиентской машины в соответствии с ответами на DHCP-запросы. Если адрес был дан "навсегда" (на бесконечное время), то DHCP-клиент просто устанавливает адрес и выходит (это именно то, что нам нужно). Однако, если время жизни адреса ограничено, DHCP-клиент должен оставаться в памяти и передавать повторные запросы на получение адреса, каждые несколько минут. А если DHCP-клиент не прекращает работу, то MrBatch не загружается вообще... Решение - установить бесконечное время выделения IP-адреса (иногда оно бывает указано, как -1).
Эта проблема возникла с AMI BIOS, датированной 25/07/94. Мы пытались решить эту проблему, но так и не смогли. Скорее всего эта проблем возникает из-за ошибки в BIOS (по-видимому, портится содержимое регистра или ячейка памяти).
Эта ошибка появилась после реализации совместимости с PXE, но теперь она исправлена. Возьмите более новую версию.
Эта ошибка исправлена в MrBatch/MrZip в версии от 9 августа. Она возникала из-за проблем с новой версией ncurses, включенной в состав RedHat 5.1.
MrZip был собран для libncurses версии 3.0. Вы можете использовать другие
версии libncurses, если они новее, чем 3.0. Чтобы их использовать создайте
символьную ссылку с вашего файла libncurses.so.xx на libncurses.so.3.0. В
RedHat 5.1 используйте следующую команду: cd /usr/lib ; ln -s libncurses.4.2 libncurses.3.0
Вы также можете установить новую версию
mrzip/mrbatch. Начиная с 25/10/98 mrbatch собирается в RedHat 5.1.
Проблема абсолютно противоположна предыдущей. Сейчас вышла официальная версия libc6, которую невозможно использовать вместе с libc5. Если вы встретились с этой проблемой - обновите свой Linux (Ну, если мы получим слишком много жалоб на это, мы попытаемся держать на сайте два дистрибутива...).
Сначала посмотрите на содержимое переменной VESA-Modes
, и убедитесь в том,
что ваша видеокарта поддерживает нужный вам режим. Затем используйте один
из двух способов установить необходимый видеорежим:
InitGraph "режим"
: Попробуйте дать команду InitGraph "1024x768", и затем проверьте работу этого режима (например, при помощиDrawGif
).VESA-Modes
: Режим, указанный первым в переменнойVESA-Modes
- это режим, используемый по умолчанию. Если вы измените содержимое переменнойVESA-Modes
, то все команды работы с графикой будут использовать выбранный вами режим.
5.8.21. BpBatch выводит сообщение "Malloc failed" при разархивировании образов, разбитых на несколько частей
Мы исправили в BpBatch ошибку в процедуре выделения памяти. Убедитесь в том, что ваша версия BpBatch выпущена после 22 сентября 1998.
Мы исправили эту ошибку в версии от 22/09/1998.
В версии от 25/10/98 исправлена ошибка, возникавшая с большими образами дисков. Установите новую версию BpBatch.
Эта ошибка исправлена в версии от 25/10/98.
6. Справочное руководство по утилитам удаленной загрузки
В этой главе приведено подробное описание утилит удаленной загрузки, разработанных нами на факультете компьютерных наук Университета Женевы.
6.1. BpBatch, MrBatch и MrZip
Эти три названия относятся к трем вариантам одной и той же программы, различающихся в следующем:
BpBatch
- это специальная программа, которую можно запустить из BootPROM до загрузки операционной системы. Она состоит из двух частей:bpbatch.P
- динамического загрузчика, иbpbatch.ovl
- собственно самой программы.BpBatch
предоставляет возможность работать с дисками и файлами на них, при помощи собственной встроенной поддержки FAT16, FAT32 и Ext2fs, а также с сетевыми ресурсами, при помощи BootPROM TFTP API.BpBatch
был собран в DOS, при помощи Borland C 5.0 и Turbo Assembler 3.2.MrBatch
- это DOS/Linux-версияBpBatch
. Все команды, известныеBpBatch
, обрабатываютсяMrBatch
и наоборот. Она бывает очень полезна, если вы хотите проверить работу своих пакетных скриптов из DOS/Linux. В DOS,MrBatch
эмулирует удаленный доступ к файлам, при помощи ОС, если BootPROM не доступен. В Linux, BootPROM недоступен вообще, ноMrBatch
эмулирует его работу, при помощи встроенной в Linux поддержки IP, или, в крайнем случае, при помощи ОС.MrBatch
был собран в Linux при помощи GCC 2.7.2.1, и в DOS, при помощи Borland C 5.0 и Turbo Assembler 3.2.MrZip
- это интерпретатор, обрабатывающий дополнительный набор команд языкаMrBatch
, служащий для создания образов дисков. ВMrZip
ограниченный доступ к удаленным файлам заменен на полноценный доступ к файлам, при помощи ОС. ВMrZip
не встроена поддержка VESA.MrZip
был собран в Linux, при помощи GCC 2.7.2.1, и в DOS, при помощи Borland C 5.0 и Turbo Assembler 3.2.
6.1.1. Опции командной строки
Все программы имеют одинаковый набор возможных опций. MrBatch
и MrZip
берут
их из командной строки, а MrBatch
берет их из опции 155 BOOTP. Список
возможных опций:
[-x] [-l] [-b] [-v] [-w] [-i] [базовое_имя_скрипта]где:
-x
запрещает использование расширенной памяти-l
запрещает использование набора символов ISO-latin-8859-1 в качестве стандартного-b
запрещает обнаружение BootPROM (вызывающее инициализацию флоппи-диска в DOS)-v
запрещает обнаружение VESA (вызывающее переключение в полноэкранный режим в Windows 95)-w
разрешает прямую запись на диск (она запрещена по умолчанию в DOS и Linux)-i
включает интерактивный режим, даже если было задано имя скрипта
Базовое_имя_скрипта
- это необязательный аргумент. Если оно задано, MrBatch
и BpBatch
загружают скрипт с этим именем и расширением .bpb
, а MrZip
загружает скрипт с этим именем и расширением .mrz
. Если это имя не задано,
MrBatch
и MrZip
работают в интерактивном режиме, а MrBatch
загружает файл с
тем же именем, что и загрузочный файл BOOTP, только с расширением .bpb.6.1.2. Синтаксические правила
При обработке команды BpBatch
следует нижеприведенным правилам.
Команды обрабатываются построчно. Строки разделяются переводом строки и/или возвратом каретки.
Максимальная длина строки - 255 символов.
Регистр ключевых слов и имен переменных не имеет значения.
" - это специальный символ - ограничитель строковых констант
Когда в тексте встречается конструкция вида ${variable} или $variable, она заменяется на значение переменной или на пустую строку, если переменная не определена.. Эта подстановка выполняется также и внутри строк. Более того, подставляемое значение должно быть также включено в кавычки, если предполагается, что оно является строкой (т.е. можно говорить скорее о макро-подстановке, а не о переменных).
\a
заменяется на символ звукового сигнала (ASCII 7)\b
заменяется на символ "забой" (ASCII 8)\n
заменяется на символ "перевод строки" (ASCII 10)\r
заменяется на символ "возврат каретки" (ASCII 13)\t
заменяется на символ "табуляция" (ASCII 9)\v
заменяется на символ "вертикальная табуляция" (ASCII ...)\nnn
где nnn - это трехзначное восьмеричное число от 000 до 377, заменяется на символ с ASCII-кодом nnn\X
, где X - это любой символ, не перечисленный выше, заменяется на сам символ X. В частности:\"
заменяется на стандартную двойную кавычку (т.е. не является ограничителем строки)\$
заменяется на символ $ (не выполняет подстановку переменных)\\
заменяется на символ \ (не является специальным символом)
Символ "конец строки" (ASCII код 0) НЕ МОЖЕТ быть использован в тексте, так как он является внутренним ограничителем строки
Символ "волнистые линии" (ASCII код 249, 0F9h, 0371 - KOI-8 символ "Ы") НЕ МОЖЕТ быть использован в тексте, так как он используется программой в качестве внутреннего ограничителя строки.
Символ "блок" (ASCII код 255, 0FFh, 0377) НЕ МОЖЕТ быть использован в тексте, так как он используется программой в качестве внутреннего ограничителя переменных.
Пустые строки игнорируются. Строки, начинающиеся с символа #
воспринимаются, как комментарии, и также игнорируются. Строки, начинающиеся
с двоеточия (:
), воспринимаются как метки перехода и не обрабатываются.
- Строковые выражения
Строки ограничиваются с обеих сторон двойными кавычками: "Hello world" Чтобы включить символ "двойная кавычка" в строку, используйте символ "обратный слэш": "I said: \"Hello world\"" За строками могут следовать некоторые операторы их преобразования.
Оператор замены символа: "Hello world"/o=u/ == "Hellu wurld" "198.76.54.32"/.= / == "198 76 54 32"
Оператор выбора слова (отсчет ведется с нуля): "Hello world"{0} == "Hello" "198 76 54 32"{1-3} == "76 54 32"
Оператор вырезания подстроки (отсчет ведется с нуля): "Hello world"[4] == "o" "Hello world"[4-7] == "o wo"
- Числовые выражения
Числовые выражения работают с 32-битными целыми числами (от -2,147,483,646 до 2,147,483,647). Поддержка шестнадцатеричных, восьмеричных и двоичных чисел не встроена. При необходимости получить числовое выражения система распознает следующие конструкции:
Положительное или отрицательное целое число
Выражение в форме (выражение1 операция выражение2), где операция - это +, -, * (умножение), / (деление) или
%
(остаток от деления), авыражение
- это числовое выражение. Заметьте, что КАЖДАЯ операция должна заключаться в скобки: ((3 * 5)+2) == 17Оператор "длина строки" (@), за которым следует собственно строка: @"Hello world" == 11
Оператор "количество слов в строке" (#), за которым следует собственно строка: #"Hello world" == 2
- Промежутки времени
Некоторые команды в качестве аргументов обрабатывают промежутки времени. Эти промежутки измеряются в секундах с точностью до десятых: Delay 3 пауза 3 секунды Delay 0.3 пауза 3/10 секунды
- Цвета
- В командах, которые требуют указание цвета, вы можете использовать либо его название (регистр не имеет значения) или его номер:
Black 0 (Черный) Blue 1 (Синий) Green 2 (Зеленый) Cyan 3 (Голубой) Red 4 (Красный) Magenta 5 (Фиолетовый) Brown 6 (Коричневый) LightGray 7 (Светло-серый) DarkGray 8 (Темно-серый) LightBlue 9 (Светло-синий) LightGreen 10 (Светло-зеленый) LightCyan 11 (Ярко-голубой) LightRed 12 (Ярко-красный) LightMagenta 13 (Светло-фиолетовый) Yellow 14 (Желтый) White 15 (Белый)
- Ссылки на файлы
Имена файлов - это строки. Следовательно, они должны заключаться в двойные кавычки. Регистр имен файлов имеет значение в зависимости от файловой системы. Слэш и обратный слэш могут свободно использоваться, заменяя друг друга. Не забудьте, что надо использовать двойной обратный слэш: одинарный обратный слэш - это специальный символ.
Существует два вида ссылок на файлы:
Прямой доступ к файлам на локальном диске
Косвенный доступ к файлам (удаленные файлы и локальные файлы при помощи ОС)
Прямой доступ к файлам на диске описывается следующим образом: "{номер_диска:номер_раздела}/полный_путь/имя_файла" Номер диска можно не указывать - по умолчанию он будет 0. Например,
"{:1}/usr/bin"
указывает на/usr/bin
, если такой каталог есть на первом разделе. Прямой доступ к файлам на диске производится, исключительно при помощи нашей программы (мы не используем операционную систему).Существует также два специальных раздела. Раздел с номером 0 указывает на Главную Загрузочную Запись (master boot record (MBR)) и имеет псевдо-файловую систему, позволяющую вам иметь доступ к загрузочному коду. Раздел с номером -1 - это кэш-раздел (см. ниже).
В BpBatch/MrBatch косвенный доступ работает с удаленными файлами, находящимися на TFTP-сервере, если доступ к BootPROM:"help.bpb" - это файл help.bpb в каталоге /tftpboot "gifs/MyImage.gif" - этой файл в каталоге /tftpboot/gifs
Можно получить доступ к другим TFTP-серверам:"198.76.54.32:help.bpb"
Также можно получить доступ к файлам на сервере, находящемся за шлюзом:"198.70.0.1/198.76.54.31:help.bpb"
Можно также указать специальный порт для TFTP-соединения:"198.76.54.32@89:getpasswd/smith"
В один момент времени может быть открыт только один удаленный файл. Если BootPROM недоступен, доступ к удаленным файлам производится, при помощи операционной системы, но существуют ограничения, накладываемые ОС.В MrZip косвенный доступ работает с файлами ОС в соответствии с ее правилами обращения к файлам. Не существует никаких ограничений - косвенный доступ можно использовать везде, где можно использовать прямой. Косвенный доступ обычно работает быстрее прямого, потому что в ОС есть большее количество буферов и кэш. При помощи косвенного доступа, можно работать с удаленными файлами, если это поддерживается ОС."C:\\autoexec.bat" "C:/config.sys" "/mnt/net/usr"
6.1.3. Кэш-раздел
С целью уменьшить нагрузку на сеть и ускорить процесс загрузки, образы дисков, ядра Linux и, возможно, другие файлы кэшируются на жестком диске. Кэш-раздел находится в конце диска между последним цилиндром, занятым стандартными разделами, и последним цилиндром диска (то есть за пределами стандартных разделов). Для того, чтобы это кэширование работало, между последним разделом и концом диска ДОЛЖНО быть пустое пространство. Кэш-раздел ДОЛЖЕН существовать, если вы хотите восстановить образ диска.
Кэш-раздел представляет из себя надежную файловую систему с контролем CRC: Каждый каталог и каждый 32-килобайтный блок данных имеет свою 32-битную CRC-контрольную сумму. Если содержимое каталога или блока данных испорчено, то файл автоматически удаляется из кэша, и при обращении к нему, снова загружается с сервера.
"{:-1}"
. Чтобы
увидеть содержимое кэш-раздела, наберите:
logdir "{:-1}"Если данные в кэше испорчены, и автоматически не очищаются (этого не должно происходить), вы можете либо дать в интерактивном режиме команду:
clean -1, либо удерживать обе клавиши Shift при загрузке BpBatch
6.1.4. Специальные переменные
Некоторые переменные бывают установлены при запуске интерпретатора и/или имеют специальное назначение. Некоторые из них существуют во всех программах, другие есть только в MrZip. Часть из них появляются только после получения ответа на BOOTP/DHCP-запрос.
- Общие переменные
$Program
имеет значение "BpBatch" в BpBatch, "MrBatch" в MrBatch и "MrZip" в MrZip$Basename
базовое имя скрипта, автоматически запущенного в интерпретаторе$HelpFile
имя файла, выводимого по командеHelp
. По умолчанию оно равно"${Basename}.hlp"
$BOOTP-...
- переменные, установленные в соответствии с ответом на BOOTP-запрос (см. ниже подробное описание этих переменных)$DHCP-...
- переменные, установленные в соответствии с ответом на DHCP-запрос (см. ниже подробное описание этих переменных)$Disks
содержит список размеров дисков, разделенных пробелами. Соответственно,#"$Disks"
- это количество дисков, а"$Disks"{0}
- размер первого диска$Keypressed
равен первому не запрошенному коду клавиши из буфера клавиатуры (если таковой имеется)$LBA
контролирует использование режима LBA для доступа к дискам размером более 2 Гб. Значение по умолчанию: "ON"$FDA
контролирует быстрый доступ к диску (черезцилиндровая запись). Значение по умолчанию: "ON"$VESA
контролирует использование VESA-графики. Значение по умолчанию: "ON", если существует поддержка VESA$VESA-Modes
содержит в себе список всех доступных VESA-видеорежимов. Первый из этого списка - это видеорежим, используемый по умолчанию (если режим не указан в команде InitGraph). Замечание: если VESA="OFF", то эта переменная будет пуста$APM
установлено в "ON", если ваш компьютер поддерживает Расширенное Управление Питанием (Advanced Power Management). Если $APM установлено в "ON", вы можете использовать команду PowerOff для отключения компьютера. Значение по умолчанию зависит от вашего компьютера$Trace
контролирует вывод на экран каждой команды перед ее исполнением. Она также контролирует вывод имен файлов при создании нового архива. Значение по умолчанию: "OFF"$AutoShowLog
контролирует автоматическое переключение на экран журнала при нажатии клавиши ESC. Значение по умолчанию: "ON"$PauseLog
контролирует задержку вывода журнала, если экран журнала полностью заполнен. Значение по умолчанию: "ON"$CacheDisk
номер диска, используемого для кэширования удаленных файлов. Значение по умолчанию: пусто == 0, первый жесткий диск$CacheAlways
контролирует автоматическое кэширование удаленных файлов, скопированных, модифицированных или нарисованных в формате GIF. Значение по умолчанию: "OFF"$CacheNever
полностью отключает кэширование файлов. Включите эту переменную для удаленной загрузки Linux на бездисковой машине. Значение по умолчанию: "OFF"$CacheReserve
контролирует безусловное выделение на кэш-разделе дополнительных к размеру файла 25 процентов места для того, чтобы файлы могли менять размер. Отключите эту переменную, если у вас мало места на диске. Значение по умолчанию: "ON"$ExtMemory
разрешает использование расширенной памяти (или XMS). Один раз запретив использование этой памяти, разрешить обратно его нельзя. Значение по умолчанию: "ON", если в компьютере имеется расширенная память.$IsoLatin
контролирует обработку ASCII-кодов от 128 до 255, включенных в скрипты и модифицируемые файлы. Установки IsoLatin обрабатываются при загрузке файла, а не при его обработке. Значение по умолчанию: "ON"$ProgressX
и$ProgressY
задают координаты графического окна, отражающего процесс загрузки и декомпрессирования образа диска. Значение по умолчанию: 200 200$EXT2-Backup
контролирует обновление резервных копий суперблоков в файловой системе ext2 в Linux. Копии суперблоков создаются несколько секунд и не используются текущими версиями ядер (их использует только e2fsck).$Security-Gateway
содержит имя шлюза, используемого для авторизации пользователей. На указанном в этой переменной компьютере должна работать наша специальная программа-шлюз. Значение по умолчанию:"${BOOTP-Server-IP}@89"
(т.е. порт 89 TFTP-сервера)$Security-Check
содержит ответ сервера безопасности на последнюю проведенную авторизацию, соответственно PASSED или FAILED. Значение по умолчанию: "FAILED"$Security-Passwd, $HelpTopic, $OnExit, $OnKey-...
внутренние переменные.
Смотрите также список специальных переменных BOOTP и MrZip.
- Специальные переменные MrZip
Следующие переменные используются только в MrZip.
$TempPath
содержит каталог, в котором содержатся временные файлы. Значение по умолчанию: <пустая строка> == текущий каталог$DumpFormat
содержит формат вывода в журнал данных о создаваемых архивах. Это строка, содержащая"h"/"H" - вывод заголовка архива
"b"/"B" - вывод итогов/содержимого загрузочных секторов
"s"/"S" - вывод краткой/подробной информации о занятом месте
"d"/"D" - вывод краткого/подробного содержимого каталогов
"f"/"F" - вывод итогов/содержимого файлов
$FragmentSize
задает размер частей архива. Если вы не используете улучшенную версию TFTP-сервера фирмы InCom, установите ее в "30 MB". Значение по умолчанию: "87 MB"$SourceArchive, $DestArchive, $Filter...
внутренние переменные.
- Переменные BOOTP
- Системой распознаются следующие переменные BOOTP-... и DHCP-... , заполняемые после получения соответствующего ответа на BOOTP/DHCP запрос (TCP/IP BootPROM должна существовать и работать):
$BOOTP-Client-ID $BOOTP-Your-IP $BOOTP-Server-IP $BOOTP-Gateway-IP $BOOTP-Bootfile $BOOTP-Server-Name $BOOTP-Subnet-Mask $BOOTP-Time-Offset $BOOTP-Routers $BOOTP-Time-Servers $BOOTP-Name-Servers $BOOTP-Domain-name-Servers $BOOTP-BOOTP-Log-Servers $BOOTP-Cookie-Servers $BOOTP-Lpr-Servers $BOOTP-Impress-Servers $BOOTP-Resource-Location-Servers $BOOTP-Host-Name $BOOTP-Boot-Size $BOOTP-Merit-Dump $BOOTP-Domain-Name $BOOTP-Swap-Servers $BOOTP-Root-Path $BOOTP-Extensions-Path $BOOTP-IP-Forwarding $BOOTP-Interface-MTU $BOOTP-All-Subnets-Are-Local $BOOTP-Broadcast-Address $BOOTP-NIS-Domain $BOOTP-NIS-Servers $BOOTP-NTP-Servers $BOOTP-Font-Servers $BOOTP-X-Display-Manager $DHCP-IP-Address-Lease-Time $DHCP-Message-Type $DHCP-Server-Identifier $DHCP-Message $DHCP-Renewal-Time $DHCP-Rebinding-Time $BOOTP-NIS+-Domain $BOOTP-NIS+-Servers $BOOTP-Server-Name $BOOTP-Bootfile $BOOTP-Mobile-IP-Agent $BOOTP-SMTP-Servers $BOOTP-POP3-Servers $BOOTP-NNTP-Servers $BOOTP-WWW-Servers $BOOTP-Finger-Servers $BOOTP-IRC-Servers $BOOTP-StreetTalk-Servers $BOOTP-STDA-Servers
Другие параметры BOOTP/DHCP можно использовать следующим образом:$BOOTP-Option-n
где n - это десятичный номер опции BOOTP.Не путайте значения переменной
BOOTP-Gateway-IP
, содержащей адрес TFTP-шлюза, которая должна быть установлена в 0.0.0.0, если TFTP-сервер находится в той же подсети, что и клиентская машина, и переменнойBOOTP-Routers
, содержащей адрес IP-шлюза, используемого по умолчанию. TCP/IP BootPROM иногда, по-видимому, устанавливает значениеBOOTP-Gateway-IP
, копируя его изBOOTP-Routers
, в результате чего каждый пакет подтверждения TFTP сначала посылается на IP-шлюз. Чтобы этого не происходило, когда ваш TFTP-сервер находится в той же подсети, что и клиент - отдельно устанавливайтеBOOTP-Gateway-IP
в0.0.0.0
(спасибо Maciek Uhlig за то, что он описал нам эту проблему).
6.1.5. Команды контроля состояния
В этом разделе описываются команды, служащие для контроля состояния системы. В круглых скобках приведены необязательные аргументы этих команд (Я сам предпочитаю квадратные, но их не очень любит LaTeX...)
- Interact
Активировать экран журнала и включить интерактивный режим до выполнения команд QUIT или EXIT. Выполните команду HideLog перед выходом из этого режима, чтобы отключить вывод на экран сообщений о ходе выполнения пакетного файла.
- Help (тема)
Загрузить файл контекстной помощи (
bpbatch.hlp
) и вывести на экран справку по данной теме. Если тема не задана, или такой темы нет в файле, то выводится оглавление.- Log "текст"
Вывести строку в журнал. Перевод строки/возврат каретки автоматически НЕ добавляются.
- Echo "текст"
Вывести строку в журнал и перевести курсор на следующую строку. Эквивалентно Log "текст\r\n".
- LogVars ("шаблон")
Вывести в журнал содержимое всех переменных, имя которых соответствует шаблону. Шаблон может содержать символы ? и *. Пример: LogVars "BOOTP-*" вывести все переменные BootP
- LogDir "путь/шаблон"
Вывести в журнал наименования всех файлов, находящихся в каталоге "путь", соответствующих шаблону. Шаблон может содержать символы ? и *. Пример: LogDir "/usr/g*p" вывести список всех файлов с именами вида g...p
- LogTree "путь"
Вывести в журнал дерево каталогов, начиная с заданного пути.
- LogFile "имя_файла"
Вывести в журнал содержимое файла. Размер файла не должен превышать 64 Кб.
- ShowLog
Активизировать экран журнала, если он был скрыт. Автоматически выполняется при нажатии клавиши ESC, если переменная "$AutoShowLog" == "ON", а также при переходе в интерактивный режим.
- HideLog
Дезактивировать экран журнала. Стандартное состояние интерпретатора, если при запуске BpBatch, MrBatch и MrZip задан пакетный файл.
- CaptureLog
Копировать все, что выводится в журнал, в 64-килобайтный буфер до тех пор, пока не будет выполнена команда EndCapture. Если содержимое журнала превышает 64 Кб, то его начало отсекается. Эту команду можно использовать для создания текстового файла с необходимым содержимым. Команда EndCapture ДОЛЖНА выполняться в том же пакетном файле.
- EndCapture ("имя_файла")
Прекратить копирование содержимого журнала в буфер. Если задано имя файла, то содержимое буфера записывается в файл, иначе буфер очищается.
- Beep
Звуковой сигнал. Эта команда эквивалентна Echo "\007".
6.1.6. Команды управления
В этом разделе описываются команды, служащие для управления порядком исполнения команд в пакетных файлах. В круглых скобках приведены необязательные аргументы этих команд.
- Include "имя_файла"
Загружает файл и выполняет указанные в нем команды. Возвращается к исходному пакетному файлу после выполнения этих команд. Обработка символов с ASCII-кодами 128-255 в этом файле зависит от значения переменной $IsoLatin на момент его запуска.
- OnExit команда
Установить команду, автоматически выполняемую при завершении выполнения текущего пакетного файла.
- Goto метка
Перейти к метке (т.е. к строке, начинающейся с :метка)
- Eval "команда"
Выполнить все операции подстановки в строке "команда", и затем выполнить полученную команду.
- If ...
If (not) <выражение1> (==|!=|<|>|>=|<=|=>|=<|<>) <выражение2> <команда> If (not) (ci) "строка1" (==|!=|<|>|>=|<=|=>|=<|<>) "строка2" <команда> If (not) (ci) "строка" Match-Expr "шаблон" <команда> If (not) (ci) "строка" Match-Passwd "unix пароль" <команда> If (not) (ci) "строка" in "список_слов" <команда> If (not) (ci) "строка" in-file "файл" <команда> If (not) exist "файл" <команда> If (not) valid <номер_диска>:<номер раздела> <команда>
Этот оператор исполняет команду при положительном результате проверки условия. В первом случае сравниваются два числовых выражения. Во втором сравниваются две строки (с учетом регистра или без него). В третьем проверяется, соответствует ли строка шаблону (в шаблоне можно применять символы * и ?). Четвертый вариант служит для проверки соответствия строки паролю, зашифрованному по правилам Unix. Пятый проверяет, находится ли строка в списке слов. В шестом варианте проверяется, есть ли строка в файле. Седьмой вариант предназначен для проверки существования файла. Восьмой проверяет структуру раздела (форматирован ли он). Последняя форма поддерживается в версиях BpBatch, выпущенных после февраля 1999 года.
- Set ...
Set переменная = "строковое-выражение" Set переменная = <выражение>
Задает значение переменной. Если значение является числовым выражением, то результат преобразовывается в строку. Переменная может использоваться, где угодно, в программе при помощи конструкции $переменная или ${переменная}. Если в переменной содержится строковое значение, то ссылку на нее надо заключать в двойные кавычки: "$переменная" или "${переменная}".
- Delay промежуток_времени
Задержка исполнения программы на некоторый промежуток времени (заданный в секундах). Смотрите также описание формата промежутков времени.
- GetTime переменная, GetDate переменная
Получить системное время из CMOS и поместить его в переменную в формате ЧЧ:ММ:СС. Получить системную дату из CMOS и поместить его в переменную в формате ГГ/ММ/ДД. Эти команды можно использовать для изменения действий вашей программы в зависимости от даты или времени.
- SetTime "ЧЧ:ММ:СС", SetDate "ГГ/ММ/ДД"
- Установить системную дату или время в CMOS. Если есть шлюз безопасности (наша версия TFTP-сервера), то можно автоматически устанавливать системную дату и время на клиентских машинах аналогично дате и времени на сервере следующей командой:
include "$Security-Gateway:gettime"
Если хотите узнать, что же делает эта команда, наберите:logfile "$Security-Gateway:gettime"
- Poweroff
Выключить компьютер. Эта команда работает только в том случае, если в вашем компьютере есть поддержка Расширенного Управления Питанием (Advanced Power Management (APM)).
6.1.7. Команды работы с клавиатурой
В этом разделе описываются команды работы с клавиатурой. В круглых скобках приведены необязательные аргументы этих команд. Смотрите также главу Поддержка различных языков.
- GetKey (переменная)
Ждать нажатия любой клавиши и затем поместить ее значение в переменную.
- WaitForKey промежуток_времени (команда)
Ожидать нажатия клавиши в течение промежутка_времени. Если клавиша не была нажата, выполнить команду. Иначе оставить код клавиши в буфере клавиатуры. Смотрите также главу с описанием формата задания промежутков времени.
- Input (переменная (максимальная_длина))
Ввести с клавиатуры строку, оканчивающуюся символом "возврат каретки", и поместить результат в переменную (без символа "ВК"). Если задано значение максимальной_длины, то строка ограничивается при вводе этим количеством символов.
Смотрите также описание команды
GetPasswd
в разделе Команды системы безопасности.- OnKey "к" команда
Включить перехватчик нажатия клавиши, автоматически выполняющий команду при нажатии клавиши "к" (Кроме тех, которые нажимаются при исполнении команд GetChar или Input). Если вместо одного символа используется строка
"default"
, то команда выполняется при нажатии любой клавиши.
6.1.8. Команды вывода текста
В этом разделе описываются команды вывода текста на экран. Все эти команды работают и в графическом режиме (за исключением того, что в текстовом режиме размер экрана - 80х25 символов, а в графике - 100х37 (в графическом режиме используются символы размером 8х16 точек). В круглых скобках приведены необязательные аргументы этих команд. Смотрите также главу Поддержка различных языков.
- Print "текст"/выражение
Вывести на экран текст/выражение в текущую позицию курсора и передвинуть курсор. Добавьте "\r\n" в конце строки для перехода к следующей строке на экране.
- TextAttr цвет_текста цвет_фона
Задать цвет текста и фона. Можно также вместо цветов использовать числовое выражение, определяющее оба цвета, рассчитываемое как 16*цвет_фона+цвет_текста.
Если вы хотите немного пофантазировать, используйте
LoadFont
. Смотрите также главу Поддержка различных языков.- At строка колонка (команда)
Переместить курсор на заданную позицию на экране и выполнить команду, если она задана. Пример: At 10,20 Print "Привет!"
- Clear (цвет (символ (верхняя_строка,левая_колонка,нижняя_строка,правая_колонка)))
Заполнить заданную текстовую область символом (заданным в виде строки или числового выражения - кода символа). По умолчанию заполняется весь экран, используется символ "полный блок" (ASCII код 219), а цвет - черный (очистка экрана). Курсор перемещается в верхний левый угол очищенной области.
- Команды, обеспечивающие совместимость с BpMenu
.ATT (<атрибут>) .CLS (<атрибут>) .DEF <клавиша> (<время_ожидания>) .KEY <клавиша> <имя_файла> .POS ((<x>) <y>) .PWD <клавиша> <пароль> .WLN (<текст>) .WRT <текст>
Более подробная информация приведена в документации фирмы InCom. Когда-то мы написали программу, которая позволяла редактировать меню с использованием этого синтаксиса, но будет лучше, если вы будете использовать новый формат. Заметьте также, что команда .PWD не работает - мы просто не знаем алгоритм шифрования паролей фирмы InCom GmbH.
6.1.9. Команды вывода графики
В этом разделе описываются команды работы с графикой. Координаты в этих командах задаются в точках. В графическом режиме вы можете использовать команды вывода текста (см. выше). В круглых скобках приведены необязательные аргументы.
Заметьте, что графический режим автоматически включается при выполнении
одной из этих команд (если только переменная VESA
не установлена "OFF"
).
- InitGraph ("режим")
Включить графический видеорежим VESA. Начало координат находится в верхнем левом углу экрана (0 0). Включение VESA графики может привести к повисанию некоторых компьютеров в Windows 95. Используйте ключ -v MrBatch для того, чтобы избежать подобных проблем.
Вы можете указать специфический видеорежим, используя параметр "режим". Его использование необязательно - по умолчанию включается первый видеорежим из списка, находящегося в переменной VESA-Modes.
Возможные режимы:
640x480 => 640 на 480 точек, 256 цветов
800x600 => 800 на 600 точек, 256 цветов (стандартный режим)
1024x768 => 1024 на 768 точек, 256 цветов
1280x1024 => 1280x1024 => 1280 на 1024 точек, 256 цветов
В переменной VESA-Modes находится список видеорежимов, поддерживаемых вашей видеокартой.
Пример:
InitGraph "640x480"
- CloseGraph
Выключить графический видеорежим и перейти в текстовый.
- DrawBar x y ширина высота цвет
VESA-графика. Нарисовать залитый прямоугольник данного размера и цвета.
- DrawWindow x y ширина высота (цвет_фона (цвет_фона_заголовка)) ("заголовок" (цвет_заголовка))
VESA-графика. Нарисовать окно данного размера и цвета. Цвет фона по умолчанию - светлосерый, цвет фона заголовка - синий.
- Drawtext x y "текст" (цвет)
VESA-графика. Вывести строку в указанных координатах с прозрачным цветом фона. Цвет по умолчанию равен текущему цвету текста.
- DrawGif "gif-файл" (x y (тип_цветов))
VESA-графика. Загрузить заданный файл формата GIF-87a и вывести его на экран. Файл может быть черезстрочным, но обязательно в формате GIF-87a (не GIF-89a). Изображение должно помещаться в экран, т.е. нельзя загрузить картинку размером в 1024x768 в режиме 640x480. По умолчанию картинка выводится в верхнем левом углу экрана (0 0).
Тип_цветов задает тип обработки цветов в палитре при необходимости использовать более 256 цветов (это необходимо, например, при одновременном выводе двух GIF-файлов по 256 цветов в каждом):
Best-Colors
- использовать лучшие для последнего GIF цветаSpare-Colors
- попытаться избежать пересечения цветов, изменяя существующиеShare-Colors
- попытаться избежать пересечения цветов, используя существующиеReuse-Colors
не выделять новых цветов, использовать только существующие
Best-Colors
.
6.1.10. Команды системы безопасности
В этом разделе описываются команды авторизации пользователей. В круглых скобках приведены необязательные аргументы.
Некоторые из этих команд используют Шлюз безопасности, который должен быть установлен. Смотрите раздел Специальные TFTP-сервера.
- GetPasswd (переменная (максимальная_длина))
То же самое, что и Input, только вместо набранных символов выводятся звездочки.
- Crypt "текст" "ключ" переменная
Выполнить Unix-процедуру шифрования пароля из заданного 8-символьного текста и поместить результат в переменную. "ключ" - это обычно два символа, равные первым двум символам зашифрованной строки.
Заметьте, что это необращаемая процедура. Расшифровать такую строку невозможно. Можно лишь взять другую строку и зашифровать ее, используя этот же ключ, а затем сравнить результат шифрования.
- DESCrypt "текст" "ключ" переменная
Зашифровать данный текст при помощи заданного 8-символьного ключа, и сохранить полученную шестнадцатеричную строку в переменной.
- DESDecrypt "шестнадцатеричная_строка" "ключ" переменная
Расшифровать шестнадцатеричную строку при помощи заданного 8-символьного ключа, и сохранить результат в переменной.
- MD5 "текст" переменная
Рассчитать контрольную сумму текста по стандарту MD5 и поместить результат в переменную. Может быть использован в качестве альтернативы Unix-шифрованию для проверки паролей длиной более 8 символов.
- CheckUser "пользователь" "пароль" "домен"
Связаться с Security-Gateway и проверить, существует ли в заданном домене этот пользователь, и использует ли он этот пароль. Если домен -
"Unix"
, то используется система определения пользователей Unix на самом шлюзе безопасности. При любом другом значении домена, использовать систему доменов шлюза безопасности для определения настоящего Radius- или NT-домена для проведения проверки.Устанавливает переменную $Security-Check в "PASSED" или "FAILED". Пароль не передается по сети в явном виде.
6.1.11. Команды работы с диском
В этом разделе описываются команды работы с дисками. В круглых скобках приведены необязательные аргументы.
- GetPartitions переменная (диск)
Прочитать таблицу разделов данного диска и сохранить результат в переменной. Результат представляет из себя разделенный пробелами список конструкций вида Тип:Размер, где
Тип - это FAT16, EXT, BIGDOS, NTFS, FAT32, FAT32-LBA, BIGDOS-LBA, EXT-LBA, LINUX-SWAP, LINUX-EXT2 или десятичный номер типа файловой системы для остальных видов.
Размер - размер раздела в мегабайтах.
- SetPartitions "разделы" (диск)
Заполнить таблицу разделов в соответствии со строкой, заданной в том же формате, что и в команде GetPartitions. Эта команда также очищает все флаги "активный раздел" (используйте команду SetBootPart).
В главной таблице разделов в Главной Загрузочной Записи (master boot record (MBR)) есть возможность описать лишь четыре раздела. Более того, DOS и Windows позволяют иметь только ОДИН FAT-раздел (он называется первичным разделом, диск C:) в главной таблице разделов. Все дополнительные FAT-разделы должны находиться в расширенном разделе (такие разделы называются Логическими). Если мы выделим номера 1-4 разделам, описанным в таблице разделов в MBR, и номера 5-8 разделам, описанным в первом расширенном разделе, то описание двух FAT-разделов будет следующим: раздел 1 имеет тип FAT, раздел 2 имеет тип "расширенный раздел", раздел 5 - FAT. Разделы 3,4,6,7 и 8 должны быть помечены как "неиспользуемые". Подобная схема может быть использована для задания еще одного FAT-раздела: дополнительный расширенный раздел может находиться внутри 2-го раздела, а внутри его может находиться логический раздел FAT под номером 9.
Если точно следовать спецификациям DOS - 3-ий и 4-ый раздел в таблицах разделов никогда не используются. На самом деле, некоторые версии DOS и другие системы могут использовать более 2-х разделов в каждой таблице разделов, но конкретных правил не существует. С этой точки зрения BpBatch значительно более гибок, в своем понимании таблиц разделов - он часто понимает вещи, непонятные некоторым ОС.
Одно универсальное правило никогда не должно нарушаться - в одной таблице разделов не может быть больше одного расширенного раздела, иначе система нумерации разделов полностью рушится.
Если вы хотите поэкспериментировать - пожалуйста, но только потом не жалуйтесь, что ваша операционная система не может распознать разделы. Единственный гарантированно правильный путь использования разделов - иметь один первичный раздел, а все остальные поместить по одному в расширенные разделы.
Пример работы с расширенным разделом: SetPartitions "BIGDOS:100 EXT:400 EMPTY EMPTY BIGDOS:400"
- GetBootPart переменная (диск)
Получить номер активного (загружаемого) раздела, и поместить его в переменную. Первый раздел имеет номер 1. Если активных разделов нет, то возвращается 0.
- SetBootPart раздел (диск)
Сделать данный раздел активным. С этого раздела MBR начинает загрузку система. Первый раздел имеет номер 1.
- Blank раздел (диск)
Заполнить заданные разделы нулями. Это может занять достаточно долгое время на больших разделах. Эта команда не форматирует раздел для какой-либо определенной ОС. См. также команду
Clean
.- Clean разделы (диск) ("метка")
Произвести быстрое форматирование разделов, в соответствии с типом раздела, заданным в таблице разделов. Также устанавливается метка раздела, если она поддерживается ОС и задана в команде. Для "полного" форматирования сначала используйте команду
Blank
.Команда Clean поддерживается для разделов (FAT16) BIGDOS, FAT32, EXT, LINUX-EXT2 и LINUX-SWAP. Для очистки MBR используйте
Clean 0
.Команда Clean должна использоваться на разделах с данными, а также на разделах MBR или EXT. Абсолютно не имеет смысла очищать раздел перед выполнением команды
FullUnzip
.- FullUnzip "образ_раздела" раздел (диск)
Разархивировать компрессированный образ диска в заданный раздел. При этом заданный раздел полностью очищается от других данных (очистка на-лету).
Команда FullUnzip поддерживается для разделов (FAT16) BIGDOS, FAT32 и LINUX-EXT2.
При этом в графическом режиме на экран выводится индикатор процесса разархивирования, если переменная
VESA
не установлена вOFF
.- IncrUnzip "доп-архив" "путь"
Разархивировать "дополняющий" архив в указанный путь. Файлы из архива заменяют файлы на диске с совпадающими именами, но остальные файлы не удаляются.
Команда IncrUnzip поддерживается для (FAT16) BIGDOS, FAT32 и LINUX-EXT2. Эта команда менее эффективна, чем FullUnzip, потому что необходимо сохранить структуру существующей файловой системы. Однако, при помощи этой команды, можно избежать создания большого количества разных образов дисков, сохраняя лишь отличия одного от другого.
- FileUnzip "исходный_файл" "результирующий_файл"
Разархивировать файл, сжатый ранее при помощи команды FileZip программы
MrZip
. Правильность разархивации контролируется 32-битным CRC.- Copy "исходный_файл" "результирующий_файл"
Побайтно скопировать исходный файл в результирующий. Эту команду можно использовать, например, после команды FullUnzip для копирования конфигурационных файлов в сервера без создания нового образа диска. Для больших и легко компрессируемых файлов лучше использовать
FileUnzip
.- Append "исходный_файл" "результирующий_файл" ("префикс" ("суффикс"))
Скопировать побайтно сначала первый, затем второй файл в результирующий. Эту команду можно использовать для разделения на части больших файлов. Результирующий файл не может быть ни одним из исходных.
- Patch "исходный_файл" "результирующий_файл" ("префикс" ("суффикс"))
Прочитать содержимое исходного файла, произвести в нем подстановку переменных и записать результат в результирующий файл. Обработка символов с ASCII-кодами 128-255 зависит от значения переменной $IsoLatin.
По умолчанию переменные должны начинаться с префикса "${" и оканчиваться суффиксом "}". Эти два значения могут быть изменены на любую другую непустую строку. Помните, что если вы хотите использовать знак доллара в префиксе или суффиксе, то вы должны поставить перед ним обратный слэш, иначе он будет интерпретирован как макро-подстановка. Например, если вы хотите отдельно задать значения, используемые по умолчанию, то дайте команду: Patch "исходный_файл" "результирующий_файл" "\${" "}"
- MkDir "путь"
Рекурсивно создать каталоги, начиная с корневого, до заданного пути. Если путь уже существует, команда игнорируется.
- Delete "файл", Del "файл"
Удалить файл. Файл должен существовать.
- DelTree "путь"
Рекурсивно удалить все файлы и каталоги, находящиеся в заданном пути, и затем удалить сам каталог.
6.1.12. Команды загрузки системы
В этом разделе описываются команды загрузки ОС. В круглых скобках приведены необязательные аргументы.
- HideBootProm
Освободить память и векторы прерываний, занятые BootPROM. После выполнения этой команды TFTP-сервер будет недоступен. Чаще всего эта команда применяется при загрузке DOS или Windows - таким образом бывает высвобождена "верхняя" память. Эта команда автоматически выполняется при вызове FloppyBoot.
Заметьте, что эта функция восстанавливает только те векторы, которые корректно перенаправлены на BootPROM - все остальное остается неизменным. Но, по-видимому, для DOS и Windows этого достаточно.
- LoadRamDisk "имя_файла-электронного_диска"
Загрузить образ флоппи диска в расширенную память и перенаправить вызовы флоппи-диска BIOS на этот "электронный" флоппи диск. Эта команда автоматически выполняет
HideBootProm
. Вы можете использовать командуFloppyBoot
для загрузки системы с электронного диска, который вы только что создали.Этот электронный диск не настолько гибок, по сравнению с возможностями команды TFTPBoot. Единственное его преимущество - он использует несколько сот байт памяти вместо 64 Кб, используемых TCP/IP BootPROM. Внимание: в расширенной памяти после создания этот электронный диск ничем не защищен! Выгрузить этот электронный диск нельзя.
- LoadZRamDisk "имя_файла-электронного_диска"
Аналогично
LoadRamDisk
, но образ диска должен быть сжат командой FileZip программыMrZip
. Компрессированные диски защищены от потери данных (и неполной загрузки с сети) при помощи 32-битной контрольной суммы.- TFTPBoot "файл"
Продолжить загрузку системы (например, с образа флоппи-диска, созданного программой BpShell фирмы InCom). Смотрите также правила обращения к файлам, находящимся на других TFTP-серверах.
- FloppyBoot
Скрыть ППЗУ удаленной загрузки, загрузить в память загрузочный сектор флоппи-диска и передать ему управление.
- HdBoot (диск)(:раздел)
Загрузить заданный загрузочный сектор и передать ему управление. По умолчанию используется раздел 0 на диске номер 0, т.е. MBR первого жесткого диска. Вы можете загрузить ОС с любого раздела, но помните, что Windows 95 может не загрузиться, если у ее раздела не установлен флаг "активный" (подсказка: используйте SetBootPart).
Эта команда автоматически НЕ вызывает HideBootProm.
- LinuxBoot "файл_ядра" ("командная_строка" ("файл_электронного_диска"))
Загрузить в верхнюю память ядро и электронный диск Linux и запустить ядро, передав ему командную строку. Неплохая идея - передавать ядру в параметрах местоположение корневой файловой системы (например,
"root=
dev/hda1"). Если вы используете Linux, сильно привязанный кlilo
(например RedHat Linux 5.1), то, возможно, вам понадобится передать ядру дополнительные параметры, например,BOOT_IMAGE=linux
. Заметьте, что при помощи этой команды, ядро можно загрузить с сети (и оно автоматически попадет в кэш-раздел) или напрямую с заданного раздела.Эта команда работает как с маленькими, так и с большими ядрами (
zImage
иbzImage
).
6.1.13. Поддержка различных языков
В этом разделе описываются команды поддержки национальных языков. В круглых скобках приведены необязательные аргументы.
- RemapKeys "исходные_клавиши" "переназначенные_клавиши"
Переназначить заданные клавиши на другие. Например, если вы хотите поменять местами клавиши Y и Z, дайте команду Remapkeys "yzYZ" "zyZY" Небольшой совет - для символов, не включенных в первую половину ASCII, лучше будет использовать восьмеричные коды, а не напрямую символы - в последнем случае вам придется постоянно контролировать содержимое переменной $IsoLatin.
На некоторых клавиатурах существуют две клавиши с символом "обратный слэш". Они могут быть переназначены независимо - это возможно благодаря тому, что
BpBatch
распознает одну из них как клавишу с ASCII-кодом 0252 (восьмеричное), а другую как 0335 (восьмеричное).Если вы пошлете мне пример скрипта, переназначающий клавиши для вашей национальной клавиатуры, то я помещу его в
http://cuiwww.unige.ch/info/pc/remote-boot/soft/sample-scripts
.Чтобы вам было проще создать свою раскладку, я советую нажимать все необходимые клавиши без переназначения и записать символы, которые они производят. Это будутисходные_клавиши. Переназначенные_клавиши
- это те символы, которые вы хотите видеть, вместо исходных, в том же порядке. Если некоторые из символов (исходные или переназначаемые) выдают символы с ASCII-кодом больше 127, используйте восьмеричные коды. Восьмеричный код символа вы можете найти в любой таблице ASCII-кодов, например, в программе HelpPC (HelpPC - это программа контекстной помощи от David Jurgens).- RemapAltkeys "исходные_клавиши" "переназначенные_клавиши"
- Переназначить клавиши при нажатии их вместе с ALT. Например, чтобы переназначить Alt-2 на знак амперсанд используйте
RemapAltKeys "2" "&"
Заметьте, что программа не поддерживает переключение клавиатуры с одной раскладки на другую. (Примечание переводчика: можно попытаться использовать для этого команду OnKey) - LoadCodePage "cp???.bin"
Загрузить и включить заданную таблицу кодировки. Эти таблицы используются для преобразования символов Unicode (используемые, например, в файловой системе VFAT) в 8-битные символы. Если не загрузить верную таблицу кодировки, то FAT будет выдавать сообщения о том, что на диске в менах файлов используются специальные символы.
Все таблицы кодировок можно найти по адресу
http://cuiwww.unige.ch/info/pc/remote-boot/soft/codepage.zip
По умолчанию используется кодовая страница 850 - переупорядоченная версия ISO-Latin-1. Если вы хотите использовать другую страницу, установите переменную
$IsoLatin
в"off"
, или получите абсолютно непредсказуемый результат.- LoadFont "файл_шрифта"
Загрузить заданный шрифт VGA/VESA и использовать его в текстовом и графическом режиме. Файл шрифта - это двоичный файл, в котором находятся изображения символов, по 16 байт на символ (размером 8x16). Эта команда может использоваться как в целях поддержки национальных языков, так и в целях украшения шрифтов.
Архив с достаточно красивыми шрифтами можно найти по адресу
http://cuiwww.unige.ch/info/pc/remote-boot/soft/fonts.zip
. В этот файл входит программа, которая позволяет извлекать шрифты вашей кодовой страницы из файлов.CPI
DOS.
6.1.14. Команды MrZip
- Source...
Source (i)archive "имя_файла" Source path "путь"
Установить источник при работе с архивами в заданный (i - дополняющий) архив или путь на диске.
- Dest...
Dest (i)archive "имя_файла" Dest (i)dump Dest path "путь"
Установить приемник при работе с архивами в заданный (i-дополняющий) архив, дамп или путь на диске. Для задания формата вывода дампа в журнал используйте переменную $DumpFormat.
- FileZip "файл_источник" "файл_приемник"
Сжать файл для дальнейшего использования командой FileUnzip или LoadZRamDisk. Файл защищен от потерь данных 32-битной контрольной суммой.
- Filter...
Filter -"шаблон" Filter +"шаблон"
Исключить из архива/включить в архив файлы и каталоги, соответствующие шаблону (в нем можно использовать символы * и ?). Шаблон сверяется с полным путем к файлу или каталогу. Включающий фильтр имеет больший приоритет, чем исключающий - то есть, если файл исключается по шаблону со знаком минус и включается по шаблону со знаком плюс, то он войдет в архив.
Для образов DOS/Windows-разделов используйтеFilter -"*.swp" Filter -"temp/*"
Для образов Unix-дисков используйтеFilter -"var/log/*" Filter -"tmp/*"
- CopyArchive
- Начать операцию работы с архивами в соответствии с установками, заданными командами source, destination и filter. Эта команда обычно вызывается реже, чем ее краткие формы, приведенные ниже. Правда, ее можно использовать для разбивки уже готового архива на части, например:
set FragmentSize="30 MB" Source archive "original.imz" Dest archive "refragmented.imz" CopyArchive
- FullZip "путь" "полный_архив"
- Сокращенная форма от
Source path "путь" Dest archive "полный_архив" CopyArchive
До этой команды обычно задаются фильтры. - IncrZip "путь" "доп_архив"
- Сокращенная форма от
Source archive "полный_архив" Dest dump CopyArchive
- FullDump "полный_архив"
- Сокращенная форма от
Source archive "полный_архив" Dest dump CopyArchive
- IncrDump "доп_архив"
- Сокращенная форма от
Source iarchive "доп_архив" Dest dump CopyArchive
- XCopy "путь-источник" "путь-приемник"
- Сокращенная форма от
Source path "путь-источник" Dest path "путь-приемник" CopyArchive
6.2. NoBreak.sys
Nobreak.sys
- это небольшая программа (размером около 350 байт), которую вы
можете загрузить в начале config.sys
. Ее цель - обезопасить процесс
загрузки и авторизации пользователя от нажатия Ctrl-Break. В DOS есть
подобный механизм (BREAK=OFF
), но он не настолько надежен, и практически не
работает в autoexec.bat
. Наш драйвер обрабатывает скан-коды клавиш на
уровне BIOS. Таким образом, ни одна программа просто не получит код клавиши
Break, пока его обработка не будет разрешена.
Драйвер должен быть загружен в config.sys
(или при помощи программы devlod
из Недокументированной DOS). После этого Break можно снова разрешить,
послав Yes
специальному псевдо-устройству NOBRK
, или запретить, послав No
(на самом деле обрабатывается только первый символ - Y
или N
).
Драйвер использует вызовы BIOS, и, соответственно, работает только в DOS и Windows 3.1. В Windows 95 встроена своя внутренняя обработка клавиатуры.
Исходный текст на ассемблере можно взять здесь.
7. Специальные TFTP-сервера
Единственная поддержка сети, встроенная в TCP/IP BootPROM - это TFTP. Поэтому нам интересны специальные версии TFTP-серверов, позволяющих немного больше, чем обычные.
7.1. Улучшенный TFTP-сервер фирмы Incom
Фирма InCom GmbH вместе со своим TCP/IP BootPROM распространяет улучшенную версию TFTP-сервера, который может посылать пакеты размером до 1408 байт, вместо стандартных 512. Это очень важное дополнение, которое мы рекомендуем использовать. Этот сервер есть на диске утилит TCP/IP Bootprom в вариантах для Solaris, Windows и Netware NLM.
7.2. Улучшенный TFTP-сервер для Linux
Мы собрали модифицированную версию TFTP-сервера для Linux, работающего
аналогично улучшенной версии TFTP-сервера фирмы Incom. На самом деле, мы
просто увеличили размер пакета с 512 до 1408 байт и поменяли порт с 69 на
59. Его можно получить по адресу http://cuiwww.unige.ch/info/pc/remote-boot/soft/etdtpd.tar.gz
.
7.3. Шлюз авторизации
Мы также написали специальную версию TFTP-сервера, работающего, как шлюз
системы безопасности для авторизации пользователей. Этот сервер работает в
Linux или Solaris и может авторизовать пользователей в системе паролей
Unix (с поддержкой NIS и shadow), на сервере Windows NT (или Samba) server
или на сервере Radius. Его можно взять по адресу
http://cuiwww.unige.ch/info/pc/remote-boot/soft/stdtpd.tar.gz
, вместе с
исходными текстами и заранее собранными программами. Заранее собранные
программы не включают систему шифрования паролей NT - мы не можем
распространять библиотеку libdes
, но сборка программы - дело достаточно
простое.
Unix
соответствует системе паролей
Unix на той машине, на которой работает шлюз). Ниже приведен пример
конфигурации
# # Файл конфигурации STFTPD # # В этом файле описываются сервера, соответствующие "доменам безопасности". Поддерживаются # два вида серверов - radius или winnt (winnt включает в себя # NT Server и Samba) # # Формат строки для серверов radius # radius <домен> <адрес_сервера> <ключевое_слово> # # ключевое_слово - это слово, указанное в файле /etc/raddb/clients # # Формат строки для SMB-серверов # winnt <домен> <адрес_сервера> <имя_NetBios> # # имя_NetBios - это наименование сервера в NETBIOS # # Примеры radius sec-dom-rad radiusserver testing123 winnt sec-dom-nt1 192.168.1.1 NTSERVER1 winnt sec-dom-smb samba SAMBA1Заметьте, что, если вы используете Samba, вы должны установить параметр
security = user
.Вы также можете указать шлюзу безопасности файл со списком пользователей, которым нельзя входить в систему при любых обстоятельствах (для них проверка пароля будет всегда давать отрицательный результат).
7.4. Широковещательный TFTP-сервер
Мы написали специальную версию TFTP-сервера, включающую в себя самодельную
версию широковещательного TFTP. Используя его, мы смогли достичь скорости
передачи данных клиентам в 6 Мб/с на сильно загруженной 10-мегабитной сети
(этот способ значительно более эффективен - он не посылает подтверждения на
каждый пакет). Этот сервер работает в Linux или Solaris. Его можно взять по
адресу http://cuiwww.unige.ch/info/pc/remote-boot/soft/btdtpd.tar.gz
,
вместе с исходными текстами и заранее собранными программами.
TCP/IP-BootPROM не поддерживает этот протокол, поэтому мы загружаем небольшой вариант ядра Linux, использующий электронный диск, при помощи ранее описанных утилит, в котором запускаем Linux-версию программы MrBatch, в которую встроена поддержка широковещательного TFTP. Простой пакетный файл загружает все необходимые файлы в кэш-раздел в течение пары минут одновременно на всех компьютерах. Вам не надо устанавливать Linux для использования этого пакета (за исключением того случая, если ваше очень экзотическое оборудование требует специального ядра).
Процедура состоит из нескольких шагов. Во-первых, загрузите вручную широковещательный сервер, задав ему количество клиентских машин в качестве параметра (запомните, что эта процедура должна производиться не ежедневно, а лишь в тех случаях, когда вы хотите синхронизировать образы дисков на всех машинах). Затем включите все клиентские машины, которые должны выполнить следующий скрипт:
# # Этот файл запускает мини-вариант linux с электронным # диском, который затем запустит mrbatch. # # Широковещательный TFTP-протокол работает только в Linux-версии # mrbatch, потому что в BootPROM нет поддержки широковещания. # # 1. Создаем небольшой раздел, оставляя большое пространство для кэша setpartitions "BIGDOS:50" # 2. Очищаем MBR clean 0 # 3. Запускаем ядро Linux с поддержкой initrd (Загрузочный Электронный Диск) и # используем в качестве этого диска bcastrd.gz (он будет подключен в # качестве корневой файловой системы и запущен через /linuxrc). См. initrd.txt, # в котором приведено подробное описание загрузочных дисков. Вам не надо задавать корневое # устройство) - ядро будет использовать электронный диск. linuxboot "linux.krn" "" "bcastrd.gz" # 4. Сначала linux запустит dhcpcd для настройки сети. # Затем он выполнит команду mrbatch -w bcastlxВ электронный диск входят:
dhcpcd
- DHCP-клиент для настройки сетиmrbatch
linuxrc
- небольшой скрипт, автоматически запускаемый initrd и запускающийdhcpcd
иmrbatch
.usr/lib/terminfo/l/linux
- используемый MrBatchdev/*
- устройства, необходимые Linux и mrbatch
libc.so
,
имеющего достаточно серьезный размер. Полученный электронный диск сжат GZIP
и имеет размер меньше 300 Кб. Ядро занимает около 450 Кб (с поддержкой
многих сетевых карт и initrd). После загрузки Linux MrBatch запускает
нижеприведенный скрипт (вы можете отредактировать его необходимым
образом):
# Этот файл выполняется mrbatch, после его загрузки с электронного диска # bcastrd.gz # Его главная задача - "широко скопировать" файлы в кэш # # 1. Выводим диагностические сообщения showlog # 2. Отключаем фразу "press a key" set pauselog="OFF" # 3. Устанавливаем реальные размеры разделов. # Внимание: Так как вы копируете файлы в кэш для дальнейшего использования, # задайте именно те размеры разделов, которые вы будете использовать. setpartitions "BIGDOS:1024" # 4. Очищаем кэш-раздел clean -1 # 5. И копируем файлы в кэш, используя широковещательный TFTP-протокол # (порт 99) # # Вы можете использовать этот скрипт "как есть", но последнюю строку обязательно # измените! В нашем примере мы загружаем файл mblinux.imz, который является образом # нашей инсталляции Linux. copy "$BOOTP-Server-IP@99:mblinux.imz" "{:-1}mblinux.imz"После завершения пересылки вы можете просто выключить клиентские машины и изменить их загрузочные скрипты на любимое меню.