pkgsrcのメモ
Linuxで使えるhomebrewのようなものが無いか探していて、pkgsrcを見つけた。pkgsrcはNetBSDのパッケージマネージャーとして開発されたツールだが、LinuxやMac 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