2012/04/26

Ubuntu 10.04 LTSを12.04 LTS Beta2へアップグレードしてみた

予定では今日の日付でリリースされるはずのUbuntu 12.04 LTSですが、ファイルが世界中のミラーと同期が取れるまでは正式な発表は遅れるんじゃないかなと思って先にBeta2にアップグレードしてみました。

現状までのKnown Issuesをみる限りは、NVIDIAのビデオカード周りでは不具合が想定されますが、それほど大きな問題はないように思えました。

しかし実際には様々な外部リポジトリを参照している環境でのアップグレードは、なかなか困難な作業となってしまいました。

環境について

まとめるのは難しいのですが、メインのデスクトップ環境として使っているUbuntu 10.04 LTS環境は、monodevelopやUbuntu Japanese Teamのリポジトリなど、Ubuntu Teamが想定しているよりも多くのパッケージを導入しています。

こういう状況が今回は困難を招く事となりました。

正式リリースでは解決して欲しいのですが、万が一同じような状況に遭遇した場合は参考にしてください。

Beta2へのアップグレード

12.04 LTS Beta2の導入自体はいつものコマンドで完結することになっています。 $ sudo do-release-upgrade -d

しかし実際には、いくつかのエラーに遭遇して処理が進まない事態となりました。

エラー:バージョン表記が数字から始まらない事によるエラー

Ubuntu Japanese Forumで以前に指摘されていた現象ですが、/var/lib/dpkg/statusファイルの中でipa-monafontのバージョン表記が数字で始まるべきなのに、release1.0.8-から始まっているためにdpkgがエラーを出して処理が止まりました。

エラーメッセージに表示される/var/lib/dpkg/statusファイルの問題となる個所は、パッケージの削除はできない状況になったので、以下の個所を手動で変更することで解決しました。

/var/lib/dpkg/statusファイルからの問題個所の抜粋

Package: ttf-ipamonafont
Status: deinstall ok config-files
Priority: optional
Section: x11
Installed-Size: 96
Maintainer: Jun Kobayashi <jkbys@ubuntu.com>
Architecture: all
Version: release1.0.8-0ubuntu0ja3
Config-Version: release1.0.8-0ubuntu0ja3
Depends: opfc-modulehp-ipamonafont-source (= 1.1.1+1.0.8-0ubuntu0ja1), xutils (>= 4.0.2), defoma, fontconfig
Conffiles:
 /etc/defoma/hints/ttf-ipamonafont.hints e062172955750867c763992e06ffdf8a
Description: Setup script for IPA Mona Font
 This package makes symlink to IPA Mona fonts and setup them.

これは手でファイルを修正して、 $ sudo apt-get -f installの後で、再び $ sudo do-release-upgrade -d を実行しました。

修正後の/var/lib/dpkg/statusファイル

...
Version: 1.0.8-0ubuntu0ja3
Config-Version: 1.0.8-0ubuntu0ja3
...
エラー:gitの更新ができない

Ubuntu 10.04 LTSに導入されているgit関連のバージョン表記は4.x.yとなっていますが、12.04 LTSからは1.7.xに変更になっています。

通常バージョン番号は、より新しいパッケージが、より新しい数字を持つ前提になっているため、どうやってもこの依存関係を解決する事ができませんでした。

最終的には強制的にgit*パッケージを削除し、やはり強制的に/var/cache/apt/archives/にダウンロードされているgit関連パッケージを導入しました。

試行錯誤して完全なログがないのと、場合によって手順が変わるので、実行したコマンドの概要を記録しておきます。

 $ sudo dpkg -r --force-depends git
 $ sudo dpkg -i --force-depends /var/cache/apt/archives/git_1%3a1.7.9.5-1_amd64.deb

git-coreやgit-manといった関連パッケージはapt-get removeではなく、dpkg -rで削除できたので、最終的にはgitパッケージだけを強制的にremoveしたはずです。

この他に依存関係が壊れてしまった場合の対応

何回か do-release-upgradeが動かなくなる事態に遭遇しました。 どうしようもない状態では、apt-get -f installを試しましょう。

 $ sudo apt-get -f install

実際の作業はdo-release-upgradeとapt-get -f installの繰り返しになっています。 スクリプトが停止した都度、問題個所を修正して、何回か繰り返してUbuntu 12.04 LTS Beta2へのアップグレードが完了しました。

最後にapt-get upgradeしたタイミングで、12.04 LTS のリリース版に更新されました。

こういった状況が複合的に問題を解決したのかもしれません。

さいごに

これらの手を尽してdo-release-upgradeコマンドの処理が進んでも、時々/etc/servicesやらを更新するかといった質問と伴に処理が止まります。netstat -aで表示される80番ポートの表記がwwwからhttpに変わるといった確認をしながら置き換えるか判断する事になります。

時々、現状維持を意味するNがデフォルトのまま止まりますが、明かに更新しないと動かなくなりそうな事が多々あるので、(もちろんその逆もありますが)、よく考えて判断が必要です。

対象のパッケージをあまり使っていなくて、新規導入と同じ条件で問題ないならYを選択するべきです。 こういった経験則から判断すると、Nではなくて上書きを意味するYを押すタイミングは次のような場合でしょうか。

  • 自分が過去に編集して、利用しているアプリケーションの設定ファイル
  • アプリケーションが新規導入後と同じ状態でよい場合
  • (/etc/services等)独自の変更内容が軽微で簡単に変更が反映できる場合

どちらを選ぶ場合でも "filename + .dpkg-old" や "filename + .dpkg-dist" といった名前でファイルは並んでいるのでdiffを確認したり、後からコピーする事ができるので焦らないようにしましょう。

よく使っているアプリケーションが更新しなかった設定ファイルのせいで動かなければ"filename + .dpkg-dist"を確認して必要な修正を取り込みましょう。

慣れる作業ではないかもしれませんが、それほど時間はかからずに終ると思います。Have a good time, enjoy!

0 件のコメント: