FreeBSDサーバー用のパッケージを作成するためのPoudriereビルドシステムのセットアップ方法

前書き

portsシステムは、ソフトウェアの柔軟性と制御を望むユーザーにとって、FreeBSDの最大の資産の1つです。 管理者は、堅牢で予測可能なシステムを使用して、ソースベースのインストールを簡単に作成および管理できます。

この機能の利点は大きいですが、ポートベースの管理に対して課される最も一般的な苦情のいくつかは、各ソフトウェアのコンパイルに必要な時間とリソースに関するものです。 それぞれが独自のポートをコンパイルする多数のサーバーを管理している場合、これはさらに問題になります。 FreeBSDパッケージは、インストールを高速化する代替手段を提供しますが、ポートが許可する制御を犠牲にします。

この問題を軽減するために、管理者は* poudriere *というアプリケーションを使用して、カスタムパッケージを構築および管理できます。 技術的にはさまざまなアーキテクチャのパッケージを構築するために作成されていますが、 `+ poudriere +`は、FreeBSDサーバーのインフラストラクチャ全体のパッケージを作成およびホストするためのパッケージ構築環境としてよく使用されます。

`+ poudriere `を活用することで、管理者は必要に応じてportsシステムを使用してソフトウェアをカスタマイズし、パッケージをコンパイルしてインストールとソフトウェア管理を簡単に行うことができます。 任意の数のFreeBSDサーバーがパッケージソースとして「 poudriere +」がインストールされたホストを使用でき、カスタマイズされたプリコンパイルされた実行可能ファイルをすばやく簡単にダウンロードしてインストールできます。

このガイドでは、ビルドマシンとして「+ poudriere 」を使用してサーバーをセットアップする方法を示します。 その後、このサーバーを追加サーバーのパッケージのリポジトリとして使用できます。 このセットアップは単一のサーバーには有益ですが、追加のサーバーがパッケージソースとして同じ「 poudriere +」ホストを使用し始めると、実際の効率が向上します。

ポート構築はリソースを大量に消費するプロセスであるため、これを通常よりも強力なシステムにセットアップする価値があるかもしれません。

必要なポート管理ソフトウェアをインストールする

最初に、必要なすべてのポートをインストールします。

いつものように、ポート関連のタスクを開始する前に、ポートツリーを更新して、ファイルシステム上の参照が新しいことを確認します。

sudo portsnap fetch update

ポートツリーが更新されたら、ソフトウェアのインストールを開始できます。 最初に、 `+ poudriere `自体をインストールする必要があります。 これはportsツリーの ` 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」を使用します。 これはportsツリーの `+ 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 `ディレクトリに配置されます。 これは、作成するパッケージに署名するために使用されます。 これを安全に保つことは、パッケージが改ざんされないようにするために不可欠です。 ルートまたは ` 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 `オプションを使用します。 これらの2つのオプションは、「 NO_ZFS +」オプションが「yes:」に設定されている場合は設定しないでください。

NO_ZFS=yes
ZPOOL=
ZROOTFS=

ソフトウェアをビルドするとき、 `+ poudriere `はメインのオペレーティングシステムからビルドシステムを分離するためにjailのタイプを使用します。 次に、ビルドマシンが刑務所に必要なソフトウェアをダウンロードできる有効なホストに入力する必要があります。 これは ` FREEBSD_HOST +`オプションで設定されます。

現在このオプションは有効なホストに設定されていませんが、このオプションはすでに存在している必要があります。 これをデフォルトの `+ ftp:// ftp.freebsd.org +`の場所に変更するか、既知の場合はより近いミラーを使用できます。

FREEBSD_HOST=

次に、 `+ poudriere`ルート内のデータディレクトリが正しく設定されていることを確認する必要があります。 これは `+ POUDRIERE_DATA +`オプションで制御され、デフォルトにする必要がありますが、念のためオプションのコメントを外します:

POUDRIERE_DATA=${BASEFS}/data

