整体参考【Ubuntu18.04配置sgx环境】,但是实现过程中会出现小问题
- 测试本机器有没有SGX
进行编译小程序
git clone https://github.com/ayeks/SGX-hardware.git
cd SGX-hardware
gcc -Wl,--no-as-needed -Wall -Wextra -Wpedantic -masm=intel -o test-sgx -lcap cpuid.c rdmsr.c xsave.c vdso.c test-sgx.c
./test-sgx
结果见GitHub - ayeks/SGX-hardware: This is a list of hardware which supports Intel SGX - Software Guard Extensions.的readme部分写的很清楚的。
下载安装驱动sgx-driver
进入以下网站,将三个bin文件下载。(默认下载到/home/用户名/Downloads文件夹下)https://download.01.org/intel-sgx/sgx-linux/2.13/distro/ubuntu18.04-server/到下载文件夹下,
进入这个文件夹(cd)
输入sudo chmod 777 sgx_linux_x64_driver_2.11.0_0373e2e.bin以赋予这个.bin文件执行权限
运行这个.bin文件
sudo ./sgx_linux_x64_driver_2.11.0_0373e2e.bin
ok,驱动安装完成
安装编译SGX SDK要用到的工具
sudo apt-get install build-essential ocaml ocamlbuild automake autoconf libtool wget python libssl-dev git cmake perl
该命令默认安装在系统上,所以可以在任何位置运行,不用担心安装位置
由于网络原因,有些包容易安装失败,出现失败情况,不用担心,重复运行这条命令,直至全部安装成功即可。
安装编译SGX PSW要用到的工具
sudo apt-get install libssl-dev libcurl4- openssl -dev protobuf-compiler libprotobuf-dev debhelper cmake reprepro unzip
该命令默认安装在系统上,所以可以在任何位置运行,不用担心安装位置
从仓库获取源码
到下载文件夹下,输入
git clone https://github.com/intel/ linux -sgx.git
运行成功后,下载文件夹中将会多出一个linux-sgx文件。
【在这一步时,我出现了问题fatal:无法访问xxxfailed to connect to github.com port 443:拒绝连接
解决办法:本来连的是校园网,我切换成了手机热点,还是出现这个问题。ping了下GitHub,能通。我又切换回了校园网,成功下载了】
进入下边这个网站,将整个项目down下来,然后把./QuoteVerification和./QuoteGeneration俩文件夹直接copy到 linux-sgx/external/下。
https://github.com/intel/SGXDataCenterAttestationPrimitives/
【在这一步时,我复制网站地址,发现404,结果发现此地址多了一个”/“,正确的应该是https://github.com/intel/SGXDataCenterAttestationPrimitives
以及使用git clone显示连接超时,我直接进去网页download zip至下载文件夹再解压】
到下载文件夹下,输入
cd linux-sgx && make preparation
【在这一步,我第一次显示失败。猜测是网络不佳,我又多试了几次,成功】
把准备好的工具列表添加到全局变量中,方便之后编译工作的展开
到linux-sgx文件夹下,输入以下命令
sudo cp external/toolset/{current_distr即当前系统的版本}/{as,ld,objdump} /usr/local/bin
再用下面这个语句检查是不是添加成功:
which as ld objdump
【这条写的有些模糊了哈哈哈,首先cd到linux-sgx文件夹下,其次输入命令后显示找不着,正确的应该是
sudo cp ./external/toolset/ubuntu20.04/{as,ld,objdump} /usr/local/bin
黄色是空格】
编译SGX SDK和SGX SDK安装工具( installer )
进入linux-sgx文件夹,输入以下命令
make sdk
【这一步要好久,将近半个小时】
运行完成后,再输入以下命令
make sdk_install_pkg
成功运行的话,在linux-sgx/linux/installer/bin文件夹下会有一个sgx_linux_x64_sdk_${version}.bin文件生成
【这一步也要好久,将近半个小时】
安装sdk
进入linux-sgx文件夹,输入以下两条命令
cd linux/installer/bin
./sgx_linux_x64_sdk_${version}.bin
注意:运行第二条命令时,它询问是否安装在当前文件夹的时候,最好选择“no”,然后输入/opt/intel/, 即将SGX SDK安装在/opt/intel/文件夹下。
安装好了之后,会显示它安装的路径,记下来,以后编译运行sgx程序的时候需要先运行以下命令,令开发环境生效
【这时候显示cannot install in ,please check the permission
我进入了/opt/intel/并修改了其权限sudo chmod 777 -R intel/】
source /opt/intel/sgxsdk/environment
该命令在任何位置都可运行
运行该命令
安装SGX PSW
命令行运行以下命令添加下载Intel sgx psw的下载路径
echo ‘deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu bionic main’ | sudo tee /etc/apt/sources.list.d/intel-sgx.list
该命令在任何位置都可运行
命令行运行以下命令,添加仓库拉取的ssh密钥
wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | sudo apt-key add -
运行后等一会儿看到【ok】就是运行成功。
该命令在任何位置都可运行
更新一下apt-get的列表
sudo apt-get update
该命令在任何位置都可运行
分别安装SGX PSW 提供的3个服务
分别是launch、EPID-based attestation和Algorithm agnostic attestation
输入以下命令
sudo apt-get install libsgx-launch libsgx-urts
sudo apt-get install libsgx-epid libsgx-urts
sudo apt-get install libsgx-quote-ex libsgx-urts
sudo apt-get install libsgx-dcap-ql //但这句其实可能是没有用的,但是还是运行吧。
【这里报错:下列软件包有未满足的依赖关系:
libsgx-launch : 依赖: libprotobuf10 但无法安装它
推荐: libsgx-aesm-launch-plugin (>= 2.18.101.1-bionic1) 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
搜索这个问题没有找到答案,偶然发现ubuntu20.4 sgx环境配置 - k_kK - 博客园里提到“注意,与ubuntu18.04不同,ubuntu20为ubuntu focal main。”
于是按照修改"echo"行,并且把后面的几行也重新运行了一遍。报错不再发生。】
该命令默认安装在系统上,所以可以在任何位置运行,不用担心安装位置
安装完毕,可以在/opt/intel/目录下找到一个sgx-asem-services目录
以上步骤完全照做,同时生成的东西和博主说的一模一样,但是最后运行./app的时候显示error
猜测是版本错了,但是我也不知道driver, sdk,psw哪个版本不对。控制变量法尝试后发现,
【进入以下网站,将三个bin文件下载。(默认下载到/home/用户名/Downloads文件夹下)https://download.01.org/intel-sgx/sgx-linux/2.13/distro/ubuntu18.04-server/到下载文件夹下】
这里的driver.2.11.0版本是错误的,正确是sgx_linux_x64_driver_2.11.54c9c4c.bin。
重新运行这个bin
除了驱动之外,PSW和SDK都保持原状。
使用原博客中的测试,成功了,感恩。