某所で Web サーバとして使っている Debian squeeze を wheezy へアップグレードした。

アップグレードする理由

現安定版の wheezy (Debian 7) は、2013年5月4日にリリースされた。

・次の安定版がリリースされると、それまでの安定版は一般に「旧安定版」(old stable) と呼ばれて区別される。
・セキュリティアップデートは、次の安定版がリリースされた後も、そのまま一年間は継続して提供される。

Debian - Wikipedia

2ヶ月後の2014年5月には、旧安定版の squeeze はセキュリティアップデートが終了すると思われるので、このタイミングで wheezy にアップグレードしておいた。

ちなみに、旧安定版の squeeze (Debian 6) は、2011年2月6日にリリースされている。もう3年たっている。

使っている主要なソフトウェア・パッケージのアップグレード

今回の移行バージョンを表にしてみた。

squeezewheezy
OpenJDK 6OpenJDK 6
Tomcat 6Tomcat 6
Perl 5.10Perl 5.14
Ruby 1.8Ruby 1.8
MySQL 5.1MySQL 5.5

Perl, Ruby, Java (OpenJDK), Tomcat は新しいバージョン (Perl 6, Ruby 1.9, OpenJDK 7, Tomcat 7) も用意されているが、旧バージョン (Perl 5, Ruby 1.8, OpenJDK 6, Tomcat 6) もあるので無理にアップグレードしなくてもOK。

MySQL は設定ファイル /etc/mysql/my.cnf の [mysqld] セクションにある default-character-set=utf8 の設定を削除して、 character-set-server=utf8 を追加した。 [client] セクションや [mysqldump] セクションにある default-character-set=utf8 の設定は残しておいてOK。
参考 ⇒ [ヅ] Debian GNU/Linux squeeze に MySQL 5.1 をインストール (2012-01-21)

ちなみにこのサーバでは、 Apache はソースコードを自前でコンパイル・ビルドして使っているので、パッケージ更新の作業は不要だった。ビルドしなおす必要があるかと思ったが、そのままでも動いている。

アップグレード作業の前に

バックアップ大切。 Apache, Tomcat, MySQL を停止して、コンテンツをバックアップしておく。

資料をざっと読んでおくの大切。

アップグレード作業の流れ

作業は 第4章 Debian 6.0 (squeeze) からのアップグレード を見ながら進める。

telnet + screen でサーバへ接続。

script コマンドで作業を記録開始。


# script -t 2>~/upgrade-wheezy.time -a ~/upgrade-wheezy.script

/etc/apt/sources.list を wheezy 用に書き換える。


deb http://security.debian.org/ wheezy/updates main contrib non-free
deb http://cdn.debian.net/debian/ wheezy main contrib non-free
deb http://cdn.debian.net/debian/ wheezy-updates main contrib
deb-src http://cdn.debian.net/debian/ wheezy main contrib non-free
deb-src http://cdn.debian.net/debian/ wheezy-updates main contrib

参考: Debian JP Project - CDN 対応ミラーの設定

wheezy のパッケージ情報を取得する。


# apt-get update

アップグレード後に削除されるパッケージやインストール容量の情報を見る。


# apt-get -o APT::Get::Trivial-Only=true dist-upgrade

必要なパッケージが削除されてしまう可能性を避けるために、まずは最小のアップグレードを実施。


# apt-get upgrade

システムの完全なアップグレードを実施。


# apt-get dist-upgrade

OSを再起動。


# shutdown -r now

アップグレード作業の実際(;´Д`)

作業しながらできるだけ Twitter にメモをツイートしていた。それをここに残しておく。

本日の予定: ひきこもり( ´∀`)
[t] 2014-03-08 08:09:11
screen を使う。「このプログラムは安全な再接続を可能にし、リモート接続プロセスが切断された場合でもアップグレード作業が中断しないようにしてくれます」Debian 6.0 (squeeze) からのアップグレード http://www.debian.org/releases/wheezy/amd64/release-notes/ch-upgrading.ja.html
[t] 2014-03-08 08:39:47
「aptitude を 「ビジュアルモード」 で起動して g (「Go」) を押してください」「内容を確認して、修正するかあるいは提案されたアクションを実行すべきです」Debian 6.0 (squeeze) からのアップグレード http://www.debian.org/releases/wheezy/amd64/release-notes/ch-upgrading.ja.html
[t] 2014-03-08 08:41:55
Debian JP Project - CDN 対応ミラーの設定 http://www.debian.or.jp/community/push-mirror.html
[t] 2014-03-08 08:45:25
/etc/apt/sources.list に追加するURL. wheezy でもOK.

