系统:Ubuntu20.04(双系统,非虚拟机)
- 一、解决node.js的版本问题
- 二、解决开启PCCS服务的问题
- 1、解决开启PCCS服务
- 2、解决访问本地的8081端口
本系列为笔者开发TEE(Trusted Execution Environment,可信执行环境)的踩坑文,给广大开发者分享自己的所谓的“经验”,希望对大家有帮助。
开发路线为:
- 装Ubuntu20.04的双系统(不展开,B站有很多教程)
- 配置SGX环境(前提是SGX机器,最好是SGX2)
- 配置PCCS(很蛋疼,英特尔官方github的步骤也未必行得通)
- 开发TEE(花的时间最多)
本篇文章分享配置PCCS的踩坑
笔者是在这篇文章的配置PCCS的基础上,结合chatGPT给出的解决方案去解决途中遇到的问题的。
部分读者可能会直接参考英特尔官方github的步骤来配置PCCS,但很明显,能特地搜这篇文章一定是遇到问题的,笔者猜测很可能是node.js版本的问题。并非笔者想黑,若按照他们官方给的步骤是无法顺利配置好PCCS的,而且官方回答issue给出的安装文档都是几年前的,甚至连Ubunt20.04的字眼都没出现过,最新的也就18.04(QAQ)
话不多说,配置PCCS的正确步骤如下:
一、解决node.js的版本问题
sudo su
apt-get install sgx-dcap-pccs
不出意外的话,一定会出意外的
安装了一堆东西之后,会出现以下关于node.js版本问题的报错
npm i nvm -g
cd /opt/intel/sgx-dcap-pccs
node -v
输出是v10.19.0
此时执行nvm install 18.17
或者nvm list
,输出都是如下
This is not the package you are looking for: please go to http://nvm.sh
执行
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
很显然,依然是nvm和node.js存在问题
source /home/<用户名>/.nvm/nvm.sh
再次执行
nvm list
不出意外应该是如下输出
再次执行
npm i nvm -g
再次执行
nvm install 18.17
不出意外应该能安装该版本的node.js
再次执行
nvm list
很明显,node.js版本已经默认为18.17.1
重新装一下PCCS
./cleanup.sh
./install.sh
不出意外的话,肯定会出现以下输出
!恭喜你已经迈过第一个小坎!
接下来的操作与一致英特尔官方的DCAP安装指南一致
这里温馨提示一下,PCS API key可以在这里订阅
输入主密钥或副密钥都可以
二、解决开启PCCS服务的问题
1、解决开启PCCS服务
此时执行
systemctl status pccs
不出意外的话,输出一定是白点的pccs.service和inactive的Active
执行
./startup.sh
再执行
systemctl restart pccs
systemctl status pccs
不出意外的话,pccs服务可以正常启动了
2、解决访问本地的8081端口
执行
curl -kv https://localhost:8081
不出意外的话,一定是无法访问的
这里千万要注意(血淋淋的教训):
一定不要以为是防火墙出问题而去执行sudo ufw allow 8081
因为一般的ubuntu系统如果你输入sudo ufw status
,输出是状态:不活动
,也就是说你的ubuntu是没有防火墙,所以你现在无法访问8081端口和防火墙没有半毛钱关系的。
不然上两张图里的pccs.service不仅会变成白点,而且还会出现新的报错,如下(笔者已经为大家踩过坑了)
执行
nano pccs_server.js
确保文件开头的import是import Config from 'config';
执行
npm ls config
确保有config
模块
如果没有的话,就安装一下
npm install config
修复一下权限问题
chmod -R 755 /opt/intel/sgx-dcap-pccs
执行
node pccs_server.js
在其他终端再次执行
curl -kv https://localhost:8081
如果输出是这样的话
!恭喜你已经迈过第二个小坎,已经完美地配置好PCCS了!
提示:本文配置PCCS仅供参考,因为每台机器的系统、预装的软件都不一样,而且大家能特地来看这篇文章,大概率是已经执行了英特尔官方的配置PCCS步骤遇到坎了,再来按照本文的步骤走不一定能获得一样的结果。