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

提供:Dev Guides
移動先:案内検索

序章

ポートシステムは、ソフトウェアの柔軟性と制御を望むユーザーにとって、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の場所を使用するため、ここにファイルを配置します。

keyscertsという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

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

離れる必要がある場合は、CTRLaで押してコントロールをscreenに移動し、次にdキーを押して、画面セッションを切り離すことができます。セッションを切り離します。

CTRL-a d

セッションに戻りたい場合は、次のように入力できます。

screen -x

フロントエンドとリポジトリにサービスを提供するためのNginxの設定

パッケージの構築中に、Nginxを構成する機会を利用できます。 別のターミナルを開くか、上記のようにscreenセッションを切り離すか、CTRL-a cと入力して新しいscreenウィンドウを開始します(CTRL-a nと入力するとウィンドウを切り替えることができます)およびCTRL-a p)。

Webサーバーは、次の2つの異なる目的で使用されます。

  • 他のホストがカスタムコンパイル済みパッケージをダウンロードするために使用できる実際のパッケージリポジトリを提供します
  • ビルドプロセスの監視に使用できるpoudriereWebフロントエンドを提供します

このガイドの冒頭で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にあるpoudriereWebディレクトリに設定します。 以下の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アドレスに移動して、poudriereWebインターフェイスを表示できます。

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システムを利用しながら、単一のマシンに合わせてソフトウェアをカスタマイズできます。