• このエントリーをはてなブックマークに追加


メモ.サーバ管理界隈では「今や常識」レベルのことなのでしょうが,その常識を知りませんでしたごめんなさいごめんなさい.

今さらだけど,VPS とかの借りてるサーバで Dropbox 動かしている場合は「LAN 同期」を無効にすべき! です><

前提

Dropbox がインストール&動作していること.

参考:

「お客様サーバから17500/UDPのブロードキャストの通信が大量に行われているんだけど」

% sudo tcpdump -vv port 17500 2>&1 | grep -B 1 $(hostname)
19:40:12.001146 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 140)
    www*******.sakura.ne.jp.17500 > 255.255.255.255.17500: [bad udp cksum 0xe290 -> 0x308e!] UDP, length 112
19:40:12.001532 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 140)
    www*******.sakura.ne.jp.17500 > ***.***.***.255.17500: [bad udp cksum 0xc664 -> 0x4cba!] UDP, length 112
--
19:40:42.171360 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 140)
    www*******.sakura.ne.jp.17500 > 255.255.255.255.17500: [bad udp cksum 0xe290 -> 0x308e!] UDP, length 112
19:40:42.171887 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 140)
    www*******.sakura.ne.jp.17500 > ***.***.***.255.17500: [bad udp cksum 0xc664 -> 0x4cba!] UDP, length 112
--
19:41:12.350481 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 140)
    www*******.sakura.ne.jp.17500 > 255.255.255.255.17500: [bad udp cksum 0xe290 -> 0x308e!] UDP, length 112
19:41:12.350779 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 140)
    www*******.sakura.ne.jp.17500 > ***.***.***.255.17500: [bad udp cksum 0xc664 -> 0x4cba!] UDP, length 112
--
19:41:42.528454 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 140)
    www*******.sakura.ne.jp.17500 > 255.255.255.255.17500: [bad udp cksum 0xe290 -> 0x308e!] UDP, length 112
19:41:42.528834 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 140)
    www*******.sakura.ne.jp.17500 > ***.***.***.255.17500: [bad udp cksum 0xc664 -> 0x4cba!] UDP, length 112
--
19:42:12.704700 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 140)
    www*******.sakura.ne.jp.17500 > 255.255.255.255.17500: [bad udp cksum 0xe290 -> 0x308e!] UDP, length 112
19:42:12.705046 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 140)
    www*******.sakura.ne.jp.17500 > ***.***.***.255.17500: [bad udp cksum 0xc664 -> 0x4cba!] UDP, length 112
--
19:42:42.880831 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 140)
    www*******.sakura.ne.jp.17500 > 255.255.255.255.17500: [bad udp cksum 0xe290 -> 0x308e!] UDP, length 112
19:42:42.881145 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 140)
    www*******.sakura.ne.jp.17500 > ***.***.***.255.17500: [bad udp cksum 0xc664 -> 0x4cba!] UDP, length 112
--
19:43:13.054091 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 140)
    www*******.sakura.ne.jp.17500 > 255.255.255.255.17500: [bad udp cksum 0xe290 -> 0x308e!] UDP, length 112
19:43:13.054345 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 140)
    www*******.sakura.ne.jp.17500 > ***.***.***.255.17500: [bad udp cksum 0xc664 -> 0x4cba!] UDP, length 112
...

これはひどい...

UDP/17500

あぁ,Dropbox の「LAN 同期」機能か...orz

dropbox.py を入れて「LAN 同期」を無効にする

等によると,dropbox.py なるツールで,コマンドラインから Dropbox をごにょごにょできるみたい.

さっそくインストール:

% curl -L "https://www.dropbox.com/download?dl=packages/dropbox.py" > /path/to/dropbox.py
% chmod +x /path/to/dropbox.py

インストール完了.

「LAN 同期」を無効にするには次のとおり:

% /path/to/dropbox.py lansync n

その後

% sudo tcpdump -vv port 17500 2>&1 | grep -B 1 $(hostname)
(待機)

先のように tcpdump を実行してみたけど,何も出力されてこないので,きっとこれで OK.

  • このエントリーをはてなブックマークに追加


ss-1417755885

はじめに

手元のマシンで「http://localhost/docs/*.md なファイルを HTML に変換して表示」なことが Webサーバレベルで簡単にできないかな,とか思ってたところ,次のエントリに到達:

なんだかお手軽そうな印象を受けたので,ちょっと試してみました.まぁそもそも nginx に ngx_mruby モジュールが入っていないので,それを入れるところから,ですが.

以下,そんな記録です.

インストール

