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

第19回 Days of WINE and Struggles[6]

この記事を読むのに必要な時間:およそ 5.5 分

前回何とか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のインストールが完了しました。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html