https://github.com/baidu/AnyQ

文章目录

  • 1. 风险警告
  • 2 直接linux安装
    • 1. 查看gcc版本
    • 2. 查看glibc库版本(其实这步可以不做。)
    • 3. 查看cmake及make版本
    • 4. bison安装和版本查看
    • 5. 其他依赖的安装和版本查看(python、java)
  • 3. docker安装
    • 3.1 基本安装
      • 3.1.1 基本安装
      • 3.1.2 编译
      • 3.1.3 修改hosts文件
      • 3.1.4 继续修改
      • 3.1.5 切换国内源
    • 3.2 打包成镜像
    • 3.3 意外惊喜
    • 3.4 不幸的事
      • 3.4.1 protobuffer的submodule问题
      • 3.4.2 xgboost文件夹问题
      • 3.4.3 make
  • 3. 问题记录
    • 3.1 问题和解决
      • 3.1.1 安装cmake
      • 3.1.2 bison安装报错
      • 3.1.3 java jdk安装
    • 3.2 参考:

1. 风险警告

写在前面——前置风险

  • 这个库并不像PaddleOCR那个库那么流行,维护更新那么及时。这个库——github-AnyQ,最近一次更新时间是2020.11.28。(这个库第一次提交是2018年7月2号,也有可能是因为经过两年的完善,没有更多人试出更多错误。。。)
  • 另外根据网上很多安装教程,最好使用docker安装,而且可能会由于gcc等的版本问题,安装失败,还可能会由于网络原因失败。
  • 另外,AnyQ这个库的迭代更新并不与PaddlePaddle一致,所以下载安装包的时候最好按照官方推荐来进行。
  • 网上没有特别多的资料,大部分只介绍了安装,也没有使用体验之类的,问问题的倒是有,但是解答问题的没几个,github的issue回复也没有paddleocr那么及时,虽然也有2.3k个star。
  • 同时查看了一下issue中一些内容,
    • 系统多并发时内存溢出 #105,这个并发问题是实际使用一个很严重的问题。
    • 如何动态增加语料? #211,这个问题也很可怕,这个东西毕竟不是产品,只是一个开源库,很多产品需要支持的功能它并没有。

2 直接linux安装

参考:
Linux系统上 编译安装百度开源AnyQ(非docker环境)

先确定一些基础组件的版本,官方文档推荐的是:

  • cmake 3.0以上(推荐3.2.2版本),
  • g++ >=4.8.2,
  • bison >=3.0

1. 查看gcc版本

gcc --version
> gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0

2. 查看glibc库版本(其实这步可以不做。)

# 使用的命令类似以下
strings /usr/lib64/libstdc++.so.6 | grep 'CXXABI'

如果报错strings: '/lib64/libc.so.6': No such file,那么需要注意:

  • 当前的目录,这个lib64可能会在根目录或者是当前用户目录下,自己切过去,查看一下,
  • 另外这个文件的名称可能也随着系统版本不一样而不同,自己ls看一下这个lib64目录下的以.so结尾的文件。
  • 如下所示
# 切换到根目录
cd /
# 切换到当前用户的home目录下
cd ~


整体如下:

(base) / > cd lib64
(base) /lib64 > ls
ld-linux-x86-64.so.2
(base) /lib64 > strings ld-linux-x86-64.so.2|grep GLIBC_
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_PRIVATE
GLIBC_TUNABLES# 另外,还可以直接以下面的代码查看版本
ldd --version
>ldd (Ubuntu GLIBC 2.27-3ubuntu1.4) 2.27
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.# 另外,捎带检测一下CXXABI版本
strings /lib64/ld-linux-x86-64.so.2| grep 'CXXABI'
# 什么都没有返回 没有这个库。。

可以看到,本机glibc的版本还挺高的,有三个版本,2.2.5,2.3以及2.4

glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万象。而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个操作系统。
所以新版本,旧版本都有。

3. 查看cmake及make版本

# linux编译使用的语句中用到了cmake和make
mkdir build && cd build && cmake .. && makecmake --version
# 上一句很可能报错 zsh: command not found: cmakemake -v # make这个命令默认倒是有的# 如果没有cmake,则需要进行安装,默认好像是没有的,只有make 可以查看3.1.1 安装cmake部分
cmake --version
> cmake version 3.20.6
CMake suite maintained and supported by Kitware (kitware.com/cmake).

4. bison安装和版本查看

