APSI——从Github源码到服务器部署demo(小白向)

本文记录一下github上的APSI源码是怎么跑起来的。本人废话比较多,提前致歉。

APSI安装

官网写的比较清楚:APSI的github源码
这里是安装编译教程
需要加快网速的话可参考ubuntu上安装clash

APSI是微软出品的用于隐私集合求交的C++库,可以用vcpkg下载相关依赖库。

$ git clone https://github.com/microsoft/vcpkg
$ ./vcpkg/bootstrap-vcpkg.sh

(其中bootstrap-vcpkg.sh很难运行成功,运行结果是得到可执行文件vcpkg。我当时的情况是直接在文件夹里右击运行最后成功了,也不知道怎么回事哈哈)
接下来用install命令安装apsi库:

$ ./vcpkg/vcpkg install apsi

这个过程中vcpkg会自动安装一堆依赖包,但是建议提前在vcpkg文件夹下新建downloads文件夹,安装他的报错提示提前放进去对应版本的cmake和ninja,总之他缺什么就提前下好往里放(注意ninja压缩包需要手动重命名成报错需要的那样)。
网上还有人说要注意Debug和Release版本改配置文件的,不过我觉得不要改。最后我的vcpkg库里和上面推荐教程里的截图相比少了测试工具,怀疑是因为我按Release版安装的。

APSI编译

首先新建个文件夹,把APSI在github上的源码git clone进来,然后按照这篇教程写的安装一些插件并配置vscode,主要是设置workspace的settings.json,让项目找到vcpkg.cmake。

{
    "cmake.configureSettings": {
      "CMAKE_TOOLCHAIN_FILE": "<path to vcpkg>/scripts/buildsystems/vcpkg.cmake",
      "VCPKG_TARGET_TRIPLET": "x64-linux"
    }
}

接下来的编译过程请见第一篇推荐的教程,或者直接往下看也行:
这位作者说要安装gtest和tclap,我也不知道到底有没有用,反正照他说的安装了。

./vcpkg install gtest tclap

