安装配置MP-SPDZ以及创建MP-SPDZ库的docker镜像

文章目录


前言

MP-SPDZ 0.3.4版本集成了很多外部依赖库,包括libOTe等,在安装配置的时候可能会出现一些预想不到的问题,以此纪录MP-SPDZ的本地安装配置过程以及docker镜像的制作。


一、本机安装配置好docker

docker安装配置参考:快速安装docker和docker-comopose

二、下载MP-SPDZ的官方版本

下载MP-SPDZ的官方发行版本,此次我使用的是0.3.4版本 

mp-spdz-0.3.4.tar.xz

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库。 

参考: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的配置过程,有问题欢迎大家评论区留言讨论。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值