マルチサイト環境のWordPressで、モバイル用プラグイン「WP touch」を1.9.8に更新すると、サイトネットワーク管理がエラーで使えなくなることがあるようです。
私のWordPressでは、Fatal error: Call to undefined function wp_get_current_user() in …/wp-includes/capabilities.phpというエラーが出ました。

管理画面が使えなくなるのでプラグインの無効化もできず、直すには手動でWP touchを消す必要があります。
私はwp-content/plugins/wptouchの名前を変えて対処しました。

何かを更新する際は、本当に必要かを考えて慎重に行いましょう。

Windowsで作られた日本語名のファイルを含んだzipファイルは、Linuxのunzipでは解凍できないことがあるようです。
私の場合は、「Invalid or incomplete multibyte or wide character」と怒られ、unzip(UnZip 6.00 of 20 April 2009)ではどうにもなりませんでした。

こんなときには7za(p7zip)を使うと、とりあえず解凍はできるようです。
yumでもp7zipでパッケージが見つかります。

ファイル名をちゃんと復元できなくてもいいなら、unzipをソースからどうこうしてCP-932をうんたらするよりはお手軽かと思います。
出てきたファイル名が見た目かなり壊れているので、何か変なことになったりしないかちょっと不安は残りますが。

毎日1回の単純バックアップでは、1日放置すると障害でもうダメになったものをバックアップし、バックアップもアウトになる可能性があります。

世代管理があれば、そういったものは諦めて古いもので復旧できるので安心です。

 

ということで、rsyncのバックアップスクリプトをパワーアップさせてみました。

オプション–compare-destを使って世代管理を導入、ただのインクリメンタルじゃ面白くないのでdumpライクなハノイの塔シーケンスを採用しました。

レベル0(フルバックアップ)は手動でやることにして、こんなかんじにしました。

1a -> 3 -> 2 -> 5 -> 4 -> 7 -> 6 -> 9 -> 8

1b -> 3 -> 2 -> 5 -> 4 -> 7 -> 6 -> 9 -> 8 ->1aに戻る

 

以下、実装の話。

ソースをのせてバグっていたら危なすぎるので、考え方だけ。

 

■バックアップレベル管理

ファイルにハノイの塔シーケンスでレベルをずらっと書いておき、バックアップのたびに先頭にあるレベルを使います。

使ったら最後に移動させてローテーションさせます。

 

■–compare-destの指定

–compare-destは、指定したディレクトリにすでに同じものがバックアップされているかチェックしてくれるオプションです。

これを使って世代管理をします。

似たようなオプションに、同じものがあったらローカルコピーする–copy-dest、コピーではなくハードリンクを作る–link-destがあります。

 

ハノイの塔シーケンスを組むには、–compare-destを複数指定できるrsyncのバージョン2.6.4以降が必要です。

2.6.4以降であれば、複数書くと前から順番にチェックしてくれます。

例えばレベル3の時は、こんな感じで自分より低いレベルのディレクトリをチェックします。

rsync うんたらかんたら \

–compare-dest=/backup/2/dir/ –compare-dest=/backup/1a/dir/ –compare-dest=/backup/0/dir/ \

vps:/dir/ /backup/3/dir/

こうすれば、vps:/dir/をバックアップ元として、すでに同じものがないか2 -> 1a -> 0の順番でチェックしてくれます。

どこかにあればそのファイルは無視、見つからなければ3配下にバックアップされ、差分バックアップとなります。

 

今回レベル1を1aと1bの2セットにしました。

レベル1はどっちのディレクトリを見ればいいかは、バックアップレベル管理のファイルを見ます。

ファイルの後ろにあるほうが現在のサイクルで使っているレベル1なので、後ろにあるものを使います。

 

 

これでうっかり何かやっちゃっても安心。

お名前.comのVPS(KVM)はHDDがRAID10らしいですが、借り物のサーバに障害時のバックアップを任せっきりにするのは怖すぎます。

ということで主な設定や日々更新されるデータなどを、毎日深夜にrsyncでローカルの旧サーバにコピーするようにしました。

 

ここで大事なのが、サーバの回線は同居人と100Mbpsを共有ってところです。

深夜とはいえ限界まで帯域を食いつぶすのもよくないかなと思い、rsyncオプションの–bwlimitを使って帯域制限をかけてみました。

データ量的に1Mbps程度あれば間に合いそうなので、–bwlimit 128にしてみました。

 

なお、このオプションに指定する数値の単位はKB/secであってKbpsではありません。

4096で4Mbpsに制限したつもりなのに、実は32Mbpsになってましたという間違いがよく起こりそうです。

 

ここ、次のテストに出ますので覚えておいてください。

 

昨日dgmu.infoのネームサーバアドレスを新アドレスに切り替えました。

これで新しい情報が伝われば移転完了のはずだったのですが・・・。

 

新サーバのDNS設定にCNAMEを多用したことが原因なのか、設定の書き方が悪かったのか、おかしなことになってしまったようです。

あらかじめ新アドレスに向けてあったwwwが旧アドレスに戻ってしまうという状況。

 

新旧の設定はこんなかんじです。

nsがネームサーバ、wwwがwebサーバ。

新サーバ

ns IN A 新アドレス
www IN CNAME ns.dgmu.info.

旧サーバ

ns IN A 旧アドレス
www IN A 新アドレス

 

予定では、

