1
0
Fork 0
mirror of https://github.com/hermitcore/libhermit.git synced 2025-03-09 00:00:03 +01:00

Support command line arguments.

It's now possible to set the environment variables with an argument. The
env var will be overridden. For instance to start
hello on an UHyve isle: `proxy run ./hello --isle uhyve -d`
This commit is contained in:
bytesnake 2017-05-20 15:11:48 +02:00
parent 937d064450
commit b5920069c7
2 changed files with 54 additions and 15 deletions

View file

@ -101,10 +101,9 @@ impl QEmu {
}
if hermit_env::verbose() != "0" {
println!("{:#?}", args);
debug!("Execute {} with args {:#?}", hermit_env::qemu_binary(), args);
}
debug!("Execute {} with args {:#?}", hermit_env::qemu_binary(), args);
let mut cmd = Command::new(hermit_env::qemu_binary());

View file

@ -23,7 +23,8 @@ extern crate nix;
mod hermit;
use nix::sys::signal;
use std::{env, process};
use std::env;
use hermit::error;
extern fn exit(_:i32) {
@ -31,8 +32,6 @@ extern fn exit(_:i32) {
}
fn main() {
env_logger::init().unwrap();
// register a signal
let sig_action = signal::SigAction::new(signal::SigHandler::Handler(exit), signal::SaFlags::empty(), signal::SigSet::empty());
unsafe {
@ -40,21 +39,62 @@ fn main() {
signal::sigaction(signal::SIGTERM, &sig_action).unwrap();
}
/* let matches = clap_app!(proxy =>
let matches = clap_app!(HermitProxy =>
(version: "0.0.1")
(author: "Lorenz Schmidt <bytesnake@mailbox.org>")
(about: "Allows you to start and manage HermitCore isles")
(@arg debug: -d ... "Sets the level of debugging information")
(@subcommand run =>
(about: "Executes an HermitCore application")
(@arg file: +required "The binary to be executed")
(@arg isle: --isle +takes_value "Choose the hypervisor [uhyve/qemu/multi]")
(@arg debug: -d --debug "Enables debugging information")
(@arg cpus: --num_cpus +takes_value "Sets the number of cpus")
(@arg mem_size: --mem_size +takes_value "Sets the memory size")
(@arg qemu_binary: --qemu_binary +takes_value "Overrides the default qemu binary")
(@arg port: --port +takes_value "Overrides the default port [qemu only]")
(@arg app_port: --app_port +takes_value "Overrides the default app port [qemu only]")
)
).get_matches();
*/
// create the isle, wait to be available and start it
env::args().skip(1).next().ok_or(error::Error::MissingBinary)
.and_then(|path| hermit::new_isle(&path))
.and_then(|mut isle| {
isle.wait_until_available()?;
isle.run()?;
if let Some(matches) = matches.subcommand_matches("run") {
if let Some(isle) = matches.value_of("isle") {
env::set_var("HERMIT_ISLE", isle);
}
Ok(())
}).unwrap();
if matches.is_present("debug") {
env::set_var("RUST_LOG", "trace");
env::set_var("HERMIT_VERBOSE", "1");
}
if let Some(num_cpus) = matches.value_of("cpus") {
env::set_var("HERMIT_CPUS",num_cpus);
}
if let Some(mem_size) = matches.value_of("mem_size") {
env::set_var("HERMIT_MEM", mem_size);
}
if let Some(qemu_binary) = matches.value_of("qemu_binary") {
env::set_var("HERMIT_QEMU", qemu_binary);
}
if let Some(port) = matches.value_of("port") {
env::set_var("HERMIT_PORT",port);
}
if let Some(app_port) = matches.value_of("app_port") {
env::set_var("HERMIT_APP_PORT",app_port);
}
env_logger::init().unwrap();
hermit::new_isle(&matches.value_of("file").unwrap())
.and_then(|mut isle| {
isle.wait_until_available()?;
isle.run()?;
Ok(())
}).unwrap();
}
}