Last-modified: 2011-12-30 (金) 13:51:07
LinuxTips/Debian Lennyからsqueezeへのアップデート

概要

Debian Lennyからsqueezeへのアップデートを行います。
今回使用したのは構築概要(Debian)のような、GUIを含まず、apt-getのみで構築したほぼ最小構成のマシンです。

手順

  1. バックアップ
    不測の事態に備えるため、バックアップを取ります。
    ファイルベースでとっても良いですが、フルイメージを取っておいたほうがより安心です。
    私の場合は定期的にイメージバックアップが走っているので、何もせずに次へ進みます。
  2. 前準備
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
    
    -
    !
    -
    !
    -
    !
    
    # bug #512951 のため、アップグレード前にsplashyパッケージを完全削除
    apt-get purge splashy
    # エラー状態にあるパッケージの有無を確認
    dpkg --audit
    # hold状態にあるパッケージの有無を確認
    dpkg --get-selections | grep hold
  3. /etc/apt/sources.listを編集
    「lenny」となっている箇所を「squeeze」へ変更します。
    代わりに「stable」とすると、安定版が切り替わったときに自動で移行しますが、メジャーバージョンアップは気軽に行う作業ではないため、私はコードネームを指定します。
    必要な方は、「main」のあとに、「contrib」や「non-free」も追記してください。
    また、lennyで「volatile」が終了し、「szueeze-update」に置き換わっているので、修正します。
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
    
    -
    |
    !
    -
    !
     
     
     
     
     
     
    -
    |
    |
    |
    !
     
    
    #
    # deb cdrom:[Debian GNU/Linux 5.0.2 _Lenny_ - Official Multi-architecture amd64/i386/powerpc NETINST #1 20090629-11:17]/ lenny main
     
    #deb cdrom:[Debian GNU/Linux 5.0.2 _Lenny_ - Official Multi-architecture amd64/i386/powerpc NETINST #1 20090629-11:17]/ lenny main
     
    deb http://ftp.jp.debian.org/debian/ squeeze main
    deb-src http://ftp.jp.debian.org/debian/ squeeze main
     
    deb http://security.debian.org/ squeeze/updates main
    deb-src http://security.debian.org/ squeeze/updates main
     
    # lennyまでで終了
    #deb http://volatile.debian.org/debian-volatile lenny/volatile main
    #deb-src http://volatile.debian.org/debian-volatile lenny/volatile main
    # volatileの後継
    deb http://ftp.jp.debian.org/debian squeeze-updates main
    deb-src http://ftp.jp.debian.org/debian squeeze-updates main
  4. セッションの記録を開始
    Everything is expanded.Everything is shortened.
      1
    
     
    
    script -t 2>~/upgrade-squeeze1.time -a ~/upgrade-squeeze1.script
  5. パッケージ更新
    ここで、自分が変更したファイルと新しいファイルが競合すると、どちらを使うのか、またはマージするかを逐一確認してきます。
    内容を比較しつつ慎重に選択しましょう。
    決断できない場合は、元のファイルを使う[N]で進めます。
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
    
    -
    !
    -
    !
    -
    !
    
    # リスト更新
    apt-get update
    # 必要容量確認
    apt-get -o APT::Get::Trivial-Only=true dist-upgrade
    # 更新
    apt-get upgrade
  6. カーネル更新
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
    
    -
    !
    -
    !
    -
    !
    
    # インストール済みのカーネル表示
    dpkg -l "linux-image*" | grep ^ii
    # カーネルインストール
    apt-get install linux-image-2.6-686
    # udevインストール
    apt-get install udev
  7. 再起動
    Everything is expanded.Everything is shortened.
      1
    
     
    
    shutdown -r now
  8. セッションの記録を開始
    Everything is expanded.Everything is shortened.
      1
    
     
    
    script -t 2>~/upgrade-squeeze2.time -a ~/upgrade-squeeze2.script
  9. システムのアップグレード
    Everything is expanded.Everything is shortened.
      1
    
     
    
    apt-get dist-upgrade
  10. 再起動
    以上でアップグレードは終了です。
    あとは、今まで動いていたものが正常に動いているかを確認していきます。
    必要ならば、記録したセッションのログも確認します。
    また「*.dpkg-dist」というファイルが、ファイルの競合時に元ファイルを使用するとした場合の、新しい方のファイルです。中身を確認し、不要ならば削除します。
    Everything is expanded.Everything is shortened.
      1
    
     
    
    shutdown -r now
  11. エラー例1
    私の場合mysqlが起動しなくなっていました。
    ファイル競合確認では、元ファイルを使用するにしています。
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
      7
      8
      9
    
    -
    !
     
     
    -
    !
     
    -
    |
    
    # 新しいファイルに置き換え
    cp /etc/mysql/my.cnf /etc/mysql/my.cnf_original
    cp /etc/mysql/my.cnf.dpkg-dist /etc/mysql/my.cnf
     
    # mysqlのインストールを再試行
    apt-get install mysql-server
     
    # 成功
    # あとは、/etc/mysql/my.cnfに、my.cnf_originalの設定を慎重にマージしたところ回復
    
  12. エラー例2
    アップデート途中で、システムshellをdashへ置き換えることを勧められたので、dashにしたところ一部の自前スクリプトが動かなくなっていました。
    見つけたケースでは、bashと違い配列が使えないためエラーになっていました。
    今回はシバンの置き換えで対応しましたが、動かないスクリプトが多いのであれば、シンボリックリンクを貼り戻したほうが良いかもしれません。
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
    
    -
    !
     
    -
    |
    !
    
    # 解決案1
    シェルスクリプトのシバンを「#!/bin/sh」から「#!/usr/bin/env bash」へ置き換える
     
    # 解決案2
    # シンボリックリンクを貼り戻す
    ln -s -f /bin/bash /bin/sh
  13. 不要なパッケージをパージ
    Everything is expanded.Everything is shortened.
      1
    
     
    
    apt-get autoremove

検証時の環境

参考