繁体   English   中英

我将如何在Fakeroot Deb软件包构建器中使用postinst脚本

[英]How would I use postinst script with fakeroot deb package builder

下午好,

我能够使用以下命令将项目构建到一个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安装软件包-我的mypackage.deb是否足以运行该脚本?

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

  1. 配置,中止升级,中止删除和中止取消配置 ”代表什么。

  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策略手册:软件包维护者脚本和安装过程

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

要直接回答您的问题,

  1. 使用dpkg-deb构建时,将其放入DEBIAN目录是正确的。 如果改为使用Debhelper进行更安全或更方便的构建设置,则可以将postinst放在debian/$packagename.postinst

  2. 可以在许多不同情况下调用postinst脚本。 您可以在许多(大多数?)后插入语句中找到“ case”语句,用于检查它的情况。 一般来说,在所有可能的情况下采取大多数后期操作都是有道理的,这就是为什么将它们组合在一个脚本中的原因。 但有时最好区分。 我将在#4下解释不同的情况。

  3. 是。 成功安装deb软件包(无论是dpkg -iapt-get install还是其他方法), 必须成功运行其preinst和postinst脚本(如果存在)。 可以在不运行任何维护程序脚本的情况下对Deb进行“解压缩”,但这不被视为“正在安装”。

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

    • configure :正在安装或升级软件包。 如果该软件包之前未安装,则$2将为空。 否则, $2将包含该软件包的旧版本号; 您要升级的版本。

    • abort-upgrade :升级操作已中止。 例如,我安装了版本1的mypkg,然后尝试将其升级到版本2。 但是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”系统中的条目。 请参见手册页。 在这种特定情况下,该命令告诉Debian,“ /usr/bin/fakeroot-ng ”是fakeroot命令的替代方法。 根据此替代方案的优先级和其他已注册替代方案的优先级以及用户的偏好,当有人运行“ fakeroot ”时,现在可能会调用fakeroot-ng

只需考虑一下这一行:

echo /usr/local/lib > /etc/ld.so.conf && ldconfig

根据Debian政策, 您不应修改ld.so.conf

一个简单的替代方法是做这样的事情:

在您的postinst脚本中:

/usr/local/lib > /etc/ld.so.conf.d/EXAMPLE.conf && ldconfig

并在您的postrm脚本中:

rm /etc/ld.so.conf.d/EXAMPLE.conf && ldconfig

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM