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で思わず購入してしまいました。ついでにカメラモジュールの記事があったトラ技も。なんかタイムリーにもほどがあるでしょ・・・。

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のページ。その他はGNUFTPから)

  • 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あたりにあるのかなぁ?

HDD換装

ついでにこれも書いておこう

ずっと使い続けていたメインマシン(MacBook(Core duo 2GHz))のHDDが手狭なのを外付けHDDで凌いでいたのがだんだんもう億劫になってきたので新しいHDDを購入。恐らくドイツで最後のPC系の買い物になると思う。

いままでHitachi党だったけど安さに負けて今回はWDに挑戦。過去にヘッド退避が頻繁すぎて即死したことがあるんでずっと手を出してなかったけど・・・どうなるやら。熱的には前のHitachiの方が熱かった感じがするので結果としては良い選択だったのかもしれない。

しかし、Macの移行は楽ですな。ディスクツールから復元して入れ替えるだけ。価格.comでマックに入れられるか否かなんてスレッド立ってたけど悩むような次元じゃなく普通に簡単に動いてます。

で、今まではなんと120GBで頑張っていたわけですが(最初は確か60GBのディスクが入っていたような)どうせならもうでかいの入れてしまえと一番大きい750GBをお買い上げ。1TBもあったけど12.5mm厚ということで対象外デス。
つか前のディスク比でも容量6倍ですな。ウハウハ。

これで気兼ねなく写真編集とかも出来るってなもんです。やっぱり内蔵ディスクに入っている方が気楽に編集出来るしイイ!

移転作業中

久しぶりにこのブログも再開。なんか見た目色々変わってるなぁ。

というのもドイツからの帰国も決定し、組込みばかりやっていた生活からこっち系に戻る可能性もあるので、リハビリがてら分散していた古いサーバを1サーバに集約する作業を開始した為。キープに近いアクセスの少ないサイトが多いのでさくらのVPSの試用も兼ねてこいつに集約する事にする。

当初は前から気になっていたnginxを使ってサーバを構築するつもりで色々やっていたけど、どうもこの人何でもこなす優等生という感じではなく特定用途に特化している感があり、不可能ではないけど実現するには色々設定が面倒くさそうで(IP一つにバーチャルホストで複数サイト、複数ユーザがいる状態で古いcgiやらを動かすなんてのをやっていた)結局lighttpdで日和ってしまった。

まぁ、お陰さまで数日頭を抱えて楽しんでいた悩んでいた問題がインストール、設定を含めてものの30分程度で解決。動作も良好ということで結果オーライですか。まぁ、勉強になりました。

nginxは使い方も大分理解してきたので別件に使ってみようと思います。

しかし、サーバの整理は面倒臭がってやってなかったけど、この5年放置していたと考えると凄いお金を無駄にしていたな・・・。今後は気をつけよう。

Connection refused

唐突に復活するこのブログ。

はっと気づいたら(Webサーバとしては)全然使っていない鯖のApacheにつながらなくなっていた。
ログを見てみると

[warn] (61)Connection refused: connect to listener on 0.0.0.0:80

という出力が多発した後にログが途切れていた。
ぐぐる先生曰く

http://www.cyberciti.biz/faq/connection-refused-connect-to-listener-on-000080/

という事で設定を下記のように変更。

# vi /usr/local/etc/apache22/httpd.conf

Listen 80

Listen :80

に。これでしばらく様子をみます。
しかし、ずっと放置していて1年位普通に動いていたのに突然ダメになったのはなんででしょうな・・・うーむ。

SPAM対策あれこれメモ

現状のスパム対策に関する頭の整理を兼ねたメモ。

今のところ色々な方法が考案されているけどS25Rに関連する話(greylistingtarpittingを組み合わせる)が効果高そうな気がしていて前から試したかったのですが面倒でやっていなかった。が、今の環境ではWebメールからシコシコ読む事が多くなったのでスパムを捨てるのが面倒くさいという事で効果測定をする事に。その前に現状よく語られるSPAM対策の個人的な理解と見解を。

HELO
ここの情報をどこまで信用してフィルタしてしまっていいのか疑問を感じる。

RBL(DNSBL)
ブラックリストの仕組みとしては有用だと思うけど、IPベースでフィルタするので巻き添えを食らってメールが届かなくなる事があるのがコワイ。でも自前で作るとメンテが面倒くさい。

Bayesian filter
話題になり始めた頃に試したが、効果は非常に高い気がした。ただし、100%間違えなく振り分けるという事は不可能なので、結局誤認識して捨てられていないかという所謂ゴミ箱漁りをしたくなるので本末転倒だと感じている。実際友達に送ったメールがそういうのに引っかかってて連絡がつかなかったなんて事もあったので余計な気を回す必要が増えて嫌い。個人的な見解ではサーバ側でやるよりもユーザが勝手にやれば良いと思う。とはいえこれはPOPでとったメールに対しては有効だけど、IMAPだとユーザ側でやるのはちょっと面倒かも。

