2013年6月3日月曜日

はてなダイアリー、WordpressからBloggerに引っ越ししました

はてなダイアリーとWordpressの過去ブログをBloogerに引っ越ししてみました。

といっても、ただ変換してインポートしただけなので、
ほとんど手間はかかっていませんが、レイアウトは期待していません。
結果は、見ての通りというか、まあ想像通りですね。

今回は、こちらのコンバーターを利用させていただきました。

コンバーターのダウンロード

こちらからソースをダウンロードする
https://code.google.com/p/google-blog-converters-appengine/

ダウンロードしたファイル
https://google-blog-converters-appengine.googlecode.com/files/google-blog-converters-r89.tar.gz

ダウンロードしたファイルを解凍します。

はてなダイアリー to Blogger

1. はてダで、[データ管理]->[Movable Type形式]->[ダウンロード]リンクをクリックして、MT形式でエクスポートする。
2. MT形式でダウンロードしたファイルを次のコマンドで変換します。
./movabletype2blogger.sh /path/to/[MT形式のファイル].txt > hateda.xml
3. Bloggerの[設定]->[その他]->[ブログツール]->[ブログをインポート]機能を使用して変換したファイルを読み込み完了です。

ただし、作成日がうまく取り込めなかったので、取り込んだ後に手動で修正しました。

Wordpress to Blogger

1. [ツール]->[エクスポート]で既存データをダウンロードする。
2. ./wordpress2blogger.sh /path/to/web.wordpress.2013-06-02.xml > wordpress.xml
3. Bloggerの[設定]->[その他]->[ブログツール]->[ブログをインポート]機能を使用して変換したファイルを読み込み完了です。

こちらは作成日も正しくインポートできているようです。
文字データだけでも引っ越しできたのでよしとします。

2013年6月2日日曜日

Redmine 2.0.3を2.3.1にアップグレード

脆弱性放置のRuby on Railsが標的に、Webサーバを狙うボット攻撃が横行
http://www.itmedia.co.jp/enterprise/articles/1305/30/news029.html

らしいです・・・。
RedmineはRailsで動作しているアプリケーションなのでバージョンアップすることにしました。
この脆弱性について詳しくはこちら
http://jarmoc.com/blog/2013/05/28/ror-cve-2013-0156-in-the-wild/

Redmine2.0.3とRailsも3.2.6の組み合わせで使用していたので、
脆弱性放置・・・の対象になります。

まずは、既存環境のバックアップからです。

1. redmineのインストールディレクトリをバックアップ

cp -r /path/to/redmine-2.0.3 /path/to/redmine-2.0.3-20130530


2. データベースをバックアップ

mysqldump --default-character-set=binary redmine > redmine_20130530.sql


3. redmineの最新版(2013-05-30現在2.3.1)をダウンロード

cd /path/to
curl -L -O http://rubyforge.org/frs/download.php/76933/redmine-2.3.1.tar.gz
unzip redmine-2.3.1.tar.gz

4. プラグインのダウンロード

私の場合は、前のバージョンで使用していたプラグインはコピーした場合に動作しなかったため最新版をダウンロードしました。
cd /path/to/redmine-2.3.1/plugins
e.g.
git clone git://github.com/backlogs/redmine_backlogs.git
その他、いくつか。

5. 定義ファイルの設定

こちらは旧バージョンのコピーでも問題ないかもしれませんが、
バージョンが離れていたので新規のものに再定義しました。
こちらは環境により異なります。
・ /path/to/redmine/configuration.yml
・ /path/to/redmine/database.yml

6. モジュールのインストールおよびアップデート

cd /path/to/redmine
bundle update


7. dbのマイグレーション

rake generate_session_store
rake db:migrate RAILS_ENV="production"
rake db:migrate_plugins RAILS_ENV=production
rake redmine:plugins:migrate RAILS_ENV=production
rake tmp:cache:clear
rake tmp:sessions:clear

8. railsのバージョン確認

rails -v
Rails 3.2.13

Webサーバを再起動して完了です。
脆弱性対応済みのバージョンにアップグレードできました。

まとめ

