続・玩式草子 ―戯れせんとや生まれけん―

第19回Days of WINE and Struggles[6]

前回何とかPlamo LinuxでもWINEが動くようになった、という話をしました。その後、他の人にも使っていただける程度にパッケージを整理できたので、今回はWINEをパッケージとしてPlamo Linux環境にインストールする方法について紹介します。

WINEのインストール

復習がてら整理しておくと、WINEはWindows用のソフトウェアをLinux等のPOSIX互換OS上で動かすためのソフトウェアで、一般には「エミュレータ」と呼ばれる種類のソフトウェアなものの、開発者たちは"WINE is Not a Emulator(WINEはエミュレータではない)"と呼んで、WINEはエミュレータではなく"compatibility layer(互換レイヤ)"だ、と主張しています。

両者の区別は曖昧なものの、細かく見ると、⁠エミュレータ」というのは「ゲームボーイのエミュレータ」のように対象システムの動作をソフトウェア的に模倣するのに対し、WINEはWindowsの動作を模倣するのではなく、動かそうとしているソフトウェアが発するWindowsへのシステムコールをPOSIX系OS用のシステムコールに変換して実行する、という違いがあります。

例えて言うと、ソフトウェアから「指定した3点を結ぶ三角形を描け」というコマンドを受けた場合、エミュレータならば、いったん自分で三角形を描き、そのために必要なシステムコールを改めて発行するのに対し、WINEの場合は、⁠3点とそれらを結ぶ線」というコマンドをLinux用に翻訳して実行する、といった感じでしょうか。

もっとも、こういう作りになっているため、32ビット用のシステムコールを64ビット用に変換することはできず、未だに32ビット版のアプリが主流のWindows用ソフトウェアを使うためには、Linux用に32ビット版のライブラリ一式を用意しなければならないことは以前にも紹介した通りです。

そのため64ビット専用になっているPlamo Linux 7.x環境でWINEを動かすには、まず32ビット版のライブラリ一式を用意する必要があります。本連載で紹介してきたGCC回りの32ビット版やそれを用いて作成した各種ライブラリの32ビット版は、plamo.linet.gr.jpのContrib_localというディレクトリに収めています。

このディレクトリには、GCC、Wine、lib32という3つのディレクトリがあり、それぞれ、multilib用のGCC、Wineパッケージ、32ビット版ライブラリを収めています。Plamo LinuxでWineを動かすためには、これらのディレクトリに収めているパッケージを全て(WINEは5.0か5.5のどちらか)インストールする必要があります。

lftp plamo:/pub/Plamo-test/for-7.x/Contrib_local> ls
-rw-r--r--   1 kojima   plamo        2143 Apr 19 03:46 ChangeLog
drwxr-xr-x   3 kojima   plamo        4096 Apr 19 03:46 GCC
drwxr-xr-x   3 kojima   plamo        4096 Apr 12 00:48 Wine
drwxr-xr-x   3 kojima   plamo        8192 Apr 19 00:16 lib32

lftp plamo:/pub/Plamo-test/for-7.x/Contrib_local> ls GCC
-rw-r--r--   1 kojima   plamo    93352424 Apr 19 03:45 gcc_multilib-9.3.0-x86_64-M2.txz
-rw-r--r--   1 kojima   plamo      551504 Sep  4  2019 lib32_bison-3.4.1-i686-M1.txz
-rw-r--r--   1 kojima   plamo        4964 Sep  4  2019 lib32_flex-2.6.4-i686-M1.txz
...
lftp plamo:/pub/Plamo-test/for-7.x/Contrib_local> ls lib32
-rw-r--r--   1 kojima   plamo      104284 Sep  4  2019 lib32_FAudio-19.07-i686-M1.txz
-rw-r--r--   1 kojima   plamo      191912 Sep  4  2019 lib32_SDL-1.2.15-i686-M1.txz
-rw-r--r--   1 kojima   plamo    106392076 Sep  4  2019 lib32_SPIRV_Tools-2019.2-x86_64-B1.txz
... 
lftp plamo:/pub/Plamo-test/for-7.x/Contrib_local> ls Wine
drwxr-xr-x   2 kojima   plamo        4096 Apr  6 03:38 old
-rw-r--r--   1 kojima   plamo    31860040 Apr 12 00:43 wine-5.0-x86_64-B1.txz
-rw-r--r--   1 kojima   plamo    32065276 Apr  6 03:32 wine-5.5-x86_64-B1.txz
-rw-r--r--   1 kojima   plamo    27626988 Apr 12 00:43 wine_32-5.0-i686-M1.txz
-rw-r--r--   1 kojima   plamo    27289708 Apr  6 03:32 wine_32-5.5-i686-M1.txz
-rw-r--r--   1 kojima   plamo         459 Apr 12 00:48 wine_memo-20200412.txt
-rw-r--r--   1 kojima   plamo      170744 Apr  6 03:32 winetricks-20191224-x86_64-B1.txz

