#config-parser #systemd-boot #entry #fields #default #loader #menu

libsdbootconf

systemd-boot 配置和引导条目配置解析库

23 个版本

0.11.2 2023 年 5 月 9 日
0.11.1 2022 年 9 月 22 日
0.11.0 2022 年 8 月 27 日
0.10.2 2022 年 6 月 6 日

#418配置


systemd-boot-friend-rs 使用

MIT 许可证

26KB
411

libsdbootconf

crates.io docs.rs MIT licensed

systemd-boot 配置和引导条目配置解析库。

用法

use libsdbootconf::{config::ConfigBuilder, entry::EntryBuilder, SystemdBootConfBuilder};

let systemd_boot_conf = SystemdBootConfBuilder::new("/efi/loader")
    .config(ConfigBuilder::new()
        .default("5.12.0-aosc-main")
        .timeout(5u32)
        .build())
    .entry(EntryBuilder::new("5.12.0-aosc-main")
        .title("AOSC OS x86_64 (5.12.0-aosc-main)")
        .version("5.12.0-aosc-main")
        .build())
    .build();

systemd_boot_conf.write_all().unwrap();

lib.rs:

该库为 systemd-boot 提供一个配置接口。它解析 systemd-boot 加载器配置和 systemd-boot 引导条目配置。

注意:并非所有在 https://www.freedesktop.org/software/systemd/man/systemd-boot.html 中的字段都已实现,该库目前仅提供在 https://www.freedesktop.org/wiki/Software/systemd/systemd-boot/ 上列出的字段的接口。

创建并写入新的 systemd-boot 配置

您可以使用 SystemdBootConfig 结构体来创建新的 systemd-boot 配置,或者使用 SystemdBootConfigBuilder 从头开始构建 SystemdBootConfig

use libsdbootconf::{ConfigBuilder, EntryBuilder, SystemdBootConfBuilder};

let systemd_boot_conf = SystemdBootConfBuilder::new("/efi/loader")
    .config(ConfigBuilder::new()
        .default("5.12.0-aosc-main")
        .timeout(5u32)
        .build())
    .entry(EntryBuilder::new("5.12.0-aosc-main")
        .title("AOSC OS x86_64 (5.12.0-aosc-main)")
        .version("5.12.0-aosc-main")
        .build())
    .build();

// Or
use libsdbootconf::{Config, Entry, SystemdBootConf, Token};

let systemd_boot_conf = SystemdBootConf::new(
    "/efi/loader",
    Config::new(Some("5.12.0-aosc-main"), Some(5u32)),
    vec![Entry::new(
        "5.12.0-aosc-main",
        vec![
            Token::Title("AOSC OS x86_64 (5.12.0-aosc-main)".to_owned()),
            Token::Version("5.12.0-aosc-main".to_owned()),
        ],
    )]
);

systemd_boot_conf.write_all().unwrap();

创建新的 systemd-boot 菜单条目

use libsdbootconf::entry::{Entry, EntryBuilder, Token};
use std::path::PathBuf;

let entry = EntryBuilder::new("5.12.0-aosc-main")
    .title("AOSC OS x86_64 (5.12.0-aosc-main)")
    .linux("/EFI/linux/vmlinux-5.12.0-aosc-main")
    .initrd("/EFI/linux/initramfs-5.12.0-aosc-main.img")
    .options("root=/dev/sda1 rw")
    .build();

// Or
let entry = Entry::new(
    "5.12.0-aosc-main",
    vec![
        Token::Title("AOSC OS x86_64 (5.12.0-aosc-main)".to_owned()),
        Token::Linux(PathBuf::from("/EFI/linux/vmlinux-5.12.0-aosc-main")),
        Token::Initrd(PathBuf::from("/EFI/linux/initramfs-5.12.0-aosc-main.img")),
        Token::Options("root=/dev/sda1 rw".to_owned()),
    ],
);

entry.write("/efi/loader/entries/5.12.0-aosc-main.conf").unwrap();

依赖项

~0.3–0.8MB
~19K SLoC