# FireCracker Backend Configuration Schema **Date:** 2025-12-08 **Task:** T014 S1 **Status:** Design Complete ## Environment Variables ### Required - `PLASMAVMC_FIRECRACKER_KERNEL_PATH`: カーネルイメージのパス(vmlinux形式、x86_64) - 例: `/opt/firecracker/vmlinux.bin` - デフォルト: なし(必須) - `PLASMAVMC_FIRECRACKER_ROOTFS_PATH`: Rootfsイメージのパス(ext4形式) - 例: `/opt/firecracker/rootfs.ext4` - デフォルト: なし(必須) ### Optional - `PLASMAVMC_FIRECRACKER_PATH`: FireCrackerバイナリのパス - 例: `/usr/bin/firecracker` - デフォルト: `/usr/bin/firecracker` - `PLASMAVMC_FIRECRACKER_JAILER_PATH`: Jailerバイナリのパス(セキュリティ強化のため推奨) - 例: `/usr/bin/jailer` - デフォルト: `/usr/bin/jailer`(存在する場合) - `PLASMAVMC_FIRECRACKER_RUNTIME_DIR`: VMのランタイムディレクトリ - 例: `/var/run/plasmavmc/firecracker` - デフォルト: `/var/run/plasmavmc/firecracker` - `PLASMAVMC_FIRECRACKER_SOCKET_BASE_PATH`: FireCracker API socketのベースパス - 例: `/tmp/firecracker` - デフォルト: `/tmp/firecracker` - `PLASMAVMC_FIRECRACKER_INITRD_PATH`: Initrdイメージのパス(オプション) - 例: `/opt/firecracker/initrd.img` - デフォルト: なし - `PLASMAVMC_FIRECRACKER_BOOT_ARGS`: カーネルコマンドライン引数 - 例: `"console=ttyS0 reboot=k panic=1 pci=off"` - デフォルト: `"console=ttyS0"` - `PLASMAVMC_FIRECRACKER_USE_JAILER`: Jailerを使用するかどうか - 値: `"1"` または `"true"` で有効化 - デフォルト: `"true"`(jailerバイナリが存在する場合) ## Configuration Structure (Rust) ```rust pub struct FireCrackerConfig { /// FireCrackerバイナリのパス pub firecracker_path: PathBuf, /// Jailerバイナリのパス(オプション) pub jailer_path: Option, /// VMのランタイムディレクトリ pub runtime_dir: PathBuf, /// FireCracker API socketのベースパス pub socket_base_path: PathBuf, /// カーネルイメージのパス(必須) pub kernel_path: PathBuf, /// Rootfsイメージのパス(必須) pub rootfs_path: PathBuf, /// Initrdイメージのパス(オプション) pub initrd_path: Option, /// カーネルコマンドライン引数 pub boot_args: String, /// Jailerを使用するかどうか pub use_jailer: bool, } impl FireCrackerConfig { /// 環境変数から設定を読み込む pub fn from_env() -> Result { // 実装... } /// デフォルト設定を作成 pub fn with_defaults() -> Result { // 実装... } } ``` ## Configuration Resolution Order 1. 環境変数から読み込み 2. デフォルト値で補完 3. 必須項目(kernel_path, rootfs_path)の検証 4. バイナリパスの存在確認(オプション) ## Example Usage ```rust // 環境変数から設定を読み込む let config = FireCrackerConfig::from_env()?; // またはデフォルト値で作成(環境変数で上書き可能) let config = FireCrackerConfig::with_defaults()?; // FireCrackerBackendを作成 let backend = FireCrackerBackend::new(config); ``` ## Validation Rules 1. `kernel_path`と`rootfs_path`は必須 2. `firecracker_path`が存在することを確認(起動時に検証) 3. `jailer_path`が指定されている場合、存在することを確認(起動時に検証) 4. `runtime_dir`は書き込み可能である必要がある 5. `socket_base_path`の親ディレクトリは存在する必要がある