wbgpagerを使うようにした
posted by jun-g at 日, 06 7月 2008 03:24 JST
前からこのブログにページャが付いていない事が気になっていたので、今更ながらページャのプラグインを使うようにした。追加したプラグインはwbgpager。
最初、エラーも出ないのにページャが全然表示されず、ちょっとハマった。使用しているPyBlosxomのバージョンが古いせいかな、と思い、一つ前のバージョン(2007-11-30)のwbgpagerを使ってみると、ようやく動くようになった。
最近ブログを放置しすぎている気がするので、久々に色々手入れしようかな。
Google App EngineでPyBlosxomを動かす
posted by jun-g at 日, 11 5月 2008 06:20 JST
遅まきながら、Google App EngineのSDKで遊んでいます。入門記事を読みながらHello worldをこなし、次にPyBlosxomを動かしてみる事にしました。
まずはアプリケーションを配置するディレクトリを作成。
$ mkdir -p ~/gae/pb
次にPyBlosxomをダウンロードして展開し、先ほど作ったディレクトリの下に配置。
$ cd /tmp
$ fetch http://jaist.dl.sourceforge.net/sourceforge/pyblosxom/pyblosxom-1.4.3.tar.gz
$ tar zxvf pyblosxom-1.4.3.tar.gz
$ cp -R pyblosxom-1.4.3/Pyblosxom ~/gae/pb/.
データ用のディレクトリを作る。
$ mkdir -p ~/gae/pb/data/entries
config.pyを環境に合わせて書き換える。
$ cp /tmp/pyblosxom-1.4.3/web/config.py ~/gae/pb/.
$ vim config.py
datadirは"data/entries"と相対パスで指定。他はお好みで適当に。
次に~/gae/pbの直下にメインとなるモジュールpb.pyを作成。
import wsgiref.handlers
import Pyblosxom.pyblosxom
from google.appengine.ext import webapp
def main():
application = Pyblosxom.pyblosxom.PyBlosxomWSGIApp()
wsgiref.handlers.CGIHandler().run(application)
if __name__ == '__main__':
main()
同じく~/gae/pbの直下にapp.yamlを作成。
application: hello
version: 1
runtime: python
api_version: 1
handlers:
- url: /.*
script: pb.py
これで準備完了。~/gae/pb/data/entriesの下に適当に書いたエントリのファイルを置いて起動。
$ dev_appserver.py ~/gae/pb
INFO 2008-05-11 05:55:30,453 appcfg.py] Checking for updates to the SDK.
WARNING 2008-05-11 05:55:30,949 datastore_file_stub.py] Could not read datastore data from /tmp/dev_appserver.datastore
WARNING 2008-05-11 05:55:30,949 datastore_file_stub.py] Could not read datastore data from /tmp/dev_appserver.datastore.history
INFO 2008-05-11 05:55:30,954 dev_appserver_main.py] Running application hello on port 8080: http://localhost:8080
よし、ブラウザからアクセス!するとエラーが出る…。
...snip...
/home/jun-g/gae/pb/Pyblosxom/tools.py in ()
1282 __overlapped = pywintypes.OVERLAPPED()
1283 elif os.name == 'posix':
1284 import fcntl
1285 LOCK_EX = fcntl.LOCK_EX
1286 LOCK_SH = fcntl.LOCK_SH
fcntl undefined
: No module named fcntl
args = ('No module named fcntl',)
message = 'No module named fcntl'
fcntlというモジュールが使えないみたいなので、tools.pyを適当に書き換えてfcntlを使わないようにしてみる。
$ diff -u tools.py.orig tools.py
--- tools.py.orig 2008-05-11 05:59:14.000000000 +0900
+++ tools.py 2008-05-11 06:00:06.000000000 +0900
@@ -1281,10 +1281,9 @@
# is there any reason not to reuse the following structure?
__overlapped = pywintypes.OVERLAPPED()
elif os.name == 'posix':
- import fcntl
- LOCK_EX = fcntl.LOCK_EX
- LOCK_SH = fcntl.LOCK_SH
- LOCK_NB = fcntl.LOCK_NB
+ LOCK_EX = None
+ LOCK_SH = None
+ LOCK_NB = None
else:
raise RuntimeError("PortaLocker only defined for nt and posix platforms")
@@ -1299,10 +1298,10 @@
elif os.name =='posix':
def lock(f, flags):
- fcntl.flock(f.fileno(), flags)
+ pass
def unlock(f):
- fcntl.flock(f.fileno(), fcntl.LOCK_UN)
+ pass
# END portalocking block from Python Cookbook.
# %<-------------------------
でもってブラウザからアクセスすると、

