deb的安裝過(guò)程如下:
 
讀取數(shù)據(jù)庫(kù)并鎖定,避免同時(shí)有兩個(gè)安裝程序在運(yùn)行讀取control中的Package(軟件包標(biāo)識(shí))和版本信息,并搜索數(shù)據(jù)庫(kù),若已存在,則卸載之后再安裝;檢查Depends,Pre-Depends,Conflicts和Replaces,如果檢測(cè)到已存在Conflicts中存在的軟件,則報(bào)錯(cuò)并終止安裝。如未找到Pre-Depends指定的軟件,則報(bào)錯(cuò)并終止安裝。如找到Replaces中指定的軟件,則卸載之;
 
將數(shù)據(jù)寫(xiě)入/var/lib/dpkg/status文件中;
 
執(zhí)行preinst腳本(如果有);
 
解包data.tar.gz,將文件放置于相應(yīng)位置,并將文件列表寫(xiě)入/var/lib/dpkg/info/XXX.list;
 
運(yùn)行postinst和extrainst_腳本(如果有);
 
如果之前的安裝都沒(méi)有出錯(cuò),即安裝成功,那么會(huì)在status文件中寫(xiě)入Status:installokinstalled信息,否則會(huì)寫(xiě)入其它狀態(tài)數(shù)據(jù),比如Unpacked(未解包數(shù)據(jù))、Failed-config(腳本未能成功執(zhí)行)、Half-installed(安裝失敗等);重新加載數(shù)據(jù)庫(kù)并解除鎖定。
 
deb的卸載過(guò)程如下:
 
讀取數(shù)據(jù)庫(kù)并鎖定;
 
根據(jù)軟件標(biāo)識(shí)搜尋數(shù)據(jù)庫(kù);
 
檢查是否有軟件依賴(lài)于待卸載的軟件,如果有則提示,并中斷卸載;
 
執(zhí)行prerm腳本(如果有);
 
讀取/var/lib/dpkg/info/XXX.list文件,并刪除list文件中記錄的全部文件和非空文件夾;
 
運(yùn)行postrm腳本;
 
如果卸載命令是dpkg-r,則保留status中的記錄并改為Status:Notinstalled;如果卸載命令是dpkg-P,則刪除全部數(shù)據(jù);
 
如果卸載過(guò)程沒(méi)有錯(cuò)誤的話,重新讀取數(shù)據(jù)庫(kù)并解除鎖定。
 
由于deb安裝的軟件可能會(huì)在運(yùn)行時(shí)在/var/mobile/Documents下放置存檔文件,或在/var/mobile/Library/Preferences下放置設(shè)置文件,而這些文件并沒(méi)有記錄在list文件里,所以卸載的時(shí)候不會(huì)被刪除。
裝機(jī)