Назад Вперед Оглавление

4. Непосредственно исполняемые DOS приложения dosemu (DEXE)

This section of the document by Hans, <lermen@fgan.de>. Last updated on June 16, 1997.

4.1 Подготовка и использование DEXE

Наверное, вам было интересно, что означает расширение *.dexe. Теперь из названия параграфа вы это знаете ;-)

На самом деле это маленький загружаемый образ диска, содержащий всего одно DOS-приложение. Поскольку оно имеет доступ только к образу диска, то порождает меньше проблем с обеспечением безопасности, чем полное DOS-окружение под linux. Что еще лучше, вам не нужно возиться с установкой, так как это уже сделал тот, кто готовил dexe.

С другой стороны, можно создавать свои собственные *.dexe файлы, используя скрипт 'mkdexe'. Для его запуска, однако, вам понадобятся как минимум mtools-3.6, покольку эта версия имеет некоторые дополнительные возможности по сравнению с предыдущими.

Подробнее, для изготвления *.dexe нужно следющее:

  • иметь mtools-3.6.
  • иметь скомпилированный dosemu и не делать 'make pristine'
  • иметь *.zip архив, содержащий все файлы, относящиеся к DOS-приложению (возможно, целые каталоги)
  • подготовить следующую информацию перед запуском 'mkdexe':
    • Размер раздела для образа диска
    • Версию DOS, которую следует поместить на этот образ. Если ваше приложение работает под FreeDos, этого не требуется, в противном случае 'mkdexe' будет нужно знать, с какого из существующий загрузочных разделов брать систему.
    • Содержимое config.sys и autoexec.bat.
  • затем (как root) выполните следующее
           # cd ./dexe
           # mkdexe myapp.zip -x myapp.exe -o confirm
    
  • Если все прошло нормально, у вас появилось /var/lib/dosemu/myapp.dexe, которое можно выполнить командой
           # dos -L myapp.dex [ dosemu-options ]
    
    либо
           # dosexec myapp.dex [ dosemu-options ]
    

Вот что ./mkdexe напечатает в качестве подсказки, если его вызвать без аргументов:

   USAGE:
     mkdexe [{ application | hdimage}]
                        [-b dospart] [{-s|-S} size] [-x appname]
                        [-c confsys] [-a autoexe] [-C comcom ] [-d dosemuconf]
                        [-i IOname] [-m MSname]
                        [-o <option> [-o ...]]

     application  полная DOS-программа в виде *.zip файла
     hdimage      имя образа диска для результата, если задано -o noapp
                  (см. ниже)
     dospart      Если не указано, будет использоваться система FreeDos
                  Если указано, то это должен быть либо загружаемый DOS
                  раздел (/dev/...), либо уже готовый образ диска.
     -s size      _Дополнительное_ свободное место (в Kб) на образе диска
     -S size      Полный размер (в Кб) образа диска (-s,-S взаимоисключающи)
     appname      Название запускаемой DOS-программы
     confsys      Заготовка для config.sys
     autoexe      Заготовка для autoexec.bat
     comcom       имя командного интерпретатора, обычно command.com
     dosemuconf   Заготовка для используемого dosemu.conf
     IOname       Имя DOS файла, обычно называемого IO.SYS,
                  (по умолчанию для FreeDos: IPL.SYS) который всегда помещается 
                  первым файлом на образ диска
     MSname       Имя DOS файла, обычно называемого MSDOS.SYS, 
                  (по умолчанию для FreeDos: MSDOS.SYS) который всегда 
                  помещается вторым на образ диска
     -o <option>  Распознаются следующие вспомогательные флаги:
                    confirm   предложить редактировать config.sys, autoexec.bat 
                              и dconfig с помощью  $EDITOR  
                    nocomcom  Опустить command.com, поскольку он все равно не
                              используется, когда  shell=c:\appname.exe
                    noapp     Сделать простой загружаемый образ диска для 
                              обычной работы с DOSEMU (вместо hdimage.dist)

При необходимости изменить встроенный конфигурационный файл, можно использовать ./src/tools/periph/dexeconfig для извлечения/сохранения настроек.

  # dexeconfig -x configfile dexefile

Извлечение настроек из 'dexefile' и помещение их в 'configfile'

;

  # dexeconfig -i configfile dexefile

делает обратное преобразование.

Есть одна тонкость: когда вы желаете дать пользователю право выполнять DEXE, а сама эта DOS-задача хочет произвести запись в файл внутри DEXE (который на самом деле - целая DOS-овская файловая система). Для этого понадобилось бы дать пользователю право записи (что нежелательно). В DEXE предусмотрен обходной путь: можно установить права read-only на сам DEXE файл, но предусмотреть флажок, который позволит DOSEMU все равно открывать его на чтение/запись. То есть, пользователь не может удалить или подменить DEXE, но встроенное DOS-приложение сможет (полностью изолированно) писать в DOS файлы внутри DEXE (сложно, да?). Для установки такого разрешения вам снова понадобится 'dexeconfig':

  # dexeconfig -p W dexefile

