初次尝试今天尝试了一下,如何在 openSUSE Tumbleweed 20230613 上运行钉钉 linux 版本,现在记录一下过程。
PS: 最新版本钉钉(dingtalk_7.5.0.40221)在 openSUSE Tumbleweed 20240226 只需要移除软件附带的 libm.so.6, 使用系统的so文件即可;
首先去官网下载 dingtalk 的 deb 包,毕竟官方支持的发行版有限,只有deb系列有包可以直接安装,即使安装成功也不一定能使用。(点击这里可以下载 dingtalk_1.8.0.30601,dingtalk_7.0.40.30706,dingtalk_7.5.0.40221使用 ar -x 将文件解压到某个位置)
12345678┌──(suse@localhost)-[~/Documents/com.alibabainc.dingtalk_1.8.0.30601_amd64]└─$ ls -altotal 242776drwxr-xr-x 1 suse suse 84 Jun 16 13:27 .drwxr-xr-x 1 suse suse 2060 Jun 16 11:25 ..-rw-r--r-- 1 suse suse 66520 Jun 1 12:05 control.tar.xz-rw-r--r-- 1 suse suse 248528292 Jun 1 12:05 data.tar.xz-rw-r--r-- 1 suse suse 4 Jun 1 12:05 debian-binary
我们继续解压 data.tar.xz
12345678910┌──(suse@localhost)-[~/Documents/com.alibabainc.dingtalk_1.8.0.30601_amd64]└─$ ls -altotal 242776drwxr-xr-x 1 suse suse 84 Jun 16 13:27 .drwxr-xr-x 1 suse suse 2060 Jun 16 11:25 ..-rw-r--r-- 1 suse suse 66520 Jun 1 12:05 control.tar.xzdrwxr-xr-x 1 suse suse 12 Jun 16 13:27 data-rw-r--r-- 1 suse suse 248528292 Jun 1 12:05 data.tar.xz-rw-r--r-- 1 suse suse 4 Jun 1 12:05 debian-binary
现在我们进入 data 目录,其中 opt 目录下是我们所需要的文件
1234567┌──(suse@localhost)-[~/Documents/com.alibabainc.dingtalk_1.8.0.30601_amd64/data]└─$ ls -altotal 0drwxr-xr-x 1 suse suse 12 Jun 16 13:27 .drwxr-xr-x 1 suse suse 84 Jun 16 13:27 ..drwxr-xr-x 1 suse suse 8 Jun 16 13:27 optdrwxr-xr-x 1 suse suse 10 Jun 16 13:27 usr
我习惯将手动安装的软件放在 /opt 目录下,所以接下来我会将软件移动到 /opt
1sudo mv ./opt/apps /opt
导航到 /opt,可以看到我们的目录是下面这样,如果你本来就有 apps 目录,自行选择合适的方式处理
123456789┌──(suse@localhost)-[/opt]└─$ ls -altotal 0dr-xr-xr-x 1 suse suse 208 Jun 16 13:45 .drwxr-xr-x 1 root root 142 Oct 18 2022 ..drwxr-xr-x 1 suse suse 46 Jun 16 13:27 apps......drwxr-xr-x 1 root root 122 Apr 27 16:19 wemeet
前面的准备工作做完之后我们开始进入正题,如何才能运行这个 App,首先我们导航到 /opt/apps/com.alibabainc.dingtalk/files,找到名为 Elevator.sh的文件,在终端执行ta,很明显不能正确执行并抛出了一些错误
1234567┌──(suse@localhost)-[/opt/apps/com.alibabainc.dingtalk/files]└─$ ./Elevator.sh "opensuse-tumbleweed""opensuse-tumbleweed" branch"opensuse-tumbleweed" glibc lower branchpreload_libs=./envlib.so ./libharfbuzz.so.0Load /opt/apps/com.alibabainc.dingtalk/files/1.8.0-Release.30601//dingtalk_dll.so failed! Err=./libm.so.6: version `GLIBC_2.29' not found (required by /lib64/libgtk-x11-2.0.so.0)
看来是 dingtalk 自己是自带 libm.so.6 文件而且而系统安装的文件不一致,我们检查并确认一下,确实没有系统文件 /lib64/libgtk-x11-2.0.so.0 所需要的 GLIBC_2.29。
12345678910111213┌──(suse@localhost)-[/opt/apps/com.alibabainc.dingtalk/files]└─$ strings ./1.8.0-Release.30601/libm.so.6 | grep ^GLIBCGLIBC_2.2.5GLIBC_2.4GLIBC_2.15GLIBC_2.18GLIBC_2.23GLIBC_2.24GLIBC_2.25GLIBC_2.26GLIBC_2.27GLIBC_2.28GLIBC_PRIVATE
所以我们可以手动复制或者软链接一个 /lib64/libm.so.6 下的文件到 release 目录,也可以直接删掉,让系统文件生效。这里我选择新建一个 exclude 目录 将 release 下的 libm.so.6 移动过去,做一个备份。现在我们尝试再次执行 Elevator.sh 会有新的错误抛出
123┌──(suse@localhost)-[/opt/apps/com.alibabainc.dingtalk/files/1.8.0-Release.30601]└─$ ./com.alibabainc.dingtalk Load /opt/apps/com.alibabainc.dingtalk/files/1.8.0-Release.30601//dingtalk_dll.so failed! Err=/lib64/libcairo.so.2: undefined symbol: FT_Get_Color_Glyph_Layer
看起来还是文件版本不一致的文件啊,简单搜索发现libcairo.so.2 这个库和 libfreetype 有关,所以将 release 下的 libfreetype.so.6 和 libfreetype.so.6.16.1 移动到 exclude。继续运行…好了,完成~
2025-09-28 13:20:55 更新针对 com.alibabainc.dingtalk_7.6.45.5062501_amd64,在最新的opeSUSE Tumbleweed 或者系统安全策略不允许executable stack时会遇到下面的问题:
Load /opt/apps/com.alibabainc.dingtalk/files/7.6.45-Release.5062501//dingtalk_dll.so failed! Err=/opt/apps/com.alibabainc.dingtalk/files/7.6.45-Release.5062501//dingtalk_dll.so: cannot enable executable stack as shared object requires: Invalid argument
检查 dingtalk_dll.so 的栈权限需求,发现输出X->需要可执行栈
1execstack -q /opt/apps/com.alibabainc.dingtalk/files/7.6.45-Release.5062501/dingtalk_dll.so
大概率是错误的声明需要可执行栈,尝试删除
sudo execstack -c /opt/apps/com.alibabainc.dingtalk/files/7.6.45-Release.5062501/dingtalk_dll.so
🎉🎉🎉