mojoの最新版をmojo-legacyにマージする自分用メモ。
mojoリポジトリのクローンで作業開始。
$ cd mojo $ git checkout master $ git pull upstream master $ git pull upstream master --tags $ git checkout mojo-legacy $ git merge master v2.82
…コンフリクトを直す。ついでにChangesも追記
… qr/( ~~ | // | //= )/で検索するなどして、新たなperl-5.10.x依存を排除。正規表現も注意。
その後、テスト。
$ perlbrew use perl-5.8.7 $ export TEST_HYPNOTOAD=1 $ export TEST_TLS=1 $ export TEST_MORBO=1 $ export TEST_EV=1 $ export TEST_ONLINE=1 $ export TEST_CACHING=1 $ prove -r t
…mojo-legacyリポジトリを差し換え
その後、コミット。
$ cd mojo-legacy $ git add . $ git add -u $ git commit -m 'rebased on Mojolicious v2.82'
PogoPlugを無事、ハックできたので、次はウェブサーバーを立ち上げてみた。最終的にはフォトギャラリーを身内と共有したいんだけど、とりあえずは、指定のディレクトリ以下を手軽に公開する。ただし、apacheとか大げさなものは使わず、自作のMojoX::Tusuっていう何かを使う。Mojoliciousプラグインなんだけど、apacheみたいにファイルをサーブする何か。
このブログにやたらと登場するMojoX::Tusuですが、ただ自分が好きで使ってるだけです。危険なのであまり真似しないほうがいいと思います。
root権限でcpanmのインストール。
$ perlbrew install-cpanm
前回インストールしたPerlに切り替え。
$ perlbrew switch perl-5.14.2
MojoX-Tusuっていう何かを入れる。最近、cpanmでgithubから直接インストールできなくなった。githubがSSLになったせいか、リダイレクトの関係か、不明。しょうがないのでwgetしてからcpanm。
$ cd ~ $ wget https://github.com/jamadam/MojoX-Tusu/tarball/v0.38 $ cpanm v0.38 $ rm v0.38
依存先のMojoliciousも入ったはずなので、tusu_appってものをジェネレートする。
$ mojo generate tusu_app Public
~/public/lib/Public.pmにindexesオプションを追記。これでapacheのauto indexみたいな動作。
encoding => ['Shift_JIS', 'utf8'],
document_root => $self->home->rel_dir('public_html'),
+ indexes => 1,
});
アプリを起動する。
$ hypnotoad ~/public/script/public
以上で~/public/public_htmlがドキュメントルートになったので、8080ポートで見られる。あとは、public_html以下にファイルを突っ込めばハローワールド。身内用には別のtusu_appを乱立してhypnotoad.confでポートを割り当ててく。Mojolicious::Plugin::PlackMiddlewareとかでベーシック認証でもかけておけば良いんじゃないかと思う。
とりあえず、テキトーにMojo::Tusuのソースをアップしてみたけど、そのうち消す。
昨年暮れに、自宅サーバーのHDDがぶっ壊れて、部屋に静けさが戻った。httpサーバーは、さくらのVPSに引越しした。けど、大容量ストレージがないと何かと不便なので、復活させることにした。
デスクトップマシンだとデカイしファンがうるさいので、流行のPogoplugをハックすることにした。
Pogoplugのラインナップがよく理解できなかったので、テキトーにAmazonで最安値だった中古のPOGO-P01を購入。4,800円也。合わせて、システム用にBUFFALOのUSBメモリー(8GB)を982円で購入。こちらは新品。以前のサーバーに外付けしていた1TBのUSB HDDを復活させる。宅内からはsambaで、外出先からはscpとhttpでデータ出し入れ、という予定。
ここを参考にしてdebian化。と思ったら、Pogoplug P01(Pro)はハックの対象外だった。気付くのに2日かかった。USBメモリにシステムをインストールまではできたんだけど、ubootの書き換えができず。しょうがないので、Arch Linux ARMというものを入れた。公式のドキュメントのとおりに進めたら、ものの30分で終わった。その後、下記の手順で追加の設定等。
データ用の1TBハードディスクを接続し、マウントする。/homeにまるごと当てがっちゃう。
# echo '/dev/sdb /home ext2 defaults 0 2' >> /etc/fstab # mount -a
debianでいうaptはpacman。パッケージマネージャ、略してパックマンか。
pacman -Syuでエラーがでるので、下記に従う。
- News: initscripts update – manual intervention required
- News: filesystem upgrade – manual intervention required
念のためバックアップ。
# cp /etc/mtab /home # mv /etc/profile.d/locale.sh /home
上記の記事どおり。
# pacman -S filesystem --force # rm /etc/profile.d/locale.sh
パッケージの更新。
pacman -Sy pacman -Syu
viをvimのエイリアスに。
# alias vi='vim' # export EDITOR=vim
ユーザー作成。
# adduser ore # adduser yome # adduser familyname # groupadd familyname # usermod -g familyname ore # usermod -g familyname yome
ルートログイン禁止。
$ vi /etc/ssh/sshd_config PermitRootLogin no
タイムゾーンの設定。
$ ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
samba入れる。公式ドキュメントに従ってnmbdとプリンター共有も停止。
# pacman -S samba
ddnsの設定。value domainのCGIを15分おきに叩く。本当はローカルにIPを保存しておいて変化を検出してから更新したほうがいいけど、とりあえず手軽に。
# crontab -e */15 * * * * wget -O - 'http://dyn.value-domain.com/cgi-bin/dyn.fcg?d=jamadam.com&p=XXXXXXXXXXX&h=home' > /dev/null 2>&1
固定IP
interface=eth0 address=192.168.11.2 netmask=255.255.255.0 gateway=192.168.11.1
perlbrew入れようと思ったらmakeコマンドがなかったので、base-develをインストール。
pacman -S base-devel
perlbrew自体をインストール。
その後、perlbrew install perl-5.14.2しようと思ったらメモリー足りず。公式ドキュメントを参考に1GBのswapfileを作成。
# dd if=/dev/zero of=/swapfile.img bs=1M count=1024 # mkswap /swapfile.img # swapon /swapfile.img # echo '/swapfile.img none swap sw 0 0' >> /etc/fstab
non-rootユーザーでperl-5.14.2をインストール。2時間半かかった。普段は20分で終わるんだけど、やっぱりマシンが非力なせいかな。
$ perlbrew install perl-5.14.2
mojo-down-monitorっていうものを作った。Mojoliciousの自習と自作プラグインのテストを目的に作ったので、あまり人に勧められるものではありませんが。
自分のサイトがダウンしたことに気づかずに半日放置とかまずいので、以前はSite Alertというサービスを利用していましたが、いい自作ネタだと思ったので作ってみた次第です。
ブラウザ上のフォームでサイトのURLを登録し、URL毎に期待するステータスコードやContent-Type、コンテンツの内容などを設定します。アプリは定期的にサイトをGETし、指定された条件を全て満たしているかチェックします。異常があればサイト毎に指定したメアドに通知します。
Mojoliciousと、ビューの構築用の自作プラグイン「MojoX::Tusu」を使っています。あと、最近流行りのpjaxを真似た仕組みの画面遷移を試してみたりとか、あくまでExperimental。
アプリは下記のように起動。
$ hypnotoad ./script/mojo_down_monitor Server available at http://127.0.0.1:8010.
停止。
$ hypnotoad ./script/mojo_down_monitor --stop
半月ほど前から、プライベートや仕事で作ったサイトに対して、1分毎にチェックを走らせてみてますが、正常に監視されてるようです。時間帯によって10秒のタイムアウトが頻発するサイトがいくつか見つかったり。
Linuxでは正常に動いてますが、Macの場合はメールが送られないようです。Postfixを有効にする的なひと手間が必要ぽいですが、あまり詳しく調べてません。
最近の変更点。
- html-validateオプションが追加され、html自体の構文チェックができるようになった。また、validator-nuとvalidateor-nu-urlオプションにより、validator.nuまたはローカルコピーを利用してhtml5のバリデーションができるようになった。
- depthオプションが追加され、深度でクロールを制限できるようになった。
- URLのマッチングオプションが増えて、細かな条件で動作させることができるようになった。
- レポートが、ページのサイズやmime-typeも報告するようになった。
mojo-checkbotがHTMLの構文エラーも報告するようになった。XML::LibXMLを事前にインストールすると–html-validateオプションが有効になります。挙動が若干微妙だけど。
リンクチェッカー「mojo-checkbot」がv0.26になった。主な変更点。
- embed, frame, iframe inputのsrc属性がクロールの対象となった。
- formダイアログの表示条件を変更し、action属性と、子要素のname属性が全て同一でなければ、別のフォームとみなしてダイアログを表示するようにした。
- ユーザー認証情報の使用範囲の条件にportの同一性を追加した。
mojo-checkbotがv0.24になった。
最近の変更点。目玉はform送信ダイアログの追加です。Basic認証やフォームでユーザー情報を送信する必要のある要認証サイトのチェックが楽になりました。
- formを検出した場合、レポートビュー上からデータ送信してクローラーのキューを追加可能とした。
- 401のユーザー認証を要求された場合、レポートビューからユーザー情報を送信可能とした。
- matchオプションがDeprecatedになり、代わりにmatch-for-checkとmatch-for-crawlを追加した。
- sleepオプションが全体のパフォーマンスに影響するのを改善した。





