RHEL/CentOS 离线环境准备指南

本文档介绍如何在 无网络连接 的 RHEL/CentOS 服务器上准备 Aegis.DocumentConverter 所需的运行环境依赖。

适用场景:对网络安全要求严格的内网环境


目录


1. 系统要求

操作系统

适用于基于 yum/dnf 包管理的 Linux 发行版:

  • RHEL 及其衍生版(CentOS、Rocky Linux、AlmaLinux、Oracle Linux 等)

硬件要求

配置项 最低要求 推荐配置
CPU 2 核 4 核+
内存 2 GB 8 GB+
磁盘 10 GB 20 GB+

2. 依赖项清单

2.1 UnoServer 引擎依赖(Word 转 PDF)

包名 版本要求 作用
libreoffice 7.0+ LibreOffice 办公套件
python3 3.8+ Python 运行时
python3-pip - Python 包管理器
libreoffice-pyuno - Python-UNO 桥接库

⚠️ CentOS 7 注意:默认仓库的 LibreOffice (5.x) 和 Python (3.6) 版本过低,需手动安装新版本。详见下文。

2.2 PuppeteerSharp 引擎依赖(HTML 转 PDF)

包名 作用
chromium Chromium 浏览器
nss 网络安全服务库
nspr 网络便携式运行时库
ca-certificates CA 根证书
glib2 GLib 核心库
mesa-libgbm 图形缓冲管理器
libdrm Direct Rendering Manager
libxcb X11 C 绑定库
libxkbcommon 键盘处理库
pango 文本渲染引擎
cairo 2D 图形库
libX11 X11 核心库
libXcomposite X11 窗口合成扩展
libXdamage X11 损坏区域扩展
libXext X11 扩展库
libXfixes X11 修复扩展
libXrandr X11 分辨率管理
libXrender X11 渲染扩展
atk 无障碍工具包
at-spi2-atk AT-SPI ATK 桥接
cups-libs CUPS 打印库
libXScrnSaver X11 屏幕保护扩展
alsa-lib ALSA 音频库

2.3 字体依赖(两个引擎共享)

包名 作用
liberation-fonts Liberation 字体(类 Times、Arial)
google-noto-cjk-fonts Noto CJK 中日韩字体
wqy-zenhei-fonts 文泉驿正黑(备用中文)
freetype FreeType 字体渲染引擎
fontconfig 字体配置库

2.4 Python 包

包名 作用
unoserver LibreOffice 文档转换服务

3. 离线包准备(有网络机器)

💡 建议:为避免依赖兼容性问题,建议准备离线包的机器与目标机器使用相同或相近的发行版版本,且 CPU 架构必须一致(如 x86_64 或 aarch64)

3.1 启用 EPEL 仓库

Chromium 等包需要 EPEL 仓库:

# RHEL 8/9, Rocky Linux, AlmaLinux
sudo dnf install epel-release

# CentOS 7
sudo yum install epel-release

3.2 创建工作目录

mkdir -p ~/offline-packages/{rpms,python}
cd ~/offline-packages

3.3 下载系统依赖包(rpm 包)

方法 A:使用 dnf download(RHEL 8+)

cd ~/offline-packages/rpms

# 定义要安装的包
PACKAGES="libreoffice-core libreoffice-writer libreoffice-pyuno \
  python3 python3-pip \
  chromium \
  liberation-fonts google-noto-cjk-fonts wqy-zenhei-fonts freetype fontconfig \
  nss nspr ca-certificates glib2 mesa-libgbm libdrm libxcb libxkbcommon \
  pango cairo libX11 libXcomposite libXdamage libXext libXfixes libXrandr libXrender \
  atk at-spi2-atk cups-libs libXScrnSaver alsa-lib"

# 下载包及其所有依赖
sudo dnf download --resolve --destdir=. $PACKAGES

# 统计下载数量
echo "已下载 $(ls -1 *.rpm | wc -l) 个 .rpm 包"

方法 B:使用 repotrack(CentOS 7)

⚠️ 重要:CentOS 7 默认仓库的 LibreOffice (5.x) 和 Python (3.6) 版本过低,不要下载这些包。需要单独处理。

