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


Dru Lavigne
перевод Станислава Лапшанского
Впервые опубликован: http://www.computerra.ru.

21 июня 2005 г

Оригинал статьи находится по адресу: http://www.onlamp.com/pub/a/bsd/2001/09/21/FreeBSD_Basics.html.

Одним из многих достоинств 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 на этой машине мне придется преодолеть следующие этапы:
Найти и где-нибудь смонтировать раздел Windows.
Тщательно проверить и поправить конфигурационный файл Wine.
Протестировать получившуюся систему запуском какого-нибудь 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. Вы можете просидеть ночь, тестируя приложения на "запускаемость" или Вы можете воспользоваться функцией поиска на любом из этих двух сайтов:
Wine Development HQ (см. http://www.winehq.com/Apps)
CodeWeavers Wine Application Database (см. http://appdb.codeweavers.com/)

В базе первого сайта на момент написания статьи содержится 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 программ, добавьте Вашу запись в эту базу на любом из двух сайтов о которых я упомянула выше.

Обновлено: 12.03.2015