2006年10月18日星期三

恢复dpkg包管理系统

今天把Ubuntu下/var/lib/dpkg/和/var/cache/apt/里面的东西都删了,然后包管理系统就坏了,折腾了两个钟头才恢复。其实只要新建与删掉的目录和文件同名的目录和文件,基本就能弄好了。

事情的经过是这样的。我把源列表里面的breezy改成dapper,update之后又想改回breezy了。我不想用dapper,因为里面的tetex是3.0,breezy里面是2.0,升级到3.0后配置好的cjk就不能用了。但是debian并不提供系统的降级,在aptitude里面仍然显示所有要升级的软件包。于是我在/var/lib/dpkg/和/var/cache/apt/里面都执行了rm -rf *,清空前一个目录时本想备份一下,但觉得不会出什么大问题就直接删除了,这样dpkg包管理系统的信息就都没有了。

之后我在aptitude里面安装新软件时出错:
debconf: apt-extracttemplates failed: Bad file descriptor
E: Cannot get debconf version. Is debconf installed?
debconf是安装了的,只是包管理系统里面没有关于debconf的信息。于是我新建了/var/lib/dpkg/status这个文件,在里面添加了debconf的信息。这个错误没有了,但是还有下面的错误:
unable to create updated files list file for package ....
不知道怎么解决,后来找到了一个恢复包管理系统的脚本,运行了一下有错,出错的地方正好是建目录的一段,那里正是新建我删掉的目录的地方。于是我手动创建了删掉的目录:
/var/cache/apt/archives
/var/cache/apt/archives/partial
/var/lib/dpkg/info
/var/lib/dpkg/parts
/var/lib/dpkg/alternatives
/var/lib/dpkg/methods
/var/lib/dpkg/updates
另外/var/lib/dpkg/status和available这两个文件我之前已经创建了。之后在aptitude里面就可以安装包了。不过aptitude里面显示所有包都是未安装的,包括之前已经安装的,不过这并不影响这些程序的使用。

今天是心情比较急,删了明明知道不能删除的东西,但愿这样的蠢事以后不会发生了。

没有评论: