「Makepkg」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
16行目: 16行目:
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|パッケージの作成}}
 
{{Related|パッケージの作成}}
{{Related2|PKGBUILD|PKGBUILD}}
+
{{Related|PKGBUILD}}
{{Related2|Arch User Repository|Arch User Repository}}
+
{{Related|Arch User Repository}}
{{Related2|pacman|pacman}}
+
{{Related|pacman}}
 
{{Related|公式リポジトリ}}
 
{{Related|公式リポジトリ}}
{{Related2|Arch Build System|Arch Build System}}
+
{{Related|Arch Build System}}
 
{{Related articles end}}
 
{{Related articles end}}
makepkg は [[pacman|pacman]] (Arch Linux のパッケージマネージャ) でのインストールに適したパッケージをコンパイル・ビルドするために使われます。makepkg はパッケージのビルドを自動化するスクリプトです; ソースファイルのダウンロード・検証、依存関係の確認、ビルド時の設定、ソースのコンパイル、一時 root へのインストール、カスタマイズ、メタ情報の生成、そして全てをまとめたパッケージの作成。
+
makepkg は [[pacman]] (Arch Linux のパッケージマネージャ) でのインストールに適したパッケージをコンパイル・ビルドするために使われます。makepkg はパッケージのビルドを自動化するスクリプトです; ソースファイルのダウンロード・検証、依存関係の確認、ビルド時の設定、ソースのコンパイル、一時 root へのインストール、カスタマイズ、メタ情報の生成、そして全てをまとめたパッケージの作成。
   
 
makepkg は {{Pkg|pacman}} パッケージの中に入っています。
 
makepkg は {{Pkg|pacman}} パッケージの中に入っています。
33行目: 33行目:
 
makepkg でソフトウェアをコンパイルする時 {{ic|MAKEFLAGS}}, {{ic|CFLAGS}}, {{ic|CXXFLAGS}}, {{ic|CPPFLAGS}} オプションが {{Pkg|make}}, {{Pkg|gcc}}, {{ic|g++}} によって使われます。デフォルトでは、様々なマシンでインストールできるような一般的なパッケージを生成するようにオプションが設定されています。ホストマシン用にコンパイルをチューニングすることでパフォーマンスを改善することが可能です。コンパイルするホストのプロセッサに合わせてパッケージをコンパイルするデメリットは、他のマシンでは動作しなくなるかもしれないということです。
 
makepkg でソフトウェアをコンパイルする時 {{ic|MAKEFLAGS}}, {{ic|CFLAGS}}, {{ic|CXXFLAGS}}, {{ic|CPPFLAGS}} オプションが {{Pkg|make}}, {{Pkg|gcc}}, {{ic|g++}} によって使われます。デフォルトでは、様々なマシンでインストールできるような一般的なパッケージを生成するようにオプションが設定されています。ホストマシン用にコンパイルをチューニングすることでパフォーマンスを改善することが可能です。コンパイルするホストのプロセッサに合わせてパッケージをコンパイルするデメリットは、他のマシンでは動作しなくなるかもしれないということです。
   
