http://www.roppe.com.cn/it/p9/J91111_2.shtml


  • 正文
    用`dpkg来恢复:

      # cd /var/cache/apt/archives

      # dpkg -i libc6* libdb2* perl*

      # dpkg -i apt* dpkg* debconf*

      # dpkg -i * # 直至不再出错

      如果软件包丢失,用下述方法从镜像源

      (http://www.debian.org/mirror/)下载:

      # mc # use "ftp link" pointing to debian ftp server

      现在,在http/ftp服务器上,软件包的真正位置不再是传统的`/dist目录而是新的`/pool目录。

      然后开始安装:

      # dpkg -i /var/cache/apt/archives/

      对于坏关联,可这样解决:

      # dpkg --ignore-depends=,... -i # dpkg --force-depends -i # dpkg --force-depends --purge # dpkg --force-confmiss -i # install missing conffile

      恢复软件包选择状态的数据

      如果`/var/lib/dpkg/status因为某种原因坏掉了,debian系统将会完全丢失软件包选择状态的数据。赶快到 `/var/lib/dpkg/status-old或`/var/backups/dpkg.status.*下找找旧的 `/var/lib/dpkg/status文件。

      将`/var/backups/放在其它的分区是个好习惯,因为该目录包含了许多非常重要的系统数据。

      如果旧的`/var/lib/dpkg/status文件也坏了,仍可以从`/usr/share/doc/下的目录进行恢复这些信息。

      # ls /usr/share/doc |

      grep -v [a-z] |

      grep -v ^texmf$ |

      grep -v ^debian$ |

      awk {print " install"} |

      dpkg --set-selections

      # dselect --expert # reinstall system, de-select as needed

      /var被删除后如何恢复系统

      `/var目录包含着定时更新的数据如mail,它们很容易遭破坏。将目录放到别的分区可降低风险,如果最坏的事情发生了,可以通过重建`/var目录来挽救debian系统。

      从相同或旧版本的最简debian系统中取得`/var目录的内容框架,例如var.tar.gz

      (http://people.debian.org/~osamu/pub...膔oot目录,接着

      # cd /

      # mv var var-old # 如果剩有有用内容

      # tar xvzf var.tar.gz # 使用woody框架文件

      # aptitude # 或用dselect

      上述步骤可使系统恢复工作。

      `恢复软件包选择状态的数据中描述的技术加速软件包选择数据的恢复。

      ([fixme]:该过程需要更多的实践来检验)

      为无法启动的系统安装软件包

      使用debian急救软盘/cd或从多启动linux系统其它分区启动。

      `启动系统.

      将无法启动的系统挂载到`/target并使用`dpkg的chroot安装模式。

      # dpkg --root /target -i

      接下来就可以着手配置并解决问题。

      如是只是由于`lilo损坏而造系统无法启动,可使用标准debian急救盘启动。假设你的root分区位于`/dev/hda12且想使用runlevel

      3,在启动提示符输入:

      boot: rescue root=/dev/ 3

      这样,你就可以使用软盘中内核启动系统,新系统的功能基本齐全。(可能丢失某些内核特性或模块)

      如果dpkg命令出错该怎么办

      如果`dpkg损坏就不能安装任何`.deb文件。下面的操作可帮助你修复这种状况。(在第一行,你可将“links”替换成你喜欢的浏览器。)

      $ links http:///debian/pool/main/d/dpkg/

      ... 下载完好的dpkg__.deb

      $ su

      password: *****

      # ar x dpkg__.deb

      # mv data.tar.gz /data.tar.gz

      # cd /

      # tar xzfv data.tar.gz

      对`i386,亦可用`http://packages.debian.org/dpkg作为url。

      文件信息

      查找特定文件所属的软件包:

      $ dpkg pattern # search for pattern in installed packages

      $ wget http://ftp.us.debian.org/debian/dists//

      $ zgrep -e pattern

      # find filename-pattern of files in the debian archive

      或使用专门的软件包命令:

      # apt-get install dlocate

      # conflicts with slocate (secure version of locate)

      $ dlocate # fast alternative to dpkg -l and dpkg -s

      ...

      # apt-get install auto-apt # on-demand package installation tool

      # auto-apt update # create db file for auto-apt

      $ auto-apt search # search for pattern in all packages, installed or not

      软件包信息

      搜索并显示包文件的信息。编辑`/etc/apt/sources.list,让apt指向正确的包文件。如果想了解testing/unstable中的相应软件包与当前系统安装的软件包有何差别,使用`apt-cache

      policy---更好。

      # apt-get check # 更新缓冲区并检查损坏的软件包

      $ apt-cache search # 按文本描述搜索软件包

      $ apt-cache policy # 软件包的priority/dists信息

      $ apt-cache show -a # 显示所有dists中软件包描述信息

      $ apt-cache showsrc # 显示相应源码包的信息

      $ apt-cache showpkg # 软件包调试信息

      # dpkg --audit|-c # 搜索未完成安装的软件包

      $ dpkg ... # 已安装软件包描述

      $ dpkg -l ... # 已安装软件包的状态(每个占一行)

      $ dpkg -l ... # 列出软件包安装的文件的名称

      如果是woody发布版没有为`apt-cache showsrc建档,但该命令可用

      你也这可这样查看软件包信息(我用`mc浏览):

      /var/lib/apt/lists/*

      /var/lib/dpkg/available

      比较下面的文件可以确切了解最近的安装过程对系统造成了那些改变。

      /var/lib/dpkg/status

      /var/backups/dpkg.status*

      使用apt进行全自动系统安装

      进行全自动安装,要在`/etc/apt/apt.conf中加上一行:

      dpkg::options

      另一种等阶的方法是运行`apt-get -q -y

      。这种方法可能产生严重的负作用,所以使用起来要小心。参阅apt.conf(5)和dpkg(1)。

      安装完毕以后重新配置已安装软件包中的方法配置特定的软件包。

      重新配置已安装软件包

      使用下列方法重新配置已安装软件包。

      # dpkg-reconfigure --priority= [...]

      # dpkg-reconfigure --all # 重新配置所有的软件包

      # dpkg-reconfigure locales # 生成别的locales

      # dpkg-reconfigure --p= xserver-xfree86 # 重新配置x服务器

      如果你想永久改变`debconf对话框模式,可这么做。

      某些程序用于生成特殊的配置脚本。

      apt-setup - 创建/etc/apt/sources.list

      install-mbr - 安装主引导(master boot record)管理器

      tzconfig - 设定本地时间

      gpmconfig - 设置gpm鼠标daemon

      sambaconfig - 在potato中配置samba(woody使用debconf来配置)

      eximconfig - 配置exim (mta)

      texconfig - 配置tetex

      apacheconfig - 配置apache (httpd)

      cvsconfig - 配置cvs

      sndconfig - 配置声音系统

      ...

      update-alternatives - 设定默认启动命令,例如设定vi启动vim

      update-rc.d - system-v init脚本管理工具

      update-menus - debian菜单系统

      ...

      删除软件包

      删除软件包但保留其配置文件:

      # apt-get remove ...

      # dpkg --remove ...

      删除软件包并删除配置文件:

      # apt-get remove --purge ...

      # dpkg --purge ...

      阻止旧软件包升级

      举个例子,要阻止`libc6和`libc6-dev通过`dselect或使用`apt-get -u

      upgrade 命令升级,可执行:

      # echo -e "libc6 hold libc6-dev hold" | dpkg --set-selections

      这种方法不影响`apt-get -u install 命令操作。要阻止`apt-get

      -u upgrade 或`apt-get -u

      dist-upgrade命令对软件包执行的强制自动降级行为,可在`/etc/apt/preferences中加上:

      package: libc6

      pin: release a=stable

      pin-priority: 2000

      这里“`package:”后不能使用通配符如“`libc6*”,如果要保持所有与`glibc源码包相关的二进制包的版本同步,可以明确的列出它们。

      该命令可以显示处于“阻止”状态的软件包:

      dpkg --get-selections "*"|grep -e "hold$"

      stable/testing/unstable混合系统

      `apt-show-versions可以列出发行版中可用软件包的版本。

      $ apt-show-versions | fgrep /testing | wc

      ... 你有多少testing软件包

      $ apt-show-versions -u

      ... 列出可升级的软件包

      $ apt-get install `apt-show-versions -u -b | fgrep /unstable`

      ... 将所有unstable软件包升级到最新版本

      删除缓存包文件

      使用apt安装软件包会在`/var/cache/apt/archives目录留下缓存文件,要清除这些文件可使用:

      # apt-get autoclean # removes only useless package files

      # apt-get clean # removes all cached package files

      记录/拷贝系统配置

      对软件包选择情况进行本地备份:

      $ dpkg --get-selections "*" > # or use *

      `“*”使`包含那些被指定“完全删除(purge)”的文件。

      你可将这个文件发送到另一台电脑并在那儿按文件中的选择进行软件包安装。

      # dselect update

      # dpkg --set-selections <

      # apt-get -u dselect-upgrade # dselect install

      stable系统引入软件包

      对stable系统进行部分升级,在软件运行环境中重新编译源码的确是个诱人的想法,这样可以避免由于关联关系不得不对大量软件包升级。首先,将下列镜像源加入

      /etc/apt/sources.list:(以下是美国的debian源)

      deb-src http://http.us.debian.org/debian testing

      main contrib non-free

      deb-src http://non-us.debian.org/debian-non-us testing/non-us

      main contrib non-free

      deb-src http://http.us.debian.org/debian unstable

      main contrib non-free

      deb-src http://non-us.debian.org/debian-non-us unstable/non-us

      main contrib non-free

      由于屏幕输出的限制,上述每条`deb-src命令均分成了2行,实际上在`sources.list中它们均为单行。

      然后下载源码并在本地生成软件包:

      $ apt-get source $ dpkg-source -x $ cd ... 查找需要的软件包(编译所需的关联包列在.dsc文件中)并安装它们,

      你还需要“fakerroot”软件包。

      $ dpkg-buildpackage -rfakeroot

      ...or (no sig)

      $ dpkg-buildpackage -rfakeroot -us -uc # use "debsign" later if needed

      ...then to install

      $ su -c "dpkg -i "

      通常,需要安装一些带“-dev”后缀的软件包以满足关联关系。`debsign在`devscripts软件包中。`auto-apt可以轻松解决这些关联问题。请使用`fakeroot,如是没有必要,就别使用root帐号。

      在woody中,这些关联问题已被简化。例如,编译`pine源码包:

      # apt-get build-dep pine

      # apt-get source -b pine

      完结:以上全部方法同样可用于ubuntu

     作者: lien

      来源: www.linuxsir.org