パッケージのダウンロードにはさまざまな方法があり、"lftp"コマンドを使う場合は、mgetglobを組み合わせてディレクトリ一式を一括ダウンロードできます。

$ lftp plamo.linet.gr.jp
lftp plamo.linet.gr.jp:~> cd /pub/Plamo-test/for-7.x/Contrib_local
cd 成功、cwd=/pub/Plamo-test/for-7.x/Contrib_local
lftp plamo.linet.gr.jp:/pub/Plamo-test/for-7.x/Contrib_local> glob mget -d GCC/*
101753400 bytes transferred
計 9 ファイル転送済
lftp plamo.linet.gr.jp:/pub/Plamo-test/for-7.x/Contrib_local> glob mget -d lib32/*
376375884 バイト転送済、3 秒経過 (103.06 MiB/s)
計 157 ファイル転送済
lftp plamo.linet.gr.jp:/pub/Plamo-test/for-7.x/Contrib_local> glob mget -d Wine/*
119013215 バイト転送済、2 秒経過 (74.82 MiB/s)
計 6 ファイル転送済

lftpでは"!"をコマンドの前に付けるとローカルのシェルを実行するので、ダウンロードしたファイルは以下のように確認できます。

lftp plamo.linet.gr.jp:/pub/Plamo-test/for-7.x/Contrib_local> !ls -R
.:
GCC  Wine  lib32

./GCC:
gcc_multilib-9.3.0-x86_64-M2.txz  lib32_isl-0.21-i686-M1.txz
lib32_bison-3.4.1-i686-M1.txz     lib32_mpc-1.1.0-i686-M1.txz
....
./Wine:
wine-5.0-x86_64-B1.txz  wine_32-5.0-i686-M1.txz  wine_memo-20200412.txt
wine-5.5-x86_64-B1.txz  wine_32-5.5-i686-M1.txz  winetricks-20191224-x86_64-B1.txz

./lib32:
lib32_FAudio-19.07-i686-M1.txz     lib32_libXxf86vm-1.1.4-i686-M1.txz
lib32_SDL-1.2.15-i686-M1.txz           lib32_libcap-2.27-i686-M1.txz
lib32_SPIRV_Tools-2019.2-x86_64-B1.txz   lib32_libdmx-1.1.4-i686-M1.txz
....

次に、これらダウンロードしたパッケージをインストールしていくものの、multilib対応のGCCパッケージだけは少し注意が必要です。というのも、通常のPlamo LinuxではGCCはlibgccgccg++gfortranという4つのパッケージに分割しているのに対し、multilib版のGCCはgcc_multilibという1つのパッケージにまとめてしまっているため、更新する際は、まず64ビット版の4パッケージを削除した上で、multilib版のGCCと関連パッケージをインストールすることになります。

$ sudo removepkg libgcc gcc g++ gfortran
[sudo] kojima のパスワード:

Removing package libgcc...
Removing files:
  --> usr/lib/libstdc++.so (symlink) was found in another package. Skipping.
  --> usr/lib/libstdc++.so.6 (symlink) was found in another package. Skipping.
WARNING: Nonexistent install was found in another package. Skipping.
  --> usr/lib/libgcc_s.so was found in another package. Skipping.
  --> usr/lib/libgcc_s.so.1 was found in another package. Skipping.

Removing package gcc...
Removing files:
  --> Deleting symlink lib/cpp
  --> Deleting symlink usr/bin/cc
  --> Deleting symlink usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/liblto_plugin.so
  --> Deleting symlink usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/liblto_plugin.so.0
....

$ sudo installpkg GCC/*txz
gcc_multilib-9.3.0-x86_64-M2 のインストール中
PACKAGE DESCRIPTION:
gcc_multilib-9.3.0-x86_64-M2 のインストールスクリプトを実行中

lib32_bison-3.4.1-i686-M1 のインストール中
PACKAGE DESCRIPTION:
....

"-print-multi-lib"オプションを使うと、GCCがmultilib版になっているかを確認できます。

$ gcc -print-multi-lib
.;
32;@m32

次にlib32/以下の32ビット版ライブラリをインストールします。

$ sudo installpkg lib32/*.txz
lib32_FAudio-19.07-i686-M1 のインストール中
PACKAGE DESCRIPTION:
lib32_FAudio-19.07-i686-M1 のインストールスクリプトを実行中

lib32_SDL-1.2.15-i686-M1 のインストール中
PACKAGE DESCRIPTION:
....
processing [ lib32_perl ] ...
processing [ lib32_sdl2 ] ...
$

WINEは、安定版の5.0と開発版の5.5双方をパッケージ化しており、両者とも64ビット版と32ビット版が必要です。バージョンが進んでいる分、5.5の方がよさそうに見えるものの、手元で試した限りでは5.5だとエラーになるソフトがいくつかあったので、5.0の方が安心かも知れません。また、後述するwinetricksも忘れずインストールしておいてください。

$ cd Wine 
$ sudo installpkg wine-5.0-x86_64-B1.txz wine_32-5.0-i686-M1.txz \
      winetricks-20191224-x86_64-B1.txz
PACKAGE DESCRIPTION:
wine-5.0-x86_64-B1 のインストールスクリプトを実行中
...

以上で、WINE-5.0のインストールが完了しました。

WINEの設定

WINEの動作には多数の設定ファイルやディレクトリが必要になります。それらを用意するのがwinecfgというコマンドで、このコマンドはホームディレクトリに ".wine"というディレクトリを作り、そこに必要なディレクトリや設定ファイル等を配置します。

初めてwinecfgを実行すると、ネットワーク経由でwine-monowine-geckoというパッケージをダウンロードしてインストールします。"wine-mono"は.NET FrameworkのOSSによる実装、"wine-gecko"はMozillaプロジェクトが開発したGeckoレイアウトエンジンを用いたInternetExplorerエミュレータだそうです。

図1 winecfgの実行
図1 winecfgの実行

必要なパッケージのインストールを終えれば、"Wine 設定"の画面が現れます。この画面では、⁠デスクトップ統合]タブの中でデフォルトでチェックが入っている[MIMEタイプ⁠⁠→⁠ファイル関連付けの管理]チェックを外すようにしてください。

図2 ファイル関連付けのチェック
図2 ファイル関連付けのチェック

このチェックを入れたままにしておくと、ファイルの種類と起動するコマンドの関連付けが、WINEのコマンドを優先するように変更されてしまい、たとえばテキストファイルを開こうとするとWINE付属のnotepad.exeが起動されるようになります。

ちなみに、そのような状態になってしまった場合は、以下のコマンドを実行し、WINE優先の関連付けを解消してやれば復旧します。

rm -f ~/.local/share/mime/packages/x-wine*
rm -f ~/.local/share/applications/wine-extension*
rm -f ~/.local/share/icons/hicolor/*/*/application-x-wine-extension*
rm -f ~/.local/share/mime/application/x-wine-extension* 

