2012年11月1日木曜日

Pythonの開発の為にvirtualenvを入れてみる

pythonの開発環境として2.7と3.2を混在させたいのでvirtualenvを入れようと思ったけどロクに設定をしていない事に気づいた。やっぱりこういうのは色々面倒なのでメモを残しておくことにする。

とりあえず使用環境にはActivePythonではなくpython.orgから落としたWindows版の物をそれぞれ展開して配置しただけ。パスも通していないのでまだpythonは実行出来ません。

まずvirtualenvを入れるにはpipなるものがあると便利らしい。パッケージ管理のプログラムみたいね。で、pythonの設定も出来てないのにどうやってやるんだヨ!って話でまずはeasy_installなるものを入れる事にする。もう既によく分からなくなってきたゾ

 http://pypi.python.org/pypi/setuptools

ここから手持ちマシンは64bit環境(Windows8 Pro)なのでez_setup.pyを落としてきてpythonの実行ファイルと同じパスにコピーする。うちの場合は「C:\app\Python27」「C:\app\Python32」って感じに入れてあるので前者のパスにコピーですな。で下記のコマンドを実行。

PS C:\app\Python27>python ez_setup.py


これで勝手に「C:\app\Python27\Scripts」配下にeasy_installが入りましたぜ旦那。物を確認したらシステムの環境変数のpathに前者のパスを追加してPowerShellを開きなおす事でeasy_installが実行出来る状態に。

さぁ、次はpip入れちゃおうか。

PS C:\Users\Ore> easy_install pip

これだけ。とりあえずこれで前準備は完了ですな。次は本命のvirtualenvを入れてみましょう。

PS C:\Users\Suguru> pip install virtualenv

とりあえずこれでokみたいヨ!早速仮想環境を作ってプログラムを書くぜって事で作業フォルダに移動して

PS G:\develop\projects> virtualenv testapp

これで作業フォルダが完成。その中のScriptsフォルダに移動してactivateすれば仮想環境に!って事で

PS G:\develop\projects> cd testapp\Scripts
PS G:\develop\projects\testapp\Scripts> activate

・・・セキュリティの問題で実行出来ませんダトッ。PowerShell初心者なので初めて知った事実。(ちなみに普通のDOS窓ではこれでイケタ)

まぁ、折角だからPowerShellからもいけるようにトライしてみるゼィ。とりあえず現在の設定の確認。

PS G:\develop\projects\testapp\Scripts> Get-ExecutionPolicy
Restricted

これは全面禁止状態の模様。じゃー全部許可したれって事で

PS G:\develop\projects\testapp\Scripts> Set-ExecutionPolicy Unrestricted

とやったら 

Set-ExecutionPolicy : レジストリ キー 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' へのアクセスが拒否されました。

ギャース。ダメじゃん。こりゃ管理権限で実行しないとダメだね・・・。で結局管理権限でPowerShellを実行してみたらいけました。が・・・なんか釈然としない物を感じますな、この方法は。せめてsudoみたいな感じで一時的に管理者権限でスクリプト実行出来るとかの方がマトモなんじゃ・・・。

なにはともあれこれで実行出来ましたよっと。

PS G:\develop\projects\testapp\Scripts> activate
(testapp) PS G:\develop\projects\testapp\Scripts>


2012年9月24日月曜日

インポートしてみた

家庭内事業仕分けの一環で不要な出費を減らす方向で、無駄に金を払っていた、はてなダイアリーのデータを全部bloggerに移動して(全部っつっても大した量無いけど)有料オプションを解約する事に。

とりあえずデータはMovableType形式でエクスポートして、一応かつてのデファクトスタンダードなわけだしそのままbloggerにインポートできるのかと思ったら全然無理でしたorz

ググると変換サービスを作ってくれている人が!感謝感謝で使わせてもらいます。そしてわかりにくい階層を辿りインポートを行う。

行う・・・。

全部今日の記事になっちゃったよorz

んんー?とりあえず中身を見ると・・・ああ・・・日付の形式の問題ね・・・。この辺はやっぱり難しいねぇ。

結局ブログの言語を日本語から英語にしてインポートしたら正常に読み込まれましたよっと。これで心置きなくはてなを解約という事でプチっと止めを刺しました。

次は何を仕分けるかな~

2012年9月14日金曜日

dovecot + Mail.appは相性が悪い?

自前サーバの話。新しいdovecotの環境に移行してもらって、今回からIMAPの使用を奨励する形にしたら・・・MacのMail.appを使っているのからメールを削除できなくなったという苦情が。

調べてみると、どうも怪しいことになっている。問題は2点ある。