コメントを外すべき次のオプションは、 `+ CHECK_CHANGED_OPTIONS `および ` CHECK_CHANGED_DEPS `オプションです。 最初のオプションは、オプションが変更されたときにパッケージを再構築するように「 poudriere 」に指示します。 2番目のオプションは、最後のコンパイル以降に依存関係が変更されたときにパッケージを再構築するように ` poudriere +`に指示します。

これらのオプションは両方とも、構成ファイルで必要な形式で存在します。 コメントを外すだけです:

CHECK_CHANGED_OPTIONS=verbose
CHECK_CHANGED_DEPS=yes

次に、ビルド時にパッケージに署名できるように、作成したSSLキーを「+ poudriere 」にポイントします。 これを指定するために使用されるオプションは、「 PKG_REPO_SIGNING_KEY +」と呼ばれます。 このオプションのコメントを外し、先ほど作成したSSLキーの場所を反映するようにパスを変更します。

PKG_REPO_SIGNING_KEY=

最後に、サーバーに到達できるドメイン名またはIPアドレスに「+ URL_BASE 」文字列を設定できます。 これは、クリック可能な出力にリンクを作成するために、 ` poudriere +`によって使用されます。 プロトコルを含めて、値をスラッシュで終了する必要があります。

URL_BASE=http:///

変更が完了したら、ファイルを保存して閉じます。

ビルド環境の作成

次に、ビルド環境を実際に構築する必要があります。 前述のように、 `+ poudriere +`は、jailを使用して隔離された環境でポートを構築します。

jailを作成し、 `+ poudriere +`にFreeBSDをインストールする必要があります。 それぞれが異なるバージョンのFreeBSDを持つ複数の刑務所を持つことができます。 投獄されたFreeBSDのバージョンは、サーバー自体が実行しているバージョンと同じかそれより古いものでなければなりません。 このガイドでは、ホストシステムのアーキテクチャとFreeBSDバージョンを反映する単一の刑務所に焦点を当てます。

作成する刑務所の説明的な名前を選択する必要があります。 これは、クライアント上のリポジトリ設定で使用されるため重要です。これは、FreeBSDの異なるバージョン用に構築するときに非常に重要になる可能性があります。 また、「+ man +」ページでは、他のツールとのやり取りのために、名前にドットを使用しないよう指示しています。 たとえば、このガイドでは、64ビットアーキテクチャでFreeBSD 10.1を使用しているため、これを「freebsd_10-1x64」と呼びます。

jailの名前を `+ -j `で指定し、 ` -v `オプションを使用してインストールするFreeBSDのバージョンを示します。 サポートされているリリースの形式は、https://www.freebsd.org/security/ [this]ページの表の「Releases」列で確認できます。 リリースの代わりに「 -CURRENT 」または「 -STABLE 」を使用している場合は、https://www.freebsd.org/snapshots/ [this]ページにある形式(「 1- CURRENT + `)。

目的のために、jail構築コマンドは次のようになります。

sudo poudriere jail -c -j freebsd_10-1x64 -v 10.1-RELEASE

これは完了するまでに時間がかかるため、しばらくお待ちください。 終了したら、次のように入力して、インストールされている刑務所を確認できます。

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

ジェイルを作成したら、ポートツリーをインストールする必要があります。 さまざまな開発ニーズに対応するために、複数のポートツリーを維持することができます。 刑務所が利用できる単一のポートツリーをインストールします。

`+ -p +`フラグを使用してポートツリーに名前を付けることができます。 このツリーの使用を正確に要約しているため、ツリーを「HEAD」と呼びます(「ヘッド」またはツリーの最新のポイント)。 利用可能なポートツリーの最新バージョンに合わせて定期的に更新します。

sudo poudriere ports -c -p HEAD

繰り返しますが、ポートツリー全体を取得して抽出する必要があるため、この手順には時間がかかります。 終了したら、次のように入力してポートツリーを表示できます。

poudriere ports -l

このステップが完了すると、ポートをコンパイルしてパッケージをビルドするための構造が整いました。 次に、ポートのリストを集めて、各ソフトウェアに必要なオプションを作成および構成します。