关键是要修改CMakeLists.txt,如果你想用CLI的话:
在这里插入图片描述
Ctrl + ` 召唤终端,进行编译:

mkdir build
cd build
cmake ..
make

cmake过程中我也遇到了SEAL的报错,原因是我没装ZLIB库(这里的报错就还挺抽象,建议chatgpt)。
make完就是这样的,一片绿色,美极了:
在这里插入图片描述

APSI的CLI测试

微软很贴心地提供了一套命令行接口方便测试体验,怎么用第一篇推荐的教程也说得很清楚了。
主要就是tools/scripts/test_data_creator.py可用于生成CLI的测试数据,数据会放在build文件夹下:

python3 test_data_creator.py <sender_size> <receiver_size> <intersection_size> [<label_byte_count>] [<item_byte_count>]

三个必要参数
<sender_size>:表示发送方数据集的大小,生层数据文件db.csv,如果此文件已存在,将被覆盖。
<receiver_size>:表示接收方数据集的大小,生层数据文件query.csv,如果此文件已存在,将被覆盖。
<intersection_size>:表示db.csv和query.csv中共有的item数量,即规定交集大小。

两个可选参数
<label_byte_count>:表示db.csv中随机生成的label字节大小,如果省略,则db.csv中的数据是unLabeled的。
<item_byte_count>:表示item的大小,如果省略,则是64。
例如:

python3 ../tools/scripts/test_data_creator.py 10000 100 10 

然后要用两个终端分别运行sender和receiver端的命令,具体怎么用github讲的很清楚:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
还是按照那个教程给两个示例,要进/build/bin目录:
sender:

./sender_cli -d /Users/pam/Desktop/pam/APSI-main/build/db_10000_0_10_0_64.csv -p /Users/pam/Desktop/pam/APSI-main/parameters/1M-256.json -c -t 1

receiver:

./receiver_cli -q /Users/pam/Desktop/pam/APSI-main/build/query_0_100_10_0_64.csv -t 1 -o /Users/pam/Desktop/pam/APSI-main/build/test_0_100_10_0_64.csv

(PS:我用py脚本生成的文件名字是很朴素的db.csv和query.csv)
跑成功就是下图这样(比我自己手搓的两千行实现优美多了):
在这里插入图片描述

Docker镜像构建

首先给vscode安装docker插件,给ubuntu也装一下docker.io,终端找不到命令docker就会给安装提示的。

然后在项目目录下新建一个Dockerfile,写完记得保存一下文件:

# 使用一个基础镜像作为基础,可以选择合适的Ubuntu版本
FROM ubuntu:22.04

# 安装所需的系统工具和依赖项
RUN apt-get update && apt-get install -y \
python3 \
cmake \
g++ \
zlib1g-dev \
liblog4cplus-dev \
libzmq3-dev \ 
libjsoncpp-dev \
&& rm -rf /var/lib/apt/lists/*

# 设置容器的工作目录
WORKDIR /app

# 复制 APSI CLI 可执行文件到容器中
COPY /APSI/build/bin /app/

# 复制 Python 文件和测试数据生成脚本到容器中
COPY /APSI/tools/scripts /app/tools/scripts

# 复制 parameters 文件到容器中
COPY /APSI/parameters /app/parameters

# 生成测试数据
RUN python3 /app/tools/scripts/test_data_creator.py 10000 100 10

用以下命令生成名为 apsi-container 的Docker镜像,权限不够就加sudo:

docker build -t apsi-container .

可以用下面命令查看已有的镜像:

docker images

下面先在本机建立一个叫apsi-demo的容器测试一下,可以用下面的命令。要说明的是跑这个demo需要在同一个容器内开两个进程,而不是开两个容器分别运行sender和receiver。

docker run -it --name apsi-demo apsi-container /bin/bash -c "./sender_cli -d ./db.csv -p ./parameters/1M-256.json -c -t 1 & ./receiver_cli -q ./query.csv -t 1 -o ./res.csv & bash"

测试无误,我本想docker push的,但是咋都push不上去,遂把镜像docker save下来了,顺便也写下命令吧:

docker save -o <output_file.tar> <image_name>:<tag>

(这个镜像现在就压缩成tar了,但是很离谱的是即便给了777权限,该文件也无法以任何方式传走,包括微信文件传输助手、QQ邮箱、百度网盘还有未知原因失败的scp,解决方法是再打包一次成zip)

也给大家分享了一下我打包好的镜像zip,需要解压得到其中的apsi_image.tar,再使用以下命令,即可安装该镜像

docker load -i apsi_image.tar

有镜像以后再用上述建立容器并同时运行两个指令的命令即可测试。当然也可以先只创建容器:

docker run -it apsi-container

进去以后ls看看目录,可以先用那个py文件生成想要的测试数据,再测试双端交互。

(此时APSI已经能在服务器上用CLI测试了,教程记录已经结束,但我还是想叨叨几句过程中的不易下面的内容想放松摸鱼的朋友愿意看也可以看:
第一个难点是vcpkg的安装,哇github连不上我真的服啦!最后也是莫名其妙弄好的。
这期间我用了三台虚拟机。第一台虚拟机java相关内容比较多,内存不够了,我去扩了10G,您猜怎么着,直接打不开啦哈哈,怒删。第二台虚拟机上弄好了vcpkg库,结果vscode死活用不了,打包保存vcpkg库到主机。为了装第三台虚拟机,我删除了50G的还没玩完的游戏,也不敢再用ubuntu的简洁安装模式,上来先试试vscode,再把vcpkg包粘过来,重装clash,总算搞定啦,可喜可贺!虽然目前看来部署APSI对于项目毫无用处,但是我的工程能力增加了一点点点,面对乱七八糟的报错也不像以前那样暴躁了(感谢GPT),有进步,散会!)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值