本教程仅仅适用虚拟机下的Ubuntu20.04配置Intel SGX环境,若是双系统下的Ubuntu系统,请看最后的参考连接。若是window10自带的ubuntu,也就是从微软商店下载的ubuntu系统,这个我到make preparation指令就开始疯狂报错:make:***,用chatGPT,回答是linux内核头未安装或者目录出现问题,但是最后换内核什么乱七八糟的十分麻烦,最后也是走进死胡同了,所以改在虚拟机下配置环境。
注意:
(1)虚拟机环境下配置和使用SGX,与windows开机进入的BIOS开启的SGX支持硬件服务无关,虚拟机使用SGX是通过模拟模式运行,所以你进入BIOS开启的SGX硬件支持与虚拟机运行无关的,不放心的话可以打开,每个电脑打开方式不一样,自行百度打开。
(2)第一步和第二步,自行参考CSDN博主的文章,进行傻瓜式安装,这里不再赘述,只提供相关下载链接
Ubuntu20.04镜像文件国内下载地址(下载速度很快):https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.04/
虚拟机配置Ubuntu20.04教程:https://zhuanlan.zhihu.com/p/569274366
注意:安装顺序要严格按照下面的顺序安装,否则会出问题
安装顺序:Intel SGX Driver(驱动)——>Intel SDK——>Intel PSW
sudo apt install gcc
回车运行,会提示你一个(Y or N)申请内存空间,就输入Y进行安装即可
sudo apt install make
回车运行,会提示你一个(Y or N)申请内存空间,就输入Y进行安装即可
注意:安装的时候出现的没有的包,就按着提示的命令进行Ctrl-C or V,进行安装即可,当时我出现过什么包缺失,你就输入这个命令:sudo apt-get update
进入网站:https://download.01.org/intel-sgx/sgx-linux/2.13/distro/ubuntu18.04-server/
wget https://download.01.org/intel-sgx/sgx-linux/2.13/distro/ubuntu18.04-server/sgx_linux_x64_driver_1.41.bin
wget https://download.01.org/intel-sgx/sgx-linux/2.13/distro/ubuntu18.04-server/sgx_linux_x64_driver_2.11.0_0373e2e.bin
wget https://download.01.org/intel-sgx/sgx-linux/2.13/distro/ubuntu18.04-server/sgx_linux_x64_sdk_2.13.100.4.bin
下载完毕后,在当前目录下会发现3个bin文件产生
或者通过终端输入:dir 指令也可以看见这三个文件
然后赋予 sgx_linux_x64_driver_2.11.0_0373e2e.bin 这个bin文件最高权限
终端输入:sudo chmod 777 sgx_linux_x64_driver_2.11.0_0373e2e.bin
运行文件:sudo ./sgx_linux_x64_driver_2.11.0_0373e2e.bin
等待安装————运行完毕————Intel SGX Driver 安装完毕
终端输入(SDK):sudo apt-get install build-essential ocaml ocamlbuild automake autoconf libtool wget python libssl-dev git cmake perl
终端输入(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
终端输入:https://github.com/intel/SGXDataCenterAttestationPrimitives/
注意:
若是提示无权限,输入命令:chmod 777 文件夹名称
(赋予最高权限)
若是提示需要root用户权限,那就输入命令:su root
进入root用户进行操作
进入root用户密码失效问题,或者提示su认证失败问题:输入命令:sudo passwd root
进行重新设置密码
终端输入:cd linux-sgx
终端输入:make preparation
**注意:这里十分关键,如果你进行到这步了,一定要慢慢来,这里由于网路原因会出现大量的网络中断和错误,所以尽量在网络环境特别好的情况下进行配置环境,比如:未注册,子模块未检测,路径不正确,拒绝连接等等等等等。这些错误都归结为网络问题!!!!!!在终端界面按 Ctrl-C 进行强制停止,再重新输入make preparation
**指令,重新获取连接
如果这里成功过去了,那后面几乎没什么问题了,恭喜你!!!!!!!
终端输入:cd linux-sgx
终端输入:cd external
终端输入:cd toolset
终端输入:cd ubuntu20.04
终端输入:dir
通过ubuntu的我的电脑视图也可以看到
开始复制文件
终端输入:sudo cp as /usr/local/bin
终端输入:sudo cp ld /usr/local/bin
终端输入:sudo cp objdump /usr/local/bin
复制完毕后输入终端输入:which as ld objdump
,若如图显示,则复制成功
终端输入:cd
退回到主目录
终端输入:cd linux-sgx
进入linux-sgx文件夹
终端输入:make sdk
开始进行对SDK包的编译,前面的准备工作已经安装make指令包了,就是为了这里编译使用的
注意:这里也可能会出现很多问题,比如:#includemake preparation
出现错误,所以只能将linux-sgx的文件夹删除,从3、(3)开始,复制文件夹后在进行make preparation
的操作,保证网络状态良好,这里出错就回退重新做,要有耐心
如果顺利进行编译,那就等着它自己运行,这里大约会运行个5分钟,运行完毕后在编译sdk_install_pkg
终端输入:make sdk_install_pkg
若上面 make sdk 没问题,这里应该不会出现问题,大约自动运行5分钟后完成SDK包的编译工作,在linux-sgx/linux/installer/bin的目录下会生成一个bin文件:sgx_linux_x64_sdk_2.19.100.3.bin
安装build-essential python,此命令任意位置输入都行,默认安装在系统位置
终端输入:sudo apt-get install build-essential python
终端输入:cd linux
终端输入:cd installer
终端输入:cd bin
这样就到了刚才生成的bin文件的目录下,运行那个bin文件
终端输入:./sgx_linux_x64_sdk_2.19.100.3.bin
注意:
这里会询问是否安装在当前文件夹的时候,选择“no”,然后输入/opt/intel/
, 即将SGX SDK安装在/opt/intel/文件夹下。
安装后会显示安装路径,记下来
在以后编译sgx程序的时候都要先运行这个指令source /opt/intel/sgxsdk/environment
,就是要让开发环境生效,才能在Intel SGX的环境下进行运行
终端输入:source /opt/intel/sgxsdk/environment
SGX SDK安装完毕
终端输入:cd
回退到主目录
终端输入: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
终端输入:wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | sudo apt-key add -
出现 OK 则成功
注意:这里可能会出现一个错误 ”‘deb“........
解决方法:我的电脑视图进入到这里
打开这个文件夹,删除代码前面的单引号和双引号保存退出,若是碰到没有权限,则终端使用chmod 777 文件夹
修改权限
然后再运行此命令即可: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
更新系统软件包目录
终端输入:sudo apt-get update
结束后进行SGX PSW 的四个服务的安装,分别是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
注意:这里可能会出现错误:…包,安装依赖于…包,但是这个…包不能安装,建议:…包
解决方法:3、下面的(1)终端输入(PSW):sudo apt-get install libssl-dev libcurl4-openssl-dev protobuf-compiler libprotobuf-dev debhelper cmake reprepro unzip
这里安装编译PSW包出现问题,重新输入命令安装,否则从最初配置好虚拟机开始
若上面的4个服务安装成功,可以在/opt/intel/目录下找到一个sgx-asem-services目录,里面就是刚才安装的PSW的服务。
通过官方的检测文件,类似于其他语言的 Hello world
终端输入:cd
回到主目录
终端输入:cd ..
回退到主目录上面的目录
终端输入:cd ..
再回退
终端输入:cd opt
终端输入:cd intel
终端输入:cd sgxsdk
终端输入:cd SampleCode
终端输入:cd SampleEnclave
若出现什么权限不够问题,就 chmod 777 文件夹
命令或者 su root
进入到root 用户下
终端输入:source /opt/intel/sgxsdk/environment
终端输入:make SGX_MODE=SIM
这个编译方式是进入虚拟机的SGX模拟模式,默认是硬件模式SGX_MODE=HW,因为是在虚拟机里面运行SGX,所以要进入模拟模式。
如图所示就变成这样了,simulation mode(模拟模式)
终端输入:./app
如图显示(Hello world!!!是我自己后面加的):恭喜你,congratulation!!!!!!!!
由于网络原因和软件安装包的问题导致配置过程问题重重,翻来覆去换Ubuntu系统版本,反反复复的输入相同的命令,不断请求git连接,不太清楚其他版本的Ubuntu系统能不能适配,出现许多错误我就重头开始,查到问题查到死胡同就换系统版本,git下来的官方linux-sgx文件夹里面的external/toolset目录下的系统文件夹是Ubuntu20.04,所以尽量是用20.04版本吧,要坚持配下去,肯定能配出来的。我连玩带卷,大概配了2周吧,比较慢,欢迎大家互相交流,哈哈哈哈哈哈哈哈哈!
参考连接
https://blog.csdn.net/weixin_40893822/article/details/114005699