動いた!という事で、今日はここまで。
GEOMでRAID構築
posted by jun-g at 水, 07 5月 2008 00:04 JST
手元にHDDが沢山余っていたので、FreeBSD-7Rで構築した自宅のファイルサーバにRAIDを構築してみました。
最初、ストライプしてからミラーするべきか、ミラーしてからストライプするべきか、という素朴な疑問で悩んだのですが、RAID01とRAID10の違い:佐野裕のサーバ管理者日記:ITproという記事を読んで、RAID01とRAID10は別モノで、ストライピンググループをミラーしたRAID01よりも、ミラーしたグループをストライピングしたRAID10のほうが可用性が上である、ということがわかったので、RAID10を構築することにしました。
HDDの構成は、マザーボード上のATAセカンダリに160GBx2、増設ATAカードに120GBx4で、デバイス名はそれぞれad2~7になりました。
まずはgmirrorでRAID1のグループを3つ作ります。
# gmirror label gm0 /dev/ad2 /dev/ad3
# gmirror label gm1 /dev/ad4 /dev/ad5
# gmirror label gm2 /dev/ad6 /dev/ad7
問題なく構築できているか確認。
# gmirror status
Name Status Components
mirror/gm0 COMPLETE ad2
ad3
mirror/gm1 COMPLETE ad4
ad5
mirror/gm2 COMPLETE ad6
ad7
問題なくできているようです。次にこのRAID1アレイを束ねてgstripeでRAID0を構築します。
# gstripe create -s 131072 gs0 mirror/gm0 mirror/gm1 mirror/gm2
問題なく構築できた?
# gstripe status
Name Status Components
stripe/gs0 UP mirror/gm0
mirror/gm1
mirror/gm2
問題なし!newfsしてマウントします。
# newfs /dev/stripe/gs0
...snip...
# mount /dev/stripe/gs0 /mnt
# df -h /mnt
Filesystem Size Used Avail Capacity Mounted on
/dev/stripe/gs0 334G 4.0K 333G 0% /mnt
できた!160+120+120=400GBなのに334GBになっているけど、細かいことは気にしません。
ということで、無事RAID環境が構築できました。この環境なら突然HDDが1本死んでも大丈夫だし、RAID10なので単純なRAID1よりもパフォーマンスも良いはず(ベンチマークは取っていませんが…)。手元に予備の160/120GBのHDDもあるので安心です。ただ、6本もHDDを使っていながらたった334GBしか容量が確保できてないというのが、電気の無駄遣いに感じてしまいますが…。最近HDD安いですもんね。
以下、今回参考にしたサイト。
ルータが壊れた?
posted by jun-g at 火, 06 5月 2008 01:01 JST
昨日、突然インターネットに繋がらなくなって、原因を色々探ってみると、どうやらルータが壊れているようでした。使っていたルータは4年程前に購入したマイクロリサーチのNetGenesis SuperOPT-GFiveです。
とりあえず、代替機として保管してあったNetGenesis SuperOPT50を投入してインターネット環境は復旧できたのですが、やっぱりローカル側だけでもギガビットなルータが欲しいなーと思ったので色々物色していたのですが、どうも気に入る機種がなくて、もう一度SuperOPT-GFiveを買いなおすべきかを迷っていました。で、何気なくkakaku.comのクチコミ掲示板を見ていたところ、僕と同じような故障状況の書き込みがあり、それによると、故障の原因はルータ本体ではなく、電源アダプタの故障であるということがわかりました。
そうとわかれば!ということで、早速マイクロリサーチのオンラインショップで電源アダプタを注文してみました。週末には届くみたいです。これで直れば良いなぁ。