onlyoffice aarch64编译

OnlyOffice  ARM64编译

  • 编译环境

1、系统环境

银河麒麟v10 sp1.要确保libc.so.6的版本大于等于2.29;可以执行以下命令查看:

Cd /lib/aarch64-linux-gnu

ls -l libc.*

可以去麒麟系统的官网下载该系统:https://www.kylinos.cn/support/trial.html?trial=5540。这里要选择自己对应的cpu,像本机就是飞腾。

也可以用镜像:leechm/kylin:v10-desktop-20210820.GFB。

镜像需要换源:vi /etc/apt/sources.list

deb http://archive.kylinos.cn/kylin/KYLIN-ALL 10.1 main universe multiverse restricted

deb http://archive2.kylinos.cn/deb/kylin/production/PART-V10-SP1/custom/partner/V10-SP1 default all

删掉etc/apt/sources.list.d下面的文件夹。

2、编译要求

CPU dual core 2 GHz or better

RAM 2 GB or more

HDD at least 40 GB of free space

Additional requirements at least 4 GB of swap

实际操作中,空闲盘符的大小至少是80G。建议至少选用256G硬盘,且初始化系统时分盘符,不用给系统多大,尽量给个人的空间150G。

3、操作要求

使用时,不要直接执行sudo apt-get update;sudo apt-get install;这一类的全局更新安装的命令,可能会导致apt冲突,然后无法执行任何apt命令。也尽量避免安装过的再跟新安装。Python一般都有,这里再安装一个git就行了

Sudo apt-get install git ;

  • 代理
  1. 安装代理

略。

  1. 设置代理

①在设置中选择网络--代理--手动设置代理。

②设置git代理(普通用户也设置,不然检出个别代码有问题):

sudo git config --global http.proxy http://127.0.0.1:7890

sudo git config --global https.proxy https://127.0.0.1:7890

git config --global http.proxy http://127.0.0.1:7890

git config --global https.proxy https://127.0.0.1:7890

③设置全局代理(curl也是用这个的)

sudo export http_proxy=http://127.0.0.1:7890

sudo export https_proxy=http://127.0.0.1:7890

export http_proxy=http://127.0.0.1:7890

export https_proxy=http://127.0.0.1:7890

Export ALL_PROXY=socks://127.0.0.1:7891

Export all_proxy=socks://127.0.0.1:7891

取消git代理:

git config --global --unset http.proxy

git config --global --unset https.proxy

查看git代理:

git config --global --get http.proxy

git config --global --get https.proxy

如果curl不能访问的话,请参考这里再设置一下:

https://www.coder.work/article/4020694

