開発サイクルをブースト!するかもしれない。Dokku触ってみた(初期編)

開発環境って、一度作るとあとはそれほどいじらないのでいいんですが

適当に作ったけど適当に社内で公開したい場合にお気軽にデプロイしたい。

Capistrano使ったりするのもいいんだけど…。

それに、小さめのツール類が多いんだけど、毎回nginx立ててポート変えてとかconfでゴニョゴニョして公開するの、面倒。

サクッとデプロイしたら即公開みたいな環境ないかなー。herokuみたいな。

と思って探したらdokkuというのがあったので、触ってみました。

dokkuとは


OSSのherokuライクなPaaS実装。
dokkuを入れたサーバに対してgitでプッシュするだけでデプロイ完了します。
バックエンド(MySQLとかRedisとか)はプラグインで対応。

公式

https://github.com/dokku/dokku

調査


まずは手元で動作確認。

vagrantを使っての動作確認をしていきます。

まず、何も入っていないvagrantのvmを起動します。

バージョン違いで動かないのは嫌なので、公式通りUbuntu14使います。

調査用Vagrantfile
https://github.com/gendosu/vagrant-dokku

以下のdokkuのインストールをvagrantのprovisionに入れてあるので、自分で手順を試す場合は

としてください。

しばらく待つと起動する。

起動したらvmにログインします。

続いて、dokkuのインストール。

公式にある通りにコマンドを入れます。
https://github.com/dokku/dokku

で初期設定画面が待機しているので、開いてこれが完了すると、

http://[dokkuを入れたサーバのIP]/

id_rsa.pubのキーとドメイン名を設定して初期設定します。
初期設定画面で入れるドメインは、とりあえず触る程度であれば
ドメイン名にIPを含ませて叩くと常にそのIPを返してくれるという
xip.ioというサービスがあるので、これを使います。
もしdokkuを本番に組み込むようなことがある場合、自分でワイルドカードドメインを設定する必要があると思います。
ということで、vagrantで起動したvmのIPを使ってドメイン名を作ります。
dokku.172.28.128.5.xip.io

dokku-domain-setting

こんな感じになるかと思います。
Finish Setupボタンを押すと、設定が完了します。
続いて、ローカルのマシンの方にdokkuのクライアントを入れていきます。
多分公式のshellでやるのが手っ取り早いので、そのままコマンド実行します。

ローカルに適当にテスト用のrailsプロジェクトを作ってデプロイしてみましょう。これでローカルのマシンでdokkuコマンドが使えるようになりました。

今回は本当にとりあえずなので、公式サイトの
Deploying an Application
からサンプルリポジトリを使ってデプロイします。

サーバに入って、postgreSQLのプラグインを入れておきます。

再びローカルで、postgresqlサービスを作成して、アプリにリンクさせておきます。

デプロイはherokuとほとんど一緒です。これで、デプロイ準備は整いました。

でdokku

が追加されていると思います。(dokku apps:createで作成される)
このリポジトリに対してpushするだけでアプリがデプロイ出来ます。

早速デプロイされたアプリにアクセスしてみます。
http://ruby-rails-sample. dokku.192.168.1.1.xip.io
以上です。

感想


heroku cloneそのままという印象。
裏でdockerが動いているが、ほぼ意識しなくて良い。
dokkuはスタンドアローンな仕組みなので、スケールさせるサービスには向かないと思います。
社内で適当にサイトを立ち上げてプレビューするとか
外部公開でも絶対にアクセスが増えないとか
ローカルだけどherokuみたいに気軽にデプロイしてサーバで動いているのを確認したいとか
そーいう用途向きのプロダクトに感じました。
スケールさせることが前提なのであれば
deisやflynnといったプロダクトを使ってみるのがいいかもしれません。
最近だとDocker社がApache Auroraを手中に収めてたりするので
DockerでいくのであればApache Mesosあたりを試してみるのもいいかもしれません。

参考サイト


gendosu流、dockerの使い方

以前よりローカルでの仮想環境の生成・破棄は容易になったような気がしますが

Vagrantでは、インスタンスの生成、破棄のコストが高い気がするので

そこのところをDockerを使ってやってみるようにしてみました。

gendosu流dockerの使い方

まずは、ベースになるマシンとしてUbuntu Server 14.10 64bitの仮想マシンを立ち上げます。

これは、VagrantでもVMwareでも問題ないです。

今後、頻繁にアクセスすることになるので、vmのIPをhostsに登録してしまいます。

hostsには

192.168.?.?    local-vm

として登録しちゃいます。

これで、vmに

ssh root@local-vm

という感じでログインできるようになりました。

ここから、dockerのセットアップをします。

ubuntu14では、

http://docs.docker.com/installation/ubuntulinux/

にあるとおりに

とやってインストールします。

これで、入ったので、dockerにコンテナを作ってみます。

ただ、普通にやるとコンテナ内へのアクセスが面倒なので

各コンテナ内にsshを起動してしまいます。

これで、ポート指定で外部からssh接続できるコンテナになります。

やり方ですが

Dockerfileを作ってイメージを作成するようにします。

# => Dockerfile

というファイルを作成します。

同じ階層にsupervisord/ssh.conf

を作成します。

こちらは

とします。

このDockerfileをdocker buildでイメージにします。

これで、sshdが起動するdockerコンテナのイメージが作成されました。

このイメージを元に、「run-ubuntu-ssh」という名前でコンテナを起動します。

これで、2200番のポートを指定してssh接続が出来るようになりました。

各コンテナでsshが起動するのは無駄な気がしますが

アクセスが容易になる分、開発環境では便利になるのではないでしょうか。

さて、sshdは起動しましたが、たいていの場合MySQLとかも同時に入れたりしたくなったりします。

MySQLの場合は、別のコンテナでMySQLだけが入ったものを用意します。

これは、Docker.ioのdockerhubから持ってきます。

https://registry.hub.docker.com/

この中に、MySQLというリンクがあるので、ここを開いて、手順通りにやると

MySQLの入ったコンテナが起動できます。

先ほど、「run-ubuntu-ssh」コンテナを起動したときに使ったコマンド

docker runに、別のコンテナへのリンクを追加するというオプションがあります。

今回はそのオプションを追加します。
※先ほどのdocker runを実行している場合、一度docker stop、docker rmでコンテナを破棄します。

mysqlという名のコンテナに対してリンクを張っています。

run-ubuntu-sshコンテナの内部からは、mysqlという名前でmysqlコンテナへ接続できるようになっています。

というコマンドでMySQLへ接続できていればOKです。

別のコンテナを起動する場合、先ほどのdocker runのコマンドで、-p 2200:22のところを2201:22という感じにインクリメントしていくことで、比較的容易にコンテナを管理できると思います。

git cloneした時に、Gtk-WARNING **: cannot open display:

git cloneしたときに

(gnome-ssh-askpass:***): Gtk-WARNING **: cannot open display:

という表示が出てエラーになる。

どうも、SSHの処理がパスワード入力ダイアログを出したいらしい。

これに関連する環境変数が

SSH_ASKPASS

という事で、これをunsetして見ます。

これで、無事git clone出来るかと思います。

古いUbuntuを使っていて、apt-get updateなどが失敗する(404)

Ubuntuはサポートが切れたバージョンの場合

archive.ubuntu.com

から

old-releases.ubuntu.com

というドメインにパッケージが移動するようです。

ということで、

/etc/apt/sources.list

の中のドメイン名を変更してみます。

となっているので、これを

という感じに変更してみます。

これで正常にapt-get updateが通るようになりました。

今更ながら、screenコマンドを知った

ssh切れたら痛いなーと思っていたら

screenというコマンドがあるというのを教えてもらった。

仮想ターミナルという感じのコマンドらしく

teratermなどでサーバ機に接続した上でscreenを使うと

screenがバックグラウンドで起動し、

さらにその中にターミナル接続したようなイメージで使用できるらしい。

ということで、クライアントPCとサーバとの接続が切れてもサーバ上ではターミナルが開かれたままという事になるみたい。

使い方は

screenの起動

screenから抜ける(detach)

Ctl+a-d
Ctl+aを押してからdを押す

再度screenに接続する(attach)

※自分のアカウントででscreenが起動している場合

仮想ターミナルなので、複数ウィンドウも開ける

ウィンドウを増やすには

Ctl+a-c