GNU Bison 是一个通用的解析器生成器,它可以将注释的无上下文语法转换为使用 LALR(1) 解析表的确定性 LR 或广义 LR (GLR) 解析器。Bison 还可以生成 IELR(1) 或规范 LR(1) 解析表。一旦您熟练使用 Bison,您可以使用它开发广泛的语言解析器,从简单的桌面计算器中使用的解析器到复杂的编程语言。
Bison与Yacc向上兼容:所有正确编写的Yacc语法都可以在Bison上正常使用。熟悉Yacc的任何人都应该可以轻松使用Bison。您需要精通C,C ++或Java编程才能使用Bison。
Bison及其生成的解析器是可移植的,它们不需要任何特定的编译器。

直接进行安装,如果报错,参考 3.1.2 bison安装报错 解决

sudo apt-get install bison

反正安装完就会显示类似下面的信息

这里的版本是3.0.2,应该这个库不会频繁更新,AnyQ的要求是:bison >=3.0,符合要求。

5. 其他依赖的安装和版本查看(python、java)

python --version
> Python 3.8.5java -version
# 没有返回信息,说明ubuntu默认不带java,需要自己安装

要求中,jdk>=1.8,所以需要安装一下java/jdk。

截止到这里因某种不可抗力失败了。

3. docker安装

3.1 基本安装

参考:

  • 小白编译AnyQ-docker&linux[CentOs]——AnyQ系列之一
  • 百度 AnyQ 安装

3.1.1 基本安装

按照建议,去用centos的镜像搞,

(base) /ws/paddle21 > docker pull centos:centos7
centos7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987
Status: Downloaded newer image for centos:centos7
docker.io/library/centos:centos7
(base) /ws/paddle21 > docker images |grep centos
centos centos7     eeb6ee3f44bd   4 weeks ago     204MB
# 镜像好小,只有204MB,不容易docker run -itd --name centos-anyq -p 0.0.0.0:8888:8999 centos:centos7
# 这句话其实有问题,把容器放到后台执行了
docker exec -it centos-anyq /bin/bash
# 把容器放回到前台cd home/ # 切入home目录# 如果提示没有wget,就安装一下
yum -y install wget# 安装jdk
wget http://anyq.bj.bcebos.com/jdk-8u171-linux-x64.tar.gz
#解压
tar xzvf jdk-8u171-linux-x64.tar.gz
#添加路径
export PATH=`pwd`/jdk1.8.0_171/bin:$PATH##安装gccyum install -y gcc gcc-c++ make automake##安装cmake v3.3.2
wget https://cmake.org/files/v3.3/cmake-3.3.2.tar.gz
tar -zxvf cmake-3.3.2.tar.gz
##进入cmake目录,设置、编译、安装
cd cmake-3.3.2/
./bootstrap
# 就是这样执行这个命令的,最后会提示下面这句话
> CMake has bootstrapped.  Now run gmake.
gmake
gmake install    ##安装bison
yum install  -y bison  # 安装git
yum install -y git
# 设置上网代理
export  http_proxy="http://192.168.1.105:10809"
export  https_proxy="http://192.168.1.105:10809"
# 取消代理设置
unset http_proxy
unset https_proxy
# 安装anyQ
git clone https://github.com/baidu/AnyQ.git
# 不管设置或者不设置代理,都无法git clone这个项目# 那就直接下载安装包解压好了,反正也没啥区别cd ../# 之前在 cmake3.3.2目录里一直就没出来# 如果不小心忘了cd出来 就 mv AnyQ-master ../ 都移动出来就好了
wget https://github.com/baidu/AnyQ/archive/refs/heads/master.zip# 安装解压软件
yum install -y unzip zip# 解压到当前文件夹
unzip master.zipcd AnyQ-master/
mkdir build && cd build && cmake .. && make
# 等着编译就好了

3.1.2 编译

很不幸,在一开始的时候,这个东西就遇到了一个大困难

Scanning dependencies of target extern_zlib
[  0%] Creating directories for 'extern_zlib'
[  1%] Performing download step (git clone) for 'extern_zlib'
Cloning into 'extern_zlib'...
error: RPC failed; result=35, HTTP code = 0
fatal: The remote end hung up unexpectedly

这东西还是要走git clone

善意的提醒
接下来的cmake和make速度非常慢,建议在tmux中进行,不然可能会被中断。
但是centos的yum源里没有tmux,所以如果要使用的话,需要手动编译安装,相对麻烦。

tmux使用:

  • CentOS下Tmux安装和使用
  • 如何在Docker容器中运行tmux?
  • docker中使用screen报错 /bin/sh: 1: __git_ps1: not found

