今回は 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
上の例だと、カテゴリーと説明が同じになっているsamba412
とsamba413
のいずれかをインストールできると見当がつきます。
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*
などのコマンドで調査します。原始的ですが、余計な情報は求めていない場合や、便利なコマンドをド忘れしたとき、頭が回らないときなどは初歩的な検索方法も有効です。