Redmineだけ使っているとRails環境をあまり意識しないので、Railsの脆弱性にも日頃から気をつけなくてはいけないですね。
Redmine環境を構築するときに細かいトラブルがあったりしたのでアップグレードが面倒に感じることもありますが、バックアップさえ取得できていれば動作しなかった場合はすぐに戻せるので、脆弱性は放置せず対応する必要がありますね。
反省・・・しております。


2013年5月13日月曜日

見せてもらおうか、Debian 7.0「Wheezy」の性能とやらを

Debian 7.0「Wheezy」が2013/05/04にリリースしていたので、
インストールして使ってみました。

先日Google Compute EngineのデフォルトOSとして採用されたので、
ちょっと興味があったというのが理由だったります。
Google Compute Engineに採用されたというのは、Debianにとっても影響が大きいですよね。
これまでもAWSでは使えてますが、それがGoogleでも使えるということになります。

参考
Debian 7.0 (wheezy) リリースノート (64 ビット PC 用)
Debian GNU/Linux インストールガイド

ミニマム感がうれしいインストール




主にサーバ用途の場合ですが、
初めてのOSセットアップはできるだけミニマムな構成でインストールします。
これは必要なパッケージやソースを集めていると環境を把握することにもなるし、
そもそも不要なものが入りにいくのでライブラリの競合なども防げるというのが理由です。

そんなわけで、ミニマムでインストールしてみたところ、
やはり「Google Compute EngineがデフォルトOSとして採用したギークなOS」という感じがしますね。
他のOSではデフォルトで入っていると思われるパッケージも入っていません。
sudoもないんでよすね。
どうでもいいことなんですがミニマム感があふれていてちょっとうれしくなりました。

採用されているパッケージのバージョンが比較的新しい




安定板というと、通常は使い古されたバージョンのものが採用されることが多いですが、
今回のDebian7.0はわりと新しいものが採用されていて個人的にはうれしい限りです。
これにより、わざわざ最新版のソースをダウンロードしてコンパイルしたり、
パッケージが提供されているリポジトリを探したりしなくても良いわけです。
何よりバグフィックスとかあってもパッケージの更新だけで済みます。

リリースされる時期より採用されるバージョンが決まると思うんですが、
個人的にはタイミングがよかったようで、既存のパッケージだけでもすぐに使える感じがしました。

詳しくはこちら
ディストリビューションの最新情報

安定しています




まだ1週間ほどしか稼働していませんが安定しています。
安定版とはいえ、新しいOSを使い始めるとそれなりに問題が出てくるんですが今回は無いですね。

ちなみに今回は、新規インストールだからかもしれませんが、
パッケージのバージョンが新しいものになっているので、
バージョンアップすると悪い意味で全然違う結果になったかもしれませんね。

第4章 Debian 6.0 (squeeze) からのアップグレード
http://www.debian.org/releases/wheezy/i386/release-notes/ch-upgrading.ja.html

しばらくDebian使ってみます




個人的にはこれまではあまりよい印象ではなかったDebianですが、単なる食わず嫌いだったようです
更なる発展を期待しています。

2013年4月16日火曜日

Amazon Linux (EC2) で Fluentd(td-agent)を試す

php環境での使用を想定しているのでrubyのインストールはせず、
td-agentがAmazon Linuxで動作するか試してみた。
ちなみにrubyでも導入は簡単そうでした。

参考

http://docs.fluentd.org/articles/install-by-rpm
http://docs.fluentd.org/articles/php

検証環境

  • OS Amazon Linux 64bit
  • インスタンスの種類 マイクロインスタンス
  • ログの受信用サーバ1インスタンス
  • ログの送信用サーバ1インスタンス
  • PHP5.4から任意の値を送信(FuelPHP上で使ってみた)

1. td-agentのインストール

#次の1行をec2-userで実行した。
curl -L http://toolbelt.treasure-data.com/sh/install-redhat.sh | sh

ビルド済みのパッケージをインストールするだけなので、microインスタンスでもすぐに完了した。
Installing:
 td-agent            x86_64     1.1.12-0              treasuredata     20 M