今開いているウィンドウの一覧を見る

Ctl+a-w
※ターミナルの下部に表示される

「*」がついたものが現在アクティブなウィンドウ

「-」がついたものが直前に開いていたウィンドウ

次のウィンドウに移動する

Ctl+a-n

前のウィンドウに移動する

Ctl+a-p

任意のウィンドウに移動する

Ctl+a-[ウィンドウの数字]

ウィンドウの順番を入れ替える

0*$ master  1-$ branch1  2$ branch2

たとえば、このような感じにウィンドウを開いているとする。

Clt+a-cをすると、3$ ができあがる。

これを、masterの次に持ってきたい。

Ctl+a :number 1

と入力。

Ubuntu で、IPアドレスを固定で指定する場合

IPアドレスを指定するファイルは

/etc/network/interfaces

DHCPで取得するような設定の場合
このファイルの中に

といったような記述があります。

ここのifaceの設定を以下の様に変更することで、IPを固定化出来ます。

rvmを使った環境で、unicornをcrontabなどに登録する時の手順

rvmを使って実行環境を分けつつ、crontabなどで自動起動をさせたい時

まずはrvmでラッパーを作成する

これを実行すると、~/.rvm/binにstart_unicorn_railsというファイルが出来上がる

このファイルに対してunicorn_railsに指定するパラメータを指定してやると

rvmを読み込んだ状態でunicorn_railsを実行してくれる。

UbuntuのDesktopをMac OS風にする

Ubuntuのデスクトップは標準では使いにくいので、どうせならMac OS風にして見よう、と思ってやってみます。

Mac OS風になる物はいくつかあるようですが
今回はGlx-Dock / Cairo-Dock
という物を使ってみます。

インストールはパッケージ管理でちょこちょこっとコマンドを叩くと入れられるようです。
では、オフィシャルページにあるインストール方法を実行していきます。
※ここでは、Ubuntu Serverではなく、通常のUbuntuで、Ubuntu-Desktopがインストールされている環境を前提にしています。

パッケージリポジトリを追加します。

パッケージ情報を更新します。

インストールします。

ログアウトすると、cairo dockが選べるようになっていると思うので、選んでからログインしています。

これで、デスクトップがMac OSッぽくなりましたね。

さて、使ってみましょう。

ウィンドウをいくつか開いて…
切り替えるにはAlt + Tab…
あれ、切り替わらない…

ウィンドウの切替にコマンドが設定されていない様な感じですね。

仕方が無いので、カスタマイズツールを入れてみます。

compizconfig-settings-managerを起動します。

Screenshot_from_2013-11-11 15-50-44

フィルタに「Shift Switcher」と入れます。
右側に項目が表示されるので、それをクリック。
下の方にShift Switcherを有効にする、という項目があるので、チェックを入れます。
これで、おそらくWindowsボタンとタブでウィンドウを切り替えられるようにはなると思います。
慣れない人のために、Alt + Tabで切り替える方法ですが

Screenshot_from_2013-11-11 15-54-13

またフィルタで「Next Window」と入力。

Next Window Keyという項目が<Super><Tab>となっていると思うので、ここをクリックして

<Alt><Tab>に変更します。

Screenshot_from_2013-11-11 16-00-17

これで、Alt + Tabでウィンドウが切り替えられるようになったと思います。

ひとまずはここまで。

Ubuntu 13 and Ruby on Rails 4 で、capybara-webkitを使ってcucumberでテスト

必要なパッケージをインストールする

たぶん、このインストールだけで済むはず。

入れている物は、
libqtwebkit-dev
qtwebkitの開発用モジュール
Qtはデスクトップと組込み開発向けのクロスプラットフォームアプリケーション開発フレームワーク
らしい
xvfb
仮想フレームバッファ
ttf-kochi-mincho-naga10 ttf-kochi-gothic-naga10
日本語フォント

済まなかったら以下を追加

Gemfileにgem追加

bundle実行

インストール完了

続いて、実行です。

lib/tasks/cucumber.rakeファイルが出来ているので、開く

test:prepare

というタスクがあるので、この中に以下の様にheadless起動の処理を書く

以上で、cucumberの設定は完了

続いて、サンプル的に。

