photoncloud-monorepo/docs/por/T014-plasmavmc-firecracker/config-schema.md
centra a7ec7e2158 Add T026 practical test + k8shost to flake + workspace files
- Created T026-practical-test task.yaml for MVP smoke testing
- Added k8shost-server to flake.nix (packages, apps, overlays)
- Staged all workspace directories for nix flake build
- Updated flake.nix shellHook to include k8shost

Resolves: T026.S1 blocker (R8 - nix submodule visibility)
2025-12-09 06:07:50 +09:00

3.6 KiB
Raw Blame History

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)

pub struct FireCrackerConfig {
    /// FireCrackerバイナリのパス
    pub firecracker_path: PathBuf,
    /// Jailerバイナリのパスオプション
    pub jailer_path: Option<PathBuf>,
    /// 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<PathBuf>,
    /// カーネルコマンドライン引数
    pub boot_args: String,
    /// Jailerを使用するかどうか
    pub use_jailer: bool,
}

impl FireCrackerConfig {
    /// 環境変数から設定を読み込む
    pub fn from_env() -> Result<Self, Error> {
        // 実装...
    }

    /// デフォルト設定を作成
    pub fn with_defaults() -> Result<Self, Error> {
        // 実装...
    }
}

Configuration Resolution Order

  1. 環境変数から読み込み
  2. デフォルト値で補完
  3. 必須項目kernel_path, rootfs_pathの検証
  4. バイナリパスの存在確認(オプション)

Example Usage

// 環境変数から設定を読み込む
let config = FireCrackerConfig::from_env()?;

// またはデフォルト値で作成(環境変数で上書き可能)
let config = FireCrackerConfig::with_defaults()?;

// FireCrackerBackendを作成
let backend = FireCrackerBackend::new(config);

Validation Rules

  1. kernel_pathrootfs_pathは必須
  2. firecracker_pathが存在することを確認(起動時に検証)
  3. jailer_pathが指定されている場合、存在することを確認(起動時に検証)
  4. runtime_dirは書き込み可能である必要がある
  5. socket_base_pathの親ディレクトリは存在する必要がある