03 イメージ構築
モード
mount (既定) |
image |
|
|---|---|---|
| Vivado の所在 | ホスト。read-only bind mount | イメージ内 |
| イメージサイズ | 約 1.5 GB | 30〜100 GB 超 |
| ビルド時間 | 2〜5 分 | 1〜3 時間 |
| インストーラ | 不要 | 必要 (AMD からログインして取得) |
| 適する用途 | 開発機、Vivado が導入済みの CI | 自己完結させたい配布・再現環境 |
3 つめのモード none は、このコンテナに Vivado が存在しないことを明示する。
mount と同じイメージを使用し、Vivado のマウントも存在確認も行わない。Vivado が
導入されていない CI ランナーでコンテナ自体を検証するためのモードである
(08 CI)。
バージョンの切り替えは、いずれのモードでも --vivado / VVD_VIVADO_VERSION で
行う。mount モードでは、指定したバージョンがホストに存在しない場合、コンテナの
起動前にエラーとなり、存在するバージョンの一覧が表示される。
mount モード
vvd build
docker/Dockerfile の base ステージのみを構築する。内容は次のとおり。
- ダイジェスト固定された
ubuntu:24.04 - Ubuntu アーカイブスナップショットから、
docker/packages.lockに列挙された 90 パッケージ (Qt/XCB、GL/EGL、NSS、fontconfig、libusb、tclsh ほか) libtinfo.so.5等への互換シンボリックリンク (Vivado の Tcl が要求するため)- 権限降格を行う entrypoint
- ロケール、
/work、/opt/Xilinxマウントポイント
実行時に $VVD_XILINX_ROOT が /opt/Xilinx に read-only で mount され、
entrypoint が settings64.sh を読み込む。
image モード
インストーラは AMD のサイトからログインして各自で取得する。本リポジトリは インストーラを一切ダウンロードしない。取得後、SHA256 を記録する。
sha256sum FPGAs_AdaptiveSoCs_Unified_SDI_2025.2_1030_1755.tar
config/vivado-versions.lock に 1 行追加する。
2025.2|FPGAs_AdaptiveSoCs_Unified_SDI_2025.2_1030_1755.tar|<sha256>
その上でビルドする。
vvd build --installer ~/Downloads/FPGAs_AdaptiveSoCs_Unified_SDI_2025.2_1030_1755.tar
vvd build はビルド開始前にホスト側で SHA256 を照合し、
docker/install-vivado.sh がイメージ内で再度照合する。記録が存在しない、または
一致しないインストーラではビルドが開始されない。
インストーラ本体は名前付きビルドコンテキスト (--build-context installer=...)
としてマウントされるため、数十 GB のファイルがビルドコンテキストとしてコピーされる
ことはない。BuildKit が必要である (docker 23 以降 / podman 4.4 以降)。
構築後は Vivado がイメージに含まれるため、次のように指定する。
VVD_VIVADO_MODE=image
インストールされる構成
xsetup -b ConfigGen で生成した設定を使用し、Documentation Navigator、
デスクトップ統合、ショートカットを無効化する。デバイスファミリを限定する場合は、
生成された install_config.txt の Modules= 行を編集する
(docker/install-vivado.sh 内)。
TLS 検査プロキシ配下でのビルド
snapshot.ubuntu.com は HTTPS 専用で、ubuntu:24.04 はルート証明書を持たない。
そのため Dockerfile には ca-bootstrap ステージがあり、最初の TLS 接続に使用する
証明書束のみをここで生成して /opt/vvd/pin/ca-bootstrap.crt に配置し、それを使用した
同一レイヤ内で削除する。標準の証明書ディレクトリには変更を加えず、最終イメージの
信頼ストアはピン留めされた ca-certificates パッケージのみが構成する。
パッケージの完全性がこの証明書に依存することはない。apt は署名済みの
InRelease → Packages → 各 .deb の SHA256 という連鎖を、バイト列の取得経路とは
無関係に検証する。
TLS を検査するプロキシの内側でビルドする場合は、その CA を指定する。
vvd build --ca-cert /etc/ssl/certs/corporate-proxy.crt
この証明書もビルド中のみ信頼され、イメージの実行時信頼ストアには含まれない。
vvd build のオプション
--installer TARBALL image モードでビルド (上記)
--ca-cert FILE ビルド中だけ信頼する追加 CA 証明書
--tag REF 出力イメージ参照
--no-cache レイヤキャッシュを無視
--progress MODE auto | plain | tty
事前ビルド済みイメージの取得
vvd pull # config/images.lock の prebuilt を取得
vvd pull registry.example.com/vvd@sha256:...
ダイジェストで固定されていない参照は拒否される。可変なタグを取得すると ロックファイルによる固定が無意味になるためである。
イメージに入らないもの
- ライセンスファイル。
.licを含むイメージはビルド時に失敗する (docker/Dockerfileの最終チェック)。CI でも改めて検査する - プロジェクトのソース。実行時に
/workへ mount される tcl/とcontainer/のスクリプト。実行時に read-only で mount されるため、 イメージを再構築せずに編集およびデバッグできる
再現性
同一の commit からビルドすれば、同一のベースイメージ、apt スナップショット、 パッケージバージョンが使用される。固定の対象と方法は 09 ピン留め に記載する。
scripts/verify-pinning.sh # すべて固定されているか検査
make lock-check # ロックファイルが最新か検査