gpt4 book ai didi

linux - debian 软件包内容的运行时安装目录

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:16 24 4
gpt4 key购买 nike

我有一个我构建的 debian 包,其中包含文件的 tar 包、控制文件和 postinst 文件。它使用 dpkg-deb 构建,并使用 dpkg 正确安装。

我想做的修改是让文件的安装目录在运行时根据在 deb 文件上运行 dpkg -i 时设置的环境变量来确定。我回显了 postinst 脚本中的环境变量,我可以看到它的设置正确。

我的问题:

1)是否可以在运行时动态确定安装目录?

2) 如果可能的话,我该怎么做?我已阅读有关规则文件和 mypackage.install 文件的信息,但我不知道其中任何一个是否允许我完成此操作。

我可以通过将文件复制到 posinst 脚本中的目标位置来破解它,但如果可能的话,我更愿意以正确的方式进行。

提前致谢!

最佳答案

这就是我在过去几周内发现的有关此问题的信息。

使用预先打包的二进制文件,您无法构建目标目录在运行时动态确定的 debian 包。我相信如果安装从源代码构建的包,您可以使用 configure 设置安装目录,这可能是可能的。但在这种情况下,因为这些是嵌入式 Ubuntu 机器,它们没有制造,所以我没有追求这样的选择。我确实找到了一种非传统的安装方法(hack),它确实有效。由于 debian 软件包只包含一个相对于/的 tar 包,只需相对于/tmp 下的目录构建您的软件包。然后,在 postinst 脚本中,您可以确定将存档中的文件复制到永久位置的位置。

我预计在重启后自动删除/tmp 下的子目录,dpkg 可能不知道文件包的存在。这不是问题。当我运行“dpkg -l myapp”时,它显示仍处于安装状态。使用 dpkg/apt-get 更新包也很顺利。

我确实发现,如果您尝试使用“dpkg -r myapp”删除软件包,dpkg 会尝试删除/tmp,这并不好。但是/tmp 不容易删除,所以它从未成功。另外,在我们的情况下,我们从不删除包,而只是简单地升级它们。

由于源代码中的代码差异导致必须针对每个平台重新编译,我最终不得不放弃通用包,但我会保留这种方式并且它确实有效。

我尝试使用 --instdir 更改软件包的安装目录,它确实重新定位了文件,但 dpkg 失败,因为无法找到相对于新 instdir 的 dpkg 文件。使用 --instdir 有点像 chroot。我还尝试了 --admindir 和 --root 的各种组合,看看我是否可以使用相对于/的 dpkg 系统,但安装重新定位文件但它们不起作用。我猜 rpm 有一个重定位选项可以工作,但 Ubuntu 不行。

关于linux - debian 软件包内容的运行时安装目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8921626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com