Googleのトップページへアクセスして、スクリーンショットを撮って終了するという処理を書いてみます。

features/step_definitions/steps.rb

というファイルを作成します。

この中身は以下の様にします。

続いて、

/features/example.feature

というファイルを作成します。

中身は以下の様に。

最後に、cucumberを実行します。

これで、www.google.co.jpのキャプチャが取得出来ましたでしょうか?

Jenkins on Ubuntuな環境で、テストのログが文字化ける

どうやら、ログをUTF-8として扱ってくれないのが原因のようなので

/etc/default/jenkinsに設定を追加します。

Jenkinsがファイルを参照する時に効いてくる設定は

file.encodingで、ここにUTF-8を設定してやればUTF-8としてファイルを読んでくれます。

ということで

JAVA_ARGS=”-Dfile.encoding=UTF-8″

という設定を追加してみました。

あとは

sudo service jenkins restart

としてJenkinsを再起動すれば、以降実行されるテストについては日本語表示が正常に表示されるようになると思います。

 

プロバイダにVPNの口をふさがれたっぽいので、SSL-VPNを導入する

タイトルの通りです。

最近外出先から家のネットワークに繋がらないなぁと思ったら

プロバイダでふさがれたっぽいのです。。

ついでにいうと、DoCoMoのスマホでテザリングして接続ということが出来なかったので

それも可能にしたい。

で、IPSecとかも考えましたが

SSL-VPNという方式でつないだら楽かも?という事で

SoftEther VPNというものを使ってみたいと思います。

このSoftEther VPNというのは、ソフトイーサ株式会社という所が作っている

PacketiX VPNというソフトウェアの機能制限したフリーウェア版という事のようです。

で、PacketiX VPNについての詳しい説明は、以下のURLを参照いただきたい。

http://www.softether.co.jp/jp/vpn2/introduction/about_vpn.aspx

簡単にいうと、VPNのサーバ側とクライアント側にそれぞれ仮想NICを作成し、サーバ側仮想NICとクライアント側の仮想NICとを接続する事によってセッション繋いで中身の通信をSSLで暗号化している、という感じになります。

通常の、というか一般的に一般人が手にしやすい家庭用のルータとかだと、PPTPで接続する事になりますが

このPPTPだと、1723ポートの解放のほかにプロトコルGRE(プロトコル番号47)の通信が必要になり、プロバイダに許可されていない場合はPPTPによるVPN接続が出来ないことになります。

PacketiX VPNの場合、SSL通信である443ポートを使って接続するので

上記のプロトコルGREによる制限を受けない事になります。

PacketiX VPNは、ほかにもさまざまなネットワーク上の壁を回避する手段が備わっているので

たいていの場合はVPN接続が可能になると思われます。

ということで、構築します。

サーバ側にはUbuntuを使いたいと思います。

Ubuntuは適当にセットアップしておきます。

http://www.softether.org/のページから

サーバ側ソフトウェアをダウンロードします。

softether01

ダウンロードしたファイルを解凍すると、vpnserverというディレクトリが出来るので、この中に入ってmakeします。
[shell]cd vpnserver
hoge@vpn:/usr/local/vpnserver$ make
——————————————————————–

SoftEther VPN Server (Ver 1.00, Build 9079, Intel x86) for Linux Install Utility
Copyright (c) SoftEther Project at University of Tsukuba, Japan. All Rights Reserved.

——————————————————————–

Do you want to read the License Agreement for this software ?

1. Yes
2. No

Please choose one of above number:
1 #<= これは1

Did you read and understand the License Agreement ?
(If you couldn’t read above text, Please read ‘ReadMeFirst_License.txt’
file with any text editor.)

1. Yes
2. No

Please choose one of above number:
1 #<= これも1

Did you agree the License Agreement ?

1. Agree
2. Do Not Agree

Please choose one of above number:
1 #<= これも1
[/shell]
以上で実行ファイルの作成とともに、実行可能であるかのチェックが走ります。

vpnserverを起動します。
[shell]sudo ./vpnserver start[/shell]
とします。
※443ポートを使うため、Ubuntuの場合sudoをつけて実行する必要があります。

UbuntuサーバがVMWare上で動いている場合、VMware上の設定で

NICの無差別モードというのをONにする必要があります。
※VMware vShereの場合

