package – 为什么我的debian postinst脚本没有运行?

我使用fpm创建了我的应用程序的.deb:

fpm -s dir -t deb -n myapp -v 9 -a all -x "*.git" -x "*.bak" -x "*.orig" \
--after-remove debian/postrm  --after-install debian/postinst \
--description "Automated build." -d mysql-client -d python-virtualenv home

除此之外,postinst脚本应该为应用程序创建一个用户:

#!/bin/sh

    set -e

    APP_NAME=myapp

    case "$1" in
        configure)
            virtualenv /home/$APP_NAME/local
            #supervisorctl start $APP_NAME
        ;;

    # http://www.debian.org/doc/manuals/securing-debian-howto/ch9.en.html#s-bpp-lower-privs
       install|upgrade)

       # If the package has default file it could be sourced, so that
       # the local admin can overwrite the defaults

       [ -f "/etc/default/$APP_NAME" ] && . /etc/default/$APP_NAME

       # Sane defaults:

       [ -z "$SERVER_HOME" ] && SERVER_HOME=/home/$APP_NAME
       [ -z "$SERVER_USER" ] && SERVER_USER=$APP_NAME
       [ -z "$SERVER_NAME" ] && SERVER_NAME=""
       [ -z "$SERVER_GROUP" ] && SERVER_GROUP=$APP_NAME

       # Groups that the user will be added to, if undefined, then none.
       ADDGROUP=""

       # create user to avoid running server as root
       # 1. create group if not existing
       if ! getent group | grep -q "^$SERVER_GROUP:" ; then
          echo -n "Adding group $SERVER_GROUP.."
          addgroup --quiet --system $SERVER_GROUP 2>/dev/null ||true
          echo "..done"
       fi
       # 2. create homedir if not existing
       test -d $SERVER_HOME || mkdir $SERVER_HOME
       # 3. create user if not existing
       if ! getent passwd | grep -q "^$SERVER_USER:"; then
         echo -n "Adding system user $SERVER_USER.."
         adduser --quiet \
                 --system \
                 --ingroup $SERVER_GROUP \
                 --no-create-home \
                 --disabled-password \
                 $SERVER_USER 2>/dev/null || true
         echo "..done"
       fi

       # … and a bunch of other stuff.

看起来像是使用configure调用postinst脚本,但是没有安装,我试图理解为什么.在/var/log/dpkg.log中,我看到了我期望的行:

2012-06-30 13:28:36 configure myapp 9 9
2012-06-30 13:28:36 status unpacked myapp 9
2012-06-30 13:28:36 status half-configured myapp 9
2012-06-30 13:28:43 status installed myapp 9

我检查了/ etc / default / myapp不存在.文件/var/lib/dpkg/info/myapp.postinst存在,如果我使用install作为第一个参数手动运行它,它将按预期工作.

为什么postinst脚本不能与install一起运行?我该怎么做才能进一步调试?

最佳答案
我认为您复制的示例脚本完全错误. postinst不是
应该用任何安装或升级参数调用.
dpkg格式的权威定义是Debian策略
手册.当前版本描述了chapter
6
中的postinst
并且只列出configure,abort-upgrade,abort-remove,
abort-remove和abort-deconfigure作为可能的第一个参数.

我对自己的答案没有完全的信心,因为你的坏榜样
仍然在debian.org上,很难相信这样的错误可能会失误
通过.

转载注明原文:package – 为什么我的debian postinst脚本没有运行? - 代码日志