BuildbotとPoudriereを使用してFreeBSDサーバー用のパッケージを構築および展開する方法

著者はhttps://www.brightfunds.org/funds/foss-nonprofits [無料およびオープンソース基金]を選択して、https://do.co/w4do-cta [Donationsのために書く]の一部として寄付を受け取りましたプログラム。

前書き

FreeBSDのポートとパッケージのコレクション(以降_ports tree_と呼ばれる)は、外部ソフトウェア用のFreeBSDのビルドシステムです。 Makefileベースの一貫したパッケージ構築方法を提供します。 _port_は、ビルドレシピ、つまりMakefileと関連ファイルを指します。 _package_は、1つのポートをパッケージファイルとそのメタ情報のバイナリ(圧縮)アーカイブに構築する出力です。

`+ make install +`を使用して、30,000以上のポートのサブセットまたはすべてを手動で構築およびインストールできます。 ただし、ビルドはクリーンな環境ではなく、サーバーの1つで実行されます。 本番ユースケースの場合、手動ビルドは、各ホストが同じリビジョンのポートツリーを必要とし、すべてのパッケージを自分用にコンパイルする必要があることも意味します。 これは、人間とサーバーによる繰り返しエラーが発生しやすい作業を意味します。 各ホストで同一のビルド済みバイナリパッケージを取得して使用し、中央の安全なパッケージリポジトリから提供することをお勧めします。

これを実現するために、https://github.com/freebsd/poudriere/wiki [Poudriere]は、パッケージのビルド、テスト、監査、およびパッケージリポジトリの保守を行うFreeBSDの標準ツールです。 各ビルドは、新しいhttps://www.digitalocean.com/community/tutorials/how-to-install-buildbot-freebsd#step-1-%E2%80%93-setting-up-jails-forで分離して実行されます-the-buildbot-master-and-worker [jail]、目的のバージョンのFreeBSDを実行し、パッケージがインストールされていない状態で起動します。 クリーンビルドでは、ベースシステムと明示的に指定された依存関係のみを使用できます。 Poudriereは、必要に応じてパッケージを再構築し、ビルドの完了後にパッケージリポジトリを更新します。 `+ poudriere +`コマンドラインツールは、さまざまなポートツリー、FreeBSDバージョン、ポートビルドオプションの管理、そして最後にビルドの実行の中心です。

このチュートリアルでは、Poudriereを構成し、必要なパッケージのセットを構築し、HTTPベースのパッケージホスティングをセットアップし、継続的な統合プラットフォームとしてhttps://buildbot.net/[Buildbot]を使用してビルドを自動化します。 最後に、クライアントマシンからパッケージに安全にアクセスします。

前提条件

このガイドを始める前に、次のものが必要です。

  • FreeBSD 11.2を実行しているサーバー。 FreeBSDを初めて使用する場合は、https://www.digitalocean.com/community/tutorials/how-to-get-started-with-freebsdのガイドに従ってこのサーバーをカスタマイズすると役立つ場合があります[ FreeBSDの使用を開始する方法]。 *注意:*現在、FreeBSD 12.0にはhttps://bugs.freebsd.org/bugzilla/show_bug.cgi?id=231773 [ネストされたjailの問題]があり、これは12.xを使用する前に最初に修正する必要がありますチュートリアル。

  • パッケージとログを保存するのに十分な容量を確保するには、10 GB以上の空きディスク容量。

  • FreeBSDでBuildbotをセットアップする方法チュートリアルを完了することによる基本的なBuildbotのセットアップ。

  • 同じバージョンのFreeBSDを実行している別のサーバー。クライアントとして使用して、HTTP / HTTPSベースのパッケージリポジトリで自動的にビルドおよびホストするパッケージを取得およびインストールします。

手順1-Buildbot Workerで使用するPoudriereのインストール

前提条件のチュートリアルを完了すると、ビルドボットのマスターとワーカーの刑務所とNginxのセットアップが機能するようになります。 次の手順で、この既存のセットアップに基づいて構築します。 この最初のステップでは、ビルドツールのPoudriereをワーカー刑務所内にインストールします。ビルドボットワーカープロセスがビルドを後でトリガーする場所だからです。

Buildbotをホストしているサーバーに接続し、次のコマンドを使用してワーカーjailで* root *シェルを開きます。

sudo jexec buildbot-worker0 csh

Poudriereをパッケージとしてインストールします。

pkg install poudriere

次に、「+ y 」を押してから「 ENTER +」を押してインストールを確認します。

