FreeBSDポートテスト用のTinderboxのクイックセットアップ

提案されたテキストは、主にFreeBSDのポートメンテナーとコミッター自身に向けられていますが、まだポートPRを送信していない場合でも、それをやろうとしている場合、またはポートコレクションに関連するQAメソッドについて学ぶことを気にしない場合でも、あなたも思う面白いでしょう。



実際、私たちはMarcusCom Tinderboxについて話している-Marcus Clarkeと彼の仲間によって書かれたスクリプトのセットで、公式のFreeBSDパッケージのビルドに使用されたものに基づいています。



要するに、それは次のように動作します:ベースシステムのセット(FreeBSDの用語ではベースシステム。必ずしもリリースではなく、安定したブランチや-CURRENT、あるいはあなた自身のビルドでもかまいません)、ポートツリー、ビルド(最初の2つの組み合わせ)を定義します。 次に、純粋なchroot環境では、任意のポートをパッケージとして収集し、見逃さないようにすることができます。すべての依存関係が考慮され、すべてが正しくアセンブル、インストール、削除され、システムに余分なものは残りません。 すべてのメタ情報はデータベースに保存され(MySQLとPostgreSQLがサポートされます)、ターゲットシステムのポートと「サブストレート」を更新するための開発ツール、収集されたパッケージとdistfileのキャッシュ、ccacheのサポート、さらにはPHP Webフロントエンドまであります。



実際には、インストール、構成、および使用例はドキュメントにある程度詳しく説明されていますが 、定期的にtinderboxを使用するのはごくわずかです。



なんで?



ここでのポイントは、筆者はそもそも、FreeBSDの1つまたは別のバージョンでポートをチェックすることほど複雑なものを必要としない単純な開発者について考えていなかったことです。 各ポートの統計(ビルドログ、エラーの種類、最後に「すべてが機能した」など)を収集して保存する必要はありません。 WebアクセスとTinderdサービスが本当に必要な人はほとんどいません。



この意味で、初期要件は不当に高いです。 まず第一に、PRをコミットまたは送信する前に(統計の完全なコレクションを使用してビルドファームを展開し、それを「Webに直接」配布するのではなく)変更をすばやくテストしたい人は、なぜデータベースが必要なのですか?



典型的なFreeBSDデスクトップユーザーは、SQLite以外のSQLをほとんど持っていないでしょう。 tinderboxのためだけにMySQLまたはPostgreSQLをインストールするのは、一般的な理由で単に愚かです。 幸いなことに、最近では、プロジェクトは改善の目的で分岐し(公式リポジトリは長い間更新されていません)、最初のものはSQLiteのサポートが追加されました。 私が知らない理由で、作者はgithub上のすべてのリポジトリを削除しました。 .git



ディレクトリをダウンロードして解凍し、 git reset --hard



を実行できます 。 5〜10分でtinderboxを展開できるようになりました。



更新: SQLiteサポートが最近、 公式リポジトリに登場しました。



原因に!



リポジトリを便利な短い名前tb



ディレクトリに複製し、 sqlite_support



ブランチに切り替えます(さらに、現在のディレクトリに直接リンクするため、 scripts



リンクを作成します)。



 git clone https://github.com/markjdb/tinderbox-WORK.git tb cd tb git checkout sqlite_support ln -s . scripts
      
      





潜在的な問題を回避するために、ルート内から次のコマンドを実行するようにすぐに予約してください(これは必ずしも必要ではありません)。



次に、いくつかの簡単な質問に答えてtinderbox設定を初期化する必要があります(ベースとしてsqliteを選択し、ファイル名を設定します)。



 ./tc Setup
      
      





スクリプトは、いくつかの依存関係がインストールされていないことを警告しますが、それらのほとんどはWebフロントエンドに必要です。 p5-DBD-SQLite



lftp



のみが必要lftp



。 たとえば、-STABLEブランチをサポートし、 csup(1)



を使用してそれらを更新し、 make world



でビルドする場合、。 tb/scripts/etc/env/GLOBAL



./tc init



実行してtb/scripts/etc/env/GLOBAL



./tc init



を作成する必要がありますが、十分なリリースが必要ですFTPで取得するため、この手順は省略できます。



次に、パッケージを構築するFreeBSDのすべてのバージョンの(元の刑務所で)基板と呼ばれるものを作成する必要があります。 彼らはjail(8)



とは何の関係もありません。この場合、それは単に一致する名前なので、逐語的に翻訳しませんでした。 tinderboxの中心にあるのは、 chroot(8)



とNFSまたはnullfsマウントのみです(何も設定する必要がないため好ましい)。 まず最初に、2つの安定したブランチからの最新リリースに限定するつもりです。



 ./tc createJail -j 7.4 -t 7.4-RELEASE -u LFTP -H ftp.freebsd.org ./tc createJail -j 8.2 -t 8.2-RELEASE -u LFTP -H ftp.freebsd.org
      
      





