「Wine パッケージガイドライン」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(Pkg/AUR テンプレートの更新)
(→‎ライセンス: 翻訳を修正)
 
(2人の利用者による、間の10版が非表示)
1行目: 1行目:
 
[[Category:パッケージ開発]]
 
[[Category:パッケージ開発]]
[[Category:Wine]]
+
[[Category:エミュレーション]]
 
[[en:Wine package guidelines]]
 
[[en:Wine package guidelines]]
[[it:Wine package guidelines]]
+
[[pt:Wine package guidelines]]
[[ru:Wine package guidelines]]
 
 
{{Package Guidelines}}
 
{{Package Guidelines}}
   
17行目: 16行目:
 
=== ライセンス ===
 
=== ライセンス ===
   
通常、ライセンスはインストールディレクトリにテキストファイルの形で存在します。見つけられない場合、インストール時の表示を確認してください。大抵のライセンスはファイルの削除や再パッケージを許可していません。前者の場合、[[makepkg]] の処理によってファイルが消えないように注意する必要があります。{{ic|post_install}} で無駄なファイルを削除してしまう可能性があるためです (例: アンインストーラー)。後者の場合、インストールは全て {{ic|post_install}} で行う必要があります。{{ic|build}} ではインストールファイルのコピーだけをます。
+
通常、ライセンスはインストールディレクトリにテキストファイルの形で存在します。見つけられない場合、インストール時の表示を確認してください。大抵のライセンスはファイルの削除や再パッケージを許可していません。前者の場合、[[makepkg]] の処理によってファイルが消えないように注意する必要があります。{{ic|post_install}} で無駄なファイルを削除してしまう可能性があるためです (例: アンインストーラー)。後者の場合、インストールは全て {{ic|post_install}} で行う必要があります。{{ic|build}} ではインストールファイルのコピーのみがわれます。
   
 
=== インストーラ ===
 
=== インストーラ ===
49行目: 48行目:
 
$ wine "$srcdir"/installer.exe /silentoptions
 
$ wine "$srcdir"/installer.exe /silentoptions
   
  +
移植性についてはまだ説明していませんが、プログラムが変更したレジストリキーが必要ない場合は、次の場所からディレクトリをコピーするだけで済みます。
We have not discussed portability yet, but if your program does not need the registry keys it modified, you can just copy the directory from the:
 
 
"$srcdir"/tmp/env/drive_c/Program\ Files/programname
 
"$srcdir"/tmp/env/drive_c/Program\ Files/programname
   
  +
それ以外の場合は、すべてのレジストリファイルもコピーし、最終的にはプログラムがインストールしたファイルもコピーする必要があります。{{ic|"$srcdir"/tmp/local}} にはメニューアイコンとデスクトップファイルが含まれているため、これらをパッケージにコピーするとよいでしょう。プログラムをサイレントインストールする方法がない場合は、{{ic|.tar.gz}} ファイルを作成して、どこかにアップロードして下さい。自動化が不可能な場合は、ユーザーにインストーラーに従うよう強制し、インストールが台無しにならないことを願い、存在しない可能性のあるフォルダーをやみくもにコピーする前に (例えば、ユーザーが'Cancel'を押したなど)、いくつかのチェックを書いてください。
Otherwise you need to copy all the registry files too and eventually the files the program installed around. The {{ic|"$srcdir"/tmp/local}} will contains menu icons and desktop files, you may want to copy them in the package. If there does not exist a way to install the program silently... Maybe you can make a {{ic|.tar.gz}} file and upload it somewhere? If nothing automated is possible, force the user to follow the installer and hope he does not mess up the installation, write some checks before blindly copying a folder that may not exist (e.g., the user pressed 'Cancel'.)
 
   
 
=== /usr/bin スクリプト ===
 
=== /usr/bin スクリプト ===
66行目: 65行目:
 
WINEDEBUG=-all wine "$HOME"/.programname/programname "$@"
 
WINEDEBUG=-all wine "$HOME"/.programname/programname "$@"
   
  +
クリーンな場合は、次のようになります。
If it is clean, it will look like this:
 
 
#!/bin/bash
 
#!/bin/bash
 
export WINEPREFIX="$HOME"/.programname/wine
 
export WINEPREFIX="$HOME"/.programname/wine
76行目: 75行目:
 
WINEDEBUG=-all wine /usr/share/programname "$@"
 
WINEDEBUG=-all wine /usr/share/programname "$@"
   
  +
ご覧のとおり、2 番目のケースでは環境の準備がありません。実際、クリーンなアプリケーションはフォルダーに書き込む必要がないため、{{ic|/usr/share}} から直接起動され、その設定はエミュレートされたファイルシステムのどこかに書き込まれます。
As you can see, in the second case there is no environment preparation. In fact a clean application will be started directly from {{ic|/usr/share}} since it will not need to write in its folder, so its settings will be written somewhere in the emulated file system.
 
   
  +
アプリケーションがクリーンでもポータブルでもない場合は、2 つのアイデアを組み合わせる必要があります。
If the application is neither clean neither portable the two ideas must be combined.
 
   
  +
アプリケーションが設定をまったく書き込まない場合は、{{ic|if}} をスキップして、{{ic|/usr/share}} から起動します。
If the application does not write settings at all, skip the {{ic|if}} and start it from {{ic|/usr/share}}.
 
   
  +
環境を準備するタスクはアプリケーションによって大きく異なる場合がありますが、次の経験則に従ってください。:
The task of preparing the environment may differ greatly between applications, but follow these rules of thumb:
 
  +
プログラムの場合:
If the program:
 
  +
* ファイルを読み、シンボリックリンクする必要がある。
* just needs to read a file, symlink it.
 
  +
* ファイルに書き込む必要がある場合は、それをコピーする。
* needs to write in a file, copy it.
 
  +
* ファイルを使用しない場合は、無視する。
* does not use a file, ignore it.
 
Of course the minimum is just starting {{ic|1=WINEDEBUG=-all wine /usr/share/programname "$@"}}.
+
もちろん、最小値は {{ic|1=WINEDEBUG=-all wine /usr/share/programname "$@"}} を開始するだけです。
   
Usually the environment will be made by symlinking between the {{ic|"$HOME"/.''programname''}} directory and the {{ic|/usr/share/''programname''}} files. But since some Windows programs are very fickle about their paths, you may need to symlink directly in the {{ic|"$HOME"/.''programname''/wine/drive_c/Program\ Files/''programname''}} directory.
+
通常、環境は {{ic|"$HOME"/.''programname''}} ディレクトリと {{ic|/usr/share/''programname''}} ファイルをシンボリックリンクすることで作られます。しかし、Windows のプログラムによってはパスが非常に気まぐれなので、{{ic|"$HOME"/.''プログラムの名前''/wine/drive_c/Program Files/''プログラムの名前''}} ディレクトリに直接シンボリックリンクする必要があるかもしれません。
   
  +
もちろん、これらは Linux 環境に Win32 アプリケーションを統合するための単なるアイデアです。知性と勇気を忘れないでください。
Of course those are just ideas to integrate Win32 applications in the Linux environment, do not forget your intelligence and gumption.
 
   
  +
たとえば、[[Wikipedia:ja:μTorrent|μTorrent]] はデフォルトではクリーンなアプリケーションですが、簡単な手順でポータブルアプリケーションとして使用できます。これは単一のファイルであり、wine 環境を作成するのにかなり小さいため (約 5MB)、おそらくやりすぎです。実行可能ファイルをシンボリックリンクし、空の ''settings.dat'' を作成して、それを {{ic|$HOME/.utorrent}} ディレクトリに移植可能に使用することをお勧めします。さらに、ユーザーは {{ic|.utorrent}} フォルダにアクセスするだけで、ダウンロードした {{ic|.torrent}} ファイルのコピーを確認できるという利点もあります。
As example, [[Wikipedia:ja:μTorrent|μTorrent]] is by default a clean application, but with a easy step can be used as a portable one. Since it is a single file and it is pretty small creating its wine environment (about 5MB) it is probably an overkill. It is better to symlink the executable, create the empty '''settings.dat''' in order to use it portable in the {{ic|$HOME/.utorrent}} directory. With the added advantage that just visiting {{ic|.utorrent}} folder an user can see a copy of the {{ic|.torrent}} files she downloaded.
 
   
 
=== UnionFsFuse ===
 
=== UnionFsFuse ===
99行目: 98行目:
 
