ノンフリーアプリケーションパッケージガイドライン

提供: ArchWiki
ナビゲーションに移動 検索に移動

アプリケーションによっては (特に Windows のアプリケーション) ソースや tarball が手に入らない場合があります。そのようなアプリケーションの多くはライセンスの制約があったり、あるいは無料で合法的にインストーラーを取得する方法が存在せず、自由に再配布することができません。当然それらのソフトウェアを公式リポジトリに入れることはできませんが、AUR であれば私的にソフトウェアのパッケージをビルドして pacman で管理するということが不可能ではありません。

ノート: この記事に書かれている情報はパッケージに依存しません。一般的なフリーではないソフトウェアに関する情報は Wine パッケージガイドラインを見てください。

根拠

パッケージになっていないソフトウェアもパッケージ化する理由は複数あります:

  • インストールやアンインストールの平易化
This is applicable even to the simplest of apps, which consist of a single script to be installed into /usr/bin. Instead of issuing:
$ chmod +x filename
# cp filename /usr/bin/
you can type just
# makepkg -i
Most non-free applications are obviously much more complicated, but the burden of downloading an archive/installer from a homepage (often full of advertising), unpacking/decrypting it, hand-writing stereotypical launcher scripts and doing other similar tasks can be effectively lightened by a well-written packaging script.
  • pacman の機能の利用
The ability to track state, perform automatic updates of any installed piece of software, determine ownership of every single file, and store compressed packages in a well-organized cache is what makes GNU/Linux distributions so powerful.
  • コードや知識の共有
It is simpler to apply tweaks, fix bugs and seek/provide help in a single public place like AUR versus submitting patches to proprietary developers who may have ceased support or asking vague questions on general purpose forums.

一般的なルール

可能なかぎりフリーでないソフトウェアは避ける

このガイドは脇に置いて、パッケージ化したいアプリケーションの代わりとなるアプリケーションが存在しないか検索 (あるいは作成) するのに時間を費やしたほうが有益です:

  1. フリーでないソフトウェアのパッケージングは面倒であり大抵 The Arch Way に反しています
  2. It is better to support software that is owned by us all than software that is owned by a company
  3. It is better to support software that is actively maintained
  4. It is better to support software that can be fixed if just one person out of millions cares enough

可能なかぎりオープンソースのソフトウェアを使う

多くの商用ゲーム (ゲーム一覧) はオープンソースのエンジンを使っており古いゲームの多くは ScummVM などのエミュレータで遊ぶことができます。オープンソースエンジンとオリジナルのゲームアセットを使うことで、バイナリパッケージによる問題を回避したりバグを解決することが可能です。

Keep it simple

If the packaging of some program requires more effort and hacks than buying and using the original version - do the simplest thing, it is Arch!

パッケージの命名

Before choosing a name on your own, search in AUR for existing versions of the software you want to package. Try to use established naming conversion (e.g. do not create something like gish-hbAUR[リンク切れ: アーカイブ: aur-mirror] when there are already aquaria-hibAUR, penumbra-overture-hibAUR and uplink-hibAUR). Use suffix -bin always unless you are sure there will never be a source-based package—its creator would have to ask you (or in worst case TUs) to orphan existing package for him and you both will end up with PKGBUILDs cluttered with additional replaces and conflicts.

ファイルの置き場所

Again, analyze existing packages (if present) and decide whether or not you want to conflict with them. Do not place things under /opt unless you want to use some ugly hacks like giving ownership root:games to the package directory (so users in group games running the game can write files in the game's own folder).

欠けているファイル

For most commercial games there is no way to (legally) download game files, which is the preferable way to get them for normal packages. Even when it is possible to download files after providing a password (like with all Humble Indie Bundle games) asking user for this password and downloading somewhere in build function is not recommended for a variety of reasons (for example, the user may have no Internet access but have all files downloaded and stored locally). The following options should be considered:

  • There is only one way to obtain files
  • Software is distributed in archive/installer
Add the required file to sources array:
sources=(... "originalname::file://originalname")
This way the link to file in AUR web interface will look different from names of files included in source tarball.
Add following comment on package page:
Need archive/installer to work.
and explain the details in PKGBUILD source.
  • Software is distributed on compact-disk
Add installer script and .install file to package contents, like in package tsukihime-enAUR[リンク切れ: アーカイブ: aur-mirror].
  • There are several ways to obtain files

Copying files from disk / downloading from Net / getting from archive during build phase may look like a good idea but it is not recommended because it limits the user's possibilities and makes package installation interactive (which is generally discouraged and just annoying). Again, a good installer script and .install file can work instead.

Few examples of various strategies for obtaining files required for package:

高度なトピック

カスタム DLAGENTS

Some software authors aggressively protect their software from automatic downloading: ban certain "User-Agent" strings, create temporary links to files etc. You can still conveniently download this files by using DLAGENTS variable in PKGBUILD (see man makepkg.conf). This is used by some packages in official repositories, for example ttf-baekmuk.

Following one-liner disguises curl as the most popular browser among novice computer users:

DLAGENTS=("http::/usr/bin/curl -A 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)' -fLC - --retry 3 --retry-delay 3 -o %o %u")

And following allows to extract temporary link to file from download page:

DLAGENTS=("http::/usr/bin/wget -r -np -nd -H %u")

解凍

Many proprietary programs are shipped in nasty installers which sometimes do not even run in Wine. Following tools may be of some help:

  • unzip and unrar unpack executable SFX archives, based on this formats
  • cabextract can unpack most .cab files (including ones with .exe extension)
  • unshield can extract CAB files from InstallShield installers
  • p7zip unpacks not only many archive formats but also NSIS-based .exe installers
    • it even can extract single sections from common PE (.exe & .dll) files!
  • upx is sometimes used to encrypt above-listed executables and can be used for decryption as well
  • innoextractAUR can unpack .exe installers created with Inno Setup (used for example by GOG.com games)

In order to determine exact type of file run file file_of_unknown_type.

.desktop ファイル用のアイコンの取得

プロプライエタリなソフトウェアはアイコンファイルを用意してないことが少なくなく、.desktop ファイルを作成するときに使えるアイコンがないことがあります。icoutils パッケージに含まれているプログラムを使うことで実行ファイルから .ico ファイルは簡単に抽出できます。build 関数の中で抽出をすることもできます (sugarsdelightAUR[リンク切れ: アーカイブ: aur-mirror] の例を参照)。