Difference between revisions of "Makepkg (日本語)"

From ArchWiki
Jump to: navigation, search
m
m
Line 35: Line 35:
 
makepkg でソフトウェアをコンパイルする時 {{ic|MAKEFLAGS}}, {{ic|CFLAGS}}, {{ic|CXXFLAGS}} オプションが {{Pkg|make}}, {{Pkg|gcc}}, {{ic|g++}} によって使われます。デフォルトでは、様々なマシンでインストールできるような一般的なパッケージを生成するようにオプションが設定されています。ホストマシン用にコンパイルをチューニングすることでパフォーマンスを改善することが可能です。コンパイルするホストのプロセッサに合わせてパッケージをコンパイルするデメリットは、他のマシンでは動作しなくなるかもしれないということです。
 
makepkg でソフトウェアをコンパイルする時 {{ic|MAKEFLAGS}}, {{ic|CFLAGS}}, {{ic|CXXFLAGS}} オプションが {{Pkg|make}}, {{Pkg|gcc}}, {{ic|g++}} によって使われます。デフォルトでは、様々なマシンでインストールできるような一般的なパッケージを生成するようにオプションが設定されています。ホストマシン用にコンパイルをチューニングすることでパフォーマンスを改善することが可能です。コンパイルするホストのプロセッサに合わせてパッケージをコンパイルするデメリットは、他のマシンでは動作しなくなるかもしれないということです。
  
{{Note|Do keep in mind that not all package build systems will use your exported variables. Some override them in the original Makefiles or the [[PKGBUILD]].}}
+
{{Note|あなたが export した変数を全てのパッケージビルドシステムが使うわけではないということに注意してください。元の Makefile や [[PKGBUILD (日本語)|PKGBUILD]] 内の変数を上書きすることがあります。}}
  
 
{{hc|/etc/makepkg.conf|<nowiki>
 
{{hc|/etc/makepkg.conf|<nowiki>
Line 74: Line 74:
 
}}
 
}}
  
Further optimizing for CPU type can theoretically enhance performance because {{ic|1=-march=native}} enables all available instruction sets and improves scheduling for a particular CPU. This is especially noticeable when rebuilding applications (for example: audio/video encoding tools, scientific applications, math-heavy programs, etc.) that can take heavy advantage of newer instructions sets not enabled when using the default options (or packages) provided by Arch Linux.
+
{{ic|1=-march=native}} は全ての利用可能な命令セットを有効にし特定の CPU にあわせてスケジューリングを改善するので CPU タイプに合わせた最適化は理論上パフォーマンスを向上させます。アプリケーション (例えば: 音声・動画エンコードツール、科学的なアプリケーション、数学プログラムなど) をリビルドするときにこれは特に顕著で、Arch Linux によって提供されているデフォルトのオプション (またパッケージ) を使うときには有効にならない新しい命令を使えることで大きなアドバンテージを得ることができます。
  
It is very easy to reduce performance by using "non-standard" CFLAGS because compilers tend to heavily blow up the code size with loop unrolling, bad vectorization, crazy inlining, etc. depending on compiler switches. Unless you can verify/benchmark that something is faster, there is a very good chance it is not!
+
コンパイラスイッチによって、ループ展開・悪いベクトル化・狂ったインライン化などでコンパイラはコードサイズを膨張させがちなので"標準外の" CFLAGS を使うことでパフォーマンスを下げるのはとても簡単です。何かが速くなると確認・ベンチマークできない限り、高速化できる可能性はほとんどありません!
  
See the GCC man page for a complete list of available options. The Gentoo [http://www.gentoo.org/doc/en/gcc-optimization.xml Compilation Optimization Guide] and [http://wiki.gentoo.org/wiki/Safe_CFLAGS Safe CFLAGS] wiki article provide more in-depth information.
+
利用可能なオプションの完全なリストは GCC man ページを見て下さい。Gentoo の [https://wiki.gentoo.org/wiki/GCC_optimization Compilation Optimization Guide] [http://wiki.gentoo.org/wiki/Safe_CFLAGS Safe CFLAGS] にはより詳しい情報が載っています。
  
 
====MAKEFLAGS====
 
====MAKEFLAGS====
Line 110: Line 110:
 
</nowiki>}}
 
</nowiki>}}
  
For example, create the directory:
+
例えば、ディレクトリを作成して:
  
 
  $ mkdir /home/$USER/packages
 
  $ mkdir /home/$USER/packages
  
