序章

FreeBSDは、さまざまな役割で機能できる強力なオペレーティングシステムです。 このオペレーティングシステムを多くのシナリオで理想的な選択肢にしている理由の1つは、柔軟性に対する評判です。 この評判への大きな貢献は、ポートシステムとして知られているソースからソフトウェアをインストールするためのFreeBSDのサポートされた方法から来ています。

このガイドでは、ポートシステムの利点のいくつかについて説明し、それを使用して追加のソフトウェアを取得および管理する方法を示します。 を使用してインストールする方法について説明します make コマンド、アプリケーションをカスタマイズする方法、およびいくつかの一般的なツールを活用してポートのメンテナンスを容易にする方法。

Note: As of July 1, 2022, DigitalOcean no longer supports the creation of new FreeBSD Droplets through the Control Panel or API. However, you can still spin up FreeBSD Droplets using a custom image. Learn how to import a custom image to DigitalOcean by following our product documentation.

前提条件

このガイドに従うには、FreeBSD10.1サーバーとroot以外のユーザーアカウントにアクセスできる必要があります。 sudo 特権。 このガイドは、FreeBSDサーバーにログインし、適切な作業環境をセットアップするのに役立ちます。

さまざまな種類のFreeBSDソフトウェアの管理

FreeBSDチームは、基本のFreeBSDオペレーティングシステムを一貫したユニットとして維持しています。 そのコンポーネントは、と呼ばれるツールを使用して更新されます freebsd-update そして、それらの動作は、主に内にある構成ファイルを介して制御されます。 /etc ディレクトリ。 バンドルされているソフトウェアの代替ソフトウェアをインストールして使用することはできますが、基本システムに含まれているものはオペレーティングシステムの機能的に不可欠な部分と見なされるため、簡単または安全に削除することはできません。

対照的に、オプションのソフトウェアは、ファイルシステム内のさまざまなプロセス、ツール、および場所を使用して管理されます。 基本システムのソフトウェアとは異なり、オプションのソフトウェアは /usr/local/etc ディレクトリ。 FreeBSDは、システムに追加のソフトウェアをダウンロードしてインストールするための2つの認可された方法を提供します。

このガイドで説明するポートシステムは、次の場所にあるファイルシステム階層を介して管理されます。 /usr/ports これは、FreeBSDが構築方法を知っている利用可能なソフトウェアの各部分を分類します。 このディレクトリ内の第1レベルのサブディレクトリは、主に機能または言語に従ってソフトウェアを分類します。 これらのディレクトリ内には、ソフトウェアの個々の部分ごとにフォルダが存在します。 ソフトウェアは、簡単な方法でダウンロード、構成、コンパイル、およびインストールできます。 make コマンドまたは利用可能なヘルパーユーティリティを介して。 portsコレクションのソフトウェアには、FreeBSDシステムでアプリケーションをビルドして実行するために必要なすべてのパッチが含まれています。

システムでサポートされている他のタイプのインストールは、 packages です。これは、適切なデフォルトを使用して、portsコレクションからコンパイルされたソフトウェアバイナリです。 これはソフトウェアをすばやく入手するための優れた方法ですが、ポートシステムによって提供されるカスタマイズのレベルを失います。 ソフトウェアパッケージの管理方法について詳しくは、このガイドをご覧ください。

ポートツリーの準備

ポートツリーは、その下に存在する階層の名前です。 /usr/ports ディレクトリ。 この階層には、ポートカテゴリに対応するディレクトリが含まれ、その中には、個々のポートに対応する他のディレクトリがあります。

ポートの操作を開始する前に、この階層が最新であることを確認する必要があります。 ポート階層の更新を忘れると、ポートが有効でなくなった可能性のあるファイルをフェッチしてビルドしようとするため、ビルドが失敗する可能性があります。

と呼ばれるユーティリティを使用してポートツリーを更新できます portsnap. このツールは、FreeBSDポートサーバーに変更を問い合わせます。

最後の更新をメモする

実際の更新コマンドを実行する前に、ポートツリー内の特定のファイルのタイムスタンプをメモする必要があります。 /usr/ports/UPDATING. 使用できます stat ファイルに関連付けられているさまざまなタイムスタンプを表示するツール:

stat -x /usr/ports/UPDATING

次のような出力が表示されます。

  File: "UPDATING"
  Size: 375337       FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (    0/    root)  Gid: (    0/   wheel)
Device: 0,81   Inode: 2011338    Links: 1
Access: Thu Dec 11 22:24:59 2014
Modify: Thu Dec 11 15:40:12 2014
Change: Thu Dec 11 22:24:59 2014

代わりに、次のようなエラーが発生する可能性があります。

stat: /usr/ports/UPDATING: stat: No such file or directory

これが表示された場合は、システムでポートツリーが初期化されていないことを意味します。 この場合は、次のセクションに進んで、を使用してシステムに初期ポートツリーを抽出する方法を学習してください。 portsnap.

注意したい値は、上記の出力で強調表示されている「変更」時間と「変更」時間です。 この場合、「変更」タイムスタンプは、ポートメンテナが重要な情報でファイルを変更した最新の時刻になります。 「変更」タイムスタンプは、ファイルがサーバーに最後に同期された時刻になります。

ポートツリーを更新した後、どの更新メモに注意を払う必要があるかを知るために、タイムスタンプを覚えておく必要があります。 次のように入力して、これらをホームディレクトリのファイルに保存できます。

stat -x /usr/ports/UPDATING > ~/last_update

この情報が記録されたので、先に進んでポートツリーを更新できます。

Portsnapを使用したPortsツリーの更新

ポートツリーが最後に更新されたのがいつかがわかったら、ポートツリーをFreeBSDプロジェクトのサイトからの最新情報と同期させることができます。 これを行うには、次のツールを使用します portsnap.

に情報がない場合 /usr/ports ディレクトリ(前のセクションで説明したエラーが発生した場合)では、ポートツリー全体をダウンロードしてそのディレクトリに抽出できます。 portsnap. このプロセスにはかなりの時間がかかる場合がありますが、必要なのは /usr/ports directory is empty, a situation that should only happen once.

sudo portsnap fetch extract

これにより、ポートツリー全体がダウンロードされて抽出されます。 /usr/ports ディレクトリ。

すでにポートツリーが組み込まれている場合 /usr/ports ディレクトリ(前のセクションでタイムスタンプを記録できた場合)は、次のコマンドを使用してファイルを最新バージョンに更新できます。

sudo portsnap fetch update

このコマンドは、内のファイルとは異なるファイルのみを抽出します /usr/ports 構造なので、 extract コマンドのバリアント。 これは、portsツリーの日々の更新で使用する必要がある形式です。

ポートツリーが構築または更新されると、システム上のポートの管理と操作を開始できます。

ポートツリーでアプリケーションを検索する

システムのポートツリー階層が更新されたので、使用可能なソフトウェアの確認を開始できます。 これを行うにはいくつかの方法があり、それぞれに利点があります。

で検索 whereis

アプリケーションを検索する最も簡単な方法は、名前で whereis 指図。 これにより、システム上およびポートツリー内でコマンドが検索されます。 一致するものが見つかると、システム上のアプリケーションに関連するパス情報が返されます。

通常、アプリケーションがインストールされていないが、有効なポートを検索した場合は、ポートツリー内のポートへのパスが返されます。 アプリケーションでインストールされている場合、通常、実行可能ファイルへのパス、ポート、および多くの場合、 man ページ:

たとえば、 wget これを入力してユーティリティ:

whereis wget

ポートがインストールされていない場合、次のように表示されます。

wget: /usr/ports/ftp/wget

パスはで始まるので /usr/ports、これはインストール可能なポートであることがわかっています。 このポートをインストールする場合は、返されたパスを使用できます。

の場合 wget コマンドはすでにインストールされているため、次のような出力が表示される場合があります。

wget: /usr/local/bin/wget /usr/local/man/man1/wget.1.gz /usr/ports/ftp/wget

これには、実際にインストールされた実行可能ファイルへのパスが含まれます。 man アプリケーションのページファイル、およびポートツリー内のポートの場所。

を使用して検索する echo ファイルシステム階層のコマンド

FreeBSDハンドブックでは、著者はまた、 echo コマンドとportsツリーの組み込み構造。

ポートツリーは、関連するすべてのファイルとディレクトリで設定されます。 /usr/ports ディレクトリ。 ファイルシステムでは、各ポートは、FreeBSDシステムでソフトウェアをビルドおよびインストールするために必要なすべての情報を含む個別のディレクトリで表されます。

整理を支援するために、これらのポートは、内のカテゴリディレクトリ内の機能ごとにグループ化されています /usr/ports. だからで wget 上記の例では、 wget コマンドは、 ftp グループ。 だから /usr/ports ディレクトリにはカテゴリディレクトリが含まれ、カテゴリディレクトリにはポートのディレクトリが含まれます。

この一貫性のある構造を活用するには、 echo コマンドとワイルドカード。 ポートが存在するカテゴリがわからない可能性があるため、そのディレクトリレベルをアスタリスクに置き換えます。 マッチングをより柔軟にしたい場合は、検索語の前後にこれらを配置することもできます。 だから私たちは検索することができます wget 次のように入力して、関連するプログラムを作成します。

echo /usr/ports/*/*wget*

これにより、次のようなものが返されます。

/usr/ports/ftp/gwget /usr/ports/ftp/wget /usr/ports/www/ruby-wgettsv /usr/ports/www/wgetpaste

これは、 whereis 完全一致を必要としないため、コマンド。

利用可能なものを使用した検索 make ターゲット

ポートを検索する最も強力な方法は、 make 指図。

これは、システムにポートを構築してインストールするために使用されるコマンドでもありますが、より一般的には、構成ファイルで定義された複雑なタスクを簡単に実行するために使用できる柔軟なツールです。 FreeBSD開発者は作成しました make さまざまな基準でポートツリーの検索を実行する「ターゲット」(タスク定義)。

この機能を使用するには、最初にポートツリーのベースに移動する必要があります。 これは、 make ターゲットが定義されています:

cd /usr/ports

検索を実行するための一般的な構文は次のとおりです。

make [search|quicksearch] [searchtype]=[searchquery] [modifiers]

二つ make ポートツリーを検索するように設計されたターゲットは searchquicksearch. これらの機能はまったく同じですが、デフォルトの表示のみが異なります。

The search targetは、ポートの名前、ポートツリー内のパス、一般的な説明、およびメンテナの電子メール、ビルドの依存関係、実行の依存関係、アップストリームURLなどのビルドに関する詳細を返します。 The quicksearch targetは、ポート名、パス、および説明のみを返します。

検索タイプは次のいずれかになります。

  • name :ポートの名前フィールド内でのみ検索します。
  • key :ポートの名前、コメント、および依存関係のフィールド内を検索します。
  • path :ポート階層内の特定のパスを検索します。
  • info :ポートのinfo(説明)フィールド内を検索します。
  • maint :メンテナのメールアドレスで検索します。
  • cat :ポートのカテゴリに基づいて検索します。
  • bdeps :各ポートのビルド時の依存関係を検索します。
  • rdeps :各ポートの実行時の依存関係を検索します。
  • www :ポートのWebサイトを検索します。

上記のカテゴリの前に「x」を追加して、一致する結果を削除することもできます。 たとえば、検索に xname=apache、名前フィールドに文字列「apache」が含まれているポートは返されません。

いくつかの簡単な例を見てみましょう。 以下に、の出力の違いを見ることができます searchquicksearch ターゲット。 The search ターゲットには、試合に関する完全な情報が含まれています。

make search name=htop
Port:   htop-1.0.3
Path:   /usr/ports/sysutils/htop
Info:   Better top(1) - interactive process viewer
Maint:  [email protected]
B-deps: autoconf-2.69 autoconf-wrapper-20131203 automake-1.14_1 automake-wrapper-20131203 gettext-runtime-0.19.3 indexinfo-0.2.2 libexecinfo-1.1_3 libffi-3.0.13_3 libiconv-1.14_6 m4-1.4.17_1,1 ncurses-5.9.20141213 perl5-5.18.4_11 python2-2_3 python27-2.7.9 readline-6.3.8
R-deps: libexecinfo-1.1_3 lsof-4.89.b,8 ncurses-5.9.20141213
WWW:    http://htop.sourceforge.net/

一方、 quicksearch targetは、検出した一致に関する重要な情報のみを表示します。

make quicksearch name=htop
Port:   htop-1.0.3
Path:   /usr/ports/sysutils/htop
Info:   Better top(1) - interactive process viewer

さまざまな検索タイプを組み合わせて、結果を絞り込むことができます。 たとえば、 ntop ネットワークモニターでは、次のような結果が表示される場合があります。

make quicksearch name=ntop
Port:   ntopng-zmq-3.2.3_1
Path:   /usr/ports/devel/ntopng-zmq
Info:   NTOPNG specific ZMQ library

Port:   diveintopython-5.4_1
Path:   /usr/ports/lang/diveintopython
Info:   Free Python tutorial book that is "not For Dummies(tm)"

Port:   ntop-5.0.1_8
Path:   /usr/ports/net/ntop
Info:   Network monitoring tool with command line and web interfaces

Port:   ntopng-1.2.1_1
Path:   /usr/ports/net/ntopng
Info:   Network monitoring tool with command line and web interfaces

Port:   sntop-1.4.3_1
Path:   /usr/ports/net/sntop
Info:   Monitor status of network nodes using fping

ここでは、ほとんどの結果がに関連していることがわかります ntop、しかし、Pythonの学習についての本もあります。 パス指定を追加することで、さらにフィルタリングできます。

make quicksearch name=ntop path=/net
Port:   ntop-5.0.1_8
Path:   /usr/ports/net/ntop
Info:   Network monitoring tool with command line and web interfaces

Port:   ntopng-1.2.1_1
Path:   /usr/ports/net/ntopng
Info:   Network monitoring tool with command line and web interfaces

Port:   sntop-1.4.3_1
Path:   /usr/ports/net/sntop
Info:   Monitor status of network nodes using fping

また、いくつかの異なる方法で検索の動作を変更することもできます。 いくつかの有効な修飾子は次のとおりです。

  • icase :大文字と小文字を区別しないようにするには、これを「1」に設定します。 これがデフォルトです。 検索で大文字と小文字を区別するには、これを「0」に設定します。
  • display :これには、出力に表示するための、コンマで区切られたフィールドのリストが含まれます。
  • keylim :検索(「キー」検索タイプを使用)を、表示されているフィールドのみに制限します。 「1」に設定してオンにします。

たとえば、次のように入力して、大文字の文字列「Paste」を含む説明またはパスを検索できます。

make search key=Paste display=path,info keylim=1 icase=0
Path:   /usr/ports/devel/pear-SebastianBergmann_PHPCPD
Info:   Copy/Paste Detector (CPD) for PHP code

Path:   /usr/ports/devel/py-zope.copypastemove
Info:   Copy, Paste, and Move support for content components

Path:   /usr/ports/german/bsdpaste
Info:   Pastebin web application to upload and read text on a webserver

Path:   /usr/ports/www/p5-WWW-Pastebin-PastebinCom-Create
Info:   Paste to http://pastebin.com from Perl

Path:   /usr/ports/www/p5-WebService-NoPaste
Info:   Pastebin web application to upload snippets of text

Path:   /usr/ports/www/py-django-dpaste
Info:   Pastebin Django application that powers dpaste.de

Path:   /usr/ports/www/wgetpaste
Info:   Paste to several pastebin services via bash script

検索で遭遇する可能性のあるもう1つの状況は、ポートが移動または削除されたことです。 これらの結果は次のようになります。

make quicksearch name=wget
. . .

Port:   ftp/emacs-wget
Moved:
Date:   2011-05-02
Reason: Has expired: Upstream disappeared and distfile is no longer available

Port:   ftp/wgetpro
Moved:
Date:   2011-10-14
Reason: Vulnerable since 2004-12-14

Port:   www/wget4web
Moved:
Date:   2012-01-01
Reason: Has expired: Depends on expired www/apache13

ポートが新しい場所に移動された場合、「移動済み」フィールドには、ポートを見つけることができる新しい場所が含まれます。 このフィールドは存在するが空の場合、ポートは削除されています。

これらは削除されても、検索結果には表示されます。 移動または削除されたポートが表示されないようにする場合は、 PORTSEARCH_MOVED 環境変数を「0」に設定します。

たとえば、デフォルトを使用して、後続のコマンドに対してのみこの変数を「0」に設定するには tcsh、次のように入力できます。

env PORTSEARCH_MOVED=0 make quicksearch name=wget
Port:   gwget-1.0.4_9
Path:   /usr/ports/ftp/gwget
Info:   GNOME wget front-end

Port:   wget-1.16
Path:   /usr/ports/ftp/wget
Info:   Retrieve files from the Net via HTTP(S) and FTP

Port:   ruby20-ruby-wgettsv-0.95
Path:   /usr/ports/www/ruby-wgettsv
Info:   Collect WWW resources and generate TSV data

Port:   wgetpaste-2.25
Path:   /usr/ports/www/wgetpaste
Info:   Paste to several pastebin services via bash script

ご覧のとおり、移動または削除されたすべてのエントリが結果から除外されています。 これをデフォルトの動作にしたい場合は、次のように設定できます。 PORTSEARCH_MOVED=0 あなたの中で make.conf ファイル:

sudo sh -c 'echo "PORTSEARCH_MOVED=0" >> /etc/make.conf'

Makeを使用したポートのインストール

インストールするポートが見つかったら、必要なファイルを簡単にダウンロードし、バイナリをビルドして、 make 指図。

ポートをインストールするには、ポートツリー内のポートのディレクトリに移動します。 この場所は、上記の検索方法のいずれかを使用して見つけることができます。 これを実証するために、というポートをインストールします portmaster、このガイドの後半で必要になります。

まず、ポートの場所に変更します。 The portmaster ポートはに保持されます ports-mgmt カテゴリー:

cd /usr/ports/ports-mgmt/portmaster

これで、を使用してポートを簡単にダウンロード、構成、コンパイル、およびインストールできます。 make ターゲット。 これらの操作はシステムに影響を与えるため、使用する必要があります sudo. これを行うための長い道のりは、 make、 このような。 これらのコマンドはまだ入力しないでください。すぐに、はるかに短いバージョンが表示されます。

sudo make config
sudo make fetch
sudo make checksum
sudo make depends
sudo make extract
sudo make patch
sudo make configure
sudo make build
sudo make install

シングルの後に各ターゲットをリストすることで、これをできます少し短縮できます make このようなコマンド:

sudo make config fetch checksum depends extract patch configure build install

ただし、これはほとんどの場合不要です。 上記の各ターゲットは、タスクを完了するために必要な先行するターゲットを呼び出します。 したがって、上記は単純に次のように要約できます。

sudo make install

通常、このコマンドチェーンを少し拡張して、すべてが正しく構成されていることを確認します。 通常は指定したい config-recursive、上記のパイプラインにないオプション、 install このポートの構成とインストールの開始時の依存関係を処理するためのターゲット。 そうしないと、ビルドプロセスが停止し、必要な依存関係のビルドの途中でユーザー入力を待つ可能性があります。

また、通常、インストール後に少しクリーンアップして、ディスクスペースを再利用し、システムをクリーンに保ちます。 私たちはこれを行うことができます clean また distclean ターゲット。 The clean targetは、このポートと依存関係ポートの構築に使用された抽出されたソースコードを削除します。 The distclean targetもこれを行いますが、このパッケージの圧縮されたソースアーカイブを /usr/ports/distfiles ディレクトリ。

したがって、一般的なインストールコマンドは次のようになります。

sudo make config-recursive install distclean

これにより、プロセスの開始時にポートと依存関係を構成するように求められます。 その後、ソースアーカイブの整合性をダウンロードして検証します。 次に、不足している依存関係を満たすためにコンテキストを変更します。 そのプロセスが完了すると、問題のポートに戻り、アーカイブを抽出し、必要なパッチを適用して、選択したオプションに従って構成します。 次に、アプリケーションをコンパイルしてシステムにインストールします。 その後、このポートと依存関係の拡張されたソースコードが削除されます。 次に、このポートのソースアーカイブを削除します。

上記のコマンドを /usr/ports/ports-mgmt/portmaster ディレクトリ:

sudo make config-recursive install distclean

アプリケーションの単一のダイアログボックスが表示されます。 リストされているシェルのいずれかを使用している場合は、ここでツールのシェル補完を構成することを選択できます。

The portmaster ポートには依存関係はありませんが、依存関係がある場合は、上記のターゲットポートの構成の直後に依存関係の構成オプションが表示されます。 ポートがダウンロード、構成、およびインストールされます。

デフォルトを使用している場合 tcsh、インストールのたびにPATHを再スキャンして、シェル環境がインストールされているすべてのアプリケーションを認識できるようにします。

rehash

上記のプロセスが成功した場合は、最初のポートが正常にインストールされています。

メインのオペレーティングシステムと構成は従来の場所で行われますが、ポートシステムを介してインストールされるオプションのソフトウェアは、 /usr/local 階層。

これは、オプションのソフトウェアを構成するには、 /usr/local/etc ディレクトリ。 実行可能ファイル自体は、主に /usr/local/bin/usr/local/sbin ディレクトリ。 アプリケーションを構成または開始するときは、このことに注意してください。

サービスとして実行されるアプリケーションに関する注意事項

注意すべき点の1つは、サービスとして実行されるポートをインストールする場合、インストール手順ではサービスが自動的に開始されないことです。 実際、FreeBSD内でサービスを開始するためにあなたが取らなければならないいくつかのステップがあります。

サービスを1回だけ開始する場合は、次のように入力します。

sudo service servicename onestart

たとえば、MySQLを起動するには、次のように入力します。

sudo service mysql-server onestart

必要な構成が完了していると仮定すると、これによりサービスが1回開始されます。 後でサービスを停止する場合は、次のように入力できます。

sudo service mysql-server onestop

これはクイックテストでは機能しますが、FreeBSDでサービスを管理するための理想的な方法ではありません。 起動ごとに開始するようにサービスを構成するには、サービスを有効にする必要があります。 そのためには、に行を追加する必要があります /etc/rc.conf ファイル。

オプションサービスの開始方法を指定するinitファイルは、 /usr/local/etc/rc.d ディレクトリ。 これらの初期化ファイルのそれぞれで、 rcvar initシステムに内のどの変数を通知します /etc/rc.conf サービスを開始するかどうかを決定するために探すファイル。 オプションのサービスごとに、追加する適切な行を見つけることができます /etc/rc.conf 次のように入力してファイルを作成します。

grep rcvar /usr/local/etc/rc.d/*

次のようなリストが表示されます。

/usr/local/etc/rc.d/avahi-daemon:rcvar=avahi_daemon_enable
/usr/local/etc/rc.d/avahi-dnsconfd:rcvar=avahi_dnsconfd_enable
/usr/local/etc/rc.d/dbus:rcvar=dbus_enable
/usr/local/etc/rc.d/rsyncd:rcvar=rsyncd_enable

出力の強調表示された部分は、これらの各サービスを有効にするために「YES」に設定する必要がある変数を示しています。

たとえば、 rsync デーモンサービス、この行をに追加できます /etc/rc.conf:

rsyncd_enable="YES"

適切な行は、 /etc/rc.conf 通常のサービス管理コマンドを使用する前にファイルを作成してください。 たとえば、上記の行をの下部に追加できます /etc/rc.conf テキストエディタを使用するか、次のように入力してファイルを作成します。

sudo sh -c "echo 'rsyncd_enable="YES"' >> /etc/rc.conf"

これにより、起動のたびにrsyncデーモンが開始されます。 これで、を使用してサービスを制御できます。 service 「one」プレフィックスなしのコマンド。 たとえば、次のように入力してサービスを開始できます。

sudo service rsyncd start

次のように入力すると、サービスを再度停止できます。

sudo service rsyncd stop

インストールされたポートの削除

不要になったポートをインストールした場合は、同様の、より簡単なプロセスを使用して、システムからアプリケーションを削除できます。

使用できます deinstall システムからアプリケーションを削除するターゲット。 ここでも、削除するアプリケーションに関連付けられているポートツリー内のディレクトリに移動します。

cd /usr/ports/ports-mgmt/portmaster

次のように入力して、システムからアプリケーションを削除できます。

sudo make deinstall

このポートに設定したオプションも削除する場合は、次のように入力します。

sudo make rmconfig

このポートとそのすべての依存関係の構成オプションを削除するには、次のように入力します。

sudo make rmconfig-recursive

削除した場合 portmaster 上記のコマンドを使用して、次のように入力して再インストールします。

sudo make reinstall distclean

アプリケーションの更新

プログラムをインストールまたは削除する方法がわかったので、アプリケーションを最新の状態に保つ方法を示す必要があります。

更新ファイルで重要な更新メモを確認する

このガイドの冒頭で、のタイムスタンプを保存しました /usr/ports/UPDATING 使用する前のファイル portsnap ポートツリーを更新します。

The /usr/ports/UPDATING ファイルには、管理者による追加の手動手順が必要になる可能性のある更新および変更に関する、ポートメンテナからの重要なメモが含まれています。 アプリケーションを更新する前にこのファイルを読み取らず、アドバイスを適用しないと、システムが使用できなくなったり、アプリケーションの機能に影響を及ぼしたりする可能性があります。

まず、ホームディレクトリのファイルに保存したタイムスタンプを確認します。

cat ~/last_update
  File: "/usr/ports/UPDATING"
  Size: 375337       FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (    0/    root)  Gid: (    0/   wheel)
Device: 0,81   Inode: 2011338    Links: 1
Access: Thu Dec 11 22:24:59 2014
Modify: Thu Dec 11 15:40:12 2014
Change: Thu Dec 11 22:24:59 2014

「変更」タイムスタンプは、システム上のUPDATINGファイルがポートメンテナによって最後に変更された時刻を示し、「変更」タイムスタンプは、最後に同期した時刻を示します。 上記の情報は古いタイムスタンプです。 この情報から、12月11日から現在の日付までのエントリに注意を払う必要があることがわかります。

更新されたUPDATINGファイルを今すぐ開きます。

less /usr/ports/UPDATING

ファイルは次のようになります。

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.

20150101:
  AFFECTS: users of net/unison and net/unison-nox11
  AUTHOR: [email protected]

  Unison has been upgraded to version 2.48, which uses a different wire
  protocol than 2.40 did.  In order to support synchronization with
  other computers where Unison is still at version 2.40, a new port
  net/unison240 has been created.  It provides unison240 and if that is
  GTK2-enabled, also unison240-text.  This unison240 port can be
  installed in parallel with the existing net/unison port.

20141230:
  AFFECTS: users of deskutils/xpad
  AUTHOR: [email protected]

  deskutils/xpad has been moved to deskutils/xpad3, since 4.x has been around
  for a while.

  Should you wish to stick with legacy branch at this time;

  # portmaster -o deskutils/xpad deskutils/xpad3

. . .

このファイルには、2008年までさかのぼって、利用可能なすべてのポートの潜在的に重大な変更がすべて含まれています。 次の注意事項にのみ注意を払う必要があります。

  • 前回ポートを更新してから追加されています
  • システムにインストールしたポートを使用します

したがって、この例では、12月11日以降にインストールされたポートに関連して追加された通知にのみ注意を払う必要があります。 システムにインストールされているポートがわからない場合は、次を使用できます。 portmaster 完全なリストを作成するには:

portmaster -l
===>>> Root ports (No dependencies, not depended on)
===>>> dialog4ports-0.1.5_2
===>>> pkg-1.4.0
===>>> pkgconf-0.9.7
===>>> portmaster-3.17.7
===>>> rsync-3.1.1_3
===>>> 5 root ports

===>>> Trunk ports (No dependencies, are depended on)
===>>> ca_root_nss-3.17.3_1
===>>> expat-2.1.0_2

. . .

出力は、依存関係に従ってセクションに分割されます。 この情報を使用して、更新ノートと照合します。

手動の手順が必要な場合は、残りの更新を続行する前にそれらを完了してください。

既知の脆弱性のチェック

更新時に留意すべきもう1つの考慮事項は、システムにインストールされているソフトウェアに既知のセキュリティの脆弱性があるかどうかです。

FreeBSDは脆弱性データベースを維持しており、ポートまたはパッケージにセキュリティ上の問題があるかどうかを確認できます。 この機能はに含まれています pkg 道具。 次のように入力して、セキュリティ監査を実行します。

sudo pkg audit -F

これにより、FreeBSDプロジェクトのサーバーから脆弱性データベースの最新バージョンがダウンロードされます。 次に、インストールされているすべてのポートまたはパッケージのバージョンをチェックし、セキュリティデータベースのエントリと比較します。

システムにインストールされているポートまたはパッケージにデータベースの既知の脆弱性がある場合は、アラートが表示されます。 通常、これらには、問題にパッチを適用する少なくとも最新のポートが利用可能です。

以下では、システム上のすべてのポートまたはサブセットのみを更新する方法について説明します。 更新戦略に関係なく、少なくとも既知のセキュリティの脆弱性があるポートを更新することが不可欠です。

インストールされたポートの更新

UPDATINGファイルに概説されている手動の手順をすべて実行した後、ソフトウェアを更新できます。

利用可能なアップデートがあるポートを確認するには、 portmaster とのコマンド -L 国旗:

portmaster -L
===>>> Root ports (No dependencies, not depended on)
===>>> dialog4ports-0.1.5_2
===>>> pkg-1.4.0
        ===>>> New version available: pkg-1.4.3
===>>> pkgconf-0.9.7
===>>> portmaster-3.17.7
===>>> rsync-3.1.1_3
===>>> 5 root ports

===>>> Trunk ports (No dependencies, are depended on)
===>>> ca_root_nss-3.17.3_1
===>>> expat-2.1.0_2

. . .

===>>> 44 total installed ports
        ===>>> 4 have new versions available

これにより、以前に使用したオプションの小文字のバリアントと同様の出力が提供されますが、利用可能な更新もチェックされます。 ここでは、 pkg ポートには新しいバージョンがあります。 新しいバージョンが利用可能な合計4つのポートがあることがわかります。

単一のポートをアップグレードするには、ポートツリー内のポートのディレクトリの場所に移動して、新しいバージョンのソフトウェアを再インストールします。

sudo make deinstall reinstall

また、同じことを達成することができます portmaster 指図。 カテゴリとポート名を指定する必要があります。 たとえば、アップグレードするには wget コマンド、次のように入力できます。

sudo portmaster ftp/wget

上記のコマンドを使用して、ポートをインストールすることもできます。 他のバックグラウンドから来た多くのユーザーは portmaster を使用するよりも使い慣れたソフトウェア管理エクスペリエンスになる make 上で概説したターゲット。

ポートを個別にアップグレードすることは可能ですが、通常はすべてのソフトウェアを一度に更新するのが最善です。 あなたはこれを行うことができます portmaster を使用して -a 国旗:

sudo portmaster -a

これにより、システム上のすべてのポートが最新バージョンに更新されます。 新しい構成オプションは、プロセスの開始時に提示されます。 でインストールされているパッケージがある場合 pkg ポートシステムを通じて利用可能な新しいバージョンでは、これらも更新され、ポートに移行されます。

結論

これまでに、FreeBSDシステムでポートを操作する方法をかなりよく理解しているはずです。 ポートは非常に柔軟性があり、サーバー上のアプリケーションの大部分をわずかな労力で簡単にカスタマイズできます。

多くの管理者は、コンパイル時間と制御の強化の間のトレードオフを歓迎しますが、ニーズは異なる場合があります。 ただし、FreeBSDでのソフトウェア戦略に関係なく、ポートシステムについて学ぶことは良い投資です。 重要なアップデートでまだパッケージが利用できない場合があります。また、ライセンスの制限により、パッケージ形式で配布できないソフトウェアもあります。 これらの場合は、好みに関係なくポートを使用する必要があります。