2012年11月19日月曜日

MAMPにApacheモジュール追加してみた

ことの始まりは、MAMPのapacheにapxsコマンドでモジュール追加しようとしたら、config_vars.mkが無いという警告が出てビルドできないじゃないですか・・・。
というわけで、メモ

config_vars.mkが無いよ・・・

cannot open /Applications/MAMP/Library/build/config_vars.mk: No such file or directory at /Applications/MAMP/bin/apache2/bin/apxs line 217.


そんなわけで、いろいろ試したところapacheをソースからビルドして、
関連ファイルをコピーという、結局MAMPを使う意味が半減する罠にはまりました。

MAMPのapacheバージョン確認



/Applications/MAMP/bin/apache2/bin/httpd -v

Server version: Apache/2.2.22 (Unix)
Server built: Jul 4 2012 16:45:07


Apacheのソースからビルド



先ほど確認したバージョンと同じソースコードをダウンロードする

cd /usr/local/src
curl -L -O http://archive.apache.org/dist/httpd/httpd-2.2.22.tar.bz2
tar jxfv httpd-2.2.22.tar.bz2
cd httpd-2.2.22
./configure --enable-so --prefix=/tmp/httpd-2.2.22


errorが出ております・・・

configure: error: in `/usr/local/src/httpd-2.2.22':
configure: error: C compiler cannot create executables
See `config.log' for more details.


config.log見ると、ccが無くてNo such file or directoryが多数あるんですが、

./configure: line 4709: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc: No such file or directory


MountainLionだから?かわかりませんが、パスが変わったみたいですね。
XcodeDefault.xctoolchainというパスがあったのでとりあえずシンボリックリンク張って対応

cd /Applications/Xcode.app/Contents/Developer/Toolchains
sudo ln -s XcodeDefault.xctoolchain OSX10.8.xctoolchain


気を取り直して再実行

cd /usr/local/src/httpd-2.2.22
./configure --enable-so --prefix=/tmp/httpd-2.2.22
make
make install


必要なファイルおよびディレクトリーをコピーします。

cp -r /tmp/httpd-2.2.22/build /Applications/MAMP/Library/
cp -r /tmp/httpd-2.2.22/include /Applications/MAMP/Library/


必要に応じてconfig_vars.mkの中身のパスを書き換え

cd /Applications/MAMP/Library/build
perl -i -p -e 's/\/tmp\/httpd-2.2.22/\/Applications\/MAMP\/Library/g' *

環境により微調整が必要です。
vi /Applications/MAMP/Library/build/config_vars.mk
exp_sysconfdir = /Applications/MAMP/conf/apache
sysconfdir = /Applications/MAMP/conf/apache


これでApacheモジュール追加できるようになりました。

参考



  • http://zuzara.com/blog/2010/04/08/compiling-php5-3-2-on-mamp/

  • https://groups.google.com/forum/#!msg/phusion-passenger/5trJ1eoN6cE/phDt_M-UKIYJ
  • 2012年10月15日月曜日

    gettextインストールするのにこんなに時間かかるはずがない for MacPorts - その後cmakeも

    久しぶりにosxにMacPortsでphpをインストールしようとしたら、
    なぜかgettextがインストールできないすてきな罠に出会いましたのでメモを残します。

    環境
    OSX 10.8 (Mountain Lion)
    MacPorts 2.1.2

    お急ぎの方に先に結論を申し上げると、次の2行でインストールできました。

    export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework
    port install gettext

    ログなど


    sudo port install gettext
    途中省略
    ---> Fetching archive for gettext
    ---> Attempting to fetch gettext-0.18.1.1_2.darwin_12.x86_64.tbz2 from http://packages.macports.org/gettext
    ---> Attempting to fetch gettext-0.18.1.1_2.darwin_12.x86_64.tbz2 from http://mse.uk.packages.macports.org/sites/packages.macports.org/gettext
    ---> Attempting to fetch gettext-0.18.1.1_2.darwin_12.x86_64.tbz2 from http://lil.fr.packages.macports.org/gettext
    ---> Fetching distfiles for gettext
    ---> Attempting to fetch gettext-0.18.1.1.tar.gz from ftp://ftp.dti.ad.jp/pub/GNU/gettext
    ---> Verifying checksum(s) for gettext
    ---> Extracting gettext
    ---> Applying patches to gettext
    ---> Configuring gettext

    このまま数時間放置していたのに状況変わらず・・・
    CPU利用率を見ても動いている気配がない・・・
    ターミナルのメニューにjavacの文字が見えているので少し調べると

    https://trac.macports.org/ticket/34221
    どうもJAVA_HOME設定するとよいらしい。

    export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework
    port install gettext
    ---> Computing dependencies for gettext
    ---> Configuring gettext
    ---> Building gettext
    ---> Staging gettext into destroot
    ---> Installing gettext @0.18.1.1_2
    ---> Activating gettext @0.18.1.1_2
    ---> Cleaning gettext
    ---> Updating database of binaries: 100.0%
    ---> Scanning binaries for linking errors: 100.0%
    ---> No broken files found.

    インストールできましたよ。

    参考まで

    ちなみにMac Developer Libraryを参考にした下記のパスでは動作しませんでした。


    export JAVA_HOME=`/usr/libexec/java_home`

    java_homeコマンドで設定されたパス
    echo $JAVA_HOME
    /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

    その後cmakeもインストールできなかった・・・

    次のようにmysql5.5をインストールしようとしたが、cmakeのビルドで止まり同様に動かない様子。

    sudo port install mysql55-server

    こちらもJAVA_HOMEと関係しているか不明のままですが、
    次の手順でいったんcmakeを削除してから再度インストールできました。

    参考
    http://stackoverflow.com/questions/5576785/problem-installing-cmake-with-macports


    sudo port clean cmake
    sudo port install cmake

    2012年10月1日月曜日

    そろそろ通信回線について言っておくか



    iPhone5の到来によりコスト配分が変わったので、
    通信回線について言っておきます。

    通信回線
    以下、最近使っていた通信回線ですが、iPhone5が加わったのでこれを整理したいと思います。




































    通信回線電波状況通信速度コストコメント
    docomo 3Gバランスが良い。
    いろんな場所で使える安心のドコモ。
    IIJmio×月額945円でdocomo回線なのが最大の魅力。
    通信速度が128kbpsなのでメールとtwitterだけなど
    使うものを限定するかWifiと併用すればコスト面で最強。
    オプションでLTEも使える。
    WiMAXテザリングで通信データ量の上限がないのはこれだけ。
    PCを使う場合はとくに制限がないのは安心です。
    建物に囲まれた場所や地下などで
    使えないことが多い。
    au LTE◎(3Gも含む)iPhone5を購入しなければ使うことはないと思いますが、
    LTEでテザリングできるのは魅力です。
    まだLTEが普及していないので来年以降に期待。


    docomo 3G


    とにかくバランスがいいけど、これと言う売りがないのがドコモです。
    あえて言うなら地方へ行った時の安心感ですね。
    LTE(Xi)への移行はコスト面でデメリットが大きいので、もう少しがんばってほしい。
    今後は、できるだけ安く運用できるようにプランやオプションの見直しを行い、
    電話、メールなどはすべてiPhone5に転送するように設定。
    塩漬け状態ですね。

    IIJmio


    私の場合は、ウェルカムパック for イオンを購入しました。
    通信速度が128kbspなので用途が限られます。
    追加料金でLTEも使えるのですが、コストを下げるがの目的であれば使わないと思います。
    自宅、職場、駅、カフェなどでWifiが使えればこれでも十分ですね。
    テザリングはWifiルータによっては使えるらしいですが、
    128kなのであまり期待しないほうがよいかと思います。
    Wifiと併用してAndroid開発端末用かな。

    WiMAX


    通信制限なくテザリングできるのはこれだけですね。
    コスト面でもLTEと比べると安いので1年くらいお世話になりました。
    ビルで囲まれた場所や地下で使えなかったことが残念です。
    今後はLTEに設備投資していくと思われるので、どう差別化していくのかが心配です。
    iPhone5を購入したため手放すことにしましたが、今後は容量を気にする必要があるのでそれが気がかりです。

    au LTE


    auに限らずLTEの料金は高いですね。これはどのキャリアでも言えるのですが、
    LTEで通信できる場所はまだ限られているので割高感は否めません。
    良くも悪くもiPhone5のおかげでLTEの競争が激しくなるので、
    来年はLTEがどこでも使えるようになって安くなることを祈ります。
    二年縛りですが、メインのdocomoは塩漬けで残しているので、
    より良いサービスがあればすぐに解約します。

    iOS6の地図で騒がれているAppleですが、LTEだけ見てもiPhoneの影響は大きいですね。
    NFCもつけてほしかったな・・・。

    最後にこれが言いたかった。
    docomoさん、応援してます!
    ユーザーの声をもっと聞いてほしいな。

    2012年8月27日月曜日

    MacPortsインストール・アンインストール for OSX 10.8 (Mountain Lion)

    たまにしかやらないのでメモ

    MacPorts参考


  • MacPorts
  • MacPorts Guide

  • 事前準備


  • Xcode をApp Storeでインストールする
  • Command Line Tools (OSX Mountain Lion) for Xcodeをインストールする

  • MacPortsをソースコードからインストールする


  • ファイルの置き場所
  • curl -O https://distfiles.macports.org/MacPorts/MacPorts-2.1.3.tar.bz2
    tar jxvf MacPorts-2.1.3.tar.bz2
    cd MacPorts-2.1.3
    ./configure && make && sudo make install
    cd ../
    rm -rf MacPorts-2.1.3
    export PATH=/opt/local/bin:/opt/local/sbin:$PATH
    sudo port -v selfupdate
    

    MacPortsアンインストール

    sudo port -fp uninstall installed
    sudo rm -rf \
    /opt/local \
    /Applications/DarwinPorts \
    /Applications/MacPorts \
    /Library/LaunchDaemons/org.macports.* \
    /Library/Receipts/DarwinPorts*.pkg \
    /Library/Receipts/MacPorts*.pkg \
    /Library/StartupItems/DarwinPortsStartup \
    /Library/Tcl/darwinports1.0 \
    /Library/Tcl/macports1.0 \
    ~/.macports
    

    上記のコマンドをワンライナーで実行する いずれも管理者権限で実行します。
    インストール
    curl https://raw.github.com/rx93/install/master/bin/macports.sh | env VER=2.1.3 sh
    
    アンインストール
    curl https://raw.github.com/rx93/install/master/bin/macports_uninstall.sh | sh
    

    残暑お見舞い申し上げます

    残暑お見舞い申し上げます。

    少しずつ秋が近づいているような気がすると思えば、
    連日の猛暑でそんなことも吹き飛んでいますね。
    たぶん毎年思うのですが、残暑って年々厳しくなっているような気がします。

    もうすぐ9月ですが、iPhoneやらKindleやらいろいろあるのと、
    個人的にも忙しくなりそうな予感ですので、体には気をつけたいものです。

    最近、何をしているかよく聞かれるのですが、
    先月までドラゴンズドグマで今月からドラクエ10・・・ではなくて・・・、
    やっと近々お話ができるところまできましたので、
    来月あたりご挨拶に伺おうと思っております。

    仕事面では、これまではサーバサイドの開発を極めようと精進してきましたが、
    直近は主にクライアントサイドの技術を勉強しています。
    クライアントサイドの技術と言っても広範囲に及ぶのですが、
    まずは本業のプログラミングからで、地味にJavaScript、Obejctive-Cの勉強などをしています。
    また、サーバサイドですが、Rubyも始めました。
    今後も少しでも誰かの手助けになれるような技術を身につけようと思います。

    業界によっては夏期に夏期休暇を取れない方もいらっしゃると思いますが、
    夏の疲れには、充分にご注意ください。

    今後ともよろしくお願い申し上げます。

    2012年7月30日月曜日

    激戦価格帯のSSD プレクスター製「M5S」を試す

    プレクスター製のSSD「M5S」の256GB版が期間限定で値下がりして、
    激戦価格帯である1万5000円台に突入しました。

    プレクスター「M5S」256GBが値下がり、激戦の1万5千円台に3日までの期間限定

    256GBのSSDもついに普及価格帯になりましたね。
    Crucial m4は、以前から他にくらべると安いのですが、
    ついにというか、Intelが値下げをしたので他も一気に下げてきましたね。
    厳しい戦いになりそうですが、Intel以外もがんばって良い製品を作って生き残ってほしいものです。
    ちなみに、iMac購入時に1TBのHDDを256GBのSSDに変更すると+46,725円なので、
    残念ですが、この価格差が反映されるのはもう少し先になりそうです。

    それでは、激戦に参戦したプレクスターを応援すべく「M5S」を試してみます。
    [caption id="attachment_88" align="alignnone" width="300"] Plextor M5S 256GB[/caption]

    まずは、初期化したSSDにMountain Lion 10.8をインストールしてXbenchで評価してみます。

    ベンチマーク


    [caption id="attachment_107" align="aligncenter" width="486"]PLEXTOR M5S PLEXTOR M5S[/caption]

    世代が違いますが、m4に比べてもいい結果ではないでしょうか。
    m4は、しばらく使ってますが、特に問題なく満足度の高い製品です。
    数値だけ見ると、それを超えるかもしれません。今後の安定動作に期待したいと思います。

    今回は、デスクトップのOSX用に購入したのですが、
    他のPCのHDDも交換したくなりますね・・・もう1台買おうかな・・・期間限定という言葉に弱い。

    比較のために、Crucial m4 128GBと、WDの3TBのHDDも計測しましたが、
    計測条件が統一されていないので、結果は参考程度にお考えください。
    詳細は、下記をご覧ください。

    PLEXTOR PX-256M5S



    Results 417.27
    System Info
    Xbench Version 1.3
    System Version 10.8 (12A269)
    Physical RAM 6144 MB
    Model MacPro4,1
    Drive Type PLEXTOR PX-256M5S
    Disk Test 417.27
    Sequential 262.49
    Uncached Write 392.72 241.12 MB/sec [4K blocks]
    Uncached Write 315.17 178.32 MB/sec [256K blocks]
    Uncached Read 143.87 42.10 MB/sec [4K blocks]
    Uncached Read 389.26 195.64 MB/sec [256K blocks]
    Random 1016.91
    Uncached Write 1691.40 179.05 MB/sec [4K blocks]
    Uncached Write 578.04 185.05 MB/sec [256K blocks]
    Uncached Read 2996.43 21.23 MB/sec [4K blocks]
    Uncached Read 782.13 145.13 MB/sec [256K blocks]

    M4-CT128M4SSD2



    Results 290.77
    System Info
    Xbench Version 1.3
    System Version 10.8 (12A269)
    Physical RAM 4096 MB
    Model MacBookPro7,1
    Drive Type M4-CT128M4SSD2
    Disk Test 290.77
    175.58
    Uncached Write 316.59 194.38 MB/sec [4K blocks]
    Uncached Write 258.90 146.49 MB/sec [256K blocks]
    Uncached Read 75.67 22.15 MB/sec [4K blocks]
    Uncached Read 392.79 197.41 MB/sec [256K blocks]
    Random 845.48
    Uncached Write 1082.18 114.56 MB/sec [4K blocks]
    Uncached Write 481.27 154.07 MB/sec [256K blocks]
    Uncached Read 1424.69 10.10 MB/sec [4K blocks]
    Uncached Read 973.49 180.64 MB/sec [256K blocks]

    WDC WD30EZRX-00MMMB0



    Results 82.31
    System Info
    Xbench Version 1.3
    System Version 10.7.4 (11E53)
    Physical RAM 6144 MB
    Model MacPro4,1
    Drive Type WDC WD30EZRX-00MMMB0
    Disk Test 82.31
    Sequential 136.91
    Uncached Write 149.58 91.84 MB/sec [4K blocks]
    Uncached Write 130.17 73.65 MB/sec [256K blocks]
    Uncached Read 115.04 33.67 MB/sec [4K blocks]
    Uncached Read 162.47 81.66 MB/sec [256K blocks]
    Random 58.84
    Uncached Write 20.42 2.16 MB/sec [4K blocks]
    Uncached Write 308.69 98.82 MB/sec [256K blocks]
    Uncached Read 102.23 0.72 MB/sec [4K blocks]
    Uncached Read 167.42 31.07 MB/sec [256K blocks]

    2012年7月21日土曜日

    充電できません - MacBook Pro 13-inch, Mid 2010の場合

    毎日酷使しているわりには調子のよいMacBookProなんですが、
    ただ・・・、バッテリーだけはご機嫌斜めのようで充電できなくなりました。



    さすが、Apple製品。
    はっきりとした物言いです。Mac好きにはたまりません。

    Genius Barを予約してバッテリー交換かと思いましたが、念のためちょっと調べてみました。
    Appleサポート


    ふむふむ、SMCリセットはまだ試してないので、試してみる。

    こちらの手順で、SMCリセットしたところ充電できるようになりました。
    なるほど、とりあえずまだ使えるってことでいいのかな。

    今後のために、バッテリー交換に関するリンクも付けておきます。
    MacBookバッテリー交換

    2012年6月28日木曜日

    「git-flowによるブランチ管理」を試してみる

    git を使いこなすのが難しいと感じる今日このごろ。
    皆様いかがお過ごしでしょうか。
    gitを使っていると作業中のブランチどうするのとかいろいろ気になりますね。
    でも、ブランチの管理って複雑なんだよなーとか・・・思っていたらオライリーのサイトで「git-flowによるブランチ管理」という目からうろこのような記事がありました。
    ブランチ管理が共通化できて便利そうなので試してみること・・・。

    ちなみにgit-daliyというGREEのインフラの方(sotarokさん)が作成したものもあるようです。
    こちらは、PHPで作られているようですね。

    参考

    git-flow によるブランチの管理
    A successful Git branching model(日本語訳)
    gitflow

    コマンドが出力するメッセージも合わせて記述しているので、多少見にくいかもしれません。
    内容的にあまり変わりないと思うので、試したい場合は、上記参考サイトの「git-flowによるブランチ管理」をおすすめいたします。

    試した環境

    CentOS 6.2
    Git version 1.7.11.1 (2012/6/28現在のリリースバージョン)

    1. git-flowをインストールする

    いきなり少し違いますが、この環境では、gitを/usr/local/gitにインストールしたので、コマンドにINSTALL_PREFIXオプションつけています。
    sudo su -
    cd /usr/local/src
    wget --no-check-certificate -q -O - https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | env INSTALL_PREFIX=/usr/local/git/bin bash
    chmod -R 755 /usr/local/git/bin
    

    2. 空のリポジトリを作成する

    git init --bare --shared=group foobar.git
    cp foobar.git/hooks/post-update.sample foobar.git/hooks/post-update
    

    3. 作業用のディレクトリに移動して空のリポジトリをcloneする

    git clone /var/git/foobar.git
    

    4. git-flowを導入する

    cd foobar
    git flow init
    
    デフォルトのままEnterキーを押し続けます。
    次の内容を聞かれますので必要があれば適宜で変更してください。
    No branches exist yet. Base branches must be created now.
    Branch name for production releases: [master]
    Branch name for "next release" development: [develop]
    How to name your supporting branch prefixes?
    Feature branches? [feature/]
    Release branches? [release/]
    Hotfix branches? [hotfix/]
    Support branches? [support/]
    Version tag prefix? []
    
    これなら既存のプロジェクトにも導入できますね。

    5. 機能(helloworld)を追加する

    git flow feature start helloworld
    Switched to a new branch 'feature/helloworld'
    Summary of actions:
    - A new branch 'feature/helloworld' was created, based on 'develop'
    - You are now on branch 'feature/helloworld'
    
    Now, start committing on your feature. When done, use:
    
    git flow feature finish helloworld
    

    6. ブランチを確認する

    git branch
    develop
    * feature/helloworld
    master
    

    7. 機能を追加する

    vi helloworld.pl
    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    print "Hello World\n";
    

    8. リポジトリに追加する

    git add helloworld.pl
    git commit -m "HelloWorld"
    
    [feature/helloworld 0fabb48] HelloWorld
     1 file changed, 7 insertions(+)
     create mode 100755 helloworld.pl
    
    コミットしました。

    9. 開発用ブランチ(develop)にマージする

    git flow feature finish helloworld
    
    Switched to branch 'develop'
    Updating e69c50f..0fabb48
    Fast-forward
     helloworld.pl | 7 +++++++
     1 file changed, 7 insertions(+)
     create mode 100755 helloworld.pl
     Deleted branch feature/helloworld (was 0fabb48).
     
     Summary of actions:
     - The feature branch 'feature/helloworld' was merged into 'develop'
     - Feature branch 'feature/helloworld' has been removed
     - You are now on branch 'develop'
    
    上記のメッセージのとおり、
    ・feature/helloworldブランチがdevelopブランチにマージします。
    ・feature/helloworldブランチは削除されます。
    ・developブランチに切り替わります。

    10. ブランチを確認する

    git branch
    * develop
      master
    
    確かにそのとおりです。

    11. developブランチをpushする

    git push origin develop
    
    Counting objects: 5, done.
    Delta compression using up to 2 threads.
    Compressing objects: 100% (3/3), done.
    Writing objects: 100% (5/5), 438 bytes, done.
    Total 5 (delta 0), reused 0 (delta 0)
    Unpacking objects: 100% (5/5), done.
    To /var/git/foobar.git
     * [new branch]      develop -> develop
    

    12. ver1.0.0としてリリースブランチを作成する

    git flow release start 1.0.0
    
    Switched to a new branch 'release/1.0.0'
    Summary of actions:
    - A new branch 'release/1.0.0' was created, based on 'develop'
    - You are now on branch 'release/1.0.0'
    
    Follow-up actions:- Bump the version number now!
    - Start committing last-minute fixes in preparing your release
    - When done, run:
    
      git flow release finish '1.0.0'
    

    13. ブランチを確認

    git branch
      develop
      master
      * release/1.0.0
    

    14. READMEを作成する

    vi README
    README
    ====================================
    
    - 1.0.0: print "Hello World"
    

    14. リリースする

    git add README
    git commit -m 'update readme for release 1.0.0'
    
    [release/1.0.0 e331ab0] update readme for release 1.0.0
     1 file changed, 4 insertions(+)
     create mode 100644 README
     
     git flow release finish 1.0.0
     
     # エディタが開きマージの内容やtagの入力など求められるので入力して保存する
     
     Switched to branch 'master'
     Merge made by the 'recursive' strategy.
     README        | 4 ++++
     helloworld.pl | 7 +++++++<
     2 files changed, 11 insertions(+)
     create mode 100644 README
     create mode 100755 helloworld.pl
     Switched to branch 'develop'
     Merge made by the 'recursive' strategy.
     README | 4 ++++
     1 file changed, 4 insertions(+)
     create mode 100644 README
     Deleted branch release/1.0.0 (was e331ab0).
     
     Summary of actions:
     - Latest objects have been fetched from 'origin'
     - Release branch has been merged into 'master'
     - The release was tagged '1.0.0'
     - Release branch has been back-merged into 'develop'
     - Release branch 'release/1.0.0' has been deleted
    

    15. ブランチを確認する

    git branch
    * develop
    master
    

    16. タグを確認する

    git tag
    1.0.0
    

    17. pushする

    git push
    
    Counting objects: 5, done.
    Delta compression using up to 2 threads.
    Compressing objects: 100% (4/4), done.
    Writing objects: 100% (4/4), 442 bytes, done.
    Total 4 (delta 1), reused 0 (delta 0)
    Unpacking objects: 100% (4/4), done.
    To /var/git/foobar.git
      0fabb48..e006137  develop -> develop
    

    18. タグをpushする

    git push origin 1.0.0
    
    Counting objects: 2, done.
    Delta compression using up to 2 threads.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (2/2), 342 bytes, done.
    Total 2 (delta 0), reused 0 (delta 0)
    Unpacking objects: 100% (2/2), done.
    To /var/git/foobar.git
    * [new tag]         1.0.0 -> 1.0.0
    

    19. 修正用のブランチを作成する

    git flow hotfix start 1.0.1-bugfix
    
    Switched to a new branch 'hotfix/1.0.1-bugfix'
    
    Summary of actions:
    - A new branch 'hotfix/1.0.1-bugfix' was created, based on 'master'
    - You are now on branch 'hotfix/1.0.1-bugfix'
    
    Follow-up actions:
    - Bump the version number now!
    - Start committing your hot fixes
    - When done, run:
    
      git flow hotfix finish '1.0.1-bugfix'
    

    20. ファイルを修正する

    次のようにhelloworld.plに1行追加しました。
    git diff
    diff --git a/helloworld.pl b/helloworld.pl
    index 2382e77..6fa1737 100755
    --- a/helloworld.pl
    +++ b/helloworld.pl
    @@ -4,4 +4,5 @@ use strict;
     use warnings;
     
     print "Hello World\n";
     +print "BugFix\n";
    

    21. 修正版をコミットする

    git commit helloworld.pl -m "Bugfix."
    
    [hotfix/1.0.1-bugfix be609ab] Bugfix.
     1 file changed, 1 insertion(+)
    

    22. 修正版を適用する

    git flow hotfix finish 1.0.1-bugfix
    
    # マージする内容の確認やタグの入力など求められるので入力して保存する
    
    Switched to branch 'master'
    Merge made by the 'recursive' strategy.
     helloworld.pl | 1 +
     1 file changed, 1 insertion(+)
    Switched to branch 'develop'
    Merge made by the 'recursive' strategy.
     helloworld.pl | 1 +
     1 file changed, 1 insertion(+)
    Deleted branch hotfix/1.0.1-bugfix (was be609ab).
    
    Summary of actions:
    - Latest objects have been fetched from 'origin'
    - Hotfix branch has been merged into 'master'
    - The hotfix was tagged '1.0.1-bugfix'
    - Hotfix branch has been back-merged into 'develop'
    - Hotfix branch 'hotfix/1.0.1-bugfix' has been deleted
    

    23. タグの確認

    git tag
    1.0.0
    1.0.1-bugfix
    

    24. pushする

    git push
    
    Counting objects: 6, done.
    Delta compression using up to 2 threads.
    Compressing objects: 100% (4/4), done.
    Writing objects: 100% (4/4), 501 bytes, done.
    Total 4 (delta 1), reused 0 (delta 0)
    Unpacking objects: 100% (4/4), done.
    To /var/git/foobar.git
       e006137..da2ab95  develop -> develop
    
    git push origin 1.0.1-bugfix
    
    Counting objects: 2, done.
    Delta compression using up to 2 threads.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (2/2), 355 bytes, done.
    Total 2 (delta 0), reused 0 (delta 0)
    Unpacking objects: 100% (2/2), done.
    To /var/git/foobar.git
     * [new tag]         1.0.1-bugfix -> 1.0.1-bugfix
    
    git flowすばらしいです。
    私のようなブランチ管理が苦手な人でも使えそうです。

    1点気になったのは、リリースのバージョン情報ですね。
    細かい修正が多い場合は数値がどんどん追加されてカオスになりそうですね。
    そのあたりの運用ポリシーをどうするかが問題になりそうです。

    2012年6月19日火曜日

    nginxでgitリポジトリの公開 - Smart HTTPを試してみた



    nginxでgitリポジトリを公開してみます。
    Smart HTTPというのが使えるようですが、こちらの例ではApache HTTP Serverでしたが、
    特別なことは必要なさそうなので、nginxで試してみます。
    80番ポートで通信できるとか、認証方法によっては鍵が必要なかったりといろいろ使い道がありそうですね。


    こちらを参考にしました。



    nginx 1.2.1を使用しますが、インストール手順は省略します。
    上記の記事によるとgit-http-backendを動かす必要があるので、fcgiwrapを使ってみます。

    fcgiwrapインストール




    • fcgiwrapインストール

    yum -y install fcgi-devel.x86_64
    cd /usr/loca/src
    git clone git://github.com/gnosek/fcgiwrap.git
    cd fcgiwrap
    autoreconf -i
    ./configure --prefix=/usr/local/fcgiwrap
    make
    make install



    • fcgiwrapの起動

    sudo -u www /usr/local/fcgiwrap/sbin/fcgiwrap -c2 -s unix:/tmp/fcgiwrap.sock >> /var/log/fcgiwrap.log &



    nginx設定




    • 試しに設定したserverセクションです。

    ドメイン名、パス、認証方法などは適宜変更してください。

    server {
    listen   80;
    server_name git.example.com;
    
    access_log /usr/local/nginx/logs/git/access_log;
    error_log /usr/local/nginx/logs/git/error_log;
    
    location / {
    auth_basic            "Restricted";
    auth_basic_user_file  htpasswd;
    
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME /usr/local/git/libexec/git-core/git-http-backend;
    fastcgi_param GIT_PROJECT_ROOT /var/git;
    fastcgi_param GIT_HTTP_EXPORT_ALL "";
    fastcgi_param PATH_INFO $uri;
    
    fastcgi_pass unix:/tmp/fcgiwrap.sock;
    }
    }


    設定が完了したらnginxを再起動します。
    認証が無いと誰でもアクセスできるので、なんらかの認証は設定した方がいいですね。



    gitリポジトリ作成




    • 空のリポジトリ作成と初期設定

    git init --bare --shared=group foobar.git
    cd foobar.git
    cp hooks/post-update.sample hooks/post-update
    git update-server-info
    git config http.receivepack true



    • パーミッションの設定

    環境の合わせて適宜gitリポジトリのディレクトリに設定してください。

    動作確認



    git clone http://git.example.com/foobar.git
    Cloning into 'foobar'...
    Username:
    Password:
    warning: You appear to have cloned an empty repository.
    
    cd foobar
    touch test.txt
    git add .
    
    git commit -m 'test'
    [master (root-commit) b578ac5] test
    0 files changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 test.txt
    git push origin master
    
    git push origin master
    Username:
    Password:
    Counting objects: 3, done.
    Writing objects: 100% (3/3), 206 bytes, done.
    Total 3 (delta 0), reused 0 (delta 0)
    To http://git.example/com/foobar.git
    * [new branch]      master -> master



    pushができない(receivepackが有効でない場合のエラー)


    receive-packの設定が無効の場合は、pushができませんでした。
    アクセスログに401やWebDAVのPROPFINDメソッドとか出てたりしたので若干混乱します。
    原因は、下記のようにfcgiwrapが出力するreceive-packの設定でした。

    gitコマンドのエラー
    error: Cannot access URL http://git.example.com/foobar.git/, return code 22
    fatal: git-http-push failed
    
    fcgiwrapのエラー
    Service not enabled: 'receive-pack'


    これらの必要な設定(http.receivepack)は、git-http-backend(1) Manual Pageに書いてありますね。

    httpでも一通りgitが使えることが確認できました。




    2012年6月7日木曜日

    Pogoplug Series 4をアクティベートしてみた



    さっそくPogoplug Serries 4 開封の儀


    • 本体、電源、LANケーブル、マニュアル

    f:id:ono51:20120605080921j:image:w360


    • 背面には、右から電源、Ethernet、USB 3.0 x 2、謎のEJECTボタン

    f:id:ono51:20120605080721j:image:w360


    • 上の蓋を開けるとSATAとUSB 2.0が見えます。

    f:id:ono51:20120605080753j:image:w360
    ちなみに開け方がわからなかったけど、ボタンとかロックとかなく手前から持ち上げるだけでした。
    手前の白いボタンのようなものは、LEDが光るものでボタンではありません。


    • MacBookをSSDに換装したので余っていたHDD(2.5インチ)をとりあえずつないでみた。

    f:id:ono51:20120605080819j:image:w360


    • LANケーブルと電源ケーブルをつないげてしばらくすると緑ランプが点灯します。

    f:id:ono51:20120605081321j:image:w360
    ちなみに固定IPアドレスは使えないようです。DHCPでIPアドレスを自動取得します。

    ここからアクティベートの作業のためPCを使用します。


    • ブラウザで次のURLにアクセスします。


    日本語の場合
    http://my.pogoplug.com/ja/activate/
    英語の場合
    http://my.pogoplug.com/activate/



    • [次へ]をクリック

    f:id:ono51:20120607010655j:image:w360


    • [次へ]をクリック

    f:id:ono51:20120607013541j:image:w360


    • [次へ]をクリック

    f:id:ono51:20120607013647j:image:w360


    • しばらく待ちます

    f:id:ono51:20120607013648j:image:w360


    • [次へ]をクリック(今回は、2.5インチのHDDを接続済みなので)

    f:id:ono51:20120607013649j:image:w360


    • メールアドレス、パスワードを入力して、「利用規約に同意します。」にチェックをつけ[送信]ボタンをクリック

    f:id:ono51:20120607013650j:image:w360


    • pogoplug クラウドを奨められるが、とりあえず、無料5GBの[サインアップ]または[サインアップしない]をクリック

    その他のプランは有料なので用途に合わせて選択してください。
    f:id:ono51:20120607013651j:image:w360


    • Pogoplugの始め方について画面が表示されますので軽く読んで画面を閉じます。

    f:id:ono51:20120607015528j:image:w360


    • これで完了ですが、日本語にしたい場合は、画面右下の[English]を[日本語]に変更してください。

    f:id:ono51:20120607015526j:image:w360

    少し困ったこと


    アクティベートをやり直すために、管理画面から「Pogoplug で使用可能なデバイス」の「登録を取り消す」でデバイスを削除して何回かためしたところ、SATAのHDDがPogoplug上で認識しなくなりました。
    ただ、その後、しばらく放置していると全面のLEDが黄色点滅となり、緑色点灯と変化して認識しました。
    アクティベートをやり直した直後は前回認識したデバイスがすぐに認識しないようです。
    しばらくすると自動で再認識するので慌てず放置しましょう。

    以上です。




    2012年6月6日水曜日

    Pogoplug Series 4を購入してみた



    前から気になっていたPogoplugですが、
    いろいろ悩みましたが買ってしまいました。
    f:id:ono51:20120605080627j:image:w320
    悩んでいたと言ってもたいしたことないのですが、主に次の点です。


    • コスト

    • 大容量

    • 機能

    • ファイル共有

    • メンテナンス

    まずコストの比較です。(2012/6/6現在)









    サービス容量価格
    Dropbox100GB約16000円/年
    Google Drive100GB約4800円/年
    Pogoplug Series 4-約9610円(本体のみ)
    Pogoplug Mobile-約7980円(本体のみ)
    平行輸入品なら約5900円(本体のみ)

    Pogoplugですが、私の場合は、Pogoplug Series 4を購入したので若干高く9610円です。
    あと、つなげるストレージですが、BuffaloのUSB 3.0 2TB HDDなら12000円ぐらいなので、
    合計すると約22000円です。

    ちなみに電気代も念のため確認してみました。
    ワットチェッカーで計測したところ、2.5インチのHDDを接続してもアイドル時は6Wでした。
    電気代にすごく詳しいわけではないのですが、1ヶ月100円程度ではないでしょうか。
    私の使い方では、1日のうちアイドル時間がほとんどだと思うので多くても倍にはならないと思います。
    Dropboxとの比較ではコストが1.5倍ですが、容量は20倍なので圧勝ですね。
    使い方しだいですが、十分元がとれそうです。

    ちなみにGoogle Driveが100GB/月と他と比べ安いですが、
    月に1TB使うと、月額49.99ドルなので、約48000円/年と高くなります。

    あと心配していた機能面ですが、アプリもiOS、Android対応していて特に問題ないですね。
    保存するファイル数が多い場合は、つないだHDDを自分のPCに接続してファイルコピーとかもできます。
    これで気兼ねなくガンガン上げられます。




    2012年5月16日水曜日

    iPhoneでWebページをスクロールせず画面キャプチャーする方法



    iPhoneで画面キャプチャーは、電源ボタンとホームボタンを同時押しで取れますが、
    Webページでスクロールが必要な場合は、
    画面をスクロールしながら分割して取る必要があってこれって手間だなと思っていたら、
    スクロールせず、全画面をキャプチャーできるアプリがありました。
    f:id:ono51:20120515122711p:image:w120:left
    f:id:ono51:20120515155909j:image:w120:left
    注意事項 画像はモザイク処理しています。


    Web Scroll Capture


    まずは、「Web Scroll Capture」をApp Storeで検索してインストールしてください。
    「web scroll」で検索すれば出てきます。
    http://itunes.apple.com/jp/app/web-scroll-capture/id483112957?mt=8
    2012/5/16現在は無料です。

    スクロールキャプチャーの取り方


    1点のみ設定変更が必要です。


    • 画面右下の[MORE]をタッチする

    f:id:ono51:20120515125844p:image:w240


    • [Scroll]オプションをONに変更して画面左上の[BACK]ボタンで戻ります。

    f:id:ono51:20120515125845p:image:w240


    • 画面左下の[URL]ボタンをタッチする

    f:id:ono51:20120515125847p:image:w240


    • 閲覧したいサイトURLを入力します。

    f:id:ono51:20120515125846p:image:w240


    • キャプターしたい画面に遷移して、画面中央したの[CAPTURE]ボタンをタッチします。

    f:id:ono51:20120515125843p:image:w240
    取った画像は、写真アプリから閲覧可能なので、
    メールに添付して送信するかiTunesで画像を取り出します。

    ユーザエージェントもiPhone用でスマホ用サイトも閲覧可能でした。


    Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B206


    これまで自分で画像合成してたのでずいぶん楽になりました。
    画面遷移作成が捗りますね。




    2012年5月14日月曜日

    KVMで仮想環境構築 for Ubuntu Server 12.04

    近頃ずいぶん便利になった仮想化技術ですが、クリーンインストール環境がたまにほしくなるので、
    KVM + QEMUを利用してCentOS 6.2Ubuntu Server 12.04のインストールとゲスト環境の複製までやってみます。

    ホスト環境はこれまでセットアップしてきたUbuntu Server 12.04を利用します。

    ハードウェアの前提確認

    まずKVMを導入するにはCPUが仮想化に対応しているかホスト環境で確認します。
    IntelのCPUの場合は、次のようにvmxが含まれれば対応しています。

    ・Intel VTの場合
    grep vmx /proc/cpuinfo
    
    flags  : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm dts tpr_shadow vnmi flexpriority
    
    ・AMD-Vの場合
    grep svm /proc/cpuinfo
    

    OSのダウンロード

    インストールに使用するCentOS 6.2 と Ubuntu Server 12.04をダウンロードします。
    cd /usr/local/src
    curl -LO http://mirror.symnds.com/distributions/CentOS-vault/6.2/isos/x86_64/CentOS-6.2-x86_64-minimal.iso
    curl -LO http://ftp.iij.ad.jp/pub/linux/ubuntu/releases/precise/ubuntu-12.04.3-server-amd64.iso
    

    ネットワークの設定(ブリッジ接続)

    ・参考
    https://help.ubuntu.com/12.04/serverguide/network-configuration.html#bridging
    http://www.linux-kvm.org/page/Networking

    ・bridge-utilsのインストール
    sudo apt-get install bridge-utils
    
    ・設定ファイルの修正
    vi /etc/network/interfaces 次のように修正して保存する
    # This file describes the network interfaces available on your system
    # and how to activate them. For more information, see interfaces(5).
    
    # The loopback network interface
    auto lo
    iface lo inet loopback
    
    # The primary network interface
    auto br0
    iface br0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
    gateway 192.168.1.1
    bridge_ports eth0
    bridge_stp off
    bridge_maxwait 0
    bridge_fd 0
    # dns-* options are implemented by the resolvconf package, if installed
    dns-nameservers 8.8.8.8
    dns-search example.local
    

    ・ネットワークを再起動
    sudo /etc/init.d/networking restart
    

    ・ネットワークの設定確認(br0の追加)
    ifconfig -aの内容
    br0       Link encap:Ethernet  HWaddr **:**:**:**:**:**  
        inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
        以下省略
    

    ネットワークの設定(iptables)

    ・/etc/sysctl.confの修正
    vi /etc/sysctl.conf
    次の内容を追記して保存する
    net.bridge.bridge-nf-call-ip6tables = 0
    net.bridge.bridge-nf-call-iptables = 0
    net.bridge.bridge-nf-call-arptables = 0
    net.ipv4.ip_forward = 1
    
    ・設定を読み込み
    sysctl -p /etc/sysctl.conf
    

    KVM + QEMU のインストール

    sudo apt-get install qemu-kvm virt-manager virt-viewer
    

    イメージファイル作成

    適宜容量は変更してください。
    qemu-img create -f qcow2 /var/lib/libvirt/images/centos6.img 160G
    qemu-img create -f qcow2 /var/lib/libvirt/images/ubuntu1204.img 160G
    
    参考
    qcow2形式なので、作成されるイメージファイルが160GB使用するわけではありません。
    以下の手順で最小構成インストール直後のファイルサイズは3.3GB(centos6)と2.6GB(ubuntu1204) でした。またvirt-cloneで作成したファイルはそれ以下のサイズとなりました。

    ゲストOSのインストール

    ・CentOS 6.2
    virt-install --connect qemu:///system \
     --name=centos6 \
     --connect=qemu:///system \
     --ram=2048  \
     --vcpu=2 \
     --os-type=linux \
     --hvm \
     --os-variant=virtio26 \
     --disk path=/var/lib/libvirt/images/centos6.img,size=160,format=qcow2 \
     --cdrom=/usr/local/src/CentOS-6.2-x86_64-minimal.iso \
     --network bridge=br0 \
     --graphics vnc,port=5900,password=foobar,listen=0.0.0.0,keymap=ja
    
    ・Ubuntu Server 12.04
    virt-install --connect qemu:///system \
     --name=ubuntu1204 \
     --connect=qemu:///system \
     --ram=2048  \
     --vcpu=2 \
     --os-type=linux \
     --hvm \
     --os-variant=ubuntuprecise \
     --disk path=/var/lib/libvirt/images/ubuntu1204.img,size=160,format=qcow2 \
     --cdrom=/usr/local/src/ubuntu-12.04-server-amd64.iso \
     --network bridge=br0 \
     --graphics vnc,port=5901,password=foobar,listen=0.0.0.0,keymap=ja
    

    VNC接続

    ・VNCで使用するポートを開ける
    環境に合わせて適宜変更してください。
    sudo ufw allow proto tcp from 192.168.1.0/24 to any port 5900:5901
    
    ・VNCクライアントで接続して各ゲストOSをインストールする
    各OSのインストールは省略いたしますが、ホスト名、IPアドレス、VNCのポート番号などは
    マスター作成用に普段使用しないものを割り当てた方がよいかと思います。
    セットアップが完了した仮想環境は複製して使い回せるため1台のサーバに複数の環境を導入する場合や、
    複数のサーバに展開する場合を考慮してあらかじめ設計するとよいでしょう。

    インストール完了後に再起動していない模様

    OSインストールが環境してvirshコマンドでゲスト環境を確認したところ
    いずれも状態がシャットオフで起動していませんでした。
    virsh list --all
    Id Name                 State
    ----------------------------------
      - centos6              shut off
      - ubuntu1204           shut off
    
    ・virshコマンドでゲストOSを起動します
    virsh start centos6
    virsh start ubuntu1204
    
    ・確認
    virsh list --all
     Id Name                 State
    ----------------------------------
      1 centos6              running
      2 ubuntu1204           running
    

    virshでゲストOSの再起動やシャットダウンができない

    ホスト環境からvirsh shutdownコマンドを実行してもゲスト環境(centos6)がシャットダウンせず実行中のままでした。
    この問題は、acpidをインストールして解決します。
    ・ゲストOSにacpidをインストールする
    ・CentOS 6.2 の場合
    sudo yum install acpid.x86_64
    /etc/init.d/acpid start
    
    ・Ubuntu Server 12.04の場合(最小構成でもインストールされていたためこの手順は不要です)
    sudo apt-get install acpid service acpid start
    ホスト環境からシャットダウンするか確認してみます。
    virsh shutdown centos6
    virsh shutdown ubuntu1204
    
    どちらもシャットダウンできました。
    virsh list --all
     Id 名前               状態
    ----------------------------------
      - centos6              シャットオフ
      - ubuntu1204           シャットオフ
    
    これでゲスト環境の準備は完了です。次にゲスト環境を複製を試してみます。

    クローン作成

    ・複製前の準備
    一通りセットアップが完了した状態で不要なログなどを削除してから
    シャットダウンして配布用マスターとして利用します。

    ・virtc-cloneコマンドでゲスト環境のクローン作成
    virt-clone --connect=qemu:///system \
      -o centos6 \
      -n centos6clone \
      -f /var/lib/libvirt/images/centos6clone.img
    
    ・定義ファイルを一部修正
    virsh edit centos6clone なぜかディスクがraw形式になっていたのでrawをqcow2に修正しました。
    <disk type='file' device='disk'>:
    <driver name='qemu' type='qcow2'/>:

    vncのポートが重複していると起動しないため、graphicsタグを削除するかポート番号を変更します。
    <graphics type='vnc' port='5900' autoport='no' listen='0.0.0.0' keymap='ja'>
    <listen type='address' address='0.0.0.0'/>
    </graphics>
    <video>
    <model type='cirrus' vram='9216' heads='1'/>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>

    virt-cloneがMACアドレス適当に割り当ててくれているのでこれをそのまま利用しますが、
    CentOSではネットワーク設定に問題があり修正が入ったのでこのMACアドレスをメモしてください。
    <interface type='bridge'>
    <mac address='52:54:00:1f:b3:76'/>

    ・複製したゲストOSを起動する
    virsh start centos6clone
    
    ・ホスト名を変更する(CentOS)
    vi /etc/sysconfig/network
    HOSTNAME=kvm2
    ・ホスト名を変更する(Ubuntu)
    vi /etc/hostname
    kvm3
    
    ・IPアドレスとMACアドレスの変更(CentOS)
    vi /etc/sysconfig/network-scripts/ifcfg-eth0
    HWADDR=52:54:00:1f:b3:76
    IPADDR=192.168.1.101
    
    CentOSでは、virt-cloneで作成したイメージで起動すると、eth0がeth1に書き変わってしまいネットワークの起動に失敗しました。同じ現象と思われる記事 http://d.hatena.ne.jp/ngyuki/20110805/p1 もあるでの私だけではないようです。
    dmesgには次のようなログが出力されます。
    udev: renamed network interface eth0 to eth1
    
    ・eht0がリネームされた場合は次のファイルを削除する(CentOS)
    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    
    ・IPアドレスとMACアドレスの変更(Ubuntu)
    vi /etc/network/interfaces
    iface eth0 inet static
            address 192.168.1.102
    
    再起動してホスト名とIPアドレスが変更されていることを確認します。
    reboot
    
    以上でゲスト環境の複製ができました。

    kvm環境すごく便利ですね。
    OpenStackやEucalyptusとまではいかなくても、
    小規模なプライベートクラウドなら自作できそうですね。

    2012年5月5日土曜日

    Mosh (mobile shell) インストール for Ubuntu Server 12.04 LTS



    前回のパッケージのアップデートに引き続き、SSHのインストールおよび設定を行います。
    それに加え、最近気になっているMosh (mobile shell)も試してみます。

    ファイアーウォール設定(ufw)


    まずはファイアーウォールの設定でSSHに使用するポートを許可します。
    下記の設定はあくまで一例であり、同一ネットワークはセキュアなのが前提です。
    そのため環境により適宜変更してください。


    sudo ufw default deny
    sudo ufw allow proto tcp from 192.168.1.0/24 to any port 22
    sudo ufw limit 22/tcp
    sudo ufw enable

    コマンドの内容


    • デフォルトを拒否に設定する

    • 同一ネットワークからの22番ポートを許可する

    • 外部ネットワークからの22番は限定許可する

    • ファイアーウォールを有効にする



    OpenSSHのインストール


    apt-getでopenssh-serverをインストールします。


    sudo apt-get install openssh-server


    インストールが完了するとsshdが自動起動するので、別のPCなどのターミナルで接続します。
    次に鍵を作成します。


    ssh-keygen -t rsa
    Enter file in which to save the key (/home/[ユーザ名]/.ssh/id_rsa): [Enter]キーを押す
    Created directory '/home/[ユーザ名]/.ssh'.
    Enter passphrase (empty for no passphrase): パスフレーズを入力して[Enter]キーを押す
    Enter same passphrase again: 再度パスフレーズを入力して[Enter]キーを押す

    cd $HOME/.ssh
    cat id_rsa.pub >> authorized_keys
    chmod 600 authorized_keys

    作成した秘密鍵(/home/[ユーザー名]/.ssh/id_rsa)を自分のPCなどにコピーします。


    パスワード認証を停止


    sudo vi /etc/ssh/sshd_config
    次の項目の設定を追記または書き換え保存する
    PasswordAuthentication no
    UsePAM no


    sshdの設定再読み込み後にログアウトして秘密鍵を使用して再度SSHで接続します。


    sudo service ssh reload



    Mosh用ファイアーウォールの設定


    moshは、デフォルトでudpの60000から61000番ポートを使用するので、
    今回はそのままポートを開けますが、このあたりはポリシーに従って適宜変更が必要です。
    使用状況にもよりますが、モバイル用途なら常時ヘビーに使う感じがしないので、
    使用する人数分かその倍ぐらいのポート数でも十分ではないかと思います。


    sudo ufw allow proto udp from 192.168.1.0/24 to any port 60000:61000
    sudo ufw limit 60000:61000/udp



    Moshのインストール




    • サーバ側


    sudo apt-get -y install mosh


    Moshのバージョンをサーバとクライアントで合わせたい場合は、
    ソースコードやgitからインストールしてください。
    ちなみに今回のバージョンは、サーバ側1.1.3、クライアント側1.2と異なりますが動作しました。


    • クライアント側(Macの場合)


    次のいずれかの方法でインストールしますが、今回はパッケージでインストールしました。


    • パッケージの場合

    https://github.com/downloads/keithw/mosh/mosh-1.2.pkg


    • Homebrewの場合

    brew install mobile-shell


    • MacPortsの場合

    sudo port install mosh



    Moshで接続する




    • クライアント側からmoshコマンドでサーバに接続する


    mosh [ホスト名]



    • ポート番号を指定する場合


    mosh -p [ポート番号] [ホスト名]


    これでmosh接続完了です。

    mobile shellというだけあって、WiFiを切ったりPCをスリープさせて復帰した後でも
    すぐに再接続してコマンド入力できました。
    ただし、screenやtmuxの代わりになるわけではないので併用するのがよさそうです。




    2012年5月4日金曜日

    Ubuntu Server 12.04 LTS のパッケージ管理



    皆様、大雨の連休をいかがお過ごしでしょうか?
    今日は、幸い?外出せず自宅にこもっているのでUbuntu Serverインストールの続きを書いてみます。

    前回、Ubuntu Server 12.04 LTSを最小構成でインストールしましたが、
    アプリケーションのインストールの前に、パッケージ管理について確認してみました。

    パッケージ管理


    Ubuntuのパッケージ管理は、主に次の3つがあります。







    dpkgdebパッケージ管理システム
    apt-getコマンドラインのパッケージ管理ツール
    aptitudeテキストユーザーインターフェースのパッケージ管理ツール

    apt-getとaptitudeの違いは、テキストユーザーインターフェースが使える以外にも依存関係のない使われなくなったパッケージの扱いなど何点かあるようです。
    このあたりはdebianのマニュアル「apt-get/apt-cache と aptitude の比較」が詳しいですね。

    aptitudeが良さそうなんですが、apt-getを使用してみます。
    理由としては、上記のマニュアルで次の点が気に入りました。


    • コマンドラインで使用する

    • メモリーの消費は少なく、実行速度が早い

    • 推薦パッケージの自動インストールや自動削除を行わない




    apt-getコマンドオプション


    以下debianのマニュアルを引用しました。
















    apt-get/apt-cache シンタックス説明
    apt-get updateパッケージアーカイブメタデーター更新
    apt-get install foo"foo" パッケージの候補バージョンをその依存関係とともにインストール
    apt-get upgrade他のパッケージを削除すること無くインストール済みパッケージの候補バージョンをインストール
    apt-get dist-upgrade <パッケージ>必要なら他のパッケージを削除しながらインストール済みパッケージの候補バージョンをインストール
    apt-get remove foo設定ファイルを残したまま "foo" パッケージを削除
    apt-get autoremove既に必要なくなっている自動済みパッケージを削除
    apt-get purge foo設定ファイルを含めて "foo" パッケージを完全削除
    apt-get clean収集されローカルに貯蔵されたパッケージファイルを完全消去
    apt-get autoclean収集されローカルに貯蔵されたパッケージファイルのうち古くなったパッケージを消去
    apt-cache show <パッケージ>"foo"パッケージに関する詳細情報を表示
    apt-cache search <regex><regex> とマッチするパッケージを検索


    パッケージ更新


    インストール直後に、apt-getでさっそくアップデートしてみます。
    また、リリースして間もないですが、カーネルのアップデートがあったので再起動します。
    最後に、不要なパッケージの削除を行います。


    sudo apt-get -y update
    sudo apt-get -y dist-upgrade
    sudo reboot
    sudo apt-get -y autoremove


    インストール済みのパッケージ一覧は、dpkgコマンドで確認します。


    dpkg -l





    2012年5月2日水曜日

    Ubuntu Server 12.04 LTS 最小構成インストールしてみた(スクリーンキャプチャ付き)



    スタートアップ系Webサービスではよく利用されてと思われるUbuntuですが、
    「Ubuntu 12.04 LTS」がリリースされたのと、LTSが5年サポートになったのを記念して、
    最小構成でインストールしてスクリーンキャプチャーを取ってみました。
    ちなみに今回インストールするのは、サーバ版です。

    Ubuntuのシェアが下がったという記事がたまにありますが、
    おそらくこれはデスクトップの話で、サーバ用途ではないと思われます。
    W3Techsによれば、Webサービスのサーバとしては、Debian、CentOSに続いて利用されています。
    http://w3techs.com/technologies/details/os-linux/all/all
    また、Redhatの10年サポートには及びませんが、
    Ubuntuも12.04 LTSから5年サポートとなり企業でも導入しやすくなったのではないでしょうか。

    ダウンロードはこちらから
    http://www.ubuntu.com/download/server

    Ubuntu Server 12.04 LTS 最小構成インストール


    1. [日本語]を選択して[Enter]キーを押す
    f:id:ono51:20120501110728p:image:w480

    2. [Enter]キーを押す([Ubuntu Serverをインストール(I)]選択済み)
    f:id:ono51:20120501110729p:image:w480

    3. [Enter]キーを押す(<はい>が選択済み)
    f:id:ono51:20120501110730p:image:w480

    4. [Enter]キーを押す([日本]選択済み)
    f:id:ono51:20120501110731p:image:w480

    5. [Enter]キーを押す([日本語]選択済み)
    f:id:ono51:20120501110732p:image:w480

    6. [Enter]キーを押す([日本語]選択済み)
    f:id:ono51:20120501110733p:image:w480

    7. [Enter]キーを押す([eth0]選択済み)
    f:id:ono51:20120501142124p:image:w480

    8. ホスト名の入力画面が表示されますが、手動でネットワーク設定を行うため[esc]キーを押します。
    DHCPでの自動取得の場合は、14へ
    f:id:ono51:20120501110734p:image:w480

    9. [Enter]キーを押す([ネットワークを手動で設定]選択済み)
    f:id:ono51:20120501110735p:image:w480

    10. IPアドレスを入力して[Enter]キーを押す
    f:id:ono51:20120501110736p:image:w480

    11. ネットマスクを入力して[Enter]キーを押す
    f:id:ono51:20120501110737p:image:w480

    12. ゲートウェイを入力して[Enter]キーを押す
    f:id:ono51:20120501110738p:image:w480

    13. ネームサーバアドレスを入力して[Enter]キーを押す
    f:id:ono51:20120501110739p:image:w480

    14. ホスト名を入力して[Enter]キーを押す
    f:id:ono51:20120501110740p:image:w480

    15. ドメイン名を入力して[Enter]キーを押す
    f:id:ono51:20120501110741p:image:w480

    16. 新しいユーザの本名(フルネーム)を入力して[Enter]キーを押す
    f:id:ono51:20120501110742p:image:w480

    17. あなたのアカウントのユーザ名を入力して[Enter]キーを押す
    f:id:ono51:20120501110743p:image:w480

    18. パスワードを入力して[Enter]キーを押す
    f:id:ono51:20120501110744p:image:w480

    19. 再度パスワードを入力して[Enter]キーを押す
    f:id:ono51:20120501110745p:image:w480

    20. [Enter]キーを押す(<いいえ>が選択済み)
    f:id:ono51:20120501110746p:image:w480

    21. タイムゾーンが正しいことを確認してカーソルまたはTABキーで<はい>を選択して[Enter]キーを押す
    f:id:ono51:20120501110747p:image:w480

    22. [ガイド ー ディスク全体を使う]を選択して[Enter]キーを押す
    MySQL、LVM、jbd2の組み合わせで悪夢のような性能劣化が・・・あったような気がする。
    f:id:ono51:20120501110748p:image:w480

    23. [Enter]キーを押す
    f:id:ono51:20120501110749p:image:w480

    24. <はい>を選択して[Enter]キーを押す
    f:id:ono51:20120501115021p:image:w480

    ファイルシステムやパーティションの設定を変更する場合は、
    <いいえ>を選択して[Enter]キーを押すと次のような設定画面に遷移する






    パーティション選択
    f:id:ono51:20120501110750p:image:w240
    パーティション選択
    f:id:ono51:20120501110751p:image:w240
    ファイルシステムなどの選択
    f:id:ono51:20120501112407p:image:w240

    25. [Enter]キーを押す(HTTPプロキシの設定が必要であれば入力する)
    f:id:ono51:20120501112448p:image:w480

    26. [Enter]キーを押す([自動的にアップデートしない]選択済み)
    f:id:ono51:20120502012048p:image:w480

    27. [Enter]キーを押す。
    最小構成とはいえ[OpenSSH server]ぐらいは[スペース]キーを押してチェックをつけてもいいかも。
    f:id:ono51:20120501112450p:image:w480

    28. [Enter]キーを押す(<はい>選択済み)
    f:id:ono51:20120501112451p:image:w480

    29. [Enter]キーを押す(<続ける>選択済み)
    f:id:ono51:20120501112452p:image:w480

    30. ログイン画面
    f:id:ono51:20120501112453p:image:w480

    最小構成での、Ubuntu Server 12.04 LTS インストール完了です。