libreoffice 7 ( arm64 ubuntu20.04 环境) 源码编译

基础环境

  • cpu
[root@localhost ~]# lscpu
架构:                           aarch64
CPU 运行模式:                   64-bit
字节序:                         Little Endian
CPU:                             4
在线 CPU 列表:                  0-3
每个核的线程数:                 1
每个座的核数:                   1
座:                             4
NUMA 节点:                      1
厂商 ID:                        HiSilicon
型号:                           0
型号名称:                       Kunpeng-920
  • os
[root@localhost ~]# arch
aarch64
[root@localhost ~]#
[root@localhost ~]# cat /etc/.productinfo
Kylin Linux Advanced Server
release V10 (SP2) /(Sword)-aarch64-Build09/20210524
  • docker
[root@localhost ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.9
 API version:       1.41
 Go version:        go1.16.8
 Git commit:        c2ea9bc
 Built:             Mon Oct  4 16:08:21 2021
 OS/Arch:           linux/arm64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.21
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.7
  Git commit:       3056208
  Built:            Tue Oct 25 17:59:35 2022
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.6.9
  GitCommit:        1c90a442489720eec95342e1789ee8a5e1b9536f
 runc:
  Version:          1.0.0-rc3
  GitCommit:        fabf83fd21f205c801571df4074024179eb03b44
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
  • Dockerfile
FROM ubuntu:20.04

RUN set -ex \
    apt clean -y &&\
    apt update -y &&\
    apt install -y apt-transport-https ca-certificates

COPY fonts/*       /usr/share/fonts/chinese/
COPY sources.list  /etc/apt/sources.list

ADD apache-ant-1.10.12-bin.tar.gz /opt/
ADD OpenJDK11U-jdk_aarch64_linux_hotspot_11.0.17_8.tar.gz /opt/

RUN set -ex \
    apt clean -y &&\
    apt update -y &&\
    apt upgrade -y &&\
    apt install -y locales &&\
    apt 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 &&\
    export DEBIAN_FRONTEND=noninteractive &&\
    apt-get install -y tzdata &&\
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\
    apt install -y libxrender1 &&\
    apt install -y libxt6 &&\
    apt install -y libxext-dev &&\
    apt install -y libfreetype6-dev &&\
    apt install -y wget &&\
    apt install -y ttf-mscorefonts-installer &&\
    apt install -y fontconfig &&\
    apt install ttf-wqy-microhei &&\
    apt install ttf-wqy-zenhei &&\
    apt install xfonts-wqy &&\
    rm -rf /var/lib/apt/lists/*

[root@localhost ~]# docker build -t u20:v1 .

编译过程

# 进入容器编译
[root@localhost ~]# docker run -itd  --name test u20:v1
[root@localhost ~]# docker exec -it test bash

# ubuntu 系统更新
root@294c18513f62:/# cd /opt
root@294c18513f62:/# apt update 
root@294c18513f62:/# apt upgrade -y

# 准备java  ant环境
# 给环境变量加上,在前面Dockerfile 里做也行
root@294c18513f62:/opt# vim /etc/profile
# java
export JAVA_HOME=/opt/jdk-11.0.17+8
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib
# ant
export ANT_HOME=/opt/apache-ant-1.10.12
export PATH=$PATH:$ANT_HOME/bin

root@294c18513f62:/opt# source  /etc/profile
root@294c18513f62:/opt# java -version
openjdk version "11.0.17" 2022-10-18
OpenJDK Runtime Environment (build 11.0.17+8-post-Ubuntu-1ubuntu220.04)
OpenJDK 64-Bit Server VM (build 11.0.17+8-post-Ubuntu-1ubuntu220.04, mixed mode)
root@294c18513f62:/opt# java -version
openjdk version "11.0.17" 2022-10-18
OpenJDK Runtime Environment (build 11.0.17+8-post-Ubuntu-1ubuntu220.04)
OpenJDK 64-Bit Server VM (build 11.0.17+8-post-Ubuntu-1ubuntu220.04, mixed mode)

# 准备源码
root@294c18513f62:/opt# mkdir -p src && cd src
root@294c18513f62:/opt/src# apt install ccache
root@294c18513f62:/opt/src# ccache -M 10G
root@294c18513f62:/opt/src# apt install git
root@294c18513f62:/opt/src# git clone --depth=1 --branch libreoffice-7-1 git://go.suokunlong.cn/lo/core ./libreoffice-7-1
root@294c18513f62:/opt/src# cd libreoffice-7-1/
root@294c18513f62:/opt/src/libreoffice-7-1# git submodule init
root@294c18513f62:/opt/src/libreoffice-7-1# git submodule update --progress --depth=1


# 准备编译参数
root@294c18513f62:/opt/src/libreoffice-7-1# vim autogen.input
--without-help
--without-helppack-integration
--with-lang=zh-CN zh-TW
--disable-online-update
--disable-breakpad
--disable-odk
--without-doxygen
--enable-epm
--with-package-format=deb
#--without-java
--enable-firebird-sdbc
--without-system-firebird
--enable-python=internal

# 搞依赖 这里是最最脑裂的,这里是脑裂n次之后的结果
# 中间有些包是需要交互选择的,需要手动处理下
root@294c18513f62:/opt/src/libreoffice-7-1# apt -y install \
autoconf  \
pkg-config \
patch \
automake \
make \
gcc \
fakeroot \
libcups2-dev \
ccache \
fontconfig \
libfontconfig1-dev \
gperf \
xine-ui \
libxslt-dev \
xsltproc \
libxml2 \
libxml2-utils \
libkrb5-dev \
libice-dev \
gnome-devel  \
gnome-devel-docs \
libx11-dev  \
libxext-dev  \
libxrender-dev \
libxtst-dev \
libxt-dev \
flex \
zip \
libgstreamer* \
junit4

# 编译
# 这里可能会丢失环境变量,需要再刷一次
root@294c18513f62:/opt/src/libreoffice-7-1# source  /etc/profile
root@294c18513f62:/opt/src/libreoffice-7-1# echo $JAVA_HOME
root@294c18513f62:/opt/src/libreoffice-7-1# ./autogen.sh

libreoffice 7 ( arm64 ubuntu20.04 环境) 源码编译_第1张图片

# 去公网拉依赖,打包
# 这里需要的时间非常之久,建议给配置拉高才行,我这里32C、6G,基本全部跑满,最好能给多高给多高。
root@294c18513f62:/opt/src/libreoffice-7-1# make

libreoffice 7 ( arm64 ubuntu20.04 环境) 源码编译_第2张图片libreoffice 7 ( arm64 ubuntu20.04 环境) 源码编译_第3张图片

root@294c18513f62:/opt/src/libreoffice-7-1# find ./  -name "*.deb"  -type f
# 嗯,从这里开始TM 问题就各式各样的,呃,FUCK FUCK FUCK...。

解决办法

# 在dockerhub.com 仓库里找到个arm64 版本的kkfileview,那还犹豫啥直接替换jar包就干。
# jerryjshi/kkfileview:4.0.0
# 大概看了下他的Dockerfile,应该是用的带jdk环境的arm64 版本的ubuntu,然后那个liberoffice 不知是从哪里搞到的,看起来就是二进制文件拷贝进去的,其他内容差不多,不过应该是对官方Dockerfile 有所精简的。
ADD file:ff4909f2124325dac58d43c617132325934ed48a5ab4c534d05f931fcf700a2f in /

CMD ["bash"]

ADD file:890cc0dd111650f2a7c7e7944c3ba2685c671ed34fcbff87ac8e70760a852a30 in /opt/

COPY multi:fa61a324d8ed8030c7f8a3ad693c40807474b4a02cc649ade643f474ae5da374 in /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 && \
    apt-get install -y openjdk-8-jre && \
    cd /tmp && \
    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 libxslt1-dev

COPY dir:004a3b0724d3b307c7a1ff97338b61ee5165019d9921e6feb5482c11a47e0ab1 in /opt/libreoffice-7.3.2.2

ENV KK_OFFICE_HOME=/opt/libreoffice-7.3.2.2
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"]
# 用他的运行环境再次构建自己的镜像
$ cat Dockerfile
FROM jerryjshi/kkfileview:4.0.0

RUN rm /opt/kkFileView-4.0.0 -rf

ADD server/target/kkFileView-*.tar.gz /opt/

ENV KKFILEVIEW_BIN_FOLDER=/opt/kkFileView-4.1.0-SNAPSHOT/bin

EXPOSE 8012

ENTRYPOINT [ \
        "java", \
        "-Dfile.encoding=UTF-8", \
        "-Dspring.config.location=/opt/kkFileView-4.1.0-SNAPSHOT/config/application.properties", \
        "-jar", \
        "/opt/kkFileView-4.1.0-SNAPSHOT/bin/kkFileView-4.1.0-SNAPSHOT.jar" \
        ]
# docker-compose 启动测试
$ cat docker-compose.yml
---
version: '3.8'
services:
  kkfileview:
    image: arm64-kkfileview:4.1.0
    container_name: kkfileview
    network_mode: host
    ports:
      - '8012:8012'
    restart: always
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
      - "./application.properties:/opt/kkFileView-4.1.0-SNAPSHOT/config/application.properties"

正迈入系统全套国产化的深坑之中…苦不堪言

你可能感兴趣的:(运维,排错,k8s,linux,git,运维)