基本的なFreeBSDメンテナンスの概要

前書き

FreeBSDサーバーを管理する場合、システムを良好な状態に保つのに役立つ基本的なメンテナンス手順を理解することが重要です。

このガイドでは、サーバーを最新の状態に保ち、適切に機能させるために必要な基本プロセスについて説明します。 FreeBSDチームが管理している基本オペレーティングシステムの更新方法について説明します。 また、ポートまたはパッケージシステムを介してインストールされたオプションソフトウェアを更新および保守する方法についても説明します。

FreeBSDの使用開始に支援が必要な場合は、https://www.digitalocean.com/community/tutorials/how-to-get-started-with-freebsd-10-1 [こちら]のガイドに従ってください。

ベースFreeBSDオペレーティングシステムの更新

FreeBSDを使用する際に理解すべき重要なことの1つは、ベースオペレーティングシステムがシステム上の他のソフトウェアとは別に構築および管理されることです。 これには多くの利点があり、FreeBSDチームはシステムのコア機能を慎重にテストおよび開発できます。

**:先に進む前に、現在の更新手順のバグに関するこのセクションの下部にある注意事項をお読みください。

サーバーの使用を開始すると、セキュリティ更新プログラムがベースシステムに公開されている可能性が高くなります。 これらの更新についてFreeBSDプロジェクトのサーバーに問い合わせ、新しいファイルをダウンロードし、システムにインストールするには、次のコマンドを入力します。

sudo freebsd-update fetch install

DigitalOcean FreeBSDインストールで作業している場合、デフォルトで `+ sudo `が含まれています。 別のプラットフォームを使用している場合は、portsシステムまたはパッケージを介して ` sudo `をインストールするか、ルートに ` su +`をインストールする必要があります。

`+ freebsd-update `コマンドは、ベースオペレーティングシステムのソフトウェアの管理ユーティリティです。 ` fetch `サブコマンドは新しいアップデートをダウンロードしますが、 ` install +`サブコマンドはそれらをライブシステムに適用します。

アップデートがある場合、アップデートの影響を受けるソフトウェアのリストが表示されます。 下矢印でスクロールするか、スペースバーでページをスクロールできます。 リストの一番下に到達すると、更新が適用されます。

更新された長期実行ソフトウェアは、新しいバージョンを使用するために再起動する必要があります。 カーネルの更新が表示された場合は、奇妙な動作を防ぐために再起動が必要です。 これを行うには、次のように入力します。

sudo shutdown -r now

重要:更新手順のバグ

現在、https://bugs.freebsd.org/bugzilla/show_bug.cgi?id = 195458 [こちら]で作業中のFreeBSDアップデート手順に関するアップストリームのバグがあります。 このバグにより、更新手順後にシステムの再起動時にハングアップします。

この状況に対処するには2つの方法があり、ほとんどの場合、2番目の方法が好まれます。

最初の方法は、DigitalOceanコントロールパネルを使用して、サーバーの電源を入れ直すだけです。 これにより、サーバーが強制的に再起動されますが、起動時に更新された環境が使用されます。

より安全な代替策は、更新前にファイルシステムのソフトアップデートまたはソフトアップデートのジャーナリングを無効にすることです。 ソフトアップデートは問題の中心にあるため、再起動のハングを防ぎます。 これはもう少し大規模な手順であり、ディスクが将来必要とするリカバリに時間がかかります(これらの機能を再度有効にするまで)。

これを行うには、更新を適用する前に、シングルユーザーモードで起動します。 これを行うには、次のように入力します。

sudo nextboot -o "-s" -k kernel
sudo reboot

次に、ドロップレットのDigitalOceanコントロールパネルに移動し、「コンソールアクセス」ボタンをクリックしてWebコンソールにアクセスします。 起動が完了したら「Enter」を押して、レスキューシェルセッションを取得します。 ここから、ソフトアップデートまたはソフトアップデートジャーナリングをオフにすることができます。

ソフト更新を完全に無効にするには、次を入力します。

tunefs -n disable /

それほど劇的ではない妥協策であるソフト更新ジャーナリングを無効にするだけの場合は、代わりに次のコマンドを使用できます。

tunefs -j disable /

これが完了したら、再起動を開始してサーバーを完全なマルチユーザーモードで再起動できます。

reboot

ブートが完了したら、再起動をハングさせることなく、上記の手順を使用してFreeBSDアップデートを取得して適用できます。

アップストリームの修正が利用可能になったときにこれらの変更を元に戻すことができるように、https://bugs.freebsd.org/bugzilla/show_bug.cgi?id = 195458 [バグレポート]に注目することをお勧めします。

更新チェックの自動化

`+ cron `ジョブを設定することにより、これらのセキュリティパッチを毎日自動的にチェックするようにシステムを設定することができます。 ` freebsd-update `ユーティリティには、この目的のために特別に利用できる特別な ` cron +`サブコマンドがあります。

これは、ダウンロードサーバーの負荷を分散するために、ランダムな時間(最大1時間)一時停止します。 その後、更新を確認してダウンロードします(基本的にはバックグラウンドでの `+ fetch +`操作)。 更新がダウンロードされると、指定されたユーザーアカウントに通知されます。 管理者が適切な時間に決定できるように、更新は自動的にインストールされません。

この自動チェックを設定するには、 `+ sudo `権限で ` / etc / crontab +`ファイルを編集します:

sudo vi /etc/crontab

ファイルの最後に、次のような行を追加します。

@daily root freebsd-update -t  cron

上記のコマンドは、rootユーザーとして更新コマンドを自動的に実行します。 更新が見つかった場合、 `+ -t `コンポーネントの後に指定されたユーザーアカウントに通知されます。 上記の例では、デフォルトの ` freebsd +`ユーザーに通知されます。

完了したら、ファイルを保存して閉じます。

次回 `+ freebsd +`アカウントにログインするときに、次のように入力してメールをチェックできます。

mail

更新がダウンロードされた場合、次のようなものが表示されます。

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

カーネルパッチが適用された場合はマシンを再起動し、アップデートの影響を受けたサービスを再起動することを忘れないでください。

オペレーティングシステムのソースの同期

たぶん時々あなたがしたいと思う一つの仕事は、FreeBSDソースコードのコピーをあなたのシステムに同期することです。 これはさまざまな理由で役立ちます。 一部のポートでは、現在のソースを正しくビルドする必要があり、ソースを使用して新しいソフトウェアブランチへの追跡を開始することもできます。

FreeBSDソースコードはSVNリポジトリで管理されています。 Subversionに伴う大きなオーバーヘッドなしで、ソースの最新バージョンのみが必要な場合は、 `+ 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 = +`行があり、それらはすべてコメント化されています。 自分に近いと思われるものを選択して、コメントを外します。

. . .
[defaults]
work_directory=/var/tmp/svnup
#host=svn.freebsd.org
#host=svn0.us-west.freebsd.org

#host=svn0.eu.freebsd.org

. . .

次に、各SVNブランチを記述するファイルのセクションが、使用しているリリースバージョンを参照していることを確認する必要があります。 コマンドラインから次のように入力して、リリースバージョンを確認できます。

freebsd-version
10.1-RELEASE-p2

これにより、オペレーティングシステムのブランチと、最後のシステムパッチレベルがわかります。 現在の目的のために注意したい部分は、最初のダッシュの前の数字です。 この場合、「+ 10.1+」を指定します。 `+ RELEASE +`は、FreeBSDで利用可能な最も安定したブランチであるリリースブランチを現在追跡していることを意味します。

ファイルに戻り、 `+ [release] `の下の ` branch = +`パラメータの定義がこの番号を指していることを確認します。

. . .

[release]
branch=base/releng/
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つに対して ` checkout +`コマンドを発行することです。

たとえば、上記の `+ svnup +`コマンドを使用して行ったのと同じソースをチェックアウトするには、次のように入力できます。

sudo svn checkout https://svn0.us-east.FreeBSD.org/base/releng/10.1 /usr/src

このコマンドのURLは基本的に、 `+ svnup `設定ファイルで見た ` host = `と ` branch = +`の定義の組み合わせにすぎないことに注意してください。

システムのオプションソフトウェアの記録の更新

FreeBSDは、サーバーに追加のソフトウェアをインストールするために2つの異なる形式を提供します。 1つ目は「ポート」と呼ばれるソースベースのシステムで、2つ目は使用可能なポートに基づいてプリコンパイルされたパッケージのリポジトリです。 ベースオペレーティングシステムの外部にあるソフトウェアの場合、管理のためにいくつかの追加ツールが使用されます。

システムは、 `+ / usr / ports `をルートとするディレクトリ階層内にインストールできるポートに関する情報を保持します。 このディレクトリ構造は「ポートツリー」と呼ばれます。 ポートに触れる前に、使用可能なソフトウェアに関する最新情報がポートツリーにあることを確認する必要があります。 これを行うには、 ` portsnap +`コマンドを使用できます。

`+ portsnap `コマンドの構文は、いくつかの点で ` freebsd-update `コマンドの構文を反映しています。 DigitalOceanでは、ソースツリーに利用可能なポートに関する初期情報が事前に入力されます。これは、2番目の「 portsnap +」コマンドで示されているように更新できます。

DigitalOceanを使用していない場合、開始時に `+ / usr / ports `ディレクトリはおそらく空です。 この場合、初めて ` portsnap `を使用するときは、 ` extract on`を使用する必要があります。

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)

システムにインストールされているソフトウェアをポートツリーの最新のインデックスファイルと照合しているため、ポートツリーにまだパッケージに到達していない更新がある時点でこれを確認する場合があります。 これは、パッケージがポートツリーから構築され、多くの場合わずかに遅れる必要があるために発生します。

この可能性のため、上記のコマンドは、実際にはまだパッケージとして利用できない更新を表示する場合があります。 これらのインスタンスを見つけるために、上記のコマンドの出力をこのコマンドの出力と比較できます。

pkg version -vRL=

このコマンドは(portsツリーのインデックスファイルではなく)利用可能なパッケージの `+ pkg `システムのデータベースで新しいバージョンをチェックします。 2つのコマンドが同じ出力を生成する場合、 ` pkg +`システムを使用してパッケージを更新できます。

最初のコマンドに更新があり、2番目のコマンドには表示されない場合、これは変更がまだパッケージ化されていないことを意味します。 更新が必要なソフトウェアのパッケージを使用している場合は、パッケージが追いつくまで待つか、ポートに切り替えて最新の更新をすぐに入手できます。

Portmasterを使用した更新の確認

portsシステムを使用してソースからソフトウェアをビルドすることをより頻繁に選択する場合、魅力的な代替手段は `+ portmaster +`コマンドです。 このツールは、更新の確認と適用から、ポートとその依存関係のすべてのインストールまたは削除まで、FreeBSDのポートベースのソフトウェア管理タスクに役立ちます。

`+ portmaster +`コマンドを取得するには、パッケージをインストールするか、portsシステムからコンパイルします。

パッケージをインストールするには、次を入力します。

sudo pkg install portmaster

ソースからツールをコンパイルする場合は、ポートツリーでパッケージのディレクトリに切り替え、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サーバーから最新の脆弱性データベースがダウンロードされ、システムにインストールされているソフトウェアと照合されます。 インストールしたソフトウェアに脆弱性が存在する場合、警告が表示されます。

更新ノートを確認する

ソフトウェアを更新する前に、更新によって引き起こされる可能性のある破損をチェックすることが*必須*です。 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つは、パッケージとポートが混在している場合、パッケージの更新により、portsシステムを使用して構築したソフトウェアの再インストールが試行される場合があることです。 これは、異なるオプションでアプリケーションをコンパイルした場合、異なる依存関係を必要とする選択したカスタマイズなどで発生する可能性があります。 パッケージ版から。

このシナリオは次のようになります。

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 `コマンドはportsシステムを介してインストールされましたが、 ` pkg +`はそれが知っているバージョンに合わせようとしています。 カスタマイズしたポートバージョンを保持する場合は、この操作で「N」を押してから、次のように入力してパッケージをロックできます。

sudo pkg lock portmaster

これにより、ソフトウェアがアップグレードされなくなり、 `+ pkg upgrade +`コマンドを使用して残りのソフトウェアをアップグレードできます。 ロックされたソフトウェアをアップグレードする場合、次のように入力して一時的にロックを解除できます。

sudo pkg unlock portmaster

主に `+ portmaster +`とポートを使用してパッケージを処理している場合は、次のように入力して、インストールされているオプションのソフトウェアをすべてアップグレードできます。

sudo portmaster -a

アップグレードするポートのオプションを選択するよう求められます。 オプションの意味がわからない場合、または選択する特定の理由がない場合は、デフォルトを使用してもかまいません。

パッケージをアップグレードする前に `+ portmaster +`を使用すると、ポートとパッケージの更新に遅れがあるため、以前にパッケージを使用してインストールされた一部のソフトウェアがポートを使用して更新される可能性があります。 これが問題にならない場合は、この方法を使用してください。 ソフトウェアのパッケージを使用したい場合は、おそらく更新プログラムが再パッケージされるまで待つことをお勧めします。

パッケージをきめ細かく更新する場合は、ポートツリーで見つかったカテゴリと名前を指定して、特定のパッケージをアップグレードすることもできます。

sudo portmaster /

たとえば、 `+ vim-lite +`ポートをアップグレードするには、次のコマンドを発行できます。

sudo portmaster editors/vim-lite

結論

ご覧のように、FreeBSDサーバーを維持するために実行する必要のあるプロセスはかなりあります。

これらの一部は、ベースシステムのソースを更新するプロセスなど、頻繁に実行する必要はありませんが、ベースオペレーティングシステムの更新や既知の脆弱性を持つソフトウェアの更新などの他のタスクは頻繁に実行する必要があります。 システムのメンテナンスは、最初は複雑に思えるかもしれませんが、使用しているツールに慣れると、かなり簡単になります。

パッケージの操作方法の詳細については、https://www.digitalocean.com/community/tutorials/how-to-manage-packages-on-freebsd-10-1-with-pkg [このリンク]をご覧ください。 。 ポートを操作する方法のより良いアイデアを得るには、https://www.digitalocean.com/community/tutorials/how-to-install-and-manage-ports-on-freebsd-10-1 [このガイド]に従ってください。