begin basis for manual parting
This commit is contained in:
parent
faf7319578
commit
633dd20936
@ -103,5 +103,6 @@
|
||||
"choose_home_seperation_auto": "Seperate /home ?",
|
||||
"advanced_home_seperation_selection_checkbutton_subvol_label": "Yes, via a Subvolume",
|
||||
"advanced_home_seperation_selection_checkbutton_partition_label": "Yes, via a Partition",
|
||||
"advanced_home_seperation_selection_checkbutton_none_label": "No"
|
||||
"advanced_home_seperation_selection_checkbutton_none_label": "No",
|
||||
"fs_unknown": "Unknown"
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ mod keyboard_page;
|
||||
mod timezone_page;
|
||||
mod partitioning_page;
|
||||
mod automatic_partitioning_page;
|
||||
mod manual_partitioning;
|
||||
|
||||
#[macro_use]
|
||||
extern crate rust_i18n;
|
||||
|
0
src/manual_partitioning/mod.rs
Normal file
0
src/manual_partitioning/mod.rs
Normal file
@ -117,6 +117,8 @@ pub fn partitioning_page(
|
||||
)
|
||||
);
|
||||
|
||||
dbg!(get_partitions());
|
||||
|
||||
main_carousel.append(&partitioning_carousel)
|
||||
}
|
||||
|
||||
@ -126,6 +128,16 @@ pub struct BlockDevice {
|
||||
pub block_size_pretty: String
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Partition {
|
||||
pub part_name: String,
|
||||
pub part_fs: String,
|
||||
pub has_encryption: bool,
|
||||
pub need_mapper: bool,
|
||||
pub part_size: f64,
|
||||
pub part_size_pretty: String
|
||||
}
|
||||
|
||||
pub fn get_block_devices() -> Vec<BlockDevice> {
|
||||
let mut block_devices = Vec::new();
|
||||
|
||||
@ -181,3 +193,107 @@ fn get_block_size(block_dev: &str) -> f64 {
|
||||
|
||||
size
|
||||
}
|
||||
|
||||
pub fn get_partitions() -> Vec<Partition> {
|
||||
let mut partitions = Vec::new();
|
||||
|
||||
let command = match std::process::Command::new("sudo")
|
||||
.arg("/usr/lib/pika/pika-installer-gtk4/scripts/partition-utility.sh")
|
||||
.arg("get_partitions")
|
||||
.stdin(std::process::Stdio::piped())
|
||||
.stdout(std::process::Stdio::piped())
|
||||
.spawn() {
|
||||
Ok(t) => t,
|
||||
Err(_) => return partitions
|
||||
};
|
||||
|
||||
match command.stdout {
|
||||
Some(t) => {
|
||||
for partition in std::io::BufReader::new(t).lines() {
|
||||
match partition {
|
||||
Ok(r) => {
|
||||
let part_size = get_part_size(&r);
|
||||
let part_fs = get_part_fs(&r);
|
||||
partitions.push(
|
||||
Partition {
|
||||
has_encryption: is_encrypted(&r),
|
||||
need_mapper: is_needs_mapper(&part_fs),
|
||||
part_name: r,
|
||||
part_fs: part_fs,
|
||||
part_size: part_size,
|
||||
part_size_pretty: pretty_bytes::converter::convert(part_size)
|
||||
}
|
||||
)
|
||||
}
|
||||
Err(_) => return partitions
|
||||
}
|
||||
}
|
||||
},
|
||||
None => return partitions
|
||||
};
|
||||
|
||||
partitions
|
||||
}
|
||||
|
||||
fn get_part_size(part_dev: &str) -> f64 {
|
||||
let command = match std::process::Command::new("sudo")
|
||||
.arg("/usr/lib/pika/pika-installer-gtk4/scripts/partition-utility.sh")
|
||||
.arg("get_part_size")
|
||||
.arg(part_dev)
|
||||
.output() {
|
||||
Ok(t) => t,
|
||||
Err(_) => return 0.0
|
||||
};
|
||||
let size = match String::from_utf8(command.stdout) {
|
||||
Ok(t) => {
|
||||
t.trim().parse::<f64>().unwrap_or(0.0)
|
||||
}
|
||||
Err(_) => 0.0
|
||||
};
|
||||
|
||||
size
|
||||
}
|
||||
|
||||
fn get_part_fs(part_dev: &str) -> String {
|
||||
let command = match std::process::Command::new("sudo")
|
||||
.arg("/usr/lib/pika/pika-installer-gtk4/scripts/partition-utility.sh")
|
||||
.arg("get_part_fs")
|
||||
.arg(part_dev.replace("mapper/", ""))
|
||||
.output() {
|
||||
Ok(t) => t,
|
||||
Err(_) => return String::from(t!("fs_unknown"))
|
||||
};
|
||||
let fs = match String::from_utf8(command.stdout) {
|
||||
Ok(t) => {
|
||||
t.trim().to_owned()
|
||||
}
|
||||
Err(_) => String::from(t!("fs_unknown"))
|
||||
};
|
||||
|
||||
fs
|
||||
}
|
||||
|
||||
fn is_needs_mapper(part_fs: &str) -> bool {
|
||||
if part_fs.contains("crypto_LUKS") || part_fs.contains("lvm") {
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
fn is_encrypted(part_dev: &str) -> bool {
|
||||
let command = match std::process::Command::new("sudo")
|
||||
.arg("/usr/lib/pika/pika-installer-gtk4/scripts/partition-utility.sh")
|
||||
.arg("has_encryption")
|
||||
.arg(part_dev)
|
||||
.output() {
|
||||
Ok(t) => t,
|
||||
Err(_) => return false
|
||||
};
|
||||
|
||||
if command.status.success() {
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user