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

112 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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<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
```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`の親ディレクトリは存在する必要がある