MovableTypeからWordPressへ引っ越し

今回、Movable Type Pro 5.2.6からWordpress 4.0への移行過程をメモしておきます。

まず、MovableTypeのエクスポートを行ってみる・・・。ん、何かが足りてない。そうなんです、パーマリンクとかかサックリなくなっています。このままじゃいけないというので検索してみた、ありました。

下記の操作の前に、必ずバックアップを取ってください。

MovableTypeからWordPressへの完全移行方法

どうやら/lib/MT/ImportExport.pmを変更するらしい。

[perl highlight=”2,3,4″]
DATE: <$MTEntryDate format="%m/%d/%Y %I:%M:%S %p"$><MTEntryIfTagged include_private="1">
PERMALINK: <$MTEntryPermalink$>
TAGS: <MTEntryTags include_private="1" glue=","><$MTTagName quote="1"$></MTEntryTags></MTEntryIfTagged>
ID: <$MTEntryID$>
[/perl]

上記の「DATE:」という記述を探し、その下に「PERMALINK」「EntryIfTagged」「ID」の行を追加します。

後はエクスポートです。

エクスポートしたファイルを眺めていると、あれ、パーマリンクの「post-1」などが「post_1」に変わっているではありませんか。これじゃ困るので置換しましょう。

テキストエディタなどで「BASENAME: post_」を「BASENAME: post-」に変換し保存します。安全のため、ファイル名を変更して保存します。

下準備はできたので、Wordpress側のインポートのプログラムを編集しましょう。

WordPress 3.0にMovable Typeのタグをインポートする

まるっと転載させて頂きます。

wp-content/movabletype-importer配下にある、movabletype-importer.php編集。

[php highlight=”27,28,29,30″]
function save_post(&$post, &$comments, &$pings, &$tags) {
  $post = get_object_vars($post);
  $post = add_magic_quotes($post);
  $post = (object) $post;

  if ( $post_id = post_exists($post->post_title, ”, $post->post_date) ) {
    echo ‘<li>’;
    printf(__(‘Post <em>%s</em> already exists.’, ‘movabletype-importer’), stripslashes($post->post_title));
  } else {
    echo ‘<li>’;
    printf(__(‘Importing post <em>%s</em>…’, ‘movabletype-importer’), stripslashes($post->post_title));

    if ( ” != trim( $post->extended ) )
      $post->post_content .= "n<!–more–>n$post->extended";

    $post->post_author = $this->checkauthor($post->post_author); //just so that if a post already exists, new users are not created by checkauthor
    $post_id = wp_insert_post($post);
    if ( is_wp_error( $post_id ) )
      return $post_id;

    // Add categories.
    if ( 0 != count($post->categories) ) {
      wp_create_categories($post->categories, $post_id);
    }

    // Add tags or keywords
    if ( 1 < strlen($tags) ) {
      // Keywords exist.
      printf(‘<br />’.__(‘Adding tags <em>%s</em>…’, ‘movabletype-importer’), stripslashes($tags));
      wp_add_post_tags($post_id, $tags);
    }
  }
  …中略…
}
[/php]

[php highlight=”14,34,42,51,52″]
function process_posts() {
global $wpdb;

$handle = $this->fopen($this->file, ‘r’);
if ( $handle == null )
return false;

$context = ”;
$post = new StdClass();
$comment = new StdClass();
$comments = array();
$ping = new StdClass();
$pings = array();
$tags = ”;

echo "<div class=’wrap’><ol>";

while ( $line = $this->fgets($handle) ) {
$line = trim($line);

if ( ‘—–‘ == $line ) {
// Finishing a multi-line field
if ( ‘comment’ == $context ) {
$comments[] = $comment;
$comment = new StdClass();
} else if ( ‘ping’ == $context ) {
$pings[] = $ping;
$ping = new StdClass();
}
$context = ”;
} else if ( ‘——–‘ == $line ) {
// Finishing a post.
$context = ”;
$result = $this->save_post($post, $comments, $pings, $tags);
if ( is_wp_error( $result ) )
return $result;
$post = new StdClass;
$comment = new StdClass();
$ping = new StdClass();
$comments = array();
$pings = array();
$tags = ”;
} else if ( ‘BODY:’ == $line ) {

…中略…

} else if ( 0 === strpos($line, "CATEGORY:") ) {
$category = trim( substr($line, strlen("CATEGORY:")) );
if ( ” != $category )
$post->categories[] = $category;
} else if ( 0 === strpos($line, "TAGS:") ) {
$tags = trim( substr($line, strlen("TAGS:")) );
} else if ( 0 === strpos($line, "PRIMARY CATEGORY:") ) {
$category = trim( substr($line, strlen("PRIMARY CATEGORY:")) );
if ( ” != $category )
$post->categories[] = $category;
…中略…
}
}
…中略…
}
[/php]

 

