インストールしたいpkgがある場合、どのように探すか。
pkg searchに与えるオプションを変えながら探していく。
sageというpkgを探す場合を例に取って記録しておく。

まずはsearchから

pkg seach sageですな。

$ pkg search sage
dosage-2.6
gmessage-0.2_5
gxmessage-2.12.4_1
nagios-check_cpu_usage-1.0
p5-AnyEvent-MessagePack-0.19
p5-CGI-Application-Plugin-MessageStack-0.34
p5-Catalyst-Plugin-StatusMessage-1.002000
p5-Data-MessagePack-0.48
p5-Data-MessagePack-Stream-0.07_1

山のように引っかかって面倒。
検索する文字列を考慮してみよう。

searchで正規表現

正規表現が使えるので、頭にsageとつくpkgを探す。"^sage"を与えればよいですな。

$ pkg search "^sage"
sage-0.2.0_3

一件になった。
ではインストール…の前に必ず確認。

インストールしていないpkgの詳細を知る

インストール済みのpkgであればpkg infoで調べることができる。
未インストールならどうするか。
-fを付ければよい。

$ pkg search -f "^sage"
sage-0.2.0_3
Name           : sage
Version        : 0.2.0_3
Origin         : graphics/sage
Prefix         : /usr/local
Categories     : graphics devel
Maintainer     : oliver@FreeBSD.org
WWW            : http://www.worldforge.org/dev/eng/libraries/sage
Comment        : OpenGL extension library
Shared Libs required:
        libSDL-1.2.so.11
Shared Libs provided:
        libsage.so.2
Flat size      : 953KiB
Pkg size       : 96 KB
Description    :
Sage is an OpenGL extension library written to make use of SDL's mechanism for
enabling OpenGL's extensions.

WWW: http://www.worldforge.org/dev/eng/libraries/sage

欲しいsageは数学関連のものなので、どうも違うようですな。
危なかった!
しかし狙いのsageは無いのだろうか。

カテゴリで探す

pkgはカテゴリ分けされている。
狙いのsageは数学関連であるから、おそらくmathの下にあるはずだ。

$  pkg search "^math/"|less
math/R
math/R-cran-ChangeAnomalyDetection
math/R-cran-Formula
(略)

あるいは:

$ pkg search "math\/"|less
math/R
math/R-cran-ChangeAnomalyDetection
math/R-cran-Formula
(略)

しかし。
ありませんでした。

$ pkg search "math\/"|grep sage|wc -l
       0
$

仕方がないのでportsでインストールしよう。

math/sageはportsにはないのだろうか。
psearchを使う。

$ psearch "^sage"
graphics/sage             OpenGL extension library
math/sage                 Open source Mathematics software

あった。

portsでのインストールは最小限に。

しかしportsからインストールするソフトウェアは最小限にしたい。
つまりmath/sageだけはportsを使ってもよいが、依存するものはpkgを使いたい。
本命ではない依存ソフトウェアのコンパイルなど待ちたくないし。

portmasterを使うなら-Pを与えればよい。
以下、portmasterのman抜粋。

-P|--packages
         use packages, but build port if not available
$ sudo portmaster -P math/sage
(中略)
===>>> Initial dependency check complete for math/sage
===>>> math/sage >> (15)
===>>> The following actions will be taken if you choose to proceed:
        Install math/sage
        Install devel/autoconf
        Install devel/autoconf-wrapper
        Upgrade pkg-1.1.4_10 to pkg-1.2_1
        Install devel/gmake
        Install devel/m4
        Install misc/help2man
        Install devel/p5-Locale-gettext
        Install math/atlas
        Install print/teTeX-base
        Install print/teTeX-texmf
        Install print/font-amsfonts
        Install print/tex-texmflocal
        Install textproc/texi2html
        Install www/libwww
        Install devel/libtool

===>>> Proceed? y/n [y] n

pkgのアップグレードも提案された。
嫌な予感しかしない。
pkgのアップグレードはやめよう。
いったんNで抜ける。

portmasterで特定のportsのアップグレードを抑止したい。

-xオプションを使う。
portmasterのmanから抜粋。

$ portmaster --version
===>>> Version 3.17.3
$ man portmaster
     -x  avoid building or updating ports that match this pattern.  Can be
         specified more than once.  If a port is not already installed the
         exclude pattern will be run against the directory name from
         /usr/ports.
$ sudo portmaster -P -x pkg math/sage
(中略)
===>>> Initial dependency check complete for math/sage
===>>> math/sage >> (14)
===>>> The following actions will be taken if you choose to proceed:
        Install math/sage
        Install devel/autoconf
        Install devel/autoconf-wrapper
        Install devel/gmake
        Install devel/m4
        Install misc/help2man
        Install devel/p5-Locale-gettext
        Install math/atlas
        Install print/teTeX-base
        Install print/teTeX-texmf
        Install print/font-amsfonts
        Install print/tex-texmflocal
        Install textproc/texi2html
        Install www/libwww
        Install devel/libtool

意図した通りpkgのupgradeが外れている。
ただ…pkgレポジトリのものよりportsのバージョンが新しいとやっぱりportsが選ばれてしまう。