如果我的preinst脚本中的检查失败,我想取消安装.deb包。
我的预备脚本:
#!/bin/sh
# Stop if any error
set -e
assertexists(){
# $1 File
if [ -e "$1" ]
then
echo "File existence checked for: $1"
else
echo "ERROR, file does not exist: $1"
exit 1
fi
}
assertexists "$JAVAPATH/bin/java"
当我跑步时:
dpkg -i my.deb
我看到错误,但运行时包显示为已安装:
dpkg --get-selections
有没有办法在preinst中取消安装?
答案 0 :(得分:0)
我记得有一些dpkg开关可以禁用preinst / postinst脚本的执行(请查看dpkg联机帮助页),但是如果你已经开始安装并且它已经崩溃(有时会发生)并且你无法摆脱错误循环,最简单的方法是放
exit 0
在/var/lib/dpkg/info/PACKAGENAME.postinst(或分别为preinst)
我认为安装必须成功完成或失败(如果第二个然后必须手动清除包),所以在preinst / postint脚本中没有“cancel,remove_me()”的“官方”方式。在某些情况下你可以把dpkg --purge放在脚本中,但我想它不会这样做,因为锁或其他任何东西,宁愿毫无意义。注意apt-get如何进行多次安装/删除 - 它通常首先删除所有要删除的包,然后安装剩余的包。你也可以
echo PACKAGENAME purge | dpkg --set-selections
然后
apt-get -f dselect-upgrade
或
apt-get -f install
但我认为这不是它的工作方式。
您也可以手动
dpkg -i mypackage.deb || dpkg --purge mypackage
通常,依赖关系是提供条件安装或删除的方法。您可能希望创建虚拟依赖或依赖包,这将在安装之前或之后失败并触发依赖性警告。然后,此类包将列在“autoremove”列表中。