FreeBSD port 検索

PC-UNIX

FreeBSD で ports アプリケーションを探す方法

今回は FreeBSD ネタです。
ここ十年以上、というか2000年以降は Linux がメジャーすぎる感じがしますが、それでも何かのときは FreeBSD (NetBSDでもいい)でないと安心できないという人は多いと思います。
現在でも FreeBSD 上で利用可能なアプリケーションのリストは常に増えています。
このページでは、素っ裸の FreeBSD に一通りの設定を前提で、インストールするアプリケーションを見つける方法をメモしておきます。

このページでは、自分がインストールするアプリ名ぐらいはわかるが、現在、どのバージョンをインストールできるのか、さらには複数のバージョンからインストールするアプリケーションを選択できるのかという疑問を解決する方法について紹介します。

なお、ある程度の詳細すらわからないケース、「○○○するためのアプリ」などを調べたい場合は普通にググってください。

実行環境


FreeBSD 13.0-RELEASE-p4 FreeBSD 13.0-RELEASE-p4 #0: Tue Aug 24 07:33:27 UTC 2021

探し方

ド定番の検索方法

まず、誰でもやるのが web サーチです。
https://www.FreeBSD.org/ja/ports/
のような公式サイトで検索するのが定石ですが、ブラウザの検索窓にそれらしき空覚えの名前を入れて検索するのもありです。

バイナリリポジトリで探す

pkg searchコマンドを使います。

バイナリをそのままインストールするのは、かつては Windows っぽくて「おこちゃまメソッド」的に揶揄されましたが、現在ではこちらの方が定番のようにも感じます。何でもかんでもソースからコンパイルという方法は、現在においては必ずしも安心な方法ではありません。

FreeBSD のバイナリ package リポジトリの場合は、それなりの信頼性がありますので、通常はそのまま信頼してインストールして良いと思います。私自身もスペックの遅いマシンにインストールするときのみならず、最新スペックのサーバーにもバイナリをそのままインストールして普通に使うことがよくあります。

試しに samba を探してみましょう。

pkg search samba

とコマンドを入れます。

 bash
# pkg search samba
p5-Samba-LDAP-0.05_2           Manage a Samba PDC with an LDAP Backend
p5-Samba-SIDhelper-0.0.0_3     Create SIDs based on G/UIDs
samba-nsupdate-9.16.5          nsupdate utility with the GSS-TSIG support
samba412-4.12.15_2             Free SMB/CIFS and AD/DC server and client for Unix
samba413-4.13.8_1              Free SMB/CIFS and AD/DC server and client for Unix

これだけだと、どのカテゴリーのアプリかはわかりにくいので、-oオプションを付けて実行します。

 bash
#pkg search -o samba
net/p5-Samba-LDAP              Manage a Samba PDC with an LDAP Backend
sysutils/p5-Samba-SIDhelper    Create SIDs based on G/UIDs
dns/samba-nsupdate             nsupdate utility with the GSS-TSIG support
net/samba412                   Free SMB/CIFS and AD/DC server and client for Unix
net/samba413                   Free SMB/CIFS and AD/DC server and client for Unix

上の例だと、カテゴリーと説明が同じになっているsamba412samba413のいずれかをインストールできると見当がつきます。

samba413をインストールするのなら、

pkg install samba413

でインストールできます。

node をインストールしたい場合

nodeはバージョンがいくつかあって、どれをインストールすべきか悩みの種ですが、兎にも角にも自分の FreeBSD にはどれが簡単にインストールできるのかを知ることが先決です。ソースから手動でインストールする方法はここでは最終手段です。
まずはインストールが簡単にできて、都合が悪くなったら簡単にアンインストールできて、別のバージョンに手軽に入れ替えることができるよう、パッケージからインストールすることを考えます。

まず、node がどのカテゴリに分類されているのか調べます。

 bash
# whereis node
node: /usr/local/bin/node /usr/local/man/man1/node.1.gz /usr/ports/www/node

ports としては www にカテゴリ分けされていることがわかります。

make search を使う

port を検索するには、make searchという手っ取り早い方法があります。

 bash
# cd /usr/ports
# make search name=node
~(途中略)~
Port:   node16-16.13.0
Path:   /usr/ports/www/node16
Info:   V8 JavaScript for client and server
Maint:  bhughes@FreeBSD.org
B-deps: amd64-binutils-2.37_2,1 brotli-1.0.9,1 c-ares-1.17.2 gettext-runtime-0.21 gmake-4.3_2 icu-70.1_1,1 indexinfo-0.3.1 libffi-3.3_1 libnghttp2-1.46.0 libuv-1.42.0 mpdecimal-2.5.1 pkgconf-1.8.0,1 python38-3.8.12_1 readline-8.1.1
R-deps: brotli-1.0.9,1 c-ares-1.17.2 ca_root_nss-3.71 icu-70.1_1,1 libnghttp2-1.46.0 libuv-1.42.0
WWW:    https://nodejs.org/
Port:   node-17.0.1
Path:   /usr/ports/www/node
Info:   V8 JavaScript for client and server
Maint:  bhughes@FreeBSD.org
B-deps: amd64-binutils-2.37_2,1 brotli-1.0.9,1 c-ares-1.17.2 gettext-runtime-0.21 gmake-4.3_2 icu-70.1_1,1 indexinfo-0.3.1 libffi-3.3_1 libnghttp2-1.46.0 libuv-1.42.0 mpdecimal-2.5.1 pkgconf-1.8.0,1 python38-3.8.12_1 readline-8.1.1
R-deps: brotli-1.0.9,1 c-ares-1.17.2 ca_root_nss-3.71 icu-70.1_1,1 libnghttp2-1.46.0 libuv-1.42.0
WWW:    https://nodejs.org/
(以下略)

検索結果の中で一番必要なものが、その port がどのディレクトリにあるかという情報でしょう。つまり、自分でコンパイルするにしても「Path:」以下の情報が必要なことが多いわけです。

もう少し細かく検索したい

上のmake searchはズラズラ文字列が検索されるわけですが、コメント、 説明文や依存情報から、自分が必要としているアプリケーション(パッケージ名)を絞り込みたい(検索したい)ことが普通にあると思います。

その時は

 bash
 make search key=検索したいキーワード

が有効です。
ちなみに、make quicksearch name=キーワードとしても良い。

試しに、キーワード JavaScript で検索してみます。

 bash
# make quicksearch name=JavaScript
Port:   p5-Data-JavaScript-Anon-1.03_1
Path:   /usr/ports/devel/p5-Data-JavaScript-Anon
Info:   Dump big dumb Perl structs to anonymous JavaScript structs
Port:   php73-pear-HTML_Javascript-1.1.2
Path:   /usr/ports/devel/pear-HTML_Javascript
Info:   Provides an interface for creating simple JS scripts
(以下略)

これで、目的のパスが見つけることができますので、あとはインストールして試すだけです。

番外編

port は /usr/ports ディレクトリ以下に入っていることを知っているなら、原始的に/usr/ports 以下を手動で検索する方法も普通に使えます。
原始的な方法で、誰もが一番先に考える方法ではないでしょうか。

例えば、

 bash
# echo /usr/ports/*/*node*

などのコマンドで調査します。原始的ですが、余計な情報は求めていない場合や、便利なコマンドをド忘れしたとき、頭が回らないときなどは初歩的な検索方法も有効です。

RECOMMEND

-PC-UNIX
-,