add mount feature for nix crate

This commit is contained in:
Aaron Honeycutt 2025-04-10 20:16:34 -06:00
parent 3182e823cc
commit 27bfd3eefa
2 changed files with 73 additions and 6 deletions

View file

@ -5,6 +5,6 @@ edition = "2021"
[dependencies] [dependencies]
curl = "0.4.47" curl = "0.4.47"
nix = "0.29.0" nix = { version = "0.29.0", features = ["mount"] }
rsfdisk = "0.1.0" rsfdisk = "0.1.0"
sys_metrics = "0.2.7" sys_metrics = "0.2.7"

View file

@ -1,12 +1,16 @@
use std::io; use std::io;
use std::io::Write; use std::io::Write;
use std::fs;
use std::fs::File; use std::fs::File;
use std::process::Command; use std::process::Command;
use std::path::Path;
use sys_metrics::disks; use sys_metrics::disks;
use rsfdisk::fdisk::Fdisk; use rsfdisk::fdisk::Fdisk;
use rsfdisk::core::partition_table::PartitionTableKind; use rsfdisk::core::partition_table::PartitionTableKind;
use rsfdisk::core::partition::{Guid, Partition, PartitionKind}; use rsfdisk::core::partition::{Guid, Partition, PartitionKind};
use nix::mount::{mount, MsFlags};
use std::os::unix::ffi::OsStrExt;
use curl::easy::Easy; use curl::easy::Easy;
fn format_drive(drive_name: &str) -> rsfdisk::Result<()> { fn format_drive(drive_name: &str) -> rsfdisk::Result<()> {
@ -38,6 +42,7 @@ fn format_drive(drive_name: &str) -> rsfdisk::Result<()> {
// .size_in_sectors(121_634_816) // .size_in_sectors(121_634_816)
// Internal drive testing // Internal drive testing
.size_in_sectors(499_033_071_61) .size_in_sectors(499_033_071_61)
// replace static int with a variable
.build()?; .build()?;
let _ = disk.partition_add(root)?; let _ = disk.partition_add(root)?;
@ -52,17 +57,71 @@ fn format_partitions() {
.arg("-F32") .arg("-F32")
.arg("-n") .arg("-n")
.arg("EFI") .arg("EFI")
// replace static path with a variable
.arg("/dev/nvme1n1p1") .arg("/dev/nvme1n1p1")
.output() .output()
.expect("Failed to partition boot partition as FAT32"); .expect("Failed to partition boot partition as FAT32");
let _root_partition = Command::new("mkfs.ext4") let _root_partition = Command::new("mkfs.ext4")
// replace static path with a variable
.arg("/dev/nvme1n1p2") .arg("/dev/nvme1n1p2")
.output() .output()
.expect("Failed to partition root partition as ext4"); .expect("Failed to partition root partition as ext4");
} }
// fn mount_parts() {} fn mount_root() {
// replace static path with a variable
let root_source = Some(Path::new("/dev/nvme1n1p2"));
let root_target = Path::new("/mnt");
// unmounts root before hand to fix bugs
let _umount_root = Command::new("umount")
// replace static path with a variable
.arg("/dev/nvme1n1p2")
.output()
.expect("Failed to unmount root");
mount(
root_source,
root_target,
Some("ext4"),
MsFlags::empty(),
None::<&[u8]>,
)
.expect("Failed to mount root partition");
// Deletes the boot directory
// Shouldn't be needed with a blank drive
// So just for testing
let _delete_boot_directory = Command::new("rm")
.arg("-r")
.arg("/mnt/boot")
.output()
.expect("Failed to delete boot directory");
// Creates the boot directory in /mnt/boot
let _create_boot_directory = Command::new("mkdir")
.arg("/mnt/boot")
.output()
.expect("Failed to create boot directory");
}
fn mount_boot() {
// replace static path with a variable
let boot_source = Some(Path::new("/dev/nvme1n1p1"));
let boot_target = Path::new("/mnt/boot");
mount(
boot_source,
boot_target,
Some("FAT32"),
MsFlags::empty(),
None::<&[u8]>,
)
.expect("Failed to mount boot partition");
println!("");
}
fn grab_flake() { fn grab_flake() {
let mut easy = Easy::new(); let mut easy = Easy::new();
@ -151,6 +210,11 @@ fn main() {
// Formatting the partitions // Formatting the partitions
format_partitions(); format_partitions();
// Mounting the partitions
mount_root();
// mount_boot();
// Download nix files // Download nix files
grab_flake(); grab_flake();
grab_config(); grab_config();
@ -192,14 +256,17 @@ fn main() {
}).unwrap(); }).unwrap();
transfer.perform().unwrap(); transfer.perform().unwrap();
} }
break
}
"2" => {
let _nixos_install = Command::new("nixos-install") let _nixos_install = Command::new("nixos-install")
.arg("--flake") .arg("--flake")
.arg("/mnt/etc/nixos#garrus") .arg("/mnt/etc/nixos#garrus")
.output() .output()
.expect("Fiale to execute command"); .expect("Failed to execute command");
break
}
"2" => {
println!("Nix the world!");
}, },
"3" => { "3" => {
println!("Goodbye!"); println!("Goodbye!");