云端Docker搭建ABY库以及本地CLion使用

Posted 不要做码农呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云端Docker搭建ABY库以及本地CLion使用相关的知识,希望对你有一定的参考价值。

文章目录

ABY的搭建以及使用

前言

  • 仅做记录,仅供参考,不同人有不同的使用方式
  • 命令手敲,可能有错,自己辨识
  • 勿问,我懂的也不多,瞎搞的

ABY库的下载、安装及测试

  • Github 官网
  • APT安装跳过
  • 推荐递归下载,下载后备份这个库,以防后面搞烂
    git clone --recursive https://github.com/encryptogroup/ABY.git
    cp -r ABY ABY_bak
    
  • 编译及安装(推荐安装到非标准位置)
    cd ABY
    mkdir build && cd build
    
    cmake .. -DCMAKE_INSTALL_PREFIX=""
    make
    mkdir /usr/local/ABY
    make DESTDIR=/usr/local/ABY install
    
  • 源码编译运行后有点问题需要修改,cmake_constants.h is not found #197,参考:配置OPPRF-PSI密码学协议
  • 安装后在/usr/local/ABY里有库文件啥的,但是make install安装后,再编译运行自己的程序或者样例程序就总报各种错,什么找不到relic啦之类的。所以我把/usr/local/ABY备份后删掉了,其实只是要里面的include目录而已。
    zip -r ABY_include.zip /usr/local/ABY/include		# 因为后面要在Windows下使用,用zip打包方便一点(而且我也不熟tar命令...)
    sz ABY_include.zip		# 可能需要安装lrzsz: apt install lrzsz(用xftp当我没说)
    
    # 改名或备份
    mv /usr/local/ABY /usr/local/ABY_bak
    rm -rf /usr/local/ABY		(要备份就备份吧,我备份了后面好像没什么用,初配建议还是备个份,推荐改名)
    
  • 回到ABY/build,清空build里的东西:rm -rf ./*
  • 测试(测不测由你,建议测测,熟悉下流程)
    • 返回ABY,修改CMakeList.txt:
    • 删掉最后的ABY_BUILDE_EXE,待会重新写一个
    • 删掉开头这个option(可选,删不删无所谓,反正用不到)
    • 在最后添加子目录,用于测试(测不测随你)
      add_subdirectory(src/ABY_TEST)
      
    • 你现在应该在ABY目录下,在src内有测试样例,但是很多,选一个出来测试。
      mkdir src/ABY_TEST
      cp -r src/examples/millionaire_prob/ src/ABY_TEST		# 把百万富翁的样例copy出来
      
    • 由于路径比之前样例里的百万富翁的样例少了一层目录,所以里面的cpp.h文件里的include路径需要少掉一层../,自己改就行,记得common路径里也有代码,也需要改
    • 直接在ABY目录下编译运行
      cmake .
      make
      
    • 顺利的话在bin目录内就能看到可执行文件,能跑通就算成功
  • 现在整个ABY目录下就算搭建好的框架了,建议在这里面做工作

CLion配置

  • CLion挂载到ABY目录,改下Mapping
  • 在CLion下测试,可以把百万富翁那个样例拉出来测试,同样注意路径问题,CMakeList自行修改,给个参考:
  • 跑通就算成功
  • 提一嘴,百万富翁这个例子需要输入参数,并且需要两个终端运行,CLion可以在配置出修改

后续

  • 到这里虽然程序跑通了,但是CLion没办法获取到ABY库的信息,代码处都是报红。之前试过,如果安装ABY库,也就是前面提到的安装到/usr/local/ABY,安装后CLion可以检索到ABY库,include不报错,代码不报红了,但是!跑不通了,程序运行的时候提示找不到那些package。
  • 权衡利弊,我最终选用的解决方案是,ABY库安装后从云端拉到本地,然后云端的ABY库删掉,这样程序就能顺利运行了。然后把下载到本地的ABY库里的include里的文件拷贝到项目下,然后把include <>的部分换成include "",这样代码就不会报错,程序也能正常运行。
  • 再提一嘴,把ABY的include里的文件拷贝到项目内后,可以设置这几个目录不同步到云端。还是在Deployment处,前面在Mapping设置过挂载的路径,在这里可以设置Excluded Paths

杂项

项目改名

  • CMakeList里project()可以修改项目名,原本是ABY,如果要改名的话,注意,在cmake路径下有一个文件:ABYConfig.cmake.in,如果只修改项目名的话,会报错找不到cmake.in文件,需要把ABYConfig.cmake.in文件改名为你的项目名Config.cmake.in

使用其他的库

  • 建议在ABY里面的CMakeList上改,加一些find_package()add_executable()target_link_libraries()应该是没什么问题的
  • 如果有其他的,建议一条一条加,加完cmake编译一下看看有没有问题,在保证使用其他库后也能用的情况下,能少加就少加,不然可能不兼容(血的教训),具体得自己去排雷
  • 下面这句是没问题的:
  • 下面这句就出问题了:

最后

  • 最终效果就是,Clion上代码显示正常,无报错,调试和运行也能在云端正常运行
  • 搭这玩意花了我两天,建议新手学下CMakeList,还得熟悉Clion与Docker的连接部署等操作,参考我的上一篇博客:Clion连接Docker,使用HElib库
  • 搭了两天后的记录,可能不太全面,只提供了大致的思路,细节方面需要自己去琢磨与尝试
  • 遇到其他问题也欢迎与我交流,看到就会回,不过每个人的需求不同,根据自己的需求搭环境

Docker:第七章:Docker搭建私服-本地镜像库

搭建场景:

项目场景:首先需要二台机器,一个是客户端,用来部署项目运行的机器;一个是私服,用来部署本地镜像仓库的,这二台机器都要安装配置好docker。

机器配置:

这里我买了一台阿里云的G5服务器作为私服,配置如下: 2核心8G内存80G云盘1M宽带 用来专门搭建gitlab,jenkins,以及docker私服绰绰有余
另外一台客户端也是阿里云的轻量应用服务器,配置如下: 1核心2G内存40G云盘1M宽带 用来部署测试项目

搭建流程:

二台机器都更换镜像源(因为默认的太慢了,国内的更快,网易的)

sudo vim /etc/default/docker

输入以下参数:

DOCKER_OPTS="--registry-mirror=http://hub-mirror.c.163.com" 

在阿里云G5私服上拉取仓库

docker pull registry 

然后查看镜像

sudo docker images

启动该容器

创建目录,这里以/opt/data/registry为宿主机存储的目录

mkdir -p /opt/data/registry

运行镜像,配置端口以及将容器内的数据映射挂载在自己指定的目录上

docker run -d -v /opt/data/registry:/var/lib/registry -p 5000:5000 --restart=always --privileged=true --name private_registry registry:latest

参数说明:

-d : 让容器可以后台运行
-itd:在容器中打开一个伪终端进行交互操作,并在后台运行;
-v:把宿主机的opt/data/registry目录绑定 到 容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了(前者是宿主机的端口号,后者是容器的端口号);
–restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;
–name private_registry:创建容器命名为private_registry,你可以随便命名;
registry:latest:这个是刚才pull下来的镜像;
如果成功执行,则表示我们的docker私有仓库搭建成功。
下面对这条命令的部分内容做下说明。
/registry表示宿主机目录,该目录如果不存在会自动创建。
docker -v 宿主机目录:容器目录

查看是否启动成功

sudo docker ps

这个时候镜像运行成功说明本地的镜像仓库就已经弄好了,是不是很快,别急,还要把自个的项目弄到本地镜像仓库上面去,到时候就可以直接通过命令拉取本地镜像仓库运行项目了,下面我以tomcat作为我们实际运行的项目为例。

在客户端制作tomcat镜像

 docker pull tomcat

这个时候,如果已经成功拉取tomcat之后,后面需要把我们客户端的tomcat推送到我们的私服上面去,到时候我们就可以直接通过私服拉取,而不是官方的docker hub,官方的私库需要自己去注册账号并且登录上去做操作,我们这里主要讲本地镜像仓库。那有同学可能会问了,服务器掉一个东西,肯定是需要登录或者给个什么密钥才能允许操作的呀,这就是后面我们要配置的东西了,docker私有仓库服务器,默认是基于https传输的,所以我们需要在客户端做相关设置,不使用https传输。

修改/etc/docker/daemon.json文件

vi /etc/docker/daemon.json

将私服的ip替换进去

{
        "registry-mirrors": ["https://njrds9qc.mirror.aliyuncs.com"],
        "insecure-registries":["你私服本地镜像仓库的ip:5000"]
}

重置配置

systemctl daemon-reload

重启docker

systemctl restart docker

制作属于自个的tomcat镜像

查看tomcat镜像id

docker images

开始制作:docker tag tomcat镜像id 私服本地镜像仓库的ip:5000/tomcat

#我的镜像id是b0e0b0a92cf9,ip我就不暴露了
docker tag b0e0b0a92cf9 私服ip:5000/tomcat

推送到私服本地镜像仓库上

docker push 私服ip:5000/tomcat

客户端(轻量)和服务器(G5)上分别执行curl -X GET http://私服ip:5000/v2/_catalog,查看私有仓库的镜像信息,都能见到相同的信息

curl -X GET http://私服ip:5000/v2/_catalog

{“repositories”:[“tomcat”]}

验证

在轻量服务器上删除tomcat镜像

docker rmi 私服ip:5000/tomcat tomcat

创建一个容器,映射8080端口

docker run --name tomcat001 -p 8080:8080 -idt 私服ip:5000/tomcat

使用轻量服务器的ip加端口访问8080,正常可以是不是会出现以下的页面

由于我们是一个新的服务器,所以出现了linux中docker安装tomcat,linux中tomcat访问404问题的情况

通过日志排查

dockerlogs -f mytomcat --tail=500

通过端口排查

docker port tomcat

进入docker运行的tomcat目录中

docker exec -it tomcat运行的id /bin/bash

通过命令

 ls -l

发现有一个webapps目录和webapps.dist目录
进入webapps目录并ls -l发现为空
进入webapps.dist目录发现root文件夹
接下来,删除webapps目录,更改webapps.dist目录名为webapps

rm -rf webapps
mv webapps.dist webapps

发现还是404,后面想起还有jdk没有安装

docker pull jdk

出现:Error response from daemon: pull access denied for jdk, repository does not exist or may require ‘docker login’: denied: requested access to the resource is denied
需要登录docker,这个其实也不用管了,因为已经出现tomcat欢迎页面了。
当然也可以继续登录进行,命令如下:

docker login

[root@ip ~]# docker login Login with your Docker ID to push and pull
images from Docker Hub. If you don’t have a Docker ID, head over to
https://hub.docker.com to create one. Username: 你docker登录名 Password:
你docker登录密码 WARNING! Your password will be stored unencrypted in
/root/.docker/config.json. Configure a credential helper to remove
this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded


总结:

博文介绍了Docker搭建私服-本地镜像库的具体实现,以tomcat为例演示,帮助大家快速理解上手。

以上是关于云端Docker搭建ABY库以及本地CLion使用的主要内容,如果未能解决你的问题,请参考以下文章

Docker:第七章:Docker搭建私服-本地镜像库

第三章:Docker搭建私服-本地镜像库

Docker搭建draw.io和GitLab,并配置GitLab作为draw.io存储服务器

使用gdbserver从clion调试jni库

DevOps和容器:本地or云端,如何选择?

Docker环境搭建与使用:docker的简介与架构以及安装docker