FreeBSDサーバー用のパッケージを作成するためにPoudriereビルドシステムをセットアップする方法
序章
ポートシステムは、ソフトウェアの柔軟性と制御を望むユーザーにとって、FreeBSDの最大の資産の1つです。 これにより、管理者は、堅牢で予測可能なように設計されたシステムを使用して、ソースベースのインストールを簡単に作成および保守できます。
この機能の利点は素晴らしいですが、ポートベースの管理に対して課せられる最も一般的な苦情のいくつかは、各ソフトウェアのコンパイルに必要な時間とリソースに関するものです。 それぞれが独自のポートをコンパイルする多数のサーバーを管理している場合、これはさらに問題になります。 FreeBSDパッケージはインストールをスピードアップする代替手段を提供しますが、それはポートが与える制御を犠牲にします。
この問題を軽減するために、管理者は poudriere というアプリケーションを使用して、カスタムパッケージを構築および保守できます。 poudriere
は、さまざまなアーキテクチャのパッケージを構築するために技術的に作成されていますが、FreeBSDサーバーのインフラストラクチャ全体のパッケージを作成およびホストするためのパッケージ構築環境としてよく使用されます。
poudriere
を活用することで、管理者はポートシステムを使用して必要に応じてソフトウェアをカスタマイズし、パッケージをコンパイルしてインストールとソフトウェア管理を容易にすることができます。 FreeBSDサーバーは、パッケージソースとしてpoudriere
がインストールされたホストを使用できるため、カスタマイズされ、コンパイル済みの実行可能ファイルをすばやく簡単にダウンロードしてインストールできます。
このガイドでは、ビルドマシンとしてpoudriere
を使用してサーバーをセットアップする方法を示します。 その後、このサーバーを追加サーバーのパッケージのリポジトリとして使用できます。 この設定は単一のサーバーにとっては有益ですが、追加のサーバーが同じpoudriere
ホストをパッケージソースとして使用し始めると、実際の効率の向上が見られます。
ポートの構築はリソースを大量に消費するプロセスであるため、これを通常よりも強力なシステムに設定することは価値があるかもしれません。
必要なポート管理ソフトウェアをインストールします
まず、必要なすべてのポートをインストールします。
いつものように、ポート関連のタスクを開始する前に、ポートツリーを更新して、ファイルシステム上の参照が最新であることを確認します。
sudo portsnap fetch update
ポートツリーが更新されたら、ソフトウェアのインストールを開始できます。 まず、poudriere
自体をインストールする必要があります。 これは、ポートツリーのports-mgmt
カテゴリにあります。 ビルドしてインストールするには、そのディレクトリに移動し、make
を使用してコンパイルしてインストールします。
cd /usr/ports/ports-mgmt/poudriere sudo make install clean
表示されているオプションのいずれかを自由に選択してください。 標準ビルドの場合、必須のものはありません。
次に、まだインストールしていない場合は、portmaster
ポートをインストールする必要があります。 これを使用して、poudriere
で構築するマシン上のソフトウェアのリストを簡単に生成します。 これはports-mgmt
カテゴリにも含まれます。
cd /usr/ports/ports-mgmt/portmaster sudo make install clean
最後に、Webサーバーもインストールします。 これには2つの目的があります。 まず、これは、コンパイルするパッケージをマシンがダウンロードできる方法になります。 次に、poudriere
は、ビルドプロセスを追跡し、ログを監視できるようにWebインターフェイスを提供します。
このガイドでは、Webサーバーとしてnginx
を使用します。 これは、ポートツリーのwww
カテゴリにあります。
cd /usr/ports/www/nginx sudo make install clean
デフォルト値を受け入れるか、別の目的で特定のニーズがある場合はカスタマイズできます。
ソフトウェアのコンパイルとインストールが完了したら、デフォルトのtcsh
またはcsh
シェルを使用している場合は、必ずPATHを再評価してください。
rehash
ソフトウェアがインストールされたので、各コンポーネントの構成を開始できます。
SSL証明書とキーを作成する
poudriere
を使用してパッケージを構築する場合、秘密鍵を使用してパッケージに署名できるようにする必要があります。 これにより、作成されたパッケージが正当であり、悪意のあるパッケージを提供するためにビルドマシンへの接続を傍受する人がいないことがすべてのマシンに保証されます。
まず、キーと証明書のディレクトリ構造を作成します。 オプションのソフトウェア構成はすべて/usr/local/etc
ディレクトリ内で行われ、他のソフトウェアは/usr/local/etc/ssl
の場所を使用するため、ここにファイルを配置します。
keys
とcerts
という2つのサブディレクトリを含むssl
ディレクトリがあることを確認します。 これは、次のように入力することで1つのコマンドで実行できます。
sudo mkdir -p /usr/local/etc/ssl/{keys,certs}
秘密にしておく必要のある秘密鍵は、keys
ディレクトリに配置されます。 これは、作成するパッケージに署名するために使用されます。 これを安全に保つことは、パッケージが改ざんされていないことを確認するために不可欠です。 rootまたはsudo
権限を持たないユーザーがディレクトリまたはその内容を操作できないように、ディレクトリをロックダウンできます。
sudo chmod 0600 /usr/local/etc/ssl/keys
certs
ディレクトリには、キーを使用して作成された公開されている証明書が含まれます。 そのため、そのディレクトリにデフォルトのアクセス許可を残すことができます。
次に、poudriere.key
という4096ビットのキーを生成し、次のように入力してkeys
ディレクトリに配置します。
sudo openssl genrsa -out /usr/local/etc/ssl/keys/poudriere.key 4096
キーが生成されたら、次のように入力して、キーから公開証明書を作成できます。
sudo openssl rsa -in /usr/local/etc/ssl/keys/poudriere.key -pubout -out /usr/local/etc/ssl/certs/poudriere.cert
これで、パッケージに署名して署名を検証するために必要なSSLコンポーネントができました。 後で、生成された証明書をパッケージ検証に使用するようにクライアントを構成します。
Poudriereの構成
SSL証明書とキーを取得したので、poudriere
自体の構成を開始できます。
メインの設定ファイルは/usr/local/etc/poudriere.conf
にあります。 テキストエディタでsudo
権限を使用してこのファイルを開きます。
sudo vi /usr/local/etc/poudriere.conf
poudriere
構成ファイルは非常によくコメントされており、必要な設定のほとんどが事前に定義されています。 いくつかの特定の変更を行いますが、その大部分はそのまま残します。
FreeBSDサーバーがDigitalOceanで実行されている場合、ファイルシステムはUFSになります。 poudriere
には、設定してはならないZFS固有のオプションがあります。 UFSを使用していることを示すには、NO_ZFS
フラグを「yes」に設定する必要があります。 ファイル内でこのオプションを見つけてコメントを外します。
NO_ZFS=yes
一方、サーバーがZFSを使用している場合は、ZPOOL
オプションを設定することにより、特定のプールを使用するようにpoudriere
を構成できます。 このプール内で、poudriere
がパッケージやログなどに使用するルートを指定できます。 ZROOTFS
オプションを使用します。 NO_ZFS
オプションを「yes:」に設定している場合は、これら2つのオプションをに設定しないでください。
# NO_ZFS=yes ZPOOL=tank ZROOTFS=/poudriere
ソフトウェアをビルドする場合、poudriere
は、ビルドシステムをメインオペレーティングシステムから分離するために、一種のjailを使用します。 次に、ビルドマシンがjailに必要なソフトウェアをダウンロードできる有効なホストに入力する必要があります。 これは、FREEBSD_HOST
オプションを使用して構成されます。
このオプションは、現在有効なホストに設定されていませんが、すでに存在しているはずです。 これをデフォルトのftp://ftp.freebsd.org
の場所に変更するか、次のいずれかがわかっている場合は、より近いミラーを使用できます。
FREEBSD_HOST=ftp://ftp.freebsd.org
次に、poudriere
ルート内のデータディレクトリが正しく設定されていることを確認します。 これはPOUDRIERE_DATA
オプションで制御され、デフォルトにする必要がありますが、念のためこのオプションのコメントを解除します。
POUDRIERE_DATA=${BASEFS}/data
コメントを外す必要がある次のオプションは、CHECK_CHANGED_OPTIONS
およびCHECK_CHANGED_DEPS
オプションです。 最初のオプションは、poudriere
に、パッケージのオプションが変更されたときにパッケージを再構築するように指示します。 2番目のオプションは、最後のコンパイル以降に依存関係が変更されたときにパッケージを再構築するようにpoudriere
に指示します。
これらのオプションは両方とも、構成ファイルに必要な形式で存在します。 コメントを外すだけです。
CHECK_CHANGED_OPTIONS=verbose CHECK_CHANGED_DEPS=yes
次に、poudriere
が作成したSSLキーをポイントして、ビルド時にパッケージに署名できるようにします。 これを指定するために使用されるオプションは、PKG_REPO_SIGNING_KEY
と呼ばれます。 このオプションのコメントを解除し、前に作成したSSLキーの場所を反映するようにパスを変更します。
PKG_REPO_SIGNING_KEY=/usr/local/etc/ssl/keys/poudriere.key
最後に、URL_BASE
文字列を、サーバーにアクセスできるドメイン名またはIPアドレスに設定できます。 これは、poudriere
が、クリックできる出力内のリンクを構築するために使用されます。 プロトコルを含め、値をスラッシュで終了する必要があります。
URL_BASE=http://server_domain_or_IP/
変更が完了したら、ファイルを保存して閉じます。
ビルド環境の作成
次に、実際にビルド環境を構築する必要があります。 前述のように、poudriere
は、jailを使用して隔離された環境でポートを構築します。
刑務所を作成し、poudriere
にFreeBSDをインストールさせる必要があります。 それぞれが異なるバージョンのFreeBSDを持つ複数の刑務所を持つことが可能です。 投獄されたFreeBSDのバージョンは、サーバー自体が実行しているバージョンと同じかそれより古いものでなければなりません。 このガイドでは、ホストシステムのアーキテクチャとFreeBSDバージョンを反映した単一のjailに焦点を当てます。
作成する刑務所のわかりやすい名前を選択する必要があります。 これは、クライアントのリポジトリ設定で使用されるため重要です。これは、FreeBSDのさまざまなバージョン用にビルドする場合に非常に重要になる可能性があります。 man
ページでは、他のツールとの相互作用のために、名前にドットを使用しないように指示しています。 たとえば、このガイドでは、64ビットアーキテクチャ上のFreeBSD 10.1で動作しているため、これを「freebsd_10-1x64」と呼びます。
刑務所の名前を-j
で指定し、-v
オプションを使用してインストールするFreeBSDのバージョンを示します。 サポートされているリリースの形式は、thisページの表の「リリース」列にあります。 リリースの代わりに-CURRENT
または-STABLE
をフォローしている場合は、 this ページにある形式(11-CURRENT
など)を使用できます。
私たちの目的のために、私たちの刑務所建設コマンドは次のようになります:
sudo poudriere jail -c -j freebsd_10-1x64 -v 10.1-RELEASE
これが完了するまでにはしばらく時間がかかりますので、しばらくお待ちください。 終了したら、次のように入力して、インストールされているjailを確認できます。
poudriere jail -l
JAILNAME VERSION ARCH METHOD TIMESTAMP PATH freebsd_10-1x64 10.1-RELEASE-p3 amd64 ftp 2015-01-06 20:43:48 /usr/local/poudriere/jails/freebsd_10-1x64
刑務所を作成したら、portsツリーをインストールする必要があります。 さまざまな開発ニーズに対応するために、複数のポートツリーを維持することが可能です。 刑務所で利用できる単一のポートツリーをインストールします。
-p
フラグを使用して、ポートツリーに名前を付けることができます。 このツリーの使用法を正確に要約しているため、ツリーを「HEAD」と呼びます(「head」またはツリーの最新のポイント)。 利用可能なportsツリーの最新バージョンと一致するように定期的に更新します。
sudo poudriere ports -c -p HEAD
この場合も、ポートツリー全体をフェッチして抽出する必要があるため、この手順にはしばらく時間がかかります。 終了したら、次のように入力してポートツリーを表示できます。
poudriere ports -l
この手順が完了すると、ポートをコンパイルしてパッケージをビルドするための構造が整います。 次に、ポートのリストの組み立てを開始して、ソフトウェアごとに必要なオプションを構築および構成できます。
ポート構築リストの作成とポートオプションの設定
poudriere
でコンパイルする場合、ビルドコマンドを呼び出すときにビルドするポートを指定します。 ポートを個別に指定することは可能ですが、これは長期的な管理には適していません。 代わりに、コマンドに直接渡すことができるポートのリストを作成します。
ファイルcreateは、次のように、ポートカテゴリの後にスラッシュとポート名をリストして、ポートツリー内の位置を反映する必要があります。
port_category/first_port port_category/second_port port_category/third_port . . .
必要な依存関係も自動的に構築されるため、インストールするポートの依存関係ツリー全体を追跡する必要はありません。 このファイルは手動でビルドできますが、ベースシステムにビルドしたいソフトウェアのほとんどがすでにある場合は、portmaster
を使用してこのリストを作成できます。
これを行う前に、通常、システムから不要な依存関係を削除して、ポートリストを可能な限りクリーンに保つことをお勧めします。 これを行うには、次のように入力します。
sudo pkg autoremove
その後、portmaster
を使用して、ビルドシステムに明示的にインストールしたソフトウェアのリストを取得できます。 portmaster
コマンドは、--list-origins
オプションを使用して、明示的にインストールされたポート(依存関係ではない)のリストを正しい形式で出力できます。
この出力をsort
にパイプしてリストをアルファベット順に並べ、アイテムを見つけやすくすることができます。 結果を/usr/local/etc/poudriere.d
ディレクトリのファイルに出力できます。 このファイルをport-list
と呼びます。
portmaster --list-origins | sort -d | sudo tee /usr/local/etc/poudriere.d/port-list
リストを確認します。 含めたくないポートがある場合は、関連する回線を削除します。 これは、必要になる可能性のあるポートを追加する機会でもあります。
特定のmake.conf
オプションを使用してポートを構築する場合は、/usr/local/etc/poudriere.d
ディレクトリ内の各jailに対してmake.conf
ファイルを作成できます。 たとえば、私たちの刑務所では、次の名前のmake.conf
ファイルを作成できます。
sudo vi /usr/local/etc/poudriere.d/freebsd_10-1x64-make.conf
内部には、ポートを構築するときに使用したいオプションを入れることができます。 たとえば、ドキュメント、例、母国語のサポート、またはX11サポートを作成したくない場合は、次のように設定できます。
OPTIONS_UNSET+= DOCS NLS X11 EXAMPLES
その後、各ポートを構成できます。これにより、選択したオプションを使用してファイルが作成されます。
ホストシステムのポートをカスタマイズした場合は、構成をpoudriere
にコピーして、それらの設定を利用できます。 これを行うには、刑務所にちなんで名付けられた/usr/local/etc/poudriere.d
ディレクトリ内に、最後に-options
を追加した新しいディレクトリを作成します。 ガイドの場合、次のように入力することでこれを実現できます。
sudo mkdir /usr/local/etc/poudriere.d/freebsd_10-1x64-options
これで、次のように入力して、ホストシステムですでに使用しているオプションをコピーできます。
sudo cp -r /var/db/ports/* /usr/local/etc/poudriere.d/freebsd_10-1x64-options
上記の手順を完了すると、構成するオプションのベースラインが得られますが、依存関係の多くを構成する必要があります。
options
コマンドを使用して、まだ構成されていないものを構成できます。 作成したポートツリー(-p
オプションを使用)と、これらのオプションを設定するjail(-j
オプションを使用)の両方を渡す必要があります。 また、-f
オプションを使用して構成するポートのリストを指定する必要があります。
コマンドは次のようになります。
sudo poudriere options -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list
リストの各ポートのダイアログと、-options
ディレクトリに対応するオプションが設定されていない依存関係が表示されます。 make.conf
ファイルの仕様は、選択画面で事前に選択されています。 使用するすべてのオプションを選択します。
将来、ポートのオプションを再構成する場合は、-c
オプションを使用して上記のコマンドを再実行できます。 これにより、過去に選択したかどうかに関係なく、使用可能なすべての構成オプションが表示されます。
sudo poudriere options -c -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list
港の建設
これで、ようやくポートの構築を開始する準備が整いました。
最後に行う必要があるのは、jailとportsツリーの両方が最新であることを確認することです。 ポートツリーとjailの両方を作成したばかりなので、これはおそらく初めてポートをビルドするときに問題になることはありませんが、ビルドを実行するたびにこれを行う習慣を身につけるのは良いことです。
刑務所を更新するには、次のように入力します。
sudo poudriere jail -u -j freebsd_10-1x64
ポートツリーを更新するには、次のように入力します。
sudo poudriere ports -u -p HEAD
それが完了したら、バルクビルドプロセスを開始できます。
注:これは非常に長時間実行されるプロセスである可能性があります。 SSH経由でサーバーに接続している場合は、screen
をインストールしてセッションを開始することをお勧めします。
cd /usr/ports/sysutils/screen sudo make install clean rehash screen
ビルドを開始するには、bulk
コマンドを使用して、構成している個々の部分をすべて指す必要があります。 このガイドの値を使用している場合、コマンドは次のようになります。
sudo poudriere bulk -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list
これにより、(poudriere.conf
ファイルまたは使用可能なCPUの数に応じて)多数のワーカーが起動し、ポートの構築が開始されます。
ビルドプロセス中はいつでも、CTRL
キーを押しながらt
を押すと、進行状況に関する情報を取得できます。
CTRL-t
プロセスの特定の部分は、他の部分よりも多くの出力を生成します。
離れる必要がある場合は、CTRL
をa
で押してコントロールをscreen
に移動し、次にd
キーを押して、画面セッションを切り離すことができます。セッションを切り離します。
CTRL-a d
セッションに戻りたい場合は、次のように入力できます。
screen -x
フロントエンドとリポジトリにサービスを提供するためのNginxの設定
パッケージの構築中に、Nginxを構成する機会を利用できます。 別のターミナルを開くか、上記のようにscreen
セッションを切り離すか、CTRL-a c
と入力して新しいscreen
ウィンドウを開始します(CTRL-a n
と入力するとウィンドウを切り替えることができます)およびCTRL-a p
)。
Webサーバーは、次の2つの異なる目的で使用されます。
- 他のホストがカスタムコンパイル済みパッケージをダウンロードするために使用できる実際のパッケージリポジトリを提供します
- ビルドプロセスの監視に使用できる
poudriere
Webフロントエンドを提供します
このガイドの冒頭でNginxをインストールしましたが、構成していません。
まず、/etc/rc.conf
ファイルにnginx_enable="YES"
行を追加してサービスを有効にします。 これにより、起動時にサーバーが起動し、従来のservice
コマンドを使用してプロセスを管理できるようになります。
sudo sh -c "echo 'nginx_enable="YES"' >> /etc/rc.conf"
これで、デフォルトの構成ファイルを調整できます。 テキストエディタでsudo
権限で開きます。
sudo vi /usr/local/etc/nginx/nginx.conf
このファイル内で、server {}
ブロックからすべてを削除し、独自の構成に置き換えます。 ファイルが有効であることを確認するために、一致する中括弧(“ {”および“}”)はそのままにしておいてください。
server
コンテキスト内で、いくつかの基本的なディレクティブを設定して、Webサーバーがポート80で従来のHTTPトラフィックに応答し、サーバーのドメイン名またはIPアドレスに応答できるようにすることができます。 また、サーバーのドキュメントルートを/usr/local/share/poudriere/html
にあるpoudriere
Webディレクトリに設定します。 以下のserver_name
ディレクティブの値を、サーバーのドメイン名またはIPアドレスと一致するように変更します。
# http context . . . server { listen 80 default; server_name server_domain_or_IP; root /usr/local/share/poudriere/html; } }
次に、2つのlocation
ブロックを追加します。
上で定義した基本的なroot
ディレクティブはWebインターフェイスの大部分を処理しますが、ログと実際のデータを保存するディレクトリをNginxに通知する必要があります。 Poudriereは、このために/data
エンドポイントを使用します。 ログはすべて特定のディレクトリに書き込まれるため、この場所でautoindex
ディレクティブをオンにして、ログのリストを表示できます。
最終的に、最初のlocation
ブロックは次のようになります。
# http context . . . server { listen 80 default; server_name server_domain_or_IP; root /usr/local/share/poudriere/html; location /data { alias /usr/local/poudriere/data/logs/bulk; autoindex on; } } }
これにより、Webインターフェイスが正しく機能するようになります(mime.types
ファイルに追加の変更を加えた後、すぐに作成します)。 次に、作成した実際のパッケージを提供するために使用される2番目のロケーションブロックを追加する必要があります。
パッケージは再び/usr/local/poudriere
の下のディレクトリに保存されますが、今回はdata/packages
の下に保存されます。 これは/packages
の場所で利用できるようにすることができます。 ここでも、autoindex
をオンにしてディレクトリの内容を表示し、Webブラウザでファイルを表示することもできます。
この最終変更が完了すると、server
ブロックは次のようになります。
#http context . . . server { listen 80 default; server_name server_domain_or_IP; root /usr/local/share/poudriere/html; location /data { alias /usr/local/poudriere/data/logs/bulk; autoindex on; } location /packages { root /usr/local/poudriere/data; autoindex on; } } }
終了したら、ファイルを保存して閉じます。
次に、mime.types
ファイルに小さな変更を加えます。 現在の設定では、Webブラウザーでログをクリックすると、ファイルがプレーンテキストとして表示されるのではなくダウンロードされます。 .log
で終わるファイルをプレーンテキストファイルとしてマークすることで、この動作を変更できます。
テキストエディタでsudo権限を持つNginxmime.types
ファイルを開きます。
sudo vi /usr/local/etc/nginx/mime.types
text/plain
コンテンツタイプを指定するエントリを見つけて、スペースで区切って、現在のファイルタイプのリストの最後にlog
を追加します。
. . . text/mathml mml; text/plain txt log; text/vnd.sun.j2me.app-descriptor jad; . . .
終了したら、ファイルを保存して閉じます。
次に、次のように入力して、構成ファイルの構文を確認します。
sudo service nginx configtest
エラーがある場合は、先に進む前に修正してください。 構成テストで構文エラーが報告されない場合は、次のように入力してNginxを起動します。
sudo service nginx start
ファイアウォールを有効にしている場合は、ポート80へのトラフィックを許可してサービスを再起動するようにルールを構成することを忘れないでください。
これで、Webブラウザでサーバーのドメイン名またはIPアドレスに移動して、poudriere
Webインターフェイスを表示できます。
http://server_domain_or_IP
メインのpoudriere
ページが表示されます。
クリックすると、ポート構築のプロセスまたは結果を表示できるはずです。 終了したビルドのログをクリックすることもできるはずです。
コンパイルされたパッケージをブラウザで表示する場合は、/packages
で始まる階層から利用できる必要があります。
パッケージを表示するには、ビルド全体が完了するまで待たなければならない場合があります。 リンクをクリックすると、poudriere
一括ビルドコマンドで作成したコンパイル済みパッケージが表示されます。
パッケージクライアントの構成
パッケージが構築され、パッケージを提供するようにリポジトリが構成されたので、サーバーをパッケージのソースとして使用するようにクライアントを構成できます。
独自のパッケージリポジトリを使用するようにビルドサーバーを構成する
ビルドしているパッケージを使用するようにビルドサーバーを構成することから始めることができます。
まず、リポジトリ構成ファイルを保持するディレクトリを作成する必要があります。
sudo mkdir -p /usr/local/etc/pkg/repos
このディレクトリ内に、リポジトリ構成ファイルを作成できます。 .conf
で終わる必要があるため、その目的を反映してpoudriere.conf
と呼びます。
sudo vi /usr/local/etc/pkg/repos/poudriere.conf
リポジトリ名をもう一度poudriere
と定義します。 定義内で、パッケージが保存されているディスク上の場所を指します。 これは、jail名とポートツリー名をダッシュで組み合わせたディレクトリである必要があります。 ファイルシステムを確認してください。 また、作成した証明書をポイントして、パッケージの署名検証を設定します。
最終的に、ファイルは次のようになります。
poudriere: { url: "file:///usr/local/poudriere/data/packages/freebsd_10-1x64-HEAD", mirror_type: "srv", signature_type: "pubkey", pubkey: "/usr/local/etc/ssl/certs/poudriere.cert", enabled: yes }
この時点で、決定を下す必要があります。 コンパイルされたパッケージを優先し、メインのFreeBSDリポジトリによって提供されるパッケージにフォールバックしたい場合は、ここで優先順位を設定して、このリポジトリからパッケージを優先するように指示できます。 これにより、ローカルリポジトリが公式リポジトリよりも優先されます。
このようにパッケージを混合すると、複雑な結果が生じる可能性があることに注意してください。 公式リポジトリのパッケージバージョンがローカルリポジトリのバージョンよりも高い場合、コンパイルされたパッケージは、公式リポジトリの汎用パッケージに置き換えられる可能性があります(poudriere
で再構築し、pkg
で再インストールするまで) ])。 また、公式パッケージは、依存パッケージが特定の方法で構築されていることを前提としており、カスタムパッケージと混合すると機能しない場合があります。
これら2つのパッケージソースを混在させる場合は、各インストールを注意深く監査して、誤って望ましくない動作を引き起こしていないことを確認する準備をしてください。
パッケージを混在させるには、priority
設定をリポジトリ定義に追加し、ローカルリポジトリの優先順位を高くするように指定します。
poudriere: { url: "file:///usr/local/poudriere/data/packages/freebsd_10-1x64-HEAD", mirror_type: "srv", signature_type: "pubkey", pubkey: "/usr/local/etc/ssl/certs/poudriere.cert", enabled: yes, priority: 100 }
終了したら、ファイルを保存して閉じます。
自分でカスタムビルドしたパッケージをインストールするためにのみを選択した場合(より安全なルート)、優先度設定を省略できますが、デフォルトのリポジトリを無効にすることをお勧めします。 これを行うには、デフォルトのリポジトリファイルを上書きして無効にする別のリポジトリファイルを作成します。
sudo vi /usr/local/etc/pkg/repos/freebsd.conf
内部では、デフォルトのリポジトリ定義と一致させるために、FreeBSD
という名前を使用します。 次のように定義して、リポジトリを無効にします。
FreeBSD: { enabled: no }
終了したら、ファイルを保存して閉じます。
構成の選択に関係なく、これでリポジトリーを使用する準備が整います。 次のように入力して、パッケージリストを更新します。
sudo pkg update
これで、サーバーはpkg
コマンドを使用して、ローカルリポジトリからパッケージをインストールできます。
ビルドマシンのリポジトリを使用するためのリモートクライアントの構成
ビルドマシンでpoudriere
をセットアップする最も説得力のある理由の1つは、そのホストを他の多くのマシンのリポジトリとして使用することです。 この作業を行うために必要なのは、ビルドマシンからパブリックSSL証明書をダウンロードし、同様のリポジトリ定義を設定することだけです。
クライアントマシンからビルドホストに接続するには、ローカルコンピューターでSSHエージェントを起動して、SSHキーの資格情報を保存する必要があります。
OpenSSLには、自宅のコンピューターで次のように入力することで開始できるSSHエージェントが付属しています。
eval $(ssh-agent)
次に、次のように入力してSSHキーを追加する必要があります。
ssh-add
その後、-A
フラグを使用して接続するときに、ローカルSSHクレデンシャルをクライアントマシンに転送できます。 これにより、自宅のマシンからアクセスしているかのように、クライアントマシンから任意のマシンにアクセスできるようになります。
ssh -A freebsd@client_domain_or_IP
リモートクライアントマシンを使用する場合、最初のステップは、証明書を保存するためのディレクトリ構造(存在しない場合)を作成することです。 先に進み、キーのディレクトリも作成して、将来のタスクに使用できるようにします。
sudo mkdir -p /usr/local/etc/ssl/{keys,certs}
これで、SSHを使用してビルドマシンに接続し、証明書ファイルをクライアントマシンにパイプで戻すことができます。 SSHクレデンシャルを転送したので、パスワードの入力を求められることなくこれを実行できるはずです。
ssh freebsd@server_domain_or_IP 'cat /usr/local/etc/ssl/certs/poudriere.cert' | sudo tee /usr/local/etc/ssl/certs/poudriere.cert
このコマンドは、ローカルSSHクレデンシャルを使用して、クライアントマシンからビルドマシンに接続します。 接続すると、証明書ファイルの内容が表示され、SSHトンネルを介してリモートクライアントマシンにパイプで戻されます。 そこから、sudo tee
の組み合わせを使用して、証明書をディレクトリに書き込みます。
これが完了すると、ビルドマシン自体で行ったのと同じようにリポジトリディレクトリ構造を作成できます。
sudo mkdir -p /usr/local/etc/pkg/repos
これで、ビルドマシンで使用したものと非常によく似たリポジトリファイルを作成できます。
sudo vi /usr/local/etc/pkg/repos/poudriere.conf
違いは、URLの場所とミラーの種類です。 ここでも、パッケージを混在させるか、カスタムコンパイル済みパッケージをのみ使用するかを選択できます。 パッケージソースの混合に関しても同じ警告が適用されます。
カスタムパッケージを公式リポジトリのパッケージと混合する場合、ファイルは次のようになります。
poudriere: { url: "http://server_domain_or_IP/packages/freebsd_10-1x64-HEAD/", mirror_type: "http", signature_type: "pubkey", pubkey: "/usr/local/etc/ssl/certs/poudriere.cert", enabled: yes, priority: 100 }
コンパイルされたパッケージのみを使用する場合、ファイルは次のようになります。
poudriere: { url: "http://server_domain_or_IP/packages/freebsd_10-1x64-HEAD/", mirror_type: "http", signature_type: "pubkey", pubkey: "/usr/local/etc/ssl/certs/poudriere.cert", enabled: yes
さらに、独自のパッケージのみを使用している場合は、デフォルトのFreeBSDリポジトリ設定を上書きするために別のリポジトリ設定ファイルを作成することを忘れないでください。
sudo vi /usr/local/etc/pkg/repos/freebsd.conf
公式リポジトリを無効にするには、ファイルに次のコンテンツを配置します。
FreeBSD: { enabled: no }
終了したら、pkg
データベースを更新して、カスタムコンパイル済みパッケージの使用を開始します。
sudo pkg update
この手順は、必要な数のFreeBSDクライアントマシンで繰り返すことができます。
更新が利用可能な場合のパッケージの再構築
これで、poudriere
セットアップ全体が実行されているはずです。 ただし、特にセキュリティ関連の場合は、新しい更新が利用可能になったときに、パッケージを時々再構築する必要があります。
幸い、パッケージを再構築する手順はかなり簡単です。 まず、FreeBSD jailを更新して、パッケージが最新のオペレーティングシステムに対してビルドされるようにする必要があります。 次のように入力すると、次のように入力できます。
sudo poudriere jail -u -j freebsd_10-1x64
次に、ポートツリーを更新して、各ポートの最新バージョンを刑務所で利用できるようにする必要があります。 次のように入力すると、次のように入力できます。
sudo poudriere ports -u -p HEAD
jailとportsツリーが更新された後、変更が必要な場合は、ポートリストを変更できます。
sudo vi /usr/local/etc/poudriere.d/port-list
make.conf
オプションを調整する必要がある場合は、ビルドに関連付けられているファイルを編集することで調整できます。
sudo vi /usr/local/etc/poudriere.d/freebsd_10-1x64-make.conf
次のように入力して、ポートの新しいオプションを確認できます。
sudo poudriere options -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list
代わりに、ポートのオプションの all を確認したい場合は、-c
フラグを追加できます。 これは、ビルドまたはランタイムの問題をトラブルシューティングするときに役立ちます。
sudo poudriere options -c -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list
上記の準備手順が完了したら、次のように入力して、変更または更新されたポートを再コンパイルできます。
sudo poudriere bulk -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list
Webインターフェイスで進行状況を自由に監視してください。 新しいパッケージがコンパイルされたら、次のように入力して、各マシンのパッケージを更新できます。
sudo pkg upgrade
これにより、FreeBSDインフラストラクチャ全体でカスタムパッケージを非常に簡単に更新できます。
結論
このガイドでは、ビルドマシンと外部クライアントの両方のポートのカスタムセットをコンパイルおよびパッケージ化するようにpoudriere
を構成する方法について説明しました。 このプロセスは一見時間がかかるように見えるかもしれませんが、一度起動して実行すると、管理はかなり簡単になります。
poudriere
を活用することで、FreeBSDのオプションのソフトウェア管理システムの両方を利用することができます。 多くのユーザーにとって、これは両方の長所を構成します。 poudriere
ビルドシステムを使用すると、実際のインストールと管理に高速のpkg
システムを利用しながら、単一のマシンに合わせてソフトウェアをカスタマイズできます。