システムに複数のバージョンのWineを共存させる
Wineは、バージョンが上がることで、動作しなかったアプリケーションが動くようになるときもあれば、逆に動かなくなってしまうものが出たりすることもある。そこで、複数バージョンのWineを共存させる方法を考えてみた。
Wineのパッケージに属するファイルだけをまとめる
3通りの方法がある。- 使用しているディストリのパッケージを展開する
- Slackwareのバイナリパッケージ*1などの公開バイナリを用いる(使用ディストリなどによっては動作しない場合もありうるので注意)
- ソースからインストールする場合、pacKAGE oRGANIZER後継のporg*2のバイナリパッケージ作成機能を使用する
ディストリのパッケージは、種類ごとに操作が異なる。
- Deb系とRPM系のディストリでは「RPM/Debパッケージの中身にアクセスする」の要領で中身を取り出す
- Gentoo Linuxでは、emergeするときに-bオプションを付けるか、インストール後に「sudo quickpkg wine」を実行させると、バッケージディレクトリ(デフォルトでは/usr/portage/packages/以下)に.tbz2ファイルが作成される。
(2014/9/23)Deb系とRPM系についての記述を修正・Ubuntuでは以下のパッケージ群の.debファイルをpackages.ubuntu.com(ディストリのパッケージ/安定版)やPPAのパッケージ一覧ページ(最新版・開発版)から使用ディストリバージョンに合ったものを
x86_64版ディストリの場合のパッケージ名:
x86_32版ディストリの場合のパッケージ名:
のようにして選択*3してそれぞれダウンロードし、これらを全て同一のディレクトリ以下に展開する。
porg/pacoを用いつつソースからインストールする場合は、installターゲットの実行時に
(porgの場合) $ sudo porg -lD make install (pacoの場合) $ sudo paco -lD make install
として*4、porg/pacoのデータベースに登録しておいて、
(porgの場合) $ sudo grop & (pacoの場合) $ sudo gpaco &
でGUIの一覧ウィンドウを表示して保存したいパッケージ名を選択して
- porgの場合:「Package」メニューか一覧内のコンテキストメニューから「Create porgball」を選択後、ダイアログで保存先と圧縮設定(方式とレベル)を指定後「OK」ボタンを押す
- pacoの場合:バイナリパッケージの作成のタブをクリックし、保存先と圧縮形式(bzip2のほうが縮む)を指定し、作成ボタンを押す
(2014/9/23)公開バイナリについてとporgについての記述を追加
ファイルの配置
ここでは、/opt/wine-[バージョン]/の下にusr/以下のディレクトリを移動させることにする。現在の作業ディレクトリ以下にバイナリパッケージの内容を展開したら
$ sudo cp -a --no-preserve=ownership usr /opt/wine-[バージョン]
などのようにすることで、
[opt]-+-[wine-1.6.2]-+-[bin] | +-[lib] | +-[share] | +-[wine-1.7.0]-+-[bin] | +-[lib] | +-[share] | +-[wine-1.7.1]-+-[bin] | +-[lib] | +-[share] ...
のようなディレクトリツリーで共存ができる。usrなどのディレクトリはコピー後は不要となる。
(2014/9/23)記述を大幅に変更
動作を実験
念のため、システムのWineを消した上で、作業を行った。これは、本当に指定したバージョンのWineのファイルが使われているのかを確かめるため。ところが/opt/Wine-[バージョン]/bin/wine winver
これだけで何の問題もなく動作してしまった。Wineのライブラリの探索パスが
$ objdump -p /opt/wine-[バージョン]/bin/wine | grep PATH RPATH $ORIGIN/../lib32 RUNPATH $ORIGIN/../lib32
のようになっているため、/opt/以下に移動しても、${LD_LIBRARY_PATH}を設定したりする必要がないことが分かった。
$ ldd /opt/wine-[バージョン]/bin/wine linux-gate.so.1 => (0xffffe000) libwine.so.1 => /opt/wine-[バージョン]/bin/../lib32/libwine.so.1 (0xf7e2a000) libpthread.so.0 => /lib32/libpthread.so.0 (0xf7df0000) libc.so.6 => /lib32/libc.so.6 (0xf7cca000) libdl.so.2 => /lib32/libdl.so.2 (0xf7cc6000) /lib/ld-linux.so.2 (0xf7f3f000)
注意点
同時に別々のバージョンのWineを動作させることは(2007/11/7)同一のプログラムに対して、同時に複数のバージョンのWineから実行できないというだけで、別々のアプリケーションを別々のバージョンのWineで動作させることはできる(バージョンごとのwineserverが起動される)。
(2007/8/12)winecfgは
$ /opt/wine-[バージョン]/bin/wine winecfg
のように実行しないと、システムのWineが使用される。
(2014/9/23)上はregeditなど、他の色々なコマンドについても当てはまる。
(UbuntuのPPAのWine 1.7.26でregeditを実行する例) $ LD_LIBRARY_PATH=/opt/wine-1.7.26/lib/i386-linux-gnu/ /opt/wine-1.7.26/bin/wine regedit