diff --git a/installs/desktop.toml b/installs/desktop.toml new file mode 100644 index 0000000..8b09546 --- /dev/null +++ b/installs/desktop.toml @@ -0,0 +1,53 @@ +# Desktop Install Template + +# Drive Selection for Install +[drive] +# Device node for the EFI boot filesystem +boot = "/dev/null" + +# Device node for the root filesystem +root = "/dev/null" + +# Root filesystem encryption passphrase +# If this option is set the root filesystem will be encrypted with LUKS +encryption = "password" + +# General configuration +[general] +# Preset +mode = "Desktop" + +# System Locale +locale = "de_DE.UTF-8" + +# Keymap +keyboard_layout = "de" +keyboard_variant = "mac" + +# Timezone +timezone = "Europe/Berlin" + +# Hostname +hostname = "navos" + +# Root password +root_password = "root" + +[pkg] +# Additional packages +pkg = [ + "nano", + "micro" +] + +# User configuration +# The `[[user]]` directive can be repeated to create multiple users. +[[user]] +# Username +name = "u" + +# User password +password = "pass" + +# Allow user to use `doas` as root +doas_root= true diff --git a/installs/full.toml b/installs/full.toml index 1367d3c..c138139 100644 --- a/installs/full.toml +++ b/installs/full.toml @@ -50,10 +50,10 @@ docker = true # The `[[user]]` directive can be repeated to create multiple users. [[user]] # Username -name = "testuser" +name = "u" # User password -password = "testpass" +password = "pass" # Allow user to use `doas` as root doas_root= true @@ -61,6 +61,9 @@ doas_root= true # Add user to Docker group docker = true +# Add user to libvirt group +virtualization = true + # SSH Configuration # If `[ssh]` is set, openssh will be installed and enabled. [ssh] @@ -76,7 +79,7 @@ sshd_config = "/etc/ssh/sshd_config" key = "ssh-rsa ... user@host" # The users allowed to login with this key -users = ["testuser", "root"] +users = ["u", "root"] # Ollama Configuration # If `[ai]` is set, ollama will be installed and enabled. diff --git a/installs/server.toml b/installs/server.toml new file mode 100644 index 0000000..b7c763c --- /dev/null +++ b/installs/server.toml @@ -0,0 +1,79 @@ +# Server Install Template + +# Drive Selection for Install +[drive] +# Device node for the EFI boot filesystem +boot = "/dev/null" + +# Device node for the root filesystem +root = "/dev/null" + +# Root filesystem encryption passphrase +# If this option is set the root filesystem will be encrypted with LUKS +encryption = "password" + +# General configuration +[general] +# Preset +mode = "Server" + +# System Locale +locale = "de_DE.UTF-8" + +# Keymap +keyboard_layout = "de" +keyboard_variant = "mac" + +# Timezone +timezone = "Europe/Berlin" + +# Hostname +hostname = "navos" + +# Root password +root_password = "root" + +[pkg] +# Additional packages +pkg = [] + +# Enable virtualization +virtualization = true + +# Enable docker +docker = true + +# User configuration +# The `[[user]]` directive can be repeated to create multiple users. +[[user]] +# Username +name = "u" + +# User password +password = "pass" + +# Allow user to use `doas` as root +doas_root= true + +# Add user to Docker group +docker = true + +# Add user to libvirt group +virtualization = true + +# SSH Configuration +# If `[ssh]` is set, openssh will be installed and enabled. +[ssh] +# Config file for sshd +# This file will be copied to the new system +sshd_config = "/etc/ssh/sshd_config" + +# Install a SSH keys +# To set multiple keys, repeat the `[[ssh.key]]` directive. +# Every key will be installed in the users respective `authorized_keys` file. +[[ssh.key]] +# The SSH Key +key = "ssh-rsa ... user@host" + +# The users allowed to login with this key +users = ["u", "root"] diff --git a/src/config.rs b/src/config.rs index 30fbecc..59531eb 100644 --- a/src/config.rs +++ b/src/config.rs @@ -43,6 +43,7 @@ pub struct UserConfig { pub password: String, pub doas_root: Option, pub docker: Option, + pub virtualization: Option, } #[derive(Debug, Clone, Deserialize)] diff --git a/src/install/mod.rs b/src/install/mod.rs index 74aed52..1cc1ed5 100644 --- a/src/install/mod.rs +++ b/src/install/mod.rs @@ -31,8 +31,8 @@ pub mod user; pub mod zram; use crate::{ - config::InstallConfig, - linux::install_file, + config::{InstallConfig, InstallMode}, + linux::{arch_chroot, install_file, systemd_service_enable}, pkg::{self, install_pkgs, pacstrap}, print_status, }; @@ -126,7 +126,29 @@ pub fn install(conf: InstallConfig) { } if conf.pkg.virtualization.unwrap_or_default() { - // TODO : Enable virtualization + let user_conf = if let Some(user_conf) = &conf.user { + user_conf.clone() + } else { + Vec::new() + }; + + install_pkgs(&["libvirt"]); + + if matches!(conf.general.mode, InstallMode::Desktop) { + install_pkgs(&["virt-manager"]); + } + + systemd_service_enable("libvirtd.service"); + + for user in user_conf { + if user.virtualization.unwrap_or_default() { + arch_chroot( + &vec!["usermod", "-a", "-G", "libvirt", user.name.as_str()], + None, + false, + ); + } + } } if conf.pkg.docker.unwrap_or_default() {