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
 
で確認するとかかな。

2012年5月2日水曜日

メールサーバを更新

色々資産?を整理という事でメールサーバを縮小化する計画のメモを残す事に。基本思いついた事、やった事を忘れないように書いたメモなので読み物としてまとめる気はありません。

まずは能書き編。

今まで長らくメールサーバは専用サーバを借りて運用していたけどVPSの安サーバに全面移行する事にした。これには色々背景があって専用サーバを借りた当時は自分で隅々まで管理出来るメールサーバを建てるにはこれしかなかったというのが大きく、またVPS自体は色々なサービスを試してみたがなんとなくメールの様なインフラをまかせるには信頼度という面で疑っていた部分もあって移行できずにいた。これには根拠になるデータがあるわけではなかったのでデータ取りの意味でも移行をしてみようというのが今回のストーリー。

ぶっちゃけgmailの様にある程度完成されていてSPAMも少ないサービスをベースにするのも考えてはいたのですが、もともと自前で全部やろうとした背景には自分自身のスキルアップというものもあったので100%移行するのもどうかと思っている次第。

あとはメールサーバみたいなものは基本的に設定を一回してしまえばセキュリティ的なパッチ以外は手を加えない事が多いので色々設定した内容を忘れてしまうというのもこうしてメモを残す背景の一つだったりする。

方針としてはまず

  1. postfix、dovecotをベースに考える
  2. SPAM対策もそれなりに行う(ここが一番変化する部分かも)
  3. 管理コストを最小限に減らす
  4. 今後の引越しがしやすい様にする

1) postfix、dovecotをベースに考える
こちらは結局smtpdの現状のデファクト・スタンダードは相変わらずpostfixの様だというところからです。pop3/imap4に関しては長年使っているdovecotから乗り換える理由も無いかなと。未だにqmailの方が扱いやすいと思っている人間なので(様々な理由で戻る気はありませんが)そこら辺をなんとか克服したいトコロ。たんに勉強と経験不足なだけですけどね。

個人的にはもう少し違う世代のサーバプログラムがあるならいじってみたいところだと思っていますが・・・Lamsonとか色物な感じはしますが面白そうな気もしています。求めているものが全て1パッケージになっていると楽ではあるんですが、ある程度の軽さと容易さを兼ね備えたものってナカナカ無いし・・・。

2) SPAM対策もそれなりに行う
SPAM対策に関しては別エントリーで書きます。長年色々な用途に使い続けすぎて現状完全にハニーポット状態なのでまぁ、いい加減SPAMを消すのにも飽き飽きしているしスマホで受ける事を考えると必要な物だけ来て欲しいというのもあるので。永遠の課題なのかもしれませんが、逆にメールサーバをいじっていて一番楽しいところなのかも・・・w

3) 管理コストを最小限に減らす
もともと面倒くさがりなので出来る限り簡単に管理出来る様にしたいところ。また、VPSにする事によってコストが非常にさがるので二重化も考えたいと思っています。二重化するという話になった途端に色々と問題点も出てくるのでその辺りもノウハウとして一個一個潰していきたいと思っています。

4) 今後の引越しがしやすい様にする
個人的な印象ではVPSは浮き沈みが激しく、使用開始当時に良くても品質が落ちたり会社が潰れたりという事がよく起きます。また、専用サーバのハード依存なものとは違い、サービスの仕様が年を追う毎に良くなっていくのも特徴でマイグレーションのコストを下げることによってより良いサービスに移行出来る可能性を秘めているというのも特徴と思っています。これは3番の二重化の話しとほぼ同義だったりするかもしれません。

2012年2月13日月曜日

embedded開発はじめました その2



昨日GCCをビルドしたりシコシコやっていたわけだけど面倒くさがりが早くも顔を出し結局バイナリでインストールしてしまいました。ダウンロードも含めて5分ぐらいで終了。あれ!?簡単すぎた・・・。

いや、ちょっと色々先達の情報を見ていたらWindows環境の人はSourcery CodeBench Liteとかでさくっと環境作っている訳ですよ。他にも開発環境売っている会社いっぱいあって、お試し用の廉価版とかを出している所もいっぱいあるわけです。じゃあマックも何かあるんかい!と思って調べたら。