Installing for dependencies:
 compat-libtermcap   x86_64     2.0.8-49.2.amzn1      amzn-main        16 k
 compat-readline5    x86_64     5.2-17.3.amzn1        amzn-main        156 k
 openssl098e         x86_64     0.9.8e-17.8.amzn1     amzn-main        894 k
 td-libyaml          x86_64     0.1.4-1               treasuredata     125 k

2. 設定ファイル(ログ受信側)

/etc/td-agent/td-agent.conf
<source>
  type forward
  port 24224
</source>
<match log.**>
  type file
  path /var/log/fluent/log
  time_slice_format %Y%m%d%H (1時間毎にファイル分割してみた)
  time_slice_wait 10m
  time_format %Y%m%d %H:%M:%S
  compress gzip
</match>

3. 設定ファイル(ログ送信側)

/etc/td-agent/td-agent.conf
<source>
  type unix
  path /var/run/td-agent/td-agent.sock
</source>
<match log.**>
  type forward
  send_timeout 60s
  recover_wait 10s
  heartbeat_interval 1s
  phi_threshold 8
  hard_timeout 60s
  <server>
    host 10.***.***.***(受信サーバのプライベートIPアドレス)
    port 24224
  </server>
  <secondary>
    type file
    path /var/log/fluent/forward-failed
  </secondary>
</match>

4. SecurityGroupsの設定

td-agentは、デフォルトで24224番ポートを使用するが、
TCPとUDPの両方を使用するので、両方開けておく必要がある。
http://docs.fluentd.org/articles/in_forward
http://docs.fluentd.org/articles/out_forward

5. td-agentの起動

送信、受信双方のtd-agentを起動する。
起動
/etc/init.d/td-agent start
停止
/etc/init.d/td-agent stop
再起動
/etc/init.d/td-agent restart
状態確認
/etc/init.d/td-agent status

自動起動
chkconfig --level 345 td-agent on

6. fluent-logger-phpのインストール

公式サイト掲載のパッケージをそのまま利用してみた。
git clone https://github.com/fluent/fluent-logger-php.git
cp -r src/Fluent /path/to/

7. ログを送信してみたサンプルコード

require_once '/path/to/Fluent/Autoloader.php';
use Fluent\Logger\FluentLogger;
Fluent\Autoloader::register();

$key = 'log.pv';
$val = array(
    'time'        => date('Y-m-d H:i:s'),
    'member_id'   => 'aaaaaaa',
    'useragent'   => $_SERVER['HTTP_USER_AGENT'],
    'ipaddress'   => $_SERVER['HTTP_X_FORWARDED_FOR'],
);
$logger = new FluentLogger("unix:///var/run/td-agent/td-agent.sock");
$logger->post($key, $val);

8. 試してみた感想

出力されるログは、JSON形式なので集計するときに取り扱いが簡単ですね。
また、追加したい値が増えてもこれなら気兼ねなく追加できます。
基本的なことでかつ重要なことですが、今のところログの取りこぼしがありません。
試しに受信側落としてみたらセカンダリーに出力してくれるし、設定によってはコピーして転送してくれたりで、
冗長化や障害時のリカバリーも可能ですね。

日々すごい量のトラフィックをさばいている次の企業で導入されているのも納得です。
http://docs.fluentd.org/articles/users

あと、td-agentならrubyではない環境でも簡単にfluentdが導入できそうです。
ただし、Windowsは除くようですが・・・。

Fluentd doesn't run on Windows.

2013年4月7日日曜日

FuelPHP 1.5.2と1.5.3の差分

2013/3/8にFuelPHP 1.5.3が出てたので内容を確認してみた
セキュリティー関連の設定に変更があったようです。



手元の1.5.2とdiffしてみた。

Files fuelphp-1.5.2/docs/assets/js/combined.js
Only in fuelphp-1.5.3/fuel/app/cache: fuel
Files fuelphp-1.5.2/fuel/app/config/config.php
Only in fuelphp-1.5.3/fuel/app/logs: 2013
Only in fuelphp-1.5.3/fuel/app/views: person
Files fuelphp-1.5.2/fuel/core/classes/fuel.php
Files fuelphp-1.5.2/fuel/core/classes/security.php
Files fuelphp-1.5.2/fuel/core/config/config.php


