2007年04月14日

Debian GNU/Linux 4.0 ("etch") 以前のリリースからのアップグレードの方法

これは、リリースノート第4章からの抜粋訳+αです。完全な日本語訳については、現在Debian JPドキュメントチームが作業しており、近日中に発表されるものと思います。

Etchではコアパッケージにいくつかの大きな変更があったため、単純にapt-get dist-upgradeのようなことをすると、収拾のつかないことになる恐れがあります。リリースノートの手順は経験豊富な開発者によるテストを重ねた結果の集大成であり、これに従うのが最も安全と思われます。以下にその手順の訳をまとめて掲載します。

  1. バックアップ: 当然ですがアップグレードを行う前に、すべての重要なデータおよび設定ファイルをバックアップしておいてください。/etc、/var/lib/dpkg、dpkg --get-selections "*" の結果などはバックアップする価値があります。/home に手を付けられることはありませんが、GNOME などアプリケーションが更新されてファイルが書き変わることはあります。
  2. ユーザーへの告知: ほかのユーザーを抱えているときには、アップグレードを行う旨伝えておきます。一応、ssh のセッションは切られることはないはずです。ただ、いずれにしてもカーネルを更新したら再起動することにはなりますが。
  3. リカバリーの準備: カーネルやそのドライバが変わったので、ハードウェア認識の変化によってアップグレード後うまく起動できなくなることがあります。ssh でリモート接続しかしていないなら、シリアルコンソールの準備などをしておいたほうがよいでしょう。カーネルを戻して動くこともありますが、保証の限りではありません。起動できなくなったときには live CD やインストーラの rescue モード (boot: で rescue と入れる) で修正作業を行うことになります。
  4. アップグレードの作業環境の準備: 直接コンソールにログインするか、ssh でログインします。途中不慮の事態で切断されても復活できるよう、screen をインストールしてその中で作業するようにするとよいでしょう。telnet、rlogin、rsh、xdm/gdm/kdm といった X セッションマネージャ経由でのログインは、途中で切断されて、以降アクセス不能になる恐れがあります!
  5. カーネル2.2 の廃棄: カーネル 2.2 はもうサポートされておらず、そのままアップグレードすると動作しなくなります。glibc を更新する前に Sarge の 2.6 へ、せめて 2.4 へと更新しておく必要があります。
  6. システム状態の確認: X.Org 移行で /usr/X11R6/bin → /usr/bin 移行などが行われている都合上、サードパーティ製パッケージの存在が問題になることがあります。事前に削除しておくとよいでしょう。Sarge の最終ポイントリリースで、Sarge 収録のパッケージはこの問題について修正済みになっています (よって、最初に Sarge を最新に更新しておいてください)。
  7. pending パッケージの調査: パッケージが中途半端な状態になっていないよう、使っているバージョンの最新への更新 (「sarge」を指していることを確認) と、aptitude clean を実行します。aptitude を起動して g を押すと、一連の調査ができます。
  8. APT pin の解除: pin 設定を /etc/apt/preferences ファイルなどで設定しているときにはこれを解除します。
  9. パッケージ状態の確認: 半設定状態がないか、dpkg --audit、dpkg -l | pager、dpkg --get-selections "*" などで確認します。アップグレードの影響からホールドしておきたいときには、aptitude hold パッケージ名 でホールドできます (unhold で解除)。
  10. 非公式/backports: 非公式パッケージ、backports.org のパッケージについてはファイル衝突などの問題が起きるかもしれません。自己責任で対応してください。
  11. 手動での unmark: 依存関係の問題を避けるため、いくつかのパッケージに設定します。「aptitude unmarkauto openoffice.org vim」を実行します。2.6 カーネルを使っているなら「aptitude unmarkauto $(dpkg-query -W 'kernel-image-2.6.*' | cut -f1)」も行います。
  12. APT 取得先: /etc/apt/sources.list で etch を向くようにします。sarge とチャンポンにしないようにしてください (etch の CD を apt-cdrom add すると unstable に向いてるかのような行が追加されますが、これは異常ではありません)。
  13. ファイルシステムの準備: read-only マウントしているような場合は、rw でリマウントしておいてください (通常は rw でマウント済みのはずです)。
  14. セッションの記録: 一連の手順を後で解析できるよう、script プログラムを動かしておきましょう。「script -t 2>~/upgrade-etch.time -a ~/upgrade-etch.script」のようにします (ここではホームディレクトリ。/tmp に置くと再起動時に消えてしまうので別の場所を選んでおいてください)。
  15. パッケージリスト更新: aptitude update を実行します。
  16. 空き領域の確認: ネットワーク経由だとキャッシュディレクトリに大量のパッケージを一度ダウンロードすることになります。十分な容量があることを確認してください。
  17. 最小アップグレード: まずは影響の少ないところから始めます。「aptitude upgrade」を実行してください。これはほかのパッケージの削除を伴わないので比較的安全です。次に、「aptitude install initrd-tools」を実行します。なお、libc の更新時にいくつかのサービスが再起動し、X ディスプレイマネージャも再起動 (つまり接続が切れる) します。
  18. デスクトップ環境のアップグレード: 以降は環境にもよってしまうのですが、デスクトップタスクをインストールした状態からのアップグレードをまず説明します。「dpkg -l libfam0c102 | grep ^ii」および「dpkg -l xlibmesa-glu | grep ^ii」を実行して、これらのパッケージがインストールされているかどうかを確認してください。インストールされていたら、「aptitude install libfam0 xlibmesa-glu」を実行して更新します。
  19. X 関連パッケージのアップグレード: 上記と異なり、デスクトップタスクインストール後環境からのアップグレードでない場合には、別の作業が必要です。「dpkg -l xfree86-common | grep ^ii」「dpkg -l libfam0c102 | grep ^ii」「dpkg -l xlibmesa-glu | grep ^ii」を確認してください。「aptitude install x11-common libfam0 xlibmesa-glu」という実行内容のうち、libfam0c102 が入っていないなら libfam0 を除き、xlibmesa-glu が入っていないならやはりこれも除きます。
  20. カーネルのアッグレード: Etch のカーネル 2.6 向けには udev が全面的に採用され、2.4 で使われていた hotplug は削除されます。このため、以前のカーネルは起動できなくなります。「aptitude install linux-image-2.6-flavor」によってカーネルをインストールします (kernel-image → linux-image に名前も変わっています)。flavor には、486、686、k7、amd64 などが入ります。-smp は統合されているので付ける必要はありません。
  21. 残りのパッケージのアップグレード: 残りの部分のアップグレードを「aptitude dist-upgrade」で行います。消されるパッケージに注意してください (心配な場合には JP のメーリングリストで聞いてみるのがよいでしょう)。アップグレード後うまくいかなかったものがあったら、「aptitude -f install パッケージ」を試してみてください。場合によっては再度「aptitude dist-upgrade」が必要なこともあります。
  22. パッケージ署名の取得: アップグレードが終わったら、apt の署名機構を使うため「aptitude update」を実行します。
  23. 問題への対応: 「E: Dynamic MMap ran out of room」のようなメッセージが出てしまったら、「APT::Cache-Limit "12500000";」という行を /etc/apt/apt.conf に記述してみてください (/etc/apt/sources.list をクリーンアップするほうがよいですが)。
    場合によっては「APT::Force-LoopBreak」オプションを付けないといけないことがあるかもしれません。aptitude -o APT::Force-LoopBreak=1 のようにします。
    手動でパッケージ削除を行うために dpkg --remove パッケージ をしたり、半設定の修正のために aptitude --fix-broken install や dpkg --conigure --pending をしないといけないことがあるかもしれません。 あるいは、強制的に再インストールするために dpkg --install パッケージファイル.deb をしないといけないかもしれません。
    ファイルが衝突 (trying to override ... which is also ) というエラーになったら、dpkg -r --force-depends パッケージ で古いパッケージを削除しなければならないかもしれません。
  24. カーネル関係のパッケージのアッグレード: 「dpkg -l "linux-image*"| grep ^ii」で現在インストールされたカーネル実体パッケージを確認したあと、「linux-image-2.6-flavor」のようなメタパッケージをインストールしておくとよいでしょう。
  25. デバイス名の変化: カーネルの更新によってイーサネットデバイスの順番が変わることがあります。戻したいときには /etc/udev/rules.d/z25_persistent-net.rules の定義を操作するか、ifrename を使えます。モジュールロード順序を変えたいときには /etc/initramfs-tools/modules に先に読ませたいものを記述し、「update-initramfs -u -k all」を実行します。sym53c8xx_2→sym53c8xx のようにモジュール名が変わっていることもあるので注意してください。
  26. ブートタイミング: USB ディスクや RAID などでルートパーティションをサポートする /dev を作る順序に問題があるときには、rootdelay=9 をブートパラメータに付けるという当面の回避策があります。
  27. devfs からの変換: devfs システムはもう廃棄されたので、これに従って何か設定していたときには修正します。特に /etc/fstab、/etc/lilo.conf、/boot/grub/menu.lst、/etc/inittab を確認してください。
  28. LILO の再実行: ブートローダーに lilo を使っていたのであれば、/sbin/lilo を実行しておいてください。/etc/kernel-img.conf に「do_bootloader = yes」があることも確認しましょう (こうなっていれば、カーネルの更新時に自動で LILO が実行されます)。
  29. mdadm のアップグレード: MD による RAID を組んでいるときには、再起動する前に絶対に /usr/share/doc/mdadm/README.upgrading-2.5.3.gz を読んで指示に従ってください!
  30. 次のリリースへの準備: grubを使っているなら /etc/kernel-img.conf の update-grub のパスを /sbin/update-grub から /usr/sbin/update-grub に変更してください。
    新しいメタパッケージがインストールされるよう「aptitude unmarkauto $(dpkg-query -W 'linux-image-2.6-*' | cut -f1)」を実行します。また、「aptitude purge kernel-image-2.6-flavor」で古いメタパッケージを削除します。
    /etc/network/options の内容を /etc/sysctl.conf に移します。
  31. 不要なパッケージの削除: deborphan や debfoster を使って不要な (ライブラリ) パッケージを検索できます。移行のためだけに存在した (削除してかまわない) ダミーパッケージは deborphan --guess などで検索できます。