ngx_mruby のソースコードのパス
$HOME/local/src/ngx_mruby.git
nginx のソースコードのパス
$HOME/local/src/nginx/1.6.2
nginx のインストール先
$HOME/local/nginx/1.6.2

参考

準備

ビルド時にライブラリがないって怒られたので,このあたりを追加:

% brew install hiredis
% brew unlink markdown
% brew install discount

Discount:

それぞれのソースコードを準備する

nginx:

% cd $HOME/local/src/nginx
% curl -LO "http://nginx.org/download/nginx-1.6.2.tar.gz"
% tar xvf nginx-1.6.2.tar.gz
% mv nginx-1.6.2 1.6.2

ngx_mruby:

git clone git://github.com/matsumoto-r/ngx_mruby.git $HOME/local/src/ngx_mruby.git
cd $HOME/local/src/ngx_mruby.git
git submodule init
git submodule update

ngx_mruby をビルドする

冒頭のエントリでは,コード中に Discount クラスが出てきてますが,mruby をそのまま入れたのでは利用できないため,build_config.rb 内 1行のコメントを外して利用できるようにします:

diff --git a/build_config.rb b/build_config.rb
index c5d32c5..74a3576 100644
--- a/build_config.rb
+++ b/build_config.rb
@@ -38,7 +38,7 @@ MRuby::Build.new do |conf|
   conf.gem :github => 'matsumoto-r/mruby-ngx-mruby-ext'
 
   # use markdown on ngx_mruby
-  #conf.gem :github => 'matsumoto-r/mruby-discount'
+  conf.gem :github => 'matsumoto-r/mruby-discount'
 
   # Linux only for ngx_mruby
   #conf.gem :github => 'matsumoto-r/mruby-capability'

ビルドします:

% ./configure \
    --with-ngx-src-root=$HOME/local/src/nginx/1.6.2 \
    --with-ngx-config-opt="--prefix=$HOME/loca/nginx/1.6.2"
% make build_mruby
% make generate_gems_config

nginx をビルド&インストールする

--add-module オプションで先にビルドした ngx_mruby を指定します:

% ./configure \
    --prefix=$HOME/local/nginx/1.6.2 \
    ...
    --add-module=$HOME/local/src/ngx_mruby.git
% make
% make install
% $HOME/local/nginx/1.6.2/bin/nginx -V                                                                                                                                                                                                   1 ↵
nginx version: nginx/1.6.2
built by clang 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
TLS SNI support enabled
configure arguments: --prefix=/Users/issm/local/nginx/1.6.2 ... --add-module=/Users/issm/local/src/ngx_mruby.git

nginx が入りました.

Hello

とりあえず nginx.confserver コンテキストに次のようなものを追記:

location /mruby {
    mruby_content_handler_code '
        if server_name == "NGINX"
          Server = Nginx
        elsif server_name == "Apache"
          Server = Apache
        end
 
        Server::rputs "Hello #{Server::module_name}/#{Server::module_version} world!"
    ';
}

再起動後,http://localhost/mruby へリクエストすると,次のようになりました:

ss-1417749440

curl で:

% curl -i http://localhost/mruby
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Fri, 05 Dec 2014 05:31:44 GMT
Content-Length: 28
Connection: keep-alive
 
Hello ngx_mruby/1.6.7 world!

*.md なものを変換して HTML として返す

先と同様に,nginx.confserver コンテキストに次のようなものを追記:

location ~ \.md$ {
    mruby_output_filter_code '
        if server_name == "NGINX"
          Server = Nginx
        elsif server_name == "Apache"
          Server = Apache
        end
 
        r = Server::Request.new
        f = Server::Filter.new
 
        css = "https://gist.github.com/andyferra/2554919/raw/2e66cabdafe1c9a7f354aa2ebf5bc38265e638e5/github.css"
        title = "markdown"
        md = Discount.new css, title
 
        r.content_type = "text/html; charset=utf8"
        f.body = md.md2html f.body
    ';
}

再起動.

Markdown ファイル

次のようなファイルを,$root/hello.md として置きます:

# Hello markdown via ngx_mruby!
 
はろー!
 
* this
* is
* list

結果

http://localhost/hello.md へリクエストすると,次のように返ってきました:

ブラウザ:

ss-1417755885

curl:

% curl -i http://localhost/hello.md
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Fri, 05 Dec 2014 05:02:39 GMT
Content-Type: text/html; charset=utf8
Content-Length: 541
Last-Modified: Fri, 05 Dec 2014 05:01:31 GMT
Connection: keep-alive
ETag: "54813c2b-42"
Accept-Ranges: bytes
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<title>markdown</title>
<link rel="stylesheet" href="https://gist.github.com/andyferra/2554919/raw/2e66cabdafe1c9a7f354aa2ebf5bc38265e638e5/github.css" type="text/css" />
</head>
<body>
<a name="Hello.markdown.via.ngx_mruby."></a>
<h1>Hello markdown via ngx_mruby!</h1>
 