S25R
スパムの殆どはプロバイダから送られてくるという観点でのもの。というわけでプロバイダから送られてくる物は殆どひっかけられるわけだけど、自宅サーバの人からの物も捨ててしまう。個人的な見解では動的IPでメールサーバやる事自体がナンセンスだと思うし、そんなもん捨ててしまえとは思うけどネ。結局のところgreylistingの前フィルタとしてしか意味が無いと思っている。

tarpitting
やりたい事はわかるけど、息を止めている時間をかなり長めにしないと効果が無さそうなデータが出ている様だし、サーバ側の負荷になるので正直好みではない。積極的に導入する気がしないので今後実験サーバをたてる際にでも見てみたい。と言う事でこれはまだ試してません。

greylisting
今回試したい目玉だった。一見さんは再送を強いるという事で着信が遅くなってしまうのが問題。ただし、普通のサーバなら不達は無いし、一回しかトライしないサーバだとしても送信者にエラーくらいは返すだろう。S25Rを使って怪しい物だけに適用する事でマイナス部分をかなり減らせる。また、SQLGrey等だと自動的にリストを作ってくれるので面倒が少ない。

番外編IPでフィルタ
アジア系とか南米系とか自分と関係無いだろうと思っているIPを根こそぎ拒否してしまうもの。正直気持ちはわかるけど過激すぎる気がする。酷いところは日本以外のIPは全部遮断とかもあったし・・・。ホームページでもこういうフィルタをしているところがあって情報を収集している際にはねられて一寸イラっとした事もちらほら。ある意味鎖国だよねぇ・・・日本人らしい対応だと思うけど。うちの環境では出来ない方法だな。


まぁ、とりあえずこんなところかな。

正直どれもリスクがあって手放しにこれだっという対策は無いと感じている。S25R+greylist、そしてサーバとしての自前のブラックリストを簡単に管理出来る仕組みを入れるというところがリスクを考えた場合の落としどころとしては良いところかなと。

で、実際にpostfix+sqlgreyを設定してみた効果はというと日本のアダルト系、出会い系のスパムはgreylistでほぼ壊滅に追い込めた。が、海外系のバイアグラだのなんだのってメール、しかもbotネットから来ていると思われるメールは再送をきちんとやってくれてスルーされてしまって結局期待してたほど劇的な効果は無かった。

この結果から言える結論としては

  1. 日本のSPAM業者は効率向上の為に真面目にサーバをSPAM向けにチューンしている。そのおかげでgreylistやおそらくtarpitが非常に有効。
  2. botネットを使う様な連中は物量で攻めて来るので1の様なチューンをしておらずノーマルなサーバから送っている為に普通のサーバと見分けがつかない為すり抜けてしまう。


こんなところだと思う。で1は対策しやすいとして2に関しては頭が痛いところ。見かけ上普通のサーバなのでブラックリストを使う位しか思いつかないけど、自動化出来ないといたちごっこだし、同じホストからの再送もそれほど無いので費用対効果が薄い感じ。同じ内容を複数のサーバから送ってくる(botネット)からそういう部分でフィルタは出来る気がしているけど、やっぱりコンテンツフィルタは抵抗があるな・・・。ブラックリストの仕組みにアドレス、ホストだけじゃなくて内容も保存しておいてコンペアとるなんてのも良いのかな??

もうちょっと様子見&統計をとってみたいと思う。

はじめの一歩 Part2

終わりなんて書いてみたけど、書き終わってみたらユーザー情報の更新が終わっていた。素晴らしい。

というわけで先に進もう。一応実機で自作プログラムを動作させるまでは終わったけど、先ほど書いたサイトの情報はいくつか間違っていたので補足。

基本的な流れは問題無し。ただし、証明書をキーチェーンアクセスで登録する際にシステムで登録せよと書いてあるけど、これはログインにしないとXcodeが探しにいけずにprofile doesn't match any valid certificate/private key pair in the default keychainなんてエラーになってしまった。というわけでログインにして下さい。(何故かシステムの方に登録した物を削除したいのにいくら削除を選んでも削除されなかった。ロックははずしてるのにな。)

余談だけど、オーガナイザーのDEVICES>[iPhone名]の中のProvisioningに追加のプロセスで追加のタイミングでは何も表示されなかった。これは現在β版のSDKをつかっているからかもしれない。まぁ、気にせず進むべし。

それから、App IDは適当にと書いてあるけどDescriptionは確かに名前か説明を書いておけばいいので適当で良いけど、Bundle Identifier (App ID Suffix)ドメイン名+作ってるアプリ(プロジェクト)名にしておくのが無難。別に何か適当にcom.example.testappとか固定でも良いけど。

あとは手順通りにしておけばXcodeのメニューのプロジェクト>プロジェクト設定を編集の中のビルドタブ>Code Signing>コード署名ID>Any iPhone OS Deviceのところで自分の登録した物がみえているはず。それを選択して一端ウィンドウを閉じる。

次に同じくプロジェクト>アクティブターゲット"HOGE HOGE"を編集を開きプロパティタブの識別子を先ほどの開発ページのBundle Identifier (App ID Suffix)に登録した物で置き換える事で作業終了。