#firecracker #linux #ipc #unix #micro-vm #virtualization

firec

Rust API 用于与 Firecracker 交互

3 个不稳定版本

0.2.0 2022年7月18日
0.1.1 2022年5月26日
0.1.0 2022年5月26日

#801 in Unix API

自定义许可协议

52KB
1K SLoC

firec

firec (发音为 "fyrek") 是与 Firecracker 交互的 Rust 客户端库。它允许您创建、操作、查询和停止 VMM。

示例

use std::path::Path;
use firec::{
    Machine,
    config::{Config, Drive, Jailer, Machine as MachineCfg, network::Interface}};
use tokio::time::{sleep, Duration};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let kernel_args = "console=ttyS0 reboot=k panic=1 pci=off random.trust_cpu=on";

    let iface = Interface::new("eth0", "tap0");

    let config = Config::builder(None, Path::new("debian-vmlinux"))
        .jailer_cfg()
            .chroot_base_dir(Path::new("/srv"))
            .exec_file(Path::new("/usr/bin/firecracker"))
            .build()
        .kernel_args(kernel_args)
        .machine_cfg()
            .vcpu_count(2)
            .mem_size_mib(1024)
            .build()
        .add_drive("root", Path::new("debian.ext4"))
            .is_root_device(true)
            .build()
        .add_network_interface(iface)
        .socket_path(Path::new("/tmp/firecracker.socket"))
        .build();
    let mut machine = Machine::create(config).await?;

    machine.start().await?;

    // Let the machine run for a bit before we KILL IT :)
    sleep(Duration::from_secs(15)).await;

    machine.force_shutdown().await?;

    Ok(())
}

状态

当前正处于高度开发中,因此预计在一段时间内会有很多 API 破坏。

尽管如此,我们将遵循 Cargo 的 SemVer 规则,破坏性更改将以新的小版本发布。但是,我们只支持最新版本。

依赖项

~8–21MB
~247K SLoC