Debian JP Project - CDN 対応ミラーの設定 http://www.debian.or.jp/community/push-mirror.html
[t] 2014-03-08 08:48:19
「以前のリリースの一部では、アップグレード作業に aptitude の利用を推奨していました。このツールは squeeze から wheezy へのアップグレードには推奨されません」squeeze からのアップグレード http://www.debian.org/releases/wheezy/amd64/release-notes/ch-upgrading.ja.html
[t] 2014-03-08 08:52:24
アップグレードでいちばんこわいのはやっぱりソフトウェアRAIDまわりかなぁ。
[t] 2014-03-08 09:08:28
サーバからアーカイブファイルをバックアップするのにけっこう時間がかかる。
[t] 2014-03-08 09:57:15
# apt-get -o APT::Get::Trivial-Only=true dist-upgrade

アップグレード: 438 個、新規インストール: 185 個、削除: 9 個、保留: 0 個。
329 MB のアーカイブを取得する必要があります。
[t] 2014-03-08 10:16:40
なにがさくじょされるんだろうがくぶる
[t] 2014-03-08 10:17:02
削除対象: console-terminus defoma libept1 libpango1.0-common mysql-client-5.1
mysql-server-5.1 mysql-server-core-5.1 portmap x-ttcidfont-conf
[t] 2014-03-08 10:17:55
# apt-get upgrade
[t] 2014-03-08 10:18:46
sysstat の日時統計データファイルの形式がバージョンアップで変更。過去の形式の統計データファイルを削除。
[t] 2014-03-08 10:20:12
「W: Possible missing firmware /lib/firmware/rtl_nic/rtl8105e-1.fw for module r8169」
[t] 2014-03-08 10:25:27
# apt-get dist-upgrade
[t] 2014-03-08 10:25:39
"Configuring libc6"
"Restart services during package upgrades without asking?"
"<Yes>"
[t] 2014-03-08 10:29:36
MySQL の root パスワードを設定。
[t] 2014-03-08 10:33:05
Σ(゚∀゚ノ)ノキャー 「linux-image-3.2.0-4-amd64 を設定しています」「必要なファームウェアファイルがなくなっている可能性があります」「contrib および non-free セクションを含むようパッケージマネージャを再設定する必要があるかも」
[t] 2014-03-08 10:37:34
contrib と non-free は設定してあるからたぶんだいじょうぶだろうと「<了解>」をポチッとな。
[t] 2014-03-08 10:38:27
「mysql-server-5.5 を設定しています」
「Please read the /usr/share/doc/mysql-server-5.5/README.Debian file for more information.」
[t] 2014-03-08 10:40:33
差分を見たら新しいファイルのほうが良さげ。

「設定ファイル `/etc/munin/plugin-conf.d/munin-node'
==> これはインストールしてから (あなたかスクリプトによって) 変更されています。
==> パッケージ配布元が更新版を提供しています」
[t] 2014-03-08 10:43:11
これは自分のいじったファイルを残す。出力先とか指定してる。

「設定ファイル `/etc/munin/munin.conf'
==> これはインストールしてから (あなたかスクリプトによって) 変更されています。
==> パッケージ配布元が更新版を提供しています。」
[t] 2014-03-08 10:44:50
"update-initramfs: Generating /boot/initrd.img-3.2.0-4-amd64"
[t] 2014-03-08 10:45:29
うーん、ちょっとこわい。

