2月
18

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のソースをアップしてみたけど、そのうち消す。

2月
14

昨年暮れに、自宅サーバーの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でエラーがでるので、下記に従う。

念のためバックアップ。

# 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

 

続く

2月
02

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を有効にする的なひと手間が必要ぽいですが、あまり詳しく調べてません。

12月
16

 

最近の変更点。

  • html-validateオプションが追加され、html自体の構文チェックができるようになった。また、validator-nuとvalidateor-nu-urlオプションにより、validator.nuまたはローカルコピーを利用してhtml5のバリデーションができるようになった。
  • depthオプションが追加され、深度でクロールを制限できるようになった。
  • URLのマッチングオプションが増えて、細かな条件で動作させることができるようになった。
  • レポートが、ページのサイズやmime-typeも報告するようになった。
11月
19

 

mojo-checkbotがHTMLの構文エラーも報告するようになった。XML::LibXMLを事前にインストールすると–html-validateオプションが有効になります。挙動が若干微妙だけど。

11月
19

 

CSSセレクタでgrepするxml-grepっての作った。Mojo::DOMとFile::Findで50行でできた。行番号出したいけど出せない。

11月
15

 

リンクチェッカー「mojo-checkbot」がv0.26になった。主な変更点。

  • embed, frame, iframe inputのsrc属性がクロールの対象となった。
  • formダイアログの表示条件を変更し、action属性と、子要素のname属性が全て同一でなければ、別のフォームとみなしてダイアログを表示するようにした。
  • ユーザー認証情報の使用範囲の条件にportの同一性を追加した。
11月
12

 

mojo-checkbotがv0.24になった。

最近の変更点。目玉はform送信ダイアログの追加です。Basic認証やフォームでユーザー情報を送信する必要のある要認証サイトのチェックが楽になりました。

  • formを検出した場合、レポートビュー上からデータ送信してクローラーのキューを追加可能とした。
  • 401のユーザー認証を要求された場合、レポートビューからユーザー情報を送信可能とした。
  • matchオプションがDeprecatedになり、代わりにmatch-for-checkとmatch-for-crawlを追加した。
  • sleepオプションが全体のパフォーマンスに影響するのを改善した。

 

10月
27

 

リンクチェッカー「mojo-checkbot」の最近の改良点。

  • sleepオプションがリクエストの開始の間隔だったのを、終了と開始の間隔とした。
  • evacuate / noevacuateオプションが追加された
  • コマンドがシンプルになった
  • レポートのステータスコード毎に非表示可能にした
  • スタイルシート内のurl(…)もクロールするようになった。
  • スキーム無指定のURIに対応
10月
26

 

リンク切れ検索エンジン「mojo-checkbot」の最近の改良点。

  • timeoutオプションが動作していなかったのを直した。
  • resumeオプションを追加し、前回の結果を引き継ぐことができるようになった(EXPRERIMENTAL)。
  • metaタグによるリダイレクト先もクロールするようになった。
  • サーバー設定によるリダイレクトの際、今までは最終のURIのみをレポートしていたが、リダイレクト先とその参照元を別項目で報告するようにした(つまり302とかレポート上に現れるようになった)。
  • Firefoxで巨大なjsonを取得するとパースエラーになるため、一度にFetchするデータは100件までとした。
  • コマンドのヘルプを英語/日本語に対応した
  • クローラー自体のエラーもブラウザで見れるようになった
  • 200台のレポートを隠すチェックボックス
  • mapタグもクロール対象
  • メモリ使用量が減りそうな対策をたくさんしたけど、検証はしていない。