将二进制文件安装到 /bin、/sbin、/usr/bin 和 /usr/sbin 中,与 --prefix 和 DESTDIR 交互

2023-11-27

大多数使用 Autotools 的软件包都是用户级实用程序,或者至少具有足够高的级别,可以完全在/usr,或低到完全低于/usr.

我正在编写一个包,需要将一些文件安装到/bin,一些进入/sbin, /usr/bin and /usr/sbin。它正在取代传统上放置在这些位置下的几个现有二进制文件。

它还需要安装PAM模块/lib/security(显然/usr/lib/security行不通)。

现在的问题是:默认配置的前缀似乎是/usr/local。我可以控制我的默认值configure.ac。至少 Gentoo Linux 的默认设置是--prefix=/usr。这是一个问题,因为它会覆盖我放入的任何默认值configure.ac.

我简要地了解了其他类似的软件包是如何处理这个问题的。以下是我的发现:

  • bash-4.1 似乎安装到/usr/bin,发行版构建脚本将 bash 二进制文件移动到/bin
  • Linux-PAM 存在漏洞configure.ac这样如果前缀是/usr,它将使用/sbin and /lib对于它的一些文件。它还将默认前缀设置为/usr。我不确定如果用户传递不同的值会发生什么--prefix.
  • shadow-utils set exec_prefix to ""如果前缀是/usr. Then bin_PROGRAMS指的是/bin, and ubindir被声明为指向${prefix}/bin以便ubin_PROGRAMS指的是/usr/bin.

我的问题是:

  • 其他发行版的默认值是什么--prefix?我可以合理地假设它总是/usr?我现在只关心 Linux,而不是 BSD。
  • 上述哪种解决方案看起来最干净?您看到一些更好的解决方案吗?
  • 上述解决方案有哪些潜在问题?这些问题有一些解决方案吗?
  • 我很乐意将所有内容安装到/bin并创建兼容性符号链接。它会让问题变得更简单吗?
  • 还有其他的吗common构建低级系统实用程序可接受的系统,以更好地满足我的要求?

请随时要求澄清我正在尝试做什么。请注意,如果我想保留与我要替换的内容的兼容性,如果它用于传送二进制文件 A 和 B,则其中之一/sbin和一在/usr/bin,我想我只需要在这些地方进行替换或者至少有符号链接。 PAM 模块也有固定的安装位置。

我显然会投票赞成任何有用的答案。我是一个“接受的答案”,我主要是在寻求建议“我应该做什么”,解决问题的最干净的解决方案是什么,以及如果适用的话,讨论选项和缺点、利弊。


本质上,两者之间的区别//usr层次结构不是也不应该掌握在软件包的上游维护者手中(请阅读:这不是您的责任)。自从/应该只包含启动和制作所需的文件/usr可用,这是一项行政决定/。对于源安装,此决定由安装程序做出,而对于发行版,则由软件包维护者做出。

出于基本原理,假设有人正在尝试构建一个chroot环境。 /usr 和 / 之间的区别在环境中没有意义,不会进行区分。所有前缀均设置为/foo/bar/chroot,以及任何与以下内容混淆的配置脚本$prefix可能会引发奇怪的行为。同样的论点也适用于像 Debian 打包助手这样的脚本,它们依赖于通常的$prefix语义来工作。

