pashazz 30.04.2010 21:35

WineGameСоздаем пакет для WineGame

Предположим, что вы знаете, как запустить ту или иную win-игру через Wine, и хотите, чтобы она устанавливалась в WineGame. И, естественно, этой игры там нет.

Информация на моей wiki довольно загадочна, так что перескажу ее здесь на реальном примере, хотя и очень простом, на примере моей любимой игрушки FIFA 10.


1. Начало.

Для начала создадим нужные директории:

1
2
mkdir -p fifa10 #Это корневая директория проекта,  имя значения не имеет.
cd fifa10



2. Control-файл

Теперь нам нужно заполнить ini-файл control, к-рый содержит всю информацию о том, что надо делать, собственно.
1
$EDITOR control



Любой ini-файл состоит из секций. Сначала идет имя секции в квадратных кавычках
, затем пары имя=значение. Секция может быть ограничена только началом следующей секции. В принципе, секции могут располагаться в любом порядке.

Все параметры, относящиеся к собственно Wine, находятся в секции . Вот что можно указать:

distr - URL для закачки дистрибутива Wine. Я тестировал только протокол HTTP, но, в принципе, все что умеет QNetworkAcessManager можно указать (public FTP, HTTPS).
Пример:
1
distr="http://winegame.googlecode.com/files/wine-1.1.20-bin.tar.bz2"


P.S. Использование этой фичи строго не рекомендуется из за бага #17055 Обойти его можно, как это делать, я покажу ниже. Также нужно соблюсти файловую иерархию от корня ФС. Как это сделано, см. в архиве из примера. Формат файлов - tar.gz/tar.bz2

components - список компонентов winetricks, устанавливаемых в один префикс с игрой, через пробел. Список тут.
Пример:
1
components="d3dx9 vcrun2005 ddr=opengl"


P.S. Не рекомендуется использовать directx9 в Wine 1.1.4x. Используйте d3dx9. к тому же он не беспокоит пользователя.

memory=true (по умолчанию false) - это магическая настройка, прописывающая в реестр wine (Direct3d only) размер видеопамяти. Необходимо для DirectX игр.

На этом секция wine заканичивается. Все значения секции wine не обязательны.

Вторая секция в файле control нашего пакета - . Она определяет поведение wine относительно приложения. Что указывается здесь:

prefix - имя префикса wine, куда будет устанавливаться приложение. Это должна быть строчка без пробелов и знака "/". Это обязательный параметр
Пример:
1
prefix="fifa10"


WineGame интерпретирует эту строчку так: приложение устанавливается в ~/Windows/%имя_префикса№, а Wine распаковывается в ~/Windows/wines/%имя_префикса%.

setup - путь к файлу установщика от корня диска. Проверяется, когда пользователь устанавливает приложение с CD/DVD. По умолчанию используется значение из autorun.inf. В версии 0.0.2, я думаю, можно будет переопределять это значение для каждого отдельного диска.
Пример:
1
setup="EASetup.exe"



exepath - если вы заполните этот параметр, то WineGame создаст ярлык на рабочем столе для данного приложения. Это обход бага wine, о котором я сказал выше. Это должен быть путь Windows.
Пример:
1
c:/program files/ea sports/fifa 10/fifa10.exe"



На этом все о Control-файле. Вот что у меня получилось:


distr="http://winegame.googlecode.com/files/wine-1.1.20-bin.tar.bz2"
components="d3dx9 vcrun2005 ddr=opengl"
memory=true

setup="EASetup.exe"
prefix="fifa10"
exepath="c:/program files/ea sports/fifa 10/fifa10.exe


3. Скрипты.

Иногда нужно выполнить какие-либо действия, до и/или после установки нашей игры. Например, заменить DLL поставить NoCD, если без него игра не работает, или еще что-нибудь.
WineGame решает эту проблему с помощью скриптов preinst и postinst (да, я взял имена из Debian).
Вы можете написать эти скрипты на любом интерпретируемом языке, будь то bash или python. Каждому из этих скриптов передаются следующие переменные окружения:
WINEPREFIX - путь к префиксу WineWINE - путь к исполняемому файлу wineCDROOT - путь к корню диска (если идет установка с диска)FILESDIR - путь к директории с дополнительными файлами (см. ниже)4. Даем нашей игре имя.

Теперь нашей игре нужно как-то назваться, и иметь описание. Это делается так:
Имя игры (нелокализованное) будет находиться в файле.name в директории нашего пакета:
1
$EDITOR .name


Пример:
EA Sports FIFA 10

Если вы не заполнили его, используется имя директории пакета (в нашем случае fifa10). Имя игры показывается в списке игр и при вставке диска с игрой (и натравливании на него winegame`а).
Игра может быть локализована на множество стран, и иметь множество названий на разных языках. Чтобы задать имя игры, допустим, на русском языке, поместите его в файл .name.ru_RU (и так для любого языка). Когда WineGame будет запущен с русской локалью, он отобразит русское имя игры, если найдет. А если нет, то отобразит нелокализованное.

Конечно, нашей игре нужно и описание (оно показывается, если щелкнуть по имени игры в списке). Туда помещается любой текст. Описание должно помещаться в файле .note Вы можете (и, наверное, должны) использовать HTML..
Аналогично названию, можно задать локализованное описание в файле ".note.%локаль%".

5. Определение диска игры.

Для определения диска игры создайте директорию cdrom.d в папке пакета winegame:
1
mkdir cdrom.d



Для того, чтобы WineGame определил диск с игрой, нужно в файл с любым именем в этой директории поместить список файлов, находящихся в корневом каталоге CD/DVD с игрой (лучше метода не придумал).
Пример:

alocale
autorun.dat
autorun.inf
data
dirtysock.dll
FIFA10.exe
fifaosdkz.pdb
GDFBinary.dll
msvcr71d.dll
Redistributable
Support
Autorun
AutoRun.exe
config.dat
DirectX
EASetup.exe
fifaosdkz.dll
fifapc.ico
Group10.cab
msvcr71.dll
Setup.exe


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

6. Дополнительно.
WineGame предоставляет возможность таскать за собой файлы, нужные игре (естественно, они должны быть небольшими). Вы можете сохранить любые файлы (снабдив их правовой информацией) в папке files пакета winegame. Вы можете использовать их в скриптах (путь к этой папке передается в переменной окружения FILESDIR), вы можете использовать, к примеру, картинки в описаниии (вставив в описание blablabla.png).

На этом все. Для проверки работоспособности скопируйте папку пакета в /usr/share/winegame, а затем пришлите мне на pzinin@gmail.com


Тэги: package winegame
+ 4 -
Похожие Поделиться

vvorth 03.05.2010 10:40 #
Почему бы имя и описание в control файл не запихнуть?
pashazz 03.05.2010 10:49 #
because internationalisation