参考:百度 AnyQ 安装

其中cmake … && make 的过程是一个艰难的过程,但凡出现网络卡住的时候,可以ctrl+c中止,然后通过重新执行cmake … && make继续执行,直到完全成功

3.1.3 修改hosts文件

参考:Linux系统上 编译安装百度开源AnyQ(非docker环境)

配置github加速(可选操作)
我用的是更改hosts文件方法,如果你有更好的请告诉我,谢谢

所以这里不用代理,直接进行git clone,并不是无法下载,而是下载的很慢。。。
尝试修改一下hosts吧。

改了之后,比没改能好一点点,起码可以找到这个paddle的地址了

[  0%] Creating directories for 'extern_paddle'
[  1%] Performing download step (git clone) for 'extern_paddle'
Cloning into 'extern_paddle'...
fatal: unable to access 'https://github.com/PaddlePaddle/Paddle.git/': Failed connect to github.com:443; Connection timed out
Cloning into 'extern_paddle'...

这个需要重启网络服务,参考:centos解决bash: service: command not found 错误

yum list | grep initscripts
# 列出可以安装的源
> initscripts.x86_64                        9.49.53-1.el7_9.1              updates
yum install initscripts -y
# 然后安装就好,最后安装成功会提示:
> Complete!
# 安装好之后再进行网络重启
service network restart
# 或者下面这个命令都可以重启
/etc/init.d/network restart

依然很慢,似乎没什么作用。然后。。。反正都是老版本,为什么一定要去github上。
查看cmake文件,

以其中的paddle.cmake为例,可以看到:

去gitee上看看,https://gitee.com/paddlepaddle/Paddle,可以发现,也有这个版本(不用管链接里的大小写,这个无所谓)

改make文件,一个一个试一下。 只需要把github改成gitee即可。
果然,改了之后就开始动起来了

基本上paddle搞定了之后,后面的好像就会快很多。但是该错的还是会错

继续从github上转到gitee上,看能不能找到对应的库。不幸的是,基本都找不到,只能终止重来,不断尝试,希望哪次运气好,网络好一些。

发现其中有一个zlib,很久不更新了,而且确实有人把github上的项目转到gitee上,来提高国内下载的速度。。。考虑注册个账号,把那些项目转存过来??

对于zlib.cmake文件,将其中的git链接改为https://gitee.com/zeekim/zlib.git

但是对于大部分的库来说,还是只能不断去ctrl+C终止,然后再cmake .. && make重启。一卡就重来。

3.1.4 继续修改

我没有选择坐以待毙,而是继续折腾,找了好几个人收集的内容:
来自:

  • github访问加速-修改hosts文件
  • 2021-04-16 - Github访问加速 - 收集/实践
# windows 刷新IP配置
ipconfig /flushdns
# linux刷新service network restart
# 或者下面这个命令都可以重启
/etc/init.d/network restart
vi  /etc/hosts
13.127.152.42 codeload.github.com
151.101.88.133 github.map.fastly.net
151.101.88.133 favicons.githubusercontent.com
151.101.88.133 raw.github.com
151.101.88.133 raw.githubusercontent.com
151.101.88.133 camo.githubusercontent.com
151.101.88.133 cloud.githubusercontent.com
151.101.88.133 avatars.githubusercontent.com
151.101.88.133 avatars0.githubusercontent.com
151.101.88.133 avatars1.githubusercontent.com
151.101.88.133 avatars2.githubusercontent.com
151.101.88.133 avatars3.githubusercontent.com
151.101.88.133 user-images.githubusercontent.com
185.199.111.154 github.githubassets.com
52.69.239.207 api.github.com
52.74.223.119 gist.github.com# DNS Parsing speed for GitHub
140.82.113.3    github.com
185.199.108.153 assets-cdn.github.com
199.232.69.194  github.global.ssl.fastly.net

然后每次基本都可以按好一个,然后坏掉,然后重新cmake .. && make,继续搞。
随着你不断尝试,每次安好一个包,如下图变化


前面这个百分比进度会有变化,同时Built target XXX表示这个包是已经构建好的。正在一步步走向成功。

3.1.5 切换国内源

最后再extern_protobuffer这里一直卡住,

确认对应的gitee上有对应的github项目:https://gitee.com/mirrors/protobufsource


继续改protobuffer对应的cmake文件。
然后就可以找到咧

关于glog的安装,查看1.4的意外惊喜。glog搞完,显示下面的提示

继续安装,

