我が家の nasne 無線化環境のその後 2016
2012年の年末に思い立って購入し、設置したnasne。
あれから色々とありました。
いまは2016年末なのでかれこれ4年も利用していますが、nasneさんはまだまだ現役バリバリで生き続けています。
しかし、無線環境は変わりました。
自分のため、世のため人のためにも変遷の歴史を投下しておきます。
無線ルーターの変更
環境構築後、家の中での利用は概ね問題は無かったのですが、外出先からCHAN-TORUを利用したリモートテレビ予約をしようとすると、nasneが見つけられないことが度々発生していました。
設定の見直し、LANケーブルの変更などを試みて改善を図ったのですが、いずれも一時的に問題が解消するものの、何度も再発を繰り返す状態に。
これはもうルーターがおかしい。もういっそBufflo製品やめる!と思い立ち、衝動的にNEC製ルータ PA-WG600HP を購入しました。
これが2014年8月の出来事です。当時のお値段は6000円未満。
- 出版社/メーカー: NEC
- 発売日: 2013/07/20
- メディア: Personal Computers
- この商品を含むブログ (4件) を見る
こちらはすこぶる調子がよく、上記の問題も解消され、今でも現役バリバリで動いています。
3DSやwii用の2.4G帯域、その他ほとんど用の5G帯域と使い分けていますが、なんら不自由はありません。
設定画面も見やすいですし、謎のwindowsソフトウェアインストールなども不要です。
いまではiPhoneのトルネアプリで外出先から録画予約はもちろん、録画したものの再生も多いのですが、何の不自由もなく利用できています。
イーサネットコンバータの変更
今回この記事を書いておこうと思ったきっかけがこれで、nasne & PS3を無線化するためのイーサネットコンバータ AG300N/V がお亡くなりになりました。
つい先日(2016年12月上旬)の出来事です。
原因はこたつなど、暖房器具類と電子レンジか何かを同時に利用してしまい、ブレーカーが落ちたこと。
復帰後にうんともすんとも言わなくなっておりました。
検索するとAG300N/Vが突然壊れるのはよくあることなようで・・・。我が家のは長生きしていた方なのかもしれません。
雷でルーターが壊れたなんて昔はよく話を聞きましたけどね。はい、すみません。
いまどきイーサネットコンバータなんて・・・どれを買えばいいのかと途方に暮れます。
旧ルータの Bufflo WZR-600DHP がイーサネットコンバータとして再利用できる?と一瞬頭をよぎりましたが、出来たとしても接続が不安定になるのはご勘弁。
やはり購入するしかないかーということで唯一のイーサネットコンバータ生き残りのような PA-WL300NE/AG を購入しました。
スペックはAG300N/Vとほぼ同じで、LANの口が2つ付いています。大きさは一回り大きめ。6000円弱と、突然なのでやや痛い出費。
NEC Aterm WL300NE-AG (Ethernet子機) PA-WL300NE/AG
- 出版社/メーカー: NEC
- 発売日: 2009/02/08
- メディア: Personal Computers
- 購入: 7人 クリック: 86回
- この商品を含むブログ (10件) を見る
イーサネットコンバータの設定というと非常に嫌な思い出が蘇ってしまうのですが、こちらは慣れてしまえば楽ですね。
らくらく設定ボタンを押しながらコンセントに接続。そのまま1分待つとDHCPサーバとして立ち上がってくれます。
イーサネットコンバータの中でhttpdが動くので、PCをLANケーブルで直接接続し、ブラウザから管理画面を開き、所定のSSIDに接続して再起動。これだけです!所要時間5分未満で済みました。
LANケーブルが刺さってブラウザが開けるならば、windowsだろうがmacだろうがLinuxだろうが設定できて便利。へんてこなソフトウェアをインストールさせられることもありません。
ちなみに今回NEC製品同士になったので「らくらく設定」などAOSS的なのも利用できそうでしたが、どこにどんなふうに接続されるか不明なので利用していません。自分でやったほうが安心できますよ!
Amon2で遊びたい(実践編)
前回からの続き。amon2-setup.plからスタートです。
Amon2は6.00が入っています。
ググると過去バージョンと現在のバージョンとは動作が違うことが結構ありました。
今回は全面的に PerlのWAF,Amon2の使い方とサンプルアプリケーション - uzutaka's notes こちらの写経をしていく中での気付きを書いていきます。
amon2-setup.pl
前回、/usr/local/binに入れているので、コマンド的には
# amon2-setup.pl (プロジェクト名)
オプションにFlavorが選択出来るようですが、どんな差があるのか一旦置き。
とりあえずデフォ。
コマンドを叩くとプロジェクト名に指定した名前のディレクトリが作成されるので、以後はそちらにcdしてからの作業になる。
carton install
cpanfileが自動生成されているのでcarton installする。
前回plenvで環境を作っているので
plenv exec carton install
ということになる。
結構時間を要するのでしばし待つ。
hello world
ここまで来ると、一旦表示確認ができる。
サーバの起動コマンドは下記になる
plenv exec carton exec -- perl -Ilib script/(プロジェクト名)-server -host (awsのホスト名:5000)
plenvのcarton installを行ったので、perlコマンドを実行する時も明示的に指定する必要がある。
それと-hostで正しい名前を渡してあげないと表示確認ができなかった。
ここで数時間ハマり、amon2-setup.plを覗いてみてhost名が指定できることが判った。。。
localhostで動作させている分には困らない事なのだろうけど注意されたし。
ポート番号はデフォで5000番になるようだ。
mysql setup
いきなり感のあるDB setupだが、冒頭で紹介したblogの写経を進めていくとmysqlが必要になる。
AMIにはもちろん入っているはずも無いので、自前でsetupする必要がある。
my.cnf
とにかく動いてさえくれればいいのだけど、せっかくなので設定する。
とはいえデフォで用意されているものをコピーしてくるだけ。
デフォの設定ファイルは /usr/share/mysql/ に用意されている my-*.cnf だ。
メモリ使用量毎で選べるようになっている。
現在のインスタンスのメモリ量を見てみると・・
$ cat /proc/meminfo
MemTotal: 608292 kB
MemFree: 99044 kB
・・・以下略
600M詰んでいるがほぼ使ってしまっている状態なので64M以下で推奨される my-small.cnf を利用する
# sudo cp -ipu /etc/my.cnf /etc/my.cnf.bak # 念のためのバックアップ
# sudo cp /usr/share/mysql/my-small.cnf /etc/my.cnf
mysqld起動
起動コマンドを打ってみる
$ sudo service mysqld start
・・・。何故か起動しない。そしてエラーログにも何も出てこない?
まずはエラーの詳細を把握しないといけないのでmy.cnfに1行追加
log-error=/var/log/mysqld.log
すると、どうもmysql_install_dbがうまく動いていなかったらしい。
ということでコマンドを実行してみる
$ sudo mysql_install_db --datadir=/var/lib/mysql --user=mysql
そしてもう1度起動コマンド
$ sudo service mysqld start
Starting mysqld: [ OK ]
動いた!
DBD::mysql
Tengからmysqlに接続する部分でエラーが出る。
どうやらDBD::mysqlが無いようなので、cpanfileに
requires 'DBD::mysql';
と書いてplenv exec carton install するも、エラーで弾かれる。
エラーの内容はmysql.hを探しているが、無いよーというものだった。
これらはmysql-develを入れることで解決できた
その他
写経元と現在ではTengも書き変わっているようで、DB.pm の $self->search の結果はTeng::Iteratorになっている。
いきなりget_columnすると怒られるので $itr->next()してあげる必要がある。
一応ソースはpushした
https://github.com/harakachi/Amon2tutorial
まとめ
これでイケてるPerl環境を作りつつ、DBと連携するWebページを作るための一通りの流れができたのではないかと思う。
問題はここから先、何を作ればいいのか、なのだけど。
Amon2で遊びたい(準備編)
perlの会社に勤めてますが、WAFは自社製なのでいまいち最近の流行に乗れません。
少し時間が空いたのでAmon2で何か作ってみることにした。
参考にした資料やURLなどを備忘録として残しておきます。
サーバ
せっかくなので、AWSを触ってみるためにEC2に仮想マシンを1台確保。
一人でいじくるだけなら無料の範囲なので、とりあえずこれで試してみる。
AWSアカウント作成〜sshログイン〜apache起動まで
アカウント作成は簡単だけどクレカ入力が必要だった。
どこにも公開するつもりはないが、何かイタズラされると課金がはじまってしまう怖さも若干ある。
無料アカウント作成の流れ | アマゾン ウェブ サービス(AWS 日本語)
アカウントが出来てからはこちらの資料の流れでインスタンス立ち上げ。
細かなUIは変わってますが、ほぼ問題無し。
はじめてのアマゾンクラウド②[仮想サーバ(Amazon EC2)を立ち上げる]
今回、イメージは何でも良かったので、おすすめ通りにAMIにした。
資料の通りに進めるだけでapache起動までいける。便利な世の中や・・・
plackまわりはポート5000番を利用することが多いようなので、Custom TCP ruleを作って「5000 0.0.0.0/0」を追加するのを忘れずにやる。
PSGI/Plack
きっとこの辺の知識も必要になるだろうと思われたので、まずはざーっと読み漁る。
第1回 PSGI/Plack―フレームワークとサーバをつなぐエンジン (1):Perl Hackers Hub|gihyo.jp … 技術評論社
cpanは設定がめんどいという印象が染み付いてしまっているので、飛び級でcpanmからインストール
# sudo su -
# cd /bin
# curl -LO http://xrl.us/cpanm --insecure
# chmod +x cpanm
cpanmが使えるようになるので Plackを入れます
# cpanm Task::Plack
こちらのブログ AWS EC2+RDSにPSGI環境のMovable Typeを動かす! | MONSTER DIVE【モンスターダイブ】 でも指摘されているように、何故か入らなかったモジュールがあったのでこちらも個別に入れます
plack で hello world するところまでは、まんまこちらのコピペで sample.psgi を作ります
Plack入門:Plackでウェブサーバを起動してhello worldするまで - DQNEO起業日記
http://(awsのホスト名):5000/ で接続できればひとまず動作確認としてはOK。
plenv + cpanm + carton環境の構築
ここからAmon2インストールに行ってもいいのだけど、cartonを使うのでせっかくだからperlの環境もしっかり作ろうかと。
plenv
AMIのPerlバージョンは5.10。このままでも困らないことではあるけれど、せっかくなので新しめのPerl5.18.2を使ってみたい。
plenvのインストールはほぼこちらの通り 続・plenvを使ってみた - Masteries。
perl-buildが必要なのでお忘れなく。
# git clone git://github.com/tokuhirom/plenv.git ~/.plenv
# git clone git://github.com/tokuhirom/Perl-Build.git ~/.plenv/plugins/perl-build/
# echo 'export PATH="$HOME/.plenv/bin:$PATH"' >> ~/.bash_profile
# echo 'eval "$(plenv init -)"' >> ~/.bash_profile
# exec $SHELL -l
利用できるPerlバージョン一覧を取得して
# plenv install -l
お好みのPerlを入れよう。結構時間がかかります。
# plenv install 5.18.2
installだけでは利用することにはならないので、バージョンを指定する
# plenv global 5.18.2
globalとか何なの?という疑問も先ほどのブログで説明されている。
大変ありがたい。
cpanm
最初の方で /binにcpanmを入れているが、今回は「「plenvで利用するPerl」で動くcpanm」」をインストールする。
# plenv install-cpanm
Perlバージョンを変えるたびに install-cpanmしないといけないかどうかは判らない(たぶん必要)。
Carton
後で使うので入れておこう。plenvのcpanmで入れる
# plenv exec cpanm Carton
Amon2をインストールする
やっとここまで来た。しかしインストール方法が3通り存在する・・・
cpanfileを記述してcartonで入れる
Cartonが使えるのでcpanfileを作って「requires 'Amon2';」とだけ1行書き、carton installする。
一見シンプルで良さそうだが、よくよく考えると頭がごちゃごちゃしてくる。
そもそもcartonは「プロジェクトをgit cloneしてきてcarton install!」みたいな用途のはず。
Amon2を入れるためだけにcpanfileを利用するのは何か違うんじゃない?という違和感を感じる。
Amon2を入れるだけというプロジェクトならいいのだろうけど。
ということでたぶんパス。
plenvのcpanmでインストールする。
plenv exec cpanm Task::Amon2
上記コマンドを実行すると、plenvで利用しているPerlの配下にインストールされる
# plenv which amon2-setup.pl
/home/ec2-user/.plenv/versions/5.18.2/bin/amon2-setup.pl
環境を汚したくない場合やsu権限が無い場合にはこちらの方法を取るのが良いのだろうと思われる。
/binのcpanmを利用する
最初の方で入れたcpanmを利用する方法。これがいわゆるシステムにインストールという方法でsu権限が必要になる。
# cpanm Task::Amon2
すると/usr/local/binに入る
# which amon2-setup.pl
/usr/local/bin/amon2-setup.pl
本当はplenv配下に納まっている状態が綺麗なのだろうと思う。
今回はシステムに入っていてもおかしくないような気がしているので3番を選択した。
たぶん2できちんとやっていくのが望ましいのだろう。
とりあえず今回は準備なのでここまで。
今日の学び
XP祭り 2013でアジャイルセンター試験を受けてきた
昨年に続き2回目のXP祭りに行ってきました。
お目当ては「アジャイルセンター試験」です。
「アジャイルに関係する知力テスト」とだけ聞くと、若干の胡散臭い感じもあるかと思いますが
豪華な出題陣の方々がどのような題材を問題とするのか、非常に興味がありました。
受験編
受けてみると、当然のように胡散臭さは微塵も無く、お固めのアジャイルマニフェスト穴埋め問題から
この問題に答えは無いのではないか・・・と思えるような悩ましい問題まで
様々な角度から攻められる問題に四苦八苦しました。
回答時間の45分は、本当にあっというまに過ぎ去っていきました・・・。
回答編
そして肝心の結果ですが、61点でした。
受講者の平均が64点くらいということだったので、平均よりもちょっと下の得点です。
受けてみて痛感したのは、色々と覚えているつもりのものが
実は中途半端にしか覚えていないということ。
普段はすぐにググってしまうので、全部を記憶しておかなければいけない、という状況が無いからかもしれませんが
アジャイルマニフェスト穴埋めが正解できなかったのが、自分でも大きなショックでした・・w
問題を解くということを通じて、今の自分に足りない知識が何なのかであったり、初心に返る事ができたりなど、最初に思っていた期待以上の収穫がありました。
合格する/しないではなく、純粋に力試しができるというのが大きかったのかもしれません。
まとめ
運営側の皆様、貴重な機会をありがとうございました。
是非来年も!w 宜しくお願いしますmm
AFNetworking+GHUnitでハマった話し
Podfile
platform :ios, '6.1' target :GHUnitTests, :exclusive => true do pod 'GHUnitIOS', '~> 0.5.5' end pod 'AFNetworking', '~> 1.3.2'
GHUnitTestsからAFNetworkingが見えない。
まぁ、それはそうか。
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_AFJSONRequestOperation", referenced from:
objc-class-ref in XXX.o
Podfileを変更
platform :ios, '6.1' target :GHUnitTests, :exclusive => true do pod 'GHUnitIOS', '~> 0.5.5' pod 'AFNetworking', '~> 1.3.2' end pod 'AFNetworking', '~> 1.3.2'
大量のエラーが
"_SCNetworkReachabilityCreateWithName", referenced from:
-[AFHTTPClient startMonitoringNetworkReachability] in libPods-GHUnitTests.a(AFHTTPClient.o)
"_SCNetworkReachabilityGetFlags", referenced from:
-[AFHTTPClient startMonitoringNetworkReachability] in libPods-GHUnitTests.a(AFHTTPClient.o)
"_SCNetworkReachabilityScheduleWithRunLoop", referenced from:
-[AFHTTPClient startMonitoringNetworkReachability] in libPods-GHUnitTests.a(AFHTTPClient.o)
"_SCNetworkReachabilitySetCallback", referenced from:
-[AFHTTPClient startMonitoringNetworkReachability] in libPods-GHUnitTests.a(AFHTTPClient.o)
"_SCNetworkReachabilityUnscheduleFromRunLoop", referenced from:
-[AFHTTPClient stopMonitoringNetworkReachability] in libPods-GHUnitTests.a(AFHTTPClient.o)
"_SecCertificateCopyData", referenced from:
-[AFURLConnectionOperation connection:willSendRequestForAuthenticationChallenge:] in libPods-GHUnitTests.a(AFURLConnectionOperation.o)
"_SecCertificateCreateWithData", referenced from:
___44+[AFURLConnectionOperation pinnedPublicKeys]_block_invoke in libPods-GHUnitTests.a(AFURLConnectionOperation.o)
"_SecPolicyCreateBasicX509", referenced from:
___44+[AFURLConnectionOperation pinnedPublicKeys]_block_invoke in libPods-GHUnitTests.a(AFURLConnectionOperation.o)
-[AFURLConnectionOperation connection:willSendRequestForAuthenticationChallenge:] in libPods-GHUnitTests.a(AFURLConnectionOperation.o)
"_SecTrustCopyPublicKey", referenced from:
___44+[AFURLConnectionOperation pinnedPublicKeys]_block_invoke in libPods-GHUnitTests.a(AFURLConnectionOperation.o)
-[AFURLConnectionOperation connection:willSendRequestForAuthenticationChallenge:] in libPods-GHUnitTests.a(AFURLConnectionOperation.o)
"_SecTrustCreateWithCertificates", referenced from:
___44+[AFURLConnectionOperation pinnedPublicKeys]_block_invoke in libPods-GHUnitTests.a(AFURLConnectionOperation.o)
-[AFURLConnectionOperation connection:willSendRequestForAuthenticationChallenge:] in libPods-GHUnitTests.a(AFURLConnectionOperation.o)
"_SecTrustEvaluate", referenced from:
___44+[AFURLConnectionOperation pinnedPublicKeys]_block_invoke in libPods-GHUnitTests.a(AFURLConnectionOperation.o)
-[AFURLConnectionOperation connection:willSendRequestForAuthenticationChallenge:] in libPods-GHUnitTests.a(AFURLConnectionOperation.o)
"_SecTrustGetCertificateAtIndex", referenced from:
-[AFURLConnectionOperation connection:willSendRequestForAuthenticationChallenge:] in libPods-GHUnitTests.a(AFURLConnectionOperation.o)
"_SecTrustGetCertificateCount", referenced from:
-[AFURLConnectionOperation connection:willSendRequestForAuthenticationChallenge:] in libPods-GHUnitTests.a(AFURLConnectionOperation.o)
"_UTTypeCopyPreferredTagWithClass", referenced from:
_AFContentTypeForPathExtension in libPods-GHUnitTests.a(AFHTTPClient.o)
"_UTTypeCreatePreferredIdentifierForTag", referenced from:
_AFContentTypeForPathExtension in libPods-GHUnitTests.a(AFHTTPClient.o)
"_kUTTagClassFilenameExtension", referenced from:
_AFContentTypeForPathExtension in libPods-GHUnitTests.a(AFHTTPClient.o)
"_kUTTagClassMIMEType", referenced from:
_AFContentTypeForPathExtension in libPods-GHUnitTests.a(AFHTTPClient.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
色々彷徨った結果、以下の3ファイルを Link Binary With Libraries から追加することで回避できた
Security.framework
MobileCoreServices.framework
SystemConfigration.framework
しかし、この回避方法が正解なのかは判らない・・・。
reference: