gpt4 book ai didi

linux - 我如何将 postinst 脚本与 fakeroot deb 包生成器一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:17 25 4
gpt4 key购买 nike

下午好

我能够使用以下方法将我的项目构建到 deb 包中:

fakeroot dpkg-deb --build mypackage

接下来,我可以使用

安装包
dpkg -i mypackage.deb

当我这样做时,一切都已正确安装和复制,但是我想在安装包后运行一些 bash 命令。

我知道这需要使用 mypackage/DEBIAN 目录中的 postinst 文件来完成

我在网上看到了这个脚本的一些示例,但是没有明确说明如何编写一个脚本以及如何将其包含在构建中。

  1. 我如何确保 fakeroot dpkg-deb 包含此脚本,将其放入 DEBIAN 目录是否足够?

  2. 在 postinst 脚本中有一个 case 结构,这是做什么用的,我应该将要在该脚本中执行的 bash 命令放在什么位置

  3. 如果我使用 dpkg - i mypackage.deb 安装软件包,是否足以运行该脚本?

我想制作的示例脚本如下所示。

  1. configure、abort-upgrade、abort-remove 和 abort-deconfigure”代表什么。

  2. update-alternatives”行有什么作用。

谢谢你的帮助,

下面的 postinst 文件。

#!/bin/sh

set -e

case "$1" in
configure)
# EXECUTE MY BASH COMMAND
echo /usr/local/lib > /etc/ld.so.conf && ldconfig
;;

abort-upgrade|abort-remove|abort-deconfigure)
exit 0
;;

*)
echo "postinst called with unknown argument \`$1'" >&2
exit 1
;;
esac

update-alternatives --install /usr/bin/fakeroot fakeroot /usr/bin/fakeroot-ng 5 \
--slave /usr/share/man/man1/fakeroot.1.gz \
fakeroot.1.gz /usr/share/man/man1/fakeroot-ng.1.gz

exit 0

最佳答案

首先,这里可能是最相关的文档:Debian Policy Manual: Package Maintainer Scripts and Installation Procedure .

其次,在编写或处理维护者脚本时要记住的最重要的事情是它们必须是幂等的。假设脚本将连续运行多次,并确保在这种情况下仍然不会中断。

直接回答您的问题,

  1. 当使用 dpkg-deb 构建时,将它放在 DEBIAN 目录中是正确的。如果您使用 Debhelper 来获得更安全或更方便的build设置,您可以将 postinst 放在 debian/$packagename.postinst 中。

  2. 可以在许多不同的情况下调用 postinst 脚本。您可以在许多(大多数?)postins 中找到的“案例”语句旨在检查它是哪种情况。一般来说,在所有可能的情况下采取大多数 postinst 操作是有意义的,这就是为什么将它们组合在一个脚本中的原因。但有时最好区分一下。我将在 #4 下解释不同的场景。

  3. 是的。成功安装 deb 包(无论是通过 dpkg -iapt-get install 还是其他)必须成功运行它的preinst 和 postinst 脚本(如果存在)。可以在不运行任何维护者脚本的情况下“解压”一个 deb,但这不被视为“安装”。

  4. 这些“ Action ”名称对应于可以运行 postinst 的不同情况。

    • 配置:正在安装或升级包。如果之前没有安装包,$2 将为空。否则 $2 将包含包的旧版本号;您要升级的版本。

    • abort-upgrade:升级操作已中止。例如,我安装了 mypkg 的 V1 版本,我尝试将其升级到 V2。但是V1的preinst或postinst运行不成功,或者存在文件冲突。 dpkg 停止尝试安装 V2,并从 V1 重新运行 postinst(使用“abort-upgrade”操作)以防需要恢复任何状态。

    • abort-remove:删除操作已中止。例如,如果我运行“dpkg -P mypkg”,但是 mypkg 的 prerm 脚本运行失败,或者发生了其他事情使 dpkg 认为它无法安全地卸载 mypkg。因此它会再次运行 mypkg 的 postinst(使用“abort-remove”操作)以防需要恢复任何状态。

    • abort-deconfigure:如您所料,取消配置操作已中止。 “取消配置”是一种半删除操作,当正在安装的软件包与已安装的其他软件包发生冲突时使用。简而言之,如果 abort-deconfigure 操作正在运行,则 postinst 应该恢复任何可能已被 prerm 脚本与 deconfigure 操作。

    如需更多详细信息,请参阅 https://people.debian.org/~srivasta/MaintainerScripts.html 上的精彩图表和解释。 .

  5. “update-alternatives”命令更新 Debian“alternatives”系统中的条目。 See the man page.在这种特定情况下,该命令告诉 Debian “/usr/bin/fakeroot-ng”是 fakeroot 命令的替代项。根据此替代方案的优先级和其他已注册替代方案的优先级以及用户的偏好,当有人运行“fakeroot”时,现在可能会调用 fakeroot-ng

关于linux - 我如何将 postinst 脚本与 fakeroot deb 包生成器一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25879793/

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