ソフトウェアをportsから導入したいが、導入したいPCの演算能力が非力で、portsのコンパイルに莫大な時間がかかってしまうようなケースでは、演算能力の高い他のPCにportsのコンパイルを肩代わりさせ、導入側ではコンパイル済みのportsからソフトウェアをインストールする方法が有効です。
このページでは、portsのコンパイルを他のPCに肩代わりさせる方法について、体系的に説明します。
最初に、コンパイルを肩代わりするPCでの作業について説明します。
まずはじめに、どのCPUタイプ向けにportsを構築するかを指定するために、「/etc/make.conf」を編集します。
CPUTYPE=i686 CFLAGS= -O2 -fno-strict-aliasing -pipe COPTFLAGS= -O2 -fno-strict-aliasing -pipe
設定するCPUタイプは、portsを導入するPCが対応しているものを指定してください。
たとえば、CPUにPentium IIIが搭載されているPCに導入するためのportsを構築する場合には、「CPUTYPE=i686」や「CPUTYPE=pentium3」などと指定してください。
ここで指定したCPUタイプに合致しないCPUが搭載されたPCに対し、コンパイルしたportsを導入すると、システムがクラッシュしたり、誤動作の原因となりますのでご注意ください。
次に、最新のportsを取得して展開します。
portsの取得および展開方法については、「最新のportsを取得して展開する」を参照してください。
portsの構築中にoption指定のためのメニューが表示されないように、予めmake前に依存関係のある全てのportsをmake configし、option指定を済ませておきます。
この処理の詳細については、「portsのmake前に依存関係のある全てのportsをmake configする」を参照してください。
$ cd /usr/ports/www/apache13_modssl $ make config-recursive
実際には、必要なportsを一括でmake configするようなスクリプトを予め作成しておき、それを実行するのが効率がよいと思います。
それでは実際にportsのコンパイルに入ります。
コンパイル済みのportsの導入については、コンパイルが完了した「/usr/ports」をそのまま導入側のPCにNFSでマウントし、そこからmake installする方法もありますが、NFSでマウントしたディレクトリに書き込みが発生したりとあまりエレガントではないため、ここではコンパイルしたportsをpackage化し、それを導入側のPCに転送することにします。
portsをコンパイルし、packageを作成するには以下のようにします。
$ cd /usr/ports/www/apache13_modssl $ make package-recursive clean
実際には、必要なportsを一括でmake package cleanするようなスクリプトを予め作成しておき、それを実行するのが効率がよいと思います。
また、上記のようにすると、portsをコンパイルしたマシンにおいて、packageが作成されるだけでなく、インストールされてしまう点に注意してください。
再度packageの構築が必要な場合には、以下のようにしてインストール済みのすべてのportsをアンインストールしてください。
$ cd /var/db/pkg $ pkg_delete *
最後に、構築したpackageを「/usr/ports」以下のツリーから抽出します。
以下のように「find」を利用し、package(拡張子が「.tbz」のファイル)を特定のディレクトリに移動します。
$ find /usr/ports -iname '*.tbz' -exec mv {} /home/work \;
あとは、特定のディレクトリ(上記の例では「home/work」)に移動されたpackageをftp等を利用して導入側のPCに転送します。
portsを導入するPCでの作業は簡単で、上記で生成されたpackageを持ってきて、ひたすら「pkg_add」するだけです。
すべてのpackageが同じディレクトリ内に存在すれば、「pkg_add」により依存関係のあるpackageも自動的にインストールされます。
・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。
まだ評価がありません |
表示できるメッセージはありません。