Compare commits
No commits in common. "eabd898ccf20e94beeebc5775be11d7398d2e5d1" and "71318a555ac2c53c42251ecdbdc0188042000d61" have entirely different histories.
eabd898ccf
...
71318a555a
4 changed files with 46 additions and 95 deletions
|
@ -6,41 +6,16 @@ root = "/dev/null"
|
|||
[general]
|
||||
# Use LUKS encryption on root drive
|
||||
encryption = true
|
||||
|
||||
# Preset
|
||||
mode = "Desktop"
|
||||
|
||||
# System Locale
|
||||
locale = "de_DE.UTF-8"
|
||||
|
||||
# Keymap
|
||||
keymap = "de-latin1"
|
||||
|
||||
# Timezone
|
||||
timezone = "Europe/Berlin"
|
||||
|
||||
# Hostname
|
||||
hostname = "navos"
|
||||
|
||||
[pkg]
|
||||
# Additional packages
|
||||
pkg = [
|
||||
"nano",
|
||||
"micro"
|
||||
]
|
||||
|
||||
# Enable virtualization
|
||||
virtualization = true
|
||||
|
||||
# Enable docker
|
||||
docker = true
|
||||
|
||||
[[user]]
|
||||
# Username
|
||||
name = "testuser"
|
||||
|
||||
# User password
|
||||
password = "testpass"
|
||||
|
||||
# Allow user to use doas as root
|
||||
doas_root= true
|
||||
|
|
|
@ -7,27 +7,6 @@ pub struct InstallConfig {
|
|||
pub drive: DriveConfig,
|
||||
/// General Configuration
|
||||
pub general: GeneralConfig,
|
||||
/// Package Configuration
|
||||
pub pkg: PackageConfig,
|
||||
/// User Configuration
|
||||
pub user: Vec<UserConfig>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct UserConfig {
|
||||
pub name: String,
|
||||
pub password: String,
|
||||
pub doas_root: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct PackageConfig {
|
||||
/// Packages to install
|
||||
pub pkg: Vec<String>,
|
||||
/// Enable libvirt
|
||||
pub virtualization: bool,
|
||||
/// Enable docker
|
||||
pub docker: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
|
@ -52,6 +31,12 @@ pub struct GeneralConfig {
|
|||
pub timezone: String,
|
||||
/// Hostname
|
||||
pub hostname: String,
|
||||
/// Packages to install
|
||||
pub pkg: Vec<String>,
|
||||
/// Enable libvirt
|
||||
pub virtualization: bool,
|
||||
/// Enable docker
|
||||
pub docker: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
// TODO : Setup users
|
||||
// TODO : Setup ssh (config + authorized_keys)
|
||||
// TODO : Setup virtualization
|
||||
// TODO : Setup docker
|
||||
// TODO : Autojoin docker swarm
|
||||
// TODO : Autojoin teleport
|
||||
|
||||
// DRIVE SELECTION
|
||||
|
||||
use crate::{
|
||||
config::{DriveConfig, GeneralConfig, InstallConfig, PackageConfig, UserConfig},
|
||||
pkg::{self, install_pkgs},
|
||||
run_command,
|
||||
config::{DriveConfig, GeneralConfig, InstallConfig},
|
||||
pkg, run_command,
|
||||
};
|
||||
|
||||
pub fn str_vec(v: Vec<&str>) -> Vec<String> {
|
||||
|
@ -69,7 +67,7 @@ pub fn mount_drives(conf: &DriveConfig, encrypted: bool) {
|
|||
|
||||
// PACSTRAP
|
||||
|
||||
pub fn pacstrap(conf: &PackageConfig) {
|
||||
pub fn pacstrap(conf: &GeneralConfig) {
|
||||
let mut cmd: Vec<String> = vec![
|
||||
"pacstrap".into(),
|
||||
"-K".into(),
|
||||
|
@ -81,7 +79,6 @@ pub fn pacstrap(conf: &PackageConfig) {
|
|||
"git".into(),
|
||||
"networkmanager".into(),
|
||||
"nano".into(),
|
||||
"doas".into(),
|
||||
];
|
||||
|
||||
cmd.extend(conf.pkg.clone());
|
||||
|
@ -160,7 +157,18 @@ pub fn uncomment_first_value_of(value: &str, file: &str) {
|
|||
}
|
||||
|
||||
pub fn setup_zram() {
|
||||
install_pkgs(&["zram-generator"]);
|
||||
run_command(
|
||||
&str_vec(vec![
|
||||
"arch-chroot",
|
||||
"/mnt",
|
||||
"pacman",
|
||||
"-Syu",
|
||||
"--noconfirm",
|
||||
"zram-generator",
|
||||
]),
|
||||
None,
|
||||
false,
|
||||
);
|
||||
std::fs::write(
|
||||
"/mnt/etc/systemd/zram-generator.conf",
|
||||
include_str!("root/zram-generator.conf"),
|
||||
|
@ -274,7 +282,18 @@ pub fn setup_secure_boot() {
|
|||
// TPM Unlock
|
||||
|
||||
pub fn setup_tpm_unlock(conf: &DriveConfig) {
|
||||
install_pkgs(&["tpm2-tools"]);
|
||||
run_command(
|
||||
&str_vec(vec![
|
||||
"arch-chroot",
|
||||
"/mnt",
|
||||
"pacman",
|
||||
"-Syu",
|
||||
"--noconfirm",
|
||||
"tpm2-tools",
|
||||
]),
|
||||
None,
|
||||
false,
|
||||
);
|
||||
|
||||
// systemd-cryptenroll --tpm2-device=list
|
||||
|
||||
|
@ -305,6 +324,15 @@ pub fn setup_tpm_unlock(conf: &DriveConfig) {
|
|||
);
|
||||
}
|
||||
|
||||
pub fn install_pkgs(pkg: &[&str]) {
|
||||
let mut cmd = vec!["arch-chroot", "/mnt", "pacman", "-Syu"];
|
||||
|
||||
cmd.extend_from_slice(pkg);
|
||||
cmd.push("--noconfirm");
|
||||
|
||||
run_command(&str_vec(cmd), None, true);
|
||||
}
|
||||
|
||||
pub fn setup_bootloader() {
|
||||
run_command(
|
||||
&str_vec(vec!["arch-chroot", "/mnt", "bootctl", "install"]),
|
||||
|
@ -313,43 +341,17 @@ pub fn setup_bootloader() {
|
|||
);
|
||||
}
|
||||
|
||||
pub fn setup_users(conf: &[UserConfig]) {
|
||||
let mut doas_conf = String::new();
|
||||
|
||||
for user in conf {
|
||||
run_command(
|
||||
&str_vec(vec!["arch-chroot", "/mnt", "useradd", "-m", &user.name]),
|
||||
None,
|
||||
false,
|
||||
);
|
||||
|
||||
run_command(
|
||||
&str_vec(vec!["arch-chroot", "/mnt", "passwd", &user.name]),
|
||||
Some(&format!("{}\n{}\n", user.password, user.password)),
|
||||
false,
|
||||
);
|
||||
|
||||
if user.doas_root {
|
||||
doas_conf.push_str(&format!("permit {} as root\n", user.name));
|
||||
}
|
||||
}
|
||||
|
||||
std::fs::write("/mnt/etc/doas.conf", doas_conf).unwrap();
|
||||
}
|
||||
|
||||
pub fn install(conf: InstallConfig) {
|
||||
// Drive Setup
|
||||
format_drives(&conf.drive, conf.general.encryption);
|
||||
mount_drives(&conf.drive, conf.general.encryption);
|
||||
|
||||
// Base Install
|
||||
pacstrap(&conf.pkg);
|
||||
pacstrap(&conf.general);
|
||||
genfstab();
|
||||
|
||||
// System Setup
|
||||
first_boot_values(&conf.general);
|
||||
setup_users(&conf.user);
|
||||
|
||||
setup_bootloader();
|
||||
|
||||
match conf.general.mode {
|
||||
|
@ -365,11 +367,11 @@ pub fn install(conf: InstallConfig) {
|
|||
}
|
||||
}
|
||||
|
||||
if conf.pkg.virtualization {
|
||||
if conf.general.virtualization {
|
||||
// TODO : Enable virtualization
|
||||
}
|
||||
|
||||
if conf.pkg.docker {
|
||||
if conf.general.docker {
|
||||
// TODO : Enable docker
|
||||
}
|
||||
|
||||
|
|
11
src/pkg.rs
11
src/pkg.rs
|
@ -1,14 +1,3 @@
|
|||
use crate::{install::str_vec, run_command};
|
||||
|
||||
pub const DESKTOP_PKG: [&str; 2] = ["plasma", "sddm"];
|
||||
|
||||
pub const SERVER_PKG: [&str; 1] = ["tmux"];
|
||||
|
||||
pub fn install_pkgs(pkg: &[&str]) {
|
||||
let mut cmd = vec!["arch-chroot", "/mnt", "pacman", "-Syu"];
|
||||
|
||||
cmd.push("--noconfirm");
|
||||
cmd.extend_from_slice(pkg);
|
||||
|
||||
run_command(&str_vec(cmd), None, true);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue