世の中が新型コロナウイルスのニュース一色になっているうちに、気付くと2月も末、今年の1/6が終る時期になってしまいました。
例年だと、この時期は年度末作業が重なるため休載しがちなものの、今年はWINEのトラブルネタを書きためていたこともあって(苦笑)、何とか月例の更新はできそうです。
さて、今回、ようやくWINEのビルドに取りかかります。WINEは更新頻度が高く、すでに5.xのシリーズが公開されているものの、ざっと5.2をビルドしてみた感じでは、ビルドの手順や必要なパッケージは本稿で扱っている4.21と変らないようです。
8月YX日:WINE用32ビット版パッケージの作成開始
CLFSレベルのパッケージだけではWINEの動作に全く足りないことに気づきしばし呆然としたものの、落ちついて考えると、WINEに必要なのは32ビット版のライブラリであって、システムユーティリティや設定ツール、メールやログのサーバ等々、システム運用関連のツールは不要だろうし、Emacs等のエディタやdocbook回りの機能、XfceやMateといったデスクトップ環境なども必要ないはずだ。
そう考えると多少気が楽になり、具体的にWINEがどれだけのライブラリを必要とするかは不明なものの、とりあえずX回りのライブラリから32ビット版を作成していくことにした。
X回りのライブラリは依存関係があるため、BLFSの手順を参照しながら、32ビット版パッケージをビルド、インストールしていく。
当初は64ビット版用のPlamoBuildスクリプトをコピーして、32ビット版に必要な設定を手動で追加していたものの、途中からはPlamoBuildスクリプトメーカー(make_PlamoBuild.py)を32ビット版にも対応できるように改造し、それを使って32ビット版用のビルドスクリプトを新造するようにしたので、32ビット版パッケージの作成速度はずいぶん改善した。
BLFSの手順に従ってビルドを進めてゆくと、OpenGL用の3DグラフィックライブラリであるMesaやXorgのサーバ、各種ドライバ類をビルドすることになっている。しかしながら、WINEが要求するのはライブラリの機能であって、Xorgのサーバやドライバは不要だろう、と考えてスキップすることにした。加えて、32ビット版のXアプリやフォントファイル等も不要なので、とりあえずlibxcbの32ビット版を作ったあたりで一段落とし、WINEのビルドを試してみることにした。
WINEには必要なライブラリが揃っているかをチェックするconfigureスクリプトが用意されている。このスクリプトがどこまで進むかを試してみたところ、「FreeTypeの32ビット開発環境が無い」というところでエラー終了した。
やはりフォント回りのライブラリも32ビット版が必要なようだ。もっとも、新しくインストールしたX回りのチェックは通っているので、このまま32ビット版のパッケージを揃えていけば何とかなりそうな希望は見えてきた。
FreeTypeの次は何が必要になるのだろう、とメッセージにあるように--without-freetypeオプションを指定してconfigureを再実行してみると、意外にも最後まで処理が進み、不足している機能やライブラリが多数表示される結果となった。
見つからないとエラー終了するFreeTypeとは異なり、これらのライブラリはWINEにとって必須ではないのだろう。指摘されたライブラリの多くは64ビット版を作ったことがあるものの、MinGWやlibvulkan等、見覚えのないソフトウェアも散在する。もっとも、それらがどういう機能に関わるのかも説明されているので、まずは見覚えがあるソフトウェアの32ビット版から作っていくことにしよう。
8月YY日:いよいよWINEのビルドにかかる
TrueTypeフォントを扱うFreeTypeライブラリを入れるためにはテキストの表示方向を制御するHarfbuzzが必要となり、Harfbuzzには画面描画回りのGlibやCairoが必要で、それらにはさらにGtkが必要になり……と、必要な32ビット版ライブラリは芋ヅル式に増えていくものの、ここまで来て止めるわけにも行かないので、「どこまで続く泥濘(ぬかるみ)ぞ……」とボヤきながらもパッケージ作りを続ける。
パッケージ作りの合間にWINE HQのドキュメント類を読んでゆくと、Windowsが2D/3Dグラフィックの処理に使っているDirectXの機能を、WINEではOpenGLを使って実現しているそうで、先に不要だろうと考えたmesa回りも32ビット版ライブラリが必要になるようだ。
mesaをビルドするためにはLLVMという大物が必要になり、GCCでインストール先ディレクトリの設定に結構苦労した記憶もあって、「LLVMって32ビット版を簡単に作れるだろうか……」と心配したものの、32ビット版に共通の
という設定に加えて、cmakeに
という指定を追加する程度で32ビット版のライブラリが/usr/lib32/にインストールできた。このあたり、あらかじめMultilibどころか、Multiarchにも対応しているLLVMの面目躍如というところだろうか。
どれだけのパッケージを用意すればいいのかは五里霧中なものの、ある程度進んだところでWINEのconfigureスクリプトを動かすと、不備を指摘される項目は着実に減っているので、それを心頼りに作業を進める。
作業が止まったのが64ビット版を作ったことがないVulkanと呼ばれるソフトウェアだ。「これは何者?」と調べてみると、最近のGPUに適した3Dグラフィック用のAPIで、OpenGLの後継者のような位置付けらしい。Vulkanの公式サイトを眺めてみると、ここで公開されているのはAPIの仕様に関するドキュメント程度で、実際に必要なソフトウェアはGitHubで公開されているようだ。このあたりは64ビット版も必要だろうから作っておくことにする。
2週間ほどかけて150ほどの32ビット版パッケージを追加したところ、configureの指摘はこの程度にまで減ってきた。
これらの指摘を眺めると、ISDNは論外だし、プリンタやスキャナ、デジカメもWINE上で使う予定は無いので、多分これぐらいで機能は十分だろうと考え、いよいよWINEのビルドに挑むことにした。
WINEのビルド方法はWINE HQで解説されていて、今回はそのうちのShared Wow64の方法で、32/64ビットのMultilib版を作る。解説によると、Windowsではアプリは未だに32ビット版が主流なため、64ビット版のOS上で32ビット版アプリを動かすための互換レイヤーが用意されており、Shared Wow64はそれと同じように64ビット版のWINE上に32ビット版のWINEを載せるような形を取るらしい。
指示に従って、まずは64ビット版を"--enable-win64"オプションを指定して設定、ビルドし、次に32ビット版で"--with-wine64=../build_64"のように64ビット版のバイナリがあるディレクトリを指定して設定、ビルドする。
configureは先に示したようにいくつかの機能不足を指摘するものの、GCCがエラー終了することはなく、何とか64/32ビット双方で無事にビルドは終了した。
作成したWINEパッケージをインストールして試してみると、WINEの設定ツールであるwinecfgはちゃんと起動できた。
「やれやれ、やっと夏休みの宿題が終った」とホッとしたのも束の間、更に深刻なトラブルが待ち構えていたのであった(続)。