2011年2月13日 (日)

玄箱 - Debain Linuxをインストール&アップデートする(2011年版)

長年使ってきた玄箱HGサーバーが不調になったので再インストールすることにしました。ついでにsqueezeも出たことだし、アップデートもかねて。

しかし、さすがにインストール&アップデートは5年前と勝手が違っていました。ので2011年時点でのsqueezeまでのアップデートのやり方をメモしておきます。

まずは初期化したHDを組み込んだ玄箱HGをLANに接続します。
arp -a などでIPアドレスを確認して、玄箱HGにtelnetで接続します。
手順は、以前書いたものと同じです。EMモードになっていなければ、次のコマンドでEMモードにして再ログインしてください。

# echo -n 'NGNG' > /dev/fl3
# reboot

ログイン後は、パーミッションを再構成して玄箱HG用 Debian Linuxのイメージを展開。これも以前の手順と同じ。イメージもdebian_2006_06_10_dist.tgzが最新なのでこれを適用します。

Debian にできたらsargeにアップデートする手順を参考にしてsargeにアップデートしてください。ただし、/etc/apt/sources.list には以下の記述のみを有効にしてください。他のリポジトリはコメントアウトします。

/etc/apt/sources.list
---
deb http://archive.debian.org/debian/ sarge contrib main non-free
---

sargeは過去のリポジトリなので現在はDebianのディストリビューションアーカイブに収録されています。

sargeにアップデートした後は、ここの手順を参考にしてアカウントの作成や諸々のコマンドをインストールしておきます。

その後、カーネル2.6化の手順に従ってカーネルを2.6にしておきます。この時genbako.comのHG用カーネルイメージは2.6.25.1、モジュールは2.6.25.1が最新になってますのでこれらをwgetでダウンロードして使います。

以降、Debianのバージョンは1つずつ段階的にアップデートしたほうが無難なので、時間がかかるけど辛抱強くapt-get dist-upgradeしていきましょう。各バージョンのリポジトリは以下のとおりです。

etch
deb http://archive.debian.org/debian/ etch contrib main non-free
lenny
deb ftp://ftp.dti.ad.jp/pub/Linux/debian lenny main contrib non-free
squeeze
deb ftp://ftp.dti.ad.jp/pub/Linux/debian squeeze main contrib non-free

アップグレード中の問い合わせには、よくわからなければ全てデフォルトで答えていけば問題ないです。特にhaltはデフォルトにすべきです。変更してしまうとhaltで正常に電源が落ちなくなるみたいです。

ちなみにlennyでのaptitudeのアップデートで、squeezeへのアップデートの際には aptitude safe-upgrade が使えます。

とりあえず問題なくsqueezeにアップグレードできました。
しばらくはこれで様子見ということで。

| | コメント (1) | トラックバック (0)

2008年11月30日 (日)

玄箱 - KURO-NAS/X4発表

KURO-NAS/X4

今度のやつはHDDを4つも搭載できるようです。なんだかもう真面目に使えるようになってきましたね~。
CPUもARM 500MHz。HGは200MHzなのでMovableTypeとかさすがに重かったりしますが、X4ならけっこう快適に動くかも。小規模なWebサーバーやメールサーバー用途だったら十分ですね。

OSもDebian GNU/Linuxが標準でサポートされています。
なんかここまで用意されちゃっていると面白くない感じもしますが、考え方を変えて仕事に使えないかどうか、考えましょうかね。

中小企業の社内向けWeb、メールサーバーとかデータベースサーバー、インターネット向けに軽量なホームページやWebシステムを公開されている企業ならこれで十分間に合うケースもあると思います。うーむ、そういうパッケージつくったら売れるかな?

セットアップ手順もすでに公開されています。
なんか簡単そう。発売されたら買ってみようかな~。

話は変わりますが、今日机を整理していたらちょっと前に読んだ本が出てきました。

計画の科学―どこでも使えるPERT・CPM (ブルーバックス 35) Book 計画の科学―どこでも使えるPERT・CPM (ブルーバックス 35)

著者:加藤 昭吉
販売元:講談社
Amazon.co.jpで詳細を確認する

ずいぶん昔の本ですが、プロジェクトの管理を担当する方は必ず読んでおくべき本だと思います。現代には複雑な管理手法がたくさん存在していて、それの解説書もたくさんありますが、たぶんこの本に書かれているようなことが理解できてないと、複雑な管理手法も腹に落ちてこないんだろうな。と思います。

| | コメント (0) | トラックバック (1)

2007年12月13日 (木)

玄箱 - PHP5をソースからインストールしてみる(tidyとかGD入り)

玄箱Proが出て以降、なんとなくやる気がなくなっていた玄箱実験シリーズですが、久々にネタを書きます。最近はpython書くのが楽しくてソフトのインストールとか設定とかは全くやってなかったのでなんだか新鮮です。

ボクは正直言ってPHPは嫌いなほうです。あんまりスマートに書けるイメージがないんですよね。便利なのは便利なんですけどね。でも「PHP書ける?」とか「PHPの仕事なんですが・・・」なんて話はとてもよく伺います。巷にはPHPのシステムがあふれているんですね。そしてメンテナンスをろくにされていないものが実に多い様子。「PHPできますけど、嫌いなんですw」と正直に言っても、たのんますよ~と言われるケースが多いです。システム作ったはいいけど、開発会社と契約が切れたり倒産してたりしてメンテができなくなったという話がほとんど。
そういうのを開けてみると、ソースは決まって最悪ですwそんなんを見てくると余計にPHPのコードに対する印象が悪くなっていくのでした。

まあ、余談はさておき。そんなPHP嫌いにまたPHPのお仕事が来ました。いや、基本的に頼まれたらなんでも受けるんですw
その中で、PHP5のインストール評価をする必要が出てきたのでとりあえずウチの玄箱でやってみることにしました。Debianならaptで簡単にインストールできるんですが、今回はソースコードからインストールする必要があるのであえてmakeでのインストールです。

ついでに、MySQLやらTidyやらを使う必要があったのでその辺のオプションもつけてコンパイルしてみました。ちなみに、PHP5はまだRPMでは配布されていないんですねぇ。ちょっと驚きました。

さて、まずは事前に以下のものをaptでインストールしておきます。
tidy、MySQL、GD、XML、curlをサポートするようにしました。
apache2
apache2-threaded-dev
tidy
libtidy-dev
libgd-dev
mysql
libxml2
libxml2-dev
libcurl
libcurl3-dev

次に、PHPのソースコードをダウンロードしてきます。現行の最新バージョンは5.2.5でした。

ソースを展開します。
---
# tar xzvf /home/user/php-5.2.5.tar.gz
# cd php-5.2.5

---

configureします。
上記に加えてmbstring関連のオプションも含めました。
http://d.hatena.ne.jp/yuhei_kagaya/20070915/1189843852 を参考にさせていただきました。ありがとうございます。
---
# ./configure \
        --with-apxs2=/usr/bin/apxs2 \
        --enable-mbstring=all \
        --enable-mbregex \
        --enable-cli \
        --with-mysql=/usr/local/mysql \
        --with-mysqli=/usr/local/mysql/bin/mysql_config \
        --enable-safe-mode \
        --with-exec-dir=/usr/bin \
        --with-zlib \
        --with-curl=/usr \
        --with-curlwrappers \
        --enable-zip \
        --enable-xml \
        --with-gd \
        --enable-gd-native-ttf \
        --enable-gd-jis-conv \
        --enable-zend-multibyte \
        --with-tidy

---

configureがうまく通ったらmake & make install です。
---
# make
# make install

---

インストールできたら、php.iniを設定します。
---
# cp -p /home/user/php-5.2.5/php.ini-dist /usr/local/lib/php.ini
# vi /usr/local/lib/php.ini

---
[php.ini]

expose_php=off
error_reporting=E_ALL | E_STRICT
display_errors=on
log_errors=on
log_errors_max_len=4096
error_log= php5_error.log
register_long_arrays=off
register_argc_argv=off
magic_quotes_gpc=off
default_charset="UTF-8"
allow_url_include=off
session.use_only_cookies=1
session.gc_divisor = 1000
session.bug_compat42 = 0
session.entropy_length = 32
session.hash_function = 1
date.timezone = "Asia/Tokyo"

http://wiki.ohgaki.net/index.php?PHP%2Ftips%2F%BF%E4%BE%A9php.ini%C0%DF%C4%EA
などを参考にしながら、上記のようにパラメータを設定してみました。ありがとうございます。
"display_errors=on"の部分は開発環境を意識しましたが、運用環境ならoffにすべきです。
mbstring関係は環境に合わせて設定するといいです。

設定が終わったらapache2をリロードしてphpinfoで設定を確認してみます。
---
# /etc/init.d/apache2 reload
# touch /var/www/phpinfo.php
# vi /var/www/phpinfo.php

---
[phpinfo.php]

<? phpinfo(); ?>


正常に表示されました。
Php5phpinfo20071213

特に難なくという感じでした。
この評価をもとにシステム開発環境にもインストールできそうです。

まあ、せっかく玄箱に入れたことですし、PHP5もちょこっとやってみましょうかね。4ばっかり書いてきたしね。

| | コメント (0) | トラックバック (0)

2007年6月 8日 (金)

玄箱 - MovableType4 Betaをインストールしてみる

前回はテキトーにインストールして評価してみたMovableType4Betaですが、ちゃんとインストール方法を書いておこうと思います。で最近玄箱ネタを書いてなかったし、せっかくなので玄箱Debian環境にインストールしてみることにしましょう。

玄箱Debianで自宅ブログサーバーも夢じゃない!なんて書いてみたいところですが、正直動作が遅いですwとりあえず記事の表示自体はhtmlなので軽いですが、管理画面の処理が遅いですね。まあハードのスペック的に仕方のないところですね。まああくまで実験用と割り切れる方か、「それでも玄箱で!」という強者は試してみてくださいw

