以前32bit Ubuntu環境でのWineビルド手順について書いた際に残した課題でした。
Ubuntu 12.04 上の Wine1.7.11 および、Ubuntu 14.04 上の Wine1.7.18 にて、ビルド成功を確認しています。
ビルドした32bit Wineのwinecfg |
Ubuntu 64bit環境でのWineビルドは後回しにしていたのですが、ktmizugaki様の日記でchrootの手法によるWineのビルドにあっさり成功しているのを見た後で、lxcコンテナ版をやってみたところあっさり上手く行きました。
パッケージ版のWineは競合するのではないかと思っていたのですが、依存ライブラリを入れておくためにあえてインストールしておくというのも、たしかに理にかなっていると思いました。
閑話休題。
Wineの公式Wikiには64bit Wineをビルドする手順が3種類あり、(なぜか)3つもページが存在します。(そして1ページにつき1手順、という書き方ではない。)
しかし、2014/01時点で、Wikiに書かれているLXCを使った方法は、私の環境では上手く行きません。(原因は大したことではないのですが。2014/03/22追記。Wikiは修正されました。)
私が32bit Wineをビルドした際、上手く行った手順は以下の通りです。
LXCコンテナ(仮想マシン)の作成とログイン
64bit UbuntuでWineをビルドする方法は3種類あるようですが、今回は、LXCで32bit仮想マシン環境を作成し、そこで32bitビルドを行う方法を使います。まず、LXCにて32bit Ubuntu仮想マシンを、ホームディレクトリを共有した状態で作成します。
LXC導入(18.04ではlxc-templateを別途インストール指定が必要。)
sudo apt install lxc lxc-template -y
作成と起動のコマンドは以下。
sudo lxc-create -t ubuntu -n my32bitbox -- --bindhome $LOGNAME -a i386
sudo lxc-start -n my32bitbox
なお、LXCコンテナの初回作成時には、パッケージのダウンロードなどで時間がかかります。
また、コンテナ起動時に要求されるユーザ名とパスワードですが、デフォルトではユーザ名・パスワード共に 'Ubuntu' になっているはずですが、私の環境ではこれがホスト側のユーザ名とパスワードになっていました。
LXCコンテナのターミナルへ入る
sudo lxc-attach -n my32bitbox
なお、作業後にLXCコンテナを閉じる際には、仮想環境側でシャットダウンコマンドを実行します。
sudo shutdown -h now
LXC内でのビルド環境の構築
LXCコンテナに内のUbuntuに必要なアプリケーションを導入して、ビルド環境を構築します。add-apt-repositoryの導入
LXCゲスト環境そのままでは「 add-apt-repositoryが無い 」旨のエラーが出てリポジトリを追加できないので、sudo apt-get install python-software-properties
にて、 add-apt-repository コマンドを導入。
(software-properties-common パッケージではない。)
2014/05/13追記: Ubuntu 14.04では software-properties-common パッケージが必要になって(戻って)いました。
2018/05/13追記: Ubuntu18.04では不要でした。
ccacheの導入
コンパイル時に使用する情報をキャッシュすることで、再ビルドを高速化します。不具合報告をするなど、2度以上コンパイルすることがありそうならば導入しておくとよいです。
使用するなら、ccacheを追加で導入。
sudo apt-get install ccache -y
なお、ccacheの動作を確認するならば、ビルド中に
du -sm ~/.ccache/
すれば、サイズが増えていくことを確認することができます。
ビルドに必要な依存パッケージの導入
wine/ppaを導入することで、WINE最新版のビルドに必要な依存パッケージのリスト情報が追加されます。sudo add-apt-repository ppa:ubuntu-wine/ppa
Ubuntu 14.04(正確には12.04より後)では、ソースパッケージがデフォルトで無効になっているため、aptの設定ファイルを書き換えて有効化する必要があります。
テキストエディタとしてviを使う場合は以下のようにします。
(斜文字の部分はUbuntuバージョンにより異なるので読み替えてください。)
sudo vi /etc/apt/sources.list.d/ubuntu-wine-ppa-saucy.list
具体的な書き換え内容としては、上記テキストファイル内の
deb http://ppa.launchpad.net/ubuntu-wine/ppa/ubuntu trusty main
# deb-src http://ppa.launchpad.net/ubuntu-wine/ppa/ubuntu trusty main
2行目の先頭から#を外します。
この後で、sudo apt-get update からの作業を行えば、build-dep による依存パッケージの導入に成功するはずです。
(詳しく知りたい場合、32bit環境でのWineビルド記事を参照してください。)
変更後、パッケージリストを更新し、依存パッケージの追加を行います。
sudo apt-get update
sudo apt-get build-dep wine1.7 -y
Gitはあらかじめインストールしておきます。
sudo apt-get install git -y
GitリポジトリからWINE最新版ソースを取得します。
git clone git://source.winehq.org/git/wine.git ~/wine-git
ビルド
WINE 32bit版をビルドするためのディレクトリを作成します。mkdir ~/wine32-tools
作業ディレクトリに移動して、WINEソースのconfigureを実行します。
cd ~/wine32-tools
~/wine-git/configure
ccacheを使用する場合は、この手順でconfigureの前にオプションとして追記します。
CC="ccache gcc" ~/wine-git/configure
Makefileなどが展開されるので、makeします。
並列化数はビルド環境のCPU数と同程度にしておきます。
make -j4
コンパイルの最後に
"Wine build complete."
が出れば成功です。
32bit Wineの起動
Wineは実行時に「ボトル」(.wineディレクトリのこと。Windowsのc:\に相当する)を必要とし、起動時にこのディレクトリが存在しなければ自動生成します。64bit環境で既にWineを利用している場合、ボトルは64bit版がすでに生成されていると思われます。
このままでは32bit Wineを使用することができません。
既存のボトルを削除するのが手軽な方法ではありますが、既存のアプリケーションや設定を削除したくない場合もあると思いますので、今回はWINEPREFIXを設定し、テスト用の32bit版Wineディレクトリを作ることにします。
ホストのターミナルで、コンパイル済みWineの置いてあるディレクトリに移動します。
cd ~/wine32-tools/
環境変数WINEPREFIXで、
パッケージのWineバイナリではなく、ビルドしたWineバイナリ(./wine)をパスで指定します。
WINEPREFIX=~/wine32 ./wine winecfg
初回は起動に少し時間がかかり、ボトルを生成する旨のメッセージが表示されます。
問題なくwinecfgが起動すれば、32bit Wineのビルドに成功しています。