deb的安装过程如下:
读取数据库并锁定,避免同时有两个安装程序在运行读取control中的Package(软件包标识)和版本信息,并搜索数据库,若已存在,则卸载之后再安装;检查Depends,Pre-Depends,Conflicts和Replaces,如果检测到已存在Conflicts中存在的软件,则报错并终止安装。如未找到Pre-Depends指定的软件,则报错并终止安装。如找到Replaces中指定的软件,则卸载之;
将数据写入/var/lib/dpkg/status文件中;
执行preinst脚本(如果有);
解包data.tar.gz,将文件放置于相应位置,并将文件列表写入/var/lib/dpkg/info/XXX.list;
运行postinst和extrainst_脚本(如果有);
如果之前的安装都没有出错,即安装成功,那么会在status文件中写入Status:installokinstalled信息,否则会写入其它状态数据,比如Unpacked(未解包数据)、Failed-config(脚本未能成功执行)、Half-installed(安装失败等);重新加载数据库并解除锁定。
deb的卸载过程如下:
读取数据库并锁定;
根据软件标识搜寻数据库;
检查是否有软件依赖于待卸载的软件,如果有则提示,并中断卸载;
执行prerm脚本(如果有);
读取/var/lib/dpkg/info/XXX.list文件,并删除list文件中记录的全部文件和非空文件夹;
运行postrm脚本;
如果卸载命令是dpkg-r,则保留status中的记录并改为Status:Notinstalled;如果卸载命令是dpkg-P,则删除全部数据;
如果卸载过程没有错误的话,重新读取数据库并解除锁定。
由于deb安装的软件可能会在运行时在/var/mobile/Documents下放置存档文件,或在/var/mobile/Library/Preferences下放置设置文件,而这些文件并没有记录在list文件里,所以卸载的时候不会被删除。