我想创建一个脚本,能够在任何 Linux 发行版中安装我想要的一组软件包(最初创建它以在 Ubuntu 中运行,然后将其扩展到任何一个),并且基本上充当环境设置。此类包的示例是zsh、omz、fzf、自动完成等等...
我的问题是,我是否应该依赖包管理器 ( ) 的存在来apt-get
安装包,然后通过脚本调用它或手动调用wget
源文件并继续安装?您认为哪个最好?
答案1
我建议始终首选本机包管理器来处理需要链接到系统库的任何内容,或者目标系统上的其他内容可能链接到的任何内容。否则,您将需要努力使事情与您所针对的每个平台的发行版怪癖一起工作,并且如果人们尝试使用您的版本与他们安装的软件包的版本,则会导致他们遇到问题需要。
正如@ArtemS.Tashkinov 所说,您需要单独处理每个目标。这确实无法扩展:GNU Radio 社区有一个名为 PyBOMBS 的工具,它试图为少数平台做到这一点。这是一场维护噩梦。我们应该从一开始就使用像 conda 这样的现有前缀管理器,用于用户实际上想要隔离前缀的用例,并付出更多努力与官方发行版包维护者协调,使我们发布的软件可以通过 apt、yum、pacman 安装、emerge、zypper...并且实际上可以完美地开箱即用。
特别是关于您的软件:在任何情况下都不应将手工编译的 zsh 安装到系统路径中。这就是噩梦般的不兼容的根源。只需安装您的发行版带来的 zsh 即可。
Linux 发行版是一种软件冲突避免机制如果可能的话你应该使用。从源代码构建东西并安装用户晚上通过包管理器合理安装的东西会导致冲突,从而破坏用户的系统。
1 这是我个人的看法; PyBOMBS1 和 PyBOMBS2 仍然启用了大量出色的应用程序!拥有它绝对是一件很酷的事情。这是一项巨大的努力,重复了更大的社区已经在做的事情。
答案2
这个项目是不现实的,因为 Linux 发行版数量巨大,并且每个发行版都有多个版本(过去、现在和未来),这些版本可能使用不同的包管理器。 (对于最后一点,请考虑Red Hat 中的rpm
、yum
、 和dnf
)。
如果您决定依赖包管理工具,那么就会出现这种情况。
另一方面,如果您想要下载每个工具的源代码并在本地编译它(从而制作一个类似 Gentoo 的超级发行版),您肯定会因为依赖项不兼容而感到无尽的头痛。
总之,这个工程浩大且不可行。