FreeBSD pkg & ports
FreeBSDでPackageを管理する機構がpkg/portsである。
pkgがBinary Package(Pre-Compiled binary package)で、PortsがSourceからCompileするための一連の仕組みである。
pkgで最新版のports/pkgを利用する
FreeBSDのRelease版では、pkgもしくはports collectionとして、4半期単位で更新されるものを利用することになる。 通常はこれで問題ないのだが、いくつかの事情により、時に最新版を試したい場合がある。
こういう時は、pkgの設定も含め、一度初期化が必要になるので、その時の作業を。
- mkdir -p /usr/local/etc/pkg/repos
- vi /usr/local/etc/pkg/repos/FreeBSD.conf
FreeBSD: { url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest", mirror_type: "srv", signature_type: "fingerprints", fingerprints: "/usr/share/keys/pkg", enabled: yes }
- pkg bootstrap -f
これで、Binary Packageはlatestの物になる。
latestは、「開発中」のもの(CVSやSVNでいうHEAD)なので、当然「うまく動かないこともある」ことに注意すること
次に、portsもlatestを入手する
# svnlite checkout https://svn.FreeBSD.org/ports/head /usr/ports Error validating server certificate for 'https://svn.freebsd.org:443': - The certificate is not issued by a trusted authority. Use the fingerprint to validate the certificate manually! Certificate information: - Hostname: svn.freebsd.org - Valid: from Jun 22 00:00:00 2015 GMT until Jun 22 23:59:59 2016 GMT - Issuer: Gandi, Paris, Paris, FR - Fingerprint: E9:37:73:80:B5:32:1B:93:92:94:98:17:59:F0:FA:A2:5F:1E:DE:B9 (R)eject, accept (t)emporarily or accept (p)ermanently? p
これで、ports collectionも最新になる。
実際のところportsnapはとても便利なので、portsnapを使いたいのだが、latestはどうやら取得できないようなのでSubversionで。
この場合、ports collectionの更新は
# svnlite update /usr/ports
で行えば良い。
FreeBSDはcvsを捨てたようだが、svnも捨ててMercurialやGitに移行するのだろうか?
pkgのDBがおかしくなった場合
まれに、pkgのDatabaseがおかしくなることがある。
普通はこんなことは起こらないのだが、稼働中のFreeBSD VMのsnapshotからVMを作ったら、どうやらDBがイカれてしまった模様。 というわけで、pkgのDBの初期化に関して、メモ。
- pkg clean -f
- rm -rf /var/cache/pkg/*
- pkg update -f
- rm /var/db/pkg/repo-*.sqlite
- pkg bootstrap -f
- pkg update
これでOK。
portsの管理
Binary Packageを使う習慣が無いので、Portsを直接管理する
- Portsの初期化
portsnap fetch
を実行portsnap extract
を実行
- Portsの更新
portsnap fetch
portsnap update
- InstallされているPortsを見たい :
pkg info
- InstallされているPortsを削除 :
pkg delete pkgname
- InstallされているPortsのversionを見て、更新すべきか確認したい :
pkg version
- PortsのInstall
- 個人的に、Binary Packageを使う気がないので、Portsを展開した後普通にCompileすることにする。
- Installする:
make install
- 更新する:
make reinstall
- 削除する:
make deinstall
make.conf
NetBSDのpkgsrcの場合には、/etc/mk.confで様々な設定を行うことが出来るが、それに相当するportsの機構が/etc/make.confである。ここに、いわゆるOptionを記載していく。
- Optionsを全く指定しなかった場合の標準で指定されるOptionsを調べる
make -V PORT_OPTIONS
- そのPortsで定義されている全てのOptionsを調べる
make -V COMPLETE_OPTIONS_LIST
- どうも微妙に美しくない気がするが、取り敢えず、NGiNXに関する設定を記載したmake.confを例として以下に掲載する。
# # FreeBSD ports configuration file. # ### for NGiNX . if ${.CURDIR} == "/usr/ports/www/nginx" OPTIONS_SET= DOCS EXAMPLES HTTP HTTP_CACHE HTTP_REWRITE HTTP_STATUS IPV6 NLS WWW HTTP_UPSTREAM_FAIR HTTP_UPSTREAM_HASH HTTP_UPSTREAM_STICKY HTTP_ADDITION HTTP_GZIP_STATIC HTTP_GUNZIP_FILTER SPDY HTTP_REALIP HTTP_SSL CACHE_PURGE HTTP_AUTH_DIGEST ICONV . endif
portsのInstall
pkgsrcと同様、
- InstallしたいportsのDirectoryに移動
- make
- make install
- make clean
でOK。make updateがあるかどうかは未確認。
なお、Portsは、必要に応じて、Optionをncursesで確認に来る。この設定は、make.confに反映されないから、十分な注意が必要。