まず一つ目はフォルダー名。dovecotはMaildirを使用する場合にIMAPからフォルダを作成すると階層を表す記号に"."を使ったフォルダをルートのMaildir直下に作成する模様。そしてMail.appがメールアドレス名(xxx@example.com)を含めたフォルダを作った為、実際のフォルダとしてはそれっぽいものが作られてはいるけど、dovecotが間違えて解釈するためにIMAP的には意図したフォルダが実際には無い様に見えるという状態になってしまうらしい。

そして二つ目がインデックス。どうもdovecotはインデックスファイルを作成しておりそれを優先的に使用してIMAPのレスポンスを返すらしい。なので実際のフォルダ構成とこれが食い違うとエラーになってしまう模様。

とりあえずここまでは状況からの推測ですが、また間違ってはいないと思います。根本的にはMail.appの問題というよりフォルダー名として"."を指定された際にちゃんとエスケープしないdovecotの実装に問題がある気がするけど実際それをどう回避するかという話になる。

結論から行くと今回はdovecotのパッチ作るのも面倒なのでとりあえず後ろ向きな方向でThunderbirdに移行してもらった。 もちろん使い手が意図的に"."の入ったフォルダーを作成したらまた同じことになると思われるので恒久対策ではないけど、管理者がMail.appを常用しておらず挙動が読めないので今後のサポートを考えると事故の少ない方向に振った次第。身内しか使っていないからこその対応ですが。

ただし二つ目の様に、すでに不整合が起きているのでThunderbirdにしても特定操作がエラーになってしまうのは変わらない。最初よくわからないのでsshでつないで手動でフォルダをリネーム or 消してクライアントから読み直せばokダロっと思って試してみたのだけどindexとの不整合が発生し

Mailbox doesn't exist XXXXX

こんなエラーが出てフォルダーへアクセスする際にダメでした。インデックスファイルらしきものを削除して再構築を促してもNGだったりしたのが非常に謎ですが。

とりあえずは後ろ向きな解決方法で不整合が起きたフォルダは大本のフォルダはssh経由でサーバから手動で削除し、メーラから同名のフォルダを作りなおし、クライアントから再度削除していく事によって整合を保つことが出来た。またゴミ箱(Trash)等クライアントとして特殊なフォルダはアプリ側ではねられるので、ssh経由で手動でMaildirを一つずつ作成しなおした。

というところで一応Thunderbirdからは問題なくいけるようになったんだけど、dovecotもMail.appも挙動を理解していない為に今回の様な対応になったので一度これは再テストしてみた方が良さそうという事で今度追試を行います。

2012年8月21日火曜日

U24EにWindows8を入れてみた

ASUS U24EにWindows8 Proを入れてみたメモ。
合わせてSSDへの換装を行っています。

1.バックアップをとる

まぁ、好きな様にとればよろしいかと。今回はディスク差し替えてオリジナルディスクを残すので本当に重要と思われるデータのみバックアップをとっています。

 

2.インストールディスクを作る

このノートPCは光学ドライブがついていないのでUSBメモリ(今回使用したのは4GB)にWindows8のインストールイメージを焼きます。焼くのはMS純正の「Windows 7 USB/DVD ダウンロード ツール」をMSのサイトから落としてきてインストール。ツールを立ち上げてイメージデータとドライブを指定するだけ。

 

3.SSDに換装する

本体の電池を外し、裏側のネジを一本とったらパキパキっと蓋を開けるとHDDとメモリ等が見える状態になるのでネジを3本外してHDDのマウンタを引っこ抜く。そして四隅のネジを外して換装します。この際接着されたスポンジが切れるけどまぁキニシナイ。あとは元に戻して終了。

 

4.USBメモリで起動

USBメモリを差してACアダプタつないだら電源ON。Modern UI(旧Metro)なアイコンが出たら正常にUSBから起動出来ている証拠。あとは画面に従ってインストールしましょう。

 

5.USBメモリを抜く

一回PCが再起動した際にUSBメモリをさっと抜きます。そうしないとインストーラが再度立ち上がると思います。まぁインストーラが立ち上がったとこで抜いてリセットしてもOK。あとは本体側から立ち上がってセットアップ終了。

 

6.不足したドライバを入れる

デバイスマネージャを確認したらBluetoothとメモリカードリーダのドライバが?マークになっていました。というわけで不足分を自分で入れます。

  • Bluetooth
こちらはデバイスマネージャで?になっているものを右クリックして「ドライバーソフトウェアの更新」を選択すると勝手にネットからドライバを入れてくれます。
  • カードリーダ
ASUSのU24Eのドライバのサイトからダウンロード
  • タッチパッドドライバ
タッチパッドそのものは動くのですがジェスチャー系を動かすためにおそらく必要という事でカードリーダと同じところからインストール。

とりあえずこれで全部見た目動いているように見えるのでOK。不足分がありそうだったら追記します。

