Ubuntu12.04 32bit環境でWINEをビルドする手順(WINE 1.7)

とりあえずUbuntu12.04の32bit環境にて、32bit版WINEのビルドに成功したので、手順ほかを途中経過として記事にまとめたものを公開しておきます。
64bit版の手順が構築できたら、そちらをあらためて公開する予定です。
(2014/01追記:64bit  Ubuntu環境で32bit Wineをビルドする手順の記事を書きました)

64bit環境にて32/64bit混合版WINEをビルドできるはずなのですが、そちらはインストールの段階でエラーを吐いて失敗しています。原因はたぶんライブラリ不足です。


以下、32bit版WINEのビルド手順。
64bit版の草稿を含む。

WINE付属のメモ帳を起動した状態


イントロダクション

Ubuntu12.04および13.10にて、GitリポジトリのWINE最新版をビルドする手順を確認しました。
不具合報告やその修正確認以外にも、単純に最新版を試したい気分の時に、必要になることもあるかと思われます。

今回はWINEをビルドするため仮想マシン上にクリーンな環境を用意しました。最低限、競合するWINEのパッケージは削除しておきましょう。


公式WIKIに書かれたビルド手順は、いくつも存在し、各ページごとに異なっています。
参考にしたものを、以下に一覧にしました。

ビルドガイド(Installing Wine from source)
見ればわかるとおり、WINEのビルドに特別な工程は特にありません。
とはいえ、このページは書いてあることが少なすぎるので、実作業の際にはあまり参考にはなりません。そこで、以下のページの記述を参考にします。

WineOn64bit(Building 32-bit Wine on a 64-bit (x86-64) system)
64bitホスト環境でのWINE32bitのビルド方法、特にlxcコンテナ内におけるwine32のビルド手順について解説しています。

BuildingBiarchWineOnUbuntu(Building Biarch (Shared WoW64) Wine On Ubuntu)
Ubutnu環境でlxcコンテナを使用して、WINE32およびWINE64のビルドと、組み合わせての導入手順についてまでを解説しています。
(2013/11時点で、lxc環境で必要な手順が説明から抜けています。WineOn64bitには書いてあるのですが。)

レグレッションテスト(Regression Testing)
さらに詳細な手順やビルドオプションが必要な場合はこのページが役に立ちます。

追記:
Win64 Support for Wine
こちらが正しい64bit版WINEのビルド手順のように見えます。
現在確認中。


WINE 32bitをビルド

ソースの取得

Gitはあらかじめインストールしておきます。
sudo apt-get install git -y
GitリポジトリからWINE最新版ソースを取得します。
git clone git://source.winehq.org/git/wine.git ~/wine-git

ビルドに必要な依存パッケージの導入

wine/ppaを導入することで、WINE最新版のビルドに必要な依存パッケージのリスト情報が追加されます。
sudo add-apt-repository ppa:ubuntu-wine/ppa

この時、Ubuntu13.10環境では追加の手順が必要となります。記事下方のTIPSを参照してください(他の環境でもbuild-depが失敗する場合はこれが原因かもしれません)。

変更後、パッケージリストを更新し、依存パッケージの追加を行います。
sudo apt-get update
sudo apt-get build-dep wine1.7 -y


2013年11/30時点で、"build-dep wine"すると、wine1.6が自動選択されてしまいます。最新版wine1.7を明示的に指定します。build-depのパッケージ名には、Ubuntu上のWINEの最新版に合わせてバージョンを付与します。
最新版で追加されてbuild-depに足りないものがあれば、configureの出力に指示どおり個別にインストールします。

作業用ディレクトリにてconfigureおよびmake

ビルド作業を行い、ビルド済みバイナリを置くためのディレクトリを作成します。
作業ディレクトリに移動して、WINEソースのconfigureを実行します。
mkdir ~/wine32-tools
cd ~/wine32-tools
~/wine-git/configure

作業ディレクトリにMakefileなどが展開されるので、makeします。
並列化数はビルド環境のCPU数と同程度にしておきます。
make -j4

「Wine build complete.」
が出れば成功です。
(明示的に"エラー"と表示せずにコンパイルが途中で止まることがある。)

Install

インストールも特別なことはなく、通常のmakeコマンドです。
sudo make install

実行
ビルドしたWINEは作業ディレクトリの直下に存在します。
./wine --version
にてバージョンが確認できればビルド成功です。