{{Pkg|unionfs-fuse}} パッケージで [http://podgorny.cz/moin/UnionFsFuse UnionFsFuse] プログラムを使うことができます。UnionFsFuse はベースディレクトリを {{ic|/usr/share}} に保持して、書き込みに必要なアプリケーションのファイルのコピーを {{ic|$HOME/.programname}} に自動的に配置します。
 
{{Pkg|unionfs-fuse}} パッケージで [http://podgorny.cz/moin/UnionFsFuse UnionFsFuse] プログラムを使うことができます。UnionFsFuse はベースディレクトリを {{ic|/usr/share}} に保持して、書き込みに必要なアプリケーションのファイルのコピーを {{ic|$HOME/.programname}} に自動的に配置します。
   
  +
UnionFsFuse を使用することは追加の依存関係を意味し、すべてのユーザーがロードするとは限らないヒューズモジュールが必要になります。 ただし、アプリケーションに多くのシンボリックリンクが必要な場合、またはアプリケーションに何を記述する必要があるか正確に不明な場合には、これを行う価値があるかもしれません。UnionF を正しくマウントおよびアンマウントするようにしてください。
Using UnionFsFuse means an additional dependency and it requires the fuse module that not all users might load. Yet, it might be worthwhile if the application would need lots of symlinking or if it is unclear exactly what it needs to be written. Just ensure to mount and unmount the UnionFs correctly.
 
   
 
== サンプル ==
 
== サンプル ==
   
We will make a package for [http://www.emule-project.net/ eMule]. According to [http://www.portablefreeware.com/?q=emule Portable Freeware], eMule is not completely portable since it writes some (useless) keys in the registry.
+
[http://www.emule-project.net/ eMule] 用のパッケージを作成します。[http://www.portablefreeware.com/?q=emule Portable Freeware] によると、eMule はレジストリにいくつかの (役に立たない) キーを書き込むため、完全に移植可能ではありません。
   
  +
その一方で、設定ファイルを書き込んだり、ダウンロードファイルをインストールフォルダに置いたりするので、クリーンではありません。
On the other hand, it is not clean either since it writes its configuration files and puts its downloads in its installation folder.
 
   
Luckily there is an [http://prdownloads.sourceforge.net/emule/eMule0.49b.zip installer-less version available].
+
ここに、[http://prdownloads.sourceforge.net/emule/eMule0.49b.zip インストーラーなしのバージョン] があります。
   
So we make our [[PKGBUILD]]; the only dependency is {{Pkg|wine}}. The {{ic|md5sums}} should be added.
+
以下で、[[PKGBUILD]] を作成します。唯一の依存関係は {{Pkg|wine}} です。{{ic|md5sums}} を追加する必要があります。
   
 
{{bc|<nowiki>
 
{{bc|<nowiki>
141行目: 140行目:
 
</nowiki>}}
 
</nowiki>}}
 
 
  +
ここで、'''emule''' ファイルを作成します。これは、{{ic|build}} に従って、{{ic|/usr/bin}} にコピーされてに実行可能になります。
Now we make our '''emule''' file, which according to {{ic|build}}, will be copied and made executable in {{ic|/usr/bin}}.
 
   
 
#!/bin/bash
 
#!/bin/bash
159行目: 158行目:
 
wine "$HOME"/.emule/emule "$@"
 
wine "$HOME"/.emule/emule "$@"
   
  +
より正確にしたい場合は、wine がメニューを台無しにするため、検索履歴を無効にする必要があることをユーザーに伝えるメッセージを {{ic|.install}} ファイルに追加できます。最適な設定を含むデフォルトの設定ファイルを提供することもできます。以上です... {{ic|$ makepkg}} を実行し、パッケージフォルダーを確認してインストールします。
If you want to be more precise, you may add a message in the {{ic|.install}} file telling the user that they should disable search history since wine messes up that menu. You may even provide a default config file with the best settings. And that's it... run {{ic|$ makepkg}}, check the package folder to be sure, and install.
 
   
 
== Gecko と Mono ==
 
== Gecko と Mono ==
   
  +
そのソフトウェアが .NET ランタイム (パッケージ {{Pkg|wine-gecko}} および {{Pkg|wine-mono}}) のブラウザを必要とすることが明確にわかっていない限り、Gecko/Mono のデフォルトの wine インストール プロンプトは望ましくありません。
Unless you know for sure, that software require browser of .NET runtime (packages {{Pkg|wine_gecko}}{{Broken package link|置換パッケージ: {{Pkg|wine-gecko}}}} and {{Pkg|wine-mono}} in official repositories), default wine installation prompts for Gecko/Mono are undesirable.
 
   
HTML レンダリング, バイトコードサポート, ダイアログを無効するにはスクリプトで dlloverride を使必要があります。
+
HTML レンダリングバイトコード サポート、およびダイアログを無効するにはスクリプトで dloverride を使用する必要があります。
   
 
Gecko の場合:
 
Gecko の場合:
  +
 
export WINEDLLOVERRIDES="mshtml="
 
export WINEDLLOVERRIDES="mshtml="
  +
 
Mono の場合:
 
Mono の場合:
  +
 
export WINEDLLOVERRIDES="mscoree="
 
export WINEDLLOVERRIDES="mscoree="
  +
 
両方の場合:
 
両方の場合:
  +
 
export WINEDLLOVERRIDES="mscoree,mshtml="
 
export WINEDLLOVERRIDES="mscoree,mshtml="
   

2023年11月4日 (土) 21:48時点における最新版

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 "$@"

クリーンな場合は、次のようになります。

#!/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 に設定してください。