mirror of
https://github.com/philmmanjaro/alma.git
synced 2025-07-26 06:59:28 +02:00
Status: WIP Completed: * Fixed flagged clippy lints * Moved qemu(), main.rs::mount() and chroot() to the tools module. * Moved constants in main.rs to constants.rs (including base packages array) * Renamed Presets struct to PresetsCollection to avoid confusion with Preset struct * Moved main() to the top of main.rs to highlight general logic path * Added comments and docstrings to some functions * Removed some uses of `use foo::*` to make the source of imported functions and structs clearer TODO: * Move remaining code in main.rs to modules (except main()) * Break up create() function in to separate steps * Log every command run (with arguments) to debug! when verbose flag is used * Add docstrings for remaining functions and document constants (e.g. why noatime is used) * Remove remaining uses of `use foo::*` * Consider renaming/moving tools module to address tool:: vs. Tool:: confusion
44 lines
1013 B
Rust
44 lines
1013 B
Rust
use super::Tool;
|
|
use crate::args;
|
|
use crate::error;
|
|
use log::debug;
|
|
|
|
use failure::ResultExt;
|
|
use std::os::unix::process::CommandExt as UnixCommandExt;
|
|
use std::path::PathBuf;
|
|
|
|
/// Loads given block device in qemu
|
|
/// Uses kvm if it is enabled
|
|
pub fn qemu(command: args::QemuCommand) -> Result<(), error::Error> {
|
|
let qemu = Tool::find("qemu-system-x86_64")?;
|
|
|
|
let mut run = qemu.execute();
|
|
run.args(&[
|
|
"-m",
|
|
"4G",
|
|
"-netdev",
|
|
"user,id=user.0",
|
|
"-device",
|
|
"virtio-net-pci,netdev=user.0",
|
|
"-device",
|
|
"qemu-xhci,id=xhci",
|
|
"-device",
|
|
"usb-tablet,bus=xhci.0",
|
|
"-drive",
|
|
])
|
|
.arg(format!(
|
|
"file={},if=virtio,format=raw",
|
|
command.block_device.display()
|
|
))
|
|
.args(command.args);
|
|
|
|
if PathBuf::from("/dev/kvm").exists() {
|
|
debug!("KVM is enabled");
|
|
run.args(&["-enable-kvm", "-cpu", "host"]);
|
|
}
|
|
|
|
let err = run.exec();
|
|
|
|
Err(err).context(error::ErrorKind::Qemu)?
|
|
}
|