上記に加えて

[php highlight=”8,9,10,11,12,13″]
function process_posts() {
global $wpdb;

…中略…

} else if ( ‘COMMENT:’ == $line ) {

$context = ‘comment’;
} else if ( ‘PING:’ == $line ) {
$context = ‘ping’;
} else if ( 0 === strpos($line, "PERMALINK:") ) {
$value = trim( substr($line, strlen("PERMALINK:")) );
$tmpvalue = strrchr($value,"/");
$post->post_name = substr($tmpvalue, 0, strpos($tmpvalue, "."));
} else if ( 0 === strpos($line, "TAGS:") ) {
ns/movabletype-importer$tags = trim( substr($line, strlen("TAGS:")) );
} else if ( 0 === strpos($line, ‘AUTHOR:’) ) {
[/php]

これでインポートの準備は完了。

MovableTypeが出力したhtmlファイル(PHP化されている方はphp)ファイルを削除して、それトップページを見てみましょう。

ん~いい感じだけど、パーマリンクが・・・・・・エクスポートしたはずなのに・・・。

んで、Wordpressの管理画面を開いて、[設定][パーマリンクの設定]を開きます。

私の場合は年月で記事を吐き出していたので、カスタム構造を選択し

/archives/%year%/%monthnum%/%postname%.php

な感じです。無事にパーマリンクを引き継げました。

あとは、MovableTypeで管理していた画像たちWordpressのメディアに登録し、Movabletypeの痕跡を消してしまいましょう。

MT形式からWordPressへ移行した際に画像をインポートするプラグイン

ダウンロードして、FTPなどでアップし、プラグインを有効化し、実行、停止、削除、これだけです。

記事に埋め込まれているURLもしっかりと書き換えてくれる優れもの。

確認後は、バッサリ消してしまいます。

このブログのURLの中身は.htaccessとindex.php、favicon.ico、そしてメディアとして登録されたuploadsのみです。

だらだら書きましたが、これで全てです。

SXW2200が厳密なのか

今までBUFFALO Giga対応 スイッチングHub ブラック LSW4-GT-8NS/BKというごく安価なスイッチングハブを使っていたわけですが、今朝は止めに目が覚めたので、ヤマハ ブロードバンドVoIPルーター NVR500から直接ヤマハ スマートL2スイッチ 24ポート SWX2200-24Gへ接続してみた。

なぜか一部のポートが100Mbpsでしか認識しない。どうも同一種類のケーブルでカテゴリー5なので当然と言えば当然なんですが。

“SXW2200が厳密なのか” の続きを読む

やっとメモリー到着

GT110bにCPU X3470、メモリー5GB、お古の1TB+500MB。

やっと注文していたメモリーが本日到着し、無事12GBと私のメインパソコンと同じになりました。

やぁ~、まだ恩恵を受けるのは相方だけですけど。

“やっとメモリー到着” の続きを読む

GT110bを通常に戻し

なんとなくGT110bのRAIDのジャンパーピンを戻してみた。

-----------------------------------------------------------------------
CrystalDiskMark 3.0.1 (C) 2007-2010 hiyohiyo
Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]
Sequential Read :    64.595 MB/s
Sequential Write :    60.527 MB/s
Random Read 512KB :    31.038 MB/s
Random Write 512KB :    35.957 MB/s
Random Read 4KB (QD=1) :     0.459 MB/s [   112.1 IOPS]
Random Write 4KB (QD=1) :     1.042 MB/s [   254.3 IOPS]
Random Read 4KB (QD=32) :     0.469 MB/s [   114.6 IOPS]
Random Write 4KB (QD=32) :     1.031 MB/s [   251.8 IOPS]
Test : 1000 MB [C: 14.6% (11.7/79.9 GB)] (x1)
Date : 2011/02/21 23:11:27
OS : Windows 7  [6.1 Build 7600] (x86)

やっぱり、誤差範囲ですね。GT110b(6)の様にsimple.mapに追記しないと意味ないんかな。

“GT110bを通常に戻し” の続きを読む

いろいろ買うと書いたものの

いろいろサーバーに欲しいものはあるけど、貧乏な私には取り敢えずこれで運用かな。

我慢モードで

  • USBメモリー16GB
  • 増設メモリ4GBx2
  • Xeon X3470
  • ワットメータ付テーブルタップ
  • USB AM/FMチューナー

本格的なNASの導入は夏が近づいた頃になるかな。今度の仕事、単価もそれほどでもないし、サーバーばかりにお金をつぎ込めないし。相方と子供とルパンがいるからな。

仕事も拘束時間があれなんで、平日は軽く書くか無、土日にESXi関連の記事でも書ければなぁとメモ的に。多分、殆どどっかのサイトからの情報になるだろうけどw