最新のPoudriereツールと依存関係が正常にインストールされました。 次のいくつかの手順では、Poudriereを構成するための準備を行います。

手順2-パッケージ署名キーの作成(オプション)

セキュリティを強化するために、ビルドされたパッケージにデジタル署名を設定することをお勧めします。 インストールを後で、または別の方法で保護する場合は、この手順をスキップします。 それ以外の場合は、パッケージに署名するために使用するキーペアを作成し(秘密キーを使用)、パッケージを検証します(パブリックパーツを使用)。

デフォルトでは、パッケージは + .txz +`ファイルとしてビルドされます。これは、パッケージの内容を強く圧縮したtarballです。 圧縮ファイルのチェックサムは、HTTP / HTTPS(TCPチェックサム)を介してファイルを提供するとともに、破損データに対する保護をすでに提供しています。 パッケージの内容は通常、ファイルとディレクトリに加えて、パッケージ名、バージョン、その他のオプションなどのメタ情報で構成されます。 ファイルにはhttps://en.wikipedia.org/wiki/Setuid#Security[+setuid+`-able Programs]( `+ sudo +`パッケージで見られるように、_sudo_はFreeBSDには組み込まれていません)を含めることもできます。インストール時スクリプトは* root *ユーザーとして実行されます。 したがって、未検証のソースからインストールすると、セキュリティ上のリスクが生じます。

HTTPS経由でパッケージを提供することにより、誰かがディスク上のパッケージを改ざんしたかどうかを検出できません。 パッケージの整合性と信頼性は、RSA秘密キーでパッケージリポジトリに署名するようにPoudriereを構成することで追加できます。 署名されたダイジェストと対応する公開キーは、パッケージリポジトリの `+ digests.txz +`ファイルに保存されます。 必要なキーペア(RSA秘密キーと公開キー)は、秘密キーが紛失または侵害されない限り、長期間変更されないようにすることができます。

この手順では、ビルドが実行されるキーペア(作業員の刑務所)を作成し、パッケージクライアントで後で使用するために公開部分をダウンロードします(後の手順で説明します)。

まだワーカーjail * root *シェルにいることを確認してください。

新しいRSA秘密鍵を作成します。

openssl genrsa -out /usr/local/etc/poudriere.key 4096

秘密鍵ファイルは、* root * -Poudriereを実行するユーザーのみがアクセスできる必要があります。 アクセス許可を保護します。

chmod 0600 /usr/local/etc/poudriere.key

後で、パッケージの署名を検証するためにクライアントで利用可能な公開キー部分が必要になります。 ここで公開鍵を抽出しましょう。

openssl rsa -in /usr/local/etc/poudriere.key -pubout -out /tmp/poudriere.pub

最後に、自分のコンピューターから公開鍵ファイルをダウンロードします。

scp :/usr/jails/buildbot-worker0/tmp/poudriere.pub /tmp/poudriere.pub

これで、パッケージ署名用のキーペアのオプションの作成が完了します。 後でPoudriereを使用して実際の署名を構成し、クライアントでダウンロードした公開鍵ファイルを使用して検証します。

別のオプションのステップが続きます。ZFSファイルシステムを使用する場合、Poudriereはそれを利用してビルドを高速化できます。 それ以外の場合は、https://www.digitalocean.com/community/tutorials/how-to-build-and-deploy-packages-for-your-freebsd-servers-using-buildbot-and-poudriere#step-にスキップできます。 4-%E2%80%94-configuring-poudriere、-the-build-jail、-and-the-ports-tree [Step 4]は、最初のビルドを実行する準備をするためにPoudriereを構成します。

手順3-ZFSのセットアップ(オプション)

このステップは、https://en.wikipedia.org/wiki/ZFS [ZFS filesystem]の上でFreeBSDシステムを実行する場合にのみ適用されます。 たとえば、DigitalOcean Dropletを使用している場合、画像には* x64 zfs *(FreeBSD用)というラベルが付けられます。 このステップでは、刑務所の作成と管理を高速化するためにPoudriereが使用できるファイルシステムを作成し、ビルドを高速化する可能性があります。

プールを一覧表示すると、ZFSを使用しているかどうかを確認できます。 刑務所内ではなく、サーバーのシェル上にいることを確認してください。

exit

次のコマンドを実行して、zpoolをリストします。

sudo zpool list

プールが利用可能な場合、それに関する情報を出力します:

OutputNAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
zroot   148G  94.4G  54.1G        -         -    66%    63%  1.00x  ONLINE  -

それ以外の場合、ZFSサポートが利用できない場合、ツールは「+ no pools available 」、または「 failed to initialize ZFS library +」を出力します。 これは、どのシステムもZFSを使用していないことを意味します。この場合、次の手順にスキップします。 UFSファイルシステムなど、別のディスクまたはストレージタイプを使用することにした場合は、次の手順に進むこともできます。

ZFSを使用する予定がある場合は、ビルド関連データを保存する印刷されたプール名を覚えておいてください。 数ギガバイトのストレージを計画する必要があります。

ZFSは、ビルド刑務所、ポートツリー、ログ、パッケージ、その他のデータなど、Poudriereのさまざまなデータセットを分離するのに役立ちます。 これらは独立して保存され、その結果、空きスペースや痕跡を残さないという確実性を持って、迅速に削除できます。

PoudriereがZFSを使用するには、3つのことを行う必要があります。親ZFSデータセットを作成し、ZFSデータセットの作成と削除を許可します(Buildbotワーカーjailまたは他のjailはデフォルトでは実行できません)。それに応じてPoudriereの構成。

前提条件のチュートリアルでは、 `+ / etc / jail.buildbot-worker0.conf `でBuildbotワーカーjailを設定しました。 任意のテキストエディタでこのファイルを開き、次の強調表示された行を追加して親データセットを委任し、刑務所が親の下のZFSデータセットを管理できるようにします。 ` zroot +`を目的のプール名に置き換えてください:

sudo ee /etc/jail.buildbot-worker0.conf

/etc/jail.buildbot-worker0.conf

buildbot-worker0 {
   host.hostname = buildbot-worker0.localdomain;
   ip4.addr = "lo1|10.0.0.3/24";
   path = "/usr/jails/buildbot-worker0";
   exec.start = "/bin/sh /etc/rc";
   exec.stop = "/bin/sh /etc/rc.shutdown";
   mount.devfs; # need /dev/*random for Python
   persist;


}

この記事では、ビルド関連のデータをZFSプールの「+ zroot +」に保存します。別の名前のプールを選択した場合は、このZFS関連の構成をここおよび記事の残りの部分で調整してください。

このコンテンツを追加したら、エディターを保存して終了します。 `+ ee `を使用している場合は、 ` CTRL + C `を押し、 ` exit `を入力して、 ` ENTER +`を押します。

構成ファイルに記載されている親ZFSデータセットを作成します。

sudo zfs create zroot/pdr
sudo zfs create zroot/pdr/w0

これは、将来さらにワーカーを追加する可能性があることを意図的に想定しているため、最初のワーカーのサブデータセットを作成します。 FreeBSDの古いバージョン(12.0より前)は88文字のマウント名制限があるため、データセット名は意図的に短くなっています。

刑務所が親データセットを制御し、子を管理するには、データセットに次のフラグを付ける必要があります。

sudo zfs set jailed=on zroot/pdr/w0

前提条件が満たされると、jailは新しい構成で正しく開始されます。

sudo service jail restart buildbot-worker0

これらの手順により、必要なファイルシステム(ZFSデータセット)が正常に作成され、刑務所が親データセットを管理できるようになりました。 次のステップでは、Poudriereを構成します。これには、ビルド関連データの保存に使用する選択されたzpoolとデータセットの指定が含まれます。

手順4-Poudriere、Build Jail、およびPorts Treeの構成

ここまで、Poudriereをインストールし、オプションでパッケージ署名とZFSの要件をカバーしました。 Poudriereを「jail化」された方法で実行できるようにするには、つまり、Buildbotワーカーjail内から正しく機能するには、jailに特定のアクセス許可を与える必要があります。 たとえば、ZFSを使用する場合は、刑務所による使用と管理のために親データセットを既に委任しています。

最初にループバックIPとすべてのアクセス許可を構成してから、変更に続いてそれぞれの意味をステップ実行します。

Poudriereは、ビルドごとに2つのビルド刑務所を開始したいと考えています。1つはループバックのみのネットワークで、もう1つはインターネットアクセスです。 インターネットに到達することになっているビルドステージのみが後者を使用します。 たとえば、「+ fetch 」はソースtarballをダウンロードできますが、「 build 」フェーズではインターネットアクセスが許可されません。 ワーカーjailの既存の設定には、インターネットアクセスを許可する ` ip4.addr =" lo1 | 10.0.0.3/24 "`があります。 Poudriereがループバックアドレスを新たに開始されたビルド刑務所に割り当てることができるようにするには、IPをその親(ワーカー刑務所)に渡す必要もあります。 これが機能するためには、前提条件のチュートリアルのファイアウォール設定ファイルの最新バージョン「 / usr / local / etc / ipfw.rules +」を適用していることを確認してください。 NAT経由。

強調表示された行をワーカーjail構成に追加します。

sudo ee /etc/jail.buildbot-worker0.conf

/etc/jail.buildbot-worker0.conf

buildbot-worker0 {
   host.hostname = buildbot-worker0.localdomain;
   ip4.addr = "lo1|10.0.0.3/24";

   path = "/usr/jails/buildbot-worker0";
   exec.start = "/bin/sh /etc/rc";
   exec.stop = "/bin/sh /etc/rc.shutdown";
   mount.devfs; # need /dev/*random for Python
   persist;

   # If you followed the ZFS setup step, you have this line
   # already (keep it). For non-ZFS setup, this line must be absent.
   exec.poststart = "/sbin/zfs jail buildbot-worker0 zroot/pdr/w0";













}

ここに次を追加しました(https://www.freebsd.org/cgi/man.cgi?jail(8)[jail(8)manpage]も参照してください):

  • `+ ip4.addr + =" lo0 | 127.0.0.3 "`は、別のIPv4アドレスを刑務所に追加します。 後でPoudriereの ` LOIP4 `変数を設定して、このループバックアドレスを割り当てて、 ` build `フェーズなどでインターネットやネットワーク内の他のマシンと通信しないはずの刑務所を構築します。 ビルド中にインターネットアクセスが必要なビルドがある場合、Poudriereは回避策として変数 ` ALLOW_NETWORKING_PACKAGES `をサポートします。 ただし、Poudriereがインターネットアクセスを許可している「 fetch +」フェーズでは、ベストプラクティスに従って、ダウンロードやその他のインターネット向けタスクを早期に実行することが望ましいです。

  • `+ allow.chflags `を使用すると、Poudriereは ` / bin / sh +`のような特定のシステムファイルをビルドjailで不変にできます。

  • `+ allow.mount `および他の ` allow.mount。* +`オプションにより、Poudriereは特定の必要なファイルシステムをビルドjailにマウントできます。

  • 生のソケットの使用を許可する「+ allow.raw_sockets 」、および任意のソケットアドレスファミリの使用を許可する「 allow.socket_af 」は、両方ともインターネット対応のビルド刑務所に適用されます。 これは、ビルド刑務所に入って問題をデバッグするときなど、対話モードで ` ping +`のようなツールを実行できるようにするのに役立ちます。

  • 「+ allow.sysvipc 」は廃止され、3つの個別の設定「 sysvmsg + / + sysvsem + / + sysvshm + `が採用され、jailが(「SYS V」IPCプリミティブを介して)共有メモリオブジェクトのみを参照できるように制限されます。 しかし、Poudriereは3つ​​の個別のパラメーター(FreeBSD 11.2の時点)に関連するsysctl情報を読み取ることができないため、jailをビルドするために `+ allow.sysvipc +`のみを渡すことができます。 この非推奨の構成では、jailはjailの外部のプロセスの共有メモリを読み取ることができます。 これは、PostgreSQLなどのIPC機能に依存する特定のソフトウェアにのみ関連するため、セキュリティに影響を及ぼす可能性はわずかです。 ビルド中に必要なポートに依存しない限り、この構成を削除できます。

  • `+ children.max = 16 `は、ワーカーの刑務所の下に16のサブ刑務所を許可します。 多数のCPUがあり、Poudriereが許可されているよりも多くのビルドjailを作成しようとする場合、この数値を後で上げることができます。 各Poudriereビルドは、「ジョブ」ごとに参照jailと2つのビルドjailを作成しようとします。デフォルトでは、CPUの数( ` sysctl -n hw.ncpu +`の出力として)をジョブカウントとして使用します。

  • 特定のファイルシステムをマウントするには、「+ enforce_statfs = 1 」と「 allow.mount +」が必要です。

構成ファイルを保存して終了します。

構成をすぐに有効にするために、jailを再起動します。

sudo service jail restart buildbot-worker0

Poudriereがマウントを実行できるように、それぞれのカーネルモジュールをロードする必要があります。 次のコマンドを実行して、ブート時にモジュールをすぐにロードします。

sudo sysrc -f /boot/loader.conf nullfs_load=YES
sudo kldload -n nullfs
sudo sysrc -f /boot/loader.conf tmpfs_load=YES
sudo kldload -n tmpfs

サンプルファイル `+ / usr / local / etc / poudriere.conf.sample `を ` / usr / local / etc / poudriere.conf +`にコピーした、以前にPoudriereパッケージをインストールしました。 次に、構成ファイルを編集します。 可能なすべての構成変数は既にサンプルに存在するため、ファイル内の各行のコメントを解除するか適応させて、変数を特定の値に設定します。

次のコマンドについては、ワーカーjailの* root *シェルにいることを確認してください。

sudo jexec buildbot-worker0 csh

次のコマンドでファイルを開きます。

ee /usr/local/etc/poudriere.conf

ZFSを使用することに決めた場合は、目的のzpoolと親データセットを入力してください。

/usr/local/etc/poudriere.conf(スニペット)

. . .
# Poudriere can optionally use ZFS for its ports/jail storage. For
# ZFS define ZPOOL, otherwise set NO_ZFS=yes
#
#### ZFS
# The pool where poudriere will create all the filesystems it needs
# poudriere will use ${ZPOOL}/${ZROOTFS} as its root
#
# You need at least 7GB of free space in this pool to have a working
# poudriere.
#


### NO ZFS
# To not use ZFS, define NO_ZFS=yes


# root of the poudriere zfs filesystem, by default /poudriere

. . .

それ以外の場合、ZFSを使用しないことに決めた場合は、ZFSサポートを無効にしてください。

/usr/local/etc/poudriere.conf(スニペット)

. . .
# Poudriere can optionally use ZFS for its ports/jail storage. For
# ZFS define ZPOOL, otherwise set NO_ZFS=yes
#
#### ZFS
# The pool where poudriere will create all the filesystems it needs
# poudriere will use ${ZPOOL}/${ZROOTFS} as its root
#
# You need at least 7GB of free space in this pool to have a working
# poudriere.
#
#ZPOOL=zroot

### NO ZFS
# To not use ZFS, define NO_ZFS=yes


# root of the poudriere zfs filesystem, by default /poudriere
# ZROOTFS=/poudriere
. . .

後でPoudriereにFreeBSDベースシステムをダウンロードして、最初のビルドjailをブートストラップするように指示します。 これには、ダウンロードホストを指定する必要があります。次の強調表示された行を追加します。

/usr/local/etc/poudriere.conf(スニペット)

. . .
# the host where to download sets for the jails setup
# You can specify here a host or an IP
# replace _PROTO_ by http or ftp
# replace _CHANGE_THIS_ by the hostname of the mirrors where you want to fetch
# by default: ftp://ftp.freebsd.org
#
# Also note that every protocols supported by fetch(1) are supported here, even
# file:///
# Suggested: https://download.FreeBSD.org

Poudriereは投獄されるので、jailのフルパス `+ / usr / jails / buildbot-worker0 `は各マウントパスの一部であるため、12.0より前のFreeBSDバージョンの88文字というマウント名の制限は特に有害です。 制限を超えるとビルドが致命的に破損するため、パスの長さを短くするように注意してください。 典型的なディレクトリ ` / usr / local / poudriere `の代わりに、次のように ` / pdr +`を使用できます。

/usr/local/etc/poudriere.conf(スニペット)

. . .
# The directory where poudriere will store jails and ports

次に、そのディレクトリを作成します。

mkdir /pdr

`+ poudriere.conf +`のエディターに再び切り替えます。

ee /usr/local/etc/poudriere.conf

Poudriereは、すべてのビルダーが同じキャッシュを共有するように、ビルドの実行中に_distファイル_(各ポートのソースコードtarball)の中央ディレクトリをマウントします。 デフォルトのディレクトリは次のとおりです。

/usr/local/etc/poudriere.conf(スニペット)

. . .
# If set the given directory will be used for the distfiles
# This allows to share the distfiles between jails and ports tree
# If this is "no", poudriere must be supplied a ports tree that already has
# the required distfiles.

次に、そのディレクトリを作成します。

mkdir -p /usr/ports/distfiles

ステップ2に従ってパッケージリポジトリ署名キーを作成した場合は、エディターを再度入力して指定してください。

ee /usr/local/etc/poudriere.conf

/usr/local/etc/poudriere.conf(スニペット)

. . .
# Path to the RSA key to sign the PKG repo with. See pkg-repo(8)

次回にC / C ++コンパイラとリンカの出力をキャッシュすると、ビルドははるかに高速に実行されます。 ポートツリーは、ツールhttps://ccache.dev/[ccache]を活用してこれを直接サポートします。 少なくとも5GB以上のスペース(デフォルトのキャッシュサイズ)を確保できる場合は、有効にして、それぞれのキャッシュディレクトリを作成してください。

/usr/local/etc/poudriere.conf(スニペット)

. . .
# ccache support. Supply the path to your ccache cache directory.
# It will be mounted into the jail and be shared among all jails.
# It is recommended that extra ccache configuration be done with
# ccache -o rather than from the environment.
mkdir /var/cache/ccache

Linuxソフトウェアのビルドと実行は一般的ではないため、必要になるまで無効にしてください。

ee /usr/local/etc/poudriere.conf

/usr/local/etc/poudriere.conf(スニペット)

. . .
# Disable linux support

刑務所にはループバックアドレスが割り当てられている必要があります。そうでない場合、Poudriereはそれについて警告します。 ループバック専用のネットワークインターフェース( + lo1 +)上にあるため、jailのIPを継承できます。 このため、構成ファイルの最後に次の行を追加してください。

/usr/local/etc/poudriere.conf(スニペット)

構成ファイルを保存して終了します。

ビルドを実行するには、さらに2つのリソースが必要です。ビルドjailテンプレートとして使用するFreeBSDベースシステムと、最新のポートツリーです。 対象のFreeBSDバージョンを選択します。 このチュートリアルでは、アーキテクチャ用にFreeBSDをダウンロードするようにPoudriereに指示します。 ジェイルには好きな名前を付けることができますが、 `+ 112amd64 `のような一貫した命名スキームをお勧めします。 また、四半期ごとの安定したポートツリーブランチ(ここでは、「 2019Q2 +」を使用)と、更新後にビルドが時々壊れる可能性のある最先端の「ヘッド」ブランチを選択することにも留意してください。 サーバー上のバージョンよりも新しいFreeBSDバージョンは、ビルド刑務所では使用できません。

ビルド刑務所をダウンロードして作成します。

poudriere jail -c -j  -v  -a

最後に、ポートツリーをダウンロードしましょう。 デフォルトのダウンロード方法はhttps://www.freebsd.org/cgi/man.cgi?portsnap(8)[portsnap]で、履歴情報なしでツリーの圧縮スナップショットを使用します。 アップストリームの変更をマージしたり、貢献したりするには、SubversionまたはGitのいずれかをお勧めします。 これは、バージョン管理システムでカスタムの自己ホスト型ツリーを使用する場合にも重要です。 次のコマンドで、現在の年と四半期を入力してください。

アップストリームの公式ポートツリーから始めたい場合:

poudriere ports -c -p  -m  -B

メソッド `+ svn + https +`は、FreeBSD Subversionホスト(https://svnweb.freebsd.org/ports/ [こちらからオンラインで表示可能])から同期します。 代替ソースを使用する予定がある場合は、次のメモを読んでください。それ以外の場合はスキップしてください。

利用可能なツリーは `+ poudriere ports -l +`で一覧表示でき、次のような一覧を出力します:

OutputPORTSTREE METHOD    TIMESTAMP           PATH
2019Q2    svn+https 2019-04-20 19:23:19 /pdr/ports/2019Q2

これで、Poudriereの構成とリソースのセットアップが完了しました。 最初のビルドをトリガーするために必要なデータでPoudriereを構成し、刑務所がサブ刑務所を作成できるようにしました。 次に、最初のビルドを手動で実行して、セットアップが機能していることを確認します。

ステップ5-手動テストビルドの実行

コマンド `+ poudriere bulk `を使用して、1つ以上のパッケージとそのすべての依存関係を構築できます。 パッケージの最初のビルド後、Poudriereは、再構築が必要かどうかを自動的に検出するか、既存のパッケージファイルをそのまま残します。 ` bulk `サブコマンドはパッケージのみをビルドしますが、 ` poudriere testport +`を使用してビルドを実行すると、ポートのMakefileで指定された「testing」の定義を使用して指定されたポートもテストします。 この記事の範囲では、クライアントへのインストール用パッケージの提供にのみ関心があるため、バルクビルドを使用しています。

Poudriereをインストールしたワーカー刑務所のルートシェルにいることを確認してください。 後で、Buildbotワーカープロセスがビルドを自動的に実行する場所にもなります。

ビルドを実行し、先ほど選択したビルドjail名とポートツリー名をプレースホルダーに入力します。

poudriere bulk -j  -p  ports-mgmt/pkg

これにより、ポート `+ ports-mgmt / pkg `が構築されます。 公式ツリーのポートは ` <category> / <name> +`階層に格納され、それらのパス(_package origin_と呼ばれる)はどのパッケージをビルドする必要があるかをPoudriereに伝えるために使用されます。 最初に、パッケージマネージャー_pkg_のみをビルドすることを選択しました。これは、サードパーティの依存関係がないため、構成をすばやく簡単に確認できます。 すべてが正常に実行されると、次のような出力が表示されます。

Output[00:00:00] Creating the reference jail... done
[00:00:06] Mounting system devices for 112amd64-2019Q2
[00:00:06] Mounting ports/packages/distfiles
[00:00:06] Using packages from previously failed build
[00:00:06] Mounting ccache from: /var/cache/ccache
[00:00:06] Mounting packages from:
/etc/resolv.conf -> /pdr/data/.m/112amd64-2019Q2/ref/etc/resolv.conf
[00:00:06] Starting jail 112amd64-2019Q2
[00:00:07] Logs:
[00:00:07] Loading MOVED for /pdr/data/.m/112amd64-2019Q2/ref/usr/ports
[00:00:08] Ports supports: FLAVORS SELECTED_OPTIONS
[00:00:08] Gathering ports metadata
[00:00:08] Calculating ports order and dependencies
[00:00:08] pkg package missing, skipping sanity
[00:00:08] Skipping incremental rebuild and repository sanity checks
[00:00:08] Cleaning the build queue
[00:00:08] Sanity checking build queue
[00:00:08] Processing PRIORITY_BOOST
[00:00:08] Balancing pool
[00:00:08] Recording filesystem state for prepkg... done
[00:00:08] Building 1 packages using 1 builders
[00:00:08] Starting/Cloning builders
[00:00:14] Hit CTRL+t at any time to see build progress and stats
[00:00:14] [01] [00:00:00] Building ports-mgmt/pkg | pkg-1.10.5_5
[00:03:24] [01] [00:03:10] Finished ports-mgmt/pkg | pkg-1.10.5_5:
[00:03:25] Stopping 1 builders
[00:03:25] Creating pkg repository
Creating repository in /tmp/packages: 100%
Packing files for repository: 100%
[00:03:25] Committing packages to repository
[00:03:25] Removing old packages
[00:03:25] Built ports: ports-mgmt/pkg
[112amd64-2019Q2] [2019-04-20_19h35m00s] [committing:]   Tobuild: 0   Time: 00:03:18
[00:03:25] Logs: /pdr/data/logs/bulk/112amd64-2019Q2/2019-04-20_19h35m00s
[00:03:25] Cleaning up
[00:03:25] Unmounting file systems

この出力は、ビルド後にパッケージが移動する場所と、リビルドする必要がない場合に既存のパッケージを取得する場所を示しています(ここでは、「+ / pdr / data / packages / 112amd64-2019Q2 」)。 また、出力にはPoudriereの実行中に実行中のビルドの概要が表示されます(インタラクティブシェルで「 CTRL + T 」を押して進行状況を印刷できます)。 最終概要では、1つのパッケージが作成されたことがわかります。 ログディレクトリ( ` / pdr / data / logs / bulk / 112amd64-2019Q2 / * +`)で詳細なビルド出力を表示できます。

この出力は、ビルドが成功したことを確認します。 Poudriereが少なくとも1つのパッケージを正常にビルドした場合、パッケージリポジトリに自動的にコミットします。 これは、他のパッケージがビルドに失敗した場合でも、すべてのビルドが完了した後にのみパッケージが利用できることを意味します。 Buildbot worker刑務所内の `+ / pdr / data / packages / 112amd64-2019Q2 +`に作業パッケージリポジトリがあります。

作業中のPoudriereビルドを返すために必要なすべての構成が完了し、手動ビルドで正常に検証されました。 Buildbotで一括ビルドを自動化すると、この同じ出力がチュートリアルの後半で表示されます。 さらに、詳細なログを表示するリンクには、Webインターフェイスからアクセスできます。 これを実現し、パッケージリポジトリをクライアントに提供するには、次にWebサーバーをセットアップします。

手順6-Poudriere Webインターフェイスとパッケージリポジトリを提供するためのNginxの構成

Poudriereは、Webサーバーを使用してホストするいくつかの出力アーティファクトを提供します。

  • *パッケージリポジトリ*は、HTTPSまたはHTTPをトランスポートとして使用して、通常の `+ pkg update `および ` pkg install +`コマンドでクライアントにアクセスできるように、クライアントが利用できるようになります。

  • *詳細なビルドログ*は、開発者が問題のあるビルドをデバッグしたり、ビルド出力を調査したりするのに役立ちます。 それらはパッケージごと、およびビルドごとに最後のステップからのPoudriere出力に保存され、ログはビルドごとに1つのディレクトリに保存され、日付と時刻のラベルが付けられていることがわかりました。

  • * Poudriereの組み込みウェブインターフェース*は、WebSocketを使用してページに表示されるステータスを定期的に更新する、ビルドごとの小さな単一のHTMLページです。 これは、ビルドがどれだけ遠くにあるか、どの依存関係が他のパッケージビルドの失敗を引き起こしたか、最後にコマンドライン出力の代わりとして、より明確に概要を把握するのに役立ちます。現在のビルドの進行状況。

Nginxの構成の変更は短く、静的ファイルのみを提供する必要があります。 それらを外部の世界に提供するので、今度はサーバーの既存のNginxインスタンスをjailの外側に設定して、前述のファイルをワーカーjail内のパスから提供します。

サーバーで作業するため、jailシェルを終了してください。

exit

Nginx設定 `+ / usr / local / etc / nginx / nginx.conf +`でエディターを開きます:

sudo ee /usr/local/etc/nginx/nginx.conf

`+ server {+`ブロック内に次の場所を追加します。

/usr/local/etc/nginx/nginx.conf

. . .
http {
   . . .
   server {
       . . .
       location / {
           root /usr/local/www/nginx;
           index index.html index.htm;
       }




















       location /buildbot/ {
           proxy_pass http://10.0.0.2:8010/;
       }

       . . .
   }
}
. . .

Nginx構成ファイルを保存して閉じます。 次に、Nginxサービスをリロードします。

sudo service nginx reload

最初の手動ビルドで作成されたアーティファクトを確認しましょう。 リソースにアクセスするには、ローカルマシンで好みのWebブラウザを開きます。

*パッケージリポジトリ*は + http:/// packages / +(または + http:/// +)の下にあります。 ルートディレクトリにメタ情報があります。 + 112amd64-2019Q2 +、およびサブディレクトリ `+ All +`内のすべてのビルドパッケージ:

image:https://assets.digitalocean.com/articles/buildbot_poudriere/step6a.png [パッケージリポジトリリスト]

詳細なビルドログ*および Poudriereの組み込みWebインターフェース*は、 `+ http:/// logs / `の下にあります。 ディレクトリ階層をクリックして、以前の手動ビルドのデータにアクセスします。 この例では、 ` http:/// logs / 112amd64-2019Q2 / latest / build.html +`のようなURLになります。

image:https://assets.digitalocean.com/articles/buildbot_poudriere/step6b.png [Poudriere Webインターフェイス]

サーバーのドメイン名を設定しなかった場合、これらの例ではサーバーのパブリックIPアドレスを入力する必要があります。 + http:/// logs / +

これで、作業ビルドを取得し、出力(パッケージとログ)を可視化するためのすべての手動セットアップが終了します。 今後、ビルドを自動化してhttps://www.digitalocean.com/community/tutorials/an-introduction-to-continuous-integration-delivery-and-deployment[continuous integration]を実現します。

ステップ7-パッケージ用のBuildbot Builderのセットアップ

この手順の目標は、既存のBuildbotサンプル構成に手動で追加することで、既に手動でPoudriereを実行することにより、一括パッケージビルドを自動化することです。 このステップの終わりまでに、Buildbotは、portsツリーの選択されたブランチが変更されるたびにパッケージビルドをトリガーします。 このチュートリアルの例では、四半期分岐「+ 2019Q2 +」になります。

必要な変更はすべてBuildbotマスター構成で行われるため、マスターjailで* root *シェルを開いてください。

sudo jexec buildbot-master csh

最初に、ビルドを実行するために実行されるコマンドとアクションを記述する_builder_を定義する必要があります。 既存の設定 + / var / buildbot-master / master.cfg +`には、セクション `+ BUILDERS +-エディタが開き、次の見出しが始まるまでセクション全体が*置換*されます。 `+

Related