Linux mini-HOWTO

       

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.


Опции командной строки

Все программы имеют одинаковый набор возможных опций. 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.
Синтаксические правила

При обработке команды 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"


    Кэш-раздел

    С целью уменьшить нагрузку на сеть и ускорить процесс загрузки, образы дисков, ядра Linux и, возможно, другие файлы кэшируются на жестком диске. Кэш-раздел находится в конце диска между последним цилиндром, занятым стандартными разделами, и последним цилиндром диска (то есть за пределами стандартных разделов). Для того, чтобы это кэширование работало, между последним разделом и концом диска ДОЛЖНО быть пустое пространство. Кэш-раздел ДОЛЖЕН существовать, если вы хотите восстановить образ диска.

    Кэш-раздел представляет из себя надежную файловую систему с контролем CRC: Каждый каталог и каждый 32-килобайтный блок данных имеет свою 32-битную CRC-контрольную сумму. Если содержимое каталога или блока данных испорчено, то файл автоматически удаляется из кэша, и при обращении к нему, снова загружается с сервера.

    Вы имеете возможность работать с файлами кэш-раздела из BpBatch, MrBatch и MrZip, используя прямой доступ к специальному разделу "{:-1}". Чтобы увидеть содержимое кэш-раздела, наберите:
    logdir "{:-1}"




    Если данные в кэше испорчены, и автоматически не очищаются (этого не должно происходить), вы можете либо дать в интерактивном режиме команду:
    clean -1


    , либо удерживать обе клавиши Shift при загрузке BpBatch

    Специальные переменные

    Некоторые переменные бывают установлены при запуске интерпретатора и/или имеют специальное назначение. Некоторые из них существуют во всех программах, другие есть только в 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" - вывод итогов/содержимого файлов



    Значение по умолчанию: "hbD"


  • $FragmentSize задает размер частей архива. Если вы не используете улучшенную версию TFTP-сервера фирмы InCom, установите ее в "30 MB". Значение по умолчанию: "87 MB"



  • $SourceArchive, $DestArchive, $Filter... внутренние переменные.

    Переменные BOOTP

    Системой распознаются следующие переменные BOOTP-... и DHCP-... , заполняемые после получения соответствующего ответа на BOOTP/DHCP запрос (TCP/IP BootPROM должна существовать и работать):


    Содержание раздела