最終更新:
GitHub: genpack-artifacts/stub
stub は genpack ツールチェーンで構築されるアーティファクトの一つで、他の Linux ディストリビューションを QEMU/KVM 仮想マシン上にインストールするための使い捨てブート環境です。
genpack イメージとして動作しつつも、最終的な目的は genpack 以外の OS を立ち上げることにあります。初回起動時はインストーラとして、2 回目以降は kexec を使ったブートローダーとして振る舞う、二段階構成のプロビジョニングツールです。
vm コマンドと組み合わせて使用します。
# 1. データ用仮想ディスクを作成 (8GiB)
vm allocate debian12.img 8
# 2. stub をシステムイメージ、debian12.img をデータディスクとして VM 起動
vm run -d debian12.img stub-$(uname -m).squashfs
# 3. VM 内で自動ログイン後、目的のディストリビューションのスクリプトを実行
./debian12.sh
# 4. インストール完了後に reboot → 以降は Debian 12 が直接起動する
| スクリプト | ディストリビューション |
|---|---|
debian12.sh | Debian 12 (Bookworm) |
debian13.sh | Debian 13 (Trixie) |
ubuntu2004.sh | Ubuntu 20.04 (Focal) |
ubuntu2204.sh | Ubuntu 22.04 (Jammy) |
ubuntu2404.sh | Ubuntu 24.04 (Noble) |
ubuntu2604.sh | Ubuntu 26.04 (Resolute) |
| スクリプト | ディストリビューション |
|---|---|
centos6.sh | CentOS 6 |
centos7.sh | CentOS 7 |
centos8stream.sh | CentOS Stream 8 |
centos9stream.sh | CentOS Stream 9 |
centos10stream.sh | CentOS Stream 10 |
almalinux9.sh | AlmaLinux 9 |
rocky8.sh | Rocky Linux 8 |
miraclelinux8.sh | MIRACLE LINUX 8 |
fedora42.sh | Fedora 42 |
| スクリプト | ディストリビューション |
|---|---|
gentoo.sh | Gentoo Linux (stage3 tarball から構築) |
files/usr/lib/genpack-init/00kexec.py)genpack-init のプラグインとして毎回起動時に実行される Python スクリプトです。データディスク (/dev/vdb) または virtiofs 上にインストール済み OS のカーネルと initramfs が存在するかを検出し、見つかった場合は kexec でそのカーネルをロードして遷移します。
これにより、stub は初回のインストール作業後は透過的なブートローダーとして機能し、VM の起動フローは以下のようになります:
files/root/*.sh)各スクリプトは以下の共通パターンに従います:
systemd-networkd-wait-online でネットワーク接続を待機debootstrap または rpmbootstrap でベースシステムをブートストラップインストール直後から SSH によるリモート管理が可能な状態になります。
files/build.d/autologin.sh)hvc0 (virtio コンソール) と ttyS0 (シリアルコンソール) の両方で root の自動ログインを設定します。vm console でコンソール接続すると、ログインプロンプトなしで即座にシェルが使えます。
files/build.d/build-llmnrd.sh)Link-Local Multicast Name Resolution Daemon をソースからスタティックビルドします。インストール先の OS に配置され、DNS サーバーなしでのホスト名解決を可能にします。
| パッケージ | 用途 |
|---|---|
genpack/paravirt | 準仮想化カーネルとベースシステム |
sys-kernel/gentoo-kernel | ソースからビルドされた最小カーネル |
sys-apps/kexec-tools | OS カーネルへの遷移に使用 |
dev-util/debootstrap | Debian / Ubuntu 系のブートストラップ |
dev-util/rpmbootstrap | RPM 系のブートストラップ |
sys-fs/cryptsetup | ディスク暗号化サポート |
sys-devel/binutils | バイナリユーティリティ |
stub は使い捨てのブート環境であり広範なハードウェアサポートが不要なため、kernel/config.d/unset.config で 1,757 のカーネルオプションを無効化しています。
無効化される主な機能:
KEXEC_SIG — kexec の柔軟性のために無効化)| アーキテクチャ | カーネル設定 | 出力ファイル |
|---|---|---|
| x86_64 | unset.config のみ | stub-x86_64.squashfs |
| aarch64 | savedconfig + unset.config | stub-aarch64.squashfs |
| riscv64 | savedconfig + unset.config | stub-riscv64.squashfs |
stub は genpack エコシステムの中では異色の存在です。genpack イメージとして構築・起動されますが、目的は genpack 以外の OS を立ち上げることにあります。genpack-init のプラグイン機構 (pybind11 + Python) と vm コマンドの仮想ディスク管理を活用し、QEMU/KVM 環境で多数の異なるディストリビューションの VM を共通の手順でプロビジョニングする統一的な環境を提供しています。
このドキュメントは以下のリポジトリのスナップショットに基づいて作成されました: