Rebuilderd

提供: ArchWiki
2023年10月27日 (金) 01:16時点におけるKgx (トーク | 投稿記録)による版 (→‎パッケージ再構築者: 情報を更新)
ナビゲーションに移動 検索に移動

Rebuilderd は、バイナリパッケージの独立した検証システムです。同一の環境でビルド手順を繰り返すことにより、プリコンパイルされたパッケージを検証し、パッケージが同一であることを検証できます。現在、検証できるのは ArchLinux パッケージのみです。

ノート: rebuilderd はまだ実験的なものであり、多くのビルドがまだ再現できていません。リビルドに失敗しても、そのパッケージが悪意のある物とは限りません。

再構築機能を実行する場合、または再構築機能の実行を検討している場合は、[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
翻訳ステータス: このページは en:Rebuilderd の翻訳バージョンです。最後の翻訳日は 2022-10-27 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。