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のみです。

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

Ubuntu 11.04から12.04 LTSへアップグレード

現在、内向けDNSが1VM、WEBサーバーが2VM動いている。

最悪の場合を考えてスナップショットを取りバックアップ。

$sudo do-release-upgrade -d

SSLを使用しているVMが1回目は失敗して2回目で難無く成功。

やっぱり、稼働しているプロセスが少ないので失敗しにくい模様。MySQLとかはパスワードなどを聞かれますが、インストール時に設定したものを入力するだけなので問題なし。

ゴールデンウィークはマシンのメンテナンスにはちょうど良いです。

NVR500 Rev.11.00.16

現在、ルーター配下にSWX2200-24を使用しています。更にフレッツも元々のVDSLの他にフレッツ光ネクストを単独で引いています。

そこで問題になるのは、元々のものは家庭用に使用し、追加したフレッツ光ネクストは仕事用にしました。フレッツ光ネクストは個人名義で契約しましたが、会社に譲渡する形をとるのでVDSLの契約を破棄するわけにはいかなかった。

んな訳で、2本のインターネット回線があるので当然2台のブロードバンドルーターを使用するわけです。

VDSLのみの契約時には、NVR500がVLANをサポートしていなくSWX2200-24がただのスイッチとしてしか動作していませんでした。

現在はルーターが2台あるので分離できますが、念願かなってNVR500にタグVLANがサポートされるようになりました。

これで面白い事できるかなぁ~って思ってます。ポートVLANとタグVLANのコラボレーションw

でも、RTX810の購入を予定していたりする。消費電力も違いますしね。

去年との電力消費が変わっていないのに、徐々に値上げされて1.5倍程になっていることに愕然とし、出来るだけ消費電力の少ないものを買ってます。マシンの台数も仮想化して減らしたのに。

話はずれましたが、タグVLANが使える事で楽しめるかな。ポートVLANだったら更に嬉しかったけどね。

寝る前にファームのアップデートしよう。

“NVR500 Rev.11.00.16” の続きを読む

SXW2200が厳密なのか

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

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

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

TechPowerUp GPU-Z 0.5.2 Released

これ、意外と重宝するツールです。

TechPowerUp today released version 0.5.2 of GPU-Z, our popular graphics hardware information and diagnostic utility that gives you information about the installed graphics hardware in your computer, and lets you monitor various parameters such as clock speeds, temperatures, fan speeds, and voltages, all in real-time. GPU-Z is also backed by our overclock validation system and video card BIOS database. Version 0.5.2 adds support for new GPUs, improved support for known GPUs, and a timely dose of stability improvements

GPUの温度等、エアフローが思い通りに機能しているかなど、目安にするには良いツールです。

私も、増設時や入れ替え時には、この値を参考にしながら、設置位置を変えたり、稼働するクーラーを決めて、出来るだけ高温にならないように気を付けている。

まあ、あくまで目安ですけどね。今時のCPUにしろGPUにしろ電気をたっぷり食べるので、私は常用でOCなんて無で出来るだけ低い電話つ電圧で動くようにしてます。

話は少し飛ぶけど、一般家庭のサブブレーカー当たり15Aって、現在の時代に合ってない気がするな。私の様なミドルの下の方で使ってる人はいいけど、ハイエンドパソコンになれば、1500Wの電源なんて当たり前で、ギリギリすぎて私にはそこまでする勇気はない。

実際、私の仕事する部屋は、部屋のサブブレーカーのほかに2系統からも給電している。パソコンがいきなり落ちて、仕事のプログラムとかデーターとか無くなったらやだしね。バックアップ取ってても心配。早くUPS買えばいいんだけど、現在設置場所の確保等が出来ていないため見送っているけど、今年中には欲しいな。

ReadyNAS NV+にDeskstar 7K2000(HDS722020ALA330)

折角、2TBx4をX-RAIDで作ってみたのでベンチを取ってみた。

失敗だったのは、単体でベンチを取らなかったことですね。比較対象が・・・。

まあ、参考程度に見てください。

“ReadyNAS NV+にDeskstar 7K2000(HDS722020ALA330)” の続きを読む

ReadyNAS NV+にHGSTの2TBは・・・

夜中にリビルドが終わって、朝再起動してボリュームサイズの増加を行ったんだけど、ファンが全開に近い回転で回って五月蠅い事。

流石にReadyNAS NV+にDeskstar 7K2000(HDS722020ALA330)を4本は熱を処理しきれない模様。アイドル中でもメインのPCより五月蠅くなっちゃった。これから寒くなっていくので当面はいいけど、ファンの換装は必須ですね。アダプタかませて12cmのにしないと真夏はハードディスクがヤバくなるかも。

一応、ファンの調整を行ったので1950rpm前後でアイドルするんですが、アクセスすると一気にフル回転に近い状態になる。

“ReadyNAS NV+にHGSTの2TBは・・・” の続きを読む

NVR500の設定を開始

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

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

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

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

久々に秋葉原へ行って来た

ReadNAS NV+に入れているハードディスクがヤバそうだったのでハードディスク4本とお客様納品用に1本、そしてよいよNVR500を買った来ました。

順調に私の目的が遂行されている(結構スパンがあるのはご愛嬌)。

“久々に秋葉原へ行って来た” の続きを読む

widget_stub その2

IDLのwidget_stubですが意外とあっさり動いてしまった。

これはCALL_EXTERNALと対で使用するのですが、widget_stubで作るウィジェットが1つだけなので手を抜いて、C側のグローバル変数で対応しました。

複数使用する場合はリストクラスのCPtrListやアレイ関係を使えば対応可能です。

“widget_stub その2” の続きを読む