ServersMan@VPSのDebianをwheezyに更新→できません!

Tablet PC deals and Promotion
停止

前回はWordPress向けに最適化したnginxの設定を紹介しました。

今回はServersMan@VPSにセットアップしているDebianをsqueezeからwheezyにアップデートします。

そもそも私がServersMan@VPSを契約したときには、選択できるDebianのバージョンはlenny(5.0)でした。その後、自力でsqueeze(6.0)にアップデートしました。今では、インストール時にsqueezeが選べるようになっているようです。

タイトルにも記載していますが、結果として不可能でした。

記録のためにこの記事は残しておきますが、絶対まねしないほうが良いです。

参考資料

とりあえずオフィシャルの文章は確認しておきましょう。

システムの状態のチェック

これもまたリリースノートを参照してシステムの状態をチェックします。

まず、aptitudeを起動して「g」を入力して、中途半端な状況でない確認をしておきます。

aptitude

私の場合は18個のパッケージをインストールするように進められたのでもう一度「g」を押してインストールしておきます。

また、次のコマンドでパッケージ状態を検査しておきます。

dpkg --audit

外部パッケージのための設定を削除

私はnginxを使うために、dotdeb.orgというサイトで配布されているdebパッケージを利用しています。

dotdeb.orgからパッケージを導入するための設定やテスト版を導入するための設定などを削除しておきます。