<p>はろー!</p>
 
<ul>
<li>this</li>
<li>is</li>
<li>list</li>
</ul>
 
</body>
</html>

ただ,ブラウザでの場合,Command + r でリロードするたびに表示されたりされなかったり「接続できませんでした」になったりと,なんだか不安定な感じでした.curl コマンドではそんなことはないですね.よくわからない.

おわりに

以上,nginx にngx_mruby モジュールを組み込んで,Discount 経由で Markdown 記法を変換して表示するなど,少しだけ触ってみた記録でした.

nginx の挙動を,ruby のコードで記述することができるありがたみを実感できた気がします.ruby ほとんどわかってませんが.

今回試した設定・コードでは,Discount では ``` によるコードブロック表記など,Github や Bitbucket とかで常用するような記法を利用できませんでした.拡張できるのかな?そのへん何かよい情報がないかどうか,今後さがしてみたいところです.

  • このエントリーをはてなブックマークに追加


はじめに

今さらながら,bot フレームワークである Hubot を触ってみたのでその記録.

参考

前者の連載 第2回目,「Hubotを動かしてみる」におけるひな形作成あたりの勝手は,現在のものとは異なっているようなので,そのあたりは本家の方を重視.

目次

  1. インストール
  2. ひな形を作成
  3. とりあえず体感: shell アダプタ
  4. ちょこっとだけ拡張してみる
  5. IRC に接続する: irc アダプタ
  6. Slack に接続する: slack アダプタ

インストール

Hubot は node.js 製なので,そのあたりから.

nodebrew

Homebrew であれば:

% brew install nodebrew

で入ります.そうでなければ

% curl -L git.io/nodebrew | perl - setup

した後,$HOME/.nodebrew/current/bin を環境変数 PATH に追加しておきます:

export $HOME/.nodebrew/current/bin:$PATH

node

% nodebrew install v0.10.33
(... takes a while ...)
% nodebrew use v0.10.33

Hubot 関連モジュール

Yeomangenerator-hubot を追加します.基本的なものなのでグローバルなところに:

% npm install -g yo generator-hubot

ひな形を作成

yo hubot した後,聞かれることにテキトーに Enter していけば,bot するためのファイル構成を準備してくれます:

% git init /path/to/myhubot
Initialized empty Git repository in /path/to/myhubot/.git/
% cd /path/to/myhubot
% yo hubot
                     _____________________________
                    /                             \
   //\              |      Extracting input for    |
  ////\    _____    |   self-replication process   |
 //////\  /_____\   \                             /
 ======= |[^_/\_]|   /----------------------------
  |   | _|___@@__|__
  +===+/  ///     \_\
   | |_\ /// HUBOT/\\
   |___/\//      /  \\
         \      /   +---+
          \____/    |   |
           | //|    +===+
            \//      |xx|
 
? Owner: issm <issm @myemail>
? Bot name: myhubot
? Description: myhubot
? Bot adapter: campfire
   create bin/hubot
   create bin/hubot.cmd
   create Procfile
   create README.md
   create external-scripts.json
   create hubot-scripts.json
   create .gitignore
   create package.json
   create scripts/example.coffee
   create .editorconfig
                     _____________________________
 _____              /                             \
 \    \             |   Self-replication process   |
 |    |    _____    |          complete...         |
 |__\\|   /_____\   \     Good luck with that.    /
   |//+  |[^_/\_]|   /----------------------------
  |   | _|___@@__|__
  +===+/  ///     \_\
   | |_\ /// HUBOT/\\
   |___/\//      /  \\
         \      /   +---+
          \____/    |   |
           | //|    +===+
            \//      |xx|
 
hubot-maps@0.0.0 node_modules/hubot-maps
 
hubot-help@0.1.1 node_modules/hubot-help
 
hubot-google-images@0.1.0 node_modules/hubot-google-images
 
hubot-diagnostics@0.0.1 node_modules/hubot-diagnostics
 
hubot-pugme@0.1.0 node_modules/hubot-pugme
 
hubot-rules@0.1.0 node_modules/hubot-rules
 
hubot-youtube@0.1.2 node_modules/hubot-youtube
 
hubot-google-translate@0.1.0 node_modules/hubot-google-translate
 
hubot-heroku-keepalive@0.0.4 node_modules/hubot-heroku-keepalive
 
hubot-shipit@0.1.1 node_modules/hubot-shipit
 
hubot-redis-brain@0.0.2 node_modules/hubot-redis-brain
└── redis@0.8.4
 
hubot-scripts@2.5.16 node_modules/hubot-scripts
└── redis@0.8.4
 
hubot@2.9.3 node_modules/hubot
├── optparse@1.0.4
├── log@1.4.0
├── scoped-http-client@0.9.8
├── coffee-script@1.6.3
└── express@3.18.1 (basic-auth@1.0.0, merge-descriptors@0.0.2, utils-merge@1.0.0, fresh@0.2.4, cookie@0.1.2, escape-html@1.0.1, range-parser@1.0.2, cookie-signature@1.0.5, vary@1.0.0, media-typer@0.3.0, parseurl@1.3.0, methods@1.1.0, content-disposition@0.5.0, depd@1.0.0, debug@2.1.0, etag@1.5.1, proxy-addr@1.0.3, commander@1.3.2, mkdirp@0.5.0, send@0.10.1, connect@2.27.1)
% git add .
% git commit -m 'initial commit'
</issm>

とりあえず体感: shell アダプタ

続きを読む »

  • このエントリーをはてなブックマークに追加


本日の完走証。汗で濡れたリュックに入れてたのでまだ乾ききっていないw

はじめに

こちらに参加するため,去る10月の25日,26日の土日 1泊 2日でしまなみ海道までバタバタと行ってきました.

行程としてはおおざっぱに次のとおり:

本エントリは,そのうちの「日曜日」編です.

おもな交通ルート

宿から会場まで:

伊予西条: 宿
  | (予讃線)
今治

さて部屋を出る。

5:30 頃起床.両腿表側がちょこっと筋肉痛気味w

朝食が始まる(6:45)までに出発の準備.どれくらいぶりかわからないくらい久しぶりな宿でとる朝食でしたが,電車発(7:15)まであまり時間がなかったため,10分ほどで食べてチェックアウト.

伊予西条駅。

伊予西条駅.このとき iPhone6 落としましたorz 幸い購入時に保護ガラス:

を貼っておいたので大事には至りませんでしたが,角とか保護ガラス自体とかが少し欠けたりしてしまいました.

upload

40分ほどかけて今治駅へ.

一部の荷物をコインロッカーへ。

今治駅に到着.会場で預けられないようなな荷物をメッセンジャーバッグに詰め込んでコインロッカーへ.「大」サイズのロッカーなら余裕で入ります.500円.

さてここでちょっとトラブル?このコインロッカー,100円玉しか使えない.財布の中,100円玉が 4枚.改札までは遠い,時間ないしメンドイ.近くに自販機発見,が,100円玉釣り銭切れ,みんな同じこと考えてやがるw

で,念のため 「中」サイズ(300円)でも入るかどうか確認したところ,ちょっと押しこむ感じではあるけどでもなんとか入ったのでひと安心.

自転車前ゼッケンはこんな感じでいいのかな。

袋から開放して自転車を組み立て.そして自転車前面にゼッケンを取り付け.

あ,輪行袋をまとめてからロッカーに入れればよかったorz まぁこれも手荷物預かりに含めるか...

サイクリングしまなみ本番

続きを読む »

  • このエントリーをはてなブックマークに追加


組み立て完了!

はじめに

こちらに参加するため,去る10月の25日,26日の土日 1泊 2日でしまなみ海道までバタバタと行ってきました.

行程としてはおおざっぱに次のとおり:

本エントリは,そのうちの「土曜日」編です.

おもな交通ルート

自宅を出て受付会場まで:

自宅
  | (自走)
大曽根
  | (中央本線)
名古屋
  | (のぞみ)
福山
  | (山陽本線)
尾道
  | (自走)
今治: 「サイクリングしまなみ」受付

受付後,宿まで:

今治
  | (予讃線)
伊予西条: 宿

出発 〜 尾道

大曽根駅まで自走,そこで袋詰めして切符を購入.のぞみの指定席が埋まってしまっていたため,自由席を選択.

07:37 発待ち。自由席しかなかったw

名古屋駅.のぞみ自由席もみごとに満席のため,デッキ(この単語が出てこず,知恵袋の恩恵 を)で Tiwtter と外を交互に見ながらスタンディング.

新大阪駅.ここでようやく座ることができました.前日深夜 4時までお仕事してて 30分くらいしか寝ていなかったので睡眠開始.

福山駅.寝過ごすこともなく降車.

山陽本線に乗り換えて尾道駅へ到着しました.

4年半ぶり!

4年半ぶり!

尾道側でも関連イベントなどで人がたくさん.これからしまなみ海道走るぜ!な人たちもたくさん見かけました.

尾道〜 受付会場@今治

続きを読む »

1 of 12112345...102030...121