トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

手っ取り早くpkgsrcとかを使うためのMakefile

はじめに

この文書はNetBSD Advent Calendar 2016の22日目の記事として書かれました。(その後、少しアップデートされています。)

pkgsrcは、NetBSDの公式パッケージシステムです。このパッケージシステムの特徴として、他のUN*X系OSでも使うことができます。

他の*BSDでいう、"ports"にあたるものです。(ちなみに他の*BSDでいう"packages"は、NetBSDでは、"binary packages"という言い方をします。)

使い始める時や、その後のアップデートにちょっとだけ便利なMakefileを紹介します。

pkgsrcはどうやって使い始めて、その後最新を保っていけばいいの?

 公式の方法

公式のpkgsrc guideでは、cvsを使うやり方が紹介されています。cvsは、NetBSDではbase systemに入っているので、いきなり、cvsで取得してもよいですし、ftp or httpでsnapshotを取ってきて、そのあと、cvsで最新にするのでもいいです。後者の方法だとこんな感じです。

 # cd /tmp
 # ftp https://cdn.netbsd.org/pub/pkgsrc/current/pkgsrc.tar.xz
 # cd /usr
 # tar xzf /tmp/pkgsrc.tar.xz
 # cd pkgsrc
 # cvs update -dP

cdn.netbsd.orgは、今年の7月にできた新しいミラーで、高速です。httpsにも対応しています。

さて、cvs update -dPはどれくらいかかるでしょうか。ConoHa上のNetBSDサーバで2016/12/22に試してみたところ、151秒かかりました。diskが速いととても速いですが、diskが遅いとかなりかかります。

cvs update -dPが終わり、最新にアップデートした状態で、すぐ2回めを行ってみます。全くアップデートがないはずですが、同じくらいかかります。(141秒かかりました。)もし、アップデートがあれば、さらにかかります。要するに遅いのです。

また、NetBSD以外でpkgsrcを使おうとすると、たいてい(?)、cvsをインストールしないといけません。ちょっとめんどう。

 gitを使う方法

公式の方法ではないのですが、gitを使う方法があります。よく知られているのは、NetBSDの開発者の方がGitHubにミラーされているリポジトリを使う方法です。snapshotはないので、いきなりcloneします。 NetBSD公式のGitHubミラーが誕生したので、そこからcloneします。(なお、zipダウンロード後、それを展開した方が、低速回線では早いです。)

 # cd /usr
 # git clone --depth 1 git://github.com/NetBSD/pkgsrc.git

初回にかかる時間ははネットワークの速さにかなり依存します。cvsと同じく、ConoHa上のNetBSDサーバで2016/12/22に試してみたところ、95秒かかりました。snapshotをとってきたあとに、cvsをつかってアップデートする方法よりも速かったです。

さて、cvsのときと同様に、最新にアップデートした状態で、アップデート(git pull)をすぐ行ってみます。

 # cd /usr/pkgsrc
 # git pull

全くアップデートがないので、すぐ終わります。1秒かかりませんでした。アップデートがあってもcvsと比べてとても速いです。

また、NetBSD以外でpkgsrcを使おうとする場合、最近はたいてい(?)gitは入っているような気がします。そういう場合は楽です。

また、pkgsrc-wipも使おうとする場合は、gitを使う方法しかありません。どっちもgitの方がわかりやすいかもしれません。

/usr/Makefile

 DragonFly BSDのMakefile

gitを使うにしても、新規に利用を開始する際、記憶力の弱いわたしは、いつもgitコマンドの引数を忘れてしまいます。また、pkgsrc-wipはどうだったとか、NetBSD上で使う場合、srcやxsrcもgitで取ってきたくなります。引数はどうだったっけ?

そこで、思い出したのが、DragonFly BSDでした。DragonFly BSDは一時期、公式パッケージシステムとして、pkgsrcを使っており、DragonFly BSDプロジェクト独自で、gitリポジトリにpkgsrcをインポートして、それを使うようになっていました。

便利だったのは、/usr/Makefileが用意されており、そこに使い始めとアップデートのためのターゲットが書かれていたことです。具体的には、

 # cd /usr
 # make 

と入力すると、ヘルプとしてターゲットの一覧が出てきて、あとは選ぶだけでした。

 # make pkgsrc-create-shallow

これだけで、あとは使い始められました。アップデートも、

 # cd /usr
 # make pkgsrc-update

とするだけ。引数がどうだったとか考えなくてもよく、便利でした。

 NetBSD用を作ってみる

この、DragonFly BSDの/usr/Makefileを真似て、/usr/Makefileを作ってみました。

NetBSD用(BSD make用):http://www.rururu.org/~isihara/Makefile.usr.bmake

NetBSD用のは、pkgsrcに加え、pkgsrc-wip・src・xsrc用のターゲットがあり、使うことができます。こんな感じ。

 # cd /usr
 # ftp -o Makefile http://www.rururu.org/~isihara/Makefile.usr.bmake
 # make
 HELP:
    make pkgsrc-create              - fetch initial pkgsrc repository from the net
    make pkgsrc-create-shallow      - fetch initial history-free pkgsrc repository
    make pkgsrc-create-repo         - fetch pkgsrc repository only, no checkout
 
    make pkgsrc-wip-create          - fetch initial pkgsrc-wip repository from the net
    make pkgsrc-wip-create-shallow  - fetch initial history-free pkgsrc-wip repository
    make pkgsrc-wip-create-repo     - fetch pkgsrc-wip repository only, no checkout
 
    make src-create                 - fetch initial src repository from the net
    make src-create-shallow         - fetch initial history-free src repository
    make src-create-repo            - fetch src repository only, no checkout
 
    make xsrc-create                - fetch initial xsrc repository from the net
    make xsrc-create-shallow        - fetch initial history-free xsrc repository
    make xsrc-create-repo           - fetch xsrc repository only, no checkout

