Arch LinuxでGoをパッケージ化するチュートリアル
入門
このチュートリアルでは、Arch Linuxユーザーリポジトリ (AUR)用のGoアプリケーションをパッケージ化する方法をご紹介します。AURアカウントを作成し、PKGBUILDテンプレートを見ていき、Goに関するArchのWikiガイドラインに従うことになります。このチュートリアルを終えるころには、Goを使った自分のArchパッケージをAURにアップロードできるようになります。
必要条件
- Git
- Go
- Arch Linux x86_64
- AURアカウント
AURアカウントとSSHキーの設定
SSH公開鍵をこの形式で入力します。残りは任意です。
SSH公開鍵を生成して入力します。
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
$ cat ~/.ssh/aur_rsa.pub
次に、~/.gitconfig
を変更します。
[url "ssh://aur@aur.archlinux.org/"]
insteadOf = https://aur.archlinux.org/
insteadOf = http://aur.archlinux.org/
最後に、フォームの答えを入力して確認するためのコマンドを実行します。
PKGBUILDの理解
/usr/share/pacman/PKGBUILD.proto
を見てみると、入力できるフィールドがわかります。
pkgnameとpkgversionはソフトウェアパッケージの名前と提供されるソフトウェアのバージョンです。
pkgrelとepochはpkgversionのサブバージョンを細かく指定する方法ですが、ほとんどの場合は使用しません。
pkgdescはソフトウェアの説明、archはアーキテクチャ(ほとんどの場合はx86_64)です。
urlとlicenseは、ソフトウェアリポジトリのURLと実際のライセンス名で、これらは非常に重要です。
groupsは複数のソフトウェアパッケージを一緒にインストールする方法を提供し、例えばgnome(非常に大きなソフトウェアグループ)のように考えることができます。
dependsはランタイム依存関係です。
makedependsはコンパイル時の依存関係です。
checkdependsはチェック/テストの依存関係です。
optdependsはオプションのランタイム依存関係です。
providesは別のパッケージに代わる代替品として使用されます。
conflictsは、競合するパッケージをインストールしないために使用されます。
replacesは、このビルドパッケージが置き換えることができるものとして使用されます。
backupは、パッケージをアップグレードする際にバックアップされるべきファイルをリストアップします。
optionsには、コンパイラフラグや圧縮設定などの項目が含まれる場合があります。
installは、インストールプロセス中に実行するカスタムインストールスクリプトやコマンドを指定するために使用します。
changelogは、変更履歴またはリリースノートファイルの場所を指定します。
sourceはパッケージ構築に必要なソースファイルをリストアップします。
noextractはビルドプロセス中に抽出しないファイルを指定します。
md5sumsやb2sums、sha512sums、sha256sumsはチェックサムで、必要でなければ省略もできます。
validpgpkeysも上記のチェックサムと同様です。
また、下記の4つの一般的な標準PKGBUILDシェル関数があります。
* `prepare()`は、ビルドプロセスを開始する前にソースコードに変更を加えたりパッチを適用するために使用されます。
* `build()`は、ソフトウェアパッケージの実際のコンパイルやビルドが行われる場所です。
* `check()`は、ソフトウェアが期待通りに動作するかどうかをテストし、インストール前にパッケージの正確性を検証するために使用されます。
* `package()`は、ビルドされたファイルをインストールに適したパッケージ形式にする場所です。ファイルを最終的なインストールディレクトリに対応する一時的なディレクトリ構造にコピーします。
.gitignoreの作成
パッケージを何度もビルドして確認するため、誤ってアーティファクトをプッシュしないように、.gitignore
を推奨します。以下が私の.gitignore
ファイルです。
*
!/.gitignore
!/.SRCINFO
!/PKGBUILD
Goのための基本的なPKGBUILD
頭の中を駆け巡って、私はk3sup
のために非常にシンプルなPKGBUILD
ファイルを作成しました。これはk3sクラスタをブートストラップするための素晴らしいツールです。k3supをチェックして、気に入ったらサポートしてください。
pkgnameに関する友情リマインダー:xyzpackageはソースの安定版からビルドされることを意味し、xyzpackage-gitはソースの最新コミットからビルドされることを意味し、xyzpackage-binはプレビルトされたバイナリをビルドフェーズなしでフェッチすることを意味します。
# 以下は簡略化したPKGBUILDファイルですので、実際には本文中の例示に従ってください。
Arch Wikiはこれについて詳しいガイドを用意しており、こちらにアクセスできます。要するにnamcap
というプログラムが必要であり、sudo pacman -S namcap
と実行してから、PKGBUILDと生成された.zstアーカイブにnamcapを実行します。
$ namcap ./PKGBUILD
$ makepkg -s && namcap k3sup-0.13.0-1-x86_64.pkg.tar.zst
Goのためのセキュリティ強化されたPKGBUILD
# 以下は簡略化したPKGBUILDファイルですので、実際には本文中の例示に従ってください。
makepkgを実行した後、再度namcap
を実行して確認します。
$ namcap ./PKGBUILD
$ makepkg -s && namcap k3sup-0.13.0-1-x86_64.pkg.tar.zst
AURにプッシュしましょう。毎回プッシュする前に.SRCINFO
を更新することを忘れないでください。また、AURで既に取られているパッケージ名にも注意してください。
$ updpkgsums && makepkg --printsrcinfo > .SRCINFO
$ git init
$ git remote add origin https://aur.archlinux.org/k3sup.git
$ git add . && git commit -m "initial release"
$ git push -u origin master
最終結果
$ git clone https://aur.archlinux.org/packages/k3sup
$ cd ./k3sup && less ./PKGBUILD
$ makepkg -si
参考情報
「勝利は通常、より訓練された将校と兵士を持つ軍に属する」
— 孫子
(翻訳中に省略されるべき専門用語やソフトウェアのコマンド、パッケージ名はそのまま残しています。)
こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/mrwormhole/packaging-go-for-arch-linux-tutorial-3cin