アップグレードする際にちょっと「?」と思ったところもあるのでメモ。
1. データのバックアップする
まずはデータのバックアップをしておきましょう。なんのデータをバックアップするかは人によって異なります。
うちはブログしか動かしてないので、nginx、php、mysql、そしてウェブサイトのデータといったところです。他は最悪、一から設定し直す事になっても別にかまわないので。
2. インストールしてるものを確認する
サードパーティのパッケージ(dotdebとか)を入れている場合、アップグレードの際に削除されたり、いや、それならまだしも、競合を起こしてエラーを起こすことがあります。
そのため、アップグレード前にこれらの非公式なパッケージをアンインストールしておくと安心です。
インストールされているパッケージをリストする
dpkg コマンドで以下のようにインストールされているパッケージを確認できます。「ii」は現在インストールされているパッケージ、「rc」はパッケージは削除されているが設定は残っているものです。
# dpkg -l
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Description
+++-==============-==============-============================================
(中略)
ii eject 2.1.5+deb1+cvs ejects CDs and operates CD-Changers under Li
ii ethtool 1:2.6.34-3 display or change Ethernet device settings
rc exim4 4.72-6+squeeze metapackage to ease Exim MTA (v4) installati
rc exim4-base 4.72-6+squeeze support files for all Exim MTA (v4) packages
(中略)
ii mysql-client-5 5.5.30-1~dotde MySQL database client binaries
ii mysql-client-c 5.5.30-1~dotde MySQL database core client binaries
(後略)
競合しそう or 不要なものを削除する
リストの「Version」の項目をチェックして、非公式のパッケージを探します。
アンインストールは以下のような感じ。apt-get removeでパッケージをアンインストールしても設定は残るので、あとでインストールし直せば、設定が引き継がれます。たぶん。
# apt-get remove mysql-client-5.5
もう使っていない、今後使う予定もないものなら、apt-get pargeで設定ファイルごとアンインストールできます。「rc」となっているものを完全に削除する場合もpurgeで削除します。
うちの場合はdotdebでphp、mysql、nginxを入れていました。mysqlはインストール中にかち合ってエラーを起こすので、あらかじめアンインストールしておくのをオススメします。
3. APTのソースを書き換える
/etc/apt/sources.list を開いて、「squeeze」となっている部分を「wheezy」に書き換えます。
# vim /etc/apt/sources.list
編集後は以下のような感じです。
deb http://ftp.jp.debian.org/debian wheezy main
deb-src http://ftp.jp.debian.org/debian wheezy main
deb http://security.debian.org/ wheezy/updates main
deb-src http://security.debian.org/ wheezy/updates main
deb http://ftp.jp.debian.org/debian wheezy-updates main
deb-src http://ftp.jp.debian.org/debian wheezy-updates main
4. アップグレードする
いよいよ wheezy にアップグレードします。update、upgrade、dist-upgradeの順でコマンドを実行します。
# apt-get update
# apt-get upgrade
# apt-get dist-upgrade
途中で、以下のような画面で停止することがあります。「q」+ enter でまたアップグレードの画面に戻ります。一応、目を通しておきましょう。
apt (0.8.11) unstable; urgency=low
* apt-get install pkg/experimental will now not only switch the
candidate of package pkg to the version from the release experimental
but also of all dependencies of pkg if the current candidate can't
satisfy a versioned dependency.
他にも突然青い画面が出てきて「Modified configuration file」やら「Configuring grub-pc」やら言われますが、「keep the local version currently installed」が最初から反転していると思うので、そのままEnterで大丈夫です。たぶん。
また、「Configuring grub-pc」のところで、「The GRUB boot loader was previously installed to a disk that is no longer present, or whose unique identifier has changed for some reason.」とか出てきて、
[ ] /dev/vda
[ ] /dev/vda1
となっていた場合は、「/dev/vda」にチェックを入れてアップグレードを続行します。スペースキーでチェックが入ります。
設定を残すか聞かれた場合
途中で何回か以下のように設定をどうするか聞かれることがありますが、設定を引き継ぎたい場合はN、そうでない場合はYを入力すればOKです。たぶん。
Configuration file `/etc/mysql/my.cnf'
==> Modified (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
The default action is to keep your current version.
*** my.cnf (Y/I/N/O/D/Z) [default=N] ?
パッケージのデフォルトの設定は、設定ファイルと同じ場所に「設定ファイル名 + dist」とかで保存されるので、あとでdiffして、場合によってはマージしてあげてください。
エラーで止まった場合
非公式なパッケージがインストールされている場合、以下のようにエラーでインストールが止まることがあります。
Unpacking replacement mysql-client-5.5 ...
dpkg: error processing /var/cache/apt/archives/mysql-client-5.5_5.5.30+dfsg-1.1_amd64.deb (--unpack):
trying to overwrite '/usr/share/man/man1/mysqlcheck.1.gz', which is also in package mysql-client-core-5.5 5.5.30-1~dotdeb.0
configured to not write apport reports
dpkg-deb: subprocess paste killed by signal (Broken pipe)
(中略)
Errors were encountered while processing:
/var/cache/apt/archives/mysql-client-5.5_5.5.30+dfsg-1.1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
この場合は、競合を起こしているパッケージ(上の場合はmysql-client-core-5.5)をアンインストールしてから、再度アップデートを試みます。
apt-get remove だと依存関係のあるパッケージも削除されますが、dpkgを使うと強制的にそのパッケージのみ削除できます。どちらを使うかは状況に応じて。apt-getでだめならdpkgとか。
# dpkg -r --force-depends パッケージ名
アンインストールしたものは、アップグレード後にインストールし直しましょう。
5. アップグレード後の作業
/etc/debian_version を確認して「7.0」になっていれば、アップグレード完了です。
cat /etc/debian_version
インストールされているもの・されていないものを確認する
dpkgを使って、アップグレード前と同様にインストールされたものを確認します。rcになっているものは削除するか、代替のものをインストールします。
アップグレードのためにアンインストールしたパッケージもインストールし直します。
うちの場合、dotdebの「php5-apc」がなかったので、その代わりに公式パッケージの「php-apc」を入れる必要がありました。ただ、最近dotdebも更新されたみたいなので、今は普通に入るかも。
PATHの設定
sudoでルートになったときにPATHが通らなくなっていたので、visudoでPATHを追記しました。
Defaults secure_path = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
設定をミスるとsudoでルートになれなくなったりするので、別のターミナルを開いて、そちらで、ちゃんとsudoになることが出来てパスも通っていることを確認しましょう。
参考
- 第4章 Debian 6.0 (squeeze) からのアップグレード
- さくらVPSのDebianを squeeze から wheezy にアップデートした。 – ハピネスチンカスエンジニア
- http://www.dotdeb.org/