permalink: /sgx-sdk-docs/environment-setup

Recommended OS to start with

We recommend Ubuntu 16.04/18.04. Desktop or server is the same. It could be your host OS or guest OS (inside docker). Technically, a full compatible list could be found at Intel's download page. As of 04-01-2019 (v 2.4.0), the list contains:

  • CentOS 7.5
  • Fedora 27 server
  • RedHat Enterprise Linux 7.4
  • SUSE 12.3 server
  • Ubuntu 16.04
  • Ubuntu 18.04

Hardware setup

A good reference for hardware compatibility is SGX-Hardware. You can use the script test-sgx.c there to check if SGX is/could be enabled.

Followings are FAQs I've been always asked:

  1. Macbook Pro? No to all on hardware support! Docker-based simulation is OK.
  2. Rack Server? Here are my listings:
  1. Laptops? I don't know. If you can find something related to Intel SGX in the BIOS, then Yes.

Another solution is Intel's VCA 2 card. It should be placed only in 2-socket Xeon E5 systems (or following). Dmitrii of Intel Lab is using it for Redis-SGX.

Software Setup

Rust toolchain

Please use rustup to install and manage Rust toolchains. DO NOT use anything like apt or yum.

During the installation you'll be asked about ‘installation options’ as follows:

Current installation options:

   default host triple: x86_64-unknown-linux-gnu
     default toolchain: stable
  modify PATH variable: yes

The host triple (though quadruple here) is correct. You could just press enter to skip it. When asking about default toolchain, you could enter nightly-2019-01-28 or similar version number. And we recommend to answer ‘Y’ to the PATH modification.

rustup is always installed in ~ and does not affect other users.

Then you will have rustup works well. To switch to another toolchain, try

$ rustup toolchain default nightly-2019-03-31

This would triggers downloading and installation if the desired toolchain is not found on your disk.

To add more rust tools such as rust-src (for xargo), rust-clippy (for lint):

$ rustup component add rust-src

Intel SGX toolchain setup

The toolchain setup strictly follows the following steps:

  1. Driver installation ( sgx_linux_x64_driver_??????.bin ). You'll get a misc device ‘/dev/isgx’ after this step.
  2. (OPTIONAL, if Intel ME is required) iCls setup (iclsClient-1.45.449.12-1.x86_64.rpm)
  3. (OPTIONAL, if Intel ME is required) jhi setup https://github.com/01org/dynamic-application-loader-host-interface
  4. Platform Software installation (libsgx-enclave-common, libsgx-enclave-common-dev, libsgx-enclave-common-dbgsym)
  5. Intel SGX SDK installation ( sgx_linux_x64_sdk_???????.bin )

And don't forget to source the environment file for Intel SGX SDK (such as sgx-sign).

Docker setup

Use docker with hardware support, and run aesm inside docker

Firstly, do step 0 to get /dev/isgx works. Then start a docker container as follows:

$ docker run -ti --rm -v /path/to/sdk:/root/sgx \
             --device /dev/isgx \
             --device /dev/mei0 \  # Optional if you have it and want to use it
             baiduxlab/sgx-rust
root@913e6a00c8d8:~#

(Optional) Install iCls and jhi daemon. Steps are here

(Optional) Start jhi daemon: jhid -d

Start aesm daemon

root@913e6a00c8d8:~# aesm_service[18]: The server sock is 0x5636e90be960
aesm_service[18]: [ADMIN]White List update requested
aesm_service[18]: [ADMIN]Platform Services initializing
aesm_service[18]: [ADMIN]Platform Services initialization failed due to DAL error
aesm_service[18]: [ADMIN]White list update request successful for Version: 49

root@913e6a00c8d8:~#

And then change directory to /root/sgx/samplecode/hello-rust and make. Then cd to bin and ./app.

Use docker without hardware support, only with simulation. Windows/Macbook compatible.

Make sure you have docker installed and working.

Start docker as:

$ docker run -ti --rm -v /path/to/sdk:/root/sgx baiduxlab/sgx-rust
root@913e6a00c8d8:~#

And then build in simulation mode

$ cd /root/sgx/samplecode/hello-rust
$ SGX_MODE=SW make
$ cd bin
$ ./app

Use docker with hardware support, and run aesm outside docker (on the host OS)

overview

Just add another device mapping to the command to have aesm.socket works in SGX. This requires step 3 finished on the host OS and /var/run/aesmd/aesm.socket exists on the host OS.

$ docker run --rm -ti \
             --device /dev/isgx \                               # forward isgx device
             -v /path/to/rust-sgx-sdk:/root/sgx \               # add SDK
             -v /var/run/aesmd:/var/run/aesmd \                 # forward domain socket
             baiduxlab/sgx-rust

Then you can skip launching aesmd in the docker container.

CI setup

The only known solution:drone.io is provided by @elichai. We've set it up successfully.