因此,最干净的解决方案是bash-4.1解决方案。您基本上有两个干净的选择:将您的软件包拆分为启动关键部分和非启动关键部分,或者让您的configure脚本为启动关键部分提供了一个替代前缀,默认设置为/,离开$prefix as /usr.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将二进制文件安装到 /bin、/sbin、/usr/bin 和 /usr/sbin 中,与 --prefix 和 DESTDIR 交互 的相关文章

  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • 如何使用 bash 锁定文件

    我有一个任务从远程服务器同步目录 rsync av email protected cdn cgi l email protection srv data srv data 为了使其定期运行并避免脚本 reEnter 问题 我使用 rsyn
  • 如何根据 HTTP 请求使用 Python 和 Flask 执行 shell 命令并流输出?

    下列的这个帖子 https stackoverflow com questions 15092961 how to continuously display python output in a webpage 我能够tail f网页的日志
  • 为什么 Linux perf 使用事件 l1d.replacement 来处理 x86 上的“L1 dcache misses”?

    在英特尔 x86 上 Linux用途 https stackoverflow com a 52172985 149138事件l1d replacements来实施其L1 dcache load misses event 该事件定义如下 计数
  • Linux中的CONFIG_OF是什么?

    我看到它在很多地方被广泛使用 但不明白在什么场景下我需要使用它 What is 配置 OF OF 的全名是什么 打开固件 这是很久以前发明的 当时苹果公司正在生产基于 PowerPC CPU 的笔记本电脑 而 Sun Microsystem
  • 从 Python 调用 PARI/GP

    我想打电话PARI GP http pari math u bordeaux fr dochtml gpman html仅从Python计算函数nextprime n 对于不同的n是我定义的 不幸的是我无法得到帕里蟒蛇 http code
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • fopen 不返回

    我在 C 程序中使用 fopen 以只读模式 r 打开文件 但就我而言 我观察到 fopen 调用没有返回 它不返回 NULL 或有效指针 执行在 fopen 调用时被阻止 文件补丁绝对正确 我已经验证过 并且不存在与权限相关的问题 任何人
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • Linux:在文件保存时触发 Shell 命令

    我想在修改文件时自动触发 shell 命令 我认为这可以通过注册 inotify 挂钩并调用来在代码中完成system 但是是否有更高级别的 bash 命令可以完成此任务 尝试 inotify 工具 我在复制链接时遇到问题 抱歉 但 Git
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真
  • Linux:如何从特定端口发送TCP数据包?

    如何打开原始套接字以从特定 TCP 端口发送 我希望所有连接始终来自临时端口以下的一系列端口 如果您正在使用raw套接字 然后只需在数据包标头中填写正确的 TCP 源端口即可 相反 如果您使用 TCP 套接字接口 socket connec
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • 为arm构建WebRTC

    我想为我的带有arm926ej s处理器的小机器构建webrtc 安装 depot tools 后 我执行了以下步骤 gclient config http webrtc googlecode com svn trunk gclient s
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • 查找哪个程序运行另一个程序

    我有一个 NAS 运行在 Redhat Linux 的有限版本上 我按照指示破解了它 这样我就可以访问 shell 这很有帮助 我还做了一些修改 其他人也做过修改 除了一个问题之外 它们似乎都工作得很好 不知何故 每隔 22 天 系统就会关