Then modify the {{ic|PKGDEST}} variable in {{ic|/etc/makepkg.conf}} accordingly.
+
{{ic|/etc/makepkg.conf}} の {{ic|PKGDEST}} 変数を修正してください。
  
The {{ic|PACKAGER}} variable will set the {{ic|packager}} value within compiled packages' {{ic|.PKGINFO}} metadata file. By default, user-compiled packages will display:
+
{{ic|PACKAGER}} 変数はコンパイルしたパッケージの {{ic|.PKGINFO}} メタデータファイルの中に {{ic|packager}} 値を設定します。デフォルトでは、ユーザーがコンパイルしたパッケージは以下のように表示されます:
  
 
{{hc|pacman -Qi package|<nowiki>
 
{{hc|pacman -Qi package|<nowiki>
Line 124: Line 124:
 
</nowiki>}}
 
</nowiki>}}
  
Afterwards:
+
設定した後:
  
 
{{hc|pacman -Qi package|<nowiki>
 
{{hc|pacman -Qi package|<nowiki>
Line 132: Line 132:
 
</nowiki>}}
 
</nowiki>}}
  
This is useful if multiple users will be compiling packages on a system, or you are otherwise distributing your packages to other users.
+
システム上で複数のユーザーがパッケージをコンパイルしていたり、あなたのパッケージを他のユーザーに渡す場合にこれを使うと有用です。
  
 
=== 署名チェック ===
 
