基本的なFreeBSDメンテナンスの紹介
序章
FreeBSDサーバーを管理するときは、システムを良好な状態に保つのに役立つ基本的な保守手順を理解することが重要です。
このガイドでは、サーバーを最新の状態に保ち、適切に機能させるために必要な基本的なプロセスについて説明します。 FreeBSDチームが維持している基本オペレーティングシステムを更新する方法について説明します。 また、ポートまたはパッケージシステムを介してインストールされたオプションのソフトウェアを更新および保守する方法についても説明します。
FreeBSDの使用を開始するためのヘルプが必要な場合は、ガイドこちらに従ってください。
ベースFreeBSDオペレーティングシステムの更新
FreeBSDを使用する際に理解すべき重要なことの1つは、基本オペレーティングシステムがシステム上の他のソフトウェアとは別に構築および管理されていることです。 これは多くの利点を提供し、FreeBSDチームがシステムのコア機能を注意深くテストして開発することを可能にします。
注:続行する前に、現在の更新手順のバグに関するこのセクションの下部にある注をお読みください。
サーバーの使用を開始すると、セキュリティ更新プログラムがベースシステムに公開されている可能性が高くなります。 FreeBSDプロジェクトのサーバーにこれらの更新を照会し、新しいファイルをダウンロードしてシステムにインストールするには、次のコマンドを入力します。
sudo freebsd-update fetch install
DigitalOcean FreeBSDインストールで作業している場合、sudo
がデフォルトで含まれています。 別のプラットフォームを使用している場合は、ポートシステムまたはパッケージを介してsudo
をインストールするか、rootにsu
をインストールする必要があります。
freebsd-update
コマンドは、ベースオペレーティングシステムのソフトウェアの管理ユーティリティです。 fetch
サブコマンドは新しい更新をダウンロードし、install
サブコマンドはそれらをライブシステムに適用します。
アップデートがある場合は、アップデートの影響を受けるソフトウェアのリストが表示されます。 下矢印でスクロールするか、スペースバーでページをめくることができます。 リストの一番下に到達すると、更新が適用されます。
更新された長時間実行ソフトウェアは、新しいバージョンを使用するために再起動する必要があります。 カーネルの更新を確認した場合は、奇妙な動作を防ぐために再起動が必要になります。 これを行うには、次のように入力します。
sudo shutdown -r now
重要:更新手順のバグ
現在、FreeBSDの更新手順がここで行われているというアップストリームのバグがあります。 このバグにより、更新手順に続いてシステムの再起動がハングします。
この状況に対処するには2つの方法があり、ほとんどの場合、2番目の方法が推奨されます。
1つは、DigitalOceanコントロールパネルを使用してサーバーの電源を入れ直すだけです。 これにより、サーバーが強制的に再起動されますが、再起動すると、更新された環境が使用されます。
より安全な代替手段は、更新前にファイルシステムでソフトアップデートまたはソフトアップデートのジャーナリングを無効にすることです。 ソフトアップデートが問題の核心であるため、これにより再起動のハングを防ぐことができます。 これはもう少し大規模な手順であり、将来(これらの機能を再度有効にするまで)ディスクが必要とするリカバリに時間がかかります。
これを行うには、更新を適用する前に、シングルユーザーモードで起動します。 これを行うには、次のように入力します。
sudo nextboot -o "-s" -k kernel sudo reboot
次に、ドロップレットのDigitalOceanコントロールパネルに移動し、[コンソールアクセス]ボタンをクリックしてWebコンソールにアクセスします。 起動が終了したら「Enter」を押して、レスキューシェルセッションを取得します。 ここから、soft-updatesまたはsoft-updateジャーナルをオフにすることができます。
ソフトアップデートを完全に無効にするには、次のように入力します。
tunefs -n disable /
ソフトアップデートジャーナリングを無効にしたい場合は、それほど劇的な妥協はありませんが、代わりに次のコマンドを使用できます。
tunefs -j disable /
これが完了したら、再起動を開始して、サーバーを完全なマルチユーザーモードでもう一度再起動できます。
reboot
起動が完了した後、再起動をハングさせることなく、上記の手順を使用してFreeBSDアップデートをフェッチして適用できます。
バグレポートに注意して、アップストリームの修正が利用可能になったときにこれらの変更を元に戻すことができるようにすることをお勧めします。
更新チェックの自動化
cron
ジョブを設定することにより、これらのセキュリティパッチを毎日自動的にチェックするようにシステムを構成することができます。 freebsd-update
ユーティリティには、この目的のために特別に使用できる特別なcron
サブコマンドがあります。
これは、ダウンロードサーバーの負荷を分散するために、ランダムな時間(最大1時間)一時停止します。 次に、更新を確認してダウンロードします(基本的にはバックグラウンドでのfetch
操作)。 アップデートがダウンロードされると、指定されたユーザーアカウントに通知されます。 管理者が適切な時間を決定できるように、更新は自動的にインストールされません。
この自動チェックを設定するには、sudo
権限で/etc/crontab
ファイルを編集します。
sudo vi /etc/crontab
ファイルの最後に、次のような行を追加します。
@daily root freebsd-update -t freebsd cron
上記のコマンドは、rootユーザーとしてupdateコマンドを自動的に実行します。 更新が見つかった場合、-t
コンポーネントの後に指定されたユーザーアカウントが通知されます。 上記の例では、デフォルトのfreebsd
ユーザーに通知されます。
終了したら、ファイルを保存して閉じます。
次回freebsd
アカウントにログインするときは、次のように入力してメールを確認できます。
アップデートがダウンロードされた場合は、次のように表示されます。
Mail version 8.1 6/6/93. Type ? for help. "/var/mail/freebsd": 1 message 1 new >N 1 freebsd@freebsdserver Thu Dec 18 21:45 209/3997 "freebsdserver security updates" &
通知に関連付けられているメッセージ番号を入力すると、更新のリストを表示できます。
1
変更されるソフトウェアに満足したら、次のように入力して更新をすばやくインストールできます。
sudo freebsd-update install
カーネルパッチが適用されている場合はマシンを再起動し、更新の影響を受けたサービスを再起動することを忘れないでください。
オペレーティングシステムソースの同期
たぶんあなたが時々やりたいと思う1つのタスクは、FreeBSDソースコードのコピーをあなたのシステムに同期させることです。 これはさまざまな理由で役立ちます。 一部のポートでは、現在のソースを正しくビルドする必要があり、ソースを使用して新しいソフトウェアブランチへの追跡を開始することもできます。
FreeBSDのソースコードはSVNリポジトリに保持されています。 サブバージョンに伴う大きなオーバーヘッドなしに、ソースの最新バージョンが必要な場合は、svnup
というユーティリティを使用して現在のソースを同期できます。 これは、Subversion自体を使用するよりもはるかに高速です。
svnup
パッケージは、次のように入力してインストールできます。
sudo pkg install svnup
ポートを使用したい場合は、次のように入力して取得できます。
cd /usr/ports/net/svnup sudo make config-recursive install clean
ユーティリティを入手したら、構成ファイルを少し調整する必要があります。 テキストエディタでsudo
権限で開きます。
sudo vi /usr/local/etc/svnup.conf
まず、リストからミラーを選択する必要があります。 構成ファイルには複数のhost=
行があり、それらはすべてコメント化されています。 自分に近いと思われるものを1つ選択し、コメントを外します。
. . . [defaults] work_directory=/var/tmp/svnup #host=svn.freebsd.org #host=svn0.us-west.freebsd.org host=svn0.us-east.freebsd.org #host=svn0.eu.freebsd.org . . .
次に、各SVNブランチを説明するファイルのセクションが、使用しているリリースバージョンを参照していることを確認する必要があります。 コマンドラインから次のように入力すると、リリースバージョンを確認できます。
freebsd-version
10.1-RELEASE-p2
これにより、オペレーティングシステムのブランチと、最後のシステムパッチレベルがわかります。 現在の目的で注意したい部分は、最初のダッシュの前の数字です。 この場合、10.1
を指定します。 RELEASE
は、FreeBSDで利用可能な最も安定したブランチであるリリースブランチを現在追跡していることを意味します。
ファイルに戻って、[release]
の下のbranch=
パラメーターの定義が次の番号を指していることを確認してください。
. . . [release] branch=base/releng/10.1 target=/usr/src . . .
これにより、正しいソースをダウンロードしていることが保証されます。 終了したら、ファイルを保存して閉じます。
これで、リリースブランチを追跡しているので、次のように入力できます。
sudo svnup release
これにより、ソースツリーの最新バージョンが/usr/src
にダウンロードされます。 このコマンドを再実行すると、いつでも更新できます。
ソースでSubversionコマンドを実行する機能が必要な場合は、Subversionツールをダウンロードする必要があります。 次のように入力して、パッケージをインストールできます。
sudo pkg install subversion
ポートを使用する場合は、次のように入力してツールを入手できます。
cd /usr/ports/devel/subversion sudo make config-recursive install clean
subversion
コマンドを使用すると、かなり時間がかかります。 ツリー内の各ファイルの現在のバージョンだけでなく、プロジェクトの履歴全体もダウンロードされます。
以前にsvnup
ツールを使用してソースを同期したことがある場合は、subversion
を使用してソースをチェックアウトする前にソースツリーを削除する必要があります。
sudo rm -rf /usr/src
subversion
の使用方法の詳細な手順は、このガイドの範囲外です。 ただし、一般的な考え方は、FreeBSDソースミラーの1つにあるブランチの1つに対してcheckout
コマンドを発行することです。
たとえば、上記のsvnup
コマンドを使用して行ったのとまったく同じソースをチェックアウトするには、次のように入力します。
sudo svn checkout https://svn0.us-east.FreeBSD.org/base/releng/10.1 /usr/src
このコマンドのURLは、基本的に、svnup
構成ファイルで確認したhost=
とbranch=
の定義の組み合わせにすぎないことに注意してください。
システムのオプションソフトウェアの記録の更新
FreeBSDは、サーバーに追加のソフトウェアをインストールするための2つの異なるフォーマットを提供します。 1つは「ポート」と呼ばれるソースベースのシステムで、もう1つは使用可能なポートに基づいて事前にコンパイルされたパッケージのリポジトリです。 基本オペレーティングシステムの外部にあるソフトウェアの場合、管理にはいくつかの追加ツールが使用されます。
システムは、/usr/ports
をルートとするディレクトリ階層内にインストールできるポートに関する情報を保持します。 このディレクトリ構造は「ポートツリー」と呼ばれます。 ポートに触れる前に、ポートツリーに利用可能なソフトウェアに関する最新情報が含まれていることを確認する必要があります。 portsnap
コマンドを使用してこれを行うことができます。
portsnap
コマンドの構文は、freebsd-update
コマンドの構文をいくつかの点で反映しています。 DigitalOceanでは、ソースツリーに使用可能なポートに関する初期情報が事前に入力されます。この情報は、2番目のportsnap
コマンドで示すように更新できます。
DigitalOceanを使用していない場合は、開始時に/usr/ports
ディレクトリが空になる可能性があります。 この場合、初めてportsnap
を使用するときは、extract
を使用する必要があります。
sudo portsnap fetch extract
これにより、完全なポートツリーがフェッチされ、/usr/ports
に抽出されます。 これにはしばらく時間がかかる場合があり、/usr/ports
に情報がない場合にのみ必要です。
使用可能なポート(後続のportsnap
の実行ごと)に関するシステムの情報を更新するには、次のように入力します。
sudo portsnap fetch update
このプロセスは、ポートツリーを最後に更新した最近の状況によっては少し時間がかかる場合があります。 前回の実行以降に変更された利用可能なソフトウェアごとに、かなりの数のファイルをダウンロードする必要があります。 これにより、/usr/ports
階層にポートに関する情報が入力されます。
pkg
パッケージングシステムは、この情報の一部も活用できます。 ただし、インストールに使用できるビルド済みのバイナリパッケージを追跡するために、独自のデータベースも保持しています。 これを更新するには、次のように入力します。
sudo pkg update
これにより、FreeBSDプロジェクトのサーバーから最新のパッケージデータベース情報が取得されます。 多くのpkg
操作では、pkg update
がコマンド実行の一部として自動的に実行されるため、スタンドアロンコマンドとして必ずしも必要ではないことに注意してください。
オプションソフトウェアを更新する
これまで、ベースオペレーティングシステムを更新して更新を適用する方法を学びました。 また、オペレーティングシステムのソースコードを更新する方法と、利用可能なポートとパッケージに関するローカル情報を更新する方法も学びました。
これで、この更新されたソフトウェア情報を使用して、オプションのソフトウェアをダウンロードして適用できます。 ポートとパッケージのどちらを使用しているかによって、プロセスは異なります。 これら2つを組み合わせて使用している場合は、いくつかのプロセスを調整する必要があります。
更新できるソフトウェアを見つける
ソフトウェアを更新する最初のステップは、新しいバージョンが利用可能なアプリケーションを見つけることです。 これは、いくつかの異なる方法で行うことができます。
pkgコマンドを使用した更新の確認
システムにインストールしたソフトウェアを、利用可能な最新バージョンに関する更新情報と比較する場合は、pkg
のversion
サブコマンドを使用できます。 これにより、インストールされているバージョンが表示され、オプションで使用可能なバージョンに関する情報を表示できます。
このコマンドは、'ポートとパッケージの両方を介してインストールされたオプションのソフトウェアを表示することに注意してください。 このコマンドはインストールソースを区別しないため、システムで利用可能なすべての更新を正確に表示できます。
次のように入力すると、ソフトウェアが最新であるかどうかを確認できます。
pkg version -vIL=
最新のインデックスファイル(以前にportsnap
コマンドを使用してダウンロードした)に新しいバージョンのソフトウェアへの参照がある場合、出力には不一致が表示されます。 例えば:
perl5-5.18.4_10 < needs updating (index has 5.18.4_11)
システムにインストールされているソフトウェアをportsツリーの最新のインデックスファイルと照合しているため、portsツリーにまだパッケージに到達していない更新がある場合にこれをチェックすることがあります。 これは、パッケージがポートツリーから構築され、多くの場合、わずかに遅れる必要があるために発生します。
この可能性があるため、上記のコマンドは、実際にはまだパッケージとして利用できない更新を表示する場合があります。 これらのインスタンスを見つけるために、上記のコマンドの出力を次のコマンドの出力と比較できます。
pkg version -vRL=
このコマンドは、pkg
システムの利用可能なパッケージのデータベース(ポートツリーのインデックスファイルではなく)で新しいバージョンをチェックします。 2つのコマンドで同じ出力が生成される場合は、pkg
システムを使用して任意のパッケージを更新できます。
最初のコマンドに2番目のコマンドに表示されない更新がある場合、これは変更がまだパッケージ化されていないことを意味します。 更新が必要なソフトウェアのパッケージを使用している場合は、パッケージが追いつくまで待つか、ポートに切り替えて最新の更新を今すぐ入手することができます。
ポートマスターによる更新の確認
ポートシステムを使用してソースからソフトウェアをビルドすることをより頻繁に選択する場合、魅力的な代替手段はportmaster
コマンドです。 このツールは、アップデートのチェックと適用から、ポートとそのすべての依存関係のインストールまたは削除まで、FreeBSDでのポートベースのソフトウェア管理タスクに役立ちます。
portmaster
コマンドを取得するには、パッケージをインストールするか、ポートシステムからコンパイルします。
パッケージをインストールするには、次のように入力します。
sudo pkg install portmaster
ツールをソースからコンパイルする場合は、portsツリーでパッケージのディレクトリに切り替え、makeを使用してインストールします。
cd /usr/ports/ports-mgmt/portmaster sudo make install clean
インストール時に、/etc/make.conf
ファイルへの情報の追加とパッケージデータベースの変換に関するメッセージが表示される場合があります。 FreeBSD 10.1以降から始めている場合、これは必要ありません。
portmaster
をインストールしたら、次のように入力して更新を確認できます。
portmaster -L
これにより、システムにインストールされているすべてのソフトウェアが調べられ、インデックスファイルと比較されて、新しいバージョンが利用可能かどうかが確認されます。 これは、ソフトウェアがポートまたはパッケージのどちらを使用してインストールされたかに関係なく、更新を表示するという点でpkg
コマンドと同じように動作します。 依存関係の観点から、他のソフトウェアとの接続方法に基づいてソフトウェアを分類します。
利用可能なアップデートがあるソフトウェアには、次のようなインデントされた行があります。
===>>> perl5-5.18.4_10 ===>>> New version available: perl5-5.18.4_11
下部の要約行には、更新できるアプリケーションの数が示されています。
===>>> 42 total installed ports ===>>> 1 has a new version available
portmaster
は主にポートで機能するため、検出されたすべての更新がアプリケーションで利用可能である必要があります。
ソフトウェアの脆弱性のチェック
FreeBSDは脆弱性データベースを維持しており、システムにインストールしたソフトウェアに脆弱性がないことを確認するために定期的にチェックする必要があります。
システム上のすべてのソフトウェアを更新することが有益な場合もありますが、少なくとも、既知の脆弱性を持つソフトウェアはできるだけ早く更新する必要があります。 システムにインストールしたオプションのソフトウェアの既知の脆弱性を確認するには、次のように入力します。
pkg audit -F
これにより、FreeBSDサーバーから最新の脆弱性データベースがダウンロードされ、システムにインストールされているソフトウェアと照合されます。 インストールされているソフトウェアに脆弱性が存在する場合は、警告が表示されます。
更新メモの確認
ソフトウェアを更新する前に、更新によって発生する可能性のある破損がないかどうかを確認することがEssentialです。 FreeBSDのポートメンテナは、ユーザーの介入なしにはきれいに適用できない変更を加えなければならない場合があります。 これらの状況をチェックしないと、ソフトウェアが機能しなくなり、システムが壊れてしまう可能性があります。
/usr/ports
ディレクトリのUPDATING
というファイルには、予期しない結果が生じる可能性のあるソフトウェアアップデートに関する情報が含まれています。 このファイルを読み取るには、次のように入力します。
less /usr/ports/UPDATING
この単純なテキストファイルには、ソフトウェアがインストールされているかどうかに関係なく、追加の注意が必要な更新に関する情報が含まれています。 各エントリには、参照された更新がポートツリーにコミットされた日付がマークされます。 もう1つの注意点は、ファイルには2008年までさかのぼる更新情報が含まれていることです。 ファイルは次のようになります。
This file documents some of the problems you may encounter when upgrading your ports. We try our best to minimize these disruptions, but sometimes they are unavoidable. You should get into the habit of checking this file for changes each time you update your ports collection, before attempting any port upgrades. 20141208: AFFECTS: users of ports-mgmt/poudriere, ports-mgmt/poudriere-devel AUTHOR: [email protected] 8.4 jails created with Poudriere 3.1, or poudriere-devel-3.0.99.20141117 should be recreated with 'jail -d' and 'jail -c'. This fixes pkg(8) crashes. 20141205: AFFECTS: users of polish/kadu AUTHOR: [email protected] Before running kadu 1.x for the first time upstream developers advise to backup your ~/.kadu directory. . . .
前回の更新以降に追加された更新の問題については、このファイルを確認する必要があります。 このファイルには、システムにインストールされていないソフトウェアに関するものか、以前のアップデートの問題の詳細が記載されているため、検討しているアップデートに関連しない大量の情報が含まれているため、通常は、ファイルの先頭に近いエントリ。
アップグレードの前に実行する必要のある追加の手順がある場合は、今すぐ完了してください。
パッケージとポートの更新
UPDATING
ファイルで推奨されているアクションを実行すると、ソフトウェアを更新する準備が整います。 使用する方法は、ソフトウェアにプリコンパイル済みパッケージを使用するか、ソースベースのポートを使用するかによって異なります。
主にパッケージを使用していて、アップグレードにこの形式を使用したい場合は、pkg upgrade
コマンドを使用できます。
sudo pkg upgrade
これは、利用可能なアップデートがあるすべてのパッケージをアップグレードすることを提案するはずです。
この方法について注意すべきことの1つは、パッケージとポートを混在させている場合、パッケージの更新により、ポートシステムを使用して構築したソフトウェアを再インストールしようとする可能性があることです。 これは、さまざまなオプション、さまざまな依存関係を必要とする選択されたカスタマイズなどを使用してアプリケーションをコンパイルした場合に発生する可能性があります。 パッケージバージョンから。
このシナリオは次のようになります。
freebsd@wowie:~ % sudo pkg upgrade Updating FreeBSD repository catalogue... FreeBSD repository is up-to-date. All repositories are up-to-date. Updating database digests format: 100% Checking for upgrades (2 candidates): 100% Processing candidates (2 candidates): 100% The following 1 packages will be affected (of 0 checked): Installed packages to be REINSTALLED: portmaster-3.17.7 (options changed) The operation will free 1 KB. 40 KB to be downloaded. Proceed with this action? [y/N]:
この場合、portmaster
コマンドはポートシステムを介してインストールされましたが、pkg
はそれを認識しているバージョンと一致させようとしています。 カスタマイズしたポートのバージョンを保持したい場合は、この操作に対して「N」を押してから、次のように入力してパッケージをロックできます。
sudo pkg lock portmaster
これにより、ソフトウェアがアップグレードされなくなり、pkg upgrade
コマンドを使用して残りのソフトウェアをアップグレードできるようになります。 ロックされたソフトウェアをアップグレードする場合は、次のように入力して一時的にロックを解除できます。
sudo pkg unlock portmaster
主にportmaster
とポートを使用してパッケージを処理している場合は、次のように入力して、インストールされているオプションのソフトウェアをすべてアップグレードできます。
sudo portmaster -a
アップグレードするポートのオプションを選択するように求められます。 オプションの意味がわからない場合、または選択する特別な理由がない場合は、デフォルトを使用してもかまいません。
パッケージをアップグレードする前にportmaster
を使用すると、ポートとパッケージの更新が遅れるため、以前にパッケージを使用してインストールされていた一部のソフトウェアがポートを使用して更新される可能性があります。 これが問題にならない場合は、この方法を自由に使用してください。 ソフトウェアのパッケージを使い続けたい場合は、更新が再パッケージ化されるまで待つのがおそらく最善です。
パッケージをきめ細かく更新したい場合は、ポートツリーにあるカテゴリと名前を指定して特定のパッケージをアップグレードすることもできます。
sudo portmaster category/portname
たとえば、vim-lite
ポートをアップグレードするには、次のコマンドを発行できます。
sudo portmaster editors/vim-lite
結論
ご覧のとおり、FreeBSDサーバーを保守するために実行する必要のあるさまざまなプロセスがかなりあります。
これらの一部は、ベースシステムのソースを更新するプロセスのように、頻繁に実行する必要はありませんが、ベースオペレーティングシステムの更新や既知の脆弱性を持つソフトウェアの更新などの他のタスクは頻繁に完了する必要があります。 システムの保守は最初は複雑に思えるかもしれませんが、使用しているツールに慣れてくると、かなり簡単になります。
パッケージの操作方法の詳細については、このリンクをたどってください。 ポートの操作方法をよりよく理解するには、このガイドに従ってください。