WordCamp Nagoya 2010

WordCamp Nagoyaにきている。なんとなくめもめも。

開会は10:00からだけど、早朝セッションとして9:00より、google analyticsの活用方法のセションがあった。
google analyticsにでてくるユニークセションのセションは、30分を一区切りにして統計を取られるらしい。 <- 30分に一つっていうのはどこかで決められてるのかな
離脱ページの滞在時間はゼロで計測される
ユニークユーザもわかる <- UUって取れないんだと思ってた。
時間ごとの統計が取れる <- 何時台が一番アクセスあるよ、とかとか。
接続地域がわかる <- japanってのをクリッククリック アドバンスドセグメントについて -> ブラウザごとの挙動がわかるよ!
-> UU取れないよ!
GreaceMonkey <- 通称グリモン -> ドメイン配下のページで構成を取れる
-> ページタイトル + URL っていうレポートが便利だね! <- なんかこれ専用のスクリプトが転がってるらしい

まずは一コマ目。二階にて。
大曲さんのwp3.0について。
カスタム投稿タイプ、カスタムタクソノミーについて。
カスタムタクソノミーについての具体例があったり。
なるほど、いままではどう使っていいのかわかんなかったけどこれをひとつの参考にしてみよう。

次の二コマ目、二階にて。
wordpressによる、マルチサイト構築事例
-CAS認証とマルチサイト作成機能、マイクロブログとの連携- by sakurai san

第一部
マイクロブログってtwitterに代表されるような、ちょっとしたことで個々人の情報を発信していくサービスのことらしい。初耳!
cas認証 – Central Authentication Sytem – 最近流行りのシングルサインオンシステムぽいもの。名市大のADのldapで認証かけるらしい。
WPをCAS認証にした理由は、wpのプラグインがすでに充実してて、認証系に関わるプラグインがすでにあり、そこに手を加える形で実装できた。
櫻井さんのプラグインによって、新規にCASからきたユーザに対して、通常はユーザ固有のブログに管理者権限があるが、既存のブログに対しても権限を付与できるようにしたぽい。

現状の問題点として、スケーラビリティ、1ユーザが1blogをつくると6テーブルぐらい増えるから、これがN人だとちょっとマズー <- 確かにマズー

第二部 マイクロブログとの連携について

twitterに代表されるソーシャルメディアの新潮流。そんなサービスを気楽にたてたい!そんなあなたにstatus.net!外部に公開されないプライベートなマイクロブログを手軽に構築可能。wpと連携。 -> アカウントの同期がとれない <- そういえばtwitterとwpの連携ってあるのかな、やっぱあるよねですよねー。
ストレージとしてのwp。ハッシュタグをカテゴリとかタグとしてつぶやいた内容をwpにまとめて保存していくような感覚。

三コマ目

hokoriさんによるtwenty tenのテーマについて。

テーマの最小構成はindex.phpとstyle.css。style.cssはフォーマットが’決まってたりするよ。

カテゴリとかって、適用される優先順位があるよ! <- スライド参照

このtwenty tenになってから、カスタムメニューがいじれたり、テンプレートパーツってよばれるテーマが適用される。結構フクザツ。

wp_enqueue_script <- jsを適宜読み込みしてくれる関数らしい。便利そう!

アイキャッチ画像を出す、投稿サムネイルっていう機能があるらしい。2.9ぐらいから実装されたそう。

twenty tenはloop.phpがキモらしい。こいつがループ関連の大元で、結構大変そう。

四コマ目

レンタルサーバ座談会

四人のパネリストの方々の座談会。VPSについての話が結構あった。やはり最近の流行に敏感なのかな~。

サーバに関する質問で、500円以下のサーバを利用しているユーザがかかりいた。最近のレンサバって安いんだな、っていう印象を強く受けた。

なんかサーバっていえば2000円~3000円のイメージがあるけどやっぱり最近は違うみたい。

hiphop phpのコンパイル済み環境を用意されてたりしたらうれしいのにな、ってこれは後で言ってみようかな。

五コマ目

プラグインフックの仕組みとカスタマイズ  by 水野さん

buddypressとsubscribe2

buddypressの運用実績等々。スローフードジャパンってのを作ってますとか。

subscribe2はメルマガプラグイン

-> ユーザ登録時、メルマガ登録を行うことができる。

-> 記事投稿->メール配信

buttypressとsubscribeを例にとってフック改造の例を説明。

-> buddypressを使うとそのままではsubscribe2のフックを飛ばして、独自の登録フォームを用意してしまう。

-> だったらデフォルトでregister_formっていう関数へどんなフックをしてるか調べて、それをbuddypressのやつでフックしよう!

プラグインを直接書き換えたりしたら、プラグインの更新タイミングで大変だよね。

ラスト Lightning Talk

一人目は百合子さん。昨日行われたword real campについての報告

[email protected]タマイズのススメ。

Front-end Editor。記事をクリックすれば編集できて楽ちんだよね。 <- 新規投稿はできないよ!

上にメニュー出してあげればユーザが操作しやすいよね。 <- 新規投稿できるよね!

編集ボタンは忘れずに <- 今つかってるやつでも付いてて便利。

三人目はカスタムフィールドテンプレートの中の人。

編集画面で編集の手助けをしてくれるような、ラジオボタンとかチェックボックスを簡単に追加できるような環境をプラグインで実現。

php.iniみたいなスタイルでテンプレートコンテンツを定義。

四人目の方。香川より来られているらしい。

wp_enqueue_scriptを使ってjsの読み込みを最適化しよう。cdnとかどうするのかな。

五人目はおでっせいさん。

wordpantsについての’紹介。 wordpantsってのは電子書籍をwordpressでつくるものらしいです。

結構デキがいいっぽい!っぽい!プロっぽい感じに仕上がってる。

六人目はwordbench名古屋のPMさん。wordbench名古屋についての説明。

七人目はめ組のmeganeさん。

膳テーマについての説明。twenty tenの子テーマ。

syslog-ngでプログラム名が与えられたログをはき出す

syslog-ngでプログラム名が与えられたログをはき出すようにしてみた。

そんでプログラム名をファイル名とする。

filter f_programs { program(".+"); };
destination d_program { file("/usr/log/$HOST/$PROGRAM.log"); };
log { source(src); filter(f_programs); destination(d_program); };

設定でdestinationの名前をprogramにしてたら、どうやら予約語らしく、syntax errorを吐かれてしまった。

今回実は、これで拾わせたいログがあった。

それはphpのerror_log。php.iniでerror_logをsyslogにして、そのホストでsyslog.confで*.* @logserveって感じにして、上の設定で拾うことにした。

このとき、*.*で拾いはした物の、うまくsyslogが送れてるかなどなど、確認したくてもうまくできなかった。

そもそもsyslogってしたのはいいけど、ファシリティは何でおくられるの?っていう疑問が。

自分で調べたけれどもわからず、スペシャルな先輩に訪ねてみると

「userあたりじゃない?」

とのアドバイスが。確かにuserファシリティでした。一般的なアプリケーションで使うのはuserを使いましょう、ってことらしい。manチラ見したらあったとか、さすが先輩、神っす。

テスト用に使ったのは

logger -p usr.info -t php hogehoge

って感じでやってました。

最後にうまくログがとれていることを確認。

FreeBSDのシステム構成を複製する

FreeBSDのシステム構成を複製する。

複製と言っても色々な状況が考えられるが、おおむね以下の目的のために複製してみよう。

  • それなりの台数(3台を超えたらもう面倒)を扱う。
  • →それなりの台数だからOSのインストール、パッケージのインストールが面倒
  • 同じ設定(厳密には同じ*ような*設定。hostname, ipaddressなどは違う。)を使う。
  • →仮想マシンならイメージのコピー、実マシンならddとかで複製されたHDDイメージを流用する。pxeブート環境もしくはUSBでディスクレスってのもいいよね
  • →→となるとできる限り容量を抑えたい。usbに収まるなら2GB以下、pxeでもそれぐらいが望ましいな~。
  • パッケージ管理を簡略化したい。追加、削除、バージョンアップを一台のマシンで済ますことができないか。
  • →CPUタイプ、FreeBSDのバージョンが一緒ならバイナリの複製でだいたい動く。親元マシンにパッケージを追加したら他のやつでも使えるといいな。
  • →→ってことは/usrあたりをnfsで共有するとだいたいオッケー。rc.confに起動オプションを与える必要はあるけどまぁそれはやろう。
  • →→昔は/etcに設定ファイルを置いたりしてたけど、最近は全部/usr/local/etcに統一されてるから楽ちん。
  • →→まずいことがありそうだけどよくわからない。
  • パッケージ情報は見たい。pkg_infoしたら見れるようにしておきたい。