ポート構築リストの作成とポートオプションの設定

`+ poudriere +`でコンパイルする場合、ビルドコマンドを呼び出すときにビルドするポートを指定します。 ポートを個別に指定することは可能ですが、これは長期的な管理に適したソリューションではありません。 代わりに、コマンドに直接渡すことができるポートのリストを作成します。

ファイル作成では、次のように、ポートツリー内の位置を反映するために、ポートカテゴリに続いてスラッシュとポート名をリストする必要があります。

/
/
/

. . .

必要な依存関係も自動的に構築されるため、インストールするポートの依存関係ツリー全体を追跡する必要はありません。 このファイルを手動でビルドできますが、ベースシステムにビルドするソフトウェアのほとんどが既にある場合は、 `+ 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に対して + cmake.conf`ファイルを作成できます。 たとえば、私たちの刑務所では、この名前で `+ make.conf +`ファイルを作成できます:

sudo vi /usr/local/etc/poudriere.d/-make.conf

内部には、ポートを構築するときに使用するオプションを配置できます。 たとえば、ドキュメント、サンプル、ネイティブ言語サポート、またはX11サポートを作成したくない場合は、以下を設定できます。

OPTIONS_UNSET+= DOCS NLS X11 EXAMPLES

その後、各ポートを構成し、選択したオプションでファイルを作成できます。

ホストシステムのポートをカスタマイズしている場合、設定を「+ poudriere 」にコピーして、それらの設定を利用できます。 これを行うには、jailにちなんで名付けられた ` / usr / local / etc / poudriere.d `ディレクトリ内に新しいディレクトリを作成し、最後に ` -options +`を追加します。 このガイドでは、次のように入力してこれを実現できます。

sudo mkdir /usr/local/etc/poudriere.d/-options

次のように入力して、ホストシステムで既に使用しているオプションをコピーできます。

sudo cp -r /var/db/ports/* /usr/local/etc/poudriere.d/-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ツリーの両方が最新であることを確認することです。 これはおそらく、ポートツリーと刑務所の両方を作成したばかりなので、最初にポートを構築するときには問題になりませんが、ビルドを実行するたびにこれを行う習慣を身に付けるのは良いことです。

刑務所を更新するには、次のように入力します。

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

プロセスの特定の部分は、他の部分よりも多くの出力を生成します。

離れる必要がある場合は、「+ a 」で「 CTRL 」を押して「 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をインストールしましたが、構成していません。

最初に、 `+ nginx_enable =" YES "`行を ` / etc / rc.conf `ファイルに追加して、サービスを有効にします。 これにより、起動時にサーバーが起動し、従来の「 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 ;
       root /usr/local/share/poudriere/html;
   }

}

次に、2つの `+ location +`ブロックを追加します。

上記で定義した基本的な `+ root `ディレクティブはWebインターフェイスの大部分を処理しますが、ログと実際のデータを保存するディレクトリをNginxに伝える必要があります。 Poudriereはこれに「 / data 」エンドポイントを使用します。 ログはすべて特定のディレクトリに書き込まれるため、この場所に対して ` autoindex +`ディレクティブをオンにして、ログのリストを表示できます。

最終的に、最初の `+ location +`ブロックは次のようになります。

# http context

. . .

   server {
       listen 80 default;
       server_name ;
       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 ;
       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権限でNginxの `+ mime.types +`ファイルを開きます。

sudo vi /usr/local/etc/nginx/mime.types

`+ text / plain `コンテンツタイプを指定するエントリを見つけ、スペースで区切られた現在のファイルタイプのリストの最後に ` log +`を追加します。

. . .

text/mathml                         mml;
text/plain                          txt ;
text/vnd.sun.j2me.app-descriptor    jad;

. . .

完了したら、ファイルを保存して閉じます。

次のように入力して、構成ファイルの構文を確認します。

sudo service nginx configtest

エラーがある場合は、先に進む前に修正してください。 構成テストで構文エラーが報告されない場合は、次を入力してNginxを起動します。

sudo service nginx start

ファイアウォールを有効にしている場合、ポート80へのトラフィックを許可するようにルールを設定し、サービスを再起動することを忘れないでください。

これで、Webブラウザでサーバーのドメイン名またはIPアドレスに移動して、 + poudriere + Webインターフェースを表示できます。

http://

メインの `+ poudriere +`ページが表示されます:

image:https://assets.digitalocean.com/articles/freebsd_poudriere/main.png [Poudriereメインページ]

クリックスルーすると、港湾建設のプロセスまたは結果を表示できるはずです。 また、完了したビルドのログまでクリックスルーできるはずです。

コンパイルされたパッケージをブラウザで表示したい場合、それらは `+ / packages +`から始まる階層を通じて利用可能になります:

image:https://assets.digitalocean.com/articles/freebsd_poudriere/packages.png [Poudriere packages repo]

パッケージを表示するには、ビルド全体が完了するまで待たなければならない場合があります。 リンクをクリックすると、 `+ 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/",
   mirror_type: "srv",
   signature_type: "pubkey",
   pubkey: "/usr/local/etc/ssl/certs/poudriere.cert",
   enabled: yes
}

この時点で、決定を下す必要があります。 コンパイルされたパッケージを_prefer_し、メインのFreeBSDリポジトリが提供するパッケージにフォールバックしたい場合、ここで優先順位を設定して、このリポジトリからパッケージを優先するように指示できます。 これにより、ローカルリポジトリが公式リポジトリよりも優先されます。

この方法でパッケージを混在させると、複雑な結果になる可能性があることに注意してください。 公式リポジトリのパッケージバージョンがローカルリポジトリバージョンよりも高い場合、コンパイルされたパッケージは公式リポジトリの汎用パッケージに置き換えられます( `+ poudriere `で再構築し、 ` pkg +`で再インストールするまで)。 また、公式パッケージは、依存パッケージが特定の方法で構築されていると想定している場合があり、カスタムパッケージと混合すると機能しない場合があります。

これら2つのパッケージソースを混在させる場合は、各インストールを慎重に監査して、誤って望ましくない動作を引き起こさないように準備してください。

パッケージを混在させるには、リポジトリ定義に `+ priority +`設定を追加し、ローカルリポジトリの優先度が高くなるように指定します。

poudriere: {
   url: "file:///usr/local/poudriere/data/packages/",
   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 @

リモートクライアントマシンにアクセスしたら、最初のステップは、証明書を保存するためのディレクトリ構造(存在しない場合)を作成することです。 先に進み、キー用のディレクトリも作成して、将来のタスクに使用できるようにします。

sudo mkdir -p /usr/local/etc/ssl/{keys,certs}

これで、SSHを使用してビルドマシンに接続し、証明書ファイルをクライアントマシンにパイプで戻すことができます。 SSHクレデンシャルを転送したので、パスワードの入力を求められることなくこれを実行できるはずです。

ssh freebsd@ '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:///packages//",
   mirror_type: "http",
   signature_type: "pubkey",
   pubkey: "/usr/local/etc/ssl/certs/poudriere.cert",
   enabled: yes,
   priority: 100
}

コンパイル済みパッケージのみを使用する場合、ファイルは次のようになります。

poudriere: {
   url: "http:///packages//",
   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の刑務所を更新する必要があります。 次のように入力して、それを行うことができます。

sudo poudriere jail -u -j freebsd_10-1x64

次に、各ポートの最新バージョンが刑務所で利用できるように、ポートツリーを更新する必要があります。 次のように入力して、それを行うことができます。

sudo poudriere ports -u -p HEAD

jailとポートツリーが更新された後、変更が必要な場合はポートリストを変更できます。

sudo vi /usr/local/etc/poudriere.d/port-list

`+ make.conf +`オプションを調整する必要がある場合は、ビルドに関連するファイルを編集することで調整できます。

sudo vi /usr/local/etc/poudriere.d/-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 +`システムを利用しながら、1台のマシンに合うようにソフトウェアをカスタマイズできます。

Related