FreeBSD-CURRENT を導入してみた (4) portsを使う環境整備したった
FreeBSD-CURRENT自体の導入がひと段落したところで、様々なソフトウェアを使えるように portsの環境整備を行います。
- (1) 配布物入手して仮想マシン作成してみた
- (2) インストーラを実行してみた
- (3) 最新状態に更新してみた
- (4) portsを使う環境整備したった
- (5) sshログイン環境を整備してみた
- (6) xorgを導入してみた
- (7) Guest Additionを導入してみた
- (1) 必要な資材を集めてみた
- ...
ports木を導入する
portsとはFreeBSDで用いられる様々なソフトウェアを導入するための枠組みです。 仕組み的にはmake(1)コマンドを核としていて、以下の作業を半自動的に行ってくれます。
- コンパイル時のオプションの設定
- 導入したいソフトウェアのソースコードを配布サイトから取得
- 取得したソースコードのチェックサム検査
- ソースコードの展開
- (必要ならば)FreeBSDで稼働させるためのソースコードの修正(patchあて)
- コンパイル
- インストール
- 一部必要な設定の追加
これら一連の処理はmake(1)コマンドを実行すれば起動されます。例えばxorgを導入したい 場合は、(原理的には)以下の様に実行します。
# cd /usr/ports/x11/xorg # make install
実際にはより効率的に使うための多少のTipsなどはありますが、基本的にはこれだけで動きます。 FreeBSDでは現在、約24000のソフトウェアをportsで導入することができます。
portsは標準ではディレクトリ/usr/portsの下に展開され、devel(開発ツール)やgpaphics (グラフィック)、japanese(日本語関連)、www(WebおよびHTML関連)といったカテゴリごとに ディレクトリわけされて収められています。 こうした木(ツリー)構造をもっているので、ports木などと呼ばれることもあります。
では、このports木を導入してみましょう。 導入には複数の方法がありますが、ここではもっとも簡単なコマンドportsnap(8)を 用いる方法を紹介します。
portsnap(8)の設定ファイルは/etc下にあるportsnap.conf(5)ですが、このファイルを編集しなくとも 動作します。
# portsnap fetch ... # portsnap extract ...
portsnap fetchでファイルを取得し、portsnap extractで展開します。 初回の実行にはかなりの時間がかかります。
この操作でports木自体は取得できるのですが、portsの一覧ファイル/usr/ports/INDEX-10 だけは取得できません。これを取得するには以下のように操作します。
# cd /usr/ports # make fetchindex
ports木は非常に激しく更新が行われています。このためportsnapもたびたび 実行する必要があります。 このためには、以下の様に実行します。
# cd /usr/ports # portsnap fetch ... # portsnap update ... # make fetchindex
2回目以降の更新ではextractではなく、updateを指定します。
portsを使うための最低限のコマンドを導入する
portsを便利に扱うためのコマンドは多数開発されており、それらの多くは
ディレクトリ/usr/ports/ports-mgmt/
から導入できます。
が、ここではまず最低限のコマンドを導入しましょう。
次世代パッケージ管理システムpkg
pkg(1)は次世代のパッケージ管理システムです。Linuxの多くのディストリビューションの様に 既にコンパイル済みのバイナリ配布パッケージによる運用を可能にします。 また導入されたports/packagesの管理にも用いられます。
コマンドpkgの導入は非常に変わっていて、以下の様にpkgコマンドを実行すると 導入できます。
# pkg The package management tool is not yet installed on your system. Do you want to fetch and install it now? [y/N]: y ←yと入力 Bootstrapping pkg please wait Installing pkg-1.0.1... done If you are upgrading from the old package format, first run: # pkg2ng pkg-1.0.1 New generation package manager
なお。ここでpkg2ngというコマンドの実行を求められています。 このコマンドは、pkgコマンドを導入する前に別のportsを導入していたならば 実行する必要がありますが、この手順で行っている場合はそうした導入は行っていないので 必要ありません。
pkgを導入したならば、以下のコマンドを実行しファイル/etc/make.confを更新します。
# echo 'WITH_PKGNG=yes' >> /etc/make.conf
これはportsシステムにパッケージ管理システムとしてpkgを使用することを指示するものです。
なお、ここで導入したpkgコマンドはメッセージにもあるようにBootstrap(立ち上げ)用の バージョンです。次の手順で最新版に更新します。
ports管理コマンドportmaster
通常portsを使用して導入されるソフトウェアパッケージは数100個になります。 それらには依存関係が存在し、あるソフトウェアが動作するには、別のソフトウェアが 存在しなければならない、といった制約条件が発生しています。 その様な状況下で個別のソフトウェアの更新を行うことは、非常に複雑な作業になり現実的では ありません。
コマンドportmaster(1)はインストールされた各種ports間の依存関係を調べ、 適切に一括更新処理を実施するコマンドです。
この導入は以下の様に行います。
# cd /usr/ports/ports-mgmt/portmaster # make install
最初に以下の設定画面が開きます。
portmaster
のもっとも便利な機能は自動一括アップデートです。
通常、ports木を更新したならば、すでにインストール済みのソフトウェアが更新されて
いないか調べます。これには先のpkgコマンドを用い、以下のように実行します。
# pkg version -v | grep -v = pkg-1.0.1 < needs updating (port has 1.0.2)
現状、pkgの1.0.1版が導入されていますが、portsの方は1.0.2に対応していると 報告されています。そこでさっそく、portmasterを使用して更新をかけましょう。 自動更新はportmasterに引数-aを指定して起動します。
# portmaster -a ===>>> Gathering distinfo list for installed ports portmaster: All===>>> Starting check of installed ports for available updates ===>>> Launching child to update pkg-1.0.1 to pkg-1.0.2 ===>>> All >> pkg-1.0.1 (1/1) portmaster: All >> pkg-1.0.1 (1/1) ===>>> Currently installed version: pkg-1.0.1 ===>>> Port directory: /usr/ports/ports-mgmt/pkg ===>>> Launching 'make checksum' for ports-mgmt/pkg in background ===> No options to configure ===>>> Gathering dependency list for ports-mgmt/pkg from ports ===>>> No dependencies for ports-mgmt/pkg portmaster: All (1)===>>> Returning to update check of installed ports ===>>> All >> (1) portmaster: All >> (1) ===>>> The following actions will be taken if you choose to proceed: Upgrade pkg-1.0.1 to pkg-1.0.2 ===>>> Proceed? y/n [y] y ←yと入力 ===>>> Starting build for ports that need updating <<<=== ... ===>>> The following actions were performed: Upgrade of pkg-1.0.1 to pkg-1.0.2
この例では更新対象は1個だけでしたが、複数あっても動作します。
なお、通常はportmaster -a
で十分ですが、時によってはそれでは
うまく行かない場合もあります。そうした情報は、ファイル/usr/ports/UPDATING
に記述されています。
こうした情報の例を示します。
20121030:
AFFECTS: users of www/squid31
AUTHOR: flo@FreeBSD.orgThe WITH_SQUID_ECAP option was removed from the port. If you use ECAP
you need to update to www/squid32, you can do so by running one of the
following commands:# portmaster -o www/squid32 www/squid31
or
# portupgrade -fo www/squid32 www/squid31
問題が起きえるソフトウェアと、その発生要件、対処方法としてのportmasterの 実行方法が記述されています。
ports木を更新したならば、かならずこのファイルには目を通しましょう。 なお、このファイルはportsnapコマンドの実行で更新されます。
ここまでのまとめ
以上でports木自身を更新し、それを使って導入したソフトウェアの更新管理を 行うためのコマンドも導入しました。
次回は、VirtualBoxの仮想マシンでのより便利なコンソール環境を構築してゆきます。