close

[from]http://www.cnitblog.com/anderson/archive/2007/08/02/31150.html

有一些不怎么友好的deb软件包可能由于某种原因(比如转换不完全成功)安装到一半失败,而想卸载却又卸不掉。无论用什么apt或者dpkg的命令都无法起作用时,用户可能会很着慌,以至于要备份并重新安装整个系统。这时先不要急,因为一般性的情况下,并不是整个包管理系统真的损坏了,而只是因为一些情况在包管理系统的意料之外而拒绝读取索引。只要手动从dpkg的索引文件和相关目录删除这些软件的信息/文件即可让包管理系统恢复正常。

对于deb系统而言,其实安装软件包不外乎把软件解压缩到指定的目录下去,然后运行设定脚本去读取一些环境变量来生成一些配置文件。完了之后dpkg会把安装结果和软件包状态的变化记录到索引文件中去(apt也一样,因为它在安装软件包时其实是调用了dpkg)。所以我们手动删除这些信息之后就和没安装过他们一模一样。要手动删除一个软件包,要做的就是:

1.找出软件包安装的文件的列表,一一删除之。

2.在索引文件中找到这些软件包的信息并删除之。

3.重建索软件包集合信息。


如果要求不高,只希望包关系系统恢复工作的话,只需要2和3就够了。用不着的文件暂时放一放也无妨(前提是不会对系统安全性产生威胁)。对应的信息获取地点和操作地点:

1.软件包的文件列表,在包内,只要deb还在(一般通过apt缓存的包放在/var/cache/apt/archives),用dpkg -c XXX.deb就可以得到。

2.索引信息,一般在/var/lib/dpkg/status,文本文件,结构简单清楚;另外/var/lib/dpkg/info下有每个安装过的包的信息文件信息(和MD5校验),一组3-4个文件,以软件包命名,后缀为list、md5等等,酌情删除。

3.apt-get update

上面3条不能保证100%删除所有软件包残留信息,只是能够尽快让apt/dpkg恢复工作。一些注册信息比如向gconf注册schema需要额外步骤来注销,也许比较省力的方法就是设法找一个更新后或者版本兼容的deb替代安装,如此就能覆盖掉以前的信息,再删除就清除了所有的残留。

arrow
arrow
    全站熱搜

    山村有祐 發表在 痞客邦 留言(1) 人氣()