"W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168f-2.fw for module r8169"
[t] 2014-03-08 10:45:39
・゚・(つД`)・゚・ ウェ―ン

「処理中にエラーが発生しました:
mysql-server-5.5
mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)」
[t] 2014-03-08 10:46:03
"rc mysql-server-5.1" 古いパッケージが削除されてるけど、設定が残ってるのがいけないのかな。
[t] 2014-03-08 10:49:51
rc mysql-server-5.1 => 削除・設定
iF mysql-server-5.5 => インストール・設定失敗

という状況なので、やっぱり設定が問題ぽい。まずは /etc/mysql/my.cnf を退避。
[t] 2014-03-08 10:56:59
パッケージ削除のシミュレーション。

# apt-get -s --purge remove mysql-server-5.1

Purg mysql-server-5.1
Conf mysql-server-5.5
Conf mysql-server

これでいけそう。
[t] 2014-03-08 10:57:44
「dpkg: 依存関係の問題により mysql-server の設定ができません:
mysql-server は以下に依存 (depends) します: mysql-server-5.5 ...しかし:
パッケージ mysql-server-5.5 はまだ設定されていません」
[t] 2014-03-08 10:59:23
改めて # apt-get install mysql-server でインストール。また、 MySQL の root のパスワード設定画面に。インストールできたぽい。
[t] 2014-03-08 11:01:59
きれいな MySQL に。

# dpkg -l | grep mysql-server
ii mysql-server
ii mysql-server-5.5
ii mysql-server-core-5.5
[t] 2014-03-08 11:02:14
設定ファイルを戻して、 MySQL を起動・・・

「Starting MySQL database server: mysqld . . . . . . . . . . . . . . failed!」

(ノД`)シクシク
[t] 2014-03-08 11:05:42
/var/log/syslog を見ると、
「#007/usr/bin/mysqladmin: connect to server at 'localhost' failed」
[t] 2014-03-08 11:11:19
「error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'」
[t] 2014-03-08 11:11:23
「Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!」
[t] 2014-03-08 11:11:35
mysql のプロセスは動いてないので、 /var/run/mysqld/mysqld.sock を削除・・・

