ひっきぃのメモ帳

趣味で作るプラモデル製作の過程と作品、日々の資格取得へ向けての活動、Apple中心のIT関連ネタを書いています。

VineLinux5.2からVineLinux6.1へアップグレードする

ここのところ、自宅WebサーバがDoS攻撃らしいものを受けて困っていました。
VineLinux5.2 を使用していて、Webサーバはapache2.2.14。
これはバージョンがちょっと古く、DoS攻撃に対する脆弱性があるらしいです。


CPUの利用率も常に80%以上。ネットワーク帯域も限界まで使われていました。


少なくてもapacheのバージョンアップは必須でしょう。
VineLinux5.2はサポートも終了し、apacheも2.2.14が最新パッケージとのこと。
apacheのソースから自分でバージョンアップするか、VineLinux6.1へアップグレードしてapacheを最新にするかの選択です。


今回は他のソフトウェアのバージョンアップも兼ねて、VineLinux6.1へのアップグレードをすることにしました。


作業内容のメモです。
今回取り組んだのは以下の項目。

  • VineLinux6.1のダウンロードと起動用USBメモリの作成
  • VineLinux6.1のアップグレード
  • apacheが起動しなくなった問題の解消
  • MySQLへの接続に関する不具合の解消
  • PHP5のセッションが保存されない不具合の解消
  • phpMyAdminの最新版のインストール


VineLinux6.1のダウンロードと起動用USBメモリの作成

ここに紹介されている適当な場所からダウンロードします。http://vinelinux.org/download.html
USBに起動ディスクを作るなら、Vine-6.1/IMAGES/Vine61-DVD-i686.isoがよいです。


このISOイメージから、起動用のUSBメモリを作ります。
今回はMacで作ることにしました。(Winでも作れると思いますが、自宅で稼働しているのがMacしか無いので)


参考にした元記事はこちらです。http://d.hatena.ne.jp/nextremejp/20120511/1336705507


作業ディレクトリにダウンロードしたISOファイルを置きます。
以下のコマンドでimgに変換します。

$ hdiutil convert Vine61-DVD-i686.iso format UDRW -o Vine61-DVD-i686.dmg


マウントされているUSBメモリをアンマウントします。
デバイス名はdfコマンドでだいたい分かります。

$ diskutil unmount /dev/disk1


USBメモリに書き込みます。

$dd if=Vine61-DVD-i686.dmg of=/dev/rdisk1 bs=1m


USBメモリのイジェクト。

$ diskutil eject /dev/disk1

これでVineLinuxアップグレード用のUSBメモリが完成です。


VineLinux6.1のアップグレード
USBメモリから起動すると、新規インストールかアップグレードの選択ができます。
今回はVineLinux5.2が既に稼働中なので、アップグレードでVine6.1へ更新します。


途中で、今入っているのはi386だけどi686だと互換性が無い場合もある、みたいなメッセージが出ます。
無視して進んで、問題なくアップグレードできました。


apacheが起動しなくなった問題の解消

ほぼ問題無く動作するようですが、肝心のapacheが起動しなくなっていました。
どうやらまだ更新されていないものがあるようです。一部DVDには収録されてないのかもしれません。

$ apt-get update
$ apt-get upgrade

とすると、なにやらパッケージの依存関係でエラーが出てきます。
エラーメッセージの中に--fix-brokenを試せとありますので、その通りに以下のコマンドを実行します。

$apt-get upgrade --fix-broken

ここでほぼ全てのパッケージのインストールが完了して、apacheも起動するようになりました。
バージョンも2.2.23になりました。


MySQLへの接続に関する不具合の解消
apache2は無事起動まで漕ぎ着けました。
ところがMySQLを使った自作システムが動作しません。
さらにphpMyAdminにもログインできません。


ソケットを使った通信が出来ていないようです。
/etc/my.cnf には

socket = /var/lib/mysql/mysql.sock

という設定がありますが、/etc/php5/php.iniの設定では設定が空欄でした。

mysql.default_socket = /var/lib/mysql/mysql.sock
mysqli.default_socket = /var/lib/mysql/mysql.sock

として、apacheを再起動します。


ここまでで、phpMyAdminにはログインできるようになりました。
少し、表示がおかしいので後で考える事にします。


自作システムの方はまだ動作しないようです。
実行時のエラーを見ると、MySQL4からMySQL5で認証の仕組みが少し変わったようで、古いバージョンから引き継いだユーザはパスワードの再作成が必要のようです。


phpMyAdminはまだ挙動不審だったので、コマンドで操作することにしました。
一旦アカウントを削除しました。

DELETE FROM mysql.user WHERE user='ユーザ名';

再び、アカウントを作成します。

GRANT ALL PRIVILEGES ON *.* TO ユーザ名 IDENTIFIED BY 'パスワード' WITH GRANT OPTION;

念のため、パスワードを再設定しました。

SET PASSWORD FOR ユーザ名@"ホスト名"=password('変更後のパスワード');

メッセージの通り、パスワードの再設定だけでも良いかもしれません。


これで、MySQLへの接続は無事に行われるようになりました。


PHP5のセッションが保存されない不具合の解消
それでも、まだシステムとしては動作していません。
どうもセッション情報が渡されていないようです。

設定を色々見直しましたが、問題あるように思えませんでした。

考える事数時間、セッション情報を保存するフォルダのアクセス権の問題でした。

session.save_path = /var/php5/session

となっています。ここにapacheのユーザーでアクセスできなければセッションが書き込めません。
apacheは nobody ユーザーで起動しています。
/var/php5/session に 777 を与えました。(良いのだろうか)

$ chmod 777 /var/php5/session

これでようやくシステムとしても動作し始めました。


phpMyAdminの最新版のインストール
最後に挙動不振だった phpMyAdmin を更新します。
きっと PHPMySQLのバージョンが上がって対応できなくなったのでしょう。

今使っているバージョンは2.9.1です。
安定板の最新は3.5.7ですね。http://www.phpmyadmin.net/home_page/downloads.php


これはダウンロードして展開するだけなので特に問題無く動き始めました。


おわりに
アップグレード作戦はなんとか終了しました。
当初の目的であるDoS攻撃回避が出来たのかどうかは、数日間様子を見る必要があります。

  • ネットワーク負荷


日々snmp+mrtgで記録しているネットワーク負荷です。
月曜日に異常な負荷が発生し、火曜日も負荷があがりかけています。
火曜日は気づいた段階で、apacheを停止してからは正常に落ち着いています。
木曜日からapacheも運用開始していますが、今の所異常はありません。

  • CPU負荷


こちらも、ネットワーク異常に合わせて負荷が上がっています。
木曜日から比較的負荷が高いようですが、これはVineLinux6.1が稼働中の時間帯です。
定常的になにか処理しているんでしょうか。体感的には異常は感じません。