NetBSD pkgsrc-wip を使う
pkgsrc-wip とはなんぞや
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