cd ~/offline-packages/rpms

# 安装 yum-utils
sudo yum install -y yum-utils

# 仅下载 Chromium 及系统依赖(不含 LibreOffice 和 Python)
PACKAGES="chromium \
  liberation-fonts wqy-zenhei-fonts freetype fontconfig \
  nss nspr ca-certificates glib2 mesa-libgbm libdrm libxcb libxkbcommon \
  pango cairo libX11 libXcomposite libXdamage libXext libXfixes libXrandr libXrender \
  atk at-spi2-atk cups-libs libXScrnSaver alsa-lib"

repotrack $PACKAGES
echo "已下载 $(ls -1 *.rpm | wc -l) 个 .rpm 包"

CentOS 7 还需单独下载:

# 1. 下载 Python 3.8(从 vault 归档源,见 3.4 节)

# 2. 下载 LibreOffice 7.x(从腾讯镜像)
cd ~/offline-packages
mkdir -p libreoffice && cd libreoffice
wget https://mirrors.cloud.tencent.com/libreoffice/libreoffice/stable/7.6.7/rpm/x86_64/LibreOffice_7.6.7_Linux_x86-64_rpm.tar.gz
echo "LibreOffice 7.6.7 已下载"

3.4 下载 Python 包

⚠️ CentOS 7 用户注意:系统默认 Python 3.6 版本过低,需先安装 Python 3.8+ 再下载 Python 包。

RHEL 8+ / Rocky Linux / AlmaLinux

cd ~/offline-packages/python

# 下载 unoserver 及其依赖
pip3 download unoserver

echo "已下载 $(ls -1 *.whl *.tar.gz 2>/dev/null | wc -l) 个 Python 包"

CentOS 7(需先安装 Python 3.8)

由于 CentOS 7 已停止维护,SCL 仓库可能不可用。有以下几种方案:

方案 A:配置 vault 归档源安装 SCL

# 1. 创建 SCL vault 仓库配置
sudo tee /etc/yum.repos.d/centos-scl-vault.repo << 'EOF'
[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://vault.centos.org/centos/7/sclo/x86_64/rh/
gpgcheck=0
enabled=1
EOF

# 2. 安装 Python 3.8
sudo yum install -y rh-python38 rh-python38-python-pip
source /opt/rh/rh-python38/enable

# 3. 验证版本
python3 --version  # 应显示 Python 3.8.x

# 4. 下载 unoserver
cd ~/offline-packages/python
pip3 download unoserver

# 5. 下载 Python 3.8 的 rpm 包供目标机器离线安装
cd ~/offline-packages/rpms
repotrack rh-python38 rh-python38-python-pip

方案 B:从其他机器下载(推荐)

如果您有 RHEL 8+ / Rocky Linux 8+ 机器,可在该机器上下载 Python 包,然后传输到 CentOS 7 目标机器使用。

方案 C:使用 Docker

对于 CentOS 7 环境,推荐使用 Docker 部署,可获得更一致的运行环境。参见 deploy-docker.md

3.5 打包所有离线文件

cd ~/offline-packages

# 创建最终离线包(RHEL 8+ 不含 libreoffice 目录)
tar -czvf aegis-converter-deps-rhel-$(date +%Y%m%d).tar.gz rpms/ python/

# CentOS 7 需包含 libreoffice 目录
# tar -czvf aegis-converter-deps-centos7-$(date +%Y%m%d).tar.gz rpms/ python/ libreoffice/

echo "离线包已创建:"
ls -lh aegis-converter-deps-*.tar.gz

3.6 传输文件

aegis-converter-deps-rhel-YYYYMMDD.tar.gz 传输到离线目标机器。


4. 离线安装(目标机器)

4.1 解压离线包

# 创建工作目录
sudo mkdir -p /opt/aegis-deps
cd /opt/aegis-deps

# 解压离线包
tar -xzvf /path/to/aegis-converter-deps-rhel-YYYYMMDD.tar.gz

4.2 安装系统依赖

RHEL 8+/Rocky Linux/AlmaLinux

cd /opt/aegis-deps/rpms
sudo dnf localinstall *.rpm -y

CentOS 7

# 1. 安装 Chromium 及系统依赖
cd /opt/aegis-deps/rpms
sudo yum localinstall *.rpm -y

# 2. 安装 LibreOffice 7.x(如果使用了腾讯镜像下载)
cd /opt/aegis-deps/libreoffice
tar -xzf LibreOffice_7.6.7_Linux_x86-64_rpm.tar.gz
cd LibreOffice_7.6.7.2_Linux_x86-64_rpm/RPMS
sudo yum localinstall *.rpm -y

4.3 安装 Python 包

RHEL 8+ / Rocky Linux / AlmaLinux

cd /opt/aegis-deps/python
sudo pip3 install --no-index --find-links=. unoserver

CentOS 7(需先启用 Python 3.8)

# 1. 先安装 Python 3.8 rpm 包
cd /opt/aegis-deps/rpms
sudo yum localinstall rh-python38*.rpm -y

# 2. 启用 Python 3.8 并添加到 bashrc
echo 'source /opt/rh/rh-python38/enable' >> ~/.bashrc
source ~/.bashrc

# 3. 验证版本
python3 --version  # 应显示 Python 3.8.x

# 4. 安装 unoserver
cd /opt/aegis-deps/python
pip3 install --no-index --find-links=. unoserver

4.4 刷新字体缓存

sudo fc-cache -f -v

5. 验证安装

5.1 验证 LibreOffice

soffice --version
# 应显示:LibreOffice 7.x.x.x ...
# 如果显示 5.x 或 6.x,版本过低,需安装 LibreOffice 7.0+

5.2 验证 Python 和 UNO

python3 --version
# 应显示:Python 3.8.x 或更高版本
# CentOS 7 用户如果显示 3.6.x,请确保已执行 source /opt/rh/rh-python38/enable

python3 -c "import uno; print('UNO 桥接库加载成功')"

5.3 验证 unoserver

python3 -m unoserver.server --help
# 应显示 unoserver 帮助信息

5.4 验证 Chromium

# 可执行文件名因发行版而异
chromium-browser --version 2>/dev/null || chromium --version
# 应显示:Chromium xxx.x.xxxx.xxx

5.5 验证字体

# 检查中文字体
fc-list :lang=zh | head -5
# 应显示 Noto CJK 或 WenQuanYi 字体

6. 常见问题

Q1: 安装 .rpm 包时提示依赖错误

# 使用 --skip-broken 跳过有问题的包
sudo dnf localinstall *.rpm -y --skip-broken

# 或使用 rpm 强制安装
sudo rpm -ivh --nodeps *.rpm

Q2: 准备阶段找不到 chromium 包

此问题发生在有网络的准备机器上:

# 确保启用了 EPEL 仓库
sudo dnf install epel-release
sudo dnf makecache

# 某些系统中包名可能是 chromium-browser
dnf search chromium

Q3: LibreOffice 启动失败 "no suitable windowing system found"

# 确保使用 headless 模式,不设置 DISPLAY 环境变量
unset DISPLAY

Q4: 字体显示为方块或乱码

# 重新刷新字体缓存
sudo fc-cache -f -v

# 检查中文字体是否安装
fc-list :lang=zh

Q5: Python 找不到 uno 模块

# 从离线包重新安装 libreoffice-pyuno
cd /opt/aegis-deps/rpms
sudo rpm -ivh --force libreoffice-pyuno*.rpm

Q6: SELinux 阻止 Chromium 运行

# 临时禁用 SELinux(测试用)
sudo setenforce 0

# 或配置 SELinux 策略(生产环境推荐)
sudo setsebool -P httpd_execmem 1

附录:离线包文件清单

aegis-converter-deps-rhel/
├── rpms/                           # 系统依赖包(Chromium、字体等)
│   └── *.rpm                       # rpm 包文件
├── python/                         # Python 包
│   └── *.whl                       # unoserver 及依赖
└── libreoffice/                    # LibreOffice 7.x(CentOS 7 需要)
    └── LibreOffice_7.6.7_Linux_x86-64_rpm.tar.gz

更新日志

日期 版本 说明
2025-12-12 1.0 初始版本

results matching ""

    No results matching ""