随机推荐

  • WebRTC java 服务器问题

    我想我已经非常接近让我的 Java 服务器应用程序通过 WebRTC 与浏览器页面对话 但我还不能完全让它工作 我觉得我遗漏了一些小东西 所以我希望这里有人可以提出建议 我仔细研究了 WebRTC 示例 Java 单元测试 org webr
  • 如何从 tslint 中排除文件夹?

    我喜欢排除test在 vscode 中使用 tslint 进行文件夹表单 linting 所以我在 tslint json 配置文件中放置了一个排除项 不幸的是 排除语句不起作用 有谁知道如何设置排除吗 exclude tests ts r
  • 使用 Javascript 读取文本文件

    以下代码应在加载时读取当前目录中的文本文件的内容 并将其显示在 html 页面上 我尝试自行修改 但它没有给出输出 有没有更简单的方法可以使用其他方法获得此结果 或者请帮忙找出这段代码有什么问题
  • 如何在 Swift 中使用 XIB 文件初始化/实例化自定义 UIView 类

    我有一堂课叫MyClass这是一个子类UIView 我想用一个初始化XIB文件 我不确定如何使用名为的 xib 文件初始化此类View xib class MyClass UIView what should I do here init
  • 服务层的 Spring AOP

    我需要一些有关 Spring AOP 的帮助 我有以下代码 Service public class UserSecurityService implements UserDetailsService Autowired private U
  • 为什么有些资源有名称和“名称”属性?

    我是 Terraform 的新手 正在尝试在 Azure 上创建一些资源 对我来说 资源名称和属性之间似乎存在一些不必要的重复name在定义中 resource azurerm resource group group name name
  • 如何将 ${CHANGES} 传递给下游作业?

    我有上游工作轮询 SVN 进行更改 如果检测到更改 则开始构建 构建完成后 上游项目调用下游项目运行测试 我正在使用 触发参数化构建 我希望下游项目能够发送一封电子邮件 其中包含测试结果以及导致构建 测试的 SVN 更改 但问题是 如果我在
  • 关于虚函数的成本

    如果我在循环中调用虚拟函数 1000 次 我会承受 1000 次还是仅一次的 vtable 查找开销 编译器也许能够优化它 例如 以下内容 至少在概念上 很容易优化 Foo f new Foo for int i 0 i lt 1000 i
  • Android NDK Native方法未找到错误

    我正在尝试使用本机代码构建 android 应用程序 所以我想测试 ndk 是否成功运行 当我尝试运行我的第一个 hello world 项目时 日志猫说 01 21 23 30 06 780 E AndroidRuntime 939 FA
  • 打开受密码保护的 sqlite 数据库

    我创建了一个受密码保护的 sqlite 数据库 我希望能够查看数据库 以便在项目开发过程中检查是否正确插入了内容 我已经下载了 sqlite 数据库浏览器 但这似乎不允许您打开加密数据库 有没有一种方法可以打开数据库文件 感谢您的任何帮助
  • 存在哪些 CLR/.NET 字节码工具? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我非常了解用于操作 生成 反编译 JVM 字节码的 Java 工具 ASM cglib jad 等 CLR 字节码有哪些类似的工具 人们会为 CLR
  • 如何导入单个 Lodash 函数?

    使用 webpack 我正在尝试导入isEqual since lodash似乎正在进口一切 我尝试执行以下操作但没有成功 import isEqual from lodash import isEqual from lodash lang
  • 当 JS 需要 PHP 变量时,如何将 javascript 与 PHP 分开?

    下面是我在 jquery 和 PHP 中看到的代码的一小段 请注意第 5 行的 PHP 部分 我通常将 javascript 放入单独的文件中 那么我如何才能将 JS 保存在单独的文件中 但在需要时仍然使用 PHP 如下所示 when th
  • [[maybe_unused]] 在成员变量上,GCC 警告(错误地?)该属性被忽略

    在下面的example struct Foo maybe unused int member 1 void bar maybe unused int local 0 int main int argc char argv Foo f f b
  • 选择每组中倒数第二条记录

    这里有张桌子Remark包含如下所示的数据 SerialNo RemarkNo Desp 10 1 rainy 10 2 sunny 11 1 sunny 11 2 rainy 11 3 cloudy 11 4 sunny 12 1 rai
  • “无法锁定变量”SSIS 错误

    对于每小时运行的预定 SSIS 包 我随机收到错误 最有趣的是 如果我删除检查点文件并再次运行该包 它工作正常 但错误可能会在将来的运行中出现 我不知道为什么会发生这种情况 这是完整的错误消息 以用户身份执行 UserNameChanged
  • 多维数组的嵌套 ng-repeat

    我在尝试着使用 ng repeat 指令在 html 中显示二维数组 我可以显示第一个维度 表行 但第二个维度 表数据 不起作用 我见过很多使用对象 JSON 键值数据结构的解决方案 但我找不到有效的东西对于仅包含其他数组的数组 以下是一些
  • 在 pandas python 中将指数或科学数转换为整数

    我是Python的初学者 试图从数据集中获取具有最高idmb评级和最高总总额的行 但我的gross total值不是整数 我如何将其转换为整数 以及如何获得执行统计功能的特定值 import pandas as pd dataset pd
  • 检测挤压的最简单方法

    这是一个WEB APP不是本机应用程序 请不要使用 Objective C NS 命令 所以我需要检测 iOS 上的 捏 事件 问题是我看到的用于执行手势或多点触摸事件的每个插件或方法 通常 都是使用 jQuery 并且是针对阳光下每个手势
  • 将二进制文件安装到 /bin、/sbin、/usr/bin 和 /usr/sbin 中,与 --prefix 和 DESTDIR 交互

    大多数使用 Autotools 的软件包都是用户级实用程序 或者至少具有足够高的级别 可以完全在 usr 或低到完全低于 usr 我正在编写一个包 需要将一些文件安装到 bin 一些进入 sbin usr bin and usr sbin