Запуск windows-приложений под FreeBSD

Автор: Станислав Лапшанский, slapsh@slapsh.pp.ru
Опубликовано: 15.12.2002


© 2002, Издательский дом «КОМПЬЮТЕРРА» | http://www.computerra.ru/
Журнал «СОФТЕРРА» | http://www.softerra.ru/
Этот материал Вы всегда сможете найти по его постоянному адресу: http://www.softerra.ru/freeos/22624/

Эта статья является переводом текста Dru Lavigne.

Одним из многих достоинств FreeBSD, которое отчетливо становится видным, если на вашем компьютере установлена не одна операционная система, является то, что для доступа к данным находящимся в разделе другой операционной системы нет никакой надобности покидать FreeBSD. Другими словами вы можете просто смонтировать раздел в файловую систему FreeBSD и читать, писать или удалять файлы находящиеся в этом разделе. (Разумеется, поклонники Linux лишь хмыкнут – подобные возможности не уникальны и давно присутствуют в любимой ими операционной системе. Но что скажут поклонники Windows? – прим. переводчика.) Однако у вас может возникнуть вопрос: «А как обстоят дела с запуском исполняемых файлов?» Если ваша «другая» операционная система сделана корпорацией Майкрософт, и, кроме того, вы воспользуетесь эмулятором Windows (Wine), то на вашей FreeBSD вполне можно будет выполнять довольно большое количество Windows-приложений. (Кроме Windows-приложений, FreeBSD позволяет выполнять программы скомпилированные для операционной системы Linux. Поддержка Linux-приложений реализована гораздо полнее и лучше, чем поддержка Windows-программ. Достаточно сказать, например, что под FreeBSD прекрасно себя чувствует Linux-версия сервера баз данных Oracle версии 8 – прим. переводчика.)

В сегодняшней статье я хочу продемонстрировать процесс установки и использования эмулятора Wine. Если все пойдет нормально, то я рискну испытать судьбу, попробовав запустить какое-нибудь Windows-приложение на компьютере, на винчестере которого, кроме FreeBSD вообще ничего нет – ни одного раздела с софтом от Майкрософта.

Я поставлю Wine на двух машинах моей сети. На первой машине установлены Windows 98 и FreeBSD 4.3-RELEASE, выбор рабочей системы осуществляется в процессе загрузки. Вторая машина полностью управляется FreeBSD 4.3-RELEASE. Воспользовавшись аккаунтом суперпользователя я откомпилирую и установлю Wine на обеих машинах:

su -
Password:
cd /usr/ports/emulators/wine
make install clean

После того как Wine установлен, на обеих машинах необходимо проверить конфигурационные файлы ядра на наличие в них необходимых для работы Wine опций. Оставаясь под суперпользователем пишем:

cd /usr/src/sys/i386/conf
cp GENERIC WINE

Затем, используя мой любимый текстовый редактор, я открыл файл WINE для того, что бы убедиться в том, что в нем содержатся следующие строки:

options USER_LDT
options SYSVSHM
options SYSVSEM
options SYSVMSG

На моей FreeBSD 4.3-RELEASE, три опции SYS* уже были включены, так что мне пришлось добавить лишь параметр USER_LDT. Если вам тоже пришлось что-нибудь добавить, сохраните внесенные изменения и перекомпилируйте ядро:

/usr/sbin/config WINE
cd ../../compile/WINE
make depend && make && make install && reboot

В последней строке на самом деле я вызываю сразу четыре отдельных команды, символы «&&» означают, что следующая команда из списка будет выполнена только при условии успешного выполнения предыдущей команды. Если вы решитесь включить в список команду «reboot», убедитесь, что другие пользователи в это время ничего не делают на этой системе, поскольку система будет перезагружена немедленно после окончания этапа установки скомпилированного ядра.