まず、ApacheMySQL、Sendmailをインストールしておきましょう。
MySQLであらかじめCreate DetabaseしてMT4用のスキーマをつくっておきます。ここでは、スキーマ名を「mt」とします。

MovableType4Betaのアーカイブを展開してここではフォルダを「mt4b」とリネームしてFTPでapacheのドキュメントルートにアップロードします。

mt4b直下の*.cgiのファイルパーミッションを755に変更します。

以上が終わったら、http://my.domain.com/mt4b/mt-check.cgiにアクセスします。

mt-check.cgiはMT4がインストール可能な環境かどうかをチェックします。
ログの一番下段に「You're ready to go!」 と表示されていたらインストール可能です。
必須のモジュール等がインストールされていないようであれば表示に従って設定し、再度チェックしてみましょう。

Mt4kuro001

インストール可能であればhttp://my.domain.com/mt4b/にアクセスし、「Log in to Movable Type」ボタンをクリックします。

Mt4kuro002

インストールウィザードが表示されます。「Begin」をクリックします。

Mt4kuro003

「Continue」をクリックします。

Mt4kuro004

データベースの設定画面です。「MySQL Database」を選択します。

Mt4kuro005_1 

各データベース設定項目を入力します。「Database Name」は先ほど設定した「mt」にします。入力後、「Test Connection」をクリックします。

Mt4kuro006_1

接続テストが完了しますので、「Continue」をクリックします。
ここでエラーが表示された場合はもう一度データベース設定を見直してください。

Mt4kuro007

次はメールに関する設定です。
外部のSMTPサーバを使用するか、Sendmailを使用するかの選択ですが、ここではSendmailを選択してみます。「sendmail Path」には、sendmailのパス、「Mail address for test sending」にはテストメールを送信する宛先のメールアドレスを入力します。入力したら「Send Test Email」をクリックします。

Mt4kuro009

設定が正常であれば、送信が完了しますので「Continue」で次に進みます。
しばらくしてメールをチェックすると「Test email from Movable Type Configuration Wizard」というメールが届きます。

これでmt-config.cgiが自動生成されますが、ボクの環境ではコンフィグファイルが生成できない旨のメッセージが表示されました。ディレクトリに書き込み権限がないということみたいです。

Mt4kuro010

こういう場合は、「 I will create the mt-config.cgi file manually. 」のチェックボックスをクリックすると、コンフィグファイルの内容が表示されますので、コピーして「mt-config.cgi」という名前で保存してmt4b直下にアップロードしてください。

Mt4kuro011

上記を設定した後、http://my.domain.com/mt4b/ にアクセスすると、ユーザー登録画面が表示されるので、必要な情報を入力して「Finish Install」をクリックします。

Mt4kuro012

データベースの設定が行われます。完了したら「Login to Movable Type」をクリックします。

Mt4kuro013

管理画面が表示されます。これでインストールは完了です。

Mt4kuro014

環境上のエラーがなければ、インストールで迷うことはありませんね。
よくできていると思います。

初期でブログが既に一つ設定されているのでいきなり記事を書くこともできますね。とりあえずブログを始めるなら面倒がなくていいです。

しかし、最初に書いたように、玄箱ではかなり動作が遅いです。レンタルサーバー等では軽く動作するんですが、玄箱のパワーではMT4はキツいようですね。

それと、前回の最後のスクリーンショットではMT3のデフォルトテンプレートでの表示になっていますが、これはボクがMT3を4に上書きインストールしたからで、MT4のデフォルトテンプレートは違うデザインになっていました。ご了承ください。

とりあえず、玄箱にも入ったことだし、正式リリースまでのんびり評価してみようかと思います。

| | コメント (2) | トラックバック (0)

2007年3月20日 (火)

Interface 2007年4月号

今月のInterfaceでは玄箱が主なネタになっています。

Interface (インターフェース) 2007年 04月号 [雑誌] Book Interface (インターフェース) 2007年 04月号 [雑誌]

販売元:CQ出版
Amazon.co.jpで詳細を確認する

表紙のデザインもそれっぽいですね。
とりあえず買ってざっと読みましたが、組み込み系の環境を玄箱を使って学習しようというコンセプトのようです。なるほど、玄箱はディスプレイやキーボードといった入力機器を通常はつなげることがない端末ですから、組み込み系の開発のイメージに近いですね。

WindowsでCygwinを使ったクロスコンパイル環境の構築は参考になりました。ボクは気が長いのでもっぱらセルフコンパイルですが、クロス環境の実験もやってみたくなりました。
それと、Transcodeを玄箱に入れてビデオサーバーにするという記事も興味深いです。最終的には玄箱内のビデオファイルをテレビで出力する方法まで紹介されているのでちょっと一回やってみたくなりました。