「ファイル関連付けの管理」のチェックを外した上で変更を「適用」し、winecfgを終了しておきます。

次にwinetricksというコマンドを使って、WINEパッケージとは別途管理されているWINE用のライブラリやフォントをインストールします。

winetricksでは、さまざまなフォントやライブラリ、アプリケーションをインストールできるものの、まずはWindows環境で使う日本語フォントをフリーフォントで代用するための、"fakejapanese"パッケージをインストールしておきます。

$ winetricks fakejapanese
------------------------------------------------------
You are using a 64-bit WINEPREFIX. Note that many verbs only install 32-bit versions of
packages. If you encounter problems, please retest in a clean 32-bit WINEPREFIX before
reporting a bug.
------------------------------------------------------
Using winetricks 20191224 - sha256sum: afe039a7d72553cb761f0367f9f2085b92af8caf86e025c34
bbc1fdd89a1f9ee with wine-5.0 and WINEARCH=win64 Executing w_do_call fakejapanese
------------------------------------------------------
Executing load_fakejapanese
Executing w_do_call takao
...
Executing mkdir -p /home/kojima/.cache/winetricks/takao
Executing cd /home/kojima/.cache/winetricks/takao
Downloading https://launchpad.net/takao-fonts/trunk/003.02.01/+download/
   takao-fonts-ttf-003.02.01.zip to /home/kojima/.cache/winetricks/takao
