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. 查看包信息
mkdir -p /tmp/deb-extract && cd /tmp/deb-extract
ar x /path/to/package_arm64.deb
tar xf control.tar.* ./control
cat control重点关注 Package、Architecture、Depends 三个字段。Architecture 必须是 arm64(对应 Fedora 的 aarch64),x86 的包在 ARM 上跑不了。
2. 查看文件结构
tar tf data.tar.* | head -30看一下文件会被放到哪里。常见的目录结构:
| DEB 中的路径 | 用途 |
|---|---|
./opt/<appname>/ | 应用主体(Electron 应用常见) |
./usr/bin/ | 可执行文件或启动脚本 |
./usr/share/applications/ | 桌面入口 .desktop 文件 |
./usr/share/icons/ | 应用图标 |
./usr/lib/ | 共享库 |
./etc/ | 配置文件 |
3. 解压
tar xf data.tar.*4. 放置文件
两种策略:
系统级安装(需要 sudo,和 RPM 安装的软件一样):
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,推荐单用户场景):
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. 更新缓存
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. 清理
rm -rf /tmp/deb-extract桌面入口修复
DEB 包里的 .desktop 文件的 Exec 路径通常是硬编码的(如 /opt/appname/app),如果你放到了别的位置,需要手动修正。如果用户级安装,直接新写一个 .desktop 文件更简单:
[Desktop Entry]
Name=应用名
Exec=/home/<user>/.local/opt/<appname>/<binary> %U
Terminal=false
Type=Application
Icon=<appname>
Categories=Office;方法二:alien 转换
alien 可以把 DEB 转成 RPM 格式,然后用 dnf 安装。理论上最方便,实际上转换后的包经常有问题。
sudo dnf install alien
alien -r --scripts package_arm64.deb
sudo dnf install ./package-*.rpm常见问题:
- 转换后的 RPM 依赖关系可能不正确(DEB 和 RPM 的依赖包名不同)
- 安装脚本(
postinst等)可能依赖 Debian 特有的工具 - 大型应用(如 WPS Office)转换后安装失败率很高
如果 alien 转换失败,直接用方法一。
方法三:容器化
完全隔离,不污染宿主系统,但体验最重:
# 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 -fDistrobox 比 Docker 更适合桌面应用——它能直接访问宿主的 X11/Wayland、音频、GPU,应用窗口和原生应用无异。
依赖处理
DEB 包的 Depends 字段声明的是 Debian 包名(如 libgtk-3-0),Fedora 里对应的包名不同(如 gtk3)。常见对照:
| DEB 依赖 | Fedora 包名 |
|---|---|
libgtk-3-0 | gtk3 |
libnotify4 | libnotify |
libnss3 | nss |
libxss1 | libXScrnSaver |
libxtst6 | libXtst |
libxrender1 | libXrender |
libglu1-mesa | mesa-libGLU |
libcups2 | cups-libs |
libbz2-1.0 | bzip2-libs |
libappindicator3-1 | libappindicator-gtk3 |
安装前先对照 control 文件中的 Depends,把缺的装上:
sudo dnf install gtk3 libnotify nss libXScrnSaver libXtst libXrender可以用 ldd 验证二进制文件的依赖是否全部满足:
ldd /opt/<appname>/<binary> 2>&1 | grep "not found"输出为空就说明没有缺失。
捆绑库冲突
大型应用(特别是国产软件)经常在安装包里自带一批系统库(libm.so、libfreetype.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_PATH 或 RPATH),但系统的其他库依赖新版符号,两者版本不匹配。
解决方法
把冲突的捆绑库重命名为 .bak,让应用加载系统版本:
cd /opt/<appname>/lib/ # 或者 addons/cef/ 等子目录
sudo mv libm.so.6 libm.so.6.bak
sudo mv libfreetype.so.6 libfreetype.so.6.bak逐个排查的流程:
- 运行应用,看报错信息中提到哪个库
- 找到应用自带的那个库文件
- 重命名为
.bak - 重新运行,看是否还有下一个冲突
- 重复直到启动成功
保留
.bak而不是直接删除,方便回退。
WPS Office 实例
WPS Office arm64 DEB 在 Fedora 42 上需要处理两个捆绑库冲突:
| 捆绑库 | 位置 | 冲突原因 |
|---|---|---|
libm.so.6 | office6/addons/cef/ | 版本太旧,不提供 GLIBC_2.38 |
libfreetype.so.6 | office6/ | 版本 6.12.1 太旧,缺少 FT_Set_Named_Instance |
重命名后 WPS 使用系统的 glibc 和 freetype,正常启动。
Electron 应用注意事项
WPS 协作、VS Code、Cursor 等 Electron 应用在 Fedora + GNOME + Wayland 下有一些通用问题:
沙箱——Electron 的 Chrome 沙箱在非 root 场景下可能报错,启动时加 --no-sandbox:
/opt/<appname>/<binary> --no-sandbox %U系统托盘——GNOME 默认不显示系统托盘图标,需要安装 AppIndicator 扩展:
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 文件即可。
卸载
手动放置的应用没有包管理器跟踪,卸载就是反向删除:
# 系统级安装
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 协作等),手动解压是最可靠的方式。关键是处理好依赖映射和捆绑库冲突。