最近、ソフトウェアの一部をパッケージ化し、Launchpadで公開し始めました。インストールと削除は正常に機能しますが、パッケージをあるバージョンから次のバージョンにアップグレードするのは問題があります。
問題は、パッケージの最初のインストール時にのみ実行する必要のあるスクリプトがいくつかあることです。これらのスクリプトは、DBにデータを入力したり、ユーザーを作成したりします。現在、package.postinst configure)
で呼び出されています。 セクション。ただし、これにより、アップグレード中に呼び出され、図に示されます。
パッケージの最初のインストール中にのみ実行され、アップグレード中には実行されないメンテナスクリプトを.debパッケージに含める方法はありますか?または、初期設定スクリプトを.debパッケージに含めるための洗練された方法は何でしょうか?
承認された回答:
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
名前が示すように、これはパッケージがインストールされる前に実行されます。したがって、ここで必要なことを実行できない可能性があります。ほとんどのパッケージは、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