https://www.cnblogs.com/panxuejun/p/10574038.html

     curl --proxy "http://user:pwd@1.0.0.1:8090" "http://httpbin.org/ip"

  • 编译工具(参考:

https://helpcenter.onlyoffice.com/installation/docs-community-compile.aspx)

创建空文件夹,例如

mkdir /hom/allbuild ;

检出onlyoffice的编译工具

git clone https://github.com/ONLYOFFICE/build_tools.git

cd build_tools/tools/linux

vi ./automate.py

修改注释几个已经安装的软件,比如cmake,要注释掉;

export DEPOT_TOOLS_UPDATE=0;这个是v8编译用的,待会会用到。

然后执行./automate.py server。

执行完成后,会有deploy.py里面的报错,说复制的文件夹不存在和删除的文件夹不存在,不用管他,去build_tools文件夹的同级目录下会有一个out文件夹。这就是我们的输出文件。然后按照本节大标题中的网址继续操作即可(https://helpcenter.onlyoffice.com/installation/docs-community-compile.aspx);

  • 问题及解决

1、dpkg: 清理时出错:

 已安装 cmake-data 软件包 post-installation 脚本 子进程返回错误状态 255

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

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

解决:重装系统,在automate.py里面不要install  cmake等常见的软件。

2、Error: Command 'vpython v8/build/linux/sysroot_scripts/install-sysroot.py --running-as-hook' returned non-zero exit status 1 in /home/dai/allbuild/core/Common/3dParty/v8

Unrecognized host arch: aarch64

修改v8.py,注释掉clean,然后修改deps文件的235、236行:参考依据是:https://bbs.huaweicloud.com/blogs/detail/148360

同时注释掉这部分:

 #{
  #  "name": "gn_linux",
  #  "pattern": ".",
  #  "action": [ "download_from_google_storage",
  #              "--no_resume",
  #              "--platform=linux*",
  #              "--no_auth",
  #              "--bucket", "chromium-gn",
  #              "-s", "v8/buildtools/linux64/gn.sha1",
  #  ],
  #},

这是为了防止后面手动cp的gn文件被替换。

3、OSError: [Errno 8] 可执行文件格式错误: '/home/dai/allbuild/core/Common/3dParty/v8/v8/buildtools/linux64/gn'

Error (gn): 1

解决:下载编译ninja和gn。参考依据(https://v8.dev/docs/compile-arm64

mkdir /home/ninja ;

cd ninja ;

git clone https://github.com/ninja-build/ninja.git

Apt-get install re2c

./configure.py --bootstrap

export PATH=/home/dai/ninja:$PATH

sudo cp /home/ninja/ninja   \ /home/allbuild/core/Common/3dParty/v8/depot_tools/ninja-linux-aarch64

Vi /home/allbuild/core/Common/3dParty/v8/depot_tools/ninja

修改如下(31~21行):

加一个case

aarch64)

        exec "${THIS_DIR}/ninja-linux-aarch64" "$@";;

编译gn:

不要用最新版gn,会报错:

ERROR at //build/config/BUILDCONFIG.gn:495:1: Unknown function.

set_sources_assignment_filter(sources_assignment_filter).因为这个函数随着gn的更新,已经在2020年废弃了。

去github找一个至少2年前的。

git clone  https://github.com/wangzq0807/gn.git

cd gn

Sudo apt-get install clang;

python build/gen.py

ninja -C out

如果这一步有问题,比如clang++找不到,可以vi build/gen.py 将clang++全部替换成g++

sudo cp ./gn /home/allbuild/core/Common/3dParty/v8/v8/buildtools/linux64/

修改/home/build_tools/scripts/core_common/modules/v8.py如下:

os.chdir("v8")

  print("target_cpu changed ...")

  base_args64 = "target_cpu=\\\"arm64\\\" v8_target_cpu=\\\"arm64\\\" v8_static_library=true is_component_build=false v8_use_snapshot=false"

  base_args32 = "target_cpu=\\\"x86\\\" v8_target_cpu=\\\"x86\\\" v8_static_library=true is_component_build=false v8_use_snapshot=false"

  if config.check_option("platform", "linux_64"):

    base.cmd2("gn", ["gen", "out.gn/linux_64", "--args=\"is_debug=false " + base_args64 + " is_clang=" + "true "+" clang_base_path=\\\"/usr/\\\" "+" treat_warnings_as_errors=false " +"clang_use_chrome_plugins=false" + " use_sysroot=false treat_warnings_as_errors=false\""])

base.cmd("ninja", ["-C", "out.gn/linux_64","-j","8"])

4、ERROR: Sub-project qmake file '/home/dai/allbuild/build_tools/../desktop-sdk/ChromiumBasedEditors/videoplayerlib/videoplayerlib.pro' is not exists.

修改build_tools的build.pro第15行:

注释掉。

5、Warning: Error: /home/allbuild/web-apps/build/node_modules/optipng-bin/vendor/optipng: 1: @@8�@@@@@@@�@@@@����: not found

重新编译optipng

下载:https://sourceforge.net/projects/optipng/

./configure --prefix=/opt/runtime/opting 

make

报错如下:

https://sourceforge.net/p/libpng/bugs/230/

修改

${HOME}/opencv-3.3.1/3rdparty/libpng/pngpriv.h

 128 /*#  if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \*/

 129 #   if defined(PNG_ARM_NEON) && (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \

然后make clean 然后make。然后cp到该目录即可。

6、WARN @apideck/better-ajv-errors@0.2.7 requires a peer of ajv@>=8 but none is installed. You must install peer dependencies yourself.

npm install ajv。没解决

7、SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm64"})

npm install copy-webpack-plugin --save dev。没解决

8、"/var/run/postgresql/.s.PGSQL.5432"上准备接受联接?

export LD_LIBRARY_PATH=/usr/lib/postgresql/12/lib

sudo service postgresql start

这里,新安装时会出现如下内容:

重新安装postgresql后出现:

/usr/lib/postgresql/12/bin/initdb -D /var/lib/postgresql/12/main --auth-local peer --auth-host md5

  成功。您现在可以用下面的命令开启数据库服务器:

    pg_ctlcluster 12 main start

Ver Cluster Port Status Owner    Data directory              Log file

12  main    5432 down   postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log

如果有错误日志写的很明白,说时key的权限不对,这里应该降低它的权限,按照报错的提示赋予他只读权限即可。

权限命令理解参考:https://www.cnblogs.com/koudaiyoutang/p/12168028.html

  • 部署

将build_tools/out/linux_64/onlyoffice文件夹,放到/var/www/下面即可完成部署。

然后重新执行Generate fonts data中的步骤,注意父目录不应该时out了,应该是/var/www/onlyoffice/documentserver/

如果部署在docker,参考启动脚本如下:

=====start.sh====

#!/bin/bash

echo nginx      start...

sudo service nginx start

echo postgresql start...

service postgresql start

echo rabbitmq   start...

service rabbitmq-server start

echo converter  start...

cd /var/www/onlyoffice/documentserver/server/FileConverter/

LD_LIBRARY_PATH=bin NODE_ENV=development-linux NODE_CONFIG_DIR=../Common/config ./converter > dai-con.log &

echo docservice start...

cd /var/www/onlyoffice/documentserver/server/DocService/

NODE_ENV=development-linux NODE_CONFIG_DIR=../Common/config ./docservice > dai-doc.log &

echo all start end...

  • 测试验证

访问http://你的地址:80/welcome,出现正确页面即可。

结束语:感谢文章中出现的链接,或是启发,或是直接解决了问题,感谢!