Add support for user specified instance dir name
The default instance dir of Occlum is ".occlum". User now can specify the name by declaring environment variable "OCCLUM_INSTANCE_DIR"
This commit is contained in:
parent
03bb09abdf
commit
6a17e6292c
@ -15,7 +15,7 @@ enclave {
|
||||
*
|
||||
* @retval On success, return 0; otherwise, return -1.
|
||||
*/
|
||||
public int occlum_ecall_init([in, string] const char* log_level);
|
||||
public int occlum_ecall_init([in, string] const char* log_level, [in, string] const char* instance_dir);
|
||||
|
||||
/*
|
||||
* Create a new LibOS process to do the task specified by the given
|
||||
|
@ -33,9 +33,8 @@ lazy_static! {
|
||||
.cause_err(|e| errno!(EINVAL, "invalid config JSON"))?;
|
||||
Ok(config)
|
||||
}
|
||||
|
||||
let config_path = "./.occlum/build/Occlum.json.protected";
|
||||
match load_config(config_path) {
|
||||
let config_path = unsafe { format!("{}{}", INSTANCE_DIR, "/build/Occlum.json.protected") };
|
||||
match load_config(&config_path) {
|
||||
Err(e) => {
|
||||
error!("failed to load config: {}", e.backtrace());
|
||||
panic!();
|
||||
|
@ -11,7 +11,8 @@ use util::mem_util::from_untrusted::*;
|
||||
use util::sgx::allow_debug as sgx_allow_debug;
|
||||
use sgx_tse::*;
|
||||
|
||||
const ENCLAVE_PATH: &'static str = ".occlum/build/lib/libocclum-libos.signed.so";
|
||||
pub static mut INSTANCE_DIR: String = String::new();
|
||||
static mut ENCLAVE_PATH: String = String::new();
|
||||
|
||||
lazy_static! {
|
||||
static ref INIT_ONCE: Once = Once::new();
|
||||
@ -19,11 +20,13 @@ lazy_static! {
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn occlum_ecall_init(log_level: *const c_char) -> i32 {
|
||||
pub extern "C" fn occlum_ecall_init(log_level: *const c_char, instance_dir: *const c_char) -> i32 {
|
||||
if HAS_INIT.load(Ordering::SeqCst) == true {
|
||||
return EXIT_STATUS_INTERNAL_ERROR;
|
||||
}
|
||||
|
||||
assert!(!instance_dir.is_null());
|
||||
|
||||
let log_level = {
|
||||
let input_log_level = match parse_log_level(log_level) {
|
||||
Err(e) => {
|
||||
@ -52,6 +55,12 @@ pub extern "C" fn occlum_ecall_init(log_level: *const c_char) -> i32 {
|
||||
|
||||
// Register exception handlers (support cpuid & rdtsc for now)
|
||||
register_exception_handlers();
|
||||
unsafe {
|
||||
let dir_str: &str = CStr::from_ptr(instance_dir).to_str().unwrap();
|
||||
INSTANCE_DIR.push_str(dir_str);
|
||||
ENCLAVE_PATH.push_str(&INSTANCE_DIR);
|
||||
ENCLAVE_PATH.push_str("/build/lib/libocclum-libos.signed.so");
|
||||
}
|
||||
|
||||
HAS_INIT.store(true, Ordering::SeqCst);
|
||||
});
|
||||
@ -76,7 +85,8 @@ pub extern "C" fn occlum_ecall_new_process(
|
||||
return EXIT_STATUS_INTERNAL_ERROR;
|
||||
}
|
||||
};
|
||||
let _ = backtrace::enable_backtrace(ENCLAVE_PATH, PrintFormat::Short);
|
||||
|
||||
let _ = unsafe { backtrace::enable_backtrace(&ENCLAVE_PATH, PrintFormat::Short) };
|
||||
panic::catch_unwind(|| {
|
||||
backtrace::__rust_begin_short_backtrace(|| {
|
||||
match do_new_process(&path, &args, &host_stdio_fds) {
|
||||
@ -97,7 +107,7 @@ pub extern "C" fn occlum_ecall_exec_thread(libos_pid: i32, host_tid: i32) -> i32
|
||||
return EXIT_STATUS_INTERNAL_ERROR;
|
||||
}
|
||||
|
||||
let _ = backtrace::enable_backtrace(ENCLAVE_PATH, PrintFormat::Short);
|
||||
let _ = unsafe { backtrace::enable_backtrace(&ENCLAVE_PATH, PrintFormat::Short) };
|
||||
panic::catch_unwind(|| {
|
||||
backtrace::__rust_begin_short_backtrace(|| {
|
||||
match do_exec_thread(libos_pid as pid_t, host_tid as pid_t) {
|
||||
|
@ -34,7 +34,7 @@ int occlum_pal_init(const struct occlum_pal_attr* attr) {
|
||||
// automatically done by Intel SGX SDK).
|
||||
eid = pal_get_enclave_id();
|
||||
int ret;
|
||||
sgx_status_t ecall_status = occlum_ecall_init(eid, &ret, attr->log_level);
|
||||
sgx_status_t ecall_status = occlum_ecall_init(eid, &ret, attr->log_level, attr->instance_dir);
|
||||
if (ecall_status != SGX_SUCCESS) {
|
||||
const char* sgx_err = pal_get_sgx_error_msg(ecall_status);
|
||||
PAL_ERROR("Failed to do ECall: %s", sgx_err);
|
||||
|
@ -3,8 +3,11 @@
|
||||
this_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
occlum_dir="$( cd "$( dirname "$this_dir/../../../" )" >/dev/null 2>&1 && pwd )"
|
||||
|
||||
if [ -z $OCCLUM_INSTANCE_DIR ];then
|
||||
OCCLUM_INSTANCE_DIR=".occlum"
|
||||
fi
|
||||
working_dir=`pwd`
|
||||
context_dir="$working_dir/.occlum"
|
||||
context_dir="$working_dir/$OCCLUM_INSTANCE_DIR"
|
||||
|
||||
SGX_SDK="${SGX_SDK:-/opt/intel/sgxsdk}"
|
||||
SGX_GDB="$SGX_SDK/bin/sgx-gdb"
|
||||
|
@ -1,4 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z $OCCLUM_INSTANCE_DIR ];then
|
||||
OCCLUM_INSTANCE_DIR=".occlum"
|
||||
fi
|
||||
|
||||
cat <<EOF
|
||||
{
|
||||
"vm": {
|
||||
@ -13,7 +18,7 @@ cat <<EOF
|
||||
{
|
||||
"target": "/",
|
||||
"type": "sefs",
|
||||
"source": ".occlum/build/mount/__ROOT",
|
||||
"source": "$OCCLUM_INSTANCE_DIR/build/mount/__ROOT",
|
||||
"options": {
|
||||
"integrity_only": true,
|
||||
"MAC": "$OCCLUM_CONF_ROOT_FS_MAC"
|
||||
@ -22,7 +27,7 @@ cat <<EOF
|
||||
{
|
||||
"target": "/root",
|
||||
"type": "sefs",
|
||||
"source": ".occlum/run/mount/root"
|
||||
"source": "$OCCLUM_INSTANCE_DIR/run/mount/root"
|
||||
},
|
||||
{
|
||||
"target": "/host",
|
||||
|
Loading…
Reference in New Issue
Block a user