山ブログ

山間部

pkgsrcのメモ

Linuxで使えるhomebrewのようなものが無いか探していて、pkgsrcを見つけた。pkgsrcはNetBSDのパッケージマネージャーとして開発されたツールだが、LinuxMac OS Xでも使う事ができるらしい。NFSでホームディレクトリを共有しているサーバ群で同一の環境を使いたかったので、パッケージを色々と入れてみた。CPUが異なっていたり、GCCのバージョンがそれぞれ違うサーバ上で動作する環境を構築するには若干の設定が必要だったのでメモ。

インストール

インストールにはCVSを使う。homebrewがgitのリポジトリでFormulaを配布しているような感じ。ドキュメント通りにチェックアウトすると、$HOME以下にpkgsrcディレクトリができる。pkgsrcディレクトリ以下にパッケージが入っていて、そこに移動してbmakeするとビルドが実行されるようになっている。

$ cvs -danoncvs@anoncvs.netbsd.org:/cvsroot checkout pkgsrc
$ cd pkgsrc/bootstrap
$ ./bootstrap --unprivileged

bootstrapスクリプトを走らせるとBSD Make等のパッケージをビルドするのに必要なツールがインストールされる。ルートを持っていないので--unprivilegedオプションを加える。

無事インストールができたらまずGCCをビルドする。使っているサーバはものによってGCCのバージョンが違っているし、古いものばっかりなので新しいものを入れた。

$ cd pkgsrc/lang/gcc48
$ bmake install
$ bmake clean

GCC4.8は$HOME/pkg/gcc48にインストールされる。

設定

pkgsrcの設定は$HOME/pkg/etc/mk.confに置いてある。

# Example /home/foo/pkg/etc/mk.conf file produced by bootstrap-pkgsrc
# 2013年 11月 02日 土曜日 00:00:00 JST

.ifdef BSD_PKG_MK       # begin pkgsrc settings

UNPRIVILEGED=           yes
PKG_DBDIR=              /home/foo/pkg/var/db/pkg
LOCALBASE=              /home/foo/pkg
VARBASE=                /home/foo/pkg/var
PKG_TOOLS_BIN=          /home/foo/pkg/sbin
PKGINFODIR=             info
PKGMANDIR=              man
ALLOW_VULNERABLE_PACKAGES= yes
# USE_LIBTOOL= yes # 不要
PREFER_PKGSRC=yes

CC= /home/foo/pkg/gcc48/bin/cc
CXX= /home/foo/pkg/gcc48/bin/g++

# LDFLAGS += -L/home/foo/pkg/lib # 不要
CFLAGS += -mtune=generic -mfpmath=sse
MAKE_JOBS = 4

.endif                  # end pkgsrc settings

PREFER_PKGSRCをyesにしておくとpkgsrcで入っているライブラリが優先的に使われる。USE_LIBTOOLをyesにするとpkgsrcのlibtoolが使われる。この2つは設定しておくと事故が減る。その他、CFLAGSとかLDFLAGSを適当に追加した。

bmake, bootstrap-mk-filesを入れ直す

bmakeはシステムのGCCでビルドされたものなので、入れ直す。

$ cd pkgsrc/devel/bmake
$ bmake reinstall
$ bmake clean
$ cd pkgsrc/pkgtools/bootstrap-mk-files/
$ bmake reinstall
$ bmake clean

pkgfindを入れる

パッケージを探すコマンドは標準でついていないので、pkgfindを入れる。

$ cd pkgsrc/pkgtools/pkgfind
$ bmake install
$ bmake clean

操作

パッケージを探す
$ pkgfind foovar
インストールされているパッケージの一覧を表示する
$ pkg_info
libelf-0.8.13       ELF object file access library
gmp-5.1.2           Library for arbitrary precision arithmetic
mpfr-3.1.2          GMP-based library for multiple-precision floating-point computations
mpcomplex-1.0.1     Multiprecision complex arithmetic library
gcc48-4.8.1         The GNU Compiler Collection (GCC) - 4.8 Release Series
pkgfind-20111022    Find packages by package name in pkgsrc
zlib-1.2.8          General purpose data compression library
digest-20121220     Message digest wrapper utility
tnftp-20070806      The enhanced FTP client in NetBSD
nbpatch-20100124    Patch files using diff output
openssl-1.0.1enb2   Secure Socket Layer and cryptographic library
pax-20080110nb2     POSIX standard archiver with many extensions
gcc48-libs-4.8.1nb3 The GNU Compiler Collection (GCC) support shared libraries.
pcre-8.33           Perl Compatible Regular Expressions library
libffi-3.0.13       Foreign function interface
bootstrap-mk-files-20130912 *.mk files for the bootstrap bmake utility
bmake-20110606nb1   Portable (autoconf) version of NetBSD 'make' utility
libtool-base-2.4.2nb5 Generic shared library support script (the script itself)
libiconv-1.14nb2    Character set conversion library
tcp_wrappers-7.6.4  Monitor and filter incoming requests for network services
pkg-config-0.28     System for managing library compile/link flags
perl-5.18.1nb1      Practical Extraction and Report Language
パッケージをインストールする
$ cd pkgsrc/${category}/${package_name}
$ bmake install
$ bmake clean
# 依存しているパッケージもcleanする
$ bmake clean-depends
パッケージを入れ直す
$ cd pkgsrc/${category}/${package_name}
$ bmake reinstall
パッケージを削除する
$ pkg_delete package_name
依存パッケージを表示する
$ cd pkgsrc/${category}/${package_name}
$ bmake show-depends