Переменная среды $DPKG_MAINTSCRIPT_PACKAGE
содержит имя пакета; похоже, не существует эквивалентного поля _VERSION
. /var/lib/dpkg/status
обновляется ПОСЛЕ ПОСТАНОВКИ, поэтому я тоже не могу разобрать его.
Любые идеи?
Переменная среды $DPKG_MAINTSCRIPT_PACKAGE
содержит имя пакета; похоже, не существует эквивалентного поля _VERSION
. /var/lib/dpkg/status
обновляется ПОСЛЕ ПОСТАНОВКИ, поэтому я тоже не могу разобрать его.
Любые идеи?
Это лучший метод, который я нашел для решения этой проблемы, - использовать переменную place-holder в .postinst
(или других управляющих файлах):
case "$1" in
configure)
new_version="__NEW_VERSION__"
# Do something interesting interesting with $new_version...
;;
abort-upgrade|abort-remove|abort-deconfigure)
# Do nothing
;;
*)
echo "Unrecognized postinst argument '$1'"
;;
esac
Затем в debian/rules
замените переменную-заполнителя соответствующим номером версии во время сборки:
# Must not depend on anything. This is to be called by
# binary-arch/binary-indep in another 'make' thread.
binary-common:
dh_testdir
dh_testroot
dh_lintian
< ... snip ... >
# Replace __NEW_VERSION__ with the actual new version in any control files
for pkg in $$(dh_listpackages -i); do \
sed -i -e 's/__NEW_VERSION__/$(shell $(SHELL) debian/gen_deb_version)/' debian/$$pkg/DEBIAN/*; \
done
# Note dh_builddeb *must* come after the above code
dh_builddeb
Полученный .postinst
фрагмент, найденный в debian/<package-name>/DEBIAN/postinst
, будет выглядеть так:
case "$1" in
configure)
new_version="1.2.3"
# Do something interesting interesting with $new_version...
;;
abort-upgrade|abort-remove|abort-deconfigure)
# Do nothing
;;
*)
echo "Unrecognized postinst argument '$1'"
;;
esac
Я использую следующую грязную команду в postinst script:
NewVersion=$(zcat /usr/share/doc/$DPKG_MAINTSCRIPT_PACKAGE/changelog.gz | \
head -1 | perl -ne '$_=~ /.*\((.*)\).*/; print $1;')
VERSION=$(zless /usr/share/doc/$DPKG_MAINTSCRIPT_PACKAGE/changelog* \
| dpkg-parsechangelog -l- -SVersion')
Преимущества по сравнению с другими решениями здесь:
Добавьте в debian/rules
следующее:
override_dh_installdeb:
dh_installdeb
for pkg in $$(dh_listpackages -i); do \
sed -i -e 's/__DEB_VERSION__/$(DEB_VERSION)/' debian/$$pkg/DEBIAN/*; \
done
Он заменит любое вхождение __DEB_VERSION__
в ваших скриптах debian с номером версии.
Почему вы не можете скопировать версию в postinst script во время упаковки?
Попробуйте следующее:
VERSION=`dpkg -s $DPKG_MAINTSCRIPT_PACKAGE | sed -n 's/^Version: //p'`