boost的时候,开始下载文件了。。。等待。速度非常之慢,39M的文件,20k/s的下载。。。
数了一下,cmake/external文件夹中一共有18个.cmake文件,也就是要安装18个东西。。。确实挺漫长的。


根据参考的这几个网友的经验,这个东西编译下来,超级慢。。。而且网友似乎都是硬刚github,没有转到gitee或别的地方去。那就这样吧。

折腾下来,差不多从下午3点到

3.2 打包成镜像

这个东西按起来确实太复杂了,还是要稳一点,持久化一下,不然下次再来一遍也不知道还有没有这个运气。

同时为了也可以重新映射到其他端口,最好是将其保存成一个镜像。

# ctrl+C 终止刚刚的./run_server服务
# exit 退出容器# 容器中执行
[root@a14447576c14 build] #exit
> exit
# 服务器中执行
(base) /ws/huangshan/paddle21 > docker ps -a|grep centos
a14447576c14 centos:centos7 "/bin/bash" 4 days ago Up 4 days 0.0.0.0:8888->8999/tcp centos-anyq# 将刚刚安装配置好的anyQ容器保存为一个镜像
docker commit -m "FAQ anyq image" -a "huangshan" centos-anyq anyq/base
# centos-anyq 是要保存为容器的镜像名称
# anyq/base 是要保存的镜像名称# 然后等一会就好了
(base) /ws/huangshan/paddle21 > docker images |grep anyq
anyq/base  latest  526d859789e4   34 seconds ago   8.47GB
# 可以看到,虽然基础镜像centos只有400多MB,但是paddle就有这么大。。。

查看一下docker commit命令的帮助信息

(base) /ws/huangshan/paddle21 > docker commit --help
Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Create a new image from a container's changes
# 从容器的变化中创建一个镜像 options 和repository都是可选的,可以直接提交到本地docker列表中,不一定要建立一个有网络url链接的docker hub,供别人使用
Options:-a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")-c, --change list      Apply Dockerfile instruction to the created image-m, --message string   Commit message-p, --pause            Pause container during commit (default true)

搜索可知:容器可以保存为镜像!(可以不通过dockerfile构建镜像)


其他代码示例:

# 启动一个centos6.8的镜像
docker pull  centos:6.8
docker run -it -p 1022:22 centos:6.8  /bin/bash
# 将容器提交为镜像
docker commit brave_mcclintock  centos6-ssh
# 使用新的镜像启动容器
docker run -d -p 1122:22 centos6-ssh:latest /usr/sbin/sshd -D

所以重点就是要有一个本地的docker hub或者什么的,把这个容器存的镜像放到一定的位置上去。
或者另一个比较清晰的例子

$ sudo docker commit <当前运行的container id> <仓库名称>:<tag>
$ sudo docker save -o <仓库名称>-<tag>.img <仓库名称>:<tag>
# 示例如下:
$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
111111111111        222222222222        "/bin/bash"   5 minutes ago       Up 5 minutes                                       jello
$ sudo docker commit 111111111111 bash:1.0
$ sudo docker save -o bash-1.0.img bash:1.0

参考:

  • docker如何将运行中的容器保存为docker镜像?
  • Docker容器保存为镜像文件

3.3 意外惊喜

Gitee上有一个专题,就叫mirror,国内镜像的意思 ,https://gitee.com/mirrors

里面包含一些常用库的镜像,虽然有点卑微,但是十分感谢,直接进入仓库,进行搜索,例如:

就可以找到国内镜像咧,https://gitee.com/mirrors/glog,然后就可以继续去改cmake文件里的链接咧。

3.4 不幸的事

3.4.1 protobuffer的submodule问题

fatal: unable to access 'https://github.com/google/protobuf.git/': Encountered end of file
Cloning into 'extern_protobuf'...
fatal: unable to access 'https://github.com/google/protobuf.git/': Encountered end of file
Cloning into 'extern_protobuf'...
fatal: unable to access 'https://github.com/google/protobuf.git/': Encountered end of file
-- Had to git clone more than once:3 times.
CMake Error at /home/AnyQ-master/build/third_party/install/paddle/third_party/protobuf/tmp/extern_protobuf-gitclone.cmake:40 (message):Failed to clone repository: 'https://github.com/google/protobuf.git'make[5]: *** [third_party/protobuf/src/extern_protobuf-stamp/extern_protobuf-download] Error 1
make[4]: *** [CMakeFiles/extern_protobuf.dir/all] Error 2
make[3]: *** [all] Error 2
make[2]: *** [third_party/paddle/src/extern_paddle-stamp/extern_paddle-build] Error 2
make[1]: *** [CMakeFiles/extern_paddle.dir/all] Error 2
make: *** [all] Error 2

