パッケージマネジャ: Linux (Yum, DNF) と FreeBSD (pkg) の比較

(2016.11.05 新規作成.)

LinuxとFreeBSD, 片方が分かっている人向けに、他方で同じことをするコマンド集。もっぱら Linux から FreeBSD の向き。

Fedora Linux では, rpmパッケージを管理する rpmコマンド, リモートリポジトリにアクセスする yum (または dnf) コマンドを組み合わせる。

Fedora 22 から, Yum から DNF へ移行した。互換機能が提供され, yum と打っても動く。

FreeBSD では, ローカルとリモートの両方を pkg コマンドで扱う。その分、サブコマンドがやや複雑になっている。

インストール、アンインストール

リモートから取得し、インストール

# dnf install udisks2
# pkg install xorg

新しいパッケージをリモートリポジトリから取得し, インストールする。

アップデート

# dnf upgrade
# pkg upgrade

インストール済みのパッケージを更新 (バージョンアップ) する。dnfのサブコマンドは, 今のところ, update でも upgrade でも同じ。対象を表示するだけだと, dnf check-update.

FreeBSD では pkg upgradepkg update は全然違う意味。後者は、ローカル・カタログの更新。

FreeBSD でアップデート対象を表示するだけは, pkg version -l '<'

アンインストール

# rpm -e palapeli
# pkg delete gtk3

インストール済みパッケージのアンインストール. rpmコマンドは, 依存関係を調べ、ほかのパッケージから依存されている場合は、エラーで中止。

FreeBSD の場合は, 指定のパッケージに依存しているパッケージ一覧を表示し, 対話式に, すべてアンインストールするか確認してくる。

検索

リモートを検索

$ dnf list '*ibus*'
% pkg search ibus

部分文字列で, パッケージ名を検索する。yum/dnfコマンドはインストール済み (ローカル) とリモートの両方を表示する。

pkg search は、リモートのみを検索する。完全一致だけ表示したいときは, 正規表現が使えるので, 例えば次のようにする。あるいは --search name --exact オプションを付ける。

% pkg search '^ibus-[0-9]'
ibus-1.5.11                    Intelligent Input Bus for Linux / Unix OS

パッケージ情報を表示 (リモート)

$ dnf info glibc-devel
% pkg search --search name --exact -f ibus

パッケージ名で検索し、パッケージ情報を表示する。dnfコマンドはインストール済みとリモートの両方を表示。

pkg search コマンドはリモートのみ。

パッケージ情報を表示 (ローカル)

$ rpm -qi kdelibs
% pkg info kdelibs

インストールされたパッケージ (ローカル) の情報.

FreeBSD は, pkg infoだと, ローカルのみを検索する。search と info がやや紛らわしい。

FreeBSD で, ローカルの検索は, pkg query も使える。だが、指定の仕方が難しい。

依存情報を表示

Linux.

指定のパッケージが依存しているパッケージ・共有ライブラリを一覧:

$ dnf repoquery --requires kdelibs

このコマンドは, yumと互換性がない。

指定のパッケージに依存しているものを表示:

$ rpm -e kdelibs --test

インストール済みのものは、一応これで目的のものは出るが, 何かうまくない。リモートを調べるのは、分からなかった。

指定の capability を提供するパッケージを探す。

$ dnf repoquery --whatprovides webserver

この例では, cherokee, httpd, lighttpd, nginx が表示される。

FreeBSD の場合::

指定のインストール済みのパッケージが依存するライブラリ:

$ pkg query "%do" xcalc

指定のインストール済みパッケージに依存しているパッケージ:

$ pkg query "%ro" xcalc

ファイルからパッケージを探す

$ rpm -qf /bin/ls
coreutils-8.25-6.fc24.x86_64
% pkg which /usr/local/bin/xsubpp 
/usr/local/bin/xsubpp was installed by package perl5-5.20.3_15

% pkg which /bin/ls
/bin/ls was not found in the database

現にあるファイルを所有する, インストール済みのパッケージを表示. FreeBSDでは, OSの基本的なファイルについては not foundになる。

インストールされたパッケージの一覧

$ rpm -qa
% pkg info

% pkg query "%n-%v %c"

インストールされたパッケージを、一覧表示する。

その他

キャッシュをクリア

$ dnf clean all
# pkg clean

キャッシュをクリアする. FreeBSD の方は、実行前に聞いてくる。

宙ぶらりんのパッケージ

$ package-cleanup --leaves

# dnf autoremove
# pkg autoremove

package-cleanup --leaves は, インストール済みのライブラリ・パッケージのうち、何からも依存されていないものを表示。dnf autoremove は実際に削除する。

FreeBSD では、対話式に, 削除するか確認してくる。