怎样将 Linux 安装包转换为其他格式

alien 程序将安装包从一个 Linux 发行版转换为在另一个发行版上使用。 但是现在 Snap 和 Flatpak 不会让这变得多余吗? 有点,但它不是那么简单。

Linux 包装系统

为了允许他们的用户安装软件,Linux 发行版需要一个软件打包系统。 如果发行版是另一个已建立发行版的分支,它通常会坚持使用旧发行版的打包系统。

这就是为什么 Fedora 使用 RPM 包(以前代表 RedHat 包管理器),而 Ubuntu 及其众多子代使用 DEB 包。 DEB 是“Debian”的简称。 其他发行版选择编写自己的包管理系统。 为一个包管理器打包的安装文件不能与其他包管理器互换。

传统上,应用程序开发人员必须以他们选择支持的每种格式打包他们的应用程序,或者与不同 Linux 发行版的维护者合作,并将打包步骤交给他们。 后者引入了将新版本交付给用户的延迟,前者给了开发人员很多额外的工作。

Snap 和 Flatpak 项目试图提供包分发的圣杯:打包您的应用程序,然后将其安装在任何 Linux 发行版上。 当然,您所追求的应用程序可能有也可能没有 Snap 或 Flatpak。

只要您对克隆 Git 存储库和从源代码构建应用程序感到满意,您就可以完全从等式中删除打包系统。 但不是每个人都是。 并不是所有的应用程序——即使是在 Linux 上——都是开源的,所以你无论怎样都不能从源代码构建所有东西。


一些发行版的维护者非常擅长为其他平台获取包并将它们重新打包以用于他们自己的包管理系统,包括闭源应用程序。 但总会有应用程序提供 DEB 或 RPM(这两种主要格式)的情况,而其他所有人都需要自己弄清楚。

像这样的程序 alien 存在用于解决将包文件从另一个发行版转换为您的 Linux 计算机上需要的版本的问题。 这在理论上很好,但他们有多成功?

外星人实验

布丁的证据在吃。

我们采用了三种不同的 RPM 并使用 alien 将它们转换为 DEB。 然后我们尝试在 Ubuntu 上安装新创建的 DEB。

在我们所有的测试用例中,也有一个可以下载的 DEB,所以我们所做的实际上是多余的。 但我们认为测试应用程序——Microsoft Edge 浏览器、Atom 编辑器和 Slack——将是一个很好的测试 alien的功能,所以我们忽略了现成的 DEB。

安装外星人

在 Ubuntu 上安装外星人很简单, Fedora和 Manjaro。

在 Ubuntu 上,您可以使用以下命令:

sudo apt install alien

在 Fedora,您需要输入:

sudo dnf install alien

安装外星人 Fedora

在 Manjaro 上,外星人包位于 Arch 用户存储库中。 这意味着 pacman 将无法看到它,因此我们需要使用 AUR 帮助程序,例如 yay. 包名也略有不同。

yay -S alien_package_converter

在 Manjaro 上安装外星人

使用外星人

使用 alien 您指定要转换的文件以及要转换为的格式。 它会创建一个具有相同文件名的文件——通常是——并带有您要求的格式的扩展名。


使用 alien 创建包原因 alien 增加包的版本号。 如果包号在文件名中,文件名也会改变。

这些是格式 alien 可以转换成。

  • -d: 转换为 DEB 文件,适用于 Debian、Ubuntu 和所有衍生产品。
  • -r: 转换为 RPM 文件,适用于 RedHat、CentOS 和 Fedora.
  • -t:转换为 TAR.GZ 存档文件,用于 Arch 和基于 Arch 的系统,如 EndeavourOS 和 Manjaro。
  • -l: 转换为 LSB 文件,Linux Standard Base 文件。 这是开发交叉分发包格式的另一项举措。
  • -p:转换为 PKG 文件,这是 Solaris 使用的一种格式。
  • –to-slp:转换为 SLP 包,这是已停产的 Stampede Linux 发行版使用的格式。

