From 4a70ffa9061036c7fedecbfdcab6325e85f9cb05 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Sat, 28 Dec 2024 05:14:29 +0100 Subject: [PATCH] update --- src/install/first_boot.rs | 48 +++++++++++++++++++++++++++------------ src/install/kernel.rs | 4 +++- src/install/ssh.rs | 4 +++- src/install/user.rs | 3 ++- src/install/zram.rs | 3 ++- src/main.rs | 8 +++++-- 6 files changed, 49 insertions(+), 21 deletions(-) diff --git a/src/install/first_boot.rs b/src/install/first_boot.rs index 36ae91e..4acc1d3 100644 --- a/src/install/first_boot.rs +++ b/src/install/first_boot.rs @@ -1,31 +1,49 @@ // GENFSTAB -use crate::{config::GeneralConfig, run_command}; +use crate::{config::GeneralConfig, print_status, run_command}; use super::{str_vec, uncomment_first_value_of}; pub fn genfstab() { + print_status("Generating fstab"); let (stdout, _) = run_command(&str_vec(vec!["genfstab", "-U", "/mnt"]), None, false); std::fs::write("/mnt/etc/fstab", stdout).unwrap(); } pub fn first_boot_values(conf: &GeneralConfig) { - // CHROOT - run_command( - &vec![ - "arch-chroot".into(), - "/mnt".into(), - "systemd-firstboot".into(), - format!("--locale={}", conf.locale), - format!("--keymap={}", conf.keymap), - format!("--timezone={}", conf.timezone), - format!("--hostname={}", conf.hostname), - ], - None, - false, - ); + // Locale + print_status(&format!("Setting locale {}", conf.locale)); + std::fs::write( + "/mnt/etc/locale.conf", + format!("LANG=\"{}\"\n", conf.locale), + ) + .unwrap(); + + // Timezone + print_status(&format!("Setting timezone {}", conf.timezone)); + let tz_paths = conf.timezone.split('/').collect::>(); + let mut tz_link = std::path::PathBuf::from("/usr/share/zoneinfo/"); + + for path in tz_paths { + tz_link.push(path); + } + + std::os::unix::fs::symlink(tz_link, "/mnt/etc/localtime").unwrap(); + + // Keymap + print_status("Writing /etc/vconsole.conf"); + std::fs::write( + "/mnt/etc/vconsole.conf", + format!("KEYMAP=\"{}\"", conf.keymap), + ) + .unwrap(); + + // Hostname + print_status("Writing /etc/hostname"); + std::fs::write("/mnt/etc/hostname", format!("{}\n", conf.hostname)).unwrap(); // LOCALE + print_status("Setting locale"); uncomment_first_value_of(&conf.locale, "/mnt/etc/locale.gen"); run_command( &str_vec(vec!["arch-chroot", "/mnt", "locale-gen"]), diff --git a/src/install/kernel.rs b/src/install/kernel.rs index f2ebc44..5fdd2db 100644 --- a/src/install/kernel.rs +++ b/src/install/kernel.rs @@ -1,16 +1,18 @@ // MKINITCPIO + UKI -use crate::run_command; +use crate::{print_status, run_command}; use super::str_vec; pub fn setup_mkinitcpio() { + print_status("Writing /etc/mkinitcpio.d/linux.preset"); std::fs::write( "/mnt/etc/mkinitcpio.d/linux.preset", include_str!("../root/mkinitcpio/linux.preset"), ) .unwrap(); // TODO : more configs + print_status("Writing /etc/mkinitcpio.conf"); std::fs::write( "/mnt/etc/mkinitcpio.conf", include_str!("../root/mkinitcpio.conf"), diff --git a/src/install/ssh.rs b/src/install/ssh.rs index c19360b..56dad2a 100644 --- a/src/install/ssh.rs +++ b/src/install/ssh.rs @@ -1,4 +1,4 @@ -use crate::{config::SSHConfig, pkg::install_pkgs}; +use crate::{config::SSHConfig, pkg::install_pkgs, print_status}; use std::io::Write; pub fn setup_ssh(conf: &Option) { @@ -6,6 +6,7 @@ pub fn setup_ssh(conf: &Option) { install_pkgs(&["openssh"]); if let Some(sshd_config) = &conf.sshd_config { + print_status("Writing /etc/ssh/sshd_config"); let content = std::fs::read_to_string(sshd_config).unwrap(); std::fs::write("/mnt/etc/ssh/sshd_config", content).unwrap(); } @@ -26,6 +27,7 @@ pub fn setup_ssh(conf: &Option) { .open(path) .unwrap(); + print_status(&format!("Adding key to authorized_keys for {}", user)); writeln!(authorized_keys, "{}", format!("{}\n", key.key)).unwrap(); } } diff --git a/src/install/user.rs b/src/install/user.rs index b47d5ba..db87e16 100644 --- a/src/install/user.rs +++ b/src/install/user.rs @@ -1,4 +1,4 @@ -use crate::{config::UserConfig, run_command}; +use crate::{config::UserConfig, print_status, run_command}; use super::str_vec; @@ -19,6 +19,7 @@ pub fn setup_users(conf: &[UserConfig]) { ); if user.doas_root { + print_status(&format!("Allowing root doas for {}", user.name)); doas_conf.push_str(&format!("permit {} as root\n", user.name)); } } diff --git a/src/install/zram.rs b/src/install/zram.rs index 03724b4..543efaa 100644 --- a/src/install/zram.rs +++ b/src/install/zram.rs @@ -1,9 +1,10 @@ -use crate::{pkg::install_pkgs, run_command}; +use crate::{pkg::install_pkgs, print_status, run_command}; use super::str_vec; pub fn setup_zram() { install_pkgs(&["zram-generator"]); + print_status("Writing /etc/systemd/zram-generator.conf"); std::fs::write( "/mnt/etc/systemd/zram-generator.conf", include_str!("../root/zram-generator.conf"), diff --git a/src/main.rs b/src/main.rs index 6fda904..3979ec9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,12 +16,16 @@ fn is_root() -> bool { getuid() == Uid::from_raw(0) } -fn run_command(cmd: &[String], input: Option<&str>, inherit: bool) -> (String, String) { +fn print_status(msg: &str) { println!( "{} {}", "-->".paint(Color::Red), - cmd.join(" ").paint(Color::Blue.bold()) + msg.paint(Color::Blue.bold()) ); +} + +fn run_command(cmd: &[String], input: Option<&str>, inherit: bool) -> (String, String) { + print_status(&cmd.join(" ")); let mut cmd_setup = std::process::Command::new(cmd[0].clone()); let mut cmd_setup = cmd_setup.args(cmd.into_iter().skip(1).collect::>());