Конфигурирование DosEMU
Для проверки программ, написанных на до сих пор популярных средах
программирования Borland C/C++ 3.1 или Borland Pascal 7.0
можно использовать эмулятор (точнее, виртуальную машину) MS-DOS.
Необходимые для этого шаги описаны ниже.
Скачивание
Текущая версия эмулятора 1.0.2 доступна по адресу
ftp://ftp.dosemu.org/pub/dosemu/dosemu-1.0.2.tgz
(локальная копия находится
здесь).
Установка
Компиляция и установка - процесс достаточно сложный, здесь по шагам дано
подробное описание.
- Разархивируйте DosEMU куда-нибудь в рабочий каталог
командой
tar xfz dosemu-1.0.2.tgz
Далее каталог, в котором компилируется DosEMU будет называться
${SRCDIR}. Если архив разворачивался в каталоге /tmp,
то значение ${SRCDIR} равно /tmp/dosemu-1.0.2.
- Выберите каталог, в который будет установлен эмулятор. В этом документе
далее каталог будет называться ${PREFIX}.
Например, целевым каталогом можно выбрать /usr/local/pkg/dosemu-1.0.2.
- Перейдите в тот каталог, куда Вы разархивировали DosEMU:
cd ${SRCDIR}
- Сконфигурируйте DosEMU следующей командой:
./base-configure --prefix=${PREFIX} --enable-force-slang --enable-nosbemu --enable-nonet
- Скомпилируйте DosEMU командой make.
- Скомпилируйте вспомогательные программы DOS-режима с помощью
команды make dosbin.
- Все последующие действия должны выполняться пользователем root.
Создайте каталоги ${PREFIX}/bin,
${PREFIX}/etc, ${PREFIX}/lib, например, следующими командами:
mkdir -p ${PREFIX}/bin ${PREFIX}/etc ${PREFIX}/lib
- Создайте в каталоге ${PREFIX}/etc файл dosemu.users.
Установите обычным пользователям минимальные права. Образец конфигурационного
файла можно посмотреть
здесь.
- Создайте в каталоге ${PREFIX}/etc файл dosemu.conf.
В этом файле отключите поддержку EMS- и XMS-памяти, видеорасширения и звук.
Образец конфигурационного файла доступен
здесь.
- Скопируйте исполняемые файлы в каталог исполняемых файлов
следующей командой:
cp -pd bin/* ${PREFIX}/bin
- Скопируйте файл global.conf из каталога etc каталога компиляции
dosemu в каталог ${PREFIX}/lib.
- Создайте каталоги dosboot и mnt в каталоге
${PREFIX}/lib.
- Скопируйте файлы command.com, io.sys,
msdos.sys из любой
"живой" системы MS-DOS
(например, Windows 98) в каталог ${PREFIX}/lib/dosboot.
- Скопируйте файл exitemu.com
из каталога ${SRCDIR}/commands в каталог
${PREFIX}/lib/dosboot.
- Теперь Вы можете запустить эмулятор с помощью команды:
${PREFIX}/bin/dos -I 'video { none }'
Система должна загрузиться и появится приглашение ко вводу.
Вы можете попробовать набрать встроенные команды MS-DOS, такие как
dir и пр. Для выхода из эмулятора используйте команду
exitemu.
- Скопируйте программу dosexec.exe в каталог
${PREFIX}/lib/dosboot. dosexec.exe - это маленькая
программа, которая перенаправляет стандартный поток ввода из
файла ./input., стандартный поток вывода в файл ./output,
стандартный поток ошибок в файл ./error. Затем она запускает
программу ./program.exe, после этого код её завершения записывается
в файл ./e. Исходный код этой программы доступен
здесь,
скомпилированный вариант (с помощью Borland C 3.1) доступен
здесь.
- В каталоге ${PREFIX}/lib/dosboot
создайте файл autoexec.bat примерно следующего содержания:
d:
c:\dosexec.exe
c:\exitemu
Такой файл можно скачать здесь.
- Убедитесь, что все файлы в каталоге dosboot и сам каталог
имеют владельца root группу root и недоступны для
модификации другими пользователями. При необходимости выполните
команды
chown -R root:root ${PREFIX}/lib/dosboot
chmod -R o-w ${PREFIX}/lib/dosboot
- Теперь нужно создать виртуальный диск DOS, с которым сможет работать
тестируемая программа. Чтобы не допустить неконтролируемого заполнения
диска можно создать небольшую файловую систему, и затем примонтировать
её с помощью loopback-интерфейса. Предположим, что размер
виртуального диска равен 10МБ.
Создать диск можно командами:
dd if=/dev/zero of=${PREFIX}/lib/dosrun.img bs=1M count=10
mke2fs -F ${PREFIX}/lib/dosrun.img
Примонтировать созданный диск можно командой
mount ${PREFIX}/lib/dosrun.img ${PREFIX}/lib/mnt -o loop
Если такую конфигурацию предполагается использовать постоянно,
можно добавить соответствующую строку в /etc/fstab.
- На примонтированном диске создайте каталог dosrun
и сделайте на него символическую ссылку из lib.
Поставьте владельцем каталога dosrun пользователя,
под которым будет работать проверяющая система.
Для этого используются следующие команды:
mkdir ${PREFIX}/lib/mnt/dosrun
ln -s mnt/dosrun ${PREFIX}/lib
chown dosrun:dosrun ${PREFIX}/mnt/dosrun
Здесь предполагается, что пользователь, под которым происходит
проверка программ, называется dosrun.
Настройка ejudge
Чтобы настроить систему ejudge на проверку программ, скомпилированных
для DOS, с использованием DosEMU, конфигурационный файл должен
содержать примерно такие строки:
[tester]
abstract ; может наследоваться другими тестерами
name = DOS_tester ; название для наследования
no_redirect ; не перенаправлять стандартные потоки
errorcode_file = e ; файл, в который запишется код возврата
; программа для запуска эмулятора
start_cmd = ../extra/dosrun2
; переменная окружения, которая задаёт путь к dosemu
start_env = "DOSPATH=${PREFIX}/bin/dos"
; каталог, в котором будет находиться тестируемая программа
work_dir = ${PREFIX}/lib/dosrun
Тестер для задачи X может быть определён тогда
следующим образом:
[tester]
super = DOS_tester
problem_name = X
check_cmd = check_x
Alexander Chernov