This commit is contained in:
parent
8d046e5852
commit
0ac815f9f4
4 changed files with 47 additions and 7 deletions
|
@ -28,7 +28,8 @@ pub fn get_args() -> clap::ArgMatches {
|
||||||
command!()
|
command!()
|
||||||
.name("create-img")
|
.name("create-img")
|
||||||
.about("Create an install on a disk image for VMs or embedded devices")
|
.about("Create an install on a disk image for VMs or embedded devices")
|
||||||
.arg(arg!([config] "Config file").required(true)),
|
.arg(arg!([config] "Config file").required(true))
|
||||||
|
.arg(arg!([image] "Image file").required(true))
|
||||||
)
|
)
|
||||||
.get_matches()
|
.get_matches()
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,3 +120,36 @@ pub fn setup_fstrim() {
|
||||||
print_status("Setting up FsTrim");
|
print_status("Setting up FsTrim");
|
||||||
systemd_service_enable("fstrim.service");
|
systemd_service_enable("fstrim.service");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn setup_disk_image(img_file: &str) {
|
||||||
|
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,
|
||||||
|
);
|
||||||
|
|
||||||
|
print_status(&format!("Setting up disk image"));
|
||||||
|
let (stdout, _) = run_command(
|
||||||
|
&["losetup", "--show", "--find", "--partscan", img_file],
|
||||||
|
None,
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
|
||||||
|
let loop_dev = stdout.trim();
|
||||||
|
|
||||||
|
let drive = DriveConfig {
|
||||||
|
boot: format!("{loop_dev}p1"),
|
||||||
|
root: format!("{loop_dev}p2"),
|
||||||
|
encryption: None,
|
||||||
|
};
|
||||||
|
|
||||||
|
format_drives(&drive);
|
||||||
|
mount_drives(&drive);
|
||||||
|
}
|
||||||
|
|
|
@ -113,11 +113,14 @@ pub fn uncomment_tag(tag: &str, file: &str) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Install a config on a new system
|
/// Install a config on a new system
|
||||||
pub fn install(conf: InstallConfig) {
|
pub fn install(conf: InstallConfig, bare: bool) {
|
||||||
// Drive Setup
|
// Drive Setup
|
||||||
format_drives(&conf.drive);
|
format_drives(&conf.drive);
|
||||||
mount_drives(&conf.drive);
|
mount_drives(&conf.drive);
|
||||||
|
install_mnt(conf, bare);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn install_mnt(conf: InstallConfig, bare: bool) {
|
||||||
// Base Install
|
// Base Install
|
||||||
pacstrap(&conf.pkg);
|
pacstrap(&conf.pkg);
|
||||||
genfstab();
|
genfstab();
|
||||||
|
@ -183,7 +186,9 @@ pub fn install(conf: InstallConfig) {
|
||||||
setup_fstrim();
|
setup_fstrim();
|
||||||
setup_bootloader();
|
setup_bootloader();
|
||||||
setup_mkinitcpio(&conf.drive);
|
setup_mkinitcpio(&conf.drive);
|
||||||
|
if bare {
|
||||||
setup_secure_boot();
|
setup_secure_boot();
|
||||||
|
}
|
||||||
|
|
||||||
if conf.drive.encryption.is_some() {
|
if conf.drive.encryption.is_some() {
|
||||||
setup_tpm_unlock(&conf.drive);
|
setup_tpm_unlock(&conf.drive);
|
||||||
|
|
|
@ -10,7 +10,7 @@ mod linux;
|
||||||
mod pkg;
|
mod pkg;
|
||||||
mod print;
|
mod print;
|
||||||
use create_iso::create_iso;
|
use create_iso::create_iso;
|
||||||
use install::{install, security::ensure_secure_boot};
|
use install::{drives::setup_disk_image, install, install_mnt, security::ensure_secure_boot};
|
||||||
use linux::is_root;
|
use linux::is_root;
|
||||||
use print::print_config;
|
use print::print_config;
|
||||||
use yansi::{Color, Paint};
|
use yansi::{Color, Paint};
|
||||||
|
@ -58,9 +58,10 @@ fn main() {
|
||||||
Some(("create-img", install_args)) => {
|
Some(("create-img", install_args)) => {
|
||||||
let config_file: &String = install_args.get_one("config").unwrap();
|
let config_file: &String = install_args.get_one("config").unwrap();
|
||||||
let conf = read_conf(config_file);
|
let conf = read_conf(config_file);
|
||||||
|
let img_file: &String = install_args.get_one("image").unwrap();
|
||||||
|
|
||||||
println!("Installing to a disk image is not yet supported");
|
setup_disk_image(img_file.as_str());
|
||||||
unimplemented!()
|
install_mnt(conf, false);
|
||||||
}
|
}
|
||||||
Some(("install", install_args)) => {
|
Some(("install", install_args)) => {
|
||||||
if !is_root() {
|
if !is_root() {
|
||||||
|
@ -81,7 +82,7 @@ fn main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run the
|
// Run the
|
||||||
install(conf);
|
install(conf, true);
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue