以下配置已经在ubuntu 18.04上测试通过, ubuntu16.04以为很多默认so库版本过低(比如glibc, gcc等),需求额外做一些事情, 所有非常建议使用ubuntu18.04 作为编译环境。
git clone https://github.com/oscarlab/graphene.git
sudo apt-get install -y build-essential autoconf gawk bison
cd graphene
make
cd LibOS/shim/test/native
make
./pal_loader helloworld
cd ../../../../Examples/lmbench
make
cd lmbench-2.5/bin/linux
./pal_loader lat_syscall null
./pal_loader lat_syscall open
./pal_loader lat_syscall read
./pal_loader lat_proc fork
1. 保证BIOS已经打开SGX的开关
2. 已安装Intel SGX SDK
3. 已安装Intel SGX 的driver
4. 已安装Intel SGX PSW相关服务(尤其是aesmd service, 因为graphene APP 编译时刻需要请求aesmd生成一个token)
// 下载SGX 相关的代码
# git clone https://github.com/intel/linux-sgx.git
// 安装编译所需的一些工具
# cd linux-sgx
# sudo apt-get install build-essential ocaml ocamlbuild automake autoconf libtool wget python libssl-dev git cmake perl
# sudo apt-get install libssl-dev libcurl4-openssl-dev protobuf-compiler libprotobuf-dev debhelper cmake reprepro
// 下载一些SGX提供的预编译好的库
# ./download_prebuilt.sh
// 复制SGX预提供的一些toolset到/usr/local/bin
# sudo cp external/toolset/{as,ld,ld.gold,objdump} /usr/local/bin
// 编译SDK 的安装包, 生成的目录为: linux/installer/bin/sgx_linux_x64_sdk_${version}.bin
# make sdk_install_pkg DEBUG=1 -j32
// 编译PSW 的安装包, 生成的目录为: linux/installer/deb/
# make deb_psw_pkg -j32
// 安装SDK
# cd linux/installer/bin
# ./sgx_linux_x64_sdk_${version}.bin
# source ${sgx-sdk-install-path}/environment
// 安装PSW
sudo apt-get install libssl-dev libcurl4-openssl-dev libprotobuf-dev
// 目前测试感觉好像只依赖urts 和aesm 2个service, 所有只安装了这2个, 暂时没发现问题, 如果有需要可以尝试安装其他的
# cd linux/installer/deb
# sudo dpkg -i libsgx-urts/*.deb
# sudo dpkg -i sgx-aesm-service/*.deb
// aesmd 服务相关
# sudo service aesmd status
# sudo service aesmd start
# sudo service aesmd restart
// 有时候需要配置aesmd的proxy
# sudo vim /etc/aesmd.conf
// 添加或修改, 修改完记得重启aesmd service
proxy type = manual
aesm proxy = http://xxx:port/
// 下载driver相关的代码
# git clone https://github.com/intel/linux-sgx-driver.git
# cd linux-sgx-driver
# make -j32
// 安装SGX的驱动, 可以将下面几条命令放到一个自定义的脚本里面运行
# sudo mkdir -p "/lib/modules/"`uname -r`"/kernel/drivers/intel/sgx"
# sudo cp isgx.ko "/lib/modules/"`uname -r`"/kernel/drivers/intel/sgx"
# sudo sh -c "cat /etc/modules | grep -Fxq isgx || echo isgx >> /etc/modules"
# sudo /sbin/depmod
# sudo /sbin/modprobe isgx
// 检查驱动是否安装成功
# lsmod |grep sgx
// 卸载SGX的驱动, 同样建议将下面命令放到一个自定义的脚本里运行
# sudo /sbin/modprobe -r isgx
# sudo rm -rf "/lib/modules/"`uname -r`"/kernel/drivers/intel/sgx"
# sudo /sbin/depmod
# sudo /bin/sed -i '/^isgx$/d' /etc/modules
lsmod | grep sgx // 应该可以看到isgx
ps ax | grep [a]esm_service // 查看asesm的状态
// 下载graphene的代码
# git clone https://github.com/oscarlab/graphene.git
# cd graphene
# git submodule update --init -- Pal/src/host/Linux-SGX/sgx-driver/
# export GRAPHENE_DIR=$PWD
// 准备一个3K的RSA key用来前面APP
# cd $GRAPHENE_DIR/Pal/src/host/Linux-SGX/signer
# openssl genrsa -3 -out enclave-key.pem 3072
// 编译和安装Graphene-SGX的驱动
# cd $GRAPHENE_DIR/Pal/src/host/Linux-SGX/sgx-driver
# make // 改名了会要求你输入sgx.h的路径, 我们可以选择Intel SGX driver对应的source code目录
# sudo insmod gsgx.ko
// 编译Graphene-SGX
# sudo apt-get install -y build-essential autoconf gawk bison libcurl4-openssl-dev \
python3-protobuf libprotobuf-c-dev protobuf-c-compiler
# cd $GRAPHENE_DIR
# make SGX=1
// 设置mmap_min_addr, 这个目前好像是SGX的一个workaround
# sudo sysctl vm.mmap_min_addr=0
// 编译和运行Helloworld
# cd $GRAPHENE_DIR/LibOS/shim/test/native
# make SGX=1
# make SGX=1 sgx-tokens
# SGX=1 ./pal_loader helloworld
// 编译和运行lmbench
cd $GRAPHENE_DIR/Examples/lmbench
make SGX=1
cd lmbench-2.5/bin/linux
SGX=1 ./pal_loader lat_syscall null
SGX=1 ./pal_loader lat_syscall open
SGX=1 ./pal_loader lat_syscall read
SGX=1 ./pal_loader lat_proc fork