ここで、親マシン、子供マシンとマシン群を分ける。親マシンはnfsで共有される側のnfsサーバとなるマシン。パッケージの新規セットアップとかはこのマシンで行う。

子供マシンは親マシンを参照してnfsでマウントする側のマシン。

親マシンのセットアップ、子供マシンのマスターセットアップ、子供マシンのコピー、という順序で行おう。

ということで、親元マシンをまずはセットアップ、nfsの設定を行って、その後子供マシンを作成する。

今回はVMWare ESXiを利用したよ。

まずは親元のマシンでnfsの設定を行ってやる。

/usrごと引き渡そうと思ったけど、/usr/homeと/usr/portsは別のホストでnfsを利用しているので別個に/usr/以下のディレクトリをnfsで共有してやることにした。

親元マシンが/usr/portsとかも管理するなら/usrまるごとでもいいかも。

nfsの設定

nfsの設定で色々とはまってしまった。(/usr/homeをマウントしたまま/usrをexportしようとしたり、killall -hup mountdをしてなかったり・・・)

次に子供マシンのセットアップ。

次いで子供マシンをセットアップ。

このとき最初に、/usrとかなしで、/を親元からコピーすれば良いんじゃないか、という思い立つ。

/usrのほとんどを親元マシンからnfsでマウントするわけだから、起動に必要な基本的なファイル群だって別に必要ないんじゃないか。カーネルとか/bootとかその辺だけあれば起動できるんじゃないか、と。

結論からすると、できるにはできるが趣旨に反してくる上に面倒、ということでした。

まず起動まではこぎ着けることができる。FreeBSDのsysinstallからfdisk, label editorをつかって/, swap, /tmpのみ作成。Fixitを利用して親元マシンから/をdump and restoreしてコピー。

これでひとまずシステム自体は起動した。/varを作って/var/dbディレクトリがないとちょっと起動がしんどかったり、/ファイルシステムに/usr/以下のディレクトリ群を手動で作ったり、この時点で面倒になってしまった。

そんでいざ起動させようと思ったのだけど、dhcpでipaddressをもらう際に/usr/sbin/dhclientが必要だった。しょうがないのでこのバイナリだけコピーして動かしてみたら今度はchrootが必要だって怒られた。この時点で諦めた。

だったらまぁ、普通にインストールして、その上から上書きする形でnfsでmountする、ってのがお手軽だった。うん。

ということで普通にセットアップを行う。HDD容量は3GB。仮想マシンで作成。

変わった点といえばラベルの付け方。/usrと/varにほとんど割り振らないようにしてみた。

/に500MB, swapに1GB, /tmpに1GB, /varに30MB, /usrに残り、って感じ。

インストールが完了したらipアドレスを取得してnfsでマウントさせる。

fstabの内容が多い。

これで完了。pkg_infoしてみたら確かにいろいろ入ってるように見える。

注意すべきは/varについて。syslogが握っているファイルが実際の/varだったり(このときは/varを実HDDでマウントした状態であとからnfsでマウントしたので握りっぱなしだった)、nfs上の/var/logを子供のマシン側で書き換えたりしそうな点。この点は/etc/syslog.confでログをsyslogサーバに送ることにする。

またログローテートも止めておかないとまずそう。うん。共有するのは/var/pkgだけでもよさそう。/var/db/mount*とかも書き換えられちゃうしね。その辺は今後の様子を見ながら、ってことで。

やっぱり/varは共有しない方がいいっぽい。/var/runのpidsとか共有したってしょうがない。/var/db/pkgだけ共有するように変更した。

また、子供マシンの複製を行う際には、/etc/のrc.conf, syslog.conf, sysctl.conf, crontabあたりを先に書き換えておこう。タイムゾーンの設定も忘れずに。

以上。

FreeNAS+iSCSIの性能とか

うまく投稿できてなかったみたいで再投稿。

このときの構成はちょっと忘れちゃったけど、たしか1TぐらいのHDDを四台つけたFreeNASに、GbE一本でwindows 7からアクセス。

