NetBSD pkgsrc を使う
pkgsrc とはなんぞや
pkgsrc is a framework for managing third-party software on UNIX-like systems, currently containing over 17,800 packages. It is the default package manager of NetBSD and SmartOS, and can be used to enable freely available software to be built easily on a large number of other UNIX-like platforms.
pkgsrc は NetBSD で標準で使われているパッケージマネージャーです。
なお NetBSD 以外の OS でも使えます。 20 年近く前ですが Plamo Linux で使ったり、 Mac OS X で使ったことはあります。 ここでは NetBSD で使うことを前提とします。
- https://www.area51.gr.jp/~rin/pcmemo/usepkgsrc (テキストファイルなので UTF-8 で読めます)
- https://www.area51.gr.jp/~rin/pcmemo/macosxpkgsrc (テキストファイルなので UTF-8 で読めます)
pkgsrc は四半期ごとにリリースされていて 2020Q4 や 2021Q1 といったタイミングでリリースされます。 安定を求める場合はこれらのリリースを使えばよいかと。
もちろん current もあります。人柱になりたい場合は current を使います。
pkgsrc でパッケージをインストールする
pkgsrc - install source packages の手順に従います。
current と stable へのリンクが書かれてますが、ここでは stable を使うことにします。 stable は四半期ごとにリリースされた最新のものと同じです。 現在であれば 2021Q1 と同じです。
tar をダウンロードします。
% curl -O https://cdn.netbsd.org/pub/pkgsrc/stable/pkgsrc.tar.xz
NetBSD インストール直後など curl も wget も無い場合は ftp でも取得できます。
% ftp ftp://ftp.NetBSD.org/pub/pkgsrc/stable/pkgsrc.tar.xz
展開します。
% tar xJf pkgsrc.tar.xz -C /usr
たとえば vim をインストールする場合はこのようにします。 make するだけです。
% cd /usr/pkgsrc/editors/vim
% make install clean clean-depends
パッケージを全部アップグレードする
たとえば 2021Q2 がリリースされたのでアップデートしたいという場合は 2021Q2 の stable をダウンロードして /usr/pkgsrc に展開して pkg_rolling-replace を実行します。 既存の /usr/pkgsrc は rm するなり mv するなりしておくこと。
% rm -rf /usr/pkgsrc
# ダウンロードして展開する。作業は省略。
% cd /usr/pkgsrc
% pkg_rolling-replace -rsuv
参考
@miwarin pkg_admin rebuild=YES pkg1 pkg2... したのち、pkgtools/pkg_rolling-replace 入れて、pkg_rolling-replace すれば放置可能。
よく使うオプション
pkgsrc のオプションは /etc/mk.conf に書きます。 たとえば手元で使っている NetBSD の /etc/mk.conf はこんな感じです。
ACCEPTABLE_LICENSES+=postfix-license
ACCEPTABLE_LICENSES+=vim-license
ACCEPTABLE_LICENSES+=gnu-agpl-v3
X11_TYPE=modular # システムのX11(/usr/X11R6, /usr/openwin, ...)を使わない場合。/usr/pkgsrc/x11/modular-xorg-server が使われるようになる。らしい
PKG_OPTIONS.ImageMagick=-x11 -jasper
PKG_OPTIONS.scmgit=-scmgit-gui
ALLOW_VULNERABLE_PACKAGES=1
PKG_OPTIONS.emacs=-dbus -gtk -svg -x11 -xft2 -xaw -motif -nextstep
デバッグ的な何か
pkgsrc の中身を見れば分かりますが pkgsrc は Makefile の塊です。 ただし、 GNU make ではなく BSD make です。 なので、 オプションなどは BSD make の作法に従います。
pkgsrc で作業しているときに変数の値を表示する場合などは以下のようにします。
変数の値を確認する
% make -V WRKSRC
${WRKDIR}/${DISTNAME}
すべての変数の値を確認する
% make show-all
変数にはこういうものがある ( pkgsrc/mk/misc/show.mk より )
# show-all:
# Prints a list of (hopefully) all pkgsrc variables that are visible
# to the user or the package developer. It is intended to give
# interested parties a better insight into the inner workings of
# pkgsrc. Each variable name is prefixed with a "category":
#
# * "usr" for user-settable variables,
# * "pkg" for package-settable variables,
# * "sys" for system-defined variables.
SSL ルート証明書をインストールする
パッケージの中には SSL ルート証明書がインストールされていることを前提としたものがあります。 SSL ルート証明書は NetBSD に用意されていないのでパッケージでインストールします(※)。
mozilla-rootcerts の SSL ルート証明書をインストールします。
% cd /usr/pkgsrc/security/mozilla-rootcerts
% make install clean clean-depends
% mozilla-rootcerts install
ここに入ります。
/etc/ssl/certs/ca-certificates.crt
※ NetBSD として SSL ルート証明書を準備しておけばよかろう、というツッコミがあると思いますが、歴史的経緯により決定されていないようです。 ref. system default root certificates?
作業中のエラー
pkg_rolling-replace -rsuv でエラーになった場合
データベースの不整合が起きるとエラーが発生します。 たとえばこう
===> Updating using binary package of vim-share-8.2.1709
/usr/bin/env /usr/sbin/pkg_add -K /var/db/pkg -U -D /usr/pkgsrc/editors/vim-share/work/.packages/vim-share-8.2.1709.tgz
pkg_add: Can't open +CONTENTS of depending package vim-8.0.1379
pkg_add: 1 package addition failed
*** Error code 1
/usr/pkgsrc で pkg_admin rebuild したり
% pkg_admin rebuild=YES vim-share-8.2.1709
pkg_admin rebuild-tree などして地道に解決していきます。
% pkg_admin rebuild-tree
git で SSL エラーになる場合
pkgsrc というか git の使い方です。
たとえばこんなエラーが起きるとします。
% git clone https://github.com/motemen/go-cli
Cloning into 'go-cli'...
fatal: unable to access 'https://github.com/motemen/go-cli/': SSL certificate problem: unable to get local issuer certificate
SSL ルート証明書をインストールして ~/.gitconfig に書きます。
[http]
sslCAinfo = /etc/ssl/certs/ca-certificates.crt
暫定回避する場合はこのようにします。
% git config --global http.sslVerify false
different version xxxx already installed
と言われる場合
なにかのパッケージを make install している途中で
different version xxxx already installed
などと言われたら pkg_tarup をインストールして、
% cd /usr/pkgsrc/pkgtools/pkg_tarup/
% make install clean clean-depends
怒られたパッケージのディレクトリへ移動し make replace を実行します。
% cd /usr/pkgsrc/どこかの/パッケージ
% make replace
その後 元々インストールしようとしていたパッケージへ戻り make install します。
Discussion