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 ;
- 代理
- 安装代理
略。
- 设置代理
①在设置中选择网络--代理--手动设置代理。
②设置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,出现正确页面即可。
结束语:感谢文章中出现的链接,或是启发,或是直接解决了问题,感谢!