切换到/home/AnyQ-master/build/third_party/install/paddle/third_party/protobuf/tmp/extern_protobuf-gitclone.cmake 这个文件中,可以看到,如果出错,其实是会重新下载protobuf这个库的,所以还是要再改一遍。在这个文件里也改掉。

vi /home/AnyQ-master/cmake/external/protobuf.cmake
vi /home/AnyQ-master/build/third_party/install/paddle/third_party/protobuf/tmp/extern_protobuf-gitclone.cmake
https://gitee.com/mirrors/protobufsource
# try the clone 3 times incase there is an odd git clone issue
set(error_code 1)
set(number_of_tries 0)
while(error_code AND number_of_tries LESS 3)execute_process(COMMAND "/usr/bin/git" clone "https://github.com/google/protobuf.git" "extern_protobuf"WORKING_DIRECTORY "/home/AnyQ-master/build/third_party/install/paddle/third_party/protobuf/src"RESULT_VARIABLE error_code)math(EXPR number_of_tries "${number_of_tries} + 1")
endwhile()
if(number_of_tries GREATER 1)message(STATUS "Had to git clone more than once:${number_of_tries} times.")
endif()
if(error_code)message(FATAL_ERROR "Failed to clone repository: 'https://github.com/google/protobuf.git'")
endif()

改了之后还有个错误

Submodule 'third_party/benchmark' (https://github.com/google/benchmark.git) registered for path 'third_party/benchmark'
Cloning into 'third_party/benchmark'...
error: RPC failed; result=35, HTTP code = 0
fatal: The remote end hung up unexpectedly
Clone of 'https://github.com/google/benchmark.git' into submodule path 'third_party/benchmark' failed

可以看出来,错的是third_party/benchmark所以这部分出错对应的代码是:

execute_process(COMMAND "/usr/bin/git" submodule update --recursiveWORKING_DIRECTORY "/home/AnyQ-master/build/third_party/install/paddle/third_party/protobuf/src/extern_protobuf"RESULT_VARIABLE error_code)
if(error_code)message(FATAL_ERROR "Failed to update submodules in: '/home/AnyQ-master/build/third_party/install/paddle/third_party/protobuf/src/extern_protobuf'")
endif()

比较幸运的是,竟然搜到了一个一样的错误,哈哈哈,

  • git submodule update --init时报错:Failed to recurse into submodule path third_party/protobuf
  • cockroach(v20.2)源码编译

都是编译的时候出错,也都是因为github下载的问题。

所以要找一下对应于protobuf的git repo位置,其实就是上面提示的/home/AnyQ-master/build/third_party/install/paddle/third_party/protobuf/src/extern_protobuf这里。

 git branch
* (detached from v3.1.0)master

确认版本是3.1,但是3.1版本的.gitmodules文件并不在最外层,需要找一下.

参考:git submodule 的使用
git status,如果有第三方库,就会看到gitmodules文件(但是不知道为什么,之前就没看到)

[root@a14447576c14 extern_protobuf]# git status
# HEAD detached at 9f75c5a
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       deleted:    third_party/benchmark
#
no changes added to commit (use "git add" and/or "git commit -a")

其实可以看到目录下有

然后点进去改掉里面的url地址即可

[submodule "third_party/benchmark"]path = third_party/benchmarkurl = https://github.com/google/benchmark.git# url改为
https://gitee.com/mirrors/benchmark

修改之后,虽然显示的还是Submodule 'third_party/benchmark' (https://github.com/google/benchmark.git) registered for path 'third_party/benchmark' Cloning into 'third_party/benchmark',但是已经可以继续编译下去了,证明修改生效了。

[ 24%] Performing download step for 'extern_xgboost'
Cloning into 'xgboost'...
fatal: unable to access 'https://github.com/dmlc/xgboost.git/': Encountered end of file
make[2]: *** [third_party/xgboost/src/extern_xgboost-stamp/extern_xgboost-download] Error 128
make[1]: *** [CMakeFiles/extern_xgboost.dir/all] Error 2
make: *** [all] Error 2

3.4.2 xgboost文件夹问题

继续卡主了,考虑把这个文件也改成国内镜像好了,也确实找到了,https://gitee.com/mirrors/xgboost
改了源就好多了,贼快

但是这东西也有submodule,而且还有三个。。

Submodule 'cub' (https://github.com/NVlabs/cub) registered for path 'cub'
Submodule 'dmlc-core' (https://github.com/dmlc/dmlc-core) registered for path 'dmlc-core'
Submodule 'gputreeshap' (https://github.com/rapidsai/gputreeshap.git) registered for path 'gputreeshap'
Cloning into 'cub'...

也找找看,能不能改吧。cub太小众了,根本没有。就多试一次,或者再找点hosts,记得重启一下service。


重新打断再运行,继续出错:

[ 20%] Performing download step for 'extern_xgboost'
fatal: destination path 'xgboost' already exists and is not an empty directory.
make[2]: *** [third_party/xgboost/src/extern_xgboost-stamp/extern_xgboost-download] Error 128
make[1]: *** [CMakeFiles/extern_xgboost.dir/all] Error 2
make: *** [all] Error 2

文件夹删了重新运行。就是删除下面这个目录

/home/AnyQ-master/build/third_party/xgboost# 如果还在build目录下的话 就
rm -rf /third_party/xgboost

另外,参考:

  • make 发生错误 #192
  • 百度AnyQ的编译部署

如果多次编译开始报错:/data/xiaoyichao/projects/AnyQ/build/third_party/xgboost 的文件夹不为空这样的信息,则需要手动删除一下这个文件下的内容。

3.4.3 make

[ 18%] No patch step for 'extern_xgboost'
[ 19%] No update step for 'extern_xgboost'
[ 19%] No configure step for 'extern_xgboost'
[ 20%] No build step for 'extern_xgboost'
[ 20%] Performing install step for 'extern_xgboost'
Makefile:31: MAKE [make] - checked OK
# 然后下面报了一些warning,但是不影响,还是继续运行了


然后下载,等待。
然后就一屏幕一屏幕的输出信息,各种安装什么的。中间还是不断有新的包从github上clone,对网络的依赖非常高!


openssl

Scanning dependencies of target extern_leveldb
[ 32%] Creating directories for 'extern_leveldb'
[ 32%] Performing download step for 'extern_leveldb'
Cloning into 'leveldb'...
fatal: unable to access 'https://github.com/google/leveldb.git/': Encountered end of file
make[2]: *** [third_party/leveldb/src/extern_leveldb-stamp/extern_leveldb-download] Error 128
make[1]: *** [CMakeFiles/extern_leveldb.dir/all] Error 2
make: *** [all] Error 2

运气不好,网络就会一致报错

如果是 openssl报错,还是可以改cmake文件,转到gitee源进行下载。
https://gitee.com/mirrors/openssl

# 在build目录时,执行以下
vi ../cmake/external/openssl.cmake# 然后把链接替换为
https://gitee.com/mirrors/openssl.git

然后再执行,不然确实太慢了


bcpc
没有找到国内源。。

可以看到整体进度是60%了,虽然这个确实不好下载。。但是,等着吧。

试了大概7、8遍,才有反应。只能靠干等,也许下午5点github响应会好一些???

这个编译完之后又是大屏的输出信息,还有warning,没事,不管。也会不断显示进度,98%。。。。。

编译成功!


3. 问题记录

3.1 问题和解决

3.1.1 安装cmake

cmake安装参考

  • ubuntu16.04安装cmake3.14.2步骤
  • ubuntu18.04安装最新cmake3.15.2
  • ✅Ubuntu 18.04下安装最新CMake及CMake简单使用

先查看系统版本

(base) ~ ! > cat /proc/version
> Linux version 4.4.0-186-generic (buildd@lcy01-amd64-002) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12) ) #216-Ubuntu SMP Wed Jul 1 05:34:05 UTC 2020
(base) ~ > uname -a
> Linux ubuntu 4.4.0-186-generic #216-Ubuntu SMP Wed Jul 1 05:34:05 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

看到自己本地的系统是16.04,根据自己的系统版本去找对应的安装方式。

cmake网站链接:https://cmake.org/download/,

  • 截止到2021.10.14,cmake已经到了3.21.3,建议的是 cmake 3.0以上(推荐3.2.2版本)
  • 参考其他博客,安一个新的应该没啥问题。
  • 从官网中下载Binary distributions版本的,该版本是编译过的,下载后解压就可以用。

# 下载3.20.6的版本,其实都是从github上下载的,所以可能会有些慢。
wget https://github.com/Kitware/CMake/releases/download/v3.20.6/cmake-3.20.6-linux-x86_64.tar.gz# 解压
tar zxvf cmake-3.20.6-linux-x86_64.tar.gz# 解压后可以稍微查看一下这个文件夹的内容
tree -L 2 cmake-3.20.6-linux-x86_64


bin下面有各种cmake家族的产品程序。

然后为了让系统可以找到cmake命令,有两种方式

  1. 修改配置(这里有一定的隐患,我目前用的zsh的shell,而不是bash的shell)

    # 打开个人path配置
    vim~/.bashrc# 在末尾添加如下的内容
    export PATH=/home/hsn/cmake-3.15.2-Linux-x86_64/bin:$PATH# 接着在终端source一下.bashrc文件让path立即生效
    source ~/.bashrc
    
  2. 创建软链接(还是直接把这个cmake软件放到系统默认目录下好了)
    # 这里注意路径
    mv cmake-3.20.6-linux-x86_64 /opt/cmake-3.20.6
    # 注意 上面命令执行一次,那个文件夹就移动走了,可能需要sudo执行
    cd /opt
    ls
    # 就可以看到转移后的情况了
    # 然后创建软链接 可能也需要 sudo
    ln -sf /opt/cmake-3.20.6/bin/*  /usr/bin/
    

配置好了之后,使用cmake --version看一下

cmake --version
> cmake version 3.20.6
CMake suite maintained and supported by Kitware (kitware.com/cmake).

3.1.2 bison安装报错

dpkg: error processing package ppp (–configure): subprocess installed post-installation script ret

这主要是由于不完全安装导致的。解决方式是删除或编辑安装信息文件。

update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
insserv: Service gdm has to be enabled to start service pppd-dns
insserv: exiting now!
update-rc.d: error: insserv rejected the script header
dpkg: error processing package `ppp` (--configure):subprocess installed post-installation script returned error exit status 1
Setting up m4 (1.4.17-2ubuntu1) ...
Setting up libbison-dev:amd64 (2:3.0.2.dfsg-2) ...
Setting up bison (2:3.0.2.dfsg-2) ...
update-alternatives: using /usr/bin/bison.yacc to provide /usr/bin/yacc (yacc) in auto mode
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for install-info (6.1.0.dfsg.1-5) ...
Errors were encountered while processing:ppp
E: Sub-process /usr/bin/dpkg returned an error code (1)

参考:

  • dpkg: error processing package bluez (–configure) 解决方法
  • dpkg: error processing package *** (–configure)错误解决办法

$ sudo mv /var/lib/dpkg/info/ /var/lib/dpkg/info_old/
# 移动到别的新房
$ sudo mkdir /var/lib/dpkg/info/
# 新建一个文件
$ sudo apt-get update
# 重新安装素有的
$ sudo apt-get -f install
# 上面那步执行完就是下面的截图,安装bison时,出错时候的依赖包是 ppp
$ sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info_old/
# 把新生效的都移回去
$ sudo rm -rf /var/lib/dpkg/info
# 删除刚刚建的用作临时操作的文件夹
$ sudo mv /var/lib/dpkg/info_old/ /var/lib/dpkg/info/
# 再整个都移回来

3.1.3 java jdk安装

  • 但是并不建议直接修改配置文件,
sudo add-apt-repository ppa:openjdk-r/ppa
> sudo: add-apt-repository: command not foundsudo apt-get install software-properties-common
# 为了使用 命令sudo apt-get update

参考:

  • ✅ Linux之Ubuntu18.04安装Java JDK8的三种方式
  • ✅Unable to locate package错误解决办法以及jdk的切换
  • Ubuntu安装java
  • Ubuntu 18.04 安装java8

3.2 参考:

  • 这个人博主应该是AnyQ的维护人员之一,issue上放的解决方案就是他的博客:AnyQ如何配置solr动态读取数据库——AnyQ系列之二
  • CSDN专栏(主要就是使用AnyQ的):问答-开源问答系统
  • CSDN博客:搭建AnyQ
  • 知乎文章:II AnyQ对话框架的安装与运行
  • 机器之心文章:百度开源 FAQ 问答系统—AnyQ

百度AnyQ之一——基于docker进行安装相关推荐

  1. 基于Docker容器安装nginx

    基于Docker容器安装nginx (1)在Docker仓库中搜索Nginx镜像 docker search nginx (2)从Docker仓库中下载Nginx镜像 docker pull dock ...

  2. 基于docker安装tensorflow

    最近在自学机器学习,大热的Tensorflow自然不能错过,所以首先解决安装问题,为了不影响本地环境,所以本文基于Docker来安装Tensorflow,我的环境是Ubuntu16.04. 安装Doc ...

  3. Centos系统基于Docker安装tensorflow

    要基于Docker安装tensorflow,当然首先要安装Docker了,下面先说安装Docker的步骤 1.  首先卸载电脑上可能存在的老的版本,如果没有安装过可以不执行 $ sudo yum re ...

  4. docker host模式拿到nginx远程ip端口_FastDFS基于Docker安装,免采坑版

    暂且不说Docker在生产环境的性能如何,单就在学习新技术的过程中能够快速构建环境这一项来说,就值得推荐你尝试使用.本文带大家基于Docker来安装FastDFS服务. 即便你对FastDFS的安装不 ...

  5. 日志收集平台Graylog2以及Nxlog的安装与配置(基于docker)

    graylog 安装配置 OS:CentOS7 64 基于Docker的安装 graylog 官网 docker 安装 Persist log data mkdir -p /graylog/confi ...

  6. Redis第一话 -- Redis介绍以及基于Docker安装Redis

    随着缓存技术的发展,Redis已经成为了工作中使用的最多的缓存技术了. 那么对Redis的了解肯定是必不可少的. 1.Redis介绍 Redis是基于C语言开发的纯内存存储KV结构的一个数据库.获取数 ...

  7. 自动化代码审查平台: 基于Docker Compose整合Jenkins + SonarQube

    目录 代码审查平台 本文目标 环境要求 系统环境 组件服务版本 前言 代码评审 SonarQube简介 概述 部署流程 检查系统参数 设置系统参数 拉取代码 进入文件目录 创建数据卷目录 部署文件信息 ...

  8. emqtt数据存储mysql_基于Docker部署MQTT Broker(emqtt、EMQ)

    使用MQTT需要用到对应的Broker,这里以EMQ为例,基于docker进行安装.在执行以下操作之前,需要先在本机安装好docker,如果有权限限制,可在下面docker命令前添加sudo来获取执行 ...

  9. 基于Docker的Hadoop完全分布式安装

    之前安装Hadoop是用VMWare创建虚拟机,然后安装伪分布式,因为虚拟机太慢,太卡,实在没有玩下去的心情了,现在想到Docker可以实现虚拟化,看看能不能安装Hadoop,网上查了查,果然可以,并 ...

最新文章

  1. 西安java招聘_西安招聘 | 陕西安控科技公司招聘(员工宿舍、节日福利、餐补)...
  2. ios第三方库和工具类
  3. ORACLE相关的SHELL编程
  4. 计算机二级aoa软件_国产软件WPS进入全国计算机二级考试 明年3月实施
  5. 关于Android studio3.0的坑之butterknife 7.0.1(低版本)
  6. html如何太假icon图标,CSS3 icon font完全指南(CSS3 font 会取代icon图标)
  7. 宇宙大爆炸是不是一个黑洞的大爆炸?
  8. 谈谈数据传输中的安全性
  9. 八、JVM视角浅理解并发和锁
  10. 数字信号上下采样对频谱影响,以及如何添加相应滤波器
  11. Android机顶盒adb调试及一直显示offline的处理
  12. 23是android版本几,关于sdk=23的android版本权限的问题
  13. Directshow完整介绍
  14. 打开设备管理器的快捷方式
  15. Python imp的代替
  16. 计算机毕业设计Java教师继续教育(源码+系统+mysql数据库+lw文档)
  17. 《阿猫阿狗2》简体版终于出了
  18. 视频水平翻转,制作视频像照镜子一样反方向
  19. html5 dreamlive,熠熠闪耀的ENSEMBLE! DREAM LIVE 5th Tour Stargazer即将开演
  20. 新来的CTO禁止前后端分离,而且还说了一大堆优缺点!

热门文章

  1. CBK商学院:大师并非遥不可及,再走三天而已
  2. Java实现人脸登录、注册等功能【完整版】
  3. TypeScript里应该尽量用#代替private
  4. OPPO连续点击android版本9,oppo游戏中心下载安装正版
  5. 通过动态NAT实现内网访问外网,通过静态NAT实现外网访问内网的WEB服务器(Cisco)
  6. 【UE4 第一人称射击游戏】07-添加“AK47”武器
  7. 量子计算机人类科技的极限,人类科技的极限——量子计算机
  8. 【NewTek Connect】Studio Monitor无法获取NewTek Connect内容的问题
  9. 美式期权定价方法之最小二乘蒙特卡洛模拟(LSM)
  10. springboot集成普罗米修斯