・ns.dgmu.infoのIPアドレスが 旧サーバに向いているうちは旧サーバが答えてwwwは新アドレス

・新サーバに向けばnsが新アドレスになっているのでwwwもnsのCNAMEで新アドレス

となるはずでした。

 

しかし実際は設定が混ざってしまったようで、wwwは古いnsのCNAME扱いになり、旧アドレスに戻ってしまいました。

そんな動きをするとは思いませんでした。やってみないと分からないことってありますね。

 

稼働中のドメインを別のIPアドレスに移転するときは、新旧のDNS設定が混ざっても矛盾が起きないように気をつける必要があるみたいです。

 

Posted in DNS.

WordPressを動かすとApacheがメモリを食いつぶす“でApacheのMPMをpreforkに変更しました。

あれから1週間経ちましたので、現在のApacheのメモリ消費状況を載せてみます。

MaxRequestsPerChildは100で設定しています。

40MB~50MB使っているプロセスが10個なので、合計600MB程度で見積もっていればよさそうです。

どっちかといえば、clamdやspamdのほうが目立っています。

これらの定期的な再起動を考えたほうがいいかもしれません。

 

Linuxのパッケージ管理に使われるyumコマンド。

コマンド名でyum install/searchしてみて出てこない場合、そのコマンドが入っているパッケージを探すwhatprovidesが使えます。

 

例:whoisコマンド

とりあえずinstallしてみる
# yum install whois
...
No package whois available.
Error: Nothing to do

 

見当たらないのでwhatprovidesでコマンドがありそうなパスを指定して探す
# yum whatprovides '*/bin/whois'
...
jwhois-4.0-19.el6.x86_64 : Internet whois/nicname client
Repo : base
Matched from:
Filename : /usr/bin/whois

 

whoisはjwhoisの中にありました。

この場合searchすれば出てきますけどネ。

まだ稼働して2週間も経っていないこのサーバですが、logwatchからのレポートにメールアカウントを探るアタックがありました。

——————— vpopmail Begin ————————

No Such User Found:
aiden@v157-7-129-206.myvps.jp – 1 Time(s)
alexander@v157-7-129-206.myvps.jp – 1 Time(s)
benjamin@v157-7-129-206.myvps.jp – 1 Time(s)
ethan@v157-7-129-206.myvps.jp – 1 Time(s)
jack@v157-7-129-206.myvps.jp – 1 Time(s)
jackson@v157-7-129-206.myvps.jp – 1 Time(s)
jacob@v157-7-129-206.myvps.jp – 1 Time(s)
james@v157-7-129-206.myvps.jp – 1 Time(s)
jayden@v157-7-129-206.myvps.jp – 1 Time(s)
liam@v157-7-129-206.myvps.jp – 1 Time(s)
logan@v157-7-129-206.myvps.jp – 1 Time(s)
lucas@v157-7-129-206.myvps.jp – 1 Time(s)
mason@v157-7-129-206.myvps.jp – 1 Time(s)
matthew@v157-7-129-206.myvps.jp – 1 Time(s)
noah@v157-7-129-206.myvps.jp – 1 Time(s)
ryan@v157-7-129-206.myvps.jp – 1 Time(s)
william@v157-7-129-206.myvps.jp – 1 Time(s)

———————- vpopmail End ————————-

/var/log/maillogの該当ログを確認。

Aug 26 22:31:38 v157-7-129-206 vpopmail[9547]: vchkpw-smtp: vpopmail user not found aiden@v157-7-129-206.myvps.jp:174.142.222.3

 

放置していると面倒なことになりそうなので、Swatchを入れて監視・ブロックすることにしました。

手順はこちらを参考にしました。

ログ監視ツール導入(SWATCH) – CentOSで自宅サーバー構築

 

このサーバではPerlのモジュールが足りないらしく、/var/log/swatch/swatch.logにこんなエラーが出ました。

Can't locate File/Tail.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /tmp/.swatch_script.11953 line 90.
BEGIN failed--compilation aborted at /tmp/.swatch_script.11953 line 90.

 

あとはatコマンドもないようなので一緒にインストール。

# yum install at perl-File-Tail

で解決。

 

/etc/profileには、bashの環境変数やPATHなどのデフォルト設定が書かれています。

データベースや開発用言語の設定など、共通で使いそうなものはここに書くと楽になります。

 

デフォルトのbashの場合、共通で読み込まれるファイルはこうなっています。

ログイン時に1回:/etc/profile

シェルを起動するたび:/etc/bashrc

ログアウト時:/etc/bash_logout

 

cshの場合など、ここに詳しい情報があります。
Linux/環境変数の設定 – Linux UPK

RedHat系では拡張されてさらに便利になっていますね。

 

もう全ユーザーの設定を書き換えて回らなくてもいいんだよ!

 

お名前.comのVPS(KVM)は、サーバーNaviからブラウザ上でコンソールをいじれるようになっています。

そろそろ無料期間が終わろうかというところですが、いつの間にかブラウザ上のコンソールが動かなくなっているようです。

設定をいじっている間に大事なところをなんかしちゃったかなぁ・・・。

 

実用上はputtyなどのターミナルソフトからも同じことができるようになっているので、ブラウザからできなくなっても問題なさそうです。

個人的には元々ブラウザで操作するつもりはないですし、放置でいいかなぁと考えてマス。

 

大丈夫だ、問題ない。

Posted in VPS.