Jer*_*oen 18 package-management packaging apt dpkg
我最近开始打包我的一些软件并在 Launchpad 上发布。安装和删除工作正常,但将包从一个版本升级到下一个版本是有问题的。
问题是有一些脚本只需要在第一次安装包时运行。这些脚本填充数据库、创建用户等。它们当前在 package.postinstconfigure)部分中调用。然而,这导致他们在升级过程中被称为以及所示的图。
有没有办法将维护者脚本包含在 .deb 包中,该脚本仅在第一次安装包而不是在升级期间执行?或者在 .deb 包中包含一些初始设置脚本的优雅方式是什么?
RAO*_*AOF 33
查看Debian wiki 中有关如何调用维护者脚本的图表:

如果您按照左侧(“一切顺利”的路径)进行操作,您将看到postinst使用最新配置的版本调用该脚本。这使您有机会区分升级和全新安装 - 在升级情况下,您的 postinst 将被称为
postinst configure 1.23-0ubuntu1
Run Code Online (Sandbox Code Playgroud)
1.23-0ubuntu1先前安装的软件包版本在哪里,而对于全新安装,它将被称为
postinst configure
Run Code Online (Sandbox Code Playgroud)
这还允许您处理从特定版本升级时需要执行操作的情况 - 您可以签入该postinst版本的 。
这样可以轻松检查脚本是在“安装”还是“升级”时完成的。如果 $2 为空,则为安装。所以:
if [ -z "$2" ]; then
do install stuff
else
do upgrade stuff
fi
Run Code Online (Sandbox Code Playgroud)
and*_*ing 15
使用debian/preinst文件,您可以执行安装操作,但不能执行升级操作。
#!/bin/sh
set -e
case "$1" in
install)
# do some magic
;;
upgrade|abort-upgrade)
;;
*)
echo "postinst called with unknown argument \`$1'" >&2
exit 0
;;
esac
#DEBHELPER#
exit 0
Run Code Online (Sandbox Code Playgroud)
尽管顾名思义,这是在安装包之前运行的。因此,您可能无法在此处执行所需的操作。postinst如果用户已经创建,大多数软件包只是在配置阶段进行测试。这是colord
$ cat /var/lib/dpkg/info/colord.postinst
#!/bin/sh
set -e
case "$1" in
configure)
# create colord group if it isn't already there
if ! getent group colord >/dev/null; then
addgroup --quiet --system colord
fi
# create the scanner group if it isn't already there
if ! getent group scanner >/dev/null; then
addgroup --quiet --system scanner
fi
# create colord user if it isn't already there
if ! getent passwd colord >/dev/null; then
adduser --system --ingroup colord --home /var/lib/colord colord \
--gecos "colord colour management daemon"
# Add colord user to scanner group
adduser --quiet colord scanner
fi
# ensure /var/lib/colord has appropriate permissions
chown -R colord:colord /var/lib/colord
;;
esac
exit 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24016 次 |
| 最近记录: |