🐥

NetBSD pkgsrc-wip を使う

2021/05/24に公開

pkgsrc-wip とはなんぞや

The pkgsrc-wip project

What is pkgsrc-wip?
pkgsrc-wip (work in progress) is a project to get more people actively involved with creating packages for pkgsrc, a portable packaging system coming from NetBSD.

パッケージが pkgsrc ( NetBSD 標準のパッケージマネージャ )に取り込まれる前の作業リポジトリです。

本家 pkgsrc と違い、 wip なので誰でも軽率にアクセス権を貰えてパッケージを追加できます。

また、本家 pkgsrc に取り込まれる前に pkgsrc-wip でパッケージを洗練させ( lint のエラーや警告を無くしたり ) その後 本家 pkgsrc に send-pr する、という作業手順が推奨されているようです( 要出典 )

ユーザーとして使う

pkgsrc-wip とはいえ中身は pkgsrc と同じなので、 pkgsrc のパッケージと同じように管理します。

慣習として wip は /usr/pkgsrc/wip に設置します。パッケージは wip/<パッケージ> という PATH にあります。 本家 pkgsrc のパッケージは /usr/pkgsrc/<カテゴリ>/<パッケージ> という PATH にありますが、 pkgsrc-wip は wip/ の 直下にパッケージがあります。

では実際に使ってみます。

git clone で取得します。

% cd /usr/pkgsrc/
% git clone git://wip.pkgsrc.org/pkgsrc-wip.git wip

あとは普通に make します。これだけです。

% cd wip/<パッケージ>
% make install 

開発者として使う

パッケージを pkgsrc-wip に追加したくなったら pkgsrc-wip へのコミット権を申請します。

コミット権を申請する

pkgsrc-wip は git で管理されているので、リポジトリにアクセスできるようにコミット権を貰います。 手順は The pkgsrc-wip project -- committer access にあるとおりです。 鍵を生成し、 公開鍵を Thomas Klausner へ送付れば OK です。

「○○というパッケージを pkgsrc-wip に追加したいんだけど」等と書いてメールを送ると Thomas から「いいよ!バシバシやってくれよ!」といった返事とともに、割りと気軽にコミット権をくれます。

作業

git の操作については上記ページに書いてあるとおりにやります。

開発者ユーザーを wip/.git/config に書いておきます。

[remote "origin"]
        url = <username>@wip.pkgsrc.org:/pkgsrc-wip.git

ここではホームディレクトリに pkgsrc-wip を clone して git の作業し、 make は /usr/pkgsrc/wip でおこなう、ということとします。( たんに /usr/pkgsrc/wip で git 作業する手段を見つけてないだけです。こうしないといけないわけではありません )

上記のような場合は union mount しておくと便利です。

% cd ~/
% git clone <username>@wip.pkgsrc.org:/pkgsrc-wip.git wip
% sudo mkdir /usr/pkgsrc/wip
% sudo mount_union /home/rin/wip /usr/pkgsrc/wip

ビルドするときはいつも通りにこうします。

% cd /usr/pkgsrc/wip/<パッケージ>
% make install

パッケージを git 操作するときは ~/wip で作業します。 git の master ブランチで作業するのでガンガン push しましょう。

% cd ~/wip
% git add <パッケージ>/Makefile
% git commit
% git push

git pull したら差異があった場合

hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint:
hint:   git config pull.rebase false  # merge
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.

The pkgsrc-wip project -- committer access

If you find out that there were changes in between your last pull and the push, please rebase your changes.

ということで rebase を設定しておきます。

git config pull.rebase true

Discussion