diff --git a/src/installation_progress_page/auto_btrfs.rs b/src/installation_progress_page/auto_btrfs.rs index b04b309..6f75d27 100644 --- a/src/installation_progress_page/auto_btrfs.rs +++ b/src/installation_progress_page/auto_btrfs.rs @@ -60,7 +60,7 @@ fi pub const automatic_home_subvol_btrfs_locked_installation_prog: &str = r###" -PIKA_INSTALL_AUTO_LUKS_PASSWORD={AUTO_LUKS_PASSWORD} +PIKA_INSTALL_AUTO_LUKS_PASSWORD='{AUTO_LUKS_PASSWORD}' parted -s -a optimal /dev/"$PIKA_INSTALL_AUTO_TARGET_DISK" mklabel gpt \ mkpart "linux-efi" 1MiB 500Mib \ @@ -199,7 +199,7 @@ fi pub const automatic_home_part_btrfs_locked_installation_prog: &str = r###" -PIKA_INSTALL_AUTO_LUKS_PASSWORD={AUTO_LUKS_PASSWORD} +PIKA_INSTALL_AUTO_LUKS_PASSWORD='{AUTO_LUKS_PASSWORD}' PIKA_INSTALL_AUTO_ROOT_SIZE={ROOT_PART_SIZE_AS_I64_MIB} parted -s -a optimal /dev/"$PIKA_INSTALL_AUTO_TARGET_DISK" mklabel gpt \ @@ -335,7 +335,7 @@ fi pub const automatic_home_none_btrfs_locked_installation_prog: &str = r###" -PIKA_INSTALL_AUTO_LUKS_PASSWORD={AUTO_LUKS_PASSWORD} +PIKA_INSTALL_AUTO_LUKS_PASSWORD='{AUTO_LUKS_PASSWORD}' parted -s -a optimal /dev/"$PIKA_INSTALL_AUTO_TARGET_DISK" mklabel gpt \ mkpart "linux-efi" 1MiB 500Mib \ diff --git a/src/installation_progress_page/auto_ext4.rs b/src/installation_progress_page/auto_ext4.rs index 966a780..b20bf90 100644 --- a/src/installation_progress_page/auto_ext4.rs +++ b/src/installation_progress_page/auto_ext4.rs @@ -56,7 +56,7 @@ fi pub const automatic_home_part_ext4_locked_installation_prog: &str = r###" -PIKA_INSTALL_AUTO_LUKS_PASSWORD={AUTO_LUKS_PASSWORD} +PIKA_INSTALL_AUTO_LUKS_PASSWORD='{AUTO_LUKS_PASSWORD}' PIKA_INSTALL_AUTO_ROOT_SIZE={ROOT_PART_SIZE_AS_I64_MIB} parted -s -a optimal /dev/"$PIKA_INSTALL_AUTO_TARGET_DISK" mklabel gpt \ @@ -168,7 +168,7 @@ fi pub const automatic_home_none_ext4_locked_installation_prog: &str = r###" -PIKA_INSTALL_AUTO_LUKS_PASSWORD={AUTO_LUKS_PASSWORD} +PIKA_INSTALL_AUTO_LUKS_PASSWORD='{AUTO_LUKS_PASSWORD}' parted -s -a optimal /dev/"$PIKA_INSTALL_AUTO_TARGET_DISK" mklabel gpt \ mkpart "linux-efi" 1MiB 500Mib \ diff --git a/src/installation_progress_page/auto_xfs.rs b/src/installation_progress_page/auto_xfs.rs index c6936a2..7d70d9b 100644 --- a/src/installation_progress_page/auto_xfs.rs +++ b/src/installation_progress_page/auto_xfs.rs @@ -57,7 +57,7 @@ fi pub const automatic_home_part_xfs_locked_installation_prog: &str = r###" -PIKA_INSTALL_AUTO_LUKS_PASSWORD={AUTO_LUKS_PASSWORD} +PIKA_INSTALL_AUTO_LUKS_PASSWORD='{AUTO_LUKS_PASSWORD}' PIKA_INSTALL_AUTO_ROOT_SIZE={ROOT_PART_SIZE_AS_I64_MIB} parted -s -a optimal /dev/"$PIKA_INSTALL_AUTO_TARGET_DISK" mklabel gpt \ @@ -169,7 +169,7 @@ fi pub const automatic_home_none_xfs_locked_installation_prog: &str = r###" -PIKA_INSTALL_AUTO_LUKS_PASSWORD={AUTO_LUKS_PASSWORD} +PIKA_INSTALL_AUTO_LUKS_PASSWORD='{AUTO_LUKS_PASSWORD}' parted -s -a optimal /dev/"$PIKA_INSTALL_AUTO_TARGET_DISK" mklabel gpt \ mkpart "linux-efi" 1MiB 500Mib \ diff --git a/src/installation_progress_page/mod.rs b/src/installation_progress_page/mod.rs index 785bb8a..fa2266e 100644 --- a/src/installation_progress_page/mod.rs +++ b/src/installation_progress_page/mod.rs @@ -8,16 +8,19 @@ use glib::{clone, closure_local}; use gtk::{gio, glib}; use std::{cell::RefCell, fs, ops::Deref, path::Path, process::Command, rc::Rc}; +mod auto_basic; +mod auto_btrfs; + pub const standard_installation_prog: &str = r###"#! /bin/bash set -e SOCKET_PATH="/tmp/pikainstall-status.sock" -PIKA_INSTALL_CHROOT_PATH={CHROOT_PATH} -PIKA_INSTALL_LOCALE="{LOCALE}.UTF-8" -PIKA_INSTALL_KEYMAP_BASE={KEYMAP_BASE} -PIKA_INSTALL_KEYMAP_VARIANT={KEYMAP_VARIANT} -PIKA_INSTALL_TIMEZONE={TIMEZONE} +PIKA_INSTALL_CHROOT_PATH='{CHROOT_PATH}' +PIKA_INSTALL_LOCALE='{LOCALE}.UTF-8' +PIKA_INSTALL_KEYMAP_BASE='{KEYMAP_BASE}' +PIKA_INSTALL_KEYMAP_VARIANT='{KEYMAP_VARIANT}' +PIKA_INSTALL_TIMEZONE='{TIMEZONE}' "###; pub fn create_installation_script( @@ -35,7 +38,9 @@ pub fn create_installation_script( partition_method_manual_luks_enabled_refcell: &Rc>, partition_method_manual_crypttab_entry_array_refcell: &Rc>>, ) { - let script = strfmt::strfmt( + let mut final_script = String::new(); + + let standard_installation_format = strfmt::strfmt( standard_installation_prog, &std::collections::HashMap::from([ ("CHROOT_PATH".to_string(), "/media/pikaos/installation"), @@ -54,25 +59,83 @@ pub fn create_installation_script( None => "", }, ), - ]), - ) - .unwrap(); - - let script2 = strfmt::strfmt( - automatic_home_part_ext4_locked_installation_prog, - &std::collections::HashMap::from([ - ("CHROOT_PATH".to_string(), "/media/pikaos/installation"), ( - "AUTO_LUKS_PASSWORD".to_string(), - partition_method_automatic_luks_refcell.borrow().as_str(), - ), - ( - "ROOT_PART_SIZE_AS_I64_MIB".to_string(), - (partition_method_automatic_ratio_refcell.borrow().round() as i64 / 1048576).to_string().as_str(), + "TIMEZONE".to_string(), + timezone_selection_text_refcell.borrow().as_str(), ), ]), ) .unwrap(); - println!("{}", script2) + final_script.push_str(&standard_installation_format); + + match &*partition_method_type_refcell.borrow().as_str() { + "automatic" => { + let is_encrypted = *partition_method_automatic_luks_enabled_refcell.borrow(); + // + let automatic_standard_installation_format = strfmt::strfmt( + auto_basic::automatic_standard_installation_prog, + &std::collections::HashMap::from([ + ( + "AUTO_INSTALL_TARGET_DISK".to_string(), + partition_method_automatic_target_refcell.borrow().block_name.as_str(), + ), + ]), + ) + .unwrap(); + + final_script.push_str(&automatic_standard_installation_format); + + // + match &*partition_method_automatic_target_fs_refcell.borrow().as_str().to_lowercase() { + "btrfs" => { + match &*partition_method_automatic_seperation_refcell.borrow().as_str() { + "subvol" => { + if is_encrypted { + final_script.push_str(&strfmt::strfmt( + auto_btrfs::automatic_home_subvol_btrfs_locked_installation_prog, + &std::collections::HashMap::from([ + ("CHROOT_PATH".to_string(), "/media/pikaos/installation"), + ( + "AUTO_LUKS_PASSWORD".to_string(), + partition_method_automatic_luks_refcell.borrow().as_str(), + ) + ]), + ) + .unwrap()); + } else { + final_script.push_str(&strfmt::strfmt( + auto_btrfs::automatic_home_subvol_btrfs_open_installation_prog, + &std::collections::HashMap::from([ + ("CHROOT_PATH".to_string(), "/media/pikaos/installation"), + ]), + ) + .unwrap()); + } + } + "partition" => {} + "none" => {} + _ => panic!() + } + } + "ext4" => { + + } + "xfs" => { + + } + _ => panic!() + } + // + if is_encrypted { + final_script.push_str(auto_basic::automatic_locked_part_pikainstall_prog); + } else { + final_script.push_str(auto_basic::automatic_open_part_pikainstall_prog); + } + } + "manual" => {} + _ => panic!() + } + + println!("{}", final_script) }