名前はFreeBSDのメインバージョン番号で始まる必要があります(ビルド名にも同じことが当てはまります。以下を参照)。 ホスト( -H



パラメーター)として、最も近いミラーのアドレスを置き換えることは理にかなっています( base



dict



proflibs



およびsrc



proflibs



のみが必要proflibs



)。



ここで、作業ポートツリーを追加する必要があります- /usr/ports



ではなく、Subversion(または通常どおり、CVS)からチェックアウトされ、 send-pr(1)



またはcommitの差分を作成する場所からです。 ディレクトリ/home/alice/fbsd/ports



wip



(work in progress)と呼ばれる/home/alice/fbsd/ports



とする:



 ./tc createPortsTree -p wip -u NONE -m /home/alice/fbsd/ports
      
      





-u NONE



オプションはランダムではありません。ポートツリーを更新する必要がないことを明示的に示しています。 通常は、 cvs^Wsvn up



を使用して自分で更新cvs^Wsvn up



(結局、これは作業ツリーです)。 基板だけでなく複数のツリーが存在する場合がありますが、ほとんどの場合、通常のポートハッカーのマシン上にあります。



しかし、私たちはほとんどそこにいます。 ビルドを作成することは残ります。サブストレートとポートツリーの組み合わせです。 なぜなら 2つのリリース(7.4および8.2)と1つのツリー(wip)があるため、2つのビルドもあります。



 ./tc createBuild -b 7.4-wip -j 7.4 -p wip ./tc createBuild -b 8.2-wip -j 8.2 -p wip
      
      





何か間違ったこと(たとえば、コマンドの1つで誤ったパラメーターを指定した)があり、レコードが既にデータベースに入力されている場合、対応するレコードを手動で( sqlite3 tinderbox.db



を使用して)削除する必要があります(通常jails



ports_trees



またはbuilds



)。



既存のものをローカルdistfileキャッシュとして使用することは論理的です:



 ./tc configDistfile -c /usr/ports/distfiles
      
      





実際、それだけです! tinderboxで最初のパッケージを組み立てる準備ができました。 たとえば、FreeBSD-7.4のnmap



をコンパイルしましょう(nullfsを使用してディレクトリをマウントし、 pkg-plist



問題を致命的なエラーと見なすことpkg-plist



)。



 ./tc tinderbuild -nullfs -plistcheck -b 7.4-wip security/nmap
      
      





すべてが正しく行われた場合、しばらくするとpackages/7.4-wip



ディレクトリに新しいパッケージが作成され、 logs/7.4-wip



作成されます(ポートまたはその依存関係をビルドしなかった場合、パッケージは表示されませんが、 errors/7.4-wip



ディレクトリでエラーログを探して、注意深く調べてください):



 $ find logs packages -type f -name nmap\* logs/7.4-wip/nmap-5.51_2.log packages/7.4-wip/All/nmap-5.51_2.tbz
      
      





ファイルに加えて、ポートカテゴリなどのシンボリックリンクも作成されます。 pkg_add -r



を介してパッケージをインストールするための最新のリンク:



 $ find packages -type l -name nmap\* packages/7.4-wip/Latest/nmap.tbz packages/7.4-wip/ipv6/nmap-5.51_2.tbz packages/7.4-wip/security/nmap-5.51_2.tbz
      
      





次は?



原則として、通常、これ以上は必要ありません。 私たちの目標は、FreeBSDのさまざまなバージョンのクリーンな環境でポートを収集し、余分なものでシステムを詰まらせないことです。 もちろん、tinderboxの可能性ははるかに広いですが、その説明はトピックの範囲を超えており、「5分でtinderboxを構成する」ことはもうありません。 さらに、ドキュメントの改定は適切ではありません。 :-)



結論として、クリーンビルドの重要性を早期に繰り返します。 注意:システム上にポートが構築されている場合、これは他の全員からポートが収集されるという意味ではありません。 彼らが言うように、原始的な環境でアセンブリを提供するのはtinderboxだけです。 もちろん、FreeBSD build-cluster(pointyhat)はほぼ同じことを行います。パッケージがビルドされていない場合は検出され、メンテナーは応答する必要がある通知を受け取ります。そうでない場合、ポートはBROKENとマークされます。 しかし、それはすべて時間がかかります、なぜなら portmgr @はより問題のあるログを収集する必要があり、ユーザーは生の製品に満足する必要があります。 Tinderboxは、身体の動きがほとんどまたはまったくない場合、適切に使用すれば、多くの人々の作業を大幅に簡素化し、FreeBSDポートの全体的な品質を向上させることができます。



All Articles