(ちなみに、本記事の手順を公開前に確認したところ、12/07時点でWINEのバージョンが上がっていたため、バージョンに" wine-1.7.8 "が表示されました。)


Windowsアプリケーションを実行したい場合、./wineの後に引数として与えればパッケージ版のWINEと同じように使用することができます。

付属のメモ帳を起動してみます。
./wine notepad

WINEの初期設定にて、MonoとGeckoのインストールダイアログが表示され、「インストール」を選択すると、自動でダウンロードされてインストールされます。
なお、私のビルドした wine-1.7.8 ではMonoのインストールに失敗したのですが、Notepadが起動し、特に問題はありませんでした。

WINE Geckoインストーラのダイアログ


TIPS

WINEビルドのためのbuild-depに失敗する (Ubuntu13.10)

Ubuntu13.10では追加手順が必要です (12.04では不要なようです)。
リポジトリを追加した際、デフォルトでは追加された deb-src が無効にされているため、build-depにて "wine1.7(最新版WINE)" を取得することができません。
コメントアウトを外して設定ファイルの deb-src を有効化する必要があります。
テキストエディタとしてviを使う場合は以下のようにします。
sudo vi /etc/apt/sources.list.d/ubuntu-wine-ppa-saucy.list

具体的な書き換え内容としては、上記テキストファイル内の
# deb-src http://ppa.launchpad.net/ubuntu-wine/ppa/ubuntu saucy main
行の先頭の#を外します。
" sudo apt-get update "から続きの手順を行えば、build-dep による依存パッケージの導入に成功するはずです。

ccacheの導入

コンパイル時に使用する情報をキャッシュすることで、再ビルドを高速化します。
不具合報告をするなど、2度以上コンパイルすることがありそうならば導入しておくとよいです。
使用するなら、ccacheを追加で導入。
sudo apt-get install ccache -y

使い方は、configureの前にオプションとして追記する。
上記の手順のうち、configure部分を下記のものに置き換える。
CC="ccache gcc" ~/wine-git/configure

add-apt-repositoryが見つからない場合

LXCゲスト環境のUbuntu 12.04にて発生した問題です。
software-properties-common を入れても「 add-apt-repositoryが無い 」エラーが出てWINEのリポジトリを追加できない場合は、
sudo apt-get install python-software-properties
にて、 add-apt-repository を導入することができます。


WINE設定の初期化の落とし穴?(あるいはインストーラが途中で落ちる不具合の解決)

不具合報告のためにWINE環境のリセットを行ったところ、Fixされているはずの現象が出現しました。
試した結果、~/.wine ディレクトリに隠しファイルがあり、これを消すことで解決しました。

不具合の詳細ですが、インストーラが起動して「インストーラが起動しています」のあと、インストーラが終了します。
コンソール上で実行すると、以下のエラーが表示されていました。
fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.Windows.Common-Controls" (6.0.0.0)

これはMSI(MSインストーラ)およびInstallSieldで起こる問題だと書いてあるページがヒットします。
NetFramework3.5のレポートに従って「winetricks, msxml3, dotnet35­」を入れろ
wine32bitをセットアップしろ
などの対応策が書いてありますが、実はこの問題、既に解決(fix)されているようです。
というか、1.7.7で実際動いたことからして、この問題は解決しています。

そして、対処法に書いてあるとおり .netを入れようとしても、winetickが動きません。

$ winetricks
------------------------------------------------------
wine cmd.exe /c echo '%ProgramFiles%' returned unexpanded string '%ProgramFiles%' ... can be caused a corrupt wineprefix, an old wine, or by not owning /home/USERNAME/.wine
------------------------------------------------------



最終的に、以下の方法で解決。
隠しファイル "~/.wine/.update-timestamp" を消します。
rm -rf ~/.wine/*
rm -rf ~/.wine/.update-timestamp

上記のエラーで動かなかったインストーラも以下の方法で完走を確認しました。

正直、WINEが悪いとは思いにくく、私の使っているディレクトリ構成が少し普通でないためだと思うのですが、ワークアラウンドとして書き残しておこうと思います。

このブログの人気の投稿

GIMP2.8でイラストにペン入れを行う

squid3プロキシサーバの設定(Ubuntu13.10)

Ubuntu13.04で使える動画編集ソフト一覧