下午好,
我能够将我的项目构建成一个deb包,使用:

fakeroot dpkg-deb --build mypackage

接下来,我可以使用
dpkg -i mypackage.deb

在执行此操作时,所有内容都已正确安装和复制,但是我希望在安装包后运行一些bash命令。
我知道这需要使用mypackage/debian目录中的postinst文件来完成
我已经在网上看到了这个脚本的一些例子,但是对于如何编写脚本以及如何将其包含在构建中没有明确的解释。
如何确保fakeroot dpkg deb包含这个脚本,将它放入debian目录是否足够?
postinst脚本中有一个case结构,这是用来做什么的,我应该把bash命令放在哪里在该脚本中执行
如果我用dpkg-i mypackage.deb安装这个包,这是否足以运行该脚本?
下面是我想制作的一个脚本示例。
“配置、中止升级、中止删除和中止取消配置”代表什么?
“更新备选方案”行是做什么的。
谢谢你的帮助,
下面是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
其次,在编写或处理维护者脚本时,要记住的最重要的一点是它们必须是等幂的。假设脚本将连续运行多次,如果是这样,请确保不会出现中断。
直接回答你的问题,
当使用DEBIAN构建时,将其放入dpkg-deb目录是正确的。如果使用debhelper进行更安全或更方便的构建设置,则可以将postinst放入debian/$packagename.postinst
postinst脚本可以在许多不同的情况下调用。你可以在很多(大多数?)中找到“case”语句。postinsts是用来检查是什么情况。一般来说,在所有可能的情况下执行大多数postinst操作是有意义的,这就是为什么它们被组合在一个脚本中的原因。但有时最好区分。我将在第4节中解释不同的情况。
对。成功安装deb包(无论是通过dpkg -iapt-get install还是其他方式)必须成功运行其preinst和postinst脚本(如果存在)。可以在不运行任何维护程序脚本的情况下“解包”deb,但这不被视为“安装”。
这些“操作”名称对应于postinst可以运行的不同情况。
配置:正在安装或升级包。如果以前未安装该软件包,$2将为空。否则$2将包含包的旧版本号;您要从中升级的版本。
中止升级:已中止升级操作。例如,我安装了mypkg的v1版本,并尝试将其升级到v2。但v1的preinst或postinst未能成功运行,或者存在文件冲突。dpkg停止尝试安装v2,并从v1重新运行postinst(使用“abort-upgrade”操作),以防需要恢复任何状态。
中止删除:已中止删除操作。例如,如果我运行了“dpkg-p mypkg”,但mypkg的prerm脚本未能运行,或者发生了其他事情,使dpkg认为它无法安全地卸载mypkg。所以它再次运行mypkg的postinst(使用“abort-remove”操作),以防需要恢复任何状态。
中止解除配置:如您所料,解除配置操作已中止。““取消配置”是当正在安装的包与已安装的其他包冲突时使用的半删除操作。简而言之,如果正在运行abort-deconfigure操作,postinst将恢复prerm脚本使用deconfigure操作可能撤消的任何状态。
有关更多细节,请参见https://people.debian.org/~srivasta/MaintainerScripts.html上的图表和解释。
“update alternatives”命令更新debian“alternatives”系统中的条目。See the man page.在这种特定情况下,该命令告诉debian“/usr/bin/fakeroot-ng”是fakeroot命令的替代选项。根据此备选方案的优先级和其他已注册备选方案的优先级以及用户的首选项,当有人运行“fakeroot-ng”时,现在可能会调用fakeroot

关于linux - 我将如何在Fakeroot Deb软件包构建器中使用postinst脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25879793/

10-11 19:26