• 自宅ネットワークで遊んでみた

    この物語は、仮想化技術を学びたいがためにkvmで構築をしてみたはいいものの、構築した仮想環境にMBPから楽にSSHできたらいいよね? と気軽に考え、悶え苦しみながらネットワーク構築まですることになった壮絶な物語である。

    登場するもの

    PR-400-KI(192.168.1.1)
    NTTのおっちゃんが連れてきた。こいつのお陰でインターネットに繋げることができる。
    管理画面の説明がよくわからないので、なんだか難しいやつだ。

    BUFFALOルーター(192.168.11.1)
    Amazonからお迎えした。とりあえずAmazonでルーターと検索したら最初にこいつがでてきた。
    管理画面にはたくさんの機能があるように見えるが、設定をするとしばらくいうことを効かなくなる。

    MacBookPro(192.168.11.X)
    普段使ってるマックブック。BUFFALO経由でWIFI通信してる。

    HP自鯖(192.168.122.1, 192.168.1.12)
    中古PCサイトからお迎えした自鯖。1万5千という値段でKVMが動く。

    HP自鯖のお迎え

    KVMでサーバーを動かすには Intel-VT 対応のCPUでなくてはいけないという情報を入手した私は、中古PCサイトでIntel-VT対応しているPCを探していたが、対応していて低価格なPCはほとんどなかった。

    いろいろと探していてもやはり3万Over・・どうにか1万5千円ほどで変えるものはないかと探していたら、iosysというところに安くてKVMが動くPCが売ってあるとHangoutsで教えてもらい、早速購入。メモリも増設した。

    入っていたWindowsを削除し、Ubuntu Serverをインストールしkvmもしっかりと起動した。コア数が少ないので(Core 2 Duo)一度に起動できる仮想マシンは5マシンが限界だった。

    自鯖サイトを外部公開

    せっかく自鯖買ったし、仮想環境も構築したのだから仮想環境に建てたサーバーを外部公開したいと考えた。
    しかし現実はそこまで優しくなかった。iptablesの設定を行い、外のパケットを内へと転送しなくてはならないからだ。ubuntuはiptablesラッパーとしてデフォルトとして推奨されているファイアウォールが、ufwであるため、ufwを設定すれば転送設定できるのかと思っていた。

    設定をするには /etc/ufw/before.rules を弄るしかなかった。PREROUTINGやPOSTROUTINGの設定を行う必要がある。そしてそのたびに、ubuntuを再起動するしかなかった(と思い込んでいた)

    ubuntuを再起動すると、一緒にubuntuの中にあるkvmの仮想化されたマシンも再起動がかかってしまう。だからただの再起動以上に余計に時間がかかってしまっていた。何度も、何度も再起動を行った。

    そしてついに仮想化されたサーバーは外部へ公開されたのだった。
    この時にはiptablesコマンドで設定を削除したり追加したりすれば別に再起動はいらないこと気づいてなどはいなかった・・・。

    再起動すると繋がらない

    不思議なことが起きた。ubuntuを再起動すると、仮想化サーバー内に立ち上げたHTTPサーバーに接続できなくなってしまうことがあった。なぜ繋がらないのか調べてみると原因はiptablesではなく、kvmが原因だった。ubuntu再起動時にvirbr1という仮想ブリッジネットワークが作られる。それと同時にこのネットワークへの転送を禁止するルールがiptablesに追加されてしまう。

    今のところ、iptablesへ自動的にルールが追加されることをやめる方法は見つけられていないので、手動でルールを削除することにした。ルールさえ削除してしまえは外部からの通信が可能になる。そしてこのとき、iptabelsを書き換えることに再起動がいらないということに知ったのだ・・。

    MBPから直接仮想サーバーへ接続したい

    これまで仮想サーバーにアクセスするには、一旦HP自鯖へSSHを行い、そこから更にSSHで仮想サーバーへ接続していた。

    MBPはBUFFALOルーターから更にPR-400-KIルーターへ接続しているが、PR-400-KIが、仮想サーバーがあるセグメント192.168.122.Xというセグメントを知らない。そのため、PR-400-KIの管理画面を開き、静的ルーティング設定で192.168.122.1というゲートウェイを追加した。実際には、IPアドレスが192.168.122.0/24でゲートウェイは自宅サーバーのIPアドレスを設定した。

    まだ繋がらない

    しかし、そう簡単にはいかない。iptablesでパケットの転送量を調べつつコマンドを連打しても、パケットはちゃんと転送されているように見える。pingも通る。それでも通信ができなかった。何度も試したが、土日を4日分費やした。

    しばらくした後、ネットで色々と調べていると「tcpdump icmp」というコマンドを知った。
    このコマンドはtcpのパケットキャプチャでicmpのパケットのみを表示してくれる。このコマンドを自鯖と仮想サーバー両方に仕掛け、pingを打ってみた。しかし、pingはちゃんと疎遠している。今度はcurlでhttpパケットを送ってみた。

    なんと、リクエストは受けられたがそのパケットを送り返すことに失敗していた。まさか・・。

    PR-400-KIのping機能

    そういえば、PR-400-KIにもping通信機能があることを忘れていた。PR-400-KIからMBPとHP自鯖の仮想マシンへpingを送ることにした。実際にやってみると、HP自鯖の仮想マシンにはpingが通るが、MBPへはpingが通らなかった。

    実は、仮想マシンからMBPへ向けて送ったはずのpingはMBPが返したものではなく違う端末が返してMBPへ通信ができると勘違いしてしまっていたようだった。

    となると、問題の原因は絞られる。PR-400-KIからMBPにある間のBUFFALOルーターの間のルーティングがうまくいっていないということなのだから、PR-400-KIのルーティングテーブルにMBPが属しているサブネットを定義し、PR-400-Kからpingを行うと無事に疎通したのだった。試しに、BUFFALOルーターからもpingを送っても無事に成功した。

    そしてついに・・

    MBPから直接HP自鯖の仮想マシンに接続することに成功した・・・。
    長かった。とても長かった・・・。

    まとめ

    • ルーターのping機能大事
    • スタティックテーブル大事
    • ping とlsof -i と netstat -r と arp -a と traceroute 大事
    • 行きが良くても帰りも大事
    • 行きと帰りの経路が正しい道のりかも大事
    • ゲートウェイ大事
    • フォワードポリシー大事
  • ssh_exchange_identification: Connection closed by remote host と表示される問題について

    VMWareを使ってssh接続を試みているのだけれど、
    「ssh_exchange_identification: Connection closed by remote host」と表示されてログインできなかった。

    sudo vim /etc/hosts.allow
    sshd: all
    
    sudo vim /etc/hosts.deny
    sshd: ?

    の値を見ることで接続できるようになるらしいが、やっても無駄だった。

    結局のところ、原因はアンチウイルスソフトのESETのファイアウォールがsshの通信を許可しなかったのが原因みたい。
    一度対話モードにして、sshによる接続を行うと「許可しますか?」と聞かれるので、はいと答え、また自動モードに切り替えるといいようです。

    ESET以外にもファイアウォール機能があるアンチウィルスソフトも要チェックです。

  • プロジェクト管理ソリューション「JIRA」を試す

    前から気になっていたプロジェクト管理ソリューションJIRAを試してみようと思います。プロジェクト管理と言えばRedmine等のBTSとかリポジトリ管理とかそんなかんじのものを思い浮かべますが、JIRAもそれと同じようなものであるようです。

    しかも高機能な上に、他のプロジェクト管理ツールからチケットをインポートできる機能も併せ持つ今話題のプロジェクト管理ツールだということですから、これは見逃せません。しかも安い。

    というわけで使ってみた。

    お試しということで体験版をダウンロードします。

    # ダウンロード先
    http://www.atlassian.com/ja/software/jira/download
    
    cd /usr/local/src/
    wget http://www.atlassian.com/software/jira/downloads/binary/atlassian-jira-5.2.4.tar.gz
    tar zxvf atlassian-jira-5.2.4.tar.gz
    cd atlassian-jira-5.2.4-standalone/Code language: PHP (php)

    中身を見てみる

    .
    ├── NOTICE
    ├── README.html
    ├── README.txt
    ├── atlassian-jira
    ├── bin
    ├── conf
    ├── external-source
    ├── lib
    ├── licenses
    ├── logs
    ├── temp
    ├── tomcat-docs
    ├── webapps
    └── workCode language: CSS (css)

    README.txt があるので vim で開いてみます。

    vim README.txtCode language: CSS (css)
    BRIEF INSTALL GUIDE
    -------------------
    
    1. Install Oracle's (formerly Sun's) Java Development Kit (JDK) or
       Java Runtime Environment (JRE) version 1.6 or above:
    
       http://www.oracle.com/technetwork/java/javase/downloads/index.html
    
    2. Set the JAVA_HOME variable to where you installed Java. The Windows
       and Linux installers will do this for you. See the following instructions
       for details:
    
       http://docs.atlassian.com/jira/docs-052/Installing+Java
    
    3. Set your JIRA Home Directory.
       Instructions on how to set your JIRA Home Directory can be found here:
    
       http://docs.atlassian.com/jira/docs-052/Setting+your+JIRA+Home+Directory
    
    4. Run 'bin\\start-jira.bat' (for Windows) or 'bin/start-jira.sh' (for Linux/Solaris)
       to start JIRA. Check that there are no errors on the console. See below for
       troubleshooting advice.
    
    5. Point your browser at http://localhost:8080/
       You should see JIRA's Setup Wizard.
    
    Full documentation is available online at:
    
    http://docs.atlassian.com/jira/docs-052/Installing+JIRACode language: PHP (php)

    なるほど・・・。これは敷居が高そうだ・・。
    とりあえず1番から進めていきます。

    JREのインストール

    JIRAを動かすにはJavaが必要なので、 ここからJDKかJREをダウンロードします。私はJDKを選択しました。

    そしてインストール

    tar xzvf jdk-7u10-linux-x64.gz
    cd jdk1.7.0_10/
    mv jdk1.7.0_10 /usr/local/
    vim $HOME/.bashrc
    
    # 追加
    export  PATH=/usr/local/jdk1.7.0_10/bin:$PATH
    
    #vimを保存して終了し、実行
    export  PATH=/usr/local/jdk1.7.0_10/bin:$PATH
    
    Code language: PHP (php)

    ここまでやって、javaを実行できるか確認します。

    java -version
    java version "1.7.0_10"
    Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
    Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)Code language: CSS (css)

    これでjavaが実行できるようになりました。

    JAVA_HOMEを定義

    echo JAVA_HOME="/usr/local/jdk1.7.0_10/" >> /etc/environment
    JAVA_HOME="/usr/local/jdk1.7.0_10/"
    echo $JAVA_HOMECode language: PHP (php)

    を実行して、環境変数にJAVA_HOMEを定義します。

    実行

    cd atlassian-jira-5.2.4-standalone/
    bin/start-jira.sh

    これでもう実行できるようです。

    JIRAへアクセス

    http://localhost:8080/

    へアクセスします。

    なんかでてきた

    スクリーンショット 2013-01-03 7.29.43

    どうやらJIRAのホームディレクトリがないというエラーのようです。JIRAのホームディレクトリを指定するには環境変数としてJIRA_HOMEを定義してやればいいようです。

    echo JIRA_HOME="/home/nocturne-project/JIRA/" >> /etc/environment
    JIRA_HOME="/home/nocturne-project/JIRA/"
    echo $JIRA_HOMECode language: PHP (php)

    環境変数の設定が完了したら、一度JIRAのプロセスをキルします。

    ps aux | grep JIRA
    kill (JIRAのpid)

    あらためて実行

    スクリーンショット 2013-01-03 7.41.26

    おお!来ました!

    データベースの選択では、とりあえずお試しなので内部を選択しました。この操作には少し時間がかかります。

    アプリケーションの設定

    スクリーンショット 2013-01-03 7.43.33

    評価ライセンスの発行

    スクリーンショット 2013-01-03 7.45.51

    アンケートが求められる

    スクリーンショット 2013-01-03 7.46.42

    管理者アカウントの登録

    スクリーンショット 2013-01-03 7.48.08

    送信メールサーバーの設定

    スクリーンショット 2013-01-03 7.49.05

    ようこそ画面

    スクリーンショット 2013-01-03 7.49.57

    ダッシュボード

    System Dashboard - test

    プロジェクト管理画面

    Demonstration - test

    これには驚きました。メニュー部分がAJAXの非同期読み込みで、ぬるぬる画面が切り替わります。
    スクリーンショット 2013-01-03 7.52.57

    課題作成画面(チケット作成画面)

    スクリーンショット 2013-01-03 7.54.09
    なんとモーダルウィンドウ!

    スクリーンショット 2013-01-03 7.56.29

    スクリーンショット 2013-01-03 7.54.09
    課題(チケット)の作成は非同期通信で一瞬で終わる。早い!

    課題リスト(チケットリスト)

    スクリーンショット 2013-01-03 7.58.16
    見て分かる通り、検索結果のフィルタは保存できる機能がすごい!

    スクリーンショット 2013-01-03 7.59.33
    ネジマークをクリックすれば、各チケットにダイレクトに状態の変更が可能!

    課題のクローズ

    スクリーンショット 2013-01-03 8.00.33スクリーンショット 2013-01-03 8.00.42

    課題のクローズもほんの一瞬で終わる。

    一目瞭然なチャート

    スクリーンショット 2013-01-03 8.01.41
    まだあまり課題を登録していないのでわかりずらいですが、課題数ベースで作成した課題と完了済みの課題との比較チャートです。一目均衡表の雲のようです。

    誰の作業量が一番多いのか、少ないのかわかる課題画面

    スクリーンショット 2013-01-03 8.03.43
    この機能こわいですね。作業量ベースで差が丸見えというか・・。力を魅せつけられるというか・・。

    プラグインの導入

    スクリーンショット 2013-01-03 8.06.26

    gitプラグイン(有料)

    スクリーンショット 2013-01-03 8.09.27
    これはマイナスポイントかなぁ・・。デフォルトではCVSだけなのかなリポジトリ管理は。

    スクリーンショット 2013-01-03 8.12.02
    あれっ・・コミットしてたはずなのですが・・・。

    まとめ

    メリット

    • AJAXによる非同期読み込みで画面遷移をほとんど発生させずストレスのない挙動
    • 非プログラマな職の人でも使いやすい。直感的でわかりやすい
    • グラフが見やすい
    • 進捗管理しやすい
    • 他の人の作業状況が把握しやすい
    • シンプル
    • プラグインが簡単にいれられる
    • 最初のインストールが少しむずかしいが、インストールさえできれば簡単

    デメリット

    • リポジトリ管理がヒドイ
    • シンプルすぎて細かいところに手がとどいてない感じがする
    • バージョンやマイルストーン・・・どこ・・?
    • やっぱりバーンダウンチャートがほしい
    • RedMineのTime Trackerプラグインには勝てない
    • Redmineのチャートプラグインのほうが高機能

    追記(2013/07/20)

    JIRAのの最新版では下記の機能が追加されていました。かなり使えるようになっており、RedMineを超えているかもしれません。

    • マイルストーン(バージョン管理)
    • bitbacket連携によるgitの利用(5userまで無料)
    • TEMPOプラグインによるタイムトラッキング機能(1000円買いきりの機能)