FreeNASのベンチマーク HD Tune のRandomAccess Write うーん
FreeNASのベンチマーク HD Tune のRandomAccess Read。 うーん。
FreeNASのベンチマーク HD Tune のふつうのベンチ。 最初ばたついたけど安定。でもこれって50MB/sってことだよね。100MB/sは出して欲しいところ。
FreeNASのベンチマーク HD Tune のRandamAccess。 結構良い数字なんじゃないかな?かな?
FreeNASのベンチマーク HD Tune のFileBenchmark。 HDDをNTFSでフォーマットしての実験。見方がよくわからない。
eeeee
FreeNASのベンチマーク。こちらはVCSWとかの画面。すごい数でてる。こんなの見たことないぐらいに。まだまだHDDを詰めてやってもiiyo、って感じなのかな。
FreeNASのベンチマーク。ファイルの連続書き出し中のCPU使用率。このサーバのCPUはxeon3330かな?結構CPUもってってる。もっともってっていいんだけどな~。
FreeNASのベンチマーク。 こちらはHD Tuneから連続書き出しのテスト中のfreenas上でのiostat。
FreeNASのベンチマーク。HD Tuneからファイルベンチマークを取っているところのFreeNAS上のiostat。 ディスクアクセスがない時間帯はキャッシュに貯められたりするんだろうか。

Filesystem is not clean – run fsck

Filesystem is not clean – run fsck と出てしまってうまくマウントできない。

やろうとしたのは


>mount /dev/ad6s1a /tmp/hoge

WARNING: R/W mount of /tmp/hoge denied.  Filesystem is not clean - run fsck

で、その前にサーバ強制終了とかあったので、/tmpがいけないのかと思って/tmpをfsckする。

それでも同様のエラー。

で、どうやらmountしたかったHDDにエラーがあったらしい。

>sudo fsck -y /dev/ad6s1d
** /dev/ad6s1d
** Last Mounted on /tmp/hoge
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
950 files, 263812359 used, 209203472 free (1064 frags, 26150301 blocks, 0.0% fragmentation)

***** FILE SYSTEM MARKED CLEAN *****

これでうまくマウントできた。

Error reading master configuration

mysqlでError reading master configurationっていわれてしまった。

ある日レプリケーションが壊れた。しょうがないからハードコピーでdata dirを復元。レプリケーションの設定をすべくchange master toを入れたら下記のエラーが。

ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log

で、いわれた通りにerror logを見ると今度はこんな。

101002  5:12:51 [ERROR] Error reading master configuration

こんなんだったらコンソールに直接書いてくれよ!って感じです。

で、ググってもなかなか情報が見つからず。でもようやくみつかったのが、

you should probably just resync your slave. If it hasn’t run for over a
month then there’s not a lot of point in trying to start it up. Even if you
did start the slave (which seems doubtful) you’d have over a month’s worth
of commands to make up.

You can tell mysql to not keep relay logs that have already been used. Just
copy over the masters’ files, reset slave and master and start up the
slave.

http://www.listsearch.com/MySQL/index.lasso#369147

これの通りにreset slaveするとうまくいきました。

PC-BSD8.1にFireFoxのGoogleToolbarをインストール

PC-BSD8.1にFireFoxのGoogleToolbarをインストール。

でもこれ一筋縄じゃいかなくて、linux用だからfreebsdはダメって怒られる。

一旦パッケージを展開して、なかにあるプラットフォームの文字列を追加してやるといいらしい。


% wget http://dl.google.com/firefox/google-toolbar-linux.xpi
% unzip google-toolbar-linux.xpi
% vi install.rdf

<!–<em:targetPlatform>Linux</em:targetPlatform>
<em:targetPlatform>linux-gnu</em:targetPlatform>–>

<em :targetPlatform>FreeBSD</em:targetPlatform>
<em:targetPlatform>freebsd-gnu</em:targetPlatform>

Googleツールバー for LinuxをFreeBSDに | Ultraひみちゅぶろぐ

ほぼこの通りでいけるんだけど、二点、うまくいかないことがあった。
一つはファイルのドラッグアンドドロップでうまくいかなかったこと。でもこれは何度かやってるとなぜか解決した。
もしくは適当なwebサーバにあげてもオッケーだった。
もう一点はsigningのエラーがでてきた。

error -260 “signing could not be verified”

これはさっきの展開したxpiのなかにあるMETA-INFを削除することでうまくいった。

Deleting the META-INF directory removed the signing. Thats why it worked.

error -260 “signing could not be verified