文章目录
前言
MP-SPDZ 0.3.4版本集成了很多外部依赖库,包括libOTe等,在安装配置的时候可能会出现一些预想不到的问题,以此纪录MP-SPDZ的本地安装配置过程以及docker镜像的制作。
一、本机安装配置好docker
二、下载MP-SPDZ的官方版本
下载MP-SPDZ的官方发行版本,此次我使用的是0.3.4版本
Releases · data61/MP-SPDZ (github.com)
三、安装依赖库
在解压了spdz库后发现,deps文件中的几个依赖库都是空的,如果自己的电脑能够翻墙且网速足够快的情况下 可以在spdz根目录下 执行 make -j 8 tldr,将会自动git下来所需要的依赖库,但是如果网络不够理想,则会频繁的显示超时或者连接失败,报出一堆错误。这时候可以用以下方法:
打开makefile文件搜索git关键字,可以发现总共需要git 六次依赖库,需要git的依赖库包括,Circuits,SimpleOT,SimpleOT_C,libOTe,mpir,simde。
将makefile中有关git依赖库的代码进行注释,并将这些代码单独在命令行使用。例如在命令行执行
SimpleOT:
git submodule update --init deps/SimpleOT || git clone https://github.com/mkskeller/SimpleOT deps/SimpleOT
SimpleOT_C
git submodule update --init deps/SimplestOT_C || git clone https://github.com/mkskeller/SimplestOT_C deps/SimplestOT_C
Circuits
git submodule update --init Programs/Circuits || git clone https://github.com/mkskeller/bristol-fashion.git Programs/Circuits
mpir
git submodule update --init deps/mpir || git clone https://github.com/wbhart/mpir deps/mpir
libOTe
git submodule update --init --recursive deps/libOTe || git clone --recurse-submodules https://github.com/mkskeller/softspoken-implementation deps/libOTe
simde
git submodule update --init deps/simde || git clone https://github.com/simd-everywhere/simde deps/simde
四、安装boost库的最新版本
安装完上述依赖库之后如果直接执行 make -j8 tldr 则可能还会报一个错
解决办法是安装最新的boost库。
五、编译MP-SPDZ
做完上述操作后,则可以在MP-SPDZ的根目录下直接使用
make -j8 tldr
进行编译
耐心等待编译完成之后可以使用库中给出的demo进行验证。
./compile.py tutorial
echo 1 2 3 4 > Player-Data/Input-P0-0
echo 1 2 3 4 > Player-Data/Input-P1-0
Scripts/mascot.sh tutorial
使用make -j8 tldr编译过后可能并没有你所需要的协议,此时你可以使用以下命令来编译MP-SPDZ中所有的内容,这样会耗费比较长的时间。
make all
同时你也可以只针对你所需要的协议进行编译,例如
make -j 8 spdz2k-party.x
或者
make spdz2k-party.x
至此,MP-SPDZ在本地的安装配置就已经完成了。
六、build MP-SPDZ的docker镜像
频繁的配置MP-SPDZ非常麻烦,在新建的虚拟机上每次都要重新配置总会出现一些意想不到的问题,因此构建一个MP-SPDZ的docker镜像能解决不少麻烦。spdz中自带了dockerfile文件,但是在使用docker build 建立镜像的时候总是卡在第19步,make boost libote 总是会显示出错。我怀疑是因为路径的问题,需要把解压好的文件修改名称为MP-SPDZ并放在usr/src/目录下。但是我并没有尝试,下边是我自己的构建镜像的步骤
首先重新解压一个新的MP-SPDZ的文件,要求没有执行过以上编译。
然后修改Dockerfile文件如下
FROM python:3.10.3-bullseye as buildenv
RUN apt-get update && apt-get install -y --no-install-recommends \
automake \
build-essential \
clang-11 \
cmake \
git \
libboost-dev \
libboost-thread-dev \
libclang-dev \
libntl-dev \
libsodium-dev \
libssl-dev \
libtool \
m4 \
texinfo \
yasm \
vim \
gdb \
valgrind \
&& rm -rf /var/lib/apt/lists/*
ENV MP_SPDZ_HOME /usr/src/MP-SPDZ
WORKDIR $MP_SPDZ_HOME
RUN pip install --upgrade pip ipython
COPY . .
执行命令构建镜像
docker run -d -it mpspdz:buildenv bash
然后使用docker ps 查看容器是否成功启动。若成功则进入容器中。
docker exec -it xxx(你自己的容器名称或者容器id) bash
进入容器发现MP-SPDZ已经被拷贝进来了,接下来只需要重复上述标题三到五的操作就可以了。
总结
以上是有关SPDZ的配置过程,有问题欢迎大家评论区留言讨论。