gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:24:44 25 4
gpt4 key购买 nike

我做了一个 .deb我的应用程序使用 fpm :

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.

好像是 postinst正在使用 configure 调用脚本,但不是 install ,我试图理解为什么。在 /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不是
应该用任何 install 调用或 upgrade争论,曾经。
dpkg 格式的权威定义是 Debian Policy
手动的。当前版本描述 postinstchapter6
并且只列出 configure , abort-upgrade , abort-remove ,abort-remove , 和 abort-deconfigure作为可能的第一论点。

我对我的回答没有完全的信心,因为你的坏榜样
仍然在 debian.org 上,很难相信这样的错误会溜走
通过。

关于package - 为什么我的 debian postinst 脚本没有运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11274290/

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