記事の中では玄箱の開け方からハードディスクの設置、初期設定の仕方が写真付きで詳しく説明されています。ボクも以前「とりあえず組み立ててみる」というのを書きましたが、玄箱本体には簡単な説明書しか入ってない上、組み立てにはちょっとしたコツがいるのでこういう記事はありがたいと思います。玄箱の組み立てに困っている方はとりあえず買っておくのもいいかもしれません。

| | コメント (0) | トラックバック (0)

2007年2月 7日 (水)

玄箱 - NTPを導入してみる

久々の玄箱ネタです。
今回はNTPを導入してみましょう。

玄箱の内蔵時計は非常に不正確ですが、カーネル2.6にすることで大きく改善されるようです。Genbako kernel collection さん配布のカーネルにはクロック補正が施されているそうです。

しかしもっと正確に時間を合わせないといけない場合は、NTPクライアントを導入してサーバーから定期的に時間を取得して調整するのが有効です。ここでは、Linuxで一般的なNTPクライアントntpdateをインストールして設定してみましょう。

まず、atpでntpdateをインストールします。

---
# atpitude install ntpdate
---

インストールが終わったら、設定ファイルを編集します。

---
# vi /etc/default/ntpdate
---

NTPSERVERSの値を修正します。

===
NTPSERVERS="eagle.center.osakafu-u.ac.jp ntp.nc.u-tokyo.ac.jp ns.hiroshima-u.ac.jp"
===

上記の例では、大阪、東京、広島のサーバーを設定しています。
NTPサーバーのリストを参考にしてなるべく近くの地域のサーバーを設定するとよいです。日本では昔から福岡大学のサーバーがよく使われますが、混雑で困っていらっしゃるようなのでなるべく避けてあげましょう。

設定を保存したら、ntpdateを起動してみましょう。

---
# ntpdate start
---

エラーがなければ正常です。
時刻が正確になっているか確認します。

---
# date
---

ntpdateを定期的に起動して時刻を更新するよう、cronの設定をします。

---
# crontab -e
---

ここでは毎時30分に起動するようにしてみます。

===
30 * * * * /etc/init.d/ntpdate start
===

WEBサーバーを運用する上ではなるべく時刻が正確なほうがいいと思います。ntpdateは手軽に設定できるのでとりあえず設定しておくといいですね。

| | コメント (0) | トラックバック (0)

2006年11月27日 (月)

玄箱 - PHPをインストールしてみる

PHPは動的なWEBページを制作するために開発されたプログラミング言語です。データベースと連動するWEBシステムなんかを開発するために適している言語なので今でも人気が高い言語ですね。一般的に企業系の大規模なシステムやバックグラウンド処理が多いシステムなんかはJavaで開発され、中規模な企業系システムはPHPで開発されるケースが多いように思います。

ボクはPerlを好んで使うので、WEBシステムを開発する際はあまりPHPは使いません。しかし、オープンソース系のWEBシステムにはPHPで開発されたもので秀逸なものが数多くあります。それらを使ったりカスタマイズしたりするためにPHPは必要ですね。

というわけで、玄箱にPHPをインストールしてみましょう。ここでは、あらかじめApacheとMySQLがインストールされていることを前提にしています。インストールされていない場合は、ApacheをインストールしてみるMySQLをインストールしてみるを参考にしてインストールしてください。

まず、aptでPHPと関連モジュールをインストールします。

---
# aptitude install php4 php4-mysql php4-pear php4-gd libapache-mod-php4
---

libapache-mod-php4 の設定で、httpd.confを上書きするかどうかを聞いてきますが、ここでは「install the package maintainer's version」を選択して上書きすることにしましょう。

次にphp.ini を編集します。

---
# vi /etc/php4/apache/php.ini
---

mbstringセクションを以下のように変更します。
===
[mbstring]
; language for internal character representation.
mbstring.language = Japanese  ← コメントをはずす

; internal/script encoding.
; Some encoding cannot work as internal encoding.
; (e.g. SJIS, BIG5, ISO-2022-*)
mbstring.internal_encoding = EUC-JP  ← コメントをはずす

; http input encoding.
mbstring.http_input = auto  ← コメントをはずす

; http output encoding. mb_output_handler must be
; registered as output buffer to function
mbstring.http_output = EUC-JP  ← EUC-JPに変更しコメントをはずす

; enable automatic encoding translation accoding to
; mbstring.internal_encoding setting. Input chars are
; converted to internal encoding by setting this to On.
; Note: Do _not_ use automatic encoding translation for
;       portable libs/applications.
;mbstring.encoding_translation = Off

; automatic encoding detection order.
; auto means
mbstring.detect_order = auto  ← コメントをはずす

; substitute_character used when character cannot be converted
; one from another
mbstring.substitute_character = none;  ← コメントをはずす

; overload(replace) single byte functions by mbstring functions.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
;mbstring.func_overload = 0
===

/var/www/phpinfo.phpを作成して、内容を次のようにします。