{{Note|あなたが export した変数を全てのパッケージビルドシステムが使うわけではないということに注意してください。元の Makefile や [[PKGBUILD|PKGBUILD]] 内の変数を上書きすることがあります。}}
+
{{Note|あなたが export した変数を全てのパッケージビルドシステムが使うわけではないということに注意してください。元の Makefile や [[PKGBUILD]] 内の変数を上書きすることがあります。}}
   
 
{{hc|/etc/makepkg.conf|<nowiki>
 
{{hc|/etc/makepkg.conf|<nowiki>
79行目: 79行目:
   
 
====MAKEFLAGS====
 
====MAKEFLAGS====
{{ic|MAKEFLAGS}} オプションを使って make に追加するオプションを指定することができます。マルチコア・マルチプロセッサのシステムを使っているユーザーは同時に実行するジョブの数を指定できます、例: {{ic|-j4}}。{{ic|nproc}} を使うことで利用可能なプロセッサの数がわかります。[[PKGBUILD|PKGBUILD]] によっては、特定のバージョンで競合状態になったり、もしくはサポートされていないために、この値を {{ic|-j1}} で上書きします。これによってビルドが失敗するパッケージがある場合は、エラーがあなたの MAKEFLAGS によって引き起こされていることを確認してから、バグトラッカーに[[バグ報告ガイドライン|報告]]してください。
+
{{ic|MAKEFLAGS}} オプションを使って make に追加するオプションを指定することができます。マルチコア・マルチプロセッサのシステムを使っているユーザーは同時に実行するジョブの数を指定できます、例: {{ic|-j4}}。{{ic|nproc}} を使うことで利用可能なプロセッサの数がわかります。[[PKGBUILD]] によっては、特定のバージョンで競合状態になったり、もしくはサポートされていないために、この値を {{ic|-j1}} で上書きします。これによってビルドが失敗するパッケージがある場合は、エラーがあなたの MAKEFLAGS によって引き起こされていることを確認してから、バグトラッカーに[[バグ報告ガイドライン|報告]]してください。
   
 
利用可能なオプションの全ては {{ic|man make}} を見て下さい。
 
利用可能なオプションの全ては {{ic|man make}} を見て下さい。
134行目: 134行目:
 
=== 署名チェック ===
 
=== 署名チェック ===
 
以下の手順は makepkg を使ったコンパイルに必須のものではありません、初期設定は [[#使用方法]] に進んで下さい。一時的に署名チェックを無効にしたいときは makepkg コマンドに {{ic|--skippgpcheck}} オプションを付けて呼び出して下さい。
 
以下の手順は makepkg を使ったコンパイルに必須のものではありません、初期設定は [[#使用方法]] に進んで下さい。一時的に署名チェックを無効にしたいときは makepkg コマンドに {{ic|--skippgpcheck}} オプションを付けて呼び出して下さい。
[[PKGBUILD|PKGBUILD]] の source 行の一部に .sig の形で署名ファイルがあると、makepkg はソースファイルの信頼性を検証します。例えば、署名 {{ic|pkgname-pkgver.tar.gz.sig}} は gpg プログラムによってファイル {{ic|pkgname-pkgver.tar.gz}} の整合性のチェックに使われます。望むなら、他の開発者による署名を手動で GPG キーリングに追加することができます。詳細は [[GnuPG|GnuPG]] の記事を見て下さい。
+
[[PKGBUILD]] の source 行の一部に .sig の形で署名ファイルがあると、makepkg はソースファイルの信頼性を検証します。例えば、署名 {{ic|pkgname-pkgver.tar.gz.sig}} は gpg プログラムによってファイル {{ic|pkgname-pkgver.tar.gz}} の整合性のチェックに使われます。望むなら、他の開発者による署名を手動で GPG キーリングに追加することができます。詳細は [[GnuPG]] の記事を見て下さい。
   
 
{{Note|makepkg で実装されている署名チェックは pacman のキーリングを使用しません。以下にあるように gpg を設定して makepkg が pacman のキーリングを読み込めるようにしてください。}}
 
{{Note|makepkg で実装されている署名チェックは pacman のキーリングを使用しません。以下にあるように gpg を設定して makepkg が pacman のキーリングを読み込めるようにしてください。}}
159行目: 159行目:
 
== 使用方法 ==
 
== 使用方法 ==
   
次に進む前に、{{Grp|base-devel}} グループがインストールされているか確認してください。このグループに属しているパッケージは [[PKGBUILD|PKGBUILD]] の中に依存パッケージとして載せる必要はないことになっています。以下を (root で) 実行して "base-devel" グループをインストールしてください:
+
次に進む前に、{{Grp|base-devel}} グループがインストールされているか確認してください。このグループに属しているパッケージは [[PKGBUILD]] の中に依存パッケージとして載せる必要はないことになっています。以下を (root で) 実行して "base-devel" グループをインストールしてください:
   
 
# pacman -S base-devel
 
# pacman -S base-devel
165行目: 165行目:
 
{{Note|依存パッケージが欠けていることに不満を言う前に、全ての Arch Linux 環境では {{Grp|base}} グループがインストールされていることが前提になっていることを思い出してください。'''makepkg''' や [[AUR ヘルパー]]でビルドするときには "base-devel" グループがインストールされていることが前提になっています。}}
 
{{Note|依存パッケージが欠けていることに不満を言う前に、全ての Arch Linux 環境では {{Grp|base}} グループがインストールされていることが前提になっていることを思い出してください。'''makepkg''' や [[AUR ヘルパー]]でビルドするときには "base-devel" グループがインストールされていることが前提になっています。}}
   
パッケージを作成するには、まず[[パッケージの作成]]に記述されているようにして [[PKGBUILD|PKGBUILD]] を作成するか [[Arch Build System|ABS ツリー]]や [[Arch User Repository|Arch User Repository]] などから取得してくる必要があります。
+
パッケージを作成するには、まず[[パッケージの作成]]に記述されているようにして [[PKGBUILD]] を作成するか [[Arch Build System|ABS ツリー]]や [[Arch User Repository]] などから取得してくる必要があります。
   
 
{{Warning|信頼できるソースからパッケージをビルド・インストールしてください。}}
 
{{Warning|信頼できるソースからパッケージをビルド・インストールしてください。}}
181行目: 181行目:
 
$ makepkg -s
 
$ makepkg -s
   
依存パッケージが取ってこれるのは設定されたリポジトリからだけということに注意してください; 詳しくは [[pacman#Repositories|pacman#Repositories]] を見て下さい。また、ビルドの前に手動で依存パッケージをインストールすることもできます ({{ic|pacman -S --asdeps dep1 dep2}})。
+
依存パッケージが取ってこれるのは設定されたリポジトリからだけということに注意してください; 詳しくは [[pacman#Repositories]] を見て下さい。また、ビルドの前に手動で依存パッケージをインストールすることもできます ({{ic|pacman -S --asdeps dep1 dep2}})。
   
 
全ての依存関係が解決されパッケージのビルドが成功すれば、パッケージファイル ({{ic|pkgname-pkgver.pkg.tar.xz}}) が作業ディレクトリの中に作成されます。インストールするには、(root で) 次を実行してください:
 
全ての依存関係が解決されパッケージのビルドが成功すれば、パッケージファイル ({{ic|pkgname-pkgver.pkg.tar.xz}}) が作業ディレクトリの中に作成されます。インストールするには、(root で) 次を実行してください:
194行目: 194行目:
 
=== コンパイル時間を短縮する ===
 
=== コンパイル時間を短縮する ===
   
  +
==== tmpfs ====
パッケージをコンパイルするのは I/O に負担がかかる作業のため、[[tmpfs|tmpfs]] を利用することでビルド時間を大幅に短縮することができます。該当する {{ic|/etc/makepkg.conf}} のオプションは {{ic|BUILD ENVIRONMENT}} セクションの一番下にあります:
 
  +
  +
パッケージをコンパイルするのは I/O に負担がかかる作業のため、[[tmpfs]] を利用することでビルド時間を大幅に短縮することができます。該当する {{ic|/etc/makepkg.conf}} のオプションは {{ic|BUILD ENVIRONMENT}} セクションの一番下にあります:
 
{{hc|/etc/makepkg.conf|<nowiki>
 
{{hc|/etc/makepkg.conf|<nowiki>
 
[...]
 
[...]
223行目: 225行目:
 
</nowiki>}}
 
</nowiki>}}
   
{{ic|1=BUILDDIR=/tmp/makepkg}} 行をアンコメントして {{ic|1=BUILDDIR=/tmp/builds}} などに設定すれば (もしくはデフォルトの値のままにすれば) Arch のデフォルトの {{ic|/tmp}} [[tmpfs|tmpfs]] が使用されます。
+
{{ic|1=BUILDDIR=/tmp/makepkg}} 行をアンコメントして {{ic|1=BUILDDIR=/tmp/builds}} などに設定すれば (もしくはデフォルトの値のままにすれば) Arch のデフォルトの {{ic|/tmp}} [[tmpfs]] が使用されます。
{{Note|[[tmpfs|tmpfs]] フォルダは {{ic|noexec}} オプションを付けずにマウントされている必要があります。このオプションを使うとビルドスクリプトやユーティリティが実行できません。また、[[fstab#tmpfs|fstab#tmpfs]] に記されているように、デフォルトのサイズは利用できる RAM の半分となっており、容量を全て使いきってしまうおそれがあります。}}
+
{{Note|[[tmpfs]] フォルダは {{ic|noexec}} オプションを付けずにマウントされている必要があります。このオプションを使うとビルドスクリプトやユーティリティが実行できません。また、[[tmpfs]] の記事に記されているように、デフォルトのサイズは利用できる RAM の半分となっており、容量を全て使いきってしまうおそれがあります。}}
[[tmpfs|tmpfs]] でコンパイルしたパッケージは再起動するとなくなってしまうので注意してください。そのため、何度もインストールするようなパッケージは他の(永続的な)ディレクトリに移動したほうが良いでしょう。
+
[[tmpfs]] でコンパイルしたパッケージは再起動するとなくなってしまうので注意してください。そのため、何度もインストールするようなパッケージは他の(永続的な)ディレクトリに移動したほうが良いでしょう。
   
 
==== ccache ====
 
==== ccache ====
   
[[ccache|ccache]] を使うことでコンパイル結果をキャッシュしてビルド時間を短縮できます。
+
[[ccache]] を使うことでコンパイル結果をキャッシュしてビルド時間を短縮できます。
   
 
=== md5sum を新規作成する ===
 
=== md5sum を新規作成する ===
237行目: 239行目:
 
=== Makepkg が PKGBUILD を二度利用する ===
 
=== Makepkg が PKGBUILD を二度利用する ===
 
Makepkg は PKGBUILD を二度実行します (最初に実行した時と、fakeroot 下で2回目)。PKGBUILD に置かれた標準から外れた関数は全て同じく二度実行されます。
 
Makepkg は PKGBUILD を二度実行します (最初に実行した時と、fakeroot 下で2回目)。PKGBUILD に置かれた標準から外れた関数は全て同じく二度実行されます。
 
=== WARNING: Package contains reference to $srcdir ===
 
リテラル文字列 {{ic|$srcdir}} か {{ic|$pkgdir}} があなたのパッケージ内のインストールされたファイルのどれかで終わっています。
 
 
ファイルを確認するには、makepkg のビルドディレクトリから次のコマンドを実行してください:
 
$ grep -R "$(pwd)/src" pkg/
 
 
[http://www.mail-archive.com/arch-general@archlinux.org/msg15561.html Link] to discussion thread.
 
   
 
=== 圧縮しないパッケージを作成する ===
 
=== 圧縮しないパッケージを作成する ===
272行目: 266行目:
 
[...]
 
[...]
 
}}
 
}}
  +
  +
== トラブルシューティング ==
  +
  +
=== QMAKE を使用するパッケージで makepkg.conf の CFLAGS/CXXFLAGS/CPPFLAGS が適用されない ===
  +
Qmake は {{ic|CFLAGS}} と {{ic|CXXFLAGS}} 変数を自動的に設定します。makepkg の設定ファイルで定義した変数を qmake に使わせるには、PKGBUILD を編集して [http://doc.qt.io/qt-5/qmake-variable-reference.html#qmake-cflags-release QMAKE_CFLAGS_RELEASE] と [http://doc.qt.io/qt-5/qmake-variable-reference.html#qmake-cxxflags-release QMAKE_CXXFLAGS_RELEASE] 変数を qmake に指定する必要があります。例:
  +
  +
{{hc|PKGBUILD|<nowiki>
  +
...
  +
  +
build() {
  +
cd "$srcdir/$_pkgname-$pkgver-src"
  +
qmake-qt4 "$srcdir/$_pkgname-$pkgver-src/$_pkgname.pro" \
  +
PREFIX=/usr \
  +
CONFIG+=LINUX_INTEGRATED \
  +
INSTALL_ROOT_PATH="$pkgdir"\
  +
QMAKE_CFLAGS_RELEASE="${CFLAGS}"\
  +
QMAKE_CXXFLAGS_RELEASE="${CXXFLAGS}"
  +
  +
make
  +
}
  +
  +
...
  +
</nowiki>}}
  +
  +
もしくは、システム全体で設定したい場合、{{ic|qmake.conf}} を作成して [http://doc.qt.io/qt-5/qmake-environment-reference.html#qmakespec QMAKESPEC] 環境変数を設定してください。
  +
  +
=== WARNING: Package contains reference to $srcdir ===
  +
リテラル文字列 {{ic|$srcdir}} か {{ic|$pkgdir}} があなたのパッケージ内のインストールされたファイルのどれかに含まれています。
  +
  +
ファイルを確認するには、makepkg のビルドディレクトリから次のコマンドを実行してください:
  +
$ grep -R "$(pwd)/src" pkg/
  +
  +
詳しくは [http://www.mail-archive.com/arch-general@archlinux.org/msg15561.html こちら] を参照。
   
 
== 参照 ==
 
== 参照 ==

2015年9月11日 (金) 14:35時点における版

関連記事

makepkg は pacman (Arch Linux のパッケージマネージャ) でのインストールに適したパッケージをコンパイル・ビルドするために使われます。makepkg はパッケージのビルドを自動化するスクリプトです; ソースファイルのダウンロード・検証、依存関係の確認、ビルド時の設定、ソースのコンパイル、一時 root へのインストール、カスタマイズ、メタ情報の生成、そして全てをまとめたパッケージの作成。

makepkg は pacman パッケージの中に入っています。

設定

/etc/makepkg.conf が makepkg のメインの設定ファイルです。ほとんどのユーザーはパッケージをビルドする前に makepkg の設定オプションを微調整するとよいでしょう。~/.makepkg.conf ファイルを作成することもできます。

アーキテクチャ、コンパイルフラグ

makepkg でソフトウェアをコンパイルする時 MAKEFLAGS, CFLAGS, CXXFLAGS, CPPFLAGS オプションが make, gcc, g++ によって使われます。デフォルトでは、様々なマシンでインストールできるような一般的なパッケージを生成するようにオプションが設定されています。ホストマシン用にコンパイルをチューニングすることでパフォーマンスを改善することが可能です。コンパイルするホストのプロセッサに合わせてパッケージをコンパイルするデメリットは、他のマシンでは動作しなくなるかもしれないということです。

ノート: あなたが export した変数を全てのパッケージビルドシステムが使うわけではないということに注意してください。元の Makefile や PKGBUILD 内の変数を上書きすることがあります。
/etc/makepkg.conf
[...]

#########################################################################
# ARCHITECTURE, COMPILE FLAGS
#########################################################################
#
CARCH="x86_64"
CHOST="x86_64-unknown-linux-gnu"

#-- Exclusive: will only run on x86_64
# -march (or -mcpu) builds exclusively for an architecture
# -mtune optimizes for an architecture, but builds for whole processor family
CPPFLAGS="-D_FORTIFY_SOURCE=2"
CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4"
CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4"
LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro"
#-- Make Flags: change this for DistCC/SMP systems
#MAKEFLAGS="-j2"

[...]

デフォルトの makepkg.conf の CFLAGSCXXFLAGS はそれぞれのアーキテクチャを持つ全てのマシンと互換性があります。

x86_64 のマシンでは、時間を投資して公式のパッケージをリビルドすることでそれに見合うだけのパフォーマンスの向上を得られることは稀です。

GCC バージョン 4.3.0 から、マシンの CPU の自動検知とサポートされている最適化の自動セレクトを有効にする -march=native スイッチが使えるようになっています。これを使うには、以下のように CFLAGSCXXFLAGS を変更してください:

# -march=native also sets the correct -mtune=
CFLAGS="-march=native -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2"
CXXFLAGS="${CFLAGS}"
ヒント: march=native フラグがどうなるか見るには、次を実行してください:
$ gcc -march=native -E -v - </dev/null 2>&1 | sed -n 's/.* -v - //p'

-march=native は全ての利用可能な命令セットを有効にし特定の CPU にあわせてスケジューリングを改善するので CPU タイプに合わせた最適化によって理論上はパフォーマンスが向上します。アプリケーション (例えば: 音声・動画エンコードツール、科学的なアプリケーション、数学プログラムなど) をリビルドするときにこれは特に顕著で、Arch Linux によって提供されているデフォルトのオプション (またパッケージ) を使うときには有効にならない新しい命令を使えることで大きなアドバンテージを得ることができます。

コンパイラスイッチによって、ループ展開・悪いベクトル化・狂ったインライン化などでコンパイラはコードサイズを膨張させがちなので"標準外の" CFLAGS を使うことでパフォーマンスを下げるのはとても簡単です。何かが速くなると確認・ベンチマークできない限り、高速化できる可能性はほとんどありません!

利用可能なオプションの完全なリストは GCC の man ページを見て下さい。Gentoo の Compilation Optimization GuideSafe CFLAGS にはより詳しい情報が載っています。

MAKEFLAGS

MAKEFLAGS オプションを使って make に追加するオプションを指定することができます。マルチコア・マルチプロセッサのシステムを使っているユーザーは同時に実行するジョブの数を指定できます、例: -j4nproc を使うことで利用可能なプロセッサの数がわかります。PKGBUILD によっては、特定のバージョンで競合状態になったり、もしくはサポートされていないために、この値を -j1 で上書きします。これによってビルドが失敗するパッケージがある場合は、エラーがあなたの MAKEFLAGS によって引き起こされていることを確認してから、バグトラッカーに報告してください。

利用可能なオプションの全ては man make を見て下さい。

パッケージの出力

次に、ソースファイルやパッケージが置かれる場所、パッケージ作成者としての名前を設定することができます。このステップは任意です; デフォルトでは、パッケージは makepkg が実行された作業ディレクトリに作成されます。

/etc/makepkg.conf
[...]

#########################################################################
# PACKAGE OUTPUT
#########################################################################
#
# Default: put built package and cached source in build directory
#
#-- Destination: specify a fixed directory where all packages will be placed
#PKGDEST=/home/packages
#-- Source cache: specify a fixed directory where source files will be cached
#SRCDEST=/home/sources
#-- Source packages: specify a fixed directory where all src packages will be placed
#SRCPKGDEST=/home/srcpackages
#-- Packager: name/email of the person or organization building packages
#PACKAGER="John Doe <john@doe.com>"

[...]

例えば、ディレクトリを作成して:

$ mkdir /home/$USER/packages

/etc/makepkg.confPKGDEST 変数を修正してください。

PACKAGER 変数はコンパイルしたパッケージの .PKGINFO メタデータファイルの中に packager 値を設定します。デフォルトでは、ユーザーがコンパイルしたパッケージは以下のように表示されます:

pacman -Qi package
[...]
Packager       : Unknown Packager
[...]

設定した後:

pacman -Qi package
[...]
Packager       : John Doe <john@doe.com>
[...]

システム上で複数のユーザーがパッケージをコンパイルしていたり、あなたのパッケージを他のユーザーに渡す場合にこれを使うと有用です。

署名チェック

以下の手順は makepkg を使ったコンパイルに必須のものではありません、初期設定は #使用方法 に進んで下さい。一時的に署名チェックを無効にしたいときは makepkg コマンドに --skippgpcheck オプションを付けて呼び出して下さい。 PKGBUILD の source 行の一部に .sig の形で署名ファイルがあると、makepkg はソースファイルの信頼性を検証します。例えば、署名 pkgname-pkgver.tar.gz.sig は gpg プログラムによってファイル pkgname-pkgver.tar.gz の整合性のチェックに使われます。望むなら、他の開発者による署名を手動で GPG キーリングに追加することができます。詳細は GnuPG の記事を見て下さい。

ノート: makepkg で実装されている署名チェックは pacman のキーリングを使用しません。以下にあるように gpg を設定して makepkg が pacman のキーリングを読み込めるようにしてください。

gpg キーはユーザーの ~/.gnupg/pubring.gpg ファイルの中に保存されていると期待されています。与えられた署名が含まれていない場合、makepkg は警告を表示します。

makepkg
[...]
==> Verifying source file signatures with gpg...
pkgname-pkgver.tar.gz ... FAILED (unknown public key 1234567890)
==> WARNING: Warnings have occurred while verifying the signatures.
    Please make sure you really trust them.
[...]

現在の gpg キーのリストを表示するには gpg コマンドを使って下さい。

gpg --list-keys

pubring.gpg ファイルが存在しない時はすぐに作成されます。gpg を設定して Arch Linux の開発者によって投稿された署名チェックが成功した AUR パッケージをコンパイルできるようにすることが可能です。 以下の行をあなたの gpg 設定ファイルの一番下に追加してユーザーの個人キーリングに pacman のキーリングを含めて下さい。

~/.gnupg/gpg.conf
[...]
keyring /etc/pacman.d/gnupg/pubring.gpg

前と同じように gpg --list-keys を実行すると出力にキーリングと開発者のリストが含まれています。

使用方法

次に進む前に、base-devel グループがインストールされているか確認してください。このグループに属しているパッケージは PKGBUILD の中に依存パッケージとして載せる必要はないことになっています。以下を (root で) 実行して "base-devel" グループをインストールしてください:

# pacman -S base-devel
ノート: 依存パッケージが欠けていることに不満を言う前に、全ての Arch Linux 環境では base グループがインストールされていることが前提になっていることを思い出してください。makepkgAUR ヘルパーでビルドするときには "base-devel" グループがインストールされていることが前提になっています。

パッケージを作成するには、まずパッケージの作成に記述されているようにして PKGBUILD を作成するか ABS ツリーArch User Repository などから取得してくる必要があります。

警告: 信頼できるソースからパッケージをビルド・インストールしてください。

PKGBUILD を入手したら、PKGBUILD が保存されているディレクトリに移動してから次のコマンドを実行して PKGBUILD に記述されたパッケージを作成します:

$ makepkg

パッケージ作成後、要らなくなったファイル ($srcdir に展開されたファイルなど) を makepkg によって削除するには、以下のオプションを加えて下さい。同じパッケージをビルドしたりパッケージのバージョンを更新するときに、同じビルドフォルダを使う場合、このオプションは有益です。残ったファイルを新しいビルドに持ち越す危険がなくなります。

$ makepkg -c

必要な依存パッケージが欠けている場合、makepkg は警告を表示します。必要な依存パッケージを自動的にインストールするには、次のコマンドを使って下さい:

$ makepkg -s

依存パッケージが取ってこれるのは設定されたリポジトリからだけということに注意してください; 詳しくは pacman#Repositories を見て下さい。また、ビルドの前に手動で依存パッケージをインストールすることもできます (pacman -S --asdeps dep1 dep2)。

全ての依存関係が解決されパッケージのビルドが成功すれば、パッケージファイル (pkgname-pkgver.pkg.tar.xz) が作業ディレクトリの中に作成されます。インストールするには、(root で) 次を実行してください:

# pacman -U pkgname-pkgver.pkg.tar.xz

もしくは、pacman -U pkgname-pkgver.pkg.tar.xz を実行する代わりに -i フラグを使ってインストールすることもできます:

$ makepkg -i

Tips and Tricks

コンパイル時間を短縮する

tmpfs

パッケージをコンパイルするのは I/O に負担がかかる作業のため、tmpfs を利用することでビルド時間を大幅に短縮することができます。該当する /etc/makepkg.conf のオプションは BUILD ENVIRONMENT セクションの一番下にあります:

/etc/makepkg.conf
[...]

#########################################################################
# BUILD ENVIRONMENT
#########################################################################
#
# Defaults: BUILDENV=(!distcc color !ccache check !sign)
#  A negated environment option will do the opposite of the comments below.
#
#-- distcc:   Use the Distributed C/C++/ObjC compiler
#-- color:    Colorize output messages
#-- ccache:   Use ccache to cache compilation
#-- check:    Run the check() function if present in the PKGBUILD
#-- sign:     Generate PGP signature file
#
BUILDENV=(!distcc color !ccache check !sign)
#
#-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
#-- specify a space-delimited list of hosts running in the DistCC cluster.
#DISTCC_HOSTS=""
#
#-- Specify a directory for package building.
#BUILDDIR=/tmp/makepkg

[...]

BUILDDIR=/tmp/makepkg 行をアンコメントして BUILDDIR=/tmp/builds などに設定すれば (もしくはデフォルトの値のままにすれば) Arch のデフォルトの /tmp tmpfs が使用されます。

ノート: tmpfs フォルダは noexec オプションを付けずにマウントされている必要があります。このオプションを使うとビルドスクリプトやユーティリティが実行できません。また、tmpfs の記事に記されているように、デフォルトのサイズは利用できる RAM の半分となっており、容量を全て使いきってしまうおそれがあります。

tmpfs でコンパイルしたパッケージは再起動するとなくなってしまうので注意してください。そのため、何度もインストールするようなパッケージは他の(永続的な)ディレクトリに移動したほうが良いでしょう。

ccache

ccache を使うことでコンパイル結果をキャッシュしてビルド時間を短縮できます。

md5sum を新規作成する

pacman 4.1 から makepkg -g >> PKGBUILD は必要なくなり、pacman-contrib は updpkgsums スクリプトに併合されました。このスクリプトを使って PKGBUILD の中に新しいチェックサムを生成することができます:

$ updpkgsums

Makepkg が PKGBUILD を二度利用する

Makepkg は PKGBUILD を二度実行します (最初に実行した時と、fakeroot 下で2回目)。PKGBUILD に置かれた標準から外れた関数は全て同じく二度実行されます。

圧縮しないパッケージを作成する

パッケージをローカルでインストールしたいだけの場合、LZMA2 の圧縮と解凍を避けることでプロセスを高速化できます:

/etc/makepkg.conf
[...]
#PKGEXT='.pkg.tar.xz'
PKGEXT='.pkg.tar'
[...]

マルチコアを利用して圧縮する

xz対称型マルチプロセッシング (SMP) による圧縮をサポートしていません。p7zip を使うことでマルチコアを活用できます:

/etc/makepkg.conf
[...]
COMPRESSXZ=(7z a dummy -txz -si -so)
[...]

AUR の xz-gitAUR対称型マルチプロセッシング (SMP) をサポートしています。

/etc/makepkg.conf
[...]
COMPRESSXZ=(xz -T0 -c -z -)
[...]

トラブルシューティング

QMAKE を使用するパッケージで makepkg.conf の CFLAGS/CXXFLAGS/CPPFLAGS が適用されない

Qmake は CFLAGSCXXFLAGS 変数を自動的に設定します。makepkg の設定ファイルで定義した変数を qmake に使わせるには、PKGBUILD を編集して QMAKE_CFLAGS_RELEASEQMAKE_CXXFLAGS_RELEASE 変数を qmake に指定する必要があります。例:

PKGBUILD
...

build() {
  cd "$srcdir/$_pkgname-$pkgver-src"
  qmake-qt4 "$srcdir/$_pkgname-$pkgver-src/$_pkgname.pro" \
    PREFIX=/usr \
    CONFIG+=LINUX_INTEGRATED \
    INSTALL_ROOT_PATH="$pkgdir"\
    QMAKE_CFLAGS_RELEASE="${CFLAGS}"\
    QMAKE_CXXFLAGS_RELEASE="${CXXFLAGS}"

  make
}

...

もしくは、システム全体で設定したい場合、qmake.conf を作成して QMAKESPEC 環境変数を設定してください。

WARNING: Package contains reference to $srcdir

リテラル文字列 $srcdir$pkgdir があなたのパッケージ内のインストールされたファイルのどれかに含まれています。

ファイルを確認するには、makepkg のビルドディレクトリから次のコマンドを実行してください:

$ grep -R "$(pwd)/src" pkg/

詳しくは こちら を参照。

参照

  • gcccpuopt: 現在の CPU にあわせた gcc の cpu オプションを表示するスクリプト