我正在为 iPhone 开发越狱程序。当磁盘空间不足时,安装仍然会继续,因此部分文件被复制,而其他文件没有,这使磁盘变脏。
我在 preinst 和 prerm 脚本中编写了磁盘空间检查代码,它们是 deb 包的控制文件。当磁盘空间不足时,控制脚本将以非零代码退出。但问题是,当我们升级一个包时,如果磁盘空间不够,即使 prerm 脚本以非零状态退出,dpkg 仍然会删除旧文件,因此升级变成了删除,这不是我期望的结果。
我对 Cydia 不太了解,但如果它的工作原理与 dpkg 完全一样,那么这应该是可以解决的。请参阅http://people.debian.org/~srivasta/MaintainerScripts.html#sec-3.4.3上的软件包升级活动图。
这显示了在运行 prerms 和 preinsts 的过程中可以采取的一些不同的路径,这些路径将系统引导回一个干净的、仍然安装的旧版本状态。例如,如果 new-preinst 失败,则 new-postrm 将以“abort-upgrade”作为参数运行。如果成功,那么 old-postinst 也会使用“abort-upgrade”运行。如果成功,您将回到干净的安装状态。