Glide Note

glidenote's blog

MacからVagrantコマンド一発でSSDなVPS(DigitalOcean)上にCentOS6.5+Docker環境を構築する

前回のVagrantとSSDなVPS(Digital Ocean)で1時間1円の使い捨て高速サーバ環境を構築する - Glide Note - グライドノートの続き。

Vagtant+DigitalOceanだけでも十分便利なんですが、先日CentOS6.5がリリースされ、正式にDockerがサポートされたので、DigitalOcean上にCentOS 6.5+Dockerな環境を用意してみる。
といっても、2013年12月20日現在DigitalOceanではCentOS 6.5なimageが提供されていないので、選択出来るCentOS 6.4のイメージを使いながら、Vagrantを利用してコマンド一発でCentOS 6.5+Docker環境が作れるようにした。

これは何

  • Vagrantを利用して、DigitalOcean上にCentOS 6.5 + Dockerな環境をコマンド一発(vagrant up --provider=digital_ocean --provision)で構築します。
  • CentOS 6.5よりDockerがサポートされていますが、2013年12月19日現在DigitalOceanではCentOS 6.5のimageが提供されていません。これを利用することで簡単にCentOS6.5+Dockerが利用可能になります。
  • 安く、SSDで高速な開発環境を簡単に構築できます。時間単位での課金なので財布に大変優しい

事前準備

Macでの利用を想定した手順になっています。

2014年7月18日 追記
DigitalOceanのAPIがv2.0になりhttps://cloud.digitalocean.com/settings/applicationstokenの生成が必要になりました. Vagrantfileにprovider.token = 'xxxxxxxxxxxxxxxxxxxxx'といった形でtokenを設定する必要があります. またregionの指定方法もSan Francisco 1からsfo1という感じで変更になっています.

DigitalOceanに申し込んでAPIのclient_idapi_keyを取得する

  1. DigitalOceanに申し込む
  2. https://cloud.digitalocean.com/ssh_keysで作成したインスタンスに接続するためのssh keyを登録
  3. https://cloud.digitalocean.com/api_accessからclient_idapi_keyを取得しておく

前回同様にここ経由で申し込んで頂けると私の懐が潤います!

2013年12月20日現在の1時間あたりの料金プランは下記のような感じでホントに安い。

Vagrantをインストール

Vagrantからファイルをダウンロードしてインストール。2013/12/19現在最新の1.4.1を利用してます。

vagrant-digitaloceanのインストール

vagrantコマンドでvagrant-digitaloceanをインストール。vagrant-digitaloceanは2013/12/19現在最新の0.5.1を利用

1
vagrant plugin install vagrant-digitalocean

curl-ca-bundleのインストール

apiを叩くのに必要なので、brewで導入

1
brew install curl-ca-bundle

使い方

リポジトリをclone

1
git clone https://github.com/glidenote/vagrant-docker-digitalocean.git

Vagrantfileを下記部分を自分の環境に合わせて修正

  • config.vm.hostnameには付けたいホスト名を設定
  • provider.client_idには準備で作成したclient_idを設定
  • provider.api_keyには準備で作成したapi_keyを設定
  • provider.ssh_key_nameには準備で作成したssh鍵名を指定
  • regionは日本からのレスポンスが良いSan Francisco 1、sizeはDockerを利用するのに快適な1GBに設定しています。2013/12/19現在size1GBのインスタンス(Droplet)は1時間2円弱(0.015ドル)です。売り切れの場合などは必要に応じて適時変更してください

CentOS6.5+Dockerなインスタンス(Droplet)の作成

コマンド一発でインスタンスを作成。ドンッ!! 4〜5分でCentOS6.5+Dockerな環境が出来上がる。

1
vagrant up --provider=digital_ocean --provision

インスタンス(Droplet)にsshログイン

vagrant sshでssh接続するとIPを覚えておく必要がない。

1
vagrant ssh

DigitalOcean上でDockerを動かしてみる

インスタンス作成時にDockerを自動起動させているので、すぐに使えるようになってます。 たとえば下記でfedoraで立ち上げてみる。どーん!

1
sudo docker run -i -t mattdm/fedora /bin/bash

すると1〜2分くらいで、下記みたいな感じでfedoraが使える。

1
2
3
4
5
6
7
8
[root@test001 ~]# sudo docker run -i -t mattdm/fedora /bin/bash
Unable to find image 'mattdm/fedora' (tag: latest) locally
Pulling repository mattdm/fedora
373dc830edcd: Download complete
871613fadf3d: Download complete
7c8cf65e1efa: Download complete
bash-4.2# cat /etc/redhat-release
Fedora release 20 (Heisenbug)

使い終わったらインスタンス(Droplet)を削除

DigitalOceanは停止状態(halt)だと課金されるので、使い終わったら、インスタンスをdestroyで消す。

1
vagrant destroy

前回も思ったけど、なんて便利な時代なんだ!!
時間課金で安いし、SSDで早いし、手元のマシンはファン回りっぱなしとかならないしDigitalOcean最高。

参考

VagrantとSSDなVPS(Digital Ocean)で1時間1円の使い捨て高速サーバ環境を構築する

今年の初めくらいから個人的な技術検証にはSSDで動作が速く、1時間1円で料金が安いのと ロケーションをSan Franciscoにするとsshでもレスポンスが悪くないので、全部Digital Oceanを使っている。(徳丸先生が紹介する前から使っていたんだ!)

Digital OceanについてはRebuild: 2: Rails, Redis, VPS (Kenn Ejima)の42分くらいから言及されてます。必聴です。

使ってる旧型のMacBookAirみたいな貧弱なマシンだとローカルでVM動かすとファン回りまくりとかで泣きたくなるので、Digital Oceanだと泣かずに済んで快適。

そんで今日Vagrant経由でDigital Ocean利用すると、コマンドラインから必要なときに新規インスタンス(Droplet)作って、 検証終わったら削除という手軽な使い捨て高速サーバ環境が利用出来て検証に大変便利ということを知った。(APIの存在は知っていましたが、情弱なのでブラウザから毎回ポチポチやってました…)

Digital Oceanに申し込んでAPIのclient_idapi_keyを取得する

  1. Digital Oceanに申し込む
  2. https://cloud.digitalocean.com/ssh_keysで作成したインスタンスに接続するためのssh keyを登録
  3. https://cloud.digitalocean.com/api_accessからclient_idapi_keyを取得しておく

ここ経由で申し込んで頂けると私の懐が潤います!

2013年12月05日現在の1時間あたりの料金プランは下記のような感じ

Vagrantをインストール

Vagrantからファイルをダウンロードしてインストール。2013/12/05現在最新の1.3.5を利用してます。

vagrant-digitaloceanのインストール

vagrantコマンドでvagrant-digitaloceanをインストール。vagrant-digitaloceanは2013/12/05現在最新の0.4.1を利用

1
vagrant plugin install vagrant-digitalocean

curl-ca-bundleのインストール

apiを叩くのに必要なので、brewで導入

1
brew install curl-ca-bundle

Vagrantfileを作る

私は下記のようにディレクトリを掘って、Vagrantfileを用意

1
2
3
mkdir -p ~/repos/vagrant-digital-ocean
cd ~/repos/vagrant-digital-ocean
touch Vagrantfile

2013年12月9日 追記
申込みが増えているのかサンフランシスコで最小プラン(メモリ512MB)がずっと売り切れの状態なので、 provider.size = '1GB'にするか、provider.region = 'New York 2'など別ロケーションを選択するなどの必要があります。1GBプランだと1時間約2円(0.015ドル)です。

私が使ってるファイルの中身は下記のような感じ。設定したssh keyの名前や、APIページで取得したclient_idapi_keyはここで設定。 repoにepelを追加して、起動時に最低限必要なパッケージを入れるためにpuppetを走らせてます。

2014年7月18日 追記
DigitalOceanのAPIがv2.0になりhttps://cloud.digitalocean.com/settings/applicationstokenの生成が必要になりました. 下記の例だとprovider.token = 'xxxxxxxxxxxxxxxxxxxxx'といった形でtokenを設定する必要があります. またregionの指定方法もSan Francisco 1からsfo1という感じで変更になっています.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Vagrant.configure('2') do |config|
  config.vm.hostname              = 'dev003.hogemoge.com'
  config.vm.provision "shell", inline: "rpm -Uvh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm --force"
  config.vm.provision "shell", inline: "yum -y install puppet"

  config.vm.provider :digital_ocean do |provider, override|
    override.ssh.private_key_path = '~/.ssh/id_rsa'
    override.vm.box               = 'digital_ocean'
    override.vm.box_url           = "https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box"

    provider.client_id            = 'xxxxxxxxxxxxxxxxxxxxx'
    provider.api_key              = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    provider.token                = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    provider.image                = 'CentOS 6.4 x64'
    provider.region               = 'sfo1'
    provider.size                 = '512MB'
    provider.ca_path              = '/usr/local/opt/curl-ca-bundle/share/ca-bundle.crt'
    provider.ssh_key_name         = 'office mac'
  end

  config.vm.provision "puppet" do |puppet|
    puppet.options                = "--verbose --debug"
  end
end

manifests/default.ppは下記のような感じ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package {
  [
    'vim-enhanced',
    'zsh',
    'tmux',
    'mosh',
    'git',
    'tig',
    'gcc',
    'dstat',
    'iftop',
    'iotop',
    'nethogs',
    'ruby',
    'ruby-devel',
    'rubygems',
    'rubygem-json',
    'tree',
    'wget',
    'xinetd',
    'nc',
    'fping',
    'perf',
    ]:
      ensure => present;
}

インスタンスの作成

vagrant upコマンドを利用して、インスタンスを作成。ドンッ!

1
vagrant up --provider=digital_ocean

すると下記のように数分でインスタンスが作成される。

1
2
3
4
5
6
7
[usr0600093@pmac008s] $ vagrant up --provider=digital_ocean
Bringing machine 'default' up with 'digital_ocean' provider...
[default] Using existing SSH key: office mac
[default] Creating a new droplet...
[default] Assigned IP address: xxx.xxx.xxx.xxx
[default] Modifying sudoers file to remove tty requirement...
[default] Rsyncing folder: /Users/usr0600093/repos/vagrant-digital-ocean/ => /vagrant...

San Francisco 1だと時間帯によって結構時間かかるので、 早めに検証したい場合はNew York 2とかに変更すると良いかも。

私はpuppet走らせるので、--provisionを付けてインスタンス作成してます。

1
vagrant up --provider=digital_ocean --provision

起動したインスタンスにssh接続

vagrant sshでssh接続するとIPを覚えておく必要がない。

1
vagrant ssh

使い終わったらインスタンスの削除

Digital Oceanは停止状態(halt)だと課金されるので、使い終わったら、インスタンスをdestroyで消す。

1
vagrant destroy

なんて便利な時代なんだ!手元のMacBook Airも熱くない!!

参考

gitでcommitメッセージにテンプレートを使う

GitHub(GH:E)でプロジェクトをまたぐことが多くて、 commitメッセージとissueをリンクさせるのに毎回

1
ファイル間違ってたので修正 refs paperboy-all/hogemoge#1000

みたいにorganaization/repoを書いてて、 いい加減ウザくなってきて自動挿入みたいなのが出来ないのか調べてたら、 commit.templateを利用すると実現出来てる模様。

1
git config --global commit.template $HOME/.gitmessage.txt

という感じで設定出来る。

下記みたいなテンプレートファイルを用意しておきえば、commitメッセージとxxxのissue番号の変更だけでok

1
 refs paperboy-all/puppet#xxx

プロジェクト毎で利用するテンプレートを変更する場合は --globalを外して、それぞれのテンプレを用意して設定すれば良い。

1
2
git config commit.template $HOME/.gitmessage_puppet.txt
git config commit.template $HOME/.gitmessage_ops.txt

これで煩わしい手間が1個減った。

参考

CentOS 6.5にupgradeしたらyumが動かなくなったので直した

CentOS 6.4から6.5にupgradeかけたあとから yum実行したら、下記のエラーが出て動かなくなった。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

   /usr/lib64/libcurl.so.4: undefined symbol: ldap_init_fd

Please install a package which provides this module, or
verify that the module is installed correctly.

It's possible that the above module doesn't match the
current version of Python, which is:
2.6.6 (r266:84292, Nov 22 2013, 12:16:22)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)]

If you cannot solve this problem yourself, please go to
the yum faq at:
  http://yum.baseurl.org/wiki/Faq

curlで問題が発生しているようだったので下記でバージョンを落とす

1
2
3
4
mkdir ~/RPMS/
wget http://ftp.riken.jp/Linux/centos/6.1/updates/x86_64/Packages/curl-7.19.7-26.el6_1.2.x86_64.rpm
wget http://ftp.riken.jp/Linux/centos/6.1/updates/x86_64/Packages/libcurl-7.19.7-26.el6_1.2.x86_64.rpm
sudo rpm -Uvh --oldpackage *.rpm

元に戻った。

いろいろとrepo追加してるのが原因ぽいけど、6系からこれ系のエラーが多い気がする。

Kindleで読めるオススメの事件・犯罪系ノンフィクションまとめ 2013

最近技術ネタばっかだったので、12月だし趣向変えて今年Kindleで 読んで面白かった事件、犯罪系ノンフィクションをまとめてみる。 (今年Kindleで発売された作品なので2013というくくりにしてます)

有名な題材ばかりなので、まとめサイトとかで読んだことある人も多いと思いますが、 ちゃんと取材をもとにして、きっちり書かれたものを読むと結構印象が違う。

タイトルでオススメとか書いてますが、紹介する作品は明るい話ではないので、気分が沈んでるときに読むのはオススメしない。 でも実際にあった出来事の話なので、知っておいて損は無いと思う。

凶悪―ある死刑囚の告発―

最近映画にもなっていたやつ。雑誌記者が嘘か本当か分からない殺人犯の証言をもとに、検証をしていき警察を動かしていくさまが読んでいて引き込まれる。 最後の方に”先生”の写真が載っていて、街中にいそうな見た目ごく普通のおっさんがこんなに恐ろしいことをしてるのかと思ったのと、 こういう事件ってのは誰にも気づかれてないだけで、現代の日本で発生しているというのが怖い。

内容紹介

人を殺し、その死を巧みに金に換える“先生”と呼ばれる男がいる──雑誌記者が聞いた驚愕の証言。だが、告発者は元ヤクザで、しかも拘置所に収監中の殺人犯だった。信じていいのか? 記者は逡巡しながらも、現場を徹底的に歩き、関係者を訪ね、そして確信する。告発は本物だ! やがて、元ヤクザと記者の追及は警察を動かし、真の“凶悪”を追い詰めてゆく。白熱の犯罪ドキュメント。


八甲田山死の彷徨

高倉健が主演で映画化されている「八甲田山」の原作。日本陸軍の雪中訓練で、参加者210名中199名が死亡した八甲田雪中行軍遭難事件の話。 リーダーが無能だったのもありますが、当時は雪山に対する怖さとか凍傷に関しての知識が無かったりで、バッタバッタと人が死んでいく描写が強烈。軍隊って言うのは本当に特殊な集団なんだなーと。リーダーシップ論とかの題材にも使われているので、そういった視点で読んでも面白い。

内容紹介

日露戦争前夜、厳寒の八甲田山中で過酷な人体実験が強いられた。神田大尉が率いる青森5聯隊は雪中で進退を協議しているとき、大隊長が突然“前進”の命令を下し、指揮系統の混乱から、ついには199名の死者を出す。少数精鋭の徳島大尉が率いる弘前31聯隊は210余キロ、11日間にわたる全行程を完全に踏破する。両隊を対比して、自然と人間の闘いを迫真の筆で描く長編小説。


羆嵐(新潮文庫)

羆嵐(新潮文庫)

日本史上最大規模の獣害(じゅうがい)事件、三毛別羆事件の話。 これを読むまで熊(クマ)と羆(ヒグマ)について、別段区別して考えていなかったんですが、読んでみるとヒグマは危険度の次元が違うというか、 狙われたら終わりみたいな絶望感があってヤバい。人間でも頭おかしい人いるのと同じで、ヒグマの中でも頭おかしいのがいるのは当然で、たぶんそういった類いの話だと信じたい。

内容紹介

北海道天塩山麓の開拓村を突然恐怖の渦に巻込んだ一頭の羆の出現! 日本獣害史上最大の惨事は大正4年12月に起った。冬眠の時期を逸した羆が、わずか2日間に6人の男女を殺害したのである。鮮血に染まる雪、羆を潜める闇、人骨を齧る不気味な音……。自然の猛威の前で、なす術のない人間たちと、ただ一人沈着に羆と対決する老練な猟師の姿を浮彫りにする、ドキュメンタリー長編。


桶川ストーカー殺人事件―遺言―

ストーカー系の事件が発生すると必ず出てくるストーカー規制法が制定されるもとになった事件の話。 タイトルと表紙が怖い感じなので、凄い損をしている感があるんですが、警察の腐敗と事件の真相を暴いた内容が素晴らしく是非読んで欲しい一冊。

週刊誌記者が警察よりも早く犯人に辿り着き、真相に迫っていくので緊迫感がかなりあるし、執念が凄い。 週刊誌記者というと何となくゲスい感じに印象しか持っていなかったが、こういうちゃんとしたことをやっている人もいるんだなーと。

内容紹介

ひとりの週刊誌記者が、殺人犯を捜し当て、警察の腐敗を暴いた……。埼玉県の桶川駅前で白昼起こった女子大生猪野詩織さんの殺人事件。彼女の悲痛な「遺言」は、迷宮入りが囁かれる中、警察とマスコミにより歪められるかに見えた。だがその遺言を信じ、執念の取材を続けた記者が辿り着いた意外な事件の真相、警察の闇とは。「記者の教科書」と絶賛された、事件ノンフィクションの金字塔!


Kindle Paperwhite (第6世代) ―Wi-Fi

日本でKindleリリース直後は、作品が少なくて結構不満が多かったですが、最近は作品数も増えてきて、 上に挙げたようなしっかりした作品が読めるのでもってない人はそろそろ買うといいのではないかと思う。