【发布时间】:2012-01-19 05:50:38
【问题描述】:
我有一个我构建的 debian 包,其中包含文件的 tar 球、控制文件和 postinst 文件。它使用 dpkg-deb 构建,并使用 dpkg 正确安装。
我想做的修改是让文件的安装目录在运行时根据将在 deb 文件上运行 dpkg -i 时设置的环境变量来确定。我在 postinst 脚本中回显环境变量,我可以看到它的设置正确。
我的问题:
1) 是否可以在运行时动态确定安装目录?
2) 如果可能的话,我会怎么做?我已阅读有关规则文件和 mypackage.install 文件的信息,但我不知道其中任何一个是否允许我完成此操作。
我可以通过将文件复制到 posinst 脚本中的目标位置来破解它,但如果可能的话,我更愿意以正确的方式进行操作。
提前致谢!
【问题讨论】:
-
您可以将一个选项传递给
dpkg以使用与/usr不同的根进行安装。deb软件包在这个意义上没有“安装目录” - 如果您添加了您现在拥有的以及您希望它是什么的示例,这将有所帮助。从理论上讲,您可以移动postinst脚本中的内容,但我强烈反对您。 -
好主意。我尝试使用 --instdir= 并且它复制了文件但 postinst 不会运行,因为 --instdir 做了一个 chroot 所以你必须在那里也有 dpkg 管理目录。我还尝试结合使用 --root 和 --admindir 来查看是否可以拆分这两个目录。 rpm 有一个重定位标志,因此您可以移动包的位置。我必须有一个动态目录,因为这个包必须位于两个不同嵌入式 Linux 发行版的不同位置。例如,假设 tarball 中的单个文件位于不同机器上的不同位置。
-
我会简单地创建两个不同的
deb包,除非文件是一个conffile。例子仍然会有所帮助。典型的包管理文件类似于/usr/lib/yourpackage.so和典型的 conffile,例如/etc/yourpackage.cfg. -
也许还可以看看“替代”工具,尽管它主要在相反的方向上有用(两个不相关的包想要在一个约定的标准位置控制符号链接的目的地)。
-
我可以创建两个包没问题。问题是包中的代码都是通用的,需要安装在 6 个不同的嵌入式平台上,这些平台的安装都在不同的位置。更具体地说,某些平台上不存在某些目录结构。这意味着管理 6 个不同的包而不是 1 个。目前仍在研究。感谢您的建议。