=== 署名チェック ===
The following procedure is not necessary for compiling with makepkg, for your initial configuration proceed to [[#Usage]]. To temporarily disable signature checking call the makepkg command with the {{ic|--skippgpcheck}} option.
+
以下の手順は makepkg を使ったコンパイルに必須のものではありません、初期設定は [[#使用方法]] に進んで下さい。一時的に署名チェックを無効にしたいときは makepkg コマンドに {{ic|--skippgpcheck}} オプションを付けて呼び出して下さい。
If a signature file in the form of .sig is part of the [[PKGBUILD]] source array, makepkg validates the authenticity of source files. For example, the signature pkgname-pkgver.tar.gz.sig is used to check the integrity of the file pkgname-pkgver.tar.gz with the gpg program. If desired, signatures by other developers can be manually added to the gpg keyring. Look into the [[GnuPG]] article for further information.
+
[[PKGBUILD (日本語)|PKGBUILD]] source 行の一部に .sig の形で署名ファイルがあると、makepkg はソースファイルの信頼性を検証します。例えば、署名 pkgname-pkgver.tar.gz.sig は gpg プログラムによってファイル pkgname-pkgver.tar.gz の整合性のチェックに使われます。望むなら、他の開発者による署名を手動で gpg キーリングに追加することができます。詳細は [[GnuPG]] の記事を見て下さい。
  
 
{{Note|The signature checking implemented in makepkg does not use pacman's keyring. Configure gpg as explained below to allow makepkg reading pacman's keyring.}}
 
{{Note|The signature checking implemented in makepkg does not use pacman's keyring. Configure gpg as explained below to allow makepkg reading pacman's keyring.}}
  
The gpg keys are expected to be stored in the user's {{ic|~/.gnupg/pubring.gpg}} file. In case it does not contain the given signature, makepkg shows a warning.
+
gpg キーはユーザーの {{ic|~/.gnupg/pubring.gpg}} ファイルの中に保存されていると期待されています。与えられた署名が含まれていない場合、makepkg は警告を表示します。
 
{{hc|makepkg|<nowiki>
 
{{hc|makepkg|<nowiki>
 
[...]
 
[...]
Line 149: Line 149:
 
[...]
 
[...]
 
</nowiki>}}
 
</nowiki>}}
To show the current list of gpg keys use the gpg command.
+
現在の gpg キーのリストを表示するには gpg コマンドを使って下さい。
 
{{bc|gpg --list-keys}}
 
{{bc|gpg --list-keys}}
 
If the pubring.gpg file does not exist it will be created for you immediatly.
 
If the pubring.gpg file does not exist it will be created for you immediatly.
Line 170: Line 170:
 
パッケージを作成するには、まず [[Creating Packages (日本語)]] に記述されているようにして [[PKGBUILD (日本語)|PKGBUILD]] を作成するか [[Arch Build System (日本語)|ABS ツリー]]や [[Arch User Repository (日本語)|Arch User Repository]] などから取得してくる必要があります。
 
パッケージを作成するには、まず [[Creating Packages (日本語)]] に記述されているようにして [[PKGBUILD (日本語)|PKGBUILD]] を作成するか [[Arch Build System (日本語)|ABS ツリー]]や [[Arch User Repository (日本語)|Arch User Repository]] などから取得してくる必要があります。
  
{{Warning|Only build and/or install packages from trusted sources.}}
+
{{Warning|信頼できるソースからパッケージをビルド・インストールしてください。}}
  
 
{{ic|PKGBUILD}} を入手したら、PKGBUILD が保存されているディレクトリに移動してから次のコマンドを実行して {{ic|PKGBUILD}} に記述されたパッケージを作成します:
 
{{ic|PKGBUILD}} を入手したら、PKGBUILD が保存されているディレクトリに移動してから次のコマンドを実行して {{ic|PKGBUILD}} に記述されたパッケージを作成します:
Line 199: Line 199:
 
  $ updpkgsums
 
  $ updpkgsums
  
=== Makepkg source PKGBUILD twice ===
+
=== Makepkg PKGBUILD を二度利用する ===
Makepkg sources the PKGBUILD twice (once when initially run, and the second time under fakeroot). Any non-standard functions placed in the PKGBUILD will be run twice as well.
+
Makepkg PKGBUILD を二度実行します (最初に実行した時と、fakeroot 下で2回目)。PKGBUILD に置かれた標準から外れた関数は全て同じく二度実行されます。
  
 
=== WARNING: Package contains reference to $srcdir ===
 
=== WARNING: Package contains reference to $srcdir ===
Line 209: Line 209:
  
 
[http://www.mail-archive.com/arch-general@archlinux.org/msg15561.html Link] to discussion thread.
 
[http://www.mail-archive.com/arch-general@archlinux.org/msg15561.html Link] to discussion thread.
 +
 +
=== 圧縮しないパッケージを作成する ===
 +
パッケージをローカルでインストールしたいだけの場合、圧縮と解凍を避けることでプロセスを高速化できます。{{ic|<nowiki>PKGEXT='.pkg.tar.xz'</nowiki>}} を {{ic|<nowiki>PKGEXT='.pkg.tar'</nowiki>}} に変更してください。
  
 
== 参照 ==
 
== 参照 ==
 
* [https://github.com/pixelb/scripts/blob/master/scripts/gcccpuopt gcccpuopt]: A script to print the gcc cpu specific options tailored for the current CPU
 
* [https://github.com/pixelb/scripts/blob/master/scripts/gcccpuopt gcccpuopt]: A script to print the gcc cpu specific options tailored for the current CPU

Revision as of 14:11, 23 August 2013

概要 help replacing me
makepkg は pacman と一緒にソフトウェアをコンパイル・パッケージするために使われるスクリプトです。この記事ではその設定と使用方法を説明しています。
概括
Template:Package management overview (日本語)
関連項目
Creating Packages (日本語)
資料
makepkg(8) Manual Page
makepkg.conf(5) Manual Page

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

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

設定

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

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

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

Note: あなたが 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}"
Tip: 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 の記事を見て下さい。

Note: The signature checking implemented in makepkg does not use pacman's keyring. Configure gpg as explained below to allow makepkg reading pacman's keyring.

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

If the pubring.gpg file does not exist it will be created for you immediatly. You can now proceed with configuring gpg to allow compiling AUR packages submitted by Arch Linux developers with successful signature checking. Add the following line to the end of your gpg configuration file to include the pacman keyring in your user's personal keyring.

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

When configured as before, the output of gpg --list-keys contains a list of keyrings and developers. Now makepkg can compile AUR packages submitted by Arch Linux developers with successful signature checking.

使用方法

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

# pacman -S base-devel
Note: Before complaining about missing (make) dependencies, remember that the base group is assumed to be installed on all Arch Linux systems. The group "base-devel" is assumed to be installed when building with makepkg.

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

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

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

md5sum を新規作成する

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

$ updpkgsums

Makepkg が PKGBUILD を二度利用する

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

WARNING: Package contains reference to $srcdir

Somehow, the literal strings $srcdir or $pkgdir ended up in one of the installed files in your package.

To identify which files, run the following from the makepkg build directory:

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

Link to discussion thread.

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

パッケージをローカルでインストールしたいだけの場合、圧縮と解凍を避けることでプロセスを高速化できます。PKGEXT='.pkg.tar.xz'PKGEXT='.pkg.tar' に変更してください。

参照

  • gcccpuopt: A script to print the gcc cpu specific options tailored for the current CPU