PKGBUILDファイルは、ArchLinuxおよびManjaroなどのその派生物用にパッケージを構築および作成する方法です。
Arch Linuxのユーザーが厳選したPKGBUILDのリポジトリであるAURを使用したことがあれば、少し自分でそれらに出くわしたこともあるかもしれません。
しかし、PKGBUILDからインストール可能なパッケージにどの程度正確に移行しますか? 2つの間で正確に何が起こっているのですか、そしてどのようにあなたはあなた自身のパッケージのためにそれらを作ることができますか?この記事でそれらを学びます。
PKGBUILDの基本
Bashやその他のシェルに精通している場合は、PKGBUILDがいくつかの変数を含むシェルスクリプトにすぎないことを知っていただければ幸いです。
PKGBUILDファイルは変数と関数で構成されており、これらはすべてパッケージ自体とそのビルド方法を定義するために使用されます。
PKGBUILDからパッケージを作成するには、makepkgコマンドラインユーティリティを使用します。 PKGBUILDを取得したら、makepkg
を実行するだけです。 PKGBUILDを含むディレクトリ内に、インストール可能なパッケージがあります!

このチュートリアルでは、「HelloWorld!」を印刷する先ほど作成したパッケージについて説明します。実行時:

セットアップ
このチュートリアルに従うには、いくつかのファイルを作成する必要があります。
まず、 PKGBUILDというファイルを作成する必要があります 。まだ明確にされていない場合、これはパッケージを作成するための「レシピ」として機能します。
作成する必要のあるもう1つのファイルは、 hello-world.shというファイルです。 。その目的については後で説明します。
1つのコマンドでこれらのファイルの両方を作成することもできます。
touch PKGBUILD hello-world.sh
lsコマンドでファイルが作成されたことを確認できます:

そして、あなたは行く準備ができています!
PKGBUILDファイルの設定
ファイル全体をコピーして貼り付ける代わりに、すべての行を入力するので、発生しているすべての目的をよりよく理解できます。この方法で学ぶことを強くお勧めします ArchLinux用のパッケージの作成に関するArchWikiの記事。
この記事では、PKGBUILDで設定できるすべてのオプションについて説明しているわけではなく、できるだけ早く実行できるように一般的に使用されているオプションについても説明します。
それが邪魔にならないように、テキストエディタを開いて、すぐに始めましょう!
pkgname
まず最初に、pkgname変数。これは、インストール時にパッケージの名前を定義するものであり、ArchLinuxのパッケージマネージャーpacmanがパッケージを追跡する方法です。
この変数(およびその他の変数)の形式は、variable =valueの形式を取り、左側に変数名、右側に変数の値を等号で区切ります。
パッケージ名を設定するには、PKGBUILDに次のように入力します。
pkgname="hello-world"
- 別のパッケージ名を設定するには、
hello-world
を置き換えます パッケージの名前で。 - これは、プログラムの実行に使用されるコマンドを設定しません。これは、以下の
package()
で少し処理されます セクション。
pkgver
変数名自体に記載されているように、これによりパッケージのバージョン(1.0.0)が設定されます。これは、ユーザーがシステムを更新するときに役立ちます。より高いバージョンを設定すると、ユーザーはアップグレードを求められるためです。
設定するには、PKGBUILDに次のように入力します(前の行の後):
pkgver="1.0.0"
pkgrel
これはpkgver変数に関連しており、通常は知っておく必要はありません。ただし、pkgver変数と同様に、より大きな数値に移動すると、アップグレードについてユーザーに通知されます。
これは、PKGBUILD自体への変更など、pkgverを同じままにする必要があるすべての変更に役立ちます。これは、使用するプログラム用にPKGBUILDを作成し(そしてパッケージと同じバージョンを維持したい場合)、PKGBUILD自体のバグを修正する必要がある場合に役立ちます。
変数を設定するには、PKGBUILDに次のように入力します。
pkgver="1"
この変数は常に必要です 1から始めて、一度に1つずつ上に移動します。 pkgverの場合 pkgver自体がアップグレードが利用可能であることをユーザーに通知するため、それ自体が上に移動します。これは1にリセットできます(また、リセットする必要があります)。
pkgdesc
これにより、パッケージの説明が設定されます。これは、パッケージをより適切に識別するために使用されます。
設定するには、説明を引用符で囲みます:
pkgdesc="Hello world in your terminal!"
アーチ
この変数は、パッケージと互換性のあるアーキテクチャを設定します。ほとんどの場合、アーキテクチャはほとんど役に立たないため、アーキテクチャが何であるかを理解していなくても問題ありません。
とにかく、makepkgは、パッケージがシステムと互換性があることを認識できるように設定する必要があります。
この変数は複数の値の設定をサポートしているため、makepkgには以下に示すような異なる構文が必要です。
設定するには、PKGBUILDに次のように入力します。
arch=("x86_64")
これに複数の値を設定する場合は、次のように各値をスペースと引用符で区切ります。 arch =(“ x86_x64”“ arm”)
依存
これにより、パッケージが機能するために必要なすべてのパッケージが一覧表示されます。 アーチのように 、複数の値を含めることもできるため、括弧構文を使用する必要があります。
パッケージには依存関係がないため、PKGBUILDにこのフィールドを入力する必要はありません。ただし、パッケージに依存関係がある場合は、 archと同じ構文を使用します。 。
optdepends
これは、機能するために必要ではないが、追加の機能のために必要なパッケージをリストします。
これは、依存すると同じ構文に従います。 。
競合
これにより、pacmanは、パッケージが動作したり、望ましくない方法で動作したりする原因となるパッケージを通知します。
ここにリストされているパッケージは、インストールする前にアンインストールされます。
これは、依存すると同じ構文に従います。 同様に。
ライセンス
これは、プログラムがライセンスされているソフトウェアライセンスを定義します。ライセンスの選択についてサポートが必要な場合は、ArchWikiにいくつかの情報があります。これをcustom
に設定します これを何に設定すればよいかわからない場合でも機能します。
これはarchと同じ構文を取ります および依存 :
license=("custom")
ソース
これは、makepkgがパッケージのビルドに使用するファイルを認識する方法です。これには、ローカルファイルやURLなど、さまざまな種類のソースを含めることができます。
ローカルファイルを追加するときは、PKGBUILDに関連するファイルの名前を入力します。つまり、次のディレクトリレイアウトを検討します。
PKGBUILD
file.txt
src/file.sh
file.shを含める場合 PKGBUILDでは、 src / file.shと入力します。 その名前として。
URLを入力するときは、完全なURL、つまりhttps://mirrors.creativecommons.org/presskit/logos/cc.logo.large.pngを入力するだけです。
パッケージに必要なのはhello-world.shファイルのみで、PKGBUILDと同じディレクトリにあるため、 sourceの値として名前を入力するだけです。 。
この変数もarchと同じ構文を使用します および依存 :
source=("hello-world.sh")
sha512sums
これは、ソース内のファイルを確認するために使用されます 正しく変更またはダウンロードされていません。この値の取得に関する情報は、PKGBUILDに関するArchWikiの記事に記載されています。
これを設定したくない場合(または、ローカルファイルの場合など、設定する必要がない場合)は、ソース内のすべてのファイルにSKIPを入力するだけです。 変数:
sha512sums=("SKIP")
package()
これは、実際にパッケージを作成するための最後の、そして最も重要な部分です。これを使用するときは、次の2つの変数を知っておくことが重要です。
- $ {srcdir} :これは、makepkgがファイルをソースに配置する場所です。 変数。これは、ファイルを操作したり、ファイルに必要なその他の変更を加えたりできるディレクトリです。
- $ {pkgdir}:これは、システムにインストールされるファイルを配置する場所です。
$ {pkgdir}のフォルダー構造は、実際のシステム上にあるかのように設定されます(つまり、$ {pkgdir} / usr / bin / hello-worldは、pacmanを使用してインストールするときにファイル/ usr / bin/hello-worldを作成します。
package()には、パッケージの作成に使用されるコマンドのリストが含まれています。
したがって、(仮に)Linuxを読み取るファイルが/usr/share/motto.txtでWindowsよりも優れている必要がある場合は、次のように実行します。
package() {
mkdir -p "${pkgdir}/usr/share"
echo "Linux is superior to Windows" | tee "${pkgdir}/usr/share/motto.txt"
}
上記のコマンドに関する注意事項:
- ${pkgdir}にはいいえが含まれています 最初はその中のディレクトリ。 mkdirコマンドをスキップした場合、teeはディレクトリが存在しないことを示すエラーを出力します。
- ディレクトリを指定するときは、常に それらの前に${pkgdir}を付けます または${srcdir} 変数。 /usr/share/motto.txtのようなものをそのようなものなしで入力すると、現在実行中のシステムのリテラルディレクトリ/usr/share/motto.txtを指します。
PKGBUILDの場合、ターゲットシステムの/ usr / bin/hello-worldにファイルhello-world.shを配置します。また、ファイルに「Hellotoyou!」と表示させます。実行したとき。
これを行うには、PKGBUILDに次のように入力します。
package() {
echo 'Hello to you!' > "${srcdir}/hello-world.sh"
mkdir -p "${pkgdir}/usr/bin"
cp "${srcdir}/hello-world.sh" "${pkgdir}/usr/bin/hello-world"
chmod +x "${pkgdir}/usr/bin/hello-world"
}
これで完了です。結果のファイルは次のようになります。

次に、makepkg -si
を使用してパッケージをビルドしてインストールします。 コマンドを実行してから、hello-world
を実行します ターミナルで出力を確認してください。

まとめ
そして、ちょうどそのように、あなたはあなたの最初のPKGBUILDを作りました!あなたは自分自身のために、そしておそらくAURのために実際のパッケージを作るための道を進んでいます。
質問がありますか、それとも正しく機能していないものがありますか?下のコメント欄に投稿してください。