===
<? phpinfo(); ?>
===

WEBブラウザで玄箱のIPアドレスにアクセスし、phpinfo.phpにアクセスします。
各種設定が正常であれば、完了です。特にphp.iniで変更したmbstring、mysqlセクションを確認してください。

| | コメント (0) | トラックバック (0)

2006年11月11日 (土)

玄箱 - Ruby on Railsをインストールしてみる

最近、RubyRuby on Railsに関する記事をよく目にするようになりました。Rubyコミュニティがにわかに活気づいてきているんでしょうか。いい感じですね。Rubyは日本人が開発したスクリプト言語であり、LLの中でも本格的なオブジェクト指向言語であるので日本で盛り上がって世界をリードしていくのは大変有意義だと思います。

特にRuby on Railsは極めて優秀なフレームワークなので今後のRubyの普及はRailsなくしては語れないんじゃないでしょうか。

と、いうわけでそんなRailsを玄箱いれてみたいと思います。
Railsで開発を行うにはあらかじめMySQLがセットアップされている必要があります。
MySQLがインストールされていない場合は、玄箱 - MySQLをインストールしてみるを参考にインストールしてください。

まずは、rubyをインストールしてみましょう。

---
# aptitude install ruby irb rdoc libopenssl-ruby1.8
# aptitude install ruby1.8-dev
---

インストールが完了したら、動作確認を兼ねてバージョンチェックをしてみましょう。

---
# ruby -v
ruby 1.8.2 (2005-04-11) [powerpc-linux]
---

次に、wgetでrubygemsを取得します。

---
# wget -c http://rubyforge.org/frs/download.php/11289/rubygems-0.9.0.tgz
---

ダウンロード完了後、インストールします。

---
# tar xzvf rubygems-0.9.0.tgz
# cd rubygems-0.9.0
# ruby setup.rb config
# ruby setup.rb setup
# ruby setup.rb install
---

インストールが完了したら、動作確認を兼ねて環境表示をしてみましょう。

---
# gem environment
Rubygems Environment:
  - VERSION: 0.9.0 (0.9.0)
  - INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.8
  - GEM PATH:
     - /usr/lib/ruby/gems/1.8
  - REMOTE SOURCES:
     - http://gems.rubyforge.org
---

次に、Railsをインストールします。
このコマンドは処理に結構時間がかかりますので根気よく待ちましょう。

---
# gem install rails --include-dependencies
---

Railsのインストールが終了したらgemでmysqlアダプタをインストールしておきます。

---
# gem install mysql
Select which gem to install for your platform (powerpc-linux)
1. mysql 2.7.1 (mswin32)
2. mysql 2.7 (ruby)
3. mysql 2.6 (ruby)
4. mysql 2.5.1 (ruby)
5. Cancel installation
> 2
---

これで、インストール完了です。
試しにRailsプロジェクトを作ってみましょう。

---
# mkdir rails
# cd rails
# mkdir test
# cd test
# rails test
---

エラーが出なければ正常にプロジェクトが作成されています。

試しにscaffoldで簡単なDB表示を作ってみましたが、思ったよりも軽く動きます。開発環境としてもイケそうな感じがしますね。最近はRailsで開発されたシステムもちらほら見るようになったので、玄箱でミニマムなシステムをパッケージしてしまうのもアリかもしれませんね。

| | コメント (0) | トラックバック (0)

2006年10月13日 (金)

玄箱 - MUSASHIをつかってみる

前回、玄箱にMUSASHIをインストールしてみたわけですが、さて玄箱のスペックでMUSASHIが満足に使えるものなのかどうか不安なところです。ということで、ちょっと大きなデータをMUSASHIで処理してみましょう。

まず、データをどうするかですがMUSASHIサイトの人工データのリンクを参考にして、データを生成するというのが有効かと思いましたが、ちょっと興味本位で現実に存在するデータをいじってみたくなりました。で、ここではパッと思いついた郵便番号のデータを使おうと思います。全国一括データ約12万件を利用します。