Вот что 'dexeconfig' напечатает в качестве подсказки, если его вызвать без параметров:

   USAGE:
      dexeconfig [-M] [-p {w|W}] -i configfile dexefile
      dexeconfig -x configfile dexefile
      dexeconfig -v  dexefile
      dexeconfig -p {w|W}  dexefile

   где
      -i      записать конфигурационный файл в dexe
      -x      извлечь конфигурационный файл
      -p w    сбросить разрешение на запись
      -p W    установить разрешение на запись
      -v      посмотреть текущие установки

Было бы здорово собрать архив работающих, свободно распространяемых *.dexe программ, и здесь я прошу о таких вкладах. Однако, ОЧЕНЬ ВАЖНО, если вы решите предложить *.dexe программы в общественное использование, пожалуйста, НЕ ИСПОЛЬЗУЙТЕ никаких других DOS, кроме FreeDos, иначе вы нарушите авторские права. Это (к сожалению) так и для OpenDOS, который можно распространять только с разрешения Caldera :-(

Усли вы уже собрали *.dexe и хотите им поделиться, пожалуйста, пошлите мне письмо и загружайте хозяйство на

   tsx-11.mit.edu:/pub/linux/ALPHA/dosemu/Development/Incoming

Затем я переложу это в

   tsx-11.mit.edu:/pub/linux/ALPHA/dosemu/dexe/*
   ftp.suse.com:/pub/dosemu/dexe/*

Пока там только одна программа : fallout.dexe Это симпатичная Тетрис-подобнаая игра, которую я нашел на старом CD-ROM и которая работает в 300x200 в консоли и под X-ами (не в slang-терминале). Когда вы поместите ее в каталог /var/lib/dosemu/* , ее можно запустить так:

   dosexec fallout.dexe -X

Надеюсь, в будущем у нас появятся и другие *.dexe ....

4.2 Использование binfmt_misc для прямого запуска DEXE

Есть хитрый патч к ядру от Richard Guenther <zxmpm11@student.uni-tuebingen.de>. Его можно получить с

<http://www.anatom.uni-tuebingen.de/~richi/linux/binfmt_misc.html>

Мы надеемся, что он войдет в ядро, поскольку тогда будет можно запускать DEXE просто набрав имя в командной строке. Для регистрации DEXE формата с помошью binfmt_misc сделайте (в своем /etc/rc.-что_у_вас_там)

  cd /proc/sys/fs/binfmt_misc
  echo :DEXE:M::\\x0eDEXE::/usr/bin/dosexec: >register

и все.

4.3 Создание загружаемого образа диска для общих целей

Вы можете применить './mkdexe' для создания _обычного_ образа загрузочного диска, в этом есть то достоинство, что вам более не нужно возиться с DOS-овским загрузочным диском. У меня получилось сделать загрузочный образ с FreeDos, MSDOS-6.2 и даже WINDOWS'95 (да, его можно загрузить с DOSEMU-шного MBR ;-) Я не проверял другие DOS-ы, но думаю, что они тоже будут работать, если вы передадите 'mkdexe' (ключи -i, -m) правильные имена системных файлов.

Пример: Пусть загрузочный DOS-раздел на /dev/hda1, тогда ...

  # cd ./dexe
  # ./mkdexe myhdimage -b /dev/hda1 -o noapp

создаст непосредственно загружаемый 'myhdimage' из существующей установки DOS. Не нужно делать загрузочную дискету, не нужно больше возиться с fdisk /MBR и sys.com . С помощью -o confirm можно также подправить файлы конфигурации перед их переносом на образ диска.

Более того, на базе mkdexe есть скрипт setup-hdimage, который облегчает первую установку образа диска для DOSEMU. Он запрашивает все, что нужно, и должен работать на большинстве машин.

  # cd /where/I/have/dosemu
  # ./setup-hdimage

4.4 Доступ к файлам внутри образа диска с помощью mtools

В каталоге ./dexe также есть скрипт, который позволяет получить прямой доступ к файлам на образе диска, даже не изменяя настроек в /etc/mtools.conf. Используется он так:

   USAGE:
     do_mtools device mcommand [ arg1 [...] ]

   где:
     device    = DOS-раздел, например '/dev/hda1'
                 или образ диска DOSEMU
     mcommand  = любая разрешенная команда mtools
     argX      = любой разрешенный аргумент для mtools.
                 ВНИМАНИЕ: для диска DOS используйте 'W:'

   пример:
     do_mtools /var/lib/dosemu/hdimage mcopy W:/autoexec.bat -


Назад Вперед Оглавление
Перевод: Валерий Груздев (grue@vpti.vladimir.ru)

Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости