前書き

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

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

前提条件

このガイドに従うには、FreeBSD 10.1サーバーと `+ sudo +`権限を持つ非rootユーザーアカウントにアクセスする必要があります。 https://www.digitalocean.com/community/tutorials/how-to-get-started-with-freebsd-10-1 [このガイド]は、FreeBSDサーバーへのログインと適切な作業環境のセットアップを支援します。

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

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

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

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

システムでサポートされている他のタイプのインストールは*パッケージ*です。これは、適切なデフォルトを使用してポートコレクションからコンパイルされたソフトウェアバイナリです。 これはソフトウェアを迅速に取得するための優れた方法ですが、portsシステムによって提供されるカスタマイズのレベルを失います。 ソフトウェアパッケージの管理方法の詳細については、https://www.digitalocean.com/community/tutorials/how-to-manage-packages-on-freebsd-10-1-with-pkg [このガイド]をご覧ください。

ポートツリーの準備

ポートツリーは、 `+ / 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:
Change:

代わりに、次のようなエラーを受け取る可能性があります。

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

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

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

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

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

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

Portsnapによるポートツリーの更新

ポートツリーが最後に更新された時期を把握したら、ポートツリーをFreeBSDプロジェクトのサイトの最新情報と同期できます。 これを行うには、 `+ portsnap +`というツールを使用します。

`+ / usr / ports `ディレクトリに情報がない場合(最後のセクションで述べたエラーが発生した場合)、 ` portsnap `でそのディレクトリにポートツリー全体をダウンロードして抽出できます。 このプロセスには非常に長い時間がかかりますが、 ` / usr / ports +`ディレクトリが空の場合にのみ必要です。 FreeBSDサーバーがDigitalOcean上にある場合、ポートツリーはすでに初期化されているはずです。

sudo portsnap fetch extract

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

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

sudo portsnap fetch update

このコマンドは、 `+ / usr / ports `構造内のファイルとは異なるファイルのみを抽出するため、コマンドの ` extract +`バリアントよりも大幅に時間がかかりません。 これは、ポートツリーの日々の更新で使用される形式です。

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

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

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

`+ 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 Handbookで、著者は ` + echo + `コマンドとポートツリーの組み込み構造。

ポートツリーは、 `+ / 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]

ポートツリーを検索するために設計された2つの「+ make」ターゲットは、「+ search」と「+ quicksearch」です。 これらはまったく同じ機能を持ち、デフォルトの表示のみが異なります。

`+ search `ターゲットは、ポートの名前、ポートツリーのパス、一般的な説明、メンテナーのメール、ビルドの依存関係、実行の依存関係、アップストリームURLを含むビルドの詳細に関する情報を返します。 ` quicksearch +`ターゲットは、ポート名、パス、説明のみを返します。

検索タイプは次のいずれかです。

  • 名前:ポートの名前フィールド内でのみ検索します。

  • キー:ポートの名前、コメント、および依存関係フィールド内を検索します。

  • * path *:ポート階層内の特定のパスを検索します。

  • 情報:ポートの情報(説明)フィールド内を検索します。

  • * maint *:メンテナーのメールアドレスで検索します。

  • * cat *:ポートのカテゴリに基づいて検索します。

  • * bdeps *:各ポートのビルド時の依存関係を検索します。

  • * rdeps *:各ポートの実行時依存関係を検索します。

  • * www *:ポートのWebサイトを検索します。

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

簡単な例を見てみましょう。 以下では、 `+ search `ターゲットと ` quicksearch `ターゲットの出力の違いを見ることができます。 ` 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 +`ターゲットは、見つかった一致に関する重要な情報のみを表示します。

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」に設定します。

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

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

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

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

Makeを使用してポートをインストールする

インストールしたいポートを見つけたら、必要なファイルを簡単にダウンロードし、バイナリをビルドし、 `+ make +`コマンドを使用してインストールできます。

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

まず、ポートの場所に変更します。 `+ 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 `ターゲットでこれを行うことができます。 ` clean `ターゲットは、このポートと依存ポートを構築するために使用された抽出されたソースコードを削除します。 ` distclean `ターゲットもこれを行いますが、このパッケージの圧縮ソースアーカイブも ` / usr / ports / distfiles +`ディレクトリから削除します。

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

sudo make config-recursive install distclean

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

`+ / usr / ports / ports-mgmt / portmaster +`ディレクトリ内で上記のコマンドを実行します:

sudo make config-recursive install distclean

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

image:https://assets.digitalocean.com/articles/freebsd_ports_intro/dialog.png [FreeBSDポート設定]

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

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

rehash

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

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

これは、オプションのソフトウェアを設定するには、 + / usr / local / etc +`ディレクトリを調べる必要があることを意味します。 実行ファイル自体は、主に `+ / usr / local / bin`および + / usr / local / sbin`ディレクトリに保存されます。 アプリケーションを構成または開始するときは、このことに留意してください。

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

留意すべきことの1つは、サービスとして実行されるポートをインストールする場合、インストール手順ではサービスが自動的に開始されないことです。 実際、FreeBSD内でサービスを開始するには、いくつかの手順を実行する必要があります。

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

sudo service  onestart

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

sudo service mysql-server onestart

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

sudo service mysql-server onestop

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

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

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

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

/usr/local/etc/rc.d/avahi-daemon:
/usr/local/etc/rc.d/avahi-dnsconfd:
/usr/local/etc/rc.d/dbus:
/usr/local/etc/rc.d/rsyncd:

出力の強調表示された部分は、これらの各サービスを有効にするために「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デーモンが開始されます。 これで、「1」プレフィックスなしで「+ service +」コマンドを使用してサービスを制御できます。 たとえば、次のように入力してサービスを開始できます。

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

アプリケーションの更新

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

重要なアップデートノートの更新ファイルの確認

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

`+ / 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:
Change:

「変更」タイムスタンプは、システム上の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ファイルに記載されている手動の手順をすべて行ったら、ソフトウェアを更新できます。

どのポートに利用可能な更新があるかを確認するには、 `+ -L `フラグを付けて ` portmaster +`コマンドを使用できます。

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

上記のコマンドは、ポートのインストールにも使用できます。 他のバックグラウンドから来た多くのユーザーは、上記で説明した「+ make 」ターゲットを使用するよりも、「 portmaster +」がより馴染みのあるソフトウェア管理エクスペリエンスであると感じています。

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

sudo portmaster -a

これにより、システム上のすべてのポートが最新バージョンに更新されます。 プロセスの最初に、新しい構成オプションが表示されます。 portsシステムで利用可能な新しいバージョンの `+ pkg +`でインストールされたパッケージがある場合、これらも更新されて同様にportsに移行されます。

結論

これまでに、FreeBSDシステムのポートを操作する方法をかなりよく理解しているはずです。 ポートは非​​常に柔軟であるため、サーバー上のほとんどのアプリケーションを簡単にカスタマイズできます。

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