【问题标题】:Why won't linux software supply binary edition? [closed]为什么linux软件不提供二进制版本? [关闭]
【发布时间】:2011-05-23 12:26:17
【问题描述】:

源文件很好; RPM/DEB 很容易获得; apt-get/yum 很方便。

但是如果没有 root 权限,我该怎么办?没有 sudo,我无法安装它们。由于缺少库文件,我无法编译它们。

只有少数开源工具提供二进制版本,解压后可以直接使用。但大多数不是。而且很多商业软件的安装不需要root权限,所以有办法避免这样的问题,对吧?

那么阻止开发人员提供二进制版本的原因是什么? 如果由于更新库文件,二进制文件可能仅限于特定平台, 我们可以在 tar 中包含所有必要的文件吗?

【问题讨论】:

  • 我的猜测是分发到源代码和构建指令的链接比尝试维护二进制文件更容易。
  • 如果该软件包不在您的发行版存储库中,您应该查看他们的“错误”站点或论坛以获取所需内容。或者尝试在不安装的情况下编译并在家中运行它。这有时会奏效。

标签: linux open-source software-distribution


【解决方案1】:

二进制包 (deb/rpm) 旨在让您远离依赖地狱。任何包都可以从包存储库中获取其依赖项。你只有一个副本。

一旦你开始在任何地方粘贴随机二进制文件,你必须跟踪所有依赖项。事情变得一团糟。

要么您确实拥有 sudo 权限,在这种情况下“sudo do_it_yourself”,一切都会很好,或者其他人正在为您管理您的系统,在这种情况下,sudo install_stuff_for_me_please 是他们的工作,所以这样做。

【讨论】:

    【解决方案2】:

    我可能是错的,但你真正感到沮丧的不是缺少二进制包,而是可用的二进制包需要 root 才能安装(并且可用的源包需要库包才能编译,这需要 root安装)。

    我认为这是因为默认情况下,这些软件包旨在安装以供系统范围使用,而不是安装在用户的主目录中,仅供该特定用户私人使用。

    有时可能会提取包文件(使用包工具的转储选项或使用某种假的 root / chroot 环境),然后将它们重新定位到替换位置 ~/bin 而不是 /usr/bin等)并让他们工作。

    其他时候,您可能需要使用预编译配置中指定的不同安装位置从源代码构建包。为此,您可能需要学习提取库文件并将它们安装在您的主目录下而不是系统位置。获取上游源代码 tarball 并构建它们可能会比您特定 linux 发行版的自定义源包更容易 - 尽管您必须自己理清依赖关系。

    一般来说,您似乎已经发现,具有良好包装的 linux 发行版面向单用户机器,用户可以在需要时升级到 root,或者面向所有安装都由系统管理员提供的多用户机器,但不适用于多用户或组织管理系统的非特权用户需要安装预构建软件以供个人使用而无需系统管理员访问或帮助的情况。

    可能值得考虑的一个选项是查看您是否可以安装(/请求安装)虚拟机软件,然后在您可以拥有超级用户功能的虚拟机中工作。另一种选择可能是请求一个盒子来安装没有组织特权功能的消费者发行版 - 如果 IT 感到不安,可能没有网络连接或位于经过严格过滤的网络连接之后。

    【讨论】:

      【解决方案3】:

      您可以使用源文件进行编译,并将它们安装在您的家中,然后从这里运行它们。我看不出这是一个与编程相关的问题

      【讨论】:

      • 原始发帖人声称他/她不能这样做,因为缺少库,但当然这些通常也可以构建。你好,递归;你好依赖地狱。
      • 对于像chrome这样的东西,编译起来并不容易。
      【解决方案4】:

      实际上,它们确实如此(对于最常见的平台):RPM、DEB 和类似文件通常是带有二进制文件的压缩档案(实际上,现在几乎没有东西必须在安装时编译,因为包维护者为您提供二进制文件),与执行安装/卸载维护任务的脚本打包在一起。提供包实际上使安装相关程序更容易,因为 99% 的配置都是由包本身为您完成的。

      也就是说,有tools to extract the files from the packages - 然后您可以自己“安装”提取的文件。这是相当多的工作,管理依赖项的任务将全部由您完成(而不是“由包管理系统负责”),但在您不能或不会使用的情况下,这可能是一种可行的方法包装管理。

      分发二进制文件的一个原因:兼容性。与流行的观点相反,并非每台计算机都是 x86 PC,因此维护源代码更容易,并且可以编译成任何形式特定的架构需求)

      【讨论】:

        【解决方案5】:

        不同的 linux 发行版不完全兼容二进制。商业软件包括自己的库版本,但它通常是开销,因为如果它的版本比你的系统包括的旧,那么这种软件的和平将是唯一使用它的软件(并且每块软件都有自己的库版本 - 是吗?真的好吗?)。实际上它是在使用静态链接时完成的。没有它,二进制文件几乎没有任何机会在您的系统中工作,而且时间越长,剩下的机会就越少。

        无论如何,您都可以下载所需的库,将它们放在您的主目录中,编译指向这些库的软件,并且无需 root 权限即可使用。您可以创建“/usr/lib”、“/usr/include”等的完整“主”副本,例如:“~/usr/lib”、“~/usr/include”...并使用它.只需在编译前进行一些配置即可。

        【讨论】:

          【解决方案6】:

          在 linux 和 unix 系统上无需 root 即可编译和使用软件。使用 VMware 或 live linux CDROM 在另一个系统上设置交叉编译工具链以匹配您的服务器架构。编译没有链接库的静态二进制文件。一些要使用的 GCC 参数是 -nostdlib -nodefaultlibs -lgcc -static

          reference

          然后登录到您的服务器并运行mkdir ~/bin。将静态编译的程序下载(ftp 或电子邮件附件)到 ~/bin,然后运行:chmod +x程序名称

          您现在应该可以运行该程序,但它可能无法访问系统的其他部分。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-01-26
            • 2015-06-17
            • 2022-01-15
            • 1970-01-01
            • 1970-01-01
            • 2016-09-22
            • 2018-05-09
            相关资源
            最近更新 更多