前回は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サイトのコンテンツデータ
- /home/cfumylmd/public_html/scratchpad.jp/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のパッケージをアップデートしたいと思います。
コメント