将钉钉deb转rpm

DingTalk Fedora Packager#

把官方钉钉 Linux .deb 包重新打成 Fedora 可安装的 .rpm。

这个项目不是通用 deb -> rpm 转换器,只处理钉钉包,并固化了 Fedora 上实际踩到的兼容问题。

处理代码#

![[build_dingtalk_rpm.py]]

背景#

官方钉钉 Linux 包主要面向 Debian/Ubuntu 系发行版。直接原样转换成 RPM 后,在 Fedora 上会遇到几个典型问题:

  • 菜单入口执行 /opt/apps/com.alibabainc.dingtalk/files/Elevator.sh,它会走钉钉自带的预加载逻辑。
  • 包内旧版 libm.so.6 会遮住 Fedora 系统库,导致 GLIBC_2.38、GLIBC_2.43 等符号找不到。
  • dingtalk_dll.so、libconference_new.so 带有 executable stack 标记,Fedora 会拒绝加载。
  • RPM 如果声明拥有 /usr/bin、/usr/share/applications 这类系统目录,会和 filesystem 包冲突。

这里的处理思路参考了 zhullyb/dingtalk-for-fedora,并整理成一个可以直接处理本地 .deb 的脚本。

已验证版本#

本次实际处理并验证通过的钉钉版本:

com.alibabainc.dingtalk_8.1.0.6021101_amd64.deb

生成并验证通过的 Fedora RPM:

com.alibabainc.dingtalk-8.1.0.6021101-4.x86_64.rpm

验证环境为 Fedora 44 x86_64,glibc 2.43。其他钉钉版本可以用脚本尝试处理,但需要重新验证启动和会议等核心功能。

环境依赖#

构建依赖:

sudo dnf install python3-rpm rpm cpio xz patchelf binutils tar

运行依赖会写进生成的 RPM,安装时由 dnf 自动处理:

Distrobox使用

软件只有deb怎么办#

sudo dnf install distrobox
distrobox create --name deb-apps --image ubuntu:latest

distrobox enter deb-apps # 等待漫长的安装
# 进入主机的下载文件夹(容器自动挂载了主机文件)
cd ~/Downloads
# 安装deb
sudo dpkg -i cursor*.deb
# 修复依赖
sudo apt update && sudo apt -f install -y
# 导出
distrobox-export --app cursor

完事!

Alien终究难堪大用 还是distrobox暂时彰显牛逼

如果哪一天不用了#

distrobox-export --app cursor --delete

具体实例处理#

1. 全局 VPN / 需要虚拟网卡的代理(加 TUN 设备):#

每测试过还

distrobox create --name deb-apps --image ubuntu:latest --volume /dev/net/tun:/dev/net/tun

2. 钉钉#

sudo apt install libpulse-dev
sudo apt install -y libxcb-xinerama0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-shape0 libxcb-xfixes0 libxcb-xkb1 libxkbcommon-x11-0 libxcb-util1 libxcb-cursor0
distrobox-export --app /usr/share/applications/com.alibabainc.dingtalk.desktop

输入法#

容器内