在国产麒麟v10 ARM服务器上编译LibreOffice 7.1.8.1的完整避坑指南

那天下午的阳光透过办公室的窗户斜射进来,我盯着眼前这台搭载麒麟v10操作系统的ARM服务器,心想:"不就是编译个LibreOffice吗?"六个小时后,当我终于看到soffice --version成功输出7.1.8.1版本号时,才意识到这次编译之旅远比想象中复杂。本文将分享我在华为鲲鹏920芯片的国产服务器上编译LibreOffice的全过程,特别是那些官方文档没提到的"坑"和解决方案。

1. 环境准备:比想象中更复杂的依赖迷宫

麒麟v10作为国产操作系统的代表,其软件生态与常见的CentOS或Ubuntu存在显著差异。在开始编译前,我发现至少需要解决三个关键问题:依赖包完整性、网络访问限制和ARM架构适配。

1.1 系统基础依赖安装

首先需要确保系统具备完整的编译工具链。与x86环境不同,ARM架构下的某些依赖包需要特别注意:

# 基础编译环境
sudo yum install -y "@Development Tools"
# ARM架构特有依赖
sudo yum install -y libatomic.aarch64 libquadmath.aarch64

注意:麒麟v10的yum源可能缺少部分标准包,建议先执行sudo yum update更新源数据

依赖安装过程中我遇到了几个典型问题:

  1. 缺失的字体库:编译时需要的中文字体在默认源中不存在,需要手动添加:

    sudo yum install -y wqy-microhei-fonts wqy-zenhei-fonts
    
  2. Python版本冲突:系统预装的Python3.6不符合要求,需要升级:

    sudo yum install -y python38 python38-devel
    sudo alternatives --set python /usr/bin/python3.8
    

1.2 源码下载与解压技巧

LibreOffice官方源码包较大(约200MB),在国产服务器上下载可能遇到速度慢的问题。我推荐使用国内镜像:

wget https://mirrors.ustc.edu.cn/libreoffice/src/7.1.8/libreoffice-7.1.8.1.tar.xz
tar -xvf libreoffice-7.1.8.1.tar.xz -C /opt

解压后立即面临权限问题。由于后续编译需要使用非root用户,建议提前设置:

sudo useradd -m builder
sudo chown -R builder:builder /opt/libreoffice-7.1.8.1

2. 预编译配置:那些官方文档没告诉你的参数

进入源码目录后,./autogen.sh是编译前的关键步骤。在ARM架构下,以下参数组合经过多次测试最为稳定:

cd /opt/libreoffice-7.1.8.1
sudo -u builder ./autogen.sh \
    --without-java \
    --with-lang=zh-CN \
    --disable-postgresql-sdbc \
    --disable-fetch-external \
    --with-package-format=rpm \
    --enable-epm \
    --host=aarch64-linux-gnu \
    --build=aarch64-linux-gnu

几个关键参数的解释:

参数ARM架构下的特殊意义推荐值
--host/--build明确指定交叉编译目标aarch64-linux-gnu
--disable-fetch-external避免编译时自动下载外部依赖必须禁用
--with-lang中文环境支持zh-CN

重要提示:务必添加--disable-fetch-external,否则编译过程中会尝试从国外下载资源,极易失败

3. 编译过程:耐心与技巧的考验

预配置成功后,真正的挑战才开始。在ARM服务器上编译LibreOffice平均需要3-5小时(视CPU性能而定),期间可能遇到以下问题:

3.1 内存不足的解决方案

即使使用16核鲲鹏920处理器,编译过程中仍可能出现内存不足导致进程被kill。解决方法:

  1. 减少并行编译线程:

    make -j4  # 改为4线程
    
  2. 增加swap空间:

    sudo fallocate -l 8G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
    

3.2 依赖包手动安装

由于网络限制,编译时可能卡在某个模块。常见需要手动处理的依赖:

  • harfbuzz:下载源码手动编译

    wget https://github.com/harfbuzz/harfbuzz/releases/download/2.8.1/harfbuzz-2.8.1.tar.xz
    tar xf harfbuzz-2.8.1.tar.xz && cd harfbuzz-2.8.1
    ./configure --prefix=/usr/local && make -j4 && sudo make install
    
  • nss:需要特定版本

    sudo yum install -y nss-devel-3.53.1
    

3.3 ARM架构特有的编译错误

在链接阶段可能遇到如下错误:

undefined reference to `__atomic_load_8'

解决方法是指定链接库:

export LDFLAGS="-latomic"
make clean
make

4. 验证与打包:最后的检查清单

编译完成后,不要急于庆祝,先进行完整验证:

4.1 基础功能测试

cd /opt/libreoffice-7.1.8.1
./instdir/program/soffice --version
./instdir/program/soffice --headless --convert-to pdf test.docx

4.2 RPM包生成

如果预配置时指定了--with-package-format=rpm,可以生成安装包:

cd workdir/installation
ls *.rpm  # 查看生成的rpm包

4.3 环境变量配置

为方便使用,建议添加以下环境变量:

echo 'export PATH=$PATH:/opt/libreoffice-7.1.8.1/instdir/program' >> ~/.bashrc
source ~/.bashrc

5. 性能优化与长期维护

成功编译只是开始,要让LibreOffice在ARM服务器上稳定运行,还需要:

  1. 字体缓存优化:

    fc-cache -fv
    
  2. 内存管理:在/etc/security/limits.conf中添加:

    * soft nofile 65535
    * hard nofile 65535
    
  3. 定期更新:订阅国内开源镜像站,获取安全更新

经过这次折腾,我总结出ARM服务器编译软件的三个黄金法则:提前规划依赖、耐心处理错误、详细记录过程。现在,这台国产服务器上的LibreOffice已经稳定运行了三个月,处理了上千份文档转换任务。

更多推荐