あとは、makeなんとかするだけ。たとえば、

 # make pkgsrc-create-shallow
 # make pkgsrc-wip-create-shallow

とすると、/usr/pkgsrcと、/usr/pkgsrc/wip ができます。

アップデートもかんたん。ターゲットを覚えておく必要はなく、

 # cd /usr
 # make
 HELP:
    make pkgsrc-update              - update your pkgsrc repo from the net
 
    make pkgsrc-wip-update          - update your pkgsrc-wip repo from the net
 
    make src-create                 - fetch initial src repository from the net
    make src-create-shallow         - fetch initial history-free src repository
    make src-create-repo            - fetch src repository only, no checkout
 
    make xsrc-create                - fetch initial xsrc repository from the net
    make xsrc-create-shallow        - fetch initial history-free xsrc repository
    make xsrc-create-repo           - fetch xsrc repository only, no checkout

と、必要なターゲットはヘルプを見ればよいのです。

 NetBSD以外でも使いたい

自分がCentOS上でもpkgsrcを使っており、NetBSD上と同様に/usr/Makefileが同様に欲しくなり、GNU make用の/usr/Makefileもみようみまねで作ってみました。

NetBSD以外用(GNU make用):http://www.rururu.org/~isihara/Makefile.usr.gmake

こちらは、pkgsrcとpkgsrc-wipのみです。全く同様に使うことができます。

 # cd /usr
 # curl http://www.rururu.org/~isihara/Makefile.usr.gmake > Makefile
 # make
 HELP:
    make pkgsrc-create              - fetch initial pkgsrc repository from the net
    make pkgsrc-create-shallow      - fetch initial history-free pkgsrc repository
    make pkgsrc-create-repo         - fetch pkgsrc repository only, no checkout
 
    make pkgsrc-wip-create          - fetch initial pkgsrc-wip repository from the net
    make pkgsrc-wip-create-shallow  - fetch initial history-free pkgsrc-wip repository
    make pkgsrc-wip-create-repo     - fetch pkgsrc-wip repository only, no checkout

QA

 取ってくるbranchは?どうやって変えたらいいの?

NetBSD用のデフォルト設定は以下のとおり。

  • pkgsrc
    • current
  • pkgsrc-wip
    • master
  • src
    • netbsd-7
  • xsrc
    • netbsd-7

NetBSD以外用のデフォルト設定は以下のとおり。

変更のしかたは、createする前に、Makefileを直接編集してもいいし、

 # make pkgsrc-create-shallow BRANCHPS=pkgsrc-2016Q3

などとcreateする時に、makeの引数にしてもいいよ。(Makefileの先頭に BRANCHなんとか、という変数が定義してあるので、その変数名で指定します。)

 pkgsrcの4半期リリースの切り替えはどうやったらいいの?

DragonFly BSDの(当時の)公式ドキュメントのとおりで、コピペになるんだけど、以下のとおり。

例として、2016Q1から、2016Q2に切り替える場合を示してみる。

 # cd /usr/pkgsrc
 # git branch pkgsrc-2016Q2 origin/pkgsrc-2016Q2
 Branch pkgsrc-2016Q2 set up to track remote branch pkgsrc-2016Q2 from origin.
 # git checkout pkgsrc-2016Q2
 Checking out files: 100% (11006/11006), done.
 Switched to branch 'pkgsrc-2016Q2'
 # git pull
 remote: Counting objects: 9, done.
 remote: Compressing objects: 100% (3/3), done.
 remote: Total 9 (delta 6), reused 9 (delta 6), pack-reused 0
 Unpacking objects: 100% (9/9), done.
 From git://github.com/NetBSD/pkgsrc
    0d1dde8..3ce9352  trunk      -> origin/trunk
 Already up-to-date.
 # git branch
   pkgsrc-2016Q1
 * pkgsrc-2016Q2

あとは、今までどおり、

 # cd /usr
 # make pkgsrc-update

で、2016Q2をアップデートできます。

 NetBSD以外用が使えないよ

CentOS6のGNU make (GNU Make 3.81)以外ではテストしてないので、だめかもしれない。もしそうであれば、ごめんなさい。(どこをどうやって直したらいいか、教えてあげるぞ、という親切な方は、@tisihara に連絡くれるとうれしいです。)

あとがき

NetBSD使っているひとって、みんな古くから使っていて初心者なんかいなさそうで(そんなことはない)、英語なんかもすらすら読めて(ぼくはちがう)、デバイスドライバ書いたりカーネルいじったりしていて(ぼくは超ちがう)、っていうすごいはっかー、ていう感じがします。

そんなことは全然全くさっぱりちっともないただの利用者たるぼくですが、何か書いてみることにしました。誰かのお役に立てれば幸いです。

もし、あなたがpkgsrcの情報を探しているのであれば、"pkgsrcめも"もご覧いただくと、ほしい情報があるかもしれません。

ではでは。

明日のAdvent Calendarは

ひきつづきぼくです。何書くかまだ決まっていません(汗 "NetBSDでつかえるUSB無線LANアダプターの調べ方"という文書を書きました。

間違いの指摘や、ご意見などは、FrontPageにある連絡先にメールを下さるとうれしいです。

最終更新時間:2017年09月06日 23時54分35秒