FreeBSD10.1にポートをインストールして管理する方法
序章
FreeBSDは、さまざまな役割で機能できる強力なオペレーティングシステムです。 このオペレーティングシステムを多くのシナリオで理想的な選択肢にしている理由の1つは、柔軟性に対する評判です。 この評判への大きな貢献は、ポートシステムとして知られているソースからソフトウェアをインストールするためのFreeBSDのサポートされた方法から来ています。
このガイドでは、ポートシステムの利点のいくつかについて説明し、それを使用して追加のソフトウェアを取得および管理する方法を示します。 make
コマンドを使用してインストールする方法、アプリケーションをカスタマイズする方法、およびいくつかの一般的なツールを活用してポートのメンテナンスを容易にする方法について説明します。
前提条件
このガイドに従うには、FreeBSD 10.1サーバーと、sudo
権限を持つ非rootユーザーアカウントにアクセスできる必要があります。 このガイドは、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
ディレクトリが空の場合にのみ必要であり、この状況は1回だけ発生するはずです。 FreeBSDサーバーがDigitalOcean上にある場合、portsツリーはすでに初期化されているはずです。
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]
ポートツリーを検索するために設計された2つのmake
ターゲットは、search
とquicksearch
です。 これらの機能はまったく同じですが、デフォルトの表示のみが異なります。
search
ターゲットは、ポートの名前、ポートツリー内のパス、一般的な説明、およびメンテナの電子メール、ビルドの依存関係、実行の依存関係、アップストリームURLなどのビルドに関する詳細を返します。 quicksearch
ターゲットは、ポート名、パス、および説明のみを返します。
検索タイプは次のいずれかになります。
- name :ポートの名前フィールド内でのみ検索します。
- key :ポートの名前、コメント、および依存関係のフィールド内を検索します。
- path :ポート階層内の特定のパスを検索します。
- info :ポートのinfo(説明)フィールド内を検索します。
- 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
通常、このコマンドチェーンを少し拡張して、すべてが正しく構成されていることを確認します。 通常、このポートの構成とインストールの開始時の依存関係を処理するために、install
ターゲットの前に、上記のパイプラインにないオプションであるconfig-recursive
を指定する必要があります。 そうしないと、ビルドプロセスが停止し、必要な依存関係のビルドの途中でユーザー入力を待つ可能性があります。
また、通常、インストール後に少しクリーンアップして、ディスクスペースを再利用し、システムをクリーンに保ちます。 これは、clean
またはdistclean
ターゲットで実行できます。 clean
ターゲットは、このポートと依存関係ポートの構築に使用された抽出されたソースコードを削除します。 distclean
ターゲットもこれを行いますが、このパッケージの圧縮されたソースアーカイブを/usr/ports/distfiles
ディレクトリから削除します。
したがって、一般的なインストールコマンドは次のようになります。
sudo make config-recursive install distclean
これにより、プロセスの開始時にポートと依存関係を構成するように求められます。 その後、ソースアーカイブの整合性をダウンロードして検証します。 次に、不足している依存関係を満たすためにコンテキストを変更します。 そのプロセスが完了すると、問題のポートに戻り、アーカイブを抽出し、必要なパッチを適用して、選択したオプションに従って構成します。 次に、アプリケーションをコンパイルしてシステムにインストールします。 その後、このポートと依存関係の拡張されたソースコードが削除されます。 次に、このポートのソースアーカイブを削除します。
/usr/ports/ports-mgmt/portmaster
ディレクトリ内で上記のコマンドを実行します。
sudo make config-recursive install distclean
アプリケーションの単一のダイアログボックスが表示されます。 リストされているシェルのいずれかを使用している場合は、ここでツールのシェル補完を構成することを選択できます。
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
ディレクトリに保存されます。 これらの各initファイルで、rcvar
という変数は、サービスを開始するかどうかを決定するために/etc/rc.conf
ファイル内のどの変数を探すかをinitシステムに指示します。 オプションのサービスごとに、次のように入力して、/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デーモンが開始されます。 これで、「one」プレフィックスなしで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: 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
ターゲットを使用するよりも使い慣れたソフトウェア管理エクスペリエンスであると感じています。
ポートを個別にアップグレードすることは可能ですが、通常はすべてのソフトウェアを一度に更新するのが最善です。 -a
フラグを使用して、portmaster
でこれを行うことができます。
sudo portmaster -a
これにより、システム上のすべてのポートが最新バージョンに更新されます。 新しい構成オプションは、プロセスの開始時に提示されます。 pkg
でインストールされたパッケージがあり、新しいバージョンがポートシステムから利用できる場合、これらも更新され、ポートに移行されます。
結論
これまでに、FreeBSDシステムでポートを操作する方法をかなりよく理解しているはずです。 ポートは非常に柔軟性があり、サーバー上のアプリケーションの大部分をわずかな労力で簡単にカスタマイズできます。
多くの管理者は、コンパイル時間と制御の強化の間のトレードオフを歓迎しますが、ニーズは異なる場合があります。 ただし、FreeBSDでのソフトウェア戦略に関係なく、ポートシステムについて学ぶことは良い投資です。 重要なアップデートでまだパッケージが利用できない場合があります。また、ライセンスの制限により、パッケージ形式で配布できないソフトウェアもあります。 これらの場合は、好みに関係なくポートを使用する必要があります。