自宅サーバ:DVDドライブ故障か!?

家でもMondo Resqueを試してみようとこの4日間くらい四苦八苦していたのだが、ようやくエラーなしでisoイメージが取れた。その前は、isoイメージではなく、ノートPCのDVD-Rに直でバックアップを取ろうと一生懸命だったのだけど、全然駄目だったので、isoをMacにDLしてDVD-Rに焼いて、リストアしてみようと思ってノートPCのDVDドライブに入れてみたら、うんともすんとも言わずにCentOSが起動してしまった。。。

あれ?そういえばドライブがメディアが回転するキュイーンという音もしない。
やっとそこに気付いた。そこで、CentOSをインストールしてみたCDを入れてみたが、結果は同じく、キュイーンという音がしない。これはつまり、、、DVDドライブがお亡くなりになった…?マジかよ〜!!これでただのサーバになってしまった。まあ、ノートPCを裏返しにして起動しっぱなしにしたり、裏返しのままメディアを入れたりしてたから、変に圧力がかかってぽしゃったのかもしれん。でも裏返しにして起動してないと、放熱されなくてファンが回りまくってうるさいんですわ。CLEVOのD420Sという機種。マウスコンピュータで買ったんですが、ノートPCなのに、ファンがあまりにも爆音でうるさすぎる代物。

ちなみにisoイメージはWidowsマシンで起動したら、ちゃんとMondo Rescueの起動画面が出てきたので、問題なさそう。もちろん、何もせずに終了させる。

これにまったく気付かずに、4日間も費やしてしまった。
はぁ〜、バックアップ先をUSBに変更しようかな〜。


CentOS:Mondo ResqueによるP2Pリストア(実験中)

会社で使っているRedMine,Subversion用のサーバを今より高機能のサーバに移設してもよいよという許可が下りたので、それを楽にするためにMondo Rescueを使ってみることにした。Mondo Resqueは様々なデバイスにバックアップを取ることが可能、かつ、フルバックアップ可能で、しかもハードウェア環境に依存せずにサーバを移動させることができるということだった!ここに惚れた!

インストールについては、日を改めて書くとして、今は、P2P(Physical to Physical)リストアが成功したので、その方法を刻む。

■移動元のサーバ構成
Pen4 1.4G
メモリ 512MB
HDD 40GB

■移動先のサーバ構成
PenD 2.0G
メモリ 2GB
HDD 500GB

【参考URL】
Mondo Rescueを使ってXenServerの仮想ホストへ

KnoppixなどのCDブートLinuxで、移動先サーバのHDDを初期化する。

fdisk /dev/sda
----以下 fdiskコマンド----
Command (m for help): n
Command action: p
Partition number (1-4): 1
First cylinder : enter
Last cylinder: +256M

Command (m for help): n
Command action: p
Partition number (1-4): 2
First cylinder : enter
Last cylinder: enter

Command (m for help): t
Partition number (1-4): 2
Hex Code: 8e

Command (m for help): a
Partition number (1-4): 1

Command (m for help): p
# 構成を確認

Command (m for help): w
----ここまで----

パーティションの作成ができたので、次はLVMで論理ボリュームを作成する。
ボリュームグループ名は、移動元のボリュームグループ名にしておく。

# 物理ボリュームの作成
pvcreate /dev/sda2
pvdisplay /dev/sda2

# ボリュームグループの作成
vgcreate VolGroup00 /dev/sda2
vgdisplay

# 論理ボリュームの作成
lvcreate -L 38912m -n LogVol00 VolGroup00
lvcreate -L 2048m -n LogVol01 VolGroup00
lvdisplay /dev/VolGroup00/LogVol00
lvdisplay /dev/VolGroup00/LogVol01

# 各パーティションのフォーマット
mkfs.ext3 -j /dev/sda1
mkfs.ext3 -j /dev/VolGroup00/LogVol00
mkswap /dev/VolGroup00/LogVol01

以上が、Knoppixでの作業。

次に、mondoarchiveコマンドで作成されたisoファイルをDVDに焼いて、移動先サーバをDVDでブートする。
boot:と表示されたところで、

interactive ramdisk_blocksize=1024 quiet textonly

で起動させる。(別に、expertでも大丈夫だと思うけど。)

DVDからリストアを選択。
mountlistの書き換えを行う。
移動元がhdaだったので、移動先のsdaに書き換えを行う。

Device                    Mountpoint   Format   Size(MB)
/dev/sda2                 lvm          lvm        0
/dev/VolGroup00/LogVol00  /            ext3       0
/dev/sda1                 /boot        ext3       0
/dev/VolGroup00/LogVol01   swap        swap       0
---

Are you sure want to save your mountlist and continue?: yes

Do you want to erase and partition your hard drivers?: no

Do you want to format your hard drivers?: no

Do you want to restore all of your data?: yes

Initiarize the boot loader?: yes

Did you change the mountlist?: yes

# あと何種類かあったが、思い出せない…
# multipath.confを修正しろとか。でも、何も書き換えずにすぐq!で終了。
# mkinitrd -f -v initrd-2.6.x.y.img 2.6.x.yみたいなのをしろとかあった。

# fstabで書き換え
vi /etc/fstab
LABEL=/boot → /dev/sda1

# grubのパスを変える
grub-install --recheck /dev/sda
grub-install /dev/sda

cd /boot
mkinitrd -f -v initrd-2.6.18.164.6.1.el5.centos.plus.img 2.6.18.164.6.1.el5.centos.plus

# 再起動。-fがないと再起動しなかったので、-fを付けた。
reboot -f

走り書きで書いたが、こんな感じだった。
うまくP2Pでサーバの移設ができたっぽい。ハードウェア構造が全く異なるのに、OSが動いて感動。実際は、grubのあたりでいろいろとトラブったんで、すごく感動した。
今回は実験だったので、本番移設はまだだが、この経験を生かしたい。


WordPress:検索条件にプラグインのデータも含ませる

WordPressでプラグインにて作成したテーブルも検索条件に含めたいと思っていたのだが、方法がわかったので記載する。最初は、検索したというフックがあるのかな〜と思っていろいろ探していたのだが、そんなものは見当たらず。

そしたらありましたよ!本家に書いてありました。

キーワード検索プラグインテーブル

// 仮想プラグインhogeです
array_filter('posts_join', 'hoge_search_join');
array_filter('posts_where', 'hoge_search_where');
function hoge_search_join($join){
  global $wpdb, $hoge_db; // $hoge_dbはプラグイン用dbクラス
  if(is_search()){ // 検索のときのみテーブルを連結する
    $join .= " LEFT JOIN {$hoge_db->table} ON " . $wpdb->posts . ".ID = " . $hoge_db->table . ".post_id ";
  }
  return $join;
}

function hoge_search_where($where){
  global $wpdb, $hoge_db;
  if(is_search()){ // 検索のときのみ検索条件を追加する
    $where = preg_replace(
      "/\(\s*{$wpdb->posts}.post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
      "({$wpdb->posts}.post_title LIKE \\1) OR "
      ."({$hoge_db->table}.title LIKE \\1) OR "
      ."({$hoge_db->table}.description LIKE \\1) OR "
      ."({$hoge_db->table}.summary LIKE \\1) OR "
      ."({$hoge_db->table}.note LIKE \\1)", 
      $where );
  }
  return $where;
}

検索フックではなく(というかそんなの存在しない!)、is_search()メソッドで、検索かどうかをチェックするんか〜。
勉強になった!!


WordPress:管理画面で自作プラグインのjavascript読み込み

いやー、知らなかったー。こんなフックがあったんだな〜。
自作プラグインが管理画面用の場合、フック名admin_enqueue_scriptsというのがあった。
使い方わからんかったんだけど、以下のサイトを参考にしたらできた。
http://lesterchan.net/wordpress/2009/01/26/loading-javascript-in-footer-in-wordpress-28/

// 架空のhogeプラグイン内のphpファイル

// 管理画面なら関数hoge_script_adminを呼び出す
add_action('admin_enqueue_scripts', 'hoge_script_admin');

function hoge_script_admin($hook_suffix){
  // CSS,JSを読み込みたいページを配列に持たせる。ここでは新規投稿、編集画面
  $post_pages = array('post.php', 'post-new.php');
  if(in_array($hook_suffix, $post_pages)){
    /**
     * @param string ユニークなハンドル名
     * @param string 読み込みたいCSSファイルのパス
     * @param mixed? 依存するCSSライブラリ?
     * @param string バージョン
     * @param string メディアタイプ
     */
    wp_enqueue_style('hoge', plugins_url('hoge/css/hoge.css'), false, '1.0', 'all');
    /**
     * @param string ユニークなハンドル名
     * @param string 読み込みたいJSファイルのパス
     * @param array 依存するJSライブラリのハンドル
     * @param string バージョン
     * @param boolean falseならヘッダーで読み込み trueならフッターで読み込み
     */
    wp_enqueue_script('hoge', plugins_url('hoge/js/hoge_admin.js'), array('prototype'), '1.0', false);
  }
}

こうすることで、既にWordPress側で準備しているJSライブラリを使うことができる。プラグイン側で独自にライブラリを準備すると同じライブラリを読み込んだりすることがある。その影響で誤動作や、処理が重たくなったりする。しかしこれを使えば多重読み込みによる誤動作も発生しなくなるだろうし、なにより軽いはず。

いや〜、知らんかったっす…。WordPress 2.8からかな?


CentOS:yumでImageMagick2をインストール

RedMineでRMagickの使用可能状態が×になっていたので、RMagickをインストールするためにImageMagickをインストールすることにした。そうしたら、ImageMagickではなく、ImageMagick2をインストールしたほうがよさそうだという情報を得た。

yumのリポジトリにremiとepelを追加する。

wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
rpm -Uvh epel-release-5-3.noarch.rpm
wget http://rpms.famillecollet.com/el5.i386/remi-release-5-6.el5.remi.noarch.rpm
rpm -Uvh remi-release-5-6.el5.remi.noarch.rpm

remiのenabledを1にしておく

vi /etc/yum.repos.d/remi.repo
enabled=1

ImageMagick2とRMagickをインストールする。

yum -y install ImageMagick2 ImageMagick2-devel
gem install rmagick

ちなみに、この状態でyumでupdateをしたら、phpのバージョンが5.3になった。
まぁ、5.3って使ったことないけど、そのままにしてみるか。