また、仮想NIC用として、NICの追加をしておく必要があります。

softether08

つぎに、/etc/interfaces

仮想NIC用の設定もします。
[shell]auto eth1
iface eth1 inet static
address 0.0.0.0[/shell]
を追加し、/etc/init.d/network restart

これでサーバ側は実行できました。

これを管理するツールは、Windows側に入れます。

ダウンロードページから

SoftEther VPN Server Manager for Windows

というソフトウェアをダウンロードします。

インストールするソフトウェアはSoftEther VPN サーバー管理マネージャ(管理ツールのみ)
というのを選択します。

softether02

サーバー管理マネージャを起動すると、以下のようになっています。

softether03

新しい接続先として、先ほどのUbuntuのIPアドレスを入力して接続します。

最初の接続だとパスワード設定画面が開くので、設定します。

softether09

続いて、SoftEther VPN Server簡易セットアップ画面が開くので、リモートアクセス、VPNサーバにチェックを入れて次へ。

softether10

仮想HUBの名前を設定。

softether11

ダイナミックDNS機能は、プロバイダで設定される各家庭へのIPが動的な場合に
softether社が運営するDNS機能を使って固定のドメイン名を取得する機能になります。
IPが固定である場合とか、自分でDDNSを使用している場合などは、これは無効かしておいてもよいかもしれません。

softether12

ユーザを作成します。

softether13

ローカルブリッジ設定をします。

ここで先ほど作成した仮想NIC(eth1)と仮想HUBを関連づけます。

これで、だいたいのサーバ側の設定は完了しました。

続いて、クライアント側です。

別マシンなどにインストールして確認すると接続できたことがわかりやすいと思います。

まずはクライアントをダウンロードします。

softether05

インストーラなので、指示通りにインストールします。

softether14

インストールが完了したらクライアントを起動して、新しい接続設定の作成をクリックします。

softether06

最初は仮想LANカードを追加することを促されるので、そのまま追加します。

softether15

softether07

ホスト名に、ダイナミックDNS機能で設定されたドメイン名を入力します。
仮想HUBには、サーバ設定時に指定した仮想HUBの名前を指定します。
あとはユーザ名・パスワードを入力して完了。

あとは、VPNサーバに接続してみましょう。

Ubuntu Serverをインストール時に日本語で入れてしまった場合のコンソールの文字化け対策

サーバにSSHとかで接続する際には、ターミナルツールのエンコードをUTF-8とかで
日本語の表示が出来るので問題ないとして

ほとんど無いと思いますが。
マシンに直接ログインした時に日本語が表示されません。

そのような時には、

ログイン後に

[shell]export LANG=C[/shell]

と打ち込むことで、表示言語を標準言語に戻すことが出来るので
文字化けは起きないと思います。

まぁ英語になるので、めんどくさいかもしれませんが。

Ubuntuで、あるディレクトリ配下に作成されるファイルを定期的に削除する

定期的にファイルを削除したい場合、cronを使用する

例えば、/home/hoge/dataのlogディレクトリが作成されていたら削除するには

[shell]crontab -e[/shell]

で、cronの設定ファイルを開き

[shell]0 1 * * * cd /home/hoge/data; if test -e log; then rmdir -pr log; fi;[/shell]

と設定する

これで、一時間おきに/home/hoge/dataにあるlogディレクトリを削除してくれる

UbuntuにRhodeCodeを入れてGitリポジトリを公開する

RhodeCodeというのは、

Githubのような雰囲気のソース共有サーバを構築するオープンソースです。

Githubでやりたい事を、Githubではなく、ローカルで実現したい、といった場合に適していると思います。

リポジトリをフォークしたり、ソースレビューをしたりetc

と言うことで、

RhodeCodeをインストールして見ます。

RhodeCodeはPython製なので、Pythonをインストールします。

sudo apt-get install python-dev python-setuptools

RhodeCodeのデフォルトのソース管理がMarcurialなので、入れておきます。

sudo apt-get install mercurial

Gitクライアントも入れておきます。

sudo apt-get install git

リポジトリ保存用のディレクトリ、プログラムディレクトリなどをあらかじめ作成します。

cd /var

