在arm64平台kkfileview和LibreOffice的编译使用
因项目上需要在arm64平台使用kkfileview,然后发现在arm平台没有kkfileview需要的LibreOffice
所以自己手动编译了一个,在这里记录和分享下(用的docker镜像的方式启用的,镜像基于ubuntu:20.04)
1、手动编译LibreOffice
在官方下载的最新的源代码,也可以往下翻一点,有个历史版本,根据自己需要下载对应的版本源码
地址:点我跳转
1.1在arm64的机器上启动一个docker镜像
-v 挂载存放刚刚下载的源代码的目录,根据自己的来
docker run -dit --name office-build -v /tmp/down/:/data/ ubuntu:20.04
docker exec -it office-build /bin/bash
现在已经进入docker镜像里了
装一个vim
apt update && apt install -y vim
进入目录,开始编译
cd /data/
ls
cd libreoffice-7.3.1.3
进入了代码目录
首先根据自己需要,自定义一些编译选项
选项写在autogen.input文件里,这个文件代码里没自带,需要我们自己创建,写入
vim autogen.input
完整的编译配置选项及其含义,见源代码根目录下的configure文件。(也可以自行百度,这里不赘述)
这里我们只需要3个选项,粘贴进去,保存
第一个是中文选项
第二个是第三个必须的
第三个是会自动生成deb的安装包
--with-lang=zh-CN
--enable-epm
--with-package-format=deb
接下来安装相关依赖(重要:官方源比较慢,网不好的需要切到国内源)
切换命令:
sed -i 's#ports.ubuntu.com#mirrors.tuna.tsinghua.edu.cn#' /etc/apt/sources.list && apt-get clean && apt-get update
./install_deps.sh
会耗时较久,现在,休息一下,哈哈🤣
完成后运行
./autogen.sh
如果不出意外的话,会出现如下提示
****************************************************************************
To build, run:
/usr/bin/make
To view some help, run:
/usr/bin/make help
After the build has finished successfully, you can immediately run what you built using the command:
instdir/program/soffice
If you want to run the smoketest, run:
/usr/bin/make check
出现上面那段说明环境准备好了,可以编译了
make
然后就等就完事了,这个也比较耗时
,喝杯茶,走走逛逛,休息下
ok,编译完成
现在,我们宿主机刚刚下载的源代码目录里面就有编译好的相关文件了
再开一个终端
进入编译后文件地址(根据自己实际地址来)
cd /tmp/down/libreoffice-7.3.1.3/instdir
ls
这里面就是编译后生成的东西了( program里面就是我们需要的arm64的可运行程序)
CREDITS.fodt help LICENSE LICENSE.html NOTICE presets program readmes sdk share user
如果当时在autogen.input文件中有定义需要deb或rpm安装包的
地址在(根据自己实际地址来)
cd /tmp/down/libreoffice-7.3.1.3/workdir/installation
这里面就是deb的包了
/tmp/down/libreoffice-7.3.1.3/workdir/installation/LibreOfficeDev/deb/install
编译完成,可以关掉这个镜像了,不管也行,下面是deb包安装遇到的错误
重要:实际测试用deb包会报错,暂时不知道原因,知道的大佬可以告知下
用deb包安装完后,/opt目录下会出现文件夹,进到program就有生成的二进制文件
报错如下:
root@0353f6933e07:/opt/libreofficedev7.3/program# ./soffice
Failed to open display
terminate called after throwing an instance of 'com::sun::star::deployment::DeploymentException'
Unspecified Application Error
root@0353f6933e07:/opt/libreofficedev7.3/program#
直接跑二进制就不会出现问题
root@0353f6933e07:/opt/libreofficedev7.3/program# cd /data/libreoffice-7.3.1.3/instdir/program/
root@0353f6933e07:/data/libreoffice-7.3.1.3/instdir/program# ./soffice
Failed to open display
2、开始编译kkfileview的docker镜像
我这里说下dockerfile注意事项
1、换源的那行需要修改下
我用的
RUN sed -i 's#ports.ubuntu.com#mirrors.tuna.tsinghua.edu.cn#' /etc/apt/sources.list
2、java版本需要修改,默认的是x64的
可以用openjdk,或者自己去其他地方下载arm的java
RUN apt install openjdk-8-jdk
3、用了openjdk后无需设置java的环境变量,会自动设置好
4、不要使用官方dockerfile的安装 libreoffice方式,使用copy的方式把东西复制进去
然后设置下libreoffice的home地址
COPY libreoffice-7.3.1.3 /opt/libreoffice-7.3
ENV KK_OFFICE_HOME /opt/libreoffice-7.3
5、安装运行需要的包
RUN apt-get update && apt install -y libxinerama1 libcairo2 libcups2 libx11-xcb1 libxslt1-dev
其他的就跟原版的差不多,复制过来改改就完事了
我这里贴一下我自己的dockerfile,由于是项目内部的东西,地址有删除,jdk有不同,各位可看情况修改
FROM ubuntu:20.04
ADD server/target/kkFileView-*.tar.gz /opt/
COPY fonts/* /usr/share/fonts/chinese/
RUN sed -i 's#ports.ubuntu.com#mirrors.tuna.tsinghua.edu.cn#' /etc/apt/sources.list &&\
apt-get clean && apt-get update &&\
apt-get install -y locales && apt-get install -y language-pack-zh-hans &&\
localedef -i zh_CN -c -f UTF-8 -A /usr/share/locale/locale.alias zh_CN.UTF-8 && locale-gen zh_CN.UTF-8 &&\
apt-get install -y tzdata && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\
apt-get install -y libxrender1 && apt-get install -y libxt6 && apt-get install -y libxext-dev && apt-get install -y libfreetype6-dev &&\
apt-get install -y wget curl && apt-get install -y ttf-mscorefonts-installer && apt-get install -y fontconfig &&\
apt-get install ttf-wqy-microhei &&\
apt-get install ttf-wqy-zenhei &&\
apt-get install xfonts-wqy &&\
cd /tmp &&\
# 安装armjdk (根据自己的来,或者用openjdk,命令为RUN apt install openjdk-8-jdk)
curl -fL "根据自己的来,我这里用的内部修改了的jdk,不方便放出" -o jdk的名字.tar.gz &&\
tar -zxf /tmp/jdk的名字.tar.gz && mv /tmp/jdk的名字 /usr/local/ &&\
# 安装 OpenOffice
# wget https://kkfileview.keking.cn/Apache_OpenOffice_4.1.6_Linux_x86-64_install-deb_zh-CN.tar.gz -cO openoffice_deb.tar.gz &&\
# tar -zxf /tmp/openoffice_deb.tar.gz && cd /tmp/zh-CN/DEBS &&\
# dpkg -i *.deb && dpkg -i desktop-integration/openoffice4.1-debian-menus_4.1.6-9790_all.deb &&\
# 安装arm libreoffice,(实际测试用deb包会报错,原因未知,故直接复制进去,不用deb方式安装)
# apt-get install -y libxinerama1 libcairo2 libcups2 libx11-xcb1 &&\
# curl -fL "deb包的tar.gz文件地址" -o LibreOfficeDev_7.3.1.3_Linux_aarch64_deb.tar.gz &&\
# tar -zxf /tmp/LibreOfficeDev_7.3.1.3_Linux_aarch64_deb.tar.gz && cd /tmp/LibreOfficeDev_7.3.1.3_Linux_aarch64_deb/DEBS &&\
# dpkg -i *.deb &&\
rm -rf /tmp/* && rm -rf /var/lib/apt/lists/* &&\
cd /usr/share/fonts/chinese &&\
mkfontscale &&\
mkfontdir &&\
fc-cache -fv
RUN apt-get update && apt install -y libxinerama1 libcairo2 libcups2 libx11-xcb1
RUN apt update && apt install -y libxslt1-dev
COPY libreoffice-7.3.1.3 /opt/libreoffice-7.3
ENV KK_OFFICE_HOME /opt/libreoffice-7.3
# 用了openjdk的话无需设置java_home,openjdk好像会自动设置
ENV JAVA_HOME /usr/local/jdk的名字
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
ENV LANG zh_CN.UTF-8
ENV LC_ALL zh_CN.UTF-8
ENV KKFILEVIEW_BIN_FOLDER /opt/kkFileView-4.0.0/bin
#ENTRYPOINT ["java","-Dfile.encoding=UTF-8","-Dspring.config.location=/opt/kkFileView-4.0.0/config/application.properties","-jar","/opt/kkFileView-4.0.0/bin/kkFileView-4.0.0.jar"]
# 这里我们把原本的命令注释了,有自己的命令,我这就不放出了,请各位自行修改,或使用官方的命令
3、制作镜像
创建一个简单的编译脚本
#!/bin/sh
mvn clean package -DskipTests -Prelease
BUILD_MODULE="kkfileview"
TAG="arm"
REGISTRY_URL="自己的仓库域名"
REPO="仓库存储地址"
# dockersfile名写自己的,比如我的就是叫arm.Dockerfile
docker build -f arm.Dockerfile -t ${BUILD_MODULE}:latest .
time=`date +%Y%m%d%H%M%S`
version=`git rev-parse --short HEAD`
new_tag="${BUILD_MODULE}:${TAG}-${time}-${version}"
# 上面是tag规则,自行酌情修改
docker tag ${BUILD_MODULE}:latest ${REGISTRY_URL}/$REPO/${new_tag}
# 下面是仓库推送,需不需要随意,需要的可以取消相关注释
# docker login -u ${REGISTRY_USER} -p ${REGISTRY_PASS} ${REGISTRY_URL}
# docker push ${REGISTRY_URL}/$REPO/${new_tag}
4、运行测试
运行一个kkfileview
docker run --rm -it -p 8012:8012 kkfileview:latest
新开一个终端,运行一个nginx
docker run --rm -it -v /data/kk-test:/usr/share/nginx/html -p 10010:80 nginx
在windows上新建一个docx文件传到/data/kk-test文件夹里面去
试下,能否访问8012端口,访问ok
试下,能否访问10010,访问ok
试下组合,在线预览方式能否成功
http://xxxxxxxxxxxx:8012/onlinePreview?url=http://xxxxxxxxxxx:10010/test.docx
一切ok的情况下,我们在arm64上的kkfileview就搭建完成了
以上都是在我已完成这个需求后再写的,可能有疏漏,或者踩的坑忘记写了的情况,如有发现问题,欢迎补充我修改。
以下为参考网站:(实际上开了一大堆窗口,浏览器就占了几个G的内存)
kkfileview官方文档
LibreOffice 中文社区