「rm: `/var/run/mysqld/mysqld.sock' を削除できません: そのようなファイルやディレクトリはありません」

って、あれっ?
[t] 2014-03-08 11:14:38
もっかい # /etc/init.d/mysql start して、

「Starting MySQL database server: mysqld . . . . . . . . . . . . . . failed!」

おぉっと。。。
[t] 2014-03-08 11:15:39
/var/log/syslog をよく見たらちゃんと他にもエラーが出ていた。これをつぶしていくか。。
[t] 2014-03-08 11:20:36
「[ERROR] /usr/sbin/mysqld: unknown variable 'default-character-set=utf8'」

[mysqld] セクションから default-character-set=utf8 を削除。
[t] 2014-03-08 11:23:31
MySQL 起動したー ヽ(=´▽`=)ノ
[t] 2014-03-08 11:24:10
そういや apt-get purge しちゃったけど MySQL のデータも消えてるのかな。。
[t] 2014-03-08 11:24:36
apt-get purge remove しても MySQL のデータは消えてなかった ヽ(=´▽`=)ノ わざわざバックアップからインポートしなくて済んだ。
[t] 2014-03-08 11:26:13
さて、いちばんこわい shutdown -r now で再起動。これで Linux カーネルも入れ替わる。
[t] 2014-03-08 11:31:17
294日ぶりの再起動かな。 /md2 のチェックが 9.3% から進まなくて((((;゚Д゚))))ガクガクブルブル
[t] 2014-03-08 11:34:14
あー、進んだ。よかった。。。
[t] 2014-03-08 11:34:32
58%まできた
[t] 2014-03-08 11:41:45
68%の時点でなんかエラーでまくり(´Д` )
[t] 2014-03-08 11:51:17
こんなときに宅内Wi-Fiルータに繋がらない(´Д` )
[t] 2014-03-08 11:51:44
宅内 Wi-Fi ルーターふっかつ。。。
[t] 2014-03-08 11:54:00
再起動完了。

$ uname -mrsv
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64
[t] 2014-03-08 11:54:19
Tomcat さん起動せず。

# /etc/init.d/tomcat6 start
[FAIL] no JDK found - please set JAVA_HOME ... failed!
[t] 2014-03-08 11:59:09
/usr/lib/jvm/default-java -> java-1.6.0-openjdk-amd64 だけど、 java-1.6.0-openjdk はあるけど amd64 は無し。
[t] 2014-03-08 12:04:27
あれっ?と思ったけど過去の記録を見るとJREだけインストールしてたみたい。

# dpkg -l | grep jdk
ii openjdk-6-jre-headless:amd64
ii openjdk-6-jre-lib
rc sun-java6-jdk
[t] 2014-03-08 12:07:35
「Java ランタイム、または Java 互換の開発キットを示しています。amd64 では、当該開発キットは openjdk-6-jdk です」

Debian -- wheezy の default-jdk パッケージに関する詳細 https://packages.debian.org/ja/wheezy/default-jdk
[t] 2014-03-08 12:13:31
OpenJDK 7 がデフォルトじゃないけど、いちおう存在してる。

Debian -- wheezy の openjdk-7-jdk パッケージに関する詳細 https://packages.debian.org/ja/wheezy/openjdk-7-jdk
[t] 2014-03-08 12:15:21
/etc/default/tomcat6 に JAVA_HOME=/usr/lib/jvm/java-6-openjdk 記述

# /etc/init.d/tomcat6 start
[ ok ] Starting Tomcat servlet engine: tomcat6.
[t] 2014-03-08 12:19:37
Tomcat と MySQL は復活したぽい。Ruby まわりがまだいまいちっぽいな。。
[t] 2014-03-08 12:22:10
Ruby が 1.9 に自動で上がってた。

# ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
[t] 2014-03-08 12:22:56
Wheezy にもまだ Ruby 1.8 は残っているみたいなので、まずはこっちをインストールしてみる。 / Debian -- wheezy の ruby1.8 パッケージに関する詳細 https://packages.debian.org/ja/wheezy/ruby1.8
[t] 2014-03-08 12:24:51
binmode がどーのこーのでエラーになってたから Ruby 1.8 から 1.9 になった影響ぽい。
[t] 2014-03-08 12:26:00
wheezy の Ruby のデフォルトは Ruby 1.9.3 になってる。 / Debian -- wheezy の ruby パッケージに関する詳細 https://packages.debian.org/wheezy/ruby
[t] 2014-03-08 12:28:42
# aptitude install ruby-switch
[t] 2014-03-08 12:29:58
# ruby-switch --list
ruby1.8
ruby1.9.1
[t] 2014-03-08 12:30:09
# ruby-switch --set ruby1.8
[t] 2014-03-08 12:31:41
update-alternatives: /usr/bin/ruby (ruby) を提供するために 手動モード で /usr/bin/ruby1.8 を使います
[t] 2014-03-08 12:31:51
update-alternatives: /usr/bin/gem (gem) を提供するために 手動モード で /usr/bin/gem1.8 を使います
[t] 2014-03-08 12:31:54
Ruby 1.8 へ切り替え完了。

# ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [x86_64-linux]
[t] 2014-03-08 12:32:09
OpenJDK 7 とか Ruby 1.9 とかも導入したいところだけど、まずはエラーログでも眺めて細かいところをつぶしていくかな。
[t] 2014-03-08 12:37:40
とりあえず Debian squeeze から wheezy へのアップグレード完了 \(^o^)/
[t] 2014-03-08 12:38:35

アップグレードを終えて

いちばん心配していたミラーリング RAID 1 設定について何も問題が起きなくてよかった。
参考 ⇒ [ヅ] Debian squeeze + RAID1 + GRUB2 (grub-pc) (2012-03-23)

もうひとつ心配していた MySQL のアップグレードも思ったよりラクに終わったのでよかったε-(´∀`*)

Java, Tomcat, Ruby のバージョンアップについてはまた落ち着いてからやろうと思う。

参考資料

tags: debian linux

Posted by NI-Lab. (@nilab)