sudo mkdir rhodecode
cd rhodecode
sudo mkdir rhodecode
sudo mkdir repositories

実行ユーザを作成します

sudo adduser rhodecode –disabled-password
sudo chown -R rhodecode:rhodecode /var/rhodecode

RhodeCodeのインストール

sudo easy_install rhodecode

RhodeCodeのセットアップ
以下が参考
http://packages.python.org/RhodeCode/setup.html#setup

RhodeCodeの設定ファイル作成

cd /var/rhodecode/rhodecode
paster make-config RhodeCode production.ini

production.iniファイルを開き、hostに実際のIPアドレスを設定

paster setup-rhodecode production.ini \
–user=admin \
–password=admin \
–email=gendosu@gendosu.jp \
–repos=/var/rhodecode/repositories

RhodeCodeの起動確認

paster serve production.ini

RhodeCode用のinit.dスクリプトを追加

https://secure.rhodecode.org/rhodecode/files/beta/init.d
に登録されている、「rhodecode-daemon2」を参考にする

パス情報などが環境にマッチしないと思うので、その辺を修正する。

修正後のファイルの中身

#!/bin/sh -e
########################################
#### THIS IS A DEBIAN INIT.D SCRIPT ####
########################################

### BEGIN INIT INFO
# Provides: rhodecode
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts instance of rhodecode
# Description: starts instance of rhodecode using start-stop-daemon
### END INIT INFO

APP_NAME=”rhodecode”
APP_PATH=”/var/gendosu/$APP_NAME”

CONF_NAME=”production.ini”

PID_PATH=”$APP_PATH/$APP_NAME.pid”
LOG_PATH=”$APP_PATH/$APP_NAME.log”

PYTHON_PATH=”/usr/local”

RUN_AS=”hoge”

DAEMON=”$PYTHON_PATH/bin/paster”

DAEMON_OPTS=”serve –daemon \
–user=$RUN_AS \
–group=$RUN_AS \
–pid-file=$PID_PATH \
–log-file=$LOG_PATH $APP_PATH/$CONF_NAME”

start() {
echo “Starting $APP_NAME”
PYTHON_EGG_CACHE=”/tmp” start-stop-daemon -d $APP_PATH \
–start –quiet \
–pidfile $PID_PATH \
–user $RUN_AS \
–exec $DAEMON — $DAEMON_OPTS
}

stop() {
echo “Stopping $APP_NAME”
start-stop-daemon -d $APP_PATH \
–stop –quiet \
–pidfile $PID_PATH || echo “$APP_NAME – Not running!”

if [ -f $PID_PATH ]; then
rm $PID_PATH
fi
}

case “$1” in
start)
start
;;
stop)
stop
;;
restart)
echo “Restarting $APP_NAME”
### stop ###
stop
wait
### start ###
start
;;
*)
echo “Usage: $0 {start|stop|restart}”
exit 1
esac

svnのリポジトリを全部gitに移行する

svnのリポジトリをgitで扱う方法として
svn gitというコマンドツールがある

今回はgitをリモートリポジトリにする方法は別途解説するとして

このコマンドを使用して、svnリポジトリをgitに移行してみます。

まずは、gitリポジトリをイニシャライズします。

イニシャライズ時に、リモートリポジトリにする前提で移行するので–bareオプションを付けます。
これは、my_prodディレクトリにソースを展開せずに管理情報だけを保持するリポジトリにするオプションです。
[shell]git init –bare my_prod[/shell]

svnへの参照情報をconfigファイルに設定します。

[shell]cd .git
vi config[/shell]
以下の内容を追記
[text][svn-remote "svn"]
url = http://localhost/svn/my_prod
fetch = trunk:refs/heads/master
branches = branches/*:refs/heads/*
tags = tags/*:refs/tags/*[/text]

  • urlというのは、SVNリポジトリのベースになるURLですが、個々のリポジトリ名まで含んで問題ないみたい。
    このURIに/trunkとか/branchesとかをくっつけられる状態であればいいようです。
  • fetchというのは、マスターを指定する部分です。
    が、マルチマスター構成も可能で、ここは複数行書くことが出来ます。
    その際は、refs/heads/sub-musterとかをフェッチ先に指定する様にします。
  • branchesは、ブランチ配下を取り込むという指定です。
    ここの書き方としては「*」をかならず含まなければいけないようです。
    で、ブランチ名によるフィルタリングをして取り込みたいブランチだけを指定することも可能。
    branches/release_*:refs/head/branches/release_*
    という感じに。
  • tagsも同様です。

svnからリポジトリを取得

[shell]git svn fetch[/shell]
これで、http://localhost/svn/my_prodにあるtrunk、branches以下のすべて、tags以下のすべての情報がgitに取り込まれます。

このgitリポジトリをサーバとして公開すれば、svnからgitへの移行が完了となります。

Ubuntu 12でgitoliteを使ってgitリポジトリを公開する

公開リポジトリを作成するまで

gitのインストール
[shell]sudo apt-get install git[/shell]
gitoliteのインストール
[shell]sudo apt-get install gitolite[/shell]
gitolite用アカウントの作成
[shell]sudo adduser –disabled-password gitolite[/shell]
管理者用として公開鍵を作成
[shell]ssh-keygen -t rsa[/shell]
gitoliteアカウントのホームに転送

sudo cp .ssh/id_rsa.pub /home/gitolite/admin.pub

gitoliteアカウントにログインし、gitolite環境をセットアップ
[shell]sudo su – gitolite
gl-setup admin.pub
exit[/shell]
gitolite用の管理リポジトリをcloneする
[shell]git clone gitolite@localhost:gitolite-admin[/shell]
リポジトリを新規作成する

gitolite/conf/gitolite.conf ファイルに以下の内容を追記
[shell]repo hoge
RW+ = admin[/shell]
変更をpushする
[shell]git commit -m "add repo"
git push[/shell]
これで、hogeリポジトリが作成され、adminがアクセス出来るようになる

別のマシンからcloneする場合、ssh-keygenの部分からやれば良い

ユーザの追加は

gitolite-admin/keydirに作成した公開鍵の名前で作成される

win-gendosu.pub

とやれば、

gitolite-admin/conf/gitolite.conf

で設定するユーザは

win-gendosuとなる。

先のhogeにwin-gendosuの権限も付け加えると
[shell]repo hoge
  RW+ = admin win-gendos[/shell]
となる

RVMをセットアップする

Rubyは、リファレンス実装でC言語によるRuby(CRuby)や、Javaでの実装のJRuby、.NETのIronRubyなど、多くの実装があります。

これを一つ一つ環境構築してたら、大変なので

RVMというRubyの管理ツールをインストールしてみます。

これで出来る事は
Rubyのバージョンを切り替える
CRubyからJRubyに切り替える
gemのセットを作って切り替える

など

お手軽に入れるには、Ubuntuなどのユーザ領域にRVMをインストールする

ということで、インストールして見ます。

まずは本家のサイトを見ます。

https://rvm.io/

rvmを実行するには、必ず必要になるコマンド類をインストールします。
[shell]apt-get install git curl patch[/shell]
RVMのインストールスクリプトをダウンロード&実行します
[shell]curl -L https://get.rvm.io | bash -s stable[/shell]
これで、安定版がインストールされました。

ターミナルに再ログイン後

rvmとやって、コマンド一覧が出たら成功です。

rvmで管理出来るRubyの一覧を見てみます。

rvm list known

CRuby 1.9.3を入れてみます。

※CRubyをインストールする時は、Ubuntuの場合だと、必要なパッケージ、コマンド類がありますので、それをあらかじめ入れておきます。
Additional Dependencies:
# For Ruby / Ruby HEAD (MRI, Rubinius, & REE), install the following:
ruby: /usr/bin/apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion pkg-config

rvm install 1.9.3

続いて、1.8.7もインストールして見ます。

rvm install 1.8.7

これで、二つのバージョンがインストールされました。

rvm list

とやると、インストールされているRubyが一覧表示されます。

現在は、デフォルトでカレントが1.9,3になっていると思います。

ruby -v
ruby 1.9.3p327 (2012-11-10 revision 37606) [i686-linux]

ruby 1.8.7を使いたい時は

rvm use 1.8.7

とやれば、切り替えることが出来ます。

ruby -v
ruby 1.8.7 (2012-10-12 patchlevel 371) [i686-linux]