如何使用 Alien 转换 Linux 软件包

开发人员和包维护者可能并不总是为所有 Linux 发行版创建包。 某些软件包可能仅适用于特定的 Linux 平台。 在这种情况下,您可以使用包转换工具,例如 外星人 轻松将 Linux 包转换为不同的格式。 在本指南中,我们将了解什么是 Alien,如何在各种 Linux 操作系统中安装 Alien,然后如何使用 Alien 包转换器将 Linux 包从一种格式转换为另一种格式。

什么是外星人?

Alien 是一个命令行包转换器,可以在不同的 Linux 包格式之间进行转换,例如 Red Hat rpm、Debian deb、Stampede slp、Slackware tgz 和 Solaris pkg 等。

Alien 目前支持以下封装格式:

  • Linux 标准基础 (LSB),
  • 符合 LSB 标准 .rpm 包,
  • .deb,
  • 踩踏 (.slp),
  • 索拉里斯 (.pkg)
  • 松弛软件 (.tgz, .txz, .tbz.tlz)。

当特定软件包或特定版本的软件包不适用于您的 Linux 发行版时,外星程序就会派上用场。 您可以使用 Alien 轻松地将此类包转换为您喜欢的包格式并将其安装在您的系统上。

Alien 不仅是一个包转换器,它还可以在包转换后自动安装生成的包。 它甚至可以选择转换安装包时要运行的脚本。 使用此选项时必须小心。 在使用此选项之前,您应该仔细检查脚本并检查这些脚本的作用。

小心: Alien 不应该用于转换重要的系统包,例如 在里面, ,这是您的 Linux 系统正常运行所必需的。 专为特定 Linux 发行版设计的系统软件包不能互换使用,如果您强行安装它们可能会破坏您的系统。

在 Linux 中安装外星人

Alien 包转换器在流行的 Linux 发行版的默认存储库中可用。

要在 Alpine Linux 中安装 Alien,请运行:

$ sudo apk add alien

在 Debian、Ubuntu LTS、Linux Mint、Pop!_OS 中安装 Alien:

$ sudo apt install alien

安装外星人 Fedora:

$ sudo dnf install alien

在 CentOS 8、RHEL 8、AlmaLinux 8、Rocky Linux 8 中安装 Alien:

$ sudo dnf install epel-release
$ sudo dnf install alien

使用 Alien 转换 Linux 包

使用 Alien 将 Linux 软件包从一种格式转换为另一种格式的一般语法是:

alien [--to-deb] [--to-rpm] [--to-tgz] [--to-slp] [options] file [...]

使用 Alien 转换包非常简单!

转换一个 .rpm 打包成一个 .deb 包,只需运行外星人 root 或者 sudo 用户:

$ sudo alien --to-deb /path/to/file.rpm

同样,要转换 .deb 文件到 .rpm, 跑:

$ sudo alien --to-rpm /path/to/file.deb

这是将 Linux 包转换为不同格式的受支持标志列表。

  • -d, --to-deb – 制作 debian 软件包。 这是默认设置。
  • -r, --to-rpm – 制作 rpm 包。
  • -l, --to-lsb – 制作 LSB 包。
  • -t, --to-tgz – 制作 tgz 包。
  • --to-slp – 制作 slp 包。
  • -p, --to-pkg – 制作 Solaris pkg 软件包。

让我们看一些例子。 出于本指南的目的,我将使用 hello world .rpm 包裹。 请注意 hello 包几乎适用于所有 Linux 发行版。 所以你不需要转换它。 我只是为了演示而使用它。

使用 Alien 将 RPM 包转换为 DEB 包

现在让我们将 hello rpm 包转换为 .deb 使用 Alien 的格式如下:

$ sudo alien --to-deb hello-2.10-5.fc34.x86_64.rpm

或者很快,

$ sudo alien -d hello-2.10-5.fc34.x86_64.rpm

这将转换给定的 .rpm 打包成 .deb 打包并将生成的包保存在当前目录中。

使用 Alien 将 rpm 包转换为 deb 包

小心: 如果未指定标志,Alien 会将包转换为 .deb 默认格式。

您可以使用默认的包管理器安装生成的包。

我们也可以一次转换多个包。 以下命令会将给定的包(hello & vim)转换为 .deb 格式。

$ sudo alien hello-2.10-7.x86_64.rpm vim-enhanced-8.2.2637-1.fc34.x86_64.rpm 

使用 Alien 将 DEB 包转换为 RPM 包

同样,我们可以将 .deb 打包成 .rpm 包文件如下:

$ sudo alien --to-rpm hello-2.10-5.fc34.x86_64.rpm

或者很快,

$ sudo alien -r hello-2.10-5.fc34.x86_64.rpm
使用 Alien 将 deb 包转换为 rpm 包

自动安装包

有时,您可能希望自动安装生成的包。

要转换软件包并使用 Alien 自动安装,请使用 -i 旗帜。

$ sudo alien -d -i hello-2.10-7.x86_64.rpm 

该命令会将给定的 .rpm 包转换为 .deb 包格式然后安装,最后删除生成的包。

样本输出:

	dpkg --no-force-overwrite -i hello_2.10-8_amd64.deb
Selecting previously unselected package hello.
(Reading database ... 52712 files and directories currently installed.)
Preparing to unpack hello_2.10-8_amd64.deb ...
Unpacking hello (2.10-8) ...
Setting up hello (2.10-8) ...
Processing triggers for man-db (2.9.4-2) ...
使用 Alien 自动安装软件包使用 Alien 自动安装软件包

转换为多种封装格式

Alien 可以从单个包文件创建多种包文件格式。 以下 example 展示了如何创建 .deb, 和 .tgz 来自 .rpm 文件。

$ sudo alien --to-deb --to-tgz hello-2.10-7.x86_64.rpm
将单个包转换为多种包格式使用 Alien 将单个包转换为多种包格式

保留版本号

默认情况下,Alien 在它转换的每个包的次要版本号上加一。 例如,如果版本号是 1.2-3,Alien 会在次要版本上加一,并将其​​更改为 1.2-4。

看看下面的命令输出。

$ sudo alien --to-deb hello-2.10-7.x86_64.rpm 
hello_2.10-8_amd64.deb generated

上述命令中源码包的版本为2.10.7。 包转换后,Alien 将目标文件中的次要版本从 7 更改为 8。

如果您不希望 Alien 更改版本号,请使用 -k, --keep-version 标志以在生成的包中保留原始版本号。

$ sudo alien -k --to-deb hello-2.10-7.x86_64.rpm 
hello_2.10-7_amd64.deb generated

正如您在上面看到的,源文件和目标具有相同的版本号。

获得帮助

要显示 Alien 的简要说明和所有支持的常规选项,请通过运行以下命令参考 Alien 帮助部分:

$ alien --help

另外,请参阅手册页。

$ man alien

结论

我不会对 Alien 转换器的准确性做出任何保证。 我只测试了几个包,例如 Vim、Hello world 和 Nano。 据我测试,Alien 在 Debian 11 Bullseye 中对我来说工作得很好。

它可能不适用于某些依赖大量依赖项的包。 结果可能因包装而异。

在这种情况下,您可能需要手动从源代码构建它们或使用其他可靠的应用程序,例如 检查安装 或者 每分钟. 我建议您查看以下资源以了解如何从源代码构建包。

  • 如何从源代码构建 Debian 软件包
  • 如何使用 CheckInstall 从源代码构建包
  • 如何轻松地为多个平台构建 Linux 包
  • 重新创建已安装在系统上的 Debian 二进制软件包
  • 如何将 DEB 包转换为 Arch Linux 包

希望这可以帮助。

资源: