中途半端にMySQL 5.6が入ってRedmineが動かなくなった

Debian7にてsslの問題修正などをアップデートするためにパッケージの更新をしていたところRedmineが動かなくなっていた。

Unicornを実行すると以下のようなエラーが出力されている。

Incorrect MySQL client library version! This gem was compiled for 5.5.35 but the client library is 5.6.17

mysqlもアップデートされていたけどちゃんと見ていなかった。調べてみると面倒なことになっている。

$ sudo dpkg -l | grep mysql
ii  libdbd-mysql-perl                  4.021-1+b1                    amd64        Perl5 database interface to the MySQL database
ii  libmysqlclient-dev                 5.6.17-1~dotdeb.1             amd64        MySQL database development files
rc  libmysqlclient16                   5.1.66-0+squeeze1             amd64        MySQL database client library
ii  libmysqlclient18:amd64             5.6.17-1~dotdeb.1             amd64        MySQL database client library
ii  mysql-client                       5.5.35+dfsg-0+wheezy1         all          MySQL database client (metapackage depending on the latest version)
ii  mysql-client-5.5                   5.5.35+dfsg-0+wheezy1         amd64        MySQL database client binaries
ii  mysql-common                       5.6.17-1~dotdeb.1             all          MySQL database common files, e.g. /etc/mysql/my.cnf
ii  mysql-server                       5.5.35+dfsg-0+wheezy1         all          MySQL database server (metapackage depending on the latest version)
rc  mysql-server-5.1                   5.1.66-0+squeeze1             amd64        MySQL database server binaries and system database setup
ii  mysql-server-5.5                   5.5.35+dfsg-0+wheezy1         amd64        MySQL database server binaries and system database setup
ii  mysql-server-core-5.5              5.5.35+dfsg-0+wheezy1         amd64        MySQL database server binaries
ii  php5-mysql                         5.5.11-1~dotdeb.1             amd64        MySQL module for php5

mysqlは5.5が入っているが、開発用ライブラリはdotdebの5.6が入ってしまっている。dotdebはNginxやPHPの新しいバージョンをリリースしているリポジトリ。(紛らわしいがphp5-mysqlが5.5なのはPHPの現行最新版が5.5.11なため)

mysqlパッケージを検索するとdotdebがmysql-server-5.6を公開しているようなので5.6にあげてしまうことにした。

mysql-*-5.5mysql-*-5.6は別パッケージでmysql-*-5.6を入れようとしてもうまくアップグレードされないようなので、5.5を削除してから5.6を入れるみようとした。すると、そもそもmysql-clientmysql-serverのバージョンもdotdebの5.6になっていたので、mysql-*-5.5を削除しようとすると5.6が推薦されてインストールされた。apt-get upgrade mysql-client mysql-serverで良かったのかもしれない。

sudo apt-get remove mysql-client-5.5 mysql-server-5.5
...
The following packages will be REMOVED:
  mysql-client-5.5 mysql-server-5.5
The following NEW packages will be installed:
  mysql-client-5.6 mysql-server-5.6
The following packages will be upgraded:
  mysql-client mysql-server
2 upgraded, 2 newly installed, 2 to remove and 0 not upgraded.

次にgemのmysql2パッケージをビルドしなおすためにパッケージを入れなおした。

$ rm -rf vendor/bundle
$ bundle install --path=vendor/bundle
...
Installing mysql2 (0.3.15) 

ちなみに今さくらのVPSの石狩リージョンの方に移行しようとしていてそちらはChef-Soloでセットアップしてみると綺麗に5.6になっていたのでやはりmysql-client mysql-serverをアップグレードすればよかったのかもしれない。

mysql.rb
# default[:mysql][:packages] = %w(mysql-client mysql-server mysql-common mytop libmysqlclient-dev)
node[:mysql][:packages].each do |pkg|
  package pkg do
    action :install
  end
end
$ sudo dpkg -l | grep mysql
ii  libdbd-mysql-perl                  4.021-1+b1                    amd64        Perl5 database interface to the MySQL database
ii  libmysqlclient-dev                 5.6.17-1~dotdeb.1             amd64        MySQL database development files
ii  libmysqlclient18:amd64             5.6.17-1~dotdeb.1             amd64        MySQL database client library
ii  mysql-client                       5.6.17-1~dotdeb.1             all          MySQL database client (metapackage depending on the latest version)
ii  mysql-client-5.6                   5.6.17-1~dotdeb.1             amd64        MySQL database client binaries
ii  mysql-client-core-5.6              5.6.17-1~dotdeb.1             amd64        MySQL database core client binaries
ii  mysql-common                       5.6.17-1~dotdeb.1             all          MySQL database common files, e.g. /etc/mysql/my.cnf
ii  mysql-server                       5.6.17-1~dotdeb.1             all          MySQL database server (metapackage depending on the latest version)
ii  mysql-server-5.6                   5.6.17-1~dotdeb.1             amd64        MySQL database server binaries and system database setup
ii  mysql-server-core-5.6              5.6.17-1~dotdeb.1             amd64        MySQL database server binaries
ii  php5-mysql                         5.5.11-1~dotdeb.1             amd64        MySQL module for php5

Redmineは無事動いた。

さくらのVPSでDebianを使いChef Soloでセットアップするまでにやったこと

今まで自宅サーバやさくらのVPSでのサーバのセットアップはEvernoteにメモを書いていたけど、Chef Soloを使い始めてセットアップメモのほとんどを粛々とChefのレシピに書き直してる。最近はRaspberry Pi(Raspbian)の設定更新もChef Soloでやってた。

これまではセットアップ済みのマシンをChef Soloで設定更新する運用が中心だった。Vagrant環境ではある程度構築はしてるけど、VagrantのBoxはChefを始められるくらいの設定はしてあるので本当に1からというと少し違う。企業だと最低限のセットアップをしたOSイメージから始めたりするだろうし。

自前のISOイメージを作るのも面倒だし、さくらのVPSでカスタムOSインストールからChef Soloを始めるまでの最低限のセットアップしたことを参考までに備忘録として残しておく。

1. カスタムOSインストール

さくらのVPSでカスタムOSインストールでDebianを選ぶとVNCクライアントが起動しインストーラ画面が表示される。

カスタムインストールを実行する前にさくらのVPSのネットワーク設定が表示されるのでメモしておく。IPアドレス、ネットマスク、ゲートウェイ、ネームサーバ1あたり。

  • キーボード設定 (Japanese)
  • ネットワーク設定
  • ルートパスワードの設定
  • 初期ユーザ名、パスワード設定
  • パーティション設定 All files in one partition (recommended for new users)

この辺はさっさと終わる。Linuxのインストールもずいぶんと楽になったものだ。

インストールが終わったらVPSコントロールパネルからサーバを起動する。(なぜかインストール後に仮想マシンが起動していなかった)

sshのインストール

VPSコントロールパネルからリモートコンソール(VNCクライアント)を起動する。リモートコンソールでログイン後 su コマンドでルートになる。VNCクライアントから使い慣れたターミナルを使いたいのでまずsshをインストールする。

apt-get install ssh

vimのインストール

sshをインストールしたら取り急ぎパスワード認証を使って、ターミナルなど使い慣れたクライアントでリモート接続する。

ログイン後 su コマンドでルートになり、まず設定ファイルの編集のため vim を入れる(nanoに慣れてなくて効率が悪いので)。

apt-get install vim
update-alternatives --set editor /usr/bin/vim.tiny

sudoのセットアップ

Chefの実行のためsudoをパスワードなしで実行できるようにする。

apt-get install sudo
visudo
# -> username       ALL=(ALL:ALL) NOPASSWD:ALL # を追加する

鍵設定

Chef Solo(knife-solo)からパスワード無しでリモート接続するため、ローカルマシンの公開鍵をauthorized_keysに追記する。

exitでrootからユーザに戻って以下を実行。

cd ~
mkdir .ssh
touch .ssh/authorized_keys
chmod 0700 .ssh
chmod 0600 .ssh/authorized_keys
vi .ssh/authorized_keys
# -> ローカルの公開鍵( ~/.ssh/id_rsa.pub など)を書く

ポート変更などsshの細かい設定すらもすぐにChef Soloでセットアップするのでここまでが最低限のセットアップ。

感想

vimの設定は余計にしてもここまではChefで設定できないので手動でやるしかない。メモってしまえば大したことのない内容な感じ。設定を間違えてリモートログインできなくなるとまたVNCコンソールに頼らないといけなくなるのでChef Soloでsshやネットワーク周りを設定するときは必ずsshのログインを接続した状態にしておく。

余談

Chefのレシピも公開したいところだけど、アンチパターンにある巨大リポジトリを作ってしまっていて、sshd_configやら.sshやらhosts_allowやら見せたくない設定があって公開が難しい。細かくcookbookに分離すればいいのだけど面倒でやっていない。

何か見せたくないファイルのフィルタやテキストの置換などを使って別のGitリポジトリかGistかを作成できないだろうか。Gruntのタスクを駆使すればできそうだが、こんな特殊な需要を持っているのは自分だけかな。

さくらのVPSに入れているDebianをWheezyにアップデートした

MondoRescueと格闘していたのはSqueeze -> Wheezyをローカルでテストが目的。

幾つか問題はあったけどアップグレードできたのでさくらVPS上でも更新。基本的にドキュメントのDebian 6.0 (squeeze) からのアップグレード通りに実行。バックアップはMondoRescueでまるまる取ったった。

さくらのVPSは拠点が石狩で最近は大阪を選べるようになったと聞く。つまり従来の契約の人は石狩を使っているはず大阪リージョンだった。北海道の大学のミラーサーバはないかとおもって調べていたらさくらインターネットがミラーサーバー公開している様子! traceroute してみたら石狩っぽいので http://debian-mirror.sakura.ne.jp/debian/ を今回からつかうことに。
* 参考: 2013年02月15日 さくらインターネット Debian ミラー提供開始
* 参考: データ転送速度が高いかもしれないサーバ (近くのミラーサイト) を自動的に探すには

とイキってたけど使っていたVPSは大阪リージョンでした・・・(´・ω・`)

dotdebの日本のミラーサーバもあるようなので最終的に、/etc/apt/sources.list は以下のように設定。

# Debian 7 wheezy
deb http://debian-mirror.sakura.ne.jp/debian wheezy main contrib non-free
deb-src http://debian-mirror.sakura.ne.jp/debian wheezy main contrib non-free

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

deb http://debian-mirror.sakura.ne.jp/debian wheezy-updates main contrib non-free
deb-src http://debian-mirror.sakura.ne.jp/debian wheezy-updates main contrib non-free

# dotdeb.org
deb http://mirrors.teraren.com/dotdeb/ wheezy all
deb-src http://mirrors.teraren.com/dotdeb/ wheezy all
deb http://mirrors.teraren.com/dotdeb/ wheezy-php55 all
deb-src http://mirrors.teraren.com/dotdeb/ wheezy-php55 all

トラブル

MySQLのアップデートでエラー

dpkg: error processing /var/cache/apt/archives/mysql-client-5.5_5.5.31+dfsg-0+wheezy1_amd64.deb (--unpack):
 trying to overwrite '/usr/bin/mysqlcheck', which is also in package mysql-client-core-5.5 5.5.31-1~dotdeb.0
configured to not write apport reports
                                      dpkg-deb: subprocess paste killed by signal (Broken pipe)
 /var/cache/apt/archives/mysql-client-5.5_5.5.31+dfsg-0+wheezy1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Mise à jour Squeeze vers Wheezy : MySQL DotDeb
How to reinstall broken mysql package

あたりを見ると再インストールした方が良いそうなのでそうした。

apt-get -f install -o Dpkg::Options::=”–force-overwrite”
apt-get remove mysql-client-core-5.5
apt-get dist-upgrade

mod_dav_svn.soでコケる

Debian Bug report logs – #705464 mod_dav_svn.so: undefined symbol: svn_repos__post_commit_error_str

apache2: Syntax error on line 203 of /etc/apache2/apache2.conf: Syntax error on line 2 of /etc/apache2/mods-enabled/dav_svn.load: Cannot load /usr/lib/apache2/modules/mod_dav_svn.so into server: /usr/lib/apache2/modules/mod_dav_svn.so: undefined symbol: svn_repos__post_commit_error_str
Action 'configtest' failed.

どうもコケるタイミングがおかしいので、

a2dismod authz_svn dav_svn

a2dissiteで一旦モジュールと使っているサイトを無効にして apt-get dist-upgrade の後に有効にしたらうまく行った。

というか、SVNもう使ってないし秘密のソースコードでもないのでSourceForgeかどっかに移行してSVN停めよう・・・

Ruby環境がおかしくなった

update-alternatives: error: alternative link /usr/bin/gem is already managed by ruby.

そもそもrbenvに置き換えていたので問題を解決する気になれず、ruby関連モジュールは apt-get purge で消した。

nginx-fullに移行

ディストリビューションのrubyを削除したことも関連しているのだけど、wheezyからdotdebのnginx-passengerは提供されなくなった模様。途中でnginxが消えてしまったので nginx-full をインストール。

nginx-extraにngx-pagespeedが含まれていたので気を惹かれたけど、一度に多くのことをやると切り分けが難しくなるので今回はnginx-fullをつかうことにした。

Wheezyにアップデートした動機

そもそもMondoRescueと格闘している間になぜWheezyにアップデートしようとするのか忘れていた。OSのアップデートを延期していたのは、以前PHPをアップデートしたらWordPressブログが動かなくなった苦い思い出があったから。一切動かないならまだしも、しばらくは動いていてphp-fpmが応答不能になり、再起動するとまたしばらくは動くという調査しづらい状態なのでそれからディストリビューションのアップデート怠っていた。まったく根拠はないがAPCキャッシュを疑っていた。

先日のPHPカンファレンス2013の「PHP 5.5ネーティブキャッシュの話」でPHP5.5でOpcacheが標準搭載されたことPHP5.4/5.5とAPCの組み合わせが不安定なことを聞いて、dotdebでwheezy向けのPHP5.5が配布されていたのでOSごとアップデートしてみることにした。

根拠はないし、WordPress+PHP5.5で問題が起きるかもしれないがしばらく様子を見てみる。

MondoRescue素敵

アップデートで起きたトラブルは全部MondoRescueでローカルのVMware仮想環境で経験できたので、さくらのVPSでの更新は穏やかに対処できた。設定ファイルのマージも事前にまとめられるし。理想としてはさくらのVPS側で仮想環境をコピーして使えたら楽なのだけど、GlobalIPの数や料金的など難しいのだろうな。新規にもう一つ契約して移行することも考えたけどセットアップはもちろん契約すら面倒だからMondoRescueを選んだが新たな技を取得して満足。

MondoRescueでさくらのVPSのDebianをVMwareの仮想マシンに持ってきた

MondoRescueでさくらのVPSをVMwareの仮想マシンにコピーしたいの続きっす。成功したと言っていいのやら・・・とりあえず起動はしたので後人のためにメモを残しときます。

今回の環境

  • さくらのVPS 2G
  • Debian 6.0.7
  • MondoRescue v3.0.4-r3177
  • VMware Fusion 5.0.3

Mondo Rescueについて

  • Linux上で使い自らのシステム全体をバックアップ、リストアするツール
  • Debianにはaptのソースリストがある
  • Mondo Rescueでのバックアップは mondoarchive コマンド, -i オプションでISOファイルとしてバックアップができる
  • -i オプションはデフォルトだとCDなので、DVDなら -s 4200m などDVDサイズ程度を指定する
  • VMwareだとISOファイルを順に選択することでディスクの入れ替えはできるがメディアに焼くことも考えるとDVDサイズが良いだろう
  • バックアップ中のファイル変更は監視されないのでリストアを確認するまでは気を抜けない
  • さくらのVPSはISOイメージでのインストールも対応しているのでさくらのVPSのバックアップとしても活用できるらしい

Mondo Rescueのインストール

/etc/apt/sources.list に下記を追加

deb ftp://ftp.mondorescue.org/debian 6.0 contrib
deb-src ftp://ftp.mondorescue.org/debian 6.0 contrib

mondoでインストールできる。

apt-get update
apt-get install mondo

root directoryがなんちゃらと言われたがデフォルトのallを設定。

W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
W: mdadm: no arrays defined in configuration file.

は無視。

バックアップするDebianではあまりディスク容量は使っておらず5GB程度しか使っていない様子。というわけでデフォルトの圧縮率で実行してみる。

mondoarchive -Oi -N -s 4200m -p `hostname`-`date '+%Y%m%d'` -d /backup -E /backup

-Oiがisoイメージを生成用、-sがイメージを分割するサイズ、-pがファイルのプレフィックス、-Nがネットワークドライブを無視、-dがバックアップ出力先、-Eがバックアップから除外するディレクトリ。

だいたい20分くらいかかり2.5GBのisoファイルが作成された。scpでローカルにコピー、5分ほどかかった。

ちなみに-Lオプションを使うとbzip2の代わりにlzoで圧縮し、圧縮率は落ちるがバックアップにかかる時間を短縮することができる。ネットのメモを公開している先人達はこのオプションを使っている人が多い。対象が5GBだからと甘く見て今回は使わなかった。(結果20分もかかった)

VMware Fusionにインストール

OS XなのでVMware Fusionをつかう。恐らくVMware Playerでも手順はさほど変わらないはず。

新規に仮想マシンを選択し、isoファイルを選択する。

デフォルトの仮想マシンの設定ではハードディスクがSCSI接続で20GBが初期値になる。さくらのVPS 2Gプラン上でバックアップしたDebian環境ではパーティションはこのようになっていた。特に/bootはパーティションを切っておらず、いつも冗長で使いこなせないので無駄にパーティションを切らなかった気もするが、さくらのVPSでインストールしたらデフォルトがこうなのかもしれない。セットアップ時の記憶がない。

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *           1       25608   205688832   83  Linux
/dev/vda2           25608       26109     4023297    5  Extended
/dev/vda5           25608       26109     4023296   82  Linux swap / Solaris

仮想マシンが起動すると boot: とシェルプロンプトが表示されモードを入力する。nuke(auto)を使ったりexpertを使ったりしたがGRUBのインストールはこけたのであんまり関係ない気がする。nukeで薦めてもディスク情報がが違うのでインタラクティブモードでパーティションのセットアップをさせられる。もともとバックアップが5GB程度だったのでVMwareの仮想マシンの初期の20GBで十分。Swapであるsda5を2GBにして、sda1を17GB程度にしておいた。

次に進むと初期化するか、データを読み込むかと着替えるのでYESで進めていく。ただし、リストア後にOperationSystem not Foundと言われてGRUBが検出されなかった。

expertモードやってみたこと

ディスク情報が違うので /etc/fstab/dev/vda/dev/sda に置き換て UUID 削除、/etc/mtab も同様に置換。

/etc/default/grubGRUB_DISABLE_LINUX_UUID=trueアン コメント。でも grub-install /dev/sdaとかやっても cannot stat `/dev/sda’ と言われてディスクが認識されていない様子。マウントはしてるしリストアしたデータは見えてるんだけど、このあたり詳しくないんでよくわからない。

ちなみにautoモードでやっても起動はできずログはこんな感じ。

Launching: chroot /mnt/RESTORING grub-install /dev/sda
/usr/sbin/grub-probe: warn: disk does not exist, so falling back to partition device /dev/sda1.
/usr/sbin/grub-probe: warn: disk does not exist, so falling back to partition device /dev/sda1.
/usr/sbin/grub-probe: error: cannot stat `/dev/sda'.
grub-install returned 1
Now I'll use grub2-install
chroot: can't execute 'grub2-install': No such file or directory

バックアップ時にブートローダーは指定しなくても自動で検出されると書いてあったけど、ログを見る限り grub-install を探して試して、 grub2-install を探して試して・・・と地道なことをやっている様子。

Linux Rescue モードで修復する

おそらくモジュール関連を見なすべきなのだろうと思いつつ、P2Vならまだしも仮想環境から仮想環境の移行で何故にハードウェアを意識せねばならぬのかと面倒になって、DebianのネットワークインストールCDのisoファイルをダウンロードして、VMwareの仮想マシンからCDブートしてレスキュモードを実行してGRUBのインストールを決行。

あっさりとインストールは成功し、再起動後に無事にGRUBが立ち上がり、選択したDebianが起動した。

起動後の調整

さくらのVPSでわりあててもらったグローバルIPが静的IPで設定されていたのでDHCPに変換。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

/etc/network/interfaces を上記のように変更して再起動後、VMware仮想ネットワーク(NATモードの場合)のIPアドレス(172.16.x.x)になったことを確認し、sshで無事接続。

ブログを表示してみて、昨日のエントリは表示されなかったのでバックアップの状態で動いていることが確認できました。ようやくこれで目的であったOSのアップデートのテストができます。MondoRescueでリストアができるけど起動できない場合は、MondoRescueで頑張るよりも大概用意されているLinuxインストールCDにあるレスキュモードを使うと早いよという話でした。

Minecraft Server Managerでマルチサーバを公開してみる

Minecraft Server Manager 0.8.16 Betaを試した。

Minecraft Server Managerとは

Minecraft Server Managerは本家のWikiで以下のような説明。

  • 動作環境はDebian/Ubuntuをサポート
  • MinecraftやBukkitサーバたちを管理できるスクリプト
  • 定期的にWorld Edit互換のバックアップを作成できる
  • “あと10秒でシャットダウンします”といったメッセージをプレーヤーに通知できる
  • Terminalからゲーム内のコマンド(“say”, “op”, “whitelist”など)が使える
  • すべてのコマンドがTabで補完されるので簡単に学習できる

http://msmhq.com/がサイト。複数のマイクラサーバを管理してコマンドであたらしいマイクラサーバを作成したり、開始したり、停止したりできるサーバ管理者向けのツールっぽい。ちょうどDebianサーバを持っているので1マイクラサーバでもいろいろ便利そうなので使ってみることに。

実際にDebianのサーバで動かしているが、コマンドのテストの多くはローカルの仮想環境にあるUbuntuで行った。

インストール

インストールコマンドだと途中でパッケージの更新(apt-get update; apt-get upgrade)が入るので関係のないソフトウェアも全部最新にさせられることに注意(嫌ならManual Installationをする)。wgetだけは先にsudo apt-get install wgetで入れとく。

$ wget -q http://git.io/Sxpr9g -O /tmp/msm && bash /tmp/msm
MSM INSTALL: Configure installation
Install directory [/opt/msm]: (リターン)
New server user to be created [minecraft]:(リターン)
Complete installation with these values? [y/N]: y(リターン)

上記のデフォルトでは/opt/msmにユーザminecraftでインストールすることになる。パッケージが更新され依存するscreen rsync zipがインストールされる。サイトではRedhutはwget -q http://git.io/lu0ULA -O /tmp/msm && bash /tmp/msmでと書いてあるのでCentOSでも動くのかもしれない。

No directory, logging in with HOME=/,ディレクトリがありません。HOME=/ としてログインしますと警告がうるさいのでminecraftユーザのホームディレクトリを作成しておく。

sudo mkdir /home/minecraft
sudo chown minecraft:minecraft /home/minecraft

コマンド

インストールが成功するとmsm helpを打てといわれる。MSMではすべての操作をmsm xxxxのような形で実行する。

セットアップコマンド

コマンド 説明
server list マイクラサーバを一覧
server create <name> 新しいマイクラサーバの生成
server delete <name> 存在するマイクラサーバの削除
server rename <name> <new-name> 存在するマイクラサーバのリネーム

サーバ管理コマンド

コマンド 説明
<server> start マイクラサーバを起動
<server> stop [now] プレーヤーに警告をしてマイクラサーバを停止、またはいますぐ停止
<server> restart [now] プレーヤーに警告してマイクラサーバを再起動、またはすぐに
<server> status マイクラサーバの起動状態(running/stopped)を見る
<server> connected マイクラサーバに接続しているプレーヤーの一覧
<server> worlds list worldstorageにあるワールドの一覧
<server> worlds load worldstorageにあるワールドのリンクをマイクラサーバディレクトリに作成する
<server> worlds ram <world> 指定したワールドをRAMで上で動かすかDiskかのトグル
<server> worlds todisk RAM上のワールドをディスクに同期する
<server> worlds backup マイクラサーバ持っているすべてのワールドのバックアップを作成する
<server> worlds on|off <world> 指定したワールドをアクティブまたは非アクティブにする、非アクティブなワールドはバックアップされない
<server> logroll ログの縮小化のためマイクラサーバログを移動しgzipでアーカイブする
<server> backup マイクラサーバのディレクトリのバックアップを作る
<server> jar <jargroup> [<file>] マイクラサーバのjarファイルを設定する
<server> console インタラクティブコンソールに接続する、アクセスは制限される
<server> config [<setting> <value>] マイクラサーバを指定の値を設定する、指定しなかった場合は設定の一覧

マイクラサーバゲーム内コマンド

コマンド 説明
<server> wl on|off ホワイトリストチェックの有効・無効
<server> wl add|remove <player> ホワイトリストへプレーヤーを追加または削除する
<server> wl list ホワイトリストにあるプレーヤーの一覧
<server> bl player add|remove <player> プレーヤーをバンまたはバン解除する
<server> bl ip add|remove IPアドレスでバンまたはバン解除する
<server> bl list バンしているプレーヤーとIPアドレスの一覧
<server> op add|remove <player> プレーヤーに管理者権限を与えるまたは取り消す
<server> op list 管理者権限のあるプレーヤーの一覧
<server> gm survival|creative <player> プレーヤーのゲームモードを変更する
<server> kick <player> マイクラサーバーからプレーヤーをキックする
<server> say <message> マイクラサーバ上のすべてのプレーヤーへ(ピンク)メッセージを送る
<server> time set|add <number> マイクラの時刻を設定または追加する(0-24000)
<server> toggledownfall 雨または雪のトグル
<server> give <player> <item> [amount] [data] プレーヤーにアイテムを与える
<server> xp <player> <amount> プレーヤーに経験値を与える、負数なら減らす
<server> save on|off ワールドの変更をファイルに書き込むかの有効・無効
<server> save all 強制的に保存していないワールドの変更をファイルに書き込む
<server> cmd <command> コマンド文字列をマイクラサーバに送る
<server> cmdlog <command> cmdコマンドと同じだが、結果のログ出力を表示する(Ctrl+Cで終了)

Jarコマンド

コマンド 説明
jargroup list jarファイルの一覧
jargroup create <name> <download-url> ダウンロードURLとしてjarグループを生成する
jargroup delete <name> jarグループを削除する
jargroup rename <name> <new-name> jarグループをリネームする
jargroup changeurl <name> <download-url> jarグループのダウンロードURLを変更する
jargroup getlatest <name> jarグループのダウンロードURLから最新のjarファイルをダウンロードする

グローバルコマンド

コマンド 説明
start すべてのアクティブなマイクラサーバを開始する
stop [now] すべての起動中のマイクラサーバを停止する
restart [now] すべてのアクティブなマイクラサーバを再起動する
version Minecraft Server Managerのバージョンを表示する
config MSMで使われている設定の一覧
update [–noinput] MSMのファイルを最新のバージョンに更新する

コマンドから使い方を推測すると複数のマイクラサーバを管理するのでマイクラサーバに名前をつけて、マイクラサーバの名前を指定してコマンドを送ることになる。

またjargroupコマンドがありマイクラサーバと分離されている模様。マイクラサーバをどのjarファイルで生成するのか管理でき、例えばmodを当てたserver.jarを何処かに公開してそれを使って構築したり、あるマイクラサーバは公式のserver.jarから構築するなどの使い方ができると思われる。

サーバの作成と起動

まずは公式のマイクラサーバのminecraft_server.jarをminecraftという名前のjargroupで作成する。(ドキュメントではデフォルトでcraftbukkit、minecraftのjargroupがあるらしいのだが無いと怒られるので作成する)

sudo msm jargroup create minecraft https://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar
sudo msm jargroup create craftbukkit http://dl.bukkit.org/latest-rb/craftbukkit.jar

次にmyserver1というマイクラサーバを作成し、minecraftjargroup、つまり公式のminecraft_server.jarを指定して開始する。

sudo msm server create myserver1
sudo msm myserver1 jar minecraft
sudo msm myserver1 start

以下の情報は今のところ気にしなくていい。

[MSM Info: Assuming 'minecraft/1.3.0' for this server.You should override this value by adding 'msm-version=minecraft/x.x.x' to '/opt/msm/servers/myserver2/server.properties' to make this message go away]

コマンドなどバージョンによって下位互換を取らないといけないときにMSMにminecraft_serverのバージョンを教えてあげないといけないことがある。どうしても気になるならsudo msm myserver1 config msm-version minecraft/1.5.2などを実行する。

マイクラサーバ実行中でも以下のようにしてLinuxのターミナルから管理者権限を与えることができる。

sudo msm myserver1 op add username

2つ目のマイクラサーバを起動してみる。複数のマイクラサーバを公開するにはそれぞれポートを別にしないといけない。

sudo msm server create myserver2
sudo msm myserver2 jar minecraft
sudo msm myserver2 config server-port 25566
sudo msm myserver2 start

デフォルトのポート以外に接続する場合、クライアントは Server Addressに 127.0.0.1:25566 というようにコロンとポート番号を指定する。

マイクラサーバは/opt/msm/servers/myserver2/といったディレクトリにファイルがあるのでMSMを使わないで直接server.propertiesファイルなどの設定を変更することも可能。ファイル階層は以下のようになる。

/opt/msm
`- servers
   `- server_name
      |- world -> /opt/msm/servers/server_name/worldstorage/world
      `- worldstorage/
         |- world/
      |- worldstorage_inactive/
      |- server.jar
      |- server.properties
      |- server.log
      |- ops.txt
      |- white-list.txt
      |- banned-ips.txt
      `- banned-players.txt

ワールドの管理

基本的にMSMでワールドを管理するときにはworldstorageというディレクトリにワールドの実体ファイル(ディレクトリ)を置いてあげないといけない。

最初にマイクラサーバを起動するとworldというディレクトリにワールドを作成されるので、これをに以下のようにしてworldstorage下へ移動しworlds loadコマンドでシンボリックリンクを作成する。

sudo msm myserver1 stop now
cd /opt/msm/servers/myserver1
sudo mv world worldstorage/
sudo msm myserver1 worlds load

バックアップ

これでsudo msm myserver1 worlds backupを実行するとworldstorageにあるワールドのバックアップ(zip)がWORLD_ARCHIVE_PATH(/opt/msm/archives/worlds)に作成されるようになる。

なおworldstorageに複数ワールドがあるとすべてバックアップされる。これは <server\> worlds on\|off <world\> コマンドでアクティブ・非アクティブを切り替えることでアクティブなものだけがバックアップされるようになる。

リストア

リストアのコマンドは今のところないようなのでバックアップファイルから戻す。

sudo msm myserver1 stop now
cd /opt/msm/servers/myserver1/worldstorage
sudo mv world world_org
sudo unzip /opt/msm/archives/worlds/myserver1/world/{日付}.zip
sudo chown -R minecraft:minecraft world 
sudo msm myserver1 start

RAMを使う

ワールドをRAMに置くことでパフォーマンスが期待できる。

デフォルトでは/dev/shm/msmを使うことになっている。/dev/shmにディレクトリがない場合は以下のようにして作っておく。パスは/etc/msm.cnfのRAMDISK_STORAGE_PATHで変更することもできる。

sudo mkdir /dev/shm/msm
sudo chown minecraft /dev/shm/msm
sudo chmod -R 775 /dev/shm/msm

以下のようにサーバ名、ワールド名を指定してRAMに配置する。ワールドのパスを変えるので当然マイクラサーバは止めないといけない。

sudo msm myserver1 stop now
sudo msm myserver1 worlds ram world
sudo msm myserver1 start

ワールドはstopコマンドでサーバを止めたときなどのタイミングでディスクに同期されるので壊されてもいいようなテンポラリなワールドとして使えるわけではない。

マイクラサーバのバージョンアップ

jargroupコマンドで取得したjarファイルを置き換えることで可能。

停止してバックアップを取る。

sudo msm myserver1 stop now
sudo msm myserver1 backup
sudo msm jargroup getlatest minecraft
sudo msm jargroup list

でjarファイルのリストが見れるので日付で使うファイル名をきめて

sudo msm myserver1 jar minecraft 日付-minecraft_server.jar

起動するとバージョンが上がっているはず。

sudo msm myserver1 start

cronの修正

cronで定期的にバックアップ処理が走るのだが出力がメール送信されるので出力をnullにする。/etc/cron.d/msm ファイルを修正する。

02    05  *   *   *   minecraft   /etc/init.d/msm all worlds backup >/dev/null 2>&1
55    04  *   *   *   minecraft   /etc/init.d/msm all logroll >/dev/null 2>&1
*/30  *   *   *   *   minecraft   /etc/init.d/msm all worlds todisk >/dev/null 2>&1
@hourly               minecraft   /etc/init.d/msm start >/dev/null 2>&1

参考: Disable Cron E-mails

まとめ

MSMを使うとscreenを意識しなくていいし、バックアップもコマンド一つで取れるので楽ちん。マルチサーバを一台管理するだけでも便利だと思う。

PHP5.4のアップデートの手順をミスって酷い目にあった

手元の開発環境ではPHP5.4を使っていたが、PHP5.4でパフォーマンスが向上しているからWordPressにも恩恵あるかなと思ってサーバの方も更新してみたら酷い目にあった。

DebianでDotdebを利用していたのでInstructionsを見てPHP54のソースを追加するだけだったのに、DotdebでNginxやMySQL入れていることをすっかり忘れていてPHP54のソースに置き換えてしまった。それでパッケージを更新したら見事にNginxとMySQLが削除されてしまい、サイトにアクセスができない状態になった。

サービスが消えているからログが出力されるわけもないし、NginxがPATHから見つからないので気がついた。それでNginxtとMySQLも入れなおしたんだけどそれでもいろいろハマった。

nginx-extras -> nginx-passenger

Nginxを入れなおしても起動ができない。なぜかpassenger向けのディレクティブ知らんといわれる。passengerはRedmineを動かすために入れていた。

nginx: [emerg] unknown directive "passenger_root" in /etc/nginx/nginx.conf:67
nginx: configuration file /etc/nginx/nginx.conf test failed

パッケージを検索してみるとnginx-passengerというのが追加されていた。どうやらpassenger向けにビルドしたものはnginx-extrasからnginx-passengerに変わったようだ。nginx-passengerに入れ直して起動はできた。

nginxからphp-fpmに接続できず502 Bad Gateway

php-fpmではhttp://127.0.0.1:9000でリスニングしていたつもりだったんだけど設定(/etc/php5/fpm/pool.d/www.conf)を見ていくとunix socket(listen = /var/run/php5-fpm.sock)になっていたので

server unix:/var/run/php5-fpm.sock;

にnginxの設定を変更。php-fpmの設定変えた記憶がないんだけど、デフォルトの設定かディストリビューションの設定ファイル変わったんだろうか。

MySQL 5.5が動かない

MySQLも入れなおしたら5.5になっていてmy.cnfがおかしいとか言われて起動しない。

130127 0:18:13 [ERROR] An old style --language value with language specific part detected: /usr/share/mysql/english/
130127 0:18:13 [ERROR] Use --lc-messages-dir without language specific part instead.

my.cnf.dpkg-distと比較して

language= /usr/share/mysql/englishをlc-messages-dir= /usr/share/mysqlに変更した。

起動しようとするとChecking for tables which need an upgradeとか怒られるので

sudo mysqlcheck --check-upgrade --all-databases --auto-repair -u root -p

を実行して復旧。

PukiWikiが動かない

nginx+php-fpm-mysqlの設定をなんとかしてようやくブログが閲覧できたけど、今度はWordPressブログで使っているPukiWiki for WordPressプラグインが動かない。どうやらPukiWikiにPHP5.4との互換性問題があるようだ。

とりあえずhex2bin関数をif (! function_exists(‘hex2bin’)) {で囲った。

おわりに

今のところは無事動いているようだけど、作業を週末にやってよかった。

Debianでminecraftサーバを立てワールドを公開してみた

minecraftサーバを立ててローカルで作業していたワールドを公開してみたのでそのやり方の紹介。公開といっても誰にでも公開しているというわけではないが。

Windowsでサーバを立てるならMinecraft Japan Wikiのまとめがおすすめ。

minecraft 基本的な話

minecraftについてはこれを見れば雰囲気はつかめるはず。PC版は20ユーロくらい。Xbox 360版、iOS/Android版もあるけどPC版がベスト、というか主流。

minecraftのPC版はjavaで動いているのでクロスプラットフォームで動作する。一人プレイとマルチプレイがありワールドデータを移行することも可能。

Debian/Ubuntuでminecraft_serverを実行する

環境構築

オフィシャルサイトのダウンロードページからマルチプレイのサーバ用にminecraft_server.jarが公開されており、サーバー側でレンダリングすることではないので単にjavaで実行すれば事足りる。Debian 6やUbuntu 12.04ではデフォルトのソースリストからsun-java6を入れられなくなっていてopensdkやoracle-java7を使うことが既定路線となりつつある。とは言え、相性などの問題からまだまだsun-java6を入れることが多いようなのだがセキュリティなどを考えると最新版を使うのがいい気もする。葛藤した挙句余計なトラップにハマりたくないので結局sun-java6をインストールする。

/etc/apt/sources.listに

>deb http://ftp.ja.debian.org/debian/ squeeze main non-free

を追加してsun-java6-jdkをインスコ。コンソールからの操作のためにscreenも入れておく

sudo apt-get update
sudo apt-get install sun-java6-jdk
sudo apt-get install screen

サーバのインストール

インストールというかダウンロードするだけ。ダウンロードページ minecraft_server.jarのリンクを引っ張ってくればよい。 面倒なのでログインユーザのホームディレクトリに管理することにして作業フォルダは~/minecraftとする。

mkdir ~/minecraft
cd ~/minecraft
wget https://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar

実行用スクリプトの作成

Debian 6/Ubuntu 12.04なら.profileで$HOME/binがあればPATHに突っ込んでくれている(つまり新規に$HOME/binを生成した場合は次回ログイン時にPATHが通る)ので~/binに作成する。

mkdir ~/bin
cd ~/bin
vi minecraft-server

で以下内容を保存。

#!/bin/sh
cd ~/minecraft
screen -AmdS minecraft-server java -Xms1024M -Xmx1024M -jar minecraft_server.jar nogui

次にscreen起動用のスクリプト

vi minecraft-console

で以下内容を保存。

#!/bin/sh
screen -r minecraft-server

実行権限をつけたら終わり。

chmod u+x minecraft-server minecraft-console

これでminecraft-serverと打てばサーバを起動、起動中のコンソールにアクセスするにはminecraft-consoleと打てばいい。コンソール実行(screen)から戻るには「Ctrl+A」を押してから「D」を押す。

設定ファイルを書き出すために一回起動して終了させておく。minecraft-serverを実行して、次にminecraft-consoleを実行。コンソールでstopと入力してminecraft-serverを停止させる。これで~/minecraftに幾つかのファイルが作成される。

ワールドデータの転送とminecraft-serverの設定

たとえばNew Worldという名前のワールドデータはWindows 7のC:\Users\ユーザ名\AppData\Roaming\.minecraft\saves\New Worldにあるのでこれをサーバの~/minecraft/New WorldにFTPなどでファイルをコピーすればいい。

次に~/minecraft/server.propertiesを開く。level-name=worldという箇所がワールド名の読み込み部分なのでこれをlevel-name=New Worldにすると持っていたワールドデータでminecraft-serverを起動できる。

あとはops.txtに自分のminecraftユーザ名を入れて管理者になれるようにしておくとよい。

ワールドデータのバックアップ

管理者コマンドに/save-allがあるのだけどバックアップコマンドなのかよくわからなかったので

tar -czf world.`date '+%Y%m'`.tar.gz world

などでワールドデータのフォルダをバックアップしておいたほうが確実だと思われる。

サーバの公開

デフォルトだと誰でもアクセスできるようになっていて世間には破壊者みたいなユーザもいるのでサーバのアドレスをうかつに人に教えたりしない方がいい。ポートを変えたり、ホワイトリスト対応するなどの手段も有効。

DebianでRedmine 1.3.2から2.0に更新する

さくらのVPS 512からさくらのVPS 2Gに移行していろいろ作業している間に Redmineは1.4.xがリリースされ、さらに Rails3向けのRedmine 2.0がリリースされた。

取り残されないうちにRedmine 2.0に更新する。Nginx+Passengerで動かしているがほとんどの作業はコマンドラインからでウェブサーバの違いが手順に影響することはあまりない。

本家サイトの手順にそっていく
http://www.redmine.org/projects/redmine/wiki/RedmineUpgrade

なおCentOS版の更新手順はredmine.jpで公開されている
http://blog.redmine.jp/articles/redmine-2_0-installation_centos/

Step 1 – Check requirements

Redmine 1.3.2の環境でRubyは1.8.7のみ、Railsは 2.3.14、gemは古いという状態。

一方、Redmine 2.0はRubyは1.8.7, 1.9.2, 1.9.3, jruby-1.6.7、Railsは3.2.3が必要。他のパッケージが記載されていないのでよく読んでみると、Redmine 1.4からBundlerに対応し、依存パッケージbundle installでセットアップできるようになったようだ。

さて今回はいろいろあって(後述)、Ruby 1.8.7を継続して使うことにした。Redmineの依存パッケージをインストールしていく。

su
PATH="$PATH:/var/lib/gems/1.8/bin"
gem install bundler
cd /path/to/redmine
bundle install --without development test

gemのバイナリのパスが通してないので面倒なことをしている。

RMagickの依存ライブラリのインストール

RMagickのインストールに失敗したので補足しておく。いままでRMagickはオプションだったし、別に要らないと思ってインストールしていなかった。しかし、bundle installの途中で失敗してストップしてしまい、withoutするのも癪なのでRMagickをインストールしてみる。

apt-cache search magick でそれらしいパッケージを検索し、以下のコマンドを実行。

apt-get install imagemagick
apt-get install libmagickcore-dev
apt-get install libmagickwand-dev

正直なところ3回実行した。最初にCan't install RMagick 2.13.1. Can't find Magick-configというエラーだったので薄々開発モジュールが要りそうだと思っていてimagemagickをインストールしてもMagick-configは入らなかったので続けてlibmagickcore-devをインストール。しかしそれでも Can't install RMagick 2.13.1. Can't find MagickWand.h. というエラーがでたので libmagickwand-dev をインストール。これでRMagickはインストールできた。

Step 2 – Backup

MySQLデータベースだけ。ここからはrootではなく通常ユーザで実行。

mysqldump -u redmine -p redmine > ~/redmine.dump.sql

Step 3 – Perform the upgrade

gitで管理しているので2.0のローカルブランチを作成する。

cd /path/to/redmine
git status
git checkout master
git pull
git pull --tags
git checkout -b redmine/2.0.0 2.0.0

Step 4 – Update the database

mv vendor/plugins/* plugins/ 
rm  config/initializers/session_store.rb
rake generate_secret_token
rake db:migrate RAILS_ENV="production"
rake redmine:plugins:migrate RAILS_ENV=production

1行目について
プラグインのディレクトリが変更されたらしい。(プラグインを使っていなかったので未検証)

2,3行目について
Redmine 1.4からsessionまわりが変わったらしいのだが

rake db:migrate RAILS_ENV=”production”
Please remove config/initializers/session_store.rb and run rake generate_secret_token.

と怒られたので従う。

5行目について

rake db:migrate_plugins RAILS_ENV=production
Note: The rake task db:migrate_plugins has been deprecated, please use the replacement version redmine:plugins:migrate

ということでdb:migrate_pluginsはredmine:plugins:migrateに置き換わった。

プラグインを入れてなかったのでRedmine 2.0とプラグインの互換性についてはなんとも言えない。自作テーマはRedmine 2.0でも問題なさそうだ。

undefined method `log_path’

データベースのマイグレーションを実行しようとすると以下のようなエラーが表示された。

rake db:migrate RAILS_ENV="production"
rake aborted!
undefined method `log_path' for #<Rails::Application::Configuration:0x7f0a75721448>

Configクラスにlog_pathがないので怒られている模様。config/additional_environment.rbに記載していたログのカスタマイズのコードが該当していた。ドキュメントのまま記述していいたのだけど・・・とりあえずコメントアウト。

config/additional_environment.rb
#config.logger = Logger.new(config.log_path)
#config.logger.level = Logger::WARN

本家サイトでも報告されているのでそのうち修正されるか、回避策が提示されるだろう。それまではデフォルトの設定でいく。
undefined method ‘log_path’
install redmine 2.0, when rake generate_secret_token, an error appear..

Step 5 – Clean up

rake tmp:cache:clear
rake tmp:sessions:clear
sudo service nginx restart

Redmineが無事表示できたら、ログインして管理 > 情報からバージョンを確認しておく。
次に 管理 > ルールと権限から新しい権限のチェック。

管理者にて
「チケットをプライベートに設定」
「自分のチケットをプライベートに設定」
「関連するチケットの管理」
チェックが入っていなかった。いつから増えたのかは不明。

Ruby 1.9系のインストール

移行を諦めたRuby 1.9の話。

Debianは1.8系がruby1.8、1.9系がruby1.9.1をそれぞれapt-get installでインストールできる。もともとruby1.9だったのだが問題があってパッケージ名がruby1.9.1になったようで混乱する。apt-cache show ruby1.9.1で以下のように表示される。

Package: ruby1.9.1
Version: 1.9.3.0-2.1

しかし実際いれてみて ruby1.9.1 -vとすると ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux] で1.9.3にならなかった。。

sudo apt-get install ruby1.9.1 ruby1.9.1-dev
# /usr/bin/gem is already managed by gem
# gemは別にmasterで管理されてるよと怒られたので削除
sudo update-alternatives --remove-all gem
sudo update-alternatives --install /usr/bin/ruby ruby /usr/bin/ruby1.8 120\
  --slave /usr/bin/irb ruby-irb /usr/bin/irb1.8\
  --slave /usr/bin/gem ruby-gems /usr/bin/gem1.8 
sudo update-alternatives --install /usr/bin/ruby ruby /usr/bin/ruby1.9.1 150\
  --slave /usr/bin/irb ruby-irb /usr/bin/irb1.9.1\
  --slave /usr/bin/gem ruby-gems /usr/bin/gem1.9.1\
  --slave /usr/bin/rake ruby-rake /usr/bin/rake1.9.1
sudo update-alternatives --config ruby

一応ruby1.9.1には切り替えられるようにはしたが、最新版を使うならRVMから入れた方が良いような気もしている。いずれにせよRedmine以外Rubyアプリケーションは動かしていないので一旦保留にした。

さくらのVPSにApache+MySQLを入れる

プロジェクト管理用にさくらのVPSにdebianを入れてみるの続き。

sshでリモート接続できるようになった。次はsubversion, trac, redmineを使うので、これらを動かすためにapache, mysqlを入れる。なおにsubvesionはDAVで認証するのでapache経由、tracはApache+mod_python, redmineはApache+fastcgi+Ruby(RoR)で動かす。(gitはsshで認証するので関係なし)

Apacheのインストール

1. apacheインストール

trac/redmineに必要なものを入れる。
aptitude -t unstable install apache2 libapache2-mod-python libapache2-mod-fastcgi

2. apache設定の変更

conf.dでいろいろ公開されるのが気に食わないので必要なものだけ公開する。

/etc/apache2/apache2.conf
#Include conf.d/
Include conf.d/charset
Include conf.d/localized-error-pages
Include conf.d/security

使いそうなのを一応有効にしておく。

a2enmod expires
a2enmod headers
a2enmod rewrite
a2enmod auth_digest

再起動して終わり。
/etc/init.d/apache2 restart

MySQLのインストール

1. MySQLインストール

MySQLのインストールとりあえず最初はパスワードは空に。

aptitude -t unstable install mysql-client mysql-server mysql-common mytop libmysqlclient-dev

2. MySQL セキュリティを設定

ここでrootのパスワードを設定して、よけいなものは消す。

/usr/bin/mysql_secure_installation
Set root password? [Y/n] Y
# パスワードを入れる
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

3. MySQLの設定

文字コードをUTF8にしておく。

/etc/mysql/my.cnf
[mysqld]
...
default-character-set = utf8
...
[mysql]
default-character-set = utf8

再起動して終わり。

/etc/init.d/mysql restart

まだなんにもできないが。

etch->lennyに更新

2月にリリースされたdebian 5.0(lenny)に更新しました。

http://www.debian.org/releases/lenny/amd64/release-notes/ch-upgrading.ja.html
を見ながら。でもデータは毎日バックアップしてるんで失敗したらクリーンインストールすればいいかと軽い気持ちで適当に更新。

etchをとりあえず最新にしとく

aptitude update
aptitude upgrade

sources.listをパッケージ取得先をlennyにして再び更新

deb http://ftp.jp.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ lenny main contrib non-free
deb http://ftp.jp.debian.org/debian lenny main contrib non-free
deb http://security.debian.org lenny/updates main contrib non-free
aptitude update

依存状態でapt/aptitudeが消されることもあるらしいのでまず先に更新する

apt-get install apt
aptitude install aptitude

でlennyに更新

aptitude upgrade
aptitude dist-upgrade

何が面倒だったかというと、我が家にはPCディスプレイがない。まぁサーバなので普段はリモートで処理するんだけど。更新中に切断されて再接続できなくなることもあるので、テレビの前にもってきてテレビに表示して更新。更新後はまた玄関に強制送還。