ken_all.lzhをダウンロードして展開すると、ken_all.csvは121693件のデータでした(2006.10.13現在)動作テストするには十分な量だと思います。このCSVに対してテキストエディタの置換などを使ってダブルクォーテーション(")を削除します。そして、一番先頭に次のヘッダを追加します。

===
全国地方公共団体コード,旧郵便番号,郵便番号,都道府県名,市区町村名,町域名,都道府県名,市区町村名,町域名,一町域が二以上の郵便番号で表される場合の表示,小字毎に番地が起番されている町域の表示,丁目を有する町域の場合の表示,一つの郵便番号で二以上の町域を表す場合の表示,更新の表示,変更理由
===

追加したら、文字コードEUCで上書き保存します。
玄箱はデフォルトでEUCですが、他の文字コードを利用している場合は環境に合わせて変更してください。

データの準備ができたら、FTP等で玄箱にアップロードします。

では、玄箱に接続してみましょう。
とりあえずCSVファイルをみてみます。

---
$ head KEN_ALL.CSV
全国地方公共団体コード,旧郵便番号,郵便番号,都道府県名カナ,市区町村名カナ,町域名カナ,都道府県名,市区町村名,町域名,一町域が二以上の郵便番号で表される場合の表示,小字毎に番地が起番されている町域の表示,丁目を有する町域の場合の表示,一つの郵便番号で二以上の町域を表す場合の表示,更新の表示,変更理由
01101,060  ,0600000,ホツカイドウ,サツポロシチユウオウク,イカニケイサイガナイバアイ,北海道,札幌市中央区,以下に掲載がない場合,0,0,0,0,0,0
01101,064  ,0640941,ホツカイドウ,サツポロシチユウオウク,アサヒガオカ,北海道,札幌市中央区,旭ケ丘,0,0,1,0,0,0
01101,060  ,0600041,ホツカイドウ,サツポロシチユウオウク,オオドオリヒガシ,北海道,札幌市中央区,大通東,0,0,1,0,0,0
01101,060  ,0600042,ホツカイドウ,サツポロシチユウオウク,オオドオリニシ(1-19チヨウメ),北海道,札幌市中央区,大通西(1~19丁目),1,0,1,0,0,0
01101,064  ,0640820,ホツカイドウ,サツポロシチユウオウク,オオドオリニシ(20-28チヨウメ),北海道,札幌市中央区,大通西(20~28丁目),1,0,1,0,0,0
01101,060  ,0600031,ホツカイドウ,サツポロシチユウオウク,キタ1ジヨウヒガシ,北海道,札幌市中央区,北一条東,0,0,1,0,0,0
01101,060  ,0600001,ホツカイドウ,サツポロシチユウオウク,キタ1ジヨウニシ(1-19チヨウメ),北海道,札幌市中央区,北一条西(1~19丁目),1,0,1,0,0,0
01101,064  ,0640821,ホツカイドウ,サツポロシチユウオウク,キタ1ジヨウニシ(20-28チヨウメ),北海道,札幌市中央区,北一条西(20~28丁目),1,0,1,0,0,0
01101,060  ,0600032,ホツカイドウ,サツポロシチユウオウク,キタ2ジヨウヒガシ,北海道,札幌市中央区,北二条東,0,0,1,0,0,0
---

データが正常なのを確認したら、MUSASHIのcsv2xtコマンドでxmlTableに変換します。

---
$ csv2xt -F -i KEN_ALL.CSV -o zip.xt
#END# 27942 2006/10/13 11:17:54 "csv2xt -F -i KEN_ALL.CSV -o zip.xt" in=121692 out=121692
---

csv2xtは、名前のとおりCSVファイルをxmlTable形式に変換するコマンドです。
xmlTableはMUSASHIがデータ処理に使うフォーマットです。

さて、かなり時間がかかるに違いないと思いキー入れたらお茶でも淹れようと席を立ちかけたんですが、この処理は10秒程度で終わってしまいました。思ったよりかなり高速です。これはもしかしたら普通に仕事で使えるかも?と期待が出てきたのでお茶はあとまわしにして、処理を続けてみましょう。

zip.xtの中身は以下のようになっています。

---
$ head -25 zip.xt
<?xml version="1.0" encoding="euc-jp"?>
<xmltbl version="1.1">
<header>
<field no="1" name="全国地方公共団体コード"></field>
<field no="2" name="旧郵便番号"></field>
<field no="3" name="郵便番号"></field>
<field no="4" name="都道府県名カナ"></field>
<field no="5" name="市区町村名カナ"></field>
<field no="6" name="町域名カナ"></field>
<field no="7" name="都道府県名"></field>
<field no="8" name="市区町村名"></field>
<field no="9" name="町域名"></field>
<field no="10" name="一町域が二以上の郵便番号で表される場合の表示"></field>
<field no="11" name="小字毎に番地が起番されている町域の表示"></field>
<field no="12" name="丁目を有する町域の場合の表示"></field>
<field no="13" name="一つの郵便番号で二以上の町域を表す場合の表示"></field>
<field no="14" name="更新の表示"></field>
<field no="15" name="変更理由"></field>
</header>
<body><![CDATA[
01101 060__ 0600000 ホツカイドウ サツポロシチユウオウク イカニケイサイガナイバアイ 北海道 札幌市中央区 以下に掲載がない場合 0 0 0 0 0 0
01101 064__ 0640941 ホツカイドウ サツポロシチユウオウク アサヒガオカ 北海道 札幌市中央区 旭ケ丘 0 0 1 0 0 0
01101 060__ 0600041 ホツカイドウ サツポロシチユウオウク オオドオリヒガシ 北海道 札幌市中央区 大通東 0 0 1 0 0 0
01101 060__ 0600042 ホツカイドウ サツポロシチユウオウク オオドオリニシ(1-19チヨウメ) 北海道 札幌市中央区 大通西(1~19丁目) 1 0 1 0 0 0
01101 064__ 0640820 ホツカイドウ サツポロシチユウオウク オオドオリニシ(20-28チヨウメ) 北海道 札幌市中央区 大通西(20~28丁目) 1 0 1 0 0 0
---

ちゃんと変換されているみたいですね。xmlTable形式については他にドキュメントがあるので調べてみることをおススメします。

では次に、集計に必要な項目を抜き出してみます。項目の選択はxtcutを使います。

---
$ xtcut -f 全国地方公共団体コード,郵便番号,都道府県名 -i zip.xt -o test1.xt
#END# 16235 2006/10/13 11:31:10 "xtcut -f 全国地方公共団体コード,郵便番号,都道府県名 -i zip.xt -o test1.xt" in=121692 out=121692
---

test1.xtを確認します。

---
$ head test1.xt
<?xml version="1.0" encoding="euc-jp"?>
<xmltbl version="1.1">
<header>
<field no="1" name="全国地方公共団体コード"></field>
<field no="2" name="郵便番号"></field>
<field no="3" name="都道府県名"></field>
</header>
<body><![CDATA[
01101 0600000 北海道
01101 0640941 北海道
---

全国地方公共団体コード、郵便番号、都道府県名が切り出されています。
xtcutも2~3秒で終わりました。非常に高速です。

次に、都道府県ごとの郵便番号数を集計してみます。
集計はxtaggで行います。

---
$ xtagg -k 都道府県名 -f 郵便番号:郵便番号数 -c cnt -i test1.xt -o test2.xt
#END# 23059 2006/10/13 11:41:29 "xtagg -k 全国地方公共団体コード -f 郵便番号:郵便番号数 -c sum -i test1.xt -o test2.xt" in=121692 out=1973
---

これも2秒程度で終わりました。
中身は

---
$ head -20 test2.xt
<?xml version="1.0" encoding="euc-jp"?>
<xmltbl version="1.1">
<header>
<field no="1" name="全国地方公共団体コード"></field>
<field no="2" name="郵便番号数"></field>
<field no="3" name="都道府県名" sort="1"></field>
</header>
<body><![CDATA[
23101 6876 愛知県
38201 1734 愛媛県
08201 2818 茨城県
33201 2182 岡山県
47201 790 沖縄県
03201 1934 岩手県
21201 3340 岐阜県
45201 876 宮崎県
04101 3281 宮城県
26101 6657 京都府
43201 1865 熊本県
10201 1502 群馬県
---

こんな感じですね。ちょっとわかりやすくするためにxtsortで郵便番号数で降順ソートしてみましょう。

ソートのついでに全国地方公共団体コードはいらないので削除したいです。xtcutで郵便番号数と都道府県名を切り出します。

これらの処理を一括して行いたい場合はパイプを使って記述します。シェルなどで高度な集計プログラムを作る場合は、このパイプでの一括処理が強力です。

ソートと項目選択の記述は以下のようになります。

---
$ xtsort -k 郵便番号数%nr -i test2.xt | xtcut -f 郵便番号数,都道府県名 -o test3.xt
---

test3.xtは以下のようになります。

---
$ head -20 test3.xt
<?xml version="1.0" encoding="euc-jp"?>
<xmltbl version="1.1">
<header>
<field no="1" name="郵便番号数" sort="1" numeric="1" reverse="1"></field>
<field no="2" name="都道府県名"></field>
</header>
<body><![CDATA[
8205 北海道
6876 愛知県
6657 京都府
5351 新潟県
5200 兵庫県
3909 福島県
3732 大阪府
3529 千葉県
3340 岐阜県
3333 東京都
3281 宮城県
3256 福岡県
3237 富山県
---

これで、「全国郵便番号が多い都道府県ランキング」ができましたw
データをみると、北海道が一位ですね。やはり土地面積が大きいからでしょうか。単純に考えれば面積が大きい県ほど郵便番号が多いと思われますが、面積が小さくても人口密度が高くて居住区画の割り方が細かいところは郵便番号が多くなるはず。大阪や東京が高い順位にきているのはそのせいかもしれません。

都道府県別の土地面積や人口、人口密度などのデータを組み合わせれば、面白い分析ができるかもしれません。単にスピードテストのつもりで郵便番号データを使用しましたが、やってみると発見があるものですな。これがデータ分析の面白いところだと思います。

さて本題に戻すと、玄箱でのMUSASHIは正常に動作し、しかも処理速度は実用に耐えるレベルであるということがわかりました。これはほんとに仕事で使えそうですねえ。でもボク自身MUSASHIは勉強中なのではやくいっちょまえに使えるようになってブログでもMUSASHIを使ったデータマイニングを紹介できればいいなあと思っています。
ガンバルガー!

| | コメント (0) | トラックバック (0)

2006年10月 7日 (土)

玄箱 - MUSASHIをインストールしてみる

MUSASHIは、データマイニングで必要なデータ処理を行うためのコマンド群です。
最近データマイニングを勉強しているので、データマイニングツールがほしいと思っているんですが、データマイニングツールってとても高価なのです。もうボクには当然買えませんというような額なんですが、このMUSASHIはオープンソースで、且つボクの好きなコマンドライン操作でもってデータ処理ができるというすばらしいソフトです。

MUSASHIはLinux環境で動作するため、玄箱にインストールしてみようかと思いました。しかし大量データ処理用のソフトなので、果たして玄箱のハードスペックで足りるのかどうか疑問です。

そんなこともあって、最初Cygwinに入れてみたんですが、文字コードの問題等でちょっと使用感が悪いなという感じだったので、まあどれくらい処理してくれるものか気にもなったので試しに玄箱Debian環境にインストールしてみることにしました。

MUSASHIのインストールにはncursesとlibxml2が必要です。

nucursesがない場合はインストールします。

---
# aptitude install ncurses
---

次にlibxml2をインストールします。

---
# aptitude install libxml2 libxml2-dev
---

コンパイルにはC++を使うので、ない場合はインストールしておきましょう。

---
# aptitude install g++
---

http://musashi.sourceforge.jp/
よりMUSASHIとモジュール類の最新版をダウンロード。
現行では

musashi-core-1.0.4.tar.gz
musashi-man-20041206.tar.gz
musashi-module-20041206.tar.gz
musashi-scenario-20041206.tar.gz
musashi-check-20041206-2.tar.gz

となっています。

まず、coreを展開してconfigure make make installします。
---
# tar zxvf musashi-core-1.0.4.tar.gz
# cd musashi-core-1.0.4
# ./configure
# make
# make install
---

setdocenc.shを実行してからconfigure、make、install。
---
$ ./setdocenc.sh
$ ./configure
$ make
$ make install
---

インストール後コマンドヘルプを表示して文字出力を確認します。

---
# xtcut -h
NAME:
xtcut version: 1.2 項目の選択

USAGE:
xtcut -f 抜き出す項目名リスト [-r] [-i 入力ファイル名] [-o 出力ファイル名] [-z] [-t]

SUMMARY:
項目リストで指定した項目を、その順番で選択する

OPTION:
-r: 項目削除
-z: 標準出力の圧縮
-t: plain text

EXAMPLES:
xtcut -f 顧客,数量,金額 -i dat.xt -o rsl.xt
xtcut -f 顧客,数量,金額 -r -i dat.xt -o rsl.xt

INFORMATION: <http://musashi.sourceforge.jp>
BUG  REPORT: <musashi-users@lists.sourceforge.jp>

#
---

次に、manをインストールします。

---
# tar zxvf musashi-man-20041206.tar.gz
# cd musashi-man-20041206
# ./Install.sh
---

次にmoduleをインストールします。

---
# tar zxvf musashi-module-20041206.tar.gz
# cd musashi-module-20041206
# ./Install.sh
---

インストールが終わったらsampleディレクトリのサンプルを実行してみます。

---
# cd sample
# ./abc.sh
# ./mvavg.sh
---

sample/outdatに実行結果が出力されるので、確認します。

次に、scenarioをインストールします。

---
# tar zxvf musashi-scenario-20041206.tar.gz
# cd musashi-scenario-20041206
# ./Install.sh
---

テンプレートスクリプトをsampleにコピー

---
# ./InstallTmp.sh
---

サンプルを実行してみます。

---
# cd sample
# ./mssRFM_tmp.sh
---

最後に各コマンドの動作確認スクリプトmusashi-checkの実行です。

---
# tar zxvf musashi-check-20041206.tar.gz
# cd musashi-check-20041206
---

check.shを実行します。これによりほぼ全てのMUSASHIスクリプトについて動作チェックが行われます。

---
# ./check.sh
---

チェック終了後に同ディレクトリに生成されるlogファイルに対してNGやERRがないか検索します。

---
# cat log | grep -E 'ERR|NG'
---

なければ、コマンドはすべて正常に実行されています。
エラーがあれば、同ディレクトリのdiffListファイル内のエラー内容をチェックしてみてください。

エラーがなければ終了です。

サンプルコマンドを実行したりしてみましたが、思ったより処理速度が速いです。データ保存に十分な空き容量さえあれば玄箱でもデータマイニング作業ができるかもしれません。少なくとも、お勉強のための環境ということなら十分だと思いました。

企画をお客様に提案するときなんかでも、提案の根拠となるデータは必要で、そのためのデータ分析ってのがけっこう成功の鍵になってたりするわけです。データの分析手法も様々あるんですが、分析のためのデータ整理にはけっこう手間がかかるんですよね。

MUSASHIみたいにデータマイニングに特化したソフトで大量のデータを素早く処理できるのは仕事上かなりありがたいです。MUSASHIも触り始めたばかりなのでこれからなんですが、もう少し勉強してから記事にもしていこうと思います。

| | コメント (0) | トラックバック (0)