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