После установки Wine, прилагающуюся к нему документацию можно будет прочитать при помощи команды man 1 wine, а так же посмотреть ее в каталоге /usr/local/share/doc/wine. Кроме того, я нашел очень полезное HOW-TO (см. http://www.la-sorciere.de/Wine-HOWTO/book1.html), которое может очень пригодиться при первой установке Wine.

Для начала давайте попробуем запустить Wine на системе на которой помимо FreeBSD установлена Windows 98. Для запуска Wine на этой машине мне придется преодолеть следующие этапы:

  1. Найти и где-нибудь смонтировать раздел Windows.
  2. Тщательно проверить и поправить конфигурационный файл Wine.
  3. Протестировать получившуюся систему запуском какого-нибудь Windows-приложения.

Поскольку установка операционной системы на этот компьютер была произведена довольно давно, я воспользуюсь утилитой sysinstall для того что бы восстановить в памяти карту распределения дискового пространства на винчестере. Под суперпользователем:

/stand/sysinstall
Configure
Fdisk
пробел ad0

И вот я вижу нечто подобное:

Offset Size(ST) End Name PType Desc
 0 63 62 - 6 unused
 63 4176837 4176899 ad0s1 2 fat
 4176900 4016250 8193149 ad0s2 3 freebsd

Для выхода из fdisk'а я нажал клавишу q, а затем покинул sysinstall несколько раз выбрав пункт «Cancel». Видно, что раздел Windows во FreeBSD имеет название ad0s1. Для того, что бы смонтировать этот раздел, сначала я создам для него точку монтирования под названием «dos»:

mkdir /dos

На всякий случай я проверю права доступа к новому каталогу:

ls -l / | grep dos
drwxr-xr-x 2 root wheel 512 Aug 31 13:07 dos

Все нормально, все пользователи могут «читать» и «выполнять», и лишь один root может «писать» файлы.

Перед тем, как смонтировать раздел Windows на постоянной основе при помощи файла /etc/fstab, я должен убедиться, что он может правильно монтироваться вручную:

mount -t msdos /dev/ad0s1 /dos

Заметьте, что в качестве типа файловой системы используется «msdos», название устройства «/dev/ad0s1», а точкой монтирования выступает каталог «/dos». Поскольку в результате выполнения команды я просто получил обратно приглашение к работе, система смонтирована корректно. Это можно проверить при помощи команды df:

df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s2a 97M 36M 53M 40% /
/dev/ad0s2f 1.7G 567M 1.0G 35% /usr
/dev/ad0s2e 19M 2.0M 16M 11% /var
procfs 4.0K 4.0K 0B 100% /proc
/dev/ad0s1 2.0G 783M 1.2G 38% /dos

Кроме того, я могу проверить содержимое смонтированного раздела при помощи команды ls. Я воспользуюсь ключом «-F» для того что бы названия каталогов отличались от названий файлов символом «/»:

ls -F /dos

AUTOEXEC.BAT* COMMAND.COM* MSDOS.SYS* SCANDISK.LOG*
BOOT.INI* CONFIG.SYS* My Documents/ SETUPLOG.TXT*
BOOTLOG.PRV* DETLOG.TXT* NETLOG.TXT* WINDOWS/
bootsect.bsd* IO.SYS* Program Files/ RECYCLED/
ntdetect.com* ntldr*

Если вы никогда прежде не монтировали файловые системы, то вероятно вам понадобится несколько минут что бы поиграться с командами «cd» и «ls». Имейте в виду, что многие файлы имеют названия в верхнем регистре, так что когда вы будете к ним обращаться, пишите их с учетом регистра, поскольку FreeBSD чувствительна к регистру. Мало того, некоторые файлы содержат в названии символы пробела. Для доступа к таким файлам вы можете попробовать напечатать первоначальные несколько букв такого файла и нажав клавишу «Tab» воспользоваться функцией автодополнения имени файла, или поставить перед пробелом в имени файла символ обратного слеша «\»:

cd Program\ Files

Если вы хотите монтировать раздел Windows непосредственно во время загрузки, аккуратно добавьте следующую строку в файл /etc/fstab:

/dev/ad0s1 /dos msdos rw 0 0

Удостоверьтесь, что вы используете правильное название Windows-раздела, поскольку у вас оно может отличаться. Перед сохранением убедитесь, что вы не внесли в файл какой-нибудь ошибки. Я всегда стараюсь убедиться что мои изменения в файле fstab работоспособны следующим способом:

shutdown now
press enter when receive prompt back, then type exit

Как только вы вернетесь обратно, при помощи команды df -h, вы сможете убедиться что разделы смонтированы верно.

Теперь давайте отредактируем конфигурационный файл эмулятора Wine. В своем любимом текстовом редакторе откройте файл /usr/local/etc/wine.conf. Поскольку конфигурация Wine обычно не требует никаких изменений для работы, я сделаю в ней большие пропуски и покажу лишь участки куда вам придется внести некоторые изменения в соответствии с положением дел в вашей системе:

more /usr/local/etc/wine.conf
WINE REGISTRY Version 2
;; All keys relative to \\Machine\\Software\\Wine\\Wine\\Config

<Вырезано>

[Drive A]
"Path" = "/mnt/fd0"
"Type" = "floppy"
"Label" = "Floppy"
"Serial" = "87654321"
"Device" = "/dev/fd0"

[Drive C]
"Path" = "/c"
"Type" = "hd"
"Label" = "MS-DOS"
"Filesystem" = "win95"

<Вырезано>

Вот тут следует остановиться, поскольку в этом месте необходимо внести изменения. Замените значение переменной Path с «/c» на название вашей точки монтирования. Поскольку у меня точка монтирования называется «/dos», я изменил эту строку следующим образом:

"Path" = "/dos"

Сохраните изменения. Я обнаружил, что для корректной работы Wine этот файл должен быть скопирован в домашний каталог пользователя. Под суперпользователем я произведу некоторые изменения в домашнем каталоге пользователя genisis:

mkdir ~genisis/.wine
chown genisis ~genisis/.wine
cp /usr/local/etc/wine.conf ~genisis/.wine/config

Обратите внимание, что при копировании в каталог .wine я переименовал конфигурационный файл в «config». На данном этапе я покину аккаунт суперпользователя, поскольку конфигурация окончена. Под пользователем genisis, я запущу сессию XWindow:

startx

Находясь в XWindow, в окне xterm'а, выберем для запуска какое-нибудь приложение:

cd /dos/WINDOWS
ls | more

Среди прочего я обнаружил файл PROGMAN.EXE. Интрига заключается в том, что это Диспетчер Программ Windows. Я решил посмотреть, смогу ли я запустить его в FreeBSD под эмуляцией Wine:

wine -winver win98 -managed PROGMAN.EXE

После нескольких секунд ожидания, я был поприветствован Диспетчером Программ. Щелкнув по меню «Файл», я выбрал пункт «Выполнить» и нажал на кнопку «Обзор». В результате этого я увидел обширный список файлов находящихся на моем Windows-разделе.

Теперь началось веселье. При помощи метода проб и ошибок я стал выяснять какие приложения я смогу запустить. Я начал с Калькулятора, поэтому выбрав CALC.EXE я нажал кнопку «Открыть», а затем кнопку «ОК». И, вуаля, я пользуюсь Калькулятором Windows. Вы можете просидеть ночь тестируя приложения на «запускаемость» или вы можете воспользоваться функцией поиска на любом из этих двух сайтов:

В базе первого сайта на момент написания статьи содержится 2704 приложения которые протестированы на совместимость с Wine. Второй сайт имеет более удобный дизайн, но находится в стадии разработки.

Теперь давайте сделаем что-нибудь поинтереснее. Я вошел под суперпользователем и решил проверить, могу ли я установить и запустить какое-нибудь Windows-приложение под эмуляцией Wine. Для поиска программ, я пошел на http://www.download.com.

Я щелкнул по ссылке «самые популярные» игры и увидел Solsuite 2001. Реклама обещала 282 различных пасьянса. Я выкачал инсталлятор, который назвался solsuite.exe и сохранил его в каталоге /dos.

Вернувшись в xterm'е я напечатал:

cd /dos
wine -winver win98 -managed solsuite.exe

И тут же получил сообщение об ошибке, гласящее об отсутствии каталога .wine. Давайте создадим в домашнем каталоге суперпользователя этот подкаталог и скопируем туда конфигурационный файл Wine:

mkdir ~/.wine
cp /usr/local/etc/wine.conf ~/.wine/config

Теперь, когда я повторил запуск wine, запустился мастер инсталляции программы. Я проследовал через все этапы установки и проследил за процессом копирования файлов. В самом конце инсталлятор завис, однако он сообщал, что до конца процесса установки осталось 0 минут, 0 секунд, поэтому я решил попытать счастья и для завершения установки воспользовался комбинацией «^c». Затем я набрал:

cd Program\ Files/SolSuite
wine -winver win98 -managed Solsuite.exe

Наступило время обзванивать соседей и хвастаться. Я успешно установил и запустил Windows-программу из FreeBSD и, кроме того, у меня возобновился свой интерес к карточным играм.

В качестве последнего теста, я перезагрузил компьютер в Windows 98. Там я нажал на кнопку «Пуск», и в меню «Программы» увидел новый пункт «Solsuite-Solitaire Card Games», внутри правда было пусто. Не испугавшись, я запустил проводник и дважды щелкнул по папке «Program Files», а затем вошел в каталог «Solsuite», где и обнаружил выполняемые файлы. Это хороший знак, подумал я. Я открыл в проводнике папку Windows, затем «Программы», а затем «Solsuite-Solitaire Card Games», и перетащив туда правой кнопкой мыши файл solsuite.exe, выбрал в появившемся контекстном меню пункт «Создать ярлык».

Теперь нажав «Пуск», «Программы», «Solsuite-Solitaire Card Games» и выбрав «Ярлык на SolSuite», я опять могу выбирать интересующий меня пасьянс. Я впечатлен.

Настало время для самого серьезного испытания. Я перехожу к компьютеру, на котором установлена только FreeBSD. Его жесткий диск полностью отформатирован в файловой системе UFS и, разумеется не содержит ни одного компонента Windows. (На самом деле уважаемый автор зря так пугает потенциальных пользователей Wine – он изначально разрабатывался для выполнения Windows-приложений без какого-либо использования кода Windows – прим. переводчика).

Я вошел в систему под суперпользователем и создам там несколько каталогов и пустых файлов, наличие которых предполагается Windows-программами:

su -
Password:
mkdir -p /usr/local/lib/win/windows
cd /usr/local/lib/win/windows
mkdir system
touch win.ini
cd system
touch shell.dll shell32.dll winsock.dll wsock32.dll

Помните как нам пришлось отредактировать одну строчку в файле /usr/local/etc/wine.conf, что бы она указывала на точку монтирования раздела Windows? Сейчас нам придется сделать это снова, правда указывать она будет на «поддельную» структуру Windows-каталогов:

[Drive C]
"Path" = "/usr/local/lib/win"

Затем я создам необходимые каталоги и скопирую конфигурационный файл суперпользователю и пользователю genisis:

mkdir ~/.wine
cp /usr/local/etc/wine.conf ~/.wine/config
mkdir ~genisis/.wine
chown genisis ~genisis/.wine
cp /usr/local/etc/wine.conf ~genisis/.wine/config

Оставаясь суперпользователем, я вернусь на http://www.download.com и загружу инсталлятор Solsuite 2001. Теперь я сохраню его в /usr/local/lib/win. Теперь запущу сессию XWindow, xterm и напечатаю:

cd /usr/local/lib/win
wine -winver win95 -managed solsuite.exe

Опять начнет выполняться инсталляционная программа. Я получил сообщение об ошибке, в котором говорилось о невозможности обнаружить файл «explorer.exe», но я успешно его проигнорировал. Когда все закончилось, я напечатал:

cd Program\ Files/SolSuite
wine -winver win95 -managed SolSuite.exe

И хотя это было немного медленнее (но это и более старый компьютер), и, кроме того, мне пришлось подстроить конфигурацию дисплея, но я все-таки смог поиграть в карточную игру написанную для Windows, на компьютере, который полностью выделен под FreeBSD. Человек с исследовательским складом натуры получит массу удовольствия от Wine.

Все вышесказанное говорит о том, что эмулятор Wine это программа из коллекции портов FreeBSD, с которой можно неплохо поразвлечься. Если в результате ваших экспериментов с Wine вам удастся запустить под ним программу, которая не включена в базу данных выполняемых под Wine программ, добавьте вашу запись в эту базу на любом из двух сайтов о которых я упомянул выше.


Телефон редакции: (095) 232-2261
E-mail редакции: inform@softerra.ru
По вопросам размещения рекламы обращаться к Алене Шагиной по телефону +7 (095) 232-2263 или электронной почте reclama@computerra.ru

Используются технологии uCoz