﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-寂路-随笔分类-Debian</title><link>http://www.cnitblog.com/anderson/category/5863.html</link><description>通向自由终端之路</description><language>zh-cn</language><lastBuildDate>Tue, 04 Oct 2011 02:55:03 GMT</lastBuildDate><pubDate>Tue, 04 Oct 2011 02:55:03 GMT</pubDate><ttl>60</ttl><item><title>修复因安装不友好的deb导致包管理系统瘫痪的思路</title><link>http://www.cnitblog.com/anderson/archive/2007/08/02/31150.html</link><dc:creator>Anderson.Yao</dc:creator><author>Anderson.Yao</author><pubDate>Thu, 02 Aug 2007 06:51:00 GMT</pubDate><guid>http://www.cnitblog.com/anderson/archive/2007/08/02/31150.html</guid><wfw:comment>http://www.cnitblog.com/anderson/comments/31150.html</wfw:comment><comments>http://www.cnitblog.com/anderson/archive/2007/08/02/31150.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/anderson/comments/commentRss/31150.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/anderson/services/trackbacks/31150.html</trackback:ping><description><![CDATA[有一些不怎么友好的deb软件包可能由于某种原因(比如转换不完全成功)安装到一半失败，而想卸载却又卸不掉。无论用什么apt或者dpkg的命令都无法起作用时，用
户可能会很着慌，以至于要备份并重新安装整个系统。这时先不要急，因为一般性的情况下，并不是整个包管理系统真的损坏了，而只是因为一些情况在包管理系统
的意料之外而拒绝读取索引。只要手动从dpkg的索引文件和相关目录删除这些软件的信息/文件即可让包管理系统恢复正常。<br>
<br>
对于deb系统而言，其实安装软件包不外乎把软件解压缩到指定的目录下去，然后运行设定脚本去读取一些环境变量来生成
一些配置文件。完了之后dpkg会把安装结果和软件包状态的变化记录到索引文件中去(apt也一样，因为它在安装软件包时其实是调用了dpkg)。所以我
们手动删除这些信息之后就和没安装过他们一模一样。要手动删除一个软件包，要做的就是：<br>
<br>
1.找出软件包安装的文件的列表，一一删除之。<br>
<br>
2.在索引文件中找到这些软件包的信息并删除之。<br>
<br>
3.重建索软件包集合信息。<br>
<br>
<br>
如果要求不高，只希望包关系系统恢复工作的话，只需要2和3就够了。用不着的文件暂时放一放也无妨(前提是不会对系统安全性产生威胁)。对应的信息获取地点和操作地点：<br>
<br>
1.软件包的文件列表，在包内，只要deb还在(一般通过apt缓存的包放在/var/cache/apt/archives)，用dpkg -c XXX.deb就可以得到。<br>
<br>
2.索引信息，一般在/var/lib/dpkg/status，文本文件，结构简单清楚；另外/var/lib/dpkg/info下有每个安装过的包的信息文件信息(和MD5校验)，一组3-4个文件，以软件包命名，后缀为list、md5等等，酌情删除。<br>
<br>
3.apt-get update<br>
<br>
上
面3条不能保证100%删除所有软件包残留信息，只是能够尽快让apt/dpkg恢复工作。一些注册信息比如向gconf注册schema需要额外步骤来
注销，也许比较省力的方法就是设法找一个更新后或者版本兼容的deb替代安装，如此就能覆盖掉以前的信息，再删除就清除了所有的残留。  <img src ="http://www.cnitblog.com/anderson/aggbug/31150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/anderson/" target="_blank">Anderson.Yao</a> 2007-08-02 14:51 <a href="http://www.cnitblog.com/anderson/archive/2007/08/02/31150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>