「Wine パッケージガイドライン」の版間の差分
(→サンプル: リンクを修正) |
(他言語へのリンクを修正) |
||
2行目: | 2行目: | ||
[[Category:エミュレーション]] |
[[Category:エミュレーション]] |
||
[[en:Wine package guidelines]] |
[[en:Wine package guidelines]] |
||
− | [[ |
+ | [[pt:Wine package guidelines]] |
− | [[ru:Wine package guidelines]] |
||
{{Package Guidelines}} |
{{Package Guidelines}} |
||
2023年6月28日 (水) 23:00時点における版
32ビット – CLR – クロス – Eclipse – Electron – Free Pascal – GNOME – Go – Haskell – Java – KDE – カーネル – Lisp – MinGW – Node.js – ノンフリー – OCaml – Perl – PHP – Python – R – Ruby – Rust – VCS – ウェブ – Wine
Windows プログラムにも Linux で役に立つものがたくさんあります。Windows プログラムのパッケージも作ることが可能です。オペレーティングシステムの違いがあるためにやや面倒なところがあります。このガイドラインでは Win32 バイナリについて記述します。ソースが利用できるプロジェクトが Linux に移植されているためです。
目次
確認事項
- ライセンス: ライセンスがプログラムの再配布を許可しているか。
- インストーラー: ユーザーが特に操作しなくてもプログラムをインストールできるか。インストーラー不要のバージョンは存在するか。
- ポータビリティ: プログラムはポータブルか。ファイルシステムを汚さないか。
プログラムがポータブルかどうかというのはレジストリやプログラムディレクトリの外に書き込みを行わないことを意味します。ファイルシステムを汚さないプログラムとはユーザーフォルダに設定を書き込むプログラムを意味します。両方の条件を満たすプログラム (例: 設定をどこにも書き込まない) もあれば、どちらにも当てはまらないプログラも存在します (例: あらゆるところに書き込みを行う)。
ライセンス
通常、ライセンスはインストールディレクトリにテキストファイルの形で存在します。見つけられない場合、インストール時の表示を確認してください。大抵のライセンスはファイルの削除や再パッケージを許可していません。前者の場合、makepkg の処理によってファイルが消えないように注意する必要があります。post_install
で無駄なファイルを削除してしまう可能性があるためです (例: アンインストーラー)。後者の場合、インストールは全て post_install
で行う必要があります。build
ではインストールファイルのコピーだけを行います。
インストーラ
Windows インストーラーよりも .zip
などの圧縮ファイルのほうがパッケージにするのが簡単です。プログラムがインストーラーによってしか配布されていない場合、インターネットを検索してソフトウェアをユーザーの操作なしでインストールする方法がないか探してください。検索する場所としては MSFN が良いでしょう。方法が見つからない場合、解凍ユーティリティを使ってインストーラーを解凍できないか試してみてください。
ポータビリティ
ポータブルなプログラムであれば Wine でファイルシステムをエミュレートする必要はありません。パッケージングするプログラムにポータブル版が存在しないか Portable Freeware で確認してみてください。
ガイドライン
Windows のプログラムをパッケージ化するということは、プログラムのファイルを JVM と Java のバイトコードと同じように、Wine が解釈するただのデータとして使うことです。
したがって、プログラムは /usr/share/"$pkgname"
にインストールし、プログラムは必要なものを全て "$HOME"/."$pkgname"
に書き込むようにします。/usr/bin/"$pkgname"
に保存したスクリプトを使って、フォルダを作成したり必要な準備を行って、それからプログラムを起動します。
次のセクションでは必要なステップについて説明します。
この方法ではあれば個々のユーザーがそれぞれ設定を保持することができ、他のユーザーに干渉することがありません。
インストール
プログラムにインストーラが存在しない場合、インストールはファイルの解凍にすぎません。"$pkgdir"/usr/share/$pkgname
に展開して、パーミッションを適切に設定します。以下のコマンドでパーミッションを確認できます:
$ find "$pkgdir"/usr/share -type f -exec chmod 644 "{}" \; $ find "$pkgdir"/usr/share -type d -exec chmod 755 "{}" \;
プログラムを簡単にインストールできない場合、Wine 環境を作成する必要があります:
$ install -m755 -d "$srcdir"/tmp "$srcdir"/tmp/env "$srcdir"/tmp/local $ export WINEPREFIX="$srcdir"/tmp/env $ export XDG_DATA_HOME="$srcdir"/tmp/local $ wine "$srcdir"/installer.exe /silentoptions
移植性についてはまだ説明していませんが、プログラムが変更したレジストリキーが必要ない場合は、次の場所からディレクトリをコピーするだけで済みます。
"$srcdir"/tmp/env/drive_c/Program\ Files/programname
それ以外の場合は、すべてのレジストリファイルもコピーし、最終的にはプログラムがインストールしたファイルもコピーする必要があります。"$srcdir"/tmp/local
にはメニューアイコンとデスクトップファイルが含まれているため、これらをパッケージにコピーするとよいでしょう。プログラムをサイレントインストールする方法がない場合は、.tar.gz
ファイルを作成して、どこかにアップロードして下さい。自動化が不可能な場合は、ユーザーにインストーラーに従うよう強制し、インストールが台無しにならないことを願い、存在しない可能性のあるフォルダーをやみくもにコピーする前に (例えば、ユーザーが'Cancel'を押したなど)、いくつかのチェックを書いてください。
/usr/bin スクリプト
スクリプトでは設定フォルダを用意してプログラムを起動します。プログラムがポータブルな場合、以下のようになります:
#!/bin/bash unset WINEPREFIX if [ ! -d "$HOME"/.programname ] ; then mkdir -p "$HOME"/.programname #prepare the environment here fi WINEDEBUG=-all wine "$HOME"/.programname/programname "$@"
If it is clean, it will look like this:
#!/bin/bash export WINEPREFIX="$HOME"/.programname/wine if [ ! -d "$HOME"/.programname ] ; then mkdir -p "$HOME"/.programname/wine wineboot -u #copy the registry file if needed fi WINEDEBUG=-all wine /usr/share/programname "$@"
ご覧のとおり、2 番目のケースでは環境の準備がありません。実際、クリーンなアプリケーションはフォルダーに書き込む必要がないため、/usr/share
から直接起動され、その設定はエミュレートされたファイルシステムのどこかに書き込まれます。
アプリケーションがクリーンでもポータブルでもない場合は、2 つのアイデアを組み合わせる必要があります。
アプリケーションが設定をまったく書き込まない場合は、if
をスキップして、/usr/share
から起動します。
環境を準備するタスクはアプリケーションによって大きく異なる場合がありますが、次の経験則に従ってください。: プログラムの場合:
- ファイルを読み、シンボリックリンクする必要がある。
- ファイルに書き込む必要がある場合は、それをコピーする。
- ファイルを使用しない場合は、無視する。
もちろん、最小値は WINEDEBUG=-all wine /usr/share/programname "$@"
を開始するだけです。
通常、環境は "$HOME"/.programname
ディレクトリと /usr/share/programname
ファイルをシンボリックリンクすることで作られます。しかし、Windows のプログラムによってはパスが非常に気まぐれなので、"$HOME"/.プログラムの名前/wine/drive_c/Program Files/プログラムの名前
ディレクトリに直接シンボリックリンクする必要があるかもしれません。
もちろん、これらは Linux 環境に Win32 アプリケーションを統合するための単なるアイデアです。知性と勇気を忘れないでください。
たとえば、μTorrent はデフォルトではクリーンなアプリケーションですが、簡単な手順でポータブルアプリケーションとして使用できます。これは単一のファイルであり、wine 環境を作成するのにかなり小さいため (約 5MB)、おそらくやりすぎです。実行可能ファイルをシンボリックリンクし、空の settings.dat を作成して、それを $HOME/.utorrent
ディレクトリに移植可能に使用することをお勧めします。さらに、ユーザーは .utorrent
フォルダにアクセスするだけで、ダウンロードした .torrent
ファイルのコピーを確認できるという利点もあります。
UnionFsFuse
unionfs-fuse パッケージで UnionFsFuse プログラムを使うことができます。UnionFsFuse はベースディレクトリを /usr/share
に保持して、書き込みに必要なアプリケーションのファイルのコピーを $HOME/.programname
に自動的に配置します。
UnionFsFuse を使用することは追加の依存関係を意味し、すべてのユーザーがロードするとは限らないヒューズモジュールが必要になります。 ただし、アプリケーションに多くのシンボリックリンクが必要な場合、またはアプリケーションに何を記述する必要があるか正確に不明な場合には、これを行う価値があるかもしれません。UnionF を正しくマウントおよびアンマウントするようにしてください。
サンプル
eMule 用のパッケージを作成します。Portable Freeware によると、eMule はレジストリにいくつかの (役に立たない) キーを書き込むため、完全に移植可能ではありません。
一方で、設定ファイルを作成し、ダウンロードしたファイルをインストールフォルダーに保存するため、クリーンでもありません。
幸いなことに、インストーラーなしのバージョンが利用可能 があります。
そこで、PKGBUILD を作成します。唯一の依存関係は wine です。md5sums
を追加する必要があります。
# Maintainer: You <youremail> pkgname=emule pkgver=0.49b pkgrel=1 pkgdesc="One of the biggest and most reliable peer-to-peer file sharing clients around the world." arch=(i686 x86_64) url="http://www.emule-project.net" license=('GPL') depends=() depends=(wine) makedepends=(unzip) source=(emule http://prdownloads.sourceforge.net/emule/eMule$pkgver.zip) noextract=() options=(!strip) build() { rm -f src/eMule"$pkgver"/license* #It is GPL install -d -m755 pkg/usr/share/emule cp -ra src/eMule"$pkgver"/* pkg/usr/share/emule find pkg/usr/share/emule -type d -exec chmod 755 "{}" \; find pkg/usr/share/emule -type f -exec chmod 644 "{}" \; install -d -m755 pkg/usr/bin install -m755 emule pkg/usr/bin }
ここで、emule ファイルを作成します。これは、build
に従って、/usr/bin
にコピーされてに実行可能になります。
#!/bin/bash export WINEARCH=win32 WINEPREFIX="$HOME/.emule/wine" if [ ! -d "$HOME"/.emule ] ; then mkdir -p "$HOME"/.emule/wine || exit 1 #Each user will have its config, we copy the default file since emule #needs to write here. cp -r /usr/share/emule/config "$HOME"/.emule || exit 1 #We symlink the files emule needs to read to work ln -s /usr/share/emule/emule.exe "$HOME"/.emule/emule || exit 1 ln -s -T /usr/share/emule/lang "$HOME"/.emule/lang || exit 1 ln -s -T /usr/share/emule/webserver "$HOME"/.emule/webserver || exit 1 fi wine "$HOME"/.emule/emule "$@"
より正確にしたい場合は、wine がメニューを台無しにするため、検索履歴を無効にする必要があることをユーザーに伝えるメッセージを .install
ファイルに追加できます。最適な設定を含むデフォルトの設定ファイルを提供することもできます。以上です... $ makepkg
を実行し、パッケージフォルダーを確認してインストールします。
Gecko と Mono
そのソフトウェアが .NET ランタイム (パッケージ wine-gecko および wine-mono) のブラウザを必要とすることが明確にわかっていない限り、Gecko/Mono のデフォルトの wine インストール プロンプトは望ましくありません。
HTML レンダリング、バイトコード サポート、およびダイアログを無効にするには、スクリプトで dloverride を使用する必要があります。
Gecko の場合:
export WINEDLLOVERRIDES="mshtml="
Mono の場合:
export WINEDLLOVERRIDES="mscoree="
両方の場合:
export WINEDLLOVERRIDES="mscoree,mshtml="
winecfg
で無効化することもできます。mscoree/mshtml を Disable に設定してください。