差分確認して該当のファイルを置き換えればよさそうです。

2013年2月12日火曜日

FuelPHP 1.5.1と1.5.2の差分

FuelPHP 1.5.2が出たので内容を確認してみた。

Hotfix release v1.5.2
fixed autoloader not properly loading and initializing classes are an…

autoload関連のバグフィックスらしい
手元の1.5.1とdiffしてみた。

diff -qr fuelphp-1.5.1 fuelphp-1.5.2
// パスは省略
Only in fuelphp-1.5.2: .gitignore
Only in fuelphp-1.5.2: .gitmodules
Only in fuelphp-1.5.2/docs: .gitignore
docs/assets/js/combined.js
docs/installation/download.html
fuel/core/base.php
fuel/core/bootstrap.php
fuel/core/classes/autoloader.php
fuel/core/classes/session/driver.php
fuel/packages/log/classes/log.php


アップデートした方がよさそう。
coreとlog.phpはコピーしておこう。

2012年11月19日月曜日

MAMPにApacheモジュール追加してみた

ことの始まりは、MAMPのapacheにapxsコマンドでモジュール追加しようとしたら、config_vars.mkが無いという警告が出てビルドできないじゃないですか・・・。
というわけで、メモ

config_vars.mkが無いよ・・・

cannot open /Applications/MAMP/Library/build/config_vars.mk: No such file or directory at /Applications/MAMP/bin/apache2/bin/apxs line 217.


そんなわけで、いろいろ試したところapacheをソースからビルドして、
関連ファイルをコピーという、結局MAMPを使う意味が半減する罠にはまりました。

MAMPのapacheバージョン確認



/Applications/MAMP/bin/apache2/bin/httpd -v

Server version: Apache/2.2.22 (Unix)
Server built: Jul 4 2012 16:45:07


Apacheのソースからビルド



先ほど確認したバージョンと同じソースコードをダウンロードする

cd /usr/local/src
curl -L -O http://archive.apache.org/dist/httpd/httpd-2.2.22.tar.bz2
tar jxfv httpd-2.2.22.tar.bz2
cd httpd-2.2.22
./configure --enable-so --prefix=/tmp/httpd-2.2.22


errorが出ております・・・

configure: error: in `/usr/local/src/httpd-2.2.22':
configure: error: C compiler cannot create executables
See `config.log' for more details.


config.log見ると、ccが無くてNo such file or directoryが多数あるんですが、

./configure: line 4709: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc: No such file or directory


MountainLionだから?かわかりませんが、パスが変わったみたいですね。
XcodeDefault.xctoolchainというパスがあったのでとりあえずシンボリックリンク張って対応

cd /Applications/Xcode.app/Contents/Developer/Toolchains
sudo ln -s XcodeDefault.xctoolchain OSX10.8.xctoolchain


気を取り直して再実行

cd /usr/local/src/httpd-2.2.22
./configure --enable-so --prefix=/tmp/httpd-2.2.22
make
make install


必要なファイルおよびディレクトリーをコピーします。

cp -r /tmp/httpd-2.2.22/build /Applications/MAMP/Library/
cp -r /tmp/httpd-2.2.22/include /Applications/MAMP/Library/


必要に応じてconfig_vars.mkの中身のパスを書き換え

cd /Applications/MAMP/Library/build
perl -i -p -e 's/\/tmp\/httpd-2.2.22/\/Applications\/MAMP\/Library/g' *

環境により微調整が必要です。
vi /Applications/MAMP/Library/build/config_vars.mk
exp_sysconfdir = /Applications/MAMP/conf/apache
sysconfdir = /Applications/MAMP/conf/apache


これでApacheモジュール追加できるようになりました。

参考



  • http://zuzara.com/blog/2010/04/08/compiling-php5-3-2-on-mamp/

  • https://groups.google.com/forum/#!msg/phusion-passenger/5trJ1eoN6cE/phDt_M-UKIYJ