7.ユーティリティを入れる

これは好みが分かれると思うので参考までに。現状ガジェット系とか動かないものもあったのでWin8に正式対応するまで様子見たほうが良いかも?


  • ASUS Splendid Video Enhancement Technology
モニタの色温度を設定するユーティリティ(まぁ色にこだわらなければいらない)
  • ASUS PowerWiz
バッテリ状態を表示するガジェット
  • ASUS USB Charger Plus
PCの電源を切った状態でUSB給電の設定をするユーティリティ
  • ATKACPI driver and hotkey-related utilities
ホットキー(Fnキー)を有効にするドライバ、ユーティリティ

2012年8月8日水曜日

python-ldapをWindows環境に入れる

メールサーバのアカウント管理をLDAPでやっているけど管理ツール無しでLDAPクライアントからいじるのが苦痛になってきたのでpythonで簡単な管理プログラムを作ってみることに。

ある程度の骨組みは出来たのでLDAPとのコミュニケーション部分に着手しようと開発環境にpython-ldapを入れようとしたらこんなエラーが。

ActivePython 2.7.2.5 (ActiveState Software Inc.) based on
Python 2.7.2 (default, Jun 24 2011, 12:22:14) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ldap
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\app\Python27\lib\site-packages\ldap\__init__.py", line 22, in <module>
    from ldap._ldap import *
ImportError: DLL load failed: %1 は有効な Win32 アプリケーションではありません。
dllの問題らしいという事まではすぐわかったんだけど、その先がさっぱりわからなかったんだけどふと64bit版のpythonを使っていることが問題ではないかという事に気付く。

python-ldapをオフィシャルな配布元にはWindowsの64bit版が無い気がするので下記の場所からamd64版を入手して問題なくインストールが完了。感謝。

http://www.lfd.uci.edu/~gohlke/pythonlibs/

Codecとかでもそうだったけど64bitと32bitの問題はしばらくはまりそうだねぇ。

2012年8月7日火曜日

Greylistingの落とし穴

メインサーバ(廃棄予定)+構築中のサーバ(次期主力。SPAM対策だけ未構築)の構成で動作確認をするのも兼ねてMXを両方登録。この状態でしばらく忙しくて放置プレイしていたのですが、一息ついたので設定を再開。最後に残っていたGreylistingのサーバの選定、設定してMXの優先度の切り替えを実施。Thunderbird君に新しいサーバの設定を作ってつなぐと・・・。

・・・一気に数千通のメールが。

いや、今DNS切り替えたばかりだしそんな馬鹿な・・・。もしかしてメインサーバが瞬断していてセカンダリになっていた構築中のサーバにデータが流れていた?(アカウント情報は全て移行済みだったのでメールが来たら受けられてしまう状況)

よくよく見てみると割とコンスタントにメールが届いている様子。一日だけとか集中しているのであれば上の状況かもしれないがオカシイ。

・・・もしかしてGreylistingのせい!?

Greylistingでお預けを食らった際にサーバがダウンしていると判断してMXの二番目にいっちゃっているのが原因な気がしてきた・・・。これって単純に二台構成の二重化してると常にそういう状況が起きてしまいそうな予感。ちょっと勉強不足で正しい挙動がどうなのかはわからないけど、実際にそういう動きをする人たちがいるのであればマズイ。これは・・・どうしたらいいんでしょ!?

もちろん二番目にもGreylistingの設定をしていればそっちでもお預け食らうわけですがそのままバックアップサーバ側に配信されてしまっても困るわけで二重化の仕方をもう少し考えないといけない気がしてきた。

個人的な理想のバックアップサーバはメインサーバがダウン中に受信だけして、メインが復帰後受信したものをメインに送りつけてくれるという動きをしてくれるとクライアントは一か所のPOP/IMAPの設定で良いし幸せだと思うんだけど、メインサーバがぶっ壊れた時に主力として動ける必要もあるわけで・・・世の中のメールサーバはどういう風に二重化しているんだろうか。

2012年6月20日水曜日

vimにGUI関連はいらない

vimを普通にmake installしてしまうとGUIな物たちが勝手に入ってしまうのを防ぐ方法

cd /usr/ports/editors/vim
sudo make WITHOUT_X11=1 install
sudo make clean

で良いらしい。サーバ用途に設定する場合はいらんコンポーネント入れたくないのでもっとお手軽にmake configで指定できるようにして欲しいなぁ。

依存関係をチェックした感じ正しいかわからないけど上のオプションを設定するとportsにあるvim-liteと同等になる様なのでこちらを使って入れるべきなのかもしれないネ。

とりあえずインストール前に

make all-depends-list
 
を習慣づけるのが良いかも。もしくは
 
http://www.freebsd.org/ja/ports/index.html
 
で確認するとかかな。