Intel SGX学习笔记(1):虚拟机Ubuntu20.04配置Intel SGX环境

写在前面

本教程仅仅适用虚拟机下的Ubuntu20.04配置Intel SGX环境,若是双系统下的Ubuntu系统,请看最后的参考连接。若是window10自带的ubuntu,也就是从微软商店下载的ubuntu系统,这个我到make preparation指令就开始疯狂报错:make:***,用chatGPT,回答是linux内核头未安装或者目录出现问题,但是最后换内核什么乱七八糟的十分麻烦,最后也是走进死胡同了,所以改在虚拟机下配置环境。

一、准备工作

1、下载VMware Workstation Pro虚拟机

2、下载Ubuntu20.04镜像文件,并配置好Ubuntu虚拟机

注意:
(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环境配置(安装过程需要终端和文件夹两个界面搭配操作)

在这里插入图片描述

注意:安装顺序要严格按照下面的顺序安装,否则会出问题

安装顺序:Intel SGX Driver(驱动)——>Intel SDK——>Intel PSW

1、安装以后会用到的包(gcc和make)

(1)输入命令:sudo apt install gcc

回车运行,会提示你一个(Y or N)申请内存空间,就输入Y进行安装即可

(2)输入命令:sudo apt install make

回车运行,会提示你一个(Y or N)申请内存空间,就输入Y进行安装即可

注意:安装的时候出现的没有的包,就按着提示的命令进行Ctrl-C or V,进行安装即可,当时我出现过什么包缺失,你就输入这个命令:sudo apt-get update

2、安装Intel Driver(驱动)

(1)下载三个需要的bin文件(一般浏览器不支持bin文件下载,这里就进去看看就行了,我们用下面的终端命令wget命令进行下载)

进入网站:https://download.01.org/intel-sgx/sgx-linux/2.13/distro/ubuntu18.04-server/
在这里插入图片描述

(2)在终端用linux的wget指令进行下载依次输入:

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 安装完毕

3、安装Intel SDK

(1)准备工作:安装编译Intel SDK和Intel PSW的包

终端输入(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

注意:上面两条命令任意位置运行都行,系统有默认的安装路径

(2)获取 linux-sgx 文件夹和 SGXDataCenterAttestationPrimitives 文件夹(从这里开始就要保证良好的网络速度,越快越好,否则容易git失败)

终端输入:git clone https://github.com/intel/linux-sgx.git

终端输入:https://github.com/intel/SGXDataCenterAttestationPrimitives/

下载完毕后当前目录下会有两个文件夹
在这里插入图片描述

(3)进入SGXDataCenterAttestationPrimitives 文件夹,把QuoteVerificationQuoteGeneration两个文件夹复制到linux文件夹下面的external里面

注意:
若是提示无权限,输入命令:chmod 777 文件夹名称 (赋予最高权限)
若是提示需要root用户权限,那就输入命令:su root 进入root用户进行操作
进入root用户密码失效问题,或者提示su认证失败问题:输入命令:sudo passwd root 进行重新设置密码

(4)进入linux-sgx文件夹下,进行preparation

终端输入:cd linux-sgx

终端输入:make preparation

**注意:这里十分关键,如果你进行到这步了,一定要慢慢来,这里由于网路原因会出现大量的网络中断和错误,所以尽量在网络环境特别好的情况下进行配置环境,比如:未注册,子模块未检测,路径不正确,拒绝连接等等等等等。这些错误都归结为网络问题!!!!!!在终端界面按 Ctrl-C 进行强制停止,再重新输入make preparation**指令,重新获取连接

如果这里成功过去了,那后面几乎没什么问题了,恭喜你!!!!!!!

(5)复制 as、ld、objdump三个文件到本地的bin文件夹内部

终端输入: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 ,若如图显示,则复制成功

在这里插入图片描述

(6)进行SDK包的编译

终端输入:cd 退回到主目录
终端输入:cd linux-sgx 进入linux-sgx文件夹
终端输入:make sdk 开始进行对SDK包的编译,前面的准备工作已经安装make指令包了,就是为了这里编译使用的

注意:这里也可能会出现很多问题,比如:#include<sgx_.h>头文件下面出现红色波浪号、make:***、makefile:**等等等等,那就说明你前面的make 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
在这里插入图片描述

(7)进行SDK包的安装

安装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安装完毕

4、安装Intel PSW

终端输入: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的服务。

三、Intel SGX开发环境配置检测

通过官方的检测文件,类似于其他语言的 Hello world

(1)进入安装目录/opt/intel/sgxsdk/SampleCode/SampleEnclave

终端输入:cd 回到主目录
终端输入:cd .. 回退到主目录上面的目录
终端输入:cd .. 再回退
终端输入:cd opt
终端输入:cd intel
终端输入:cd sgxsdk
终端输入:cd SampleCode
终端输入:cd SampleEnclave
若出现什么权限不够问题,就 chmod 777 文件夹 命令或者 su root 进入到root 用户下

(2)source一下开发环境

终端输入: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

  • 10
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 38
    评论
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值