...
Executing wine64 regedit C:\windows\Temp\_register-font-replacements.reg
Executing cp /home/kojima/.wine/dosdevices/c:/windows/temp/_register-font-replacements.reg
/tmp/winetricks.ihfNvLM6/_reg_60f9f7b1_3052.reg

実行例にあるように、"fakejapanese"を指定すると、Takaoフォントで日本語を表示するように設定されるようです。

最後に、前回取り上げたdxdiagを試してみましょう。まず、winetricksでdxiagをインストールします。

$ winetricks dxdiag
....
Executing load_dxdiag
Executing mkdir -p /home/kojima/.cache/winetricks/directx9
Executing cd /home/kojima/.cache/winetricks/directx9
Downloading https://download.microsoft.com/download/E/E/1/EE17FF74-6C45-4575-\
  9CF4-7FC2597ACD18/directx_feb2010_redist.exe to /home/kojima/.cache/winetricks/directx9
--2020-04-22 14:05:49--  https://download.microsoft.com/download/E/E/1/EE17FF74-6C45-4575-\
  9CF4-7FC2597ACD18/directx_feb2010_redist.exe
download.microsoft.com をDNSに問いあわせています... 23.46.221.5, 2600:140b:a000:38e::e59,
  2600:140b:a000:390::e59
download.microsoft.com|23.46.221.5|:443 に接続しています... 接続しました。
....
Executing wine regedit C:\windows\Temp\override-dll.reg
Executing wine64 regedit C:\windows\Temp\override-dll.reg
Executing wine regsvr32 dmusic.dll
regsvr32: DLL 'dmusic.dll'の登録に成功しました

WINE経由でdxdiagを実行します。

$ wine dxdiag
図3 dxdiagの画面
図3 dxdiagの画面

診断ツール画面で、⁠ディスプレイ⁠⁠→⁠Direct3Dのテスト]と進んで、DirectXキューブが回転する画面が表示されれば、WINEはちゃんと動作しています。

図4 回転するDirectXキューブ
図4 回転するDirectXキューブ

なお、キューブが回転する際には画面が640x480にリサイズされるようで、仮想環境等では全画面表示にならない場合もあるものの、そのあたりはビデオカードやドライバの仕様(機能)なので、気にする必要はなさそうです。

さて、だいぶページも長くなったので、WINEの遊び方は回を改めて紹介することにしましょう。


筆者が管理しているFTPサイトでは、現在、Plamo-7.2のプレリリース版を公開しており、このisoイメージのcontrib_localには今回紹介したWINE関連パッケージ一式を収めているので、興味ある人はPlamo-7.2と共にテストしてみてください。

おすすめ記事

記事・ニュース一覧