http://www.yagarto.de/index.html#downloadmac

ああ、これでいんじゃね?って事でダウンロードしてイメージファイルをマウント。インストーラをダブルクリックしたら・・・あら不思議。簡単にインストール完了!

・・・しなかったorz よくよくドキュメント読んだらインストール先にインストーラをコピーしろだとさ。なんか単なる自己解凍形式だったみたい。というわけで、適当な所に展開をすると

yagarto-4.6.2

なんてフォルダーが出来たのでなんとなく

/usr/local/yagarto/yagarto-4.6.2

ここに配置(sudoさん使って移動してね)。その後マニュアルに書いてある通りにパスを通しておしまい。

$ vi ~/.bash_profile


export PATH="$PATH:/usr/local/yagarto/yagarto-4.6.2/bin"

export PATH="$PATH:/usr/local/yagarto/yagarto-4.6.2/tools"


これで

$ arm-none-eabi-gcc --version

とかやって反応があったら一段落。一応M4にも対応しているのを確認して一安心。

開発環境なんぞさっさと揃えて先に進みたいからとりあえず今日はこれで良しとする。もっと最適化をしたいとか色々欲が出て来たら自前でビルドも考えようと言う事で今日は気持ちよく寝れそうです。

余談ですが昼休みに購買に行ったらinterfaceの新しい号の特集がuCLinuxで思わず購入してしまいました。ついでにカメラモジュールの記事があったトラ技も。なんかタイムリーにもほどがあるでしょ・・・。




2012年2月12日日曜日

embedded開発始めました



なんか本業そっちのけな見出しです。まぁ良かろう。

という訳で、マイコンボード上に勉強がてら一から積み上げた簡単なシステムを構築してやろうというところをゴールにすえます。現状、一般的に買い易い物はarm系という事でPandaやらBeagleやらがお買い得だしAndroidとかもモリモリ動いちゃうのですが、学習用という意味でもう少しシンプルな物という事で最初のターゲットをCortex-M4に定めてSTM32F4-Discoveryをお買い上げ。

まぁ、本業関連でM4自体はちょっとDSP的な処理も出来るマイコンというイメージだけど実際のところどのくらい性能出るんよ?ってのを検証したいというのが本当の目的だったりします。Cortex-A8/A9までは必要無いけどお安く程々に色々出来そうという期待も込めて。NetDuinoみたいにArduino互換でお手軽に使える様になるとHappyですね。

まずは開発環境を整えないといけないのでメインマシンのMacBookAir上にクロスコンパイル環境を構築してボード上で何かプログラムを実行出来るというところまで持って行くのを最初の目標にします。

まず、目標のイメージですけど

<図 後で埋める>

こんな感じかな?



  1. 開発環境(binutil/gcc/gdb)を用意する

  2. JTAG用にopenocdを用意する(今後の為に)

  3. 開発が楽な様にEclipseベースの環境を揃える

  4. 簡単なプログラムを作ってターゲット上で動かす

  5. 既存のOSをポーティングする




というわけでステップ1

コンパイラを用意しましょう。バイナリで配られている物もある様ですがとりあえず全部自分でビルドしていきます。自前ビルド自体に特に意味がある訳ではないですが。

用意したのは下記のバージョンのもの。

ビルド用(newlibはredhat、mpcはmpcのページ。その他はGNUのFTPから)



  • binutils-2.22

  • gcc-core-4.6.2

  • gcc-g++-4.6.2

  • gmp-5.0.4

  • mpfr-3.1.0

  • mpc-0.9

  • newlib-1.20.0




デバッグ用



  • gdb-7.4

  • openocd-0.5.0




ビルドの手順ですが最初下記のリンクを参照してGCC4.2.4のビルドをしたのですがヨクヨク調べてみたらM4で使うにゃ4.6以降じゃないとまずそうなのでしきり直します。基本的な流れ及びbinutil/newlib/gdbのビルドはコレに準拠でいきましょう。

http://www.ethernut.de/en/documents/cross-toolchain-osx.html

とりあえず今日は負けという事でorz

そういえばM4のドキュメントも入手せねば。DSPまわりとか良くわからないし。STMあたりにあるのかなぁ?