diff --git a/src/args.rs b/src/args.rs index 2ce5faa..7711c77 100644 --- a/src/args.rs +++ b/src/args.rs @@ -33,6 +33,7 @@ pub fn get_args() -> clap::ArgMatches { command!() .name("create-img") .about("Create an install on a disk image for VMs or embedded devices") + .arg(arg!(--gpt "Use modern disk format")) .arg(arg!([config] "Config file").required(true)) .arg(arg!([image] "Image file").required(true)) ) diff --git a/src/install/drives.rs b/src/install/drives.rs index 5e048c2..aceec80 100644 --- a/src/install/drives.rs +++ b/src/install/drives.rs @@ -151,19 +151,28 @@ pub fn setup_fstrim() { systemd_service_enable("fstrim.service"); } -pub fn setup_disk_image(img_file: &str) { +pub fn setup_disk_image(img_file: &str, modern: bool) { print_status(&format!("Allocating disk image")); run_command(&["fallocate", "-l", "8G", img_file], None, false); print_status(&format!("Partitioning disk image")); - run_command( - &[ - "parted", img_file, "--script", "--", "mklabel", "gpt", "mkpart", "ESP", "fat32", - "1MiB", "1GiB", "set", "1", "esp", "on", "mkpart", "primary", "ext4", "1GiB", "100%", - ], - None, - true, - ); + if modern { + run_command( + &[ + "parted", img_file, "--script", "--", "mklabel", "gpt", "mkpart", "ESP", "fat32", + "1MiB", "1GiB", "set", "1", "esp", "on", "mkpart", "primary", "ext4", "1GiB", + "100%", + ], + None, + true, + ); + } else { + run_command( + &["fdisk", img_file], + Some("o\nn\np\n1\n\n+1G\nt\nc\nn\np\n2\n\n\nw\n"), + false, + ); + } print_status(&format!("Setting up disk image")); let (stdout, _) = run_command( diff --git a/src/main.rs b/src/main.rs index 57f03c4..d866c2e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -74,8 +74,9 @@ fn main() { let config_file: &String = install_args.get_one("config").unwrap(); let conf = read_conf(config_file); let img_file: &String = install_args.get_one("image").unwrap(); + let gpt = install_args.get_flag("gpt"); - setup_disk_image(img_file.as_str()); + setup_disk_image(img_file.as_str(), gpt); install_mnt(conf, false); } Some(("install", install_args)) => {