「Rebuilderd」の版間の差分
(→パッケージ再構築者: 情報を更新) |
|||
172行目: | 172行目: | ||
| [https://ssl.engineering.nyu.edu/ NYU Secure Systems Lab] |
| [https://ssl.engineering.nyu.edu/ NYU Secure Systems Lab] |
||
| |
| |
||
+ | |- |
||
+ | | https://rebuilder.pitastrudl.me/ |
||
+ | | pitastrudl |
||
+ | | IRC Libera または pitastrudl@chaos.social |
||
|- |
|- |
||
|} |
|} |
||
− | {{TranslationStatus|Rebuilderd|2022- |
+ | {{TranslationStatus|Rebuilderd|2022-10-27|733027}} |
2023年10月27日 (金) 01:16時点における版
Rebuilderd は、バイナリパッケージの独立した検証システムです。同一の環境でビルド手順を繰り返すことにより、プリコンパイルされたパッケージを検証し、パッケージが同一であることを検証できます。現在、検証できるのは ArchLinux パッケージのみです。
再構築機能を実行する場合、または再構築機能の実行を検討している場合は、[1] IRC チャネルに参加してください。
目次
インストール
rebuilderd パッケージをインストールして下さい。
セットアップ
単一のマシン
単一のマシンでは、ただ rebuilderd.service
とワーカーサービスを 有効化 するだけです。rebuilderd-worker@workername.service
を有効にします。
その後、rebuilderd が単一のワーカーで正しく動作していることを確認するには、次のように実行します。
# rebuildctl status
認証クッキーが見つからないというエラーが出た場合は、rebuilderd
ユーザグループ に自分自身を追加する必要があるかもしれません。
次のセクションに進んで、ワーカーがリビルドできるようにパッケージを同期してください。
マルチノード再構築機能のセットアップ
マルチノード再構築ネットワークを実行するには、少なくとも2台のサーバーが必要です:
- rebuilderd daemon - これは非常に少ないリソースしか必要とせず (CX11 インスタンスで十分です)、すべてのパッケージの追跡、ワーカーの調整、クライアントへの結果配信を行います。このデーモンは https でセットアップする必要があります。
- rebuilderd worker - このサーバーは実際のビルドを実行します。このサーバには少なくとも 16GB の RAM が必要です。すべてのパッケージをビルドするのであれば、32GB 近くが必要です。
ワーカーは、シークレットサインアップキー(worker.signup_secret
)を使用してデーモンに対して自身を認証する必要があります。このキーは、pwgen-1s32
で生成できます。
また、rebuildctl をリモートで使用するための2番目のシークレットを生成することもできます(auth.cookie
)これはオプションです。rebuilderd
グループに自分を追加した後にサーバーで rebuildctl を実行することもできます。
/etc/rebuilderd.conf
## Configuration for http daemon [http] ## The address to bind to. This is 127.0.0.1:8484 by default. bind_addr = "0.0.0.0:8484" ## If you use a reverse proxy, use this header instead of the actual connecting ip. ## Make sure the reverse proxy has filters in place to prevent spoofing issues. #real_ip_header = "X-Real-IP" ## Set a default endpoint for rebuildctl. This is especially useful for the sync timer. #endpoint = "http://127.0.0.1:8484" ## A random cookie for administration is generated at startup and written to /var/lib/rebuilderd/auth-cookie ## You can set this to a fixed value here. Use `pwgen -1s 32` to generate one. ## rebuildctl is searching for this cookie in ~/.config/rebuilderd.conf, /etc/rebuilderd.conf and ## /var/lib/rebuilderd/auth-cookie in that order. #[auth] #cookie = "INSECURE" ## The auth cookie above is only used for the default endpoint. ## You can use different endpoints with `rebuildctl -H https://rebuilder.example.com status`, ## In that case you need to configure a section below if you want to attach a cookie. #[endpoints."https://rebuilder.example.com"] #cookie = "INSECURE" ## IMPORTANT: in production, make sure either `authorized_workers` or `signup_secret` is configured. [worker] ## If we have a fixed set of workers we can allow-list the keys here. #authorized_workers = ["key1", "key2"] ## If we want to spawn new workers dynamically we can configure a sign up secret below. ## Use `pwgen -1s 32` to generate one. signup_secret = "INSECURE" #[schedule] ## Configure the delay to automatically retry failed rebuilds in hours. The ## default is 24h, this base is multiplied with the number of rebuilds, so the ## first retry would happen after 24h, the second retry would happen 48h after the ## first retry and the third retry would happen 72h after the second retry. There ## is no upper limit of retries, if you can't afford frequent retries it's ## recommended to set this to a high value like 168 (1 week) or higher. ## Successful rebuilds are not retried. #retry_delay_base = 24
rebuilderd.service
を 起動 して 有効化 します。
次に、ワーカーマシンに移動してセットアップします。 rebuilderd をインストールし、/etc/rebuilderd-worker.conf
を編集します。
/etc/rebuilderd-worker.conf
## The rebuilderd to connect to endpoint = "https://rebuilder.example.com" # or http://rebuilder.example.com:8484 ## The server would either allowlist our key or require a signup secret signup_secret = "INSECURE-CHANGE-ME" [build] #timeout = 86400 # 24 hours ## Set a maximum build log limit in bytes (default: none). ## When reaching this limit the log is truncated but the rebuilder backend is *not* terminated. max_bytes = 10485760 # 10 MiB ## By default build output is forwarded to stdout/stderr. ## This can be disabled by settings this to true. #silent = true [diffoscope] ## Generate and attach diffs with diffoscope when rebuilding enabled = true ## Pass additional arguments to diffoscope. Use wisely, some options might not work well. #args = ["--max-container-depth", "2", "--fuzzy-threshold", "0"] ## Set a timeout in seconds after which diffoscope is terminated (default: 3600) #timeout = 600 # 10 minutes ## Set a maximum diffoscope output limit in bytes (default: none). ## When reaching this limit, diffoscope is terminated and the output is truncated. max_bytes = 41943040 # 40 MiB
同時再構築のためにワーカーユニットを複数回起動できます (マシンに十分なリソースがある場合)、rebuilderd-worker@0.service
を 起動/有効化 して1人のワーカーから開始します(0
と呼びます。)
再構築するためのパッケージの同期
パッケージの同期元を明示的に構成するまで、再構築セットアップはデフォルトでは何も実行しません。同期プロファイルは /etc/rebuilderd-sync.conf
で構成されます。プロファイル名は一意である必要があります。 maintainer
オプションを使用して特定のメンテナのパッケージのみをビルドするように構成します。デフォルトでは、すべてのメンテナのパッケージをインポートしています。
## rebuild all of core [profile."archlinux-core"] distro = "archlinux" suite = "core" architecture = "x86_64" source = "https://ftp.halifax.rwth-aachen.de/archlinux/$repo/os/$arch" ## rebuild community packages of specific maintainers, or whitelist packages by name. ## If no filter is set, all packages are imported, if both filters are set the package only ## has to match one of them to be included. #[profile."archlinux-community"] #distro = "archlinux" #suite = "community" #architecture = "x86_64" #source = "https://ftp.halifax.rwth-aachen.de/archlinux/$repo/os/$arch" #maintainers = ["somebody"] #pkgs = ["some-pkg", "python-*"] #excludes = ["tensorflow*"]
その後、rebuilderd-sync@archlinux-core.timer
を 有効化 して、プロファイルを自動的に同期できます。
Ansible プレイブック
再構築された役割を持つ Ansible プレイブックは、ArchLinux の infastructure リポジトリ にあります。Ansible リポジトリは ArchLinux インフラストラクチャの設定方法に大きく依存しているため、これをインスピレーションとして使用してください。
ヒントとテクニック
失敗したビルドの再キューイング
再構築された 0.5.0 以降、失敗したビルドは遅延の増加とともに自動的に再試行されます。次の方法でパッケージをすぐに再試行できます。
# rebuildctl pkgs requeue --suite core --status BAD
古いバージョンでは、このコマンドを使用して、失敗したすべてのビルドをキューに再度追加する必要がありました。
# rebuildctl pkgs ls --distro archlinux --suite core --status BAD --json | jq -r '.[].name' | xargs -L1 rebuildctl queue push archlinux core
パッケージ再構築者
Rebuilderd を使用するリビルダー
URL | コンタクト | コメント |
---|---|---|
https://reproducible.archlinux.org/ | jelle | |
https://wolfpit.net/rebuild/ | wahrwolf | |
https://r-b.engineering.nyu.edu/ | NYU Secure Systems Lab | |
https://rebuilder.pitastrudl.me/ | pitastrudl | IRC Libera または pitastrudl@chaos.social |