UNIX/Linuxの部屋 freebsd-updateコマンドの使い方

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




コマンド freebsd-update FreeBSD のバイナリ更新を行う。Windows Update のようなもの このエントリーをはてなブックマークに追加

FreeBSD のバイナリ更新を行う。Windows Update のようなお手軽ツール。

まず、port か package から freebsd-update をインストールする。

そして設定ファイルを用意する。
# cd /usr/local/etc/
# cp freebsd-update.conf.sample freebsd-update.conf
⇒ ここではデフォルトの設定ファイルをそのまま使用している

これで準備は完了。まず、fetch でバイナリパッチを取得する。
# /usr/local/sbin/freebsd-update fetch
Fetching updates signature...
Fetching updates...
Fetching hash list signature...
Fetching hash list...
Examining local system...
Fetching updates...
/boot/kernel/kernel...
/usr/bin/fetch...
Updates fetched
To install these updates, run: '/usr/local/sbin/freebsd-update install'

どのファイルが更新されるか確認したら、install を行う。
# /usr/local/sbin/freebsd-update install
Backing up /boot/kernel/kernel...
Installing new /boot/kernel/kernel...
Backing up /usr/bin/fetch...
Installing new /usr/bin/fetch...
これでおしまい。簡単なものである。

freebsd-update で指定できる主なコマンド
fetch
バイナリパッチを取得する。インストールは行われない。
install
fetch で取得しておいたパッチをインストールする。
cron
fetch を行い、もしバイナリパッチが提供されていれば root 宛にメールを送信する。提供されていなければ何もしない。これを cron に仕込んでおくと、メールが届いたときだけ freebsd-update install を手動で実行すればよいわけである。
rollback
install したパッチを削除する。何度も rollback することで、どんどん以前の状態にさかのぼることができる。

注意点
  • freebsd-update はセキュリティ関連の脆弱性を修正するための仕組みであって、FreeBSD を最新リリースに保つための仕組みではない。例えば FreeBSD 5.1-RELEASE で freebsd-update しても、FreeBSD 5.2-RELEASE に更新されるわけではなく、あくまで 5.1-STABLE を追っかけているに過ぎない。
  • freebsd-update はインターネット経由でバイナリパッチを取得するため、インターネットに接続しておく必要がある。なお、fetch コマンドを使って HTTP 経由でファイルを取得するので、必要であれば proxy の設定などを行っておくこと。
  • バイナリパッチであるため、カーネルや基本配布物を手元でコンパイルしてしまうと、freebsd-update は動作しない。
  • 適用するパッチを選択することはできない。freebsd-update を使って全ての基本配布物を最新の状態に保つか、freebsd-update を使わないか、のいずれかを選択しなければならない。
  • 更新対象となるのは FreeBSD の基本配布物のみである。つまり /bin・/usr/bin・/usr/sbin は更新対象だが、/usr/local/bin や /usr/local/sbin などの ports・packages は更新の対象とならない。
  • 静的にリンクしている ports・packages のプログラムに注意。例えば libc の関数に脆弱性が発見されたとする。その結果、以下のファイルは freebsd-update によって更新される。
  • 静的ライブラリ /usr/lib/libc.a
  • libc.a を静的にリンクしている基本配布物のコマンド
  • 動的ライブラリ /usr/lib/libc.so
しかし静的ライブラリ /usr/lib/libc.a を静的にリンクしている ports・packages のコマンドがその関数を使用していた場合、脆弱性は残ったままとなる。このようなときは portupgrade -f で ports・packages を再インストールするのがお手軽。
  • カーネルが更新された場合はリブートを忘れずに。カーネルモジュールが更新された場合は、kldstat -v でカーネルが使用中かどうかを確認すること。もし使用中であればモジュールの機能を使用しているサービスを止めてから kldunload・kldload して再度ロードしなおすか、あるいはリブートすること。


freebsd-update は一見「バイナリを比較して、もし異なっていれば配布する」という単純な作業をしているだけに見えるが、そう簡単ではない。

まず、FreeBSD のビルド時に生成されるバイナリにタイムスタンプが埋めこまれるものがある。これは同じソースから二回ビルドを行い、異なる部分を比較の対象外とすることで解決している。中には日付を文字列でバイナリに埋め込んでしまうものがあるが、「March」と「February」のように長さが異なってしまうため、ビルドのたびにバイナリサイズが変わってしまう。また、ビルドのたびにランダムなデータを生成するものもある。このようなイレギュラーなファイルは比較対象外とするなど、結構大変なのだ。

ちなみに当ページ管理人は freebsd-update を愛用している。
>> FreeBSDオンラインマニュアル(man) FreeBSD freebsd-update(8)