意外とそういう情報書いているサイトが閉鎖されちゃうことって多いから、転載メモになっちゃうかな。出来ればまとめてウェブページで整理したいな。

環境が揃えば、晴れてVMWare Serverから解放される。FTPサーバーも24時間稼働に戻り、VPN用のサーバーも動かし、このサイトの移動テストを兼ねてMOSを運用してみようかと。

数か月後にでもGT110bを2台とHDDを買えれば、本格的になるんだけど、場所の確保できるかな・・・。

これで、相方にも***にも迷惑を掛けず、メインパソコンのドライバー入れ替えとか出来るな。

さぁ、初期段階の構成で電気代がどうなることか・・・。

まあ、私が仕事中にメインのパソコンが動いていなければ、めっさエコなんだろうけど。

今日も本調子じゃないので間違った注文をしたら困るので、明日以降で調子のいい時に一気に注文しよっと。

自宅サーバー本格運用に向けての追加購入

まず、HDDの保護ですがGT110b(6) – 訳は訊かないを参考にUSBメモリーへインストールしてオンボードのRAIDを認識できる様にし1.5TBx2で初期運用を始めようと思います。

ESXi 4.1からUSBへ直接インストールできるので適当な16GBのUSBメモリーにインストールしようかと。

多分、RAIDドライブを認識しないので、上記の通り

まずオンボードRAIDを有効にして、oem.tgzのsimple.mapに8086:3b25 1458:1000 storage ahci.o を足すだけ。
但しRAID構成は検知せず単体構成として認識される。

要はオンボードRAID有効でAHCI動作している「Intel Corporation 5 Series/3400 Series Chipset SATA RAID Controller」をahci.oドライバで動作するように明示しただけなんですね。

取り敢えず初期運用には十分だろう。

これで近日中に購入するものが決まった。

  • USBメモリー16GB
  • 増設メモリ2GBx2(合計8GB)
  • Xeon x3470
  • Western Digitalの1.5TBx2
  • ワットメータ付テーブルタップ

なんか調べてたら2TBじゃRAIDがダメらしいので1.5TBで我慢。

揃ったら、内臓DVDドライブを外し少しエコ。CPU変えてもオンボードのビデオが使えれば、増設したVGAカードも外す。

x3470が意外と消費するので心配だけど、まあ、当面は20%とかの稼働しかしないと想定している。

外向けは、取り合えずFTPのみなので、当面はDDNSで運用。WWWとか始めたら固定IPへ移行かな。

にしてもGT100bってコストパフォーマンス良すぎですよ。下手なディスクトップよりいいかも。あくまでそれなりの知識があればですが。

あ、USB-AMラジオも買わなきゃ、e-machinesが引退できる。元々、伊集院光の深夜のバカ力からしか録音してないから、その間だけ動いているので、電力消費を抑える効果はほとんどないかな。待機電力は減るか。

あぁ~L2のスイッチが欲しくなってきた。

早くFTPサーバーをESXiへ移動したいな。メインのパソコンではVMWare Playerで済むようになるし。

だんだん、私のパソコンのスペックとESXiのスペックが似ていてあれ?なんだけど、まあいいか。

NVR500は初心者には不向き

某掲示板でも?な事を書き込みしてる人が多いな。

初心者にNVR500を勧めちゃダメでしょw

ブラウジングする程度ならWEBで設定できるからいいけど、普通の安価なルーターなら1つ設定すれば親切に関連する情報も設定してくれるから初心者でも問題ないけど、NVR500を使うんだとそれなりの知識が無いと厳しいだろう。

挙句の果てに安価なやつより安定してるとか安易に勧めるなよ。確かに安価な奴は不具合が多いし、その大半は不具合修正が無いまま販売終了し、以降のサポートも終わっちゃうのは確かだけどね。

“NVR500は初心者には不向き” の続きを読む

やっぱり安心なNVR500

昨日の夜、寝る直前にルーターをYAMAHA NVR500に切り替えました。

ちゃんと設定してなかったので、FTPサーバーに入れるけど・・・って状態が・・・汗;

午前中にちゃんと設定して復旧。

やあ、きちんと設定しなくても何となく動いちゃうルーターを少しの期間とはいえ使っていると、「あっ!」の連発。早く思い出さなきゃ。

“やっぱり安心なNVR500” の続きを読む

NVR500の設定を開始

昨日買ってきたNVR500ですが本日よりセットアップ開始です。

何せ、朝から買い物して、病院行って、秋葉原と中年にはハードな行動だったので、ReadyNAS NV+のディスク交換で精一杯。こちらも、1台をeSATAに繋いでコピーし、そののちに3本をNASに入れて初期化すれば早かったのですが、4連休とあって一台一台入れ替えてみるテストです。

本日はやっと一応インターネットにはつながない状態でNVR500をセットアップ中です。

“NVR500の設定を開始” の続きを読む