Debian/Ubuntu 离线环境准备指南

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

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


目录


1. 系统要求

操作系统

适用于基于 apt/dpkg 包管理的 Linux 发行版:

发行版 版本 LibreOffice Python 支持状态
Ubuntu 22.04+ 7.3+ 3.10+ ✅ 完全支持
Ubuntu 20.04 6.4 3.8 ⚠️ 需升级 LibreOffice
Debian 12+ 7.4+ 3.11+ ✅ 完全支持
Debian 11 7.0 3.9 ✅ 完全支持
Debian 10 6.1 3.7 ❌ 版本过低,建议升级或使用 Docker

⚠️ 版本要求:LibreOffice 必须 7.0+,Python 必须 3.8+。旧版系统需要手动升级或使用 Docker 部署。

硬件要求

配置项 最低要求 推荐配置
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 包管理器
python3-uno - Python-UNO 桥接库

2.2 PuppeteerSharp 引擎依赖(HTML 转 PDF)

包名 作用
chromiumchromium-browser Chromium 浏览器(包名因版本而异)
libnss3 网络安全服务库
libnspr4 网络便携式运行时库
ca-certificates CA 根证书
libglib2.0-0 GLib 核心库
libgbm1 图形缓冲管理器
libdrm2 Direct Rendering Manager
libxcb1 X11 C 绑定库
libxkbcommon0 键盘处理库
libpango-1.0-0 文本渲染引擎
libcairo2 2D 图形库
libx11-6 X11 核心库
libxcomposite1 X11 窗口合成扩展
libxdamage1 X11 损坏区域扩展
libxext6 X11 扩展库
libxfixes3 X11 修复扩展
libxrandr2 X11 分辨率管理
libxrender1 X11 渲染扩展

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

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

2.4 Python 包

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

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

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

3.1 创建工作目录

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

3.2 下载系统依赖包(apt 包)

💡 chromium 包名说明:Ubuntu 使用 chromium-browser,Debian 使用 chromium。请根据实际系统选择。

方法 A:使用 apt download(推荐)

cd ~/offline-packages/debs

# 定义要安装的包(Ubuntu 使用 chromium-browser,Debian 使用 chromium)
PACKAGES="libreoffice python3 python3-pip python3-uno \
  chromium-browser \
  fonts-liberation fonts-noto-cjk fonts-wqy-zenhei libfreetype6 fontconfig \
  libnss3 libnspr4 ca-certificates libglib2.0-0 libgbm1 libdrm2 libxcb1 \
  libxkbcommon0 libpango-1.0-0 libcairo2 libx11-6 libxcomposite1 libxdamage1 \
  libxext6 libxfixes3 libxrandr2 libxrender1"

# 下载包及其所有依赖
sudo apt update
apt download $(apt-cache depends --recurse --no-recommends --no-suggests \
  --no-conflicts --no-breaks --no-replaces --no-enhances \
  $PACKAGES 2>/dev/null | grep "^\w" | sort -u)

# 统计下载数量
echo "已下载 $(ls -1 *.deb 2>/dev/null | wc -l) 个 .deb 包"

方法 B:使用 apt-offline

# 安装 apt-offline
sudo apt-get install -y apt-offline

# 定义要安装的包
PACKAGES="libreoffice python3 python3-pip python3-uno \
  chromium-browser \
  fonts-liberation fonts-noto-cjk fonts-wqy-zenhei libfreetype6 fontconfig \
  libnss3 libnspr4 ca-certificates libglib2.0-0 libgbm1 libdrm2 libxcb1 \
  libxkbcommon0 libpango-1.0-0 libcairo2 libx11-6 libxcomposite1 libxdamage1 \
  libxext6 libxfixes3 libxrandr2 libxrender1"

# 生成签名文件
apt-offline set --install-packages $PACKAGES offline.sig

# 下载所有包到 bundle
apt-offline get offline.sig --bundle debs/offline-bundle.zip

3.3 下载 Python 包

cd ~/offline-packages/python

# 下载 unoserver 及其依赖
pip3 download unoserver

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

3.4 Ubuntu 20.04 特殊处理(LibreOffice 版本过低)

Ubuntu 20.04 默认仓库的 LibreOffice 为 6.4.x,不满足 7.0+ 要求。需要从 LibreOffice 官方 PPA 或官网下载:

# 方案 A:使用 LibreOffice PPA(需要在线环境准备)
sudo add-apt-repository ppa:libreoffice/ppa
sudo apt update
# 然后重新执行 3.2 的下载命令

# 方案 B:下载官方 deb 包
cd ~/offline-packages
mkdir -p libreoffice && cd libreoffice
wget https://mirrors.cloud.tencent.com/libreoffice/libreoffice/stable/7.6.7/deb/x86_64/LibreOffice_7.6.7_Linux_x86-64_deb.tar.gz
echo "LibreOffice 7.6.7 已下载"

💡 如果目标机器是 Ubuntu 22.04+ 或 Debian 11+,可跳过此步骤。

3.5 打包所有离线文件

cd ~/offline-packages

# 创建最终离线包
# Ubuntu 22.04+ / Debian 11+
tar -czvf aegis-converter-deps-$(date +%Y%m%d).tar.gz debs/ python/

# Ubuntu 20.04(需包含 libreoffice 目录)
# tar -czvf aegis-converter-deps-$(date +%Y%m%d).tar.gz debs/ python/ libreoffice/

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

3.6 传输文件

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


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

4.1 解压离线包

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

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

4.2 安装系统依赖

方法 A:使用 dpkg(推荐)

cd /opt/aegis-deps/debs
sudo dpkg -i *.deb

# 如果提示依赖错误,尝试多次执行以修复依赖顺序问题
sudo dpkg -i *.deb
sudo dpkg --configure -a

方法 B:使用 apt-offline(如果使用该方式准备)

cd /opt/aegis-deps/debs
sudo apt-offline install offline-bundle.zip

# apt-offline 已处理依赖关系,如仍有问题可运行:
sudo dpkg --configure -a

4.3 Ubuntu 20.04 安装 LibreOffice 7.x

如果使用了官方 deb 包(方案 B),需单独安装:

# 先卸载旧版本
sudo apt remove -y libreoffice* --allow-remove-essential 2>/dev/null || true

# 安装 LibreOffice 7.x
cd /opt/aegis-deps/libreoffice
tar -xzf LibreOffice_7.6.7_Linux_x86-64_deb.tar.gz
cd LibreOffice_7.6.7.2_Linux_x86-64_deb/DEBS
sudo dpkg -i *.deb

4.4 安装 Python 包

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

4.5 刷新字体缓存

sudo fc-cache -f -v

5. 验证安装

5.1 验证 LibreOffice

soffice --version
# 应显示:LibreOffice 7.x.x.x ...
# 如果显示 6.x 或更低,版本不满足要求,需升级或使用 Docker

5.2 验证 Python 和 UNO

python3 --version
# 应显示:Python 3.8.x 或更高版本

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

5.3 验证 unoserver

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

5.4 验证 Chromium

chromium --version
# 或
chromium-browser --version
# 应显示:Chromium xxx.x.xxxx.xxx

5.5 验证字体

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

6. 常见问题

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

# 在离线环境不能使用 apt-get install -f(需要网络)
# 应使用 dpkg 多次安装或强制安装

# 方法1:多次运行 dpkg 直到所有依赖安装完成
cd /opt/aegis-deps/debs
sudo dpkg -i *.deb
sudo dpkg --configure -a
sudo dpkg -i *.deb   # 再次运行

# 方法2:强制安装(不推荐,可能导致功能异常)
sudo dpkg -i --force-depends *.deb

Q2: Chromium 启动失败 "No usable sandbox"

# 配置 sandbox 权限
sudo chown root:root /usr/lib/chromium/chrome-sandbox
sudo chmod 4755 /usr/lib/chromium/chrome-sandbox

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

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

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

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

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

Q5: Python 找不到 uno 模块

# 从离线包重新安装 python3-uno
cd /opt/aegis-deps/debs
sudo dpkg -i --force-reinstall python3-uno*.deb

附录:离线包文件清单

aegis-converter-deps/
├── debs/                           # 系统依赖包
│   ├── offline-bundle.zip          # apt-offline 打包(方法 B)
│   └── *.deb                       # 或单独的 deb 文件(方法 A)
├── python/                         # Python 包
│   └── *.whl                       # unoserver 及依赖
└── libreoffice/                    # LibreOffice 7.x(Ubuntu 20.04 需要)
    └── LibreOffice_7.6.7_Linux_x86-64_deb.tar.gz

更新日志

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

results matching ""

    No results matching ""