开发人员和包维护人员可能并不总是为所有 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
) - Slackware (
.tgz
,.txz
,.tbz
, .tlz
)。
当特定软件包或特定版本的软件包不可用于您的 Linux 发行版时,外星人程序就会派上用场。 您可以使用 Alien 轻松地将此类包转换为您喜欢的包格式并将其安装在您的系统上。
Alien 不仅是一个包转换器,它还可以在包转换后自动安装生成的包。 它甚至可以选择转换要在安装包时运行的脚本。 使用此选项时必须小心。 在使用此选项之前,您应该仔细检查脚本并检查这些脚本的作用。
当心: Alien 不应该用于转换重要的系统包,例如 在里面, 库,这是 Linux 系统运行所必需的。 专为特定 Linux 发行版设计的系统软件包不能互换使用,如果您强行尝试安装它们,可能会破坏您的系统。
在 Linux 中安装 Alien
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 发行版都打包了 package。 所以你不需要转换它。 我只是为了演示而使用它。
使用 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 会将包转换为 .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 转换软件包并自动安装它,请使用 -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 可以从单个包文件创建多种包文件格式。 下面的例子展示了如何创建 .deb
, 和 .tgz
包裹来自 .rpm
文件。
$ sudo alien --to-deb --to-tgz hello-2.10-7.x86_64.rpm
保留版本号
默认情况下,Alien 会在它转换的每个包的次要版本号上加 1。 比如版本号是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 包
希望这可以帮助。
资源:
- 外星人主页
AlienCommandline命令行工具转换Linux包LinuxLinux命令Linux howto开源包管理