Skip to content

Fedora 上安装 DEB 包的完整指南

Fedora 用的是 RPM 包管理系统,和 DEB(Debian/Ubuntu)不兼容。但有些软件只提供 DEB 包——特别是在 aarch64 架构上,不少厂商只发了 arm64 DEB 而没有 arm64 RPM(比如 WPS Office、WPS 协作)。

本文记录在 Fedora 42 aarch64(Asahi Linux on Apple Silicon)上安装 DEB 包的三种方法、常见的库冲突问题和解决思路。

环境信息

  • Fedora 42, aarch64 (Asahi Linux on M1)
  • GNOME 48, Wayland
  • DNF 5

方法一:手动解压放置(推荐)

最干净也最可控的方式。DEB 包本质上是一个 ar 归档,里面有三个文件:

文件内容
debian-binary格式版本号(通常是 2.0
control.tar.*包元数据、依赖声明、安装脚本
data.tar.*实际要放到系统里的文件

操作步骤

1. 查看包信息

bash
mkdir -p /tmp/deb-extract && cd /tmp/deb-extract
ar x /path/to/package_arm64.deb
tar xf control.tar.* ./control
cat control

重点关注 PackageArchitectureDepends 三个字段。Architecture 必须是 arm64(对应 Fedora 的 aarch64),x86 的包在 ARM 上跑不了。

2. 查看文件结构

bash
tar tf data.tar.* | head -30

看一下文件会被放到哪里。常见的目录结构:

DEB 中的路径用途
./opt/<appname>/应用主体(Electron 应用常见)
./usr/bin/可执行文件或启动脚本
./usr/share/applications/桌面入口 .desktop 文件
./usr/share/icons/应用图标
./usr/lib/共享库
./etc/配置文件

3. 解压

bash
tar xf data.tar.*

4. 放置文件

两种策略:

系统级安装(需要 sudo,和 RPM 安装的软件一样):

bash
sudo cp -r opt/* /opt/
sudo cp -r usr/bin/* /usr/bin/
sudo cp -r usr/share/applications/* /usr/share/applications/
sudo cp -r usr/share/icons/* /usr/share/icons/
sudo cp -r usr/lib/* /usr/lib/

用户级安装(不需要 sudo,推荐单用户场景):

bash
mkdir -p ~/.local/opt ~/.local/share/applications ~/.local/share/icons
cp -r opt/<appname> ~/.local/opt/
cp usr/share/icons/hicolor/*/apps/<appname>.png ~/.local/share/icons/hicolor/*/apps/

然后手写 .desktop 文件,把 Exec 路径指向 ~/.local/opt/...

5. 更新缓存

bash
sudo update-desktop-database /usr/share/applications/
sudo gtk-update-icon-cache -f -t /usr/share/icons/hicolor/
sudo update-mime-database /usr/share/mime/

用户级安装则把路径改为 ~/.local/share/...,不需要 sudo。

6. 清理

bash
rm -rf /tmp/deb-extract

桌面入口修复

DEB 包里的 .desktop 文件的 Exec 路径通常是硬编码的(如 /opt/appname/app),如果你放到了别的位置,需要手动修正。如果用户级安装,直接新写一个 .desktop 文件更简单:

ini
[Desktop Entry]
Name=应用名
Exec=/home/<user>/.local/opt/<appname>/<binary> %U
Terminal=false
Type=Application
Icon=<appname>
Categories=Office;

方法二:alien 转换

alien 可以把 DEB 转成 RPM 格式,然后用 dnf 安装。理论上最方便,实际上转换后的包经常有问题。

bash
sudo dnf install alien
alien -r --scripts package_arm64.deb
sudo dnf install ./package-*.rpm

常见问题

  • 转换后的 RPM 依赖关系可能不正确(DEB 和 RPM 的依赖包名不同)
  • 安装脚本(postinst 等)可能依赖 Debian 特有的工具
  • 大型应用(如 WPS Office)转换后安装失败率很高

如果 alien 转换失败,直接用方法一。

方法三:容器化

完全隔离,不污染宿主系统,但体验最重:

bash
# Docker(如果有 arm64 镜像)
docker run -d --name app \
  -p 3000:3000 \
  image-name:arm64v8-tag

# Distrobox(推荐,更轻量)
distrobox create --name ubuntu-box --image ubuntu:24.04
distrobox enter ubuntu-box
sudo dpkg -i package_arm64.deb
sudo apt-get install -f

Distrobox 比 Docker 更适合桌面应用——它能直接访问宿主的 X11/Wayland、音频、GPU,应用窗口和原生应用无异。

依赖处理

DEB 包的 Depends 字段声明的是 Debian 包名(如 libgtk-3-0),Fedora 里对应的包名不同(如 gtk3)。常见对照:

DEB 依赖Fedora 包名
libgtk-3-0gtk3
libnotify4libnotify
libnss3nss
libxss1libXScrnSaver
libxtst6libXtst
libxrender1libXrender
libglu1-mesamesa-libGLU
libcups2cups-libs
libbz2-1.0bzip2-libs
libappindicator3-1libappindicator-gtk3

安装前先对照 control 文件中的 Depends,把缺的装上:

bash
sudo dnf install gtk3 libnotify nss libXScrnSaver libXtst libXrender

可以用 ldd 验证二进制文件的依赖是否全部满足:

bash
ldd /opt/<appname>/<binary> 2>&1 | grep "not found"

输出为空就说明没有缺失。

捆绑库冲突

大型应用(特别是国产软件)经常在安装包里自带一批系统库(libm.solibfreetype.so 等),这些捆绑库的版本可能和 Fedora 系统库不兼容,导致运行时报错。

典型症状

dlopen libXXX.so failed, error: /opt/app/lib/libm.so.6:
version `GLIBC_2.38' not found (required by /lib64/libxml2.so.2)

或者:

/lib64/libfontconfig.so.1: undefined symbol: FT_Set_Named_Instance

原因

应用自带的旧版库被优先加载(因为应用设置了 LD_LIBRARY_PATHRPATH),但系统的其他库依赖新版符号,两者版本不匹配。

解决方法

把冲突的捆绑库重命名为 .bak,让应用加载系统版本:

bash
cd /opt/<appname>/lib/  # 或者 addons/cef/ 等子目录
sudo mv libm.so.6 libm.so.6.bak
sudo mv libfreetype.so.6 libfreetype.so.6.bak

逐个排查的流程:

  1. 运行应用,看报错信息中提到哪个库
  2. 找到应用自带的那个库文件
  3. 重命名为 .bak
  4. 重新运行,看是否还有下一个冲突
  5. 重复直到启动成功

保留 .bak 而不是直接删除,方便回退。

WPS Office 实例

WPS Office arm64 DEB 在 Fedora 42 上需要处理两个捆绑库冲突:

捆绑库位置冲突原因
libm.so.6office6/addons/cef/版本太旧,不提供 GLIBC_2.38
libfreetype.so.6office6/版本 6.12.1 太旧,缺少 FT_Set_Named_Instance

重命名后 WPS 使用系统的 glibc 和 freetype,正常启动。

Electron 应用注意事项

WPS 协作、VS Code、Cursor 等 Electron 应用在 Fedora + GNOME + Wayland 下有一些通用问题:

沙箱——Electron 的 Chrome 沙箱在非 root 场景下可能报错,启动时加 --no-sandbox

bash
/opt/<appname>/<binary> --no-sandbox %U

系统托盘——GNOME 默认不显示系统托盘图标,需要安装 AppIndicator 扩展:

bash
sudo dnf install libappindicator-gtk3 gnome-shell-extension-appindicator
gsettings set org.gnome.shell enabled-extensions \
  "$(gsettings get org.gnome.shell enabled-extensions | sed "s/]/, 'appindicatorsupport@rgcjonas.gmail.com']/")"

窗口圆角——XWayland 窗口没有 GNOME 原生圆角,这是正常现象。

开机自启——在 ~/.config/autostart/ 下放 .desktop 文件即可。

卸载

手动放置的应用没有包管理器跟踪,卸载就是反向删除:

bash
# 系统级安装
sudo rm -rf /opt/<appname>
sudo rm /usr/bin/<related-scripts>
sudo rm /usr/share/applications/<appname>*.desktop
sudo rm -rf /usr/share/icons/hicolor/*/apps/<appname>*

# 用户级安装
rm -rf ~/.local/opt/<appname>
rm ~/.local/share/applications/<appname>.desktop
rm ~/.config/autostart/<appname>.desktop

总结

方法适用场景优点缺点
手动解压大多数情况完全可控,无转换风险需要手动处理依赖和 .desktop
alien 转换小型、依赖简单的包接近原生 RPM 体验大包容易失败
Distrobox依赖极其复杂的应用完全隔离额外资源开销

对于 aarch64 上只有 DEB 包的商业软件(WPS Office、WPS 协作等),手动解压是最可靠的方式。关键是处理好依赖映射和捆绑库冲突。

最后更新于:

Hosted by GitHub Pages