我们将使用的格式选项是 -d (DEB) 因为我们正在转换为 DEB 文件。 我们还将使用 -c (scripts) 选项来转换包中包含的任何脚本。

Microsoft Edge

我们下载了 Microsoft 的 RPM Edge 浏览器,并在其上运行以下命令:

sudo alien -d -c microsoft-edge-beta-97.0.1072.54-1.x86_64.rpm

转换 Edge RPM 到 DEB 文件

没有 -c (scripts) 选项它没有创建 DEB 文件,它报告了一个错误。 随着 -c 选项,它确实创建了 DEB。

原始 RPM 文件和新创建的 DEB 文件

请注意,DEB 文件名包含 54-2,而不是 54-1。


转换脚本不太可能有好的结果。 它们很可能是针对原始包文件的真正目标平台所特有的特定情况或配置而编写的。 正因为如此,我们并没有抱太大希望。 尽管如此,我们还是尝试使用 dpkg 程序和 -i (安装)选项。

sudo dpkg -i microsoft-edge-beta_97.0.1072.54-2_amd64.deb

使用新创建的 DEB 文件安装失败

它没有用。

我们还尝试双击 DEB 文件并使用 Ubuntu Software 应用程序安装 DEB。 有趣的是,软件应用程序知道 DEB 是由 alien.

使用 Ubuntu Software 应用程序安装新创建的 DEB 文件

那也没有用。 只是为了确保 Edge 浏览器实际上会安装在 Ubuntu 上,我们安装了官方的 Microsoft Edge DEB 文件。

sudo dpkg -i microsoft-edge-beta_97.0.1072.54-1_amd64.deb

官方安装命令 Microsoft Edge DEB 文件

这没有问题。 你可以在下面看到 Microsoft Edge 在 Ubuntu 上运行。

Microsoft Edge  在 Ubuntu 上运行

原子编辑器

我们下载了流行的 Atom 编辑器的 RPM 安装包。 我们使用相同的 alien 命令将其转换为 DEB。

sudo alien -d -c atom.x86_64.rpm

将 Atom RPM 文件转换为 DEB 文件

这创建了一个没有任何警告或错误的 DEB 文件。 我们使用 dpkg 命令与 -i (安装)选项。

sudo dpkg -i atom_1.58.0-1.1_amd64.deb

从新创建的 DEB 文件安装 Atom

那工作得很好。

在 Ubuntu 上运行的 Atom

Slack 商务通讯应用

最后,我们尝试将 Slack RPM 转换为 DEB。

sudo alien -d -c slack-4.23.0-0.1.fc21.x86_64.rpm

将 Slack RPM 文件转换为 DEB 文件


同样,这创建了一个没有警告和错误的 DEB。 我们使用了这个安装命令:

sudo dpkg -i slack_4.23.0-1.1_amd64.deb

从新创建的 DEB 文件安装 Slack

安装工作完美无缺。 Slack 已启动并运行,没有任何问题。

Slack 在 Ubuntu 上运行

结果好坏参半

一个实用程序,例如 alien 不可避免地要打一场硬仗。 它在每种情况下都能正常工作的可能性很大,我们的少量测试证明了这一点。 话虽如此,当它起作用时,它很棒。

如果你处于没有别的办法的情况下,给 alien 试一试。 但是,如果您有任何其他可用的方法(Snap、Flatpak 或从源代码构建),请先尝试这些方法。 甚至作者 alien 知道它的局限性,并把这个警告放在 man 页:

不应该使用外星人来替换重要的系统包,如 init、libc 或其他对系统运行至关重要的东西。 这些包中的许多包在不同的发行版中设置不同,并且来自不同发行版的包不能互换使用。 一般来说,如果您无法在不破坏系统的情况下删除一个包,请不要尝试用外来版本替换它。


虽然它可能会让你摆脱困境,但在转向之前确保你已经用尽了所有其他可能性 alien.

但是,当没有别的事时, alien 可能会让你大吃一惊。

怎样使用 Linux 的 man 命令:隐藏的秘密和基础