这两天做sarge到etch的升级,参考了官方的release note,结合自己的实践写下本文,以便日后查询之用。

Debian官方建议使用aptitude来管理包,所以下面的操作均以aptitude为例,需要说明的是一旦用了aptitude,就不要再混用apt-get。

本文假定用户没有安装X windows系统,毕竟Debian更适合于做服务器,桌面还是用Ubuntu吧。

  1. 备份

    将系统中重要的系统文件做备份,一般是配置文件、数据库等

    $ sudo tar -cvf /home/backup/etc.bak /etc/*
  2. 准备升级环境

    升级的过程中会重启一些服务,所以千万不要通过telnet、ssh远程连接方式进行升级,最好在本机的终端窗口下操作(不要在X windows),或者通过modem的serial口远程登录。(这跟telnet、ssh的远程连接有所区别,cisco等网络设备经常会用到这种方式)

  3. 检查系统软件包状态

    系统中如果有软件包处于hold状态,则在升级过程中可能失败,最好手工将他们设为unhold

    $ sudo aptitude search "~ahold" | grep "^.h"
    $ sudo aptitude unhold pkg_name

    如果sarge系统中使用了非官方的软件包,例如backports,最好先将他们全部卸载,否则升级过程中会引起冲突。

  4. 更改source.list

    $ sudo vim /etc/apt/source.list
    
    --------8<----------
    # deb http://debian.cn99.com/debian sarge main contrib non-free
    deb http://debian.cn99.com/debian etch main contrib non-free
    # deb-src http://debian.cn99.com/debian sarge main contrib non-free
    deb-src http://debian.cn99.com/debian etch main contrib non-free
    --------8<----------

    中国一般用cn99源,速度比较快,只需要将sarge改为etch就可以了。

  5. 更新软件包列表

    $ sudo aptitude update
  6. 确认具有足够的硬盘空间

    在升级的过程中需要占用一些临时的磁盘空间,所以要确认是否还有足够的剩余空间

    $ sudo aptitude -y -s -f --with-recommends dist-upgrade
         [ ... ]
         XXX upgraded, XXX newly installed, XXX to remove and XXX not upgraded.
         Need to get xx.xMB/yyyMB of archives. After unpacking AAAMB will be used.
         Would download/install/remove packages.

    如果不能满足请删除一些文件,例如aptitude clean或者删除/var/log

  7. 升级

    sarge和etch之间有不少软件包是有冲突的,直接使用sudo aptitude dist-upgrade会卸载掉sarge系统里的软件包,而有些软件包是你想保留的,为了尽量避免这种情况发生,需要做阶段性升级,分三个步骤:

    • 7.1 最小化升级:

      $ sudo aptitude upgrade

      这样就只是更新的软件而不会删除其他东西。

      $ sudo aptitude install initrd-tools

    这将会自动升级libc6和locale,这个时候会重启某些服务。

    • 7.2 升级内核

      在做下一步操作之前强烈建议手工升级内核,Etch引进的udev技术已经无法支持比2.6.15旧的内核,而Debian Etch的软件仓库中的内核版本则是2.6.18。我们安装它就可以了。

      $ sudo aptitude search linux-image-2.6*
      $ sudo aptitude install linux-image-2.6-686

      这样就可以安装2.6.18的内核了。

    • 7.3 全面升级

      $ sudo aptitude dist-upgrade

      这将会对sarge进行完全的更新,时间大约半个小时,比我预料中要快很多。

  8. 更新软件包的签名信息

    Etch的软件包关系系统引入了签名功能,简言之,没有经过Debian官方签署的软件包无法在etch系统上安装,你当然也可以通过更改/etc/apt/来取消这个限制。

    $ sudo aptitude update

    至此,您的操作系统就更新完毕了,整个过程不需要重启,这对服务器而言无疑是非常贴心的一项设计。