rm /etc/apt/preferences.d/*
rm /etc/apt/sources.list.d/*

あとでインストールを忘れないようにメモをしつつ、これらはいったん削除しておきます。

バックアップ

リリースノートを参照してファイルをバックアップします。

私の場合は下記の情報・ファイルをバックアップしました。アップグレードに失敗してServersMan@VPSが起動しなくなる可能性がありますので、バックアップしたファイルはローカルのPCに転送しておきます。

  • /etc以下すべて: 各種設定ファイル
  • /www以下すべて: 自分のWebサイトのコンテンツデータ
  • /usr/share/wordpress/wp-content/以下すべて: WordPressのプラグイン・テーマなど
  • /var/lib/dpkg以下すべて: Debianのパッケージ情報
  • /var/lib/apt/extended_status: apt用のパッケージ情報
  • /var/lib/aptitude/pkgstates: aptitude用のパッケージ情報
  • 「dpkg –get-selections “*”」の出力: インストールしているパッケージの一覧

aptの設定を変更

/etc/apt/source.listを変更します。現在の設定はすべて#でコメントアウトして、下記の行を追加します。

deb http://ftp.jp.debian.org/debian wheezy main contrib non-free
deb http://ftp.jp.debian.org/debian wheezy-updates main contrib non-free
deb http://security.debian.org/ wheezy/updates main contrib non-free

更新

下記の二つのコマンドで最小限の更新を実行します。最小限とはいえ大量に更新されます。前のアップデートでも感じましたが、ファイルのダウンロードはものすごく早いです。

apt-get update
apt-get upgrade

更新しているといくつか問い合わせが出てくることがあります。私は次のように対処しました。

  • login
    • そのままリターン
  • /etc/crontab
    • Yを入力してメンテナのバージョンをインストール
  • /etc/sudoers
    • Yを入力してメンテナのバージョンをインストール
    • その代わりあとで、「adduser [自分のユーザ名] sudo」を実行する

最小限の更新が完了したら、まとめてシステム全体を更新します。

apt-get dist-upgrade

ダウンロードが始まり順調と思っていたら・・・・

Checking init scripts...
WARNING: this version of the GNU libc requires kernel version
2.6.26 or later. Please upgrade your kernel before installing
glibc.

The installation of a 2.6 kernel _could_ ask you to install a new libc
first, this is NOT a bug, and should *NOT* be reported. In that case,
please add lenny sources to your /etc/apt/sources.list and run:
apt-get install -t lenny linux-image-2.6
Then reboot into this new kernel, and proceed with your upgrade
dpkg: /var/cache/apt/archives/libc6_2.13-38_i386.deb の処理中にエラーが発生しま した (--unpack):
サブプロセス 新しい pre-installation スクリプト はエラー終了ステータス 1 を返しました
configured to not write apport reports
以下のパッケージの処理中にエラーが発生しました:
/var/cache/apt/archives/libc6_2.13-38_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

というエラーが出てとまってしまいました。

なんと、ServersMan@VPSで利用しているカーネル(2.6.18)が古すぎるのでlibc6パッケージがインストールできないというのです。 libc6パッケージというのは根幹を成すパッケージでほとんどのパッケージがこれに依存しています。

これは大問題発生です!

挑戦するが・・・

とりあえずlibc6関連のパッケージを以前に戻して、ホールドします(パッケージをインストールしなおさなくても良いかも)。

wget http://ftp.jp.debian.org/debian/pool/main/e/eglibc/libc-bin_2.11.3-4_i386.deb
wget http://ftp.jp.debian.org/debian/pool/main/e/eglibc/libc6_2.11.3-4_i386.deb
wget http://ftp.jp.debian.org/debian/pool/main/e/eglibc/locales_2.11.3-4_all.deb
dpkg -i libc-bin_2.11.3-4_i386.deb libc6_2.11.3-4_i386.deb locales_2.11.3-4_all.deb
echo libc-bin hold | dpkg --set-selections
echo libc6 hold | dpkg --set-selections
echo locales hold| dpkg --set-selections

また、関連しそうなものも古いパッケージに戻しておきます(パッケージをインストールしなおさなくても良いかも)。

wget http://ftp.jp.debian.org/debian/pool/main/e/eglibc/nscd_2.11.3-4_i386.deb
dpkg –i nscd_2.11.3-4_i386.deb
echo nscd hold | dpkg --set-selections

これで再開してみます。

# apt-get dist-upgrade
...
以下のパッケージには満たせない依存関係があります:
base-files : 破壊: initscripts (< 2.88dsf-13.3) しかし、2.88dsf-13.1+squeeze1 はインストールされようとしています
liblockfile-bin : 破壊: liblockfile1 (< 1.09-1) しかし、1.08-4 はインストールされようとしています
libpixman-1-dev : 依存: libpixman-1-0 (= 0.16.4-1) しかし、0.26.0-4 はインスト ールされようとしています
multiarch-support : 依存: libc6 (>= 2.13-5) しかし、2.11.3-4 はインストールされようとしています
netbase : 破壊: ifupdown (< 0.7~rc1)
perl : 依存: libdb5.1 しかし、インストールされようとしていません
sysvinit : 先行依存: initscripts (>= 2.88dsf-13.3) しかし、2.88dsf-13.1+squeeze1 はインストールされようとしています
E: エラー、pkgProblemResolver::Resolve は停止しました。おそらく変更禁止パッケージが原因です。

とりあえず、ダメそうなものはホールドしていきます

echo initscripts hold | dpkg --set-selections
echo liblockfile1 hold | dpkg --set-selections
echo libpixman-1-0 hold | dpkg --set-selections
echo libcairo2 hold | dpkg --set-selections
echo netbase hold | dpkg --set-selections
echo perl hold | dpkg --set-selections

ここまでがんばりましたが・・・

apt-get dist-upgrade
...
以下のパッケージには満たせない依存関係があります:
multiarch-support : 依存: libc6 (>= 2.13-5) しかし、2.11.3-4 はインストールされようとしています
E: エラー、pkgProblemResolver::Resolve は停止しました。おそらく変更禁止パッケージが原因です。

となりどうしようもありません。wheezyから導入されたmultiarchサポートが鬼門となり、これより先には進めなくなってしまいました

復旧

仕方がないので/etc/apt/sources.listを元に戻します。

deb http://ftp.jp.debian.org/debian squeeze main contrib non-free
deb http://ftp.jp.debian.org/debian squeeze-updates main contrib non-free
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb http://ftp.jp.debian.org/debian squeeze-proposed-updates main contrib non-free

そしてホールドしたパッケージを元に戻します

dpkg --get-selections | grep 'hold$' | awk '{print $1 " install";}' | dpkg --set-selections

まとめ

思いつきでServersMan@VPSのDebianをwheezyにアップデートしようとしてみましたが不可能なことがわかりました。

DTIには早くカーネルのバージョンをあげて欲しいものです。いまどき2.6.18はないでしょう・・・

次回は懲りずにnginxのパッケージをアップデートしたいと思います。