Skip to content

Latest commit

 

History

History

gramine-hello

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

Gramine "Hello World!" example

This example shows how to run a Gramine application in MarbleRun. In essence, you have to add the premain process to the Gramine manifest. premain will contact the Coordinator, set up the environment, and run the actual application. See the commented hello.manifest.template for details.

Requirements

First, install Gramine. You will need hardware with Intel SGX support.

Then, before you can run the example, make sure you got the prerequisites for ECDSA remote attestation installed on your system. You can collectively install them with the following command:

sudo apt install libsgx-quote-ex-dev

Build

You can build the example as follows:

openssl genrsa -3 -out enclave-key.pem 3072
make

Then get Measurement from the build output and set it as UniqueID in manifest.json.

Run

Next, use the erthost command to start the Coordinator in a local enclave:

erthost ../../build/coordinator-enclave.signed

The Coordinator exposes two APIs, a client REST API (port 4433) and a mesh API (port 2001). While the Coordinator and your Marble communicate via the mesh API, you can administrate the Coordinator via the REST API.

Once the Coordinator instance is running, you can upload the manifest to the Coordinator's client API:

curl -k --data-binary @manifest.json https://localhost:4433/manifest

The type of the Marble is defined in the manifest.json. In this example, the manifest defines a single Marble, which is called "hello". To run the application, you need to set the EDG_MARBLE_TYPE environment variable to that name.

EDG_MARBLE_TYPE=hello gramine-sgx hello