bootstrap:

This commit is contained in:
Mikaël Cluseau
2025-07-09 05:45:35 +02:00
parent f45fbe116e
commit e30a46d62b
5 changed files with 42 additions and 19 deletions

View File

@ -1,5 +1,5 @@
use eyre::{format_err, Result};
use log::info;
use log::{info, warn};
use std::path::Path;
use tokio::{
fs,
@ -20,7 +20,7 @@ pub async fn bootstrap(cfg: Config) {
})
.await;
let boot_version = utils::param("version", "current");
let boot_version = utils::param("version").unwrap_or("current");
let base_dir = &format!("/bootstrap/{boot_version}");
retry_or_ignore(async || {
@ -169,9 +169,25 @@ async fn fetch_bootstrap(seed_url: &str, output_file: &str) -> Result<()> {
Ok(())
}
fn default_root_tmpfs_opts() -> Option<String> {
let mem = sys_info::mem_info()
.inspect_err(|e| warn!("failed to get system memory info, using default tmpfs size: {e}"))
.ok()?;
let mem_size = mem.total /* kiB */ / 1024;
let fs_size = 1024.min(mem_size / 2);
info!("system has {mem_size} MiB of memory, allowing {fs_size} MiB for root tmpfs");
Some(format!("size={fs_size}m"))
}
async fn mount_system(cfg: &dkl::Config, bs_dir: &str, verifier: &Verifier) {
let opts = match utils::param("root-opts") {
Some(s) => Some(s.to_string()),
None => default_root_tmpfs_opts(),
};
let mem_dir = "/mem";
mount(None, mem_dir, "tmpfs", Some("size=512m")).await;
mount(None, mem_dir, "tmpfs", opts.as_deref()).await;
let layers_dir = &format!("{mem_dir}/layers");
let mut lower_dir = String::new();
@ -316,14 +332,10 @@ async fn mount_filesystems(mounts: &[dkl::Mount], root: &str) {
mount(
Some(&m.dev),
&path,
m.r#type
.as_ref()
(m.r#type.as_deref())
.filter(|s| !s.is_empty())
.map_or("ext4", |s| s.as_str()),
m.options
.as_ref()
.filter(|v| !v.is_empty())
.map(|s| s.as_str()),
.unwrap_or("ext4"),
m.options.as_deref().filter(|v| !v.is_empty()),
)
.await;
}