TOTEKAN

Mac と過ごす素敵な日々

さくらVPS を設定してみる:
Git とGitolite でリポジトリをつくってみたよ♪

15 分で読める

Just Git -R- Done!
Just Git -R- Done! by Wayne_Parrack, on Flickr

Git はバージョン管理のためのパッケージです。

リポジトリをつくるには、GitHub などのサービスを利用するのが早いのですが、無料のプランでは公開リポジトリしか作れません。かといって有料のプランに申し込んでも非公開にできるリポジトリの数に限りがある。

ということで、Git と Gitolite を使って、リポジトリを作っていくことにします。

リポジトリを作るだけであれば Gitolite は必要ありません。

Gitolite を使わない場合、リポジトリを追加するために VPS にログインしてリポジトリを作ってから、ローカルからファイルを追加する という作業になるのですが、Gitolite を使った場合 VPS にログインすることなく、ローカルの作業だけでリポジトリの追加などができるので、設定しておくと便利になります。

Git のインストール

NYCB_7781
NYCB_7781 by MTAPhotos, on Flickr

Git をインストールしないと、何も設定できないので Git をインストールします。

1
$ sudo yum -y install git

これで Git のインストールが終わりました。

Gitolite を入れる下準備

NYCB_7866
NYCB_7866 by MTAPhotos, on Flickr

Git のインストールが終わったので、Gitolite をインストールする前に Git専用のユーザーをつくることにします。Gitolite を使うときには、SSH 経由での接続になるため、SSH で作業するユーザーとは別のユーザーをつくり、SSH でできることに制限を加えることで、ある程度のセキュリティを確保します。

Gitolite 用のユーザーをつくる

下のコマンドで /home/git がホームディレクトリの git というユーザーを作ります。

1
$ sudo /usr/sbin/useradd --shell /bin/bash --home /home/git git

追加したユーザーで SSH接続ができるようにする

SSH をちょっとセキュアにしてみるよ♪ のルートでのログインを禁止するの章 で "AllowUsers ssh_user" と設定して、SSH で接続できるユーザーを制限したことを覚えていますか??

このままだと git ユーザーで SSH接続をすることができないので、/etc/ssh/sshd_config を編集して、SSH接続ができるようにします。

1
2
3
4
$ sudo vi /etc/ssh/sshd_config
 
# AllowUser ssh_user
AllowUser ssh_user git

設定の変更が終わったら、SSH を再起動して設定を適用します。

1
$ sudo /etc/init.d/sshd restart

さぁ、これで git ユーザーで接続っ!!。。。できません。

SSH接続は公開鍵暗号方式での接続のみ許可をするように設定しているので、git ユーザー用の公開鍵と秘密鍵を作りましょう。

ここからローカルでの作業になります。

ローカルの ~/.ssh に移動して、公開鍵と秘密鍵をつくります。

鍵をつくるときはパスワードは入力しなくても、Gitolite が制限をつけてくれるので、入力しなくてもかまいませんが心配性な方はつけてください。ただしリポジトリにアクセスするときにパスワードの入力が必須になるので、ちょっとめんどくさいです。

ここでは git-admin という名前で鍵を作成。この名前がリポジトリにアクセスするときのユーザー名になるので、id_rsa のまま作成しないようにしてください

1
2
3
4
5
6
7
$ cd ~/.ssh
$ ssh-keygen -t rsa
 
Enter file in which to save the key (/home/git/.ssh/id_rsa): git-admin
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in git-admin.

鍵ができたら、公開鍵をサーバーに送ります。下のコマンドは SSH をさらにセキュアにしてみるよ♪ の公開鍵暗号方式で SSH の章 のように "ssh exp" で サーバーに接続ができることを前提にしています。

1
2
3
4
$ scp ~/.ssh/git-admin.pub exp:~/
 
SSH をさらにセキュアにしてみるよ♪ の設定をしていない場合 ( たぶんあってるかな?? )
$ scp -P 10022 -i ~/.ssh/example_key ~/.ssh/git-admin.pub ssh_user@example.com:~/

こんな長いコマンドはいやだ。。。
ぜひ SSH の設定の記事を参考に ~/.ssh/config の設定をしてください。

ローカルの作業はここまで

ここからサーバーでの作業

上で転送した公開鍵の所有権を git ユーザーに変更して、/home/git に移動させておきます。

1
2
$ chown git:git git-admin.pub
$ sudo mv ~/git-admin.pub /home/git

ここまでで Gitolite をインストールする準備は終わりです。長くなりましたが、ほとんどは SSH で作業するユーザーを追加したときと同じ作業をしただけです。

Gitolite のインストール

Desk Diary 2010/08/22
Desk Diary 2010/08/22 by Danny Choo, on Flickr

ここからは git ユーザーとして作業をすすめていきます。

1
$ sudo su - git

サーバーに Gitolite をインストールする

Gitolite は Github で公開されているので、Git を使ってソースコードをダウンロードします。とりあえず作業用のディレクトリをつくってインストールの作業をしましょう。Git を管理するためのパッケージのインストールする。。。非常に興味深い

1
2
$ mkdir ~/tmp; cd ~/tmp
$ git clone git://github.com/sitaramc/gitolite

ダウンロードが終わったら、Gitolite のインストールをします。gl-system-install を実行すると /home/git/bin に PATH がはられ、そこに Gitolite の使うコマンド群がインストールされます。そして gl-setup コマンドに、git ユーザーの公開鍵を与えると 自動で鍵をつかったアクセスができるように設定してくれます。

1
2
$ ~/tmp/gitolite/src/gl-system-install
$ gl-setup ~/git-admin.pub

インストールがおわったら、必要のないファイルを処分しておきます。公開鍵も Gitolite が ~/.ssh/authorized_keys にコピーをしてくれているので、必要ありません。

1
2
$ rm -rf ~/tmp/*
$ rm -rf ~/git-admin.pub

サーバーでの作業はここまで

ここからローカルでの作業になります

ローカルから Gitolite 経由でアクセスができるようにする

Gitolite 経由でリポジトリにアクセスするときには コマンドで SSH の使うポートやSSH のユーザー名、秘密鍵などの指定ができません。そこで ~/.ssh/config を編集することで、ポートなどを指定していきます。

1
2
3
4
5
6
7
$ vim ~/.ssh/config
 
Host git-admin.example.com
	HostName example.com
	User git
	Port 10022
	IdentityFile ~/.ssh/git-admin

設定はそれぞれ以下のようになっています

Host git-admin.example.com
ssh git-admin.example.com で接続できるようにする
HostName example.com
実際に接続するホスト名
User git
SSH の接続ユーザーを指定する。git ユーザー
Port 10022
SSH での接続につかうポート番号
IdentityFile ~/.ssh/git-admin
秘密鍵を指定する。git-admin としてリポジトリにアクセスすることになる。

混乱しやすいところとしては、SSH で接続するのは git ユーザーなのですが、リポジトリにアクセスするときは、git-admin になります。( 秘密鍵の名前がそのままリポジトリにアクセスするユーザー名になる )

~/.ssh/config の設定が終わったら、リポジトリからファイルをダウンロードしてみます。

1
2
$ mkdir ~/tmp; cd ~/tmp
$ git clone git-admin.example.com:gitolite-admin

リポジトリをダウンロードするときの書式は git clone "SSHのアクセス先":"リポジトリ名" になります

gitolite-admin リポジトリがダウンロードできれば、Git・Gitlite のインストールは、ほとんど終わりです。次からは実際にリポジトリを作成していきます。

Gitolito を使って、リポジトリを作る

no
no by bionicteaching, on Flickr

Gitolite でリポジトリをつくる方法はものすごく簡単です。

先ほどダウンロードした gitolite-admin リポジトリの中の gitolite-admin/conf/gitolite.conf というファイルを編集して、リポジトリを追加することができます。実際にリポジトリを追加してみましょう♪

1
2
3
4
5
6
$ vim ~/tmp/gitolite-admin/conf/gitolite.conf
repo	gitolite-admin
	RW+	=	git-admin
 
repo	test-repo
	RW+	=	git-admin

ここでは test-repo というリポジトリを追加しています。このファイルの書式は以下のようになっています。もしかしたら元々 test-repo というリポジトリはあったかも。。。そのときは別の名前で追加してください。

repo test-repo
リポジトリの名前
RW+= git-admin
読み書き/rewind する権限を git-admin というユーザーに与える

RW+ の部分は権限を表しています。

  • R: 読み込み権限
  • W: 書き込み権限
  • +: rewind 権限 ( リポジトリを過去の状態にもどすための権限 )

たとえば以下のようにユーザーごとに権限を変更することもできます。

1
2
3
4
repo	test-repo
	RW+	=	git-admin takatomo
	R	=	example
	RW	=	git-user

この場合、git-admin, takatomo というユーザーには全ての権限を、example はリポジトリを読み込むだけ、git-user は 読み込みと書き込みができる権限を与えるという設定になります。

その他、グループ化して管理するための設定などは "Pro Git - Pro Git 4.8 Git サーバー Gitolite" に詳しくあるので、興味のある方は参考にしながら設定してください。

gitolite.conf の編集が終わったら、変更したファイルをリポジトリに追加して、サーバーに送ります。

1
2
3
4
$ cd ~/tmp/gitolite-admin
$ git add .
$ git commit -m "ADD: test-repo"
$ git push

サーバーにプッシュすることで、あとは Gitolite が自動で test-repo というリポジトリを作ってくれます。

Gitolite にユーザーを追加する

Opening of the Spirits of Internationalism in MKHA - Users
Opening of the Spirits of Internationalism in MKHA - Users by Cea., on Flickr

ユーザーごとにアクセス権を設定できることは紹介しましたが、どうやったらユーザーの追加ができるのかは触れていませんでした。ここでは リポジトリにアクセスできるユーザーを追加してみます。

といっても、ユーザーの追加はすごく簡単な作業になります。

さきほどダウンロードした gitolite-admin というリポジトリのなかに、keydir というフォルダがありました。ここに追加するユーザーの公開鍵を追加してリポジトリを送信します。

1
2
3
4
5
$ cd ~/tmp/gitolite-admin
$ cp ~/takatomo.pub ~/tmp/gitolite-admin/keydir
$ git add .
$ git commit -m "Add User: takatomo"
$ git push

これだけの作業でユーザーを追加することができます。

リポジトリにファイルを追加する

Back to back triangle tessellation independently discovered by Me
Back to back triangle tessellation independently discovered by Me by georigami, on Flickr

test-repo というリポジトリを作ったのですが、test-repo は空のままでした。そこでこのリポジトリにファイルを追加してみましょう。リポジトリにファイルを追加する方法を2つ紹介します。

リポジトリをダウンロードしてファイルを追加する

まず1つめの方法は、追加したリポジトリをローカルに持ってきて、そこにファイルを追加する方法です。この方法は設定するものがないので、簡単にリポジトリを使いたいときにはおすすめです。

1
2
$ cd ~/tmp
$ git clone git-admin.example.com:test-repo

~/tmp の中に test-repo というフォルダができるので、ここにファイルを追加するだけでおしまいです。

1
2
3
4
5
$ cd test-repo
$ touch readme.txt | echo "hogehoge" >> readme.txt
$ git add .
$ git commit -m "ADD: readme.txt
$ git push origin master

次は既存のフォルダをリポジトリとして使ってみます。

既存のフォルダをリポジトリとして使う

上の方法で test-repo に push した場合は新しくリポジトリをつくってください。

まずは既存のディレクトリとして ~/tmp/exist_folder があるとして、この中にあるファイルをリポジトリに追加してみましょう。一番上の行はreadme.txt ファイルが置いてある exist_folder を作っているだけです。

1
2
3
4
5
6
7
$ mkdir ~/tmp/exist_folder; cd ~/tmp/exist_foler; touch readme.txt
$ cd ~/tmp/exist_folder
$ git init
$ git remote add origin git-admin.example.com:test-repo
$ git add .
$ git commit -m "initialize commit"
$ git push origin master

コマンドだけ書いてしまったのですが、

git init
フォルダを Git で管理するように設定
git remote add git-admin.example.com:test-repo
リモートリポジトリとして、先ほど追加したリポジトリを設定
git add .
Git にフォルダ内の全てのファイルを追加
git commit -m "initialize commit"
ひとつのバージョンとして "initialize commit" というメッセージと一緒に登録
git push origin master
リモートリポジトリにマスターブランチを登録する

詳しい Git の使い方は機会があれば紹介したいと思いますが、これで Gitolite でつくったリポジトリにファイルを追加することができます。

後半は簡単にですが Git の使い方にも触れてみました。Gitolite を使うことで、Git だけで管理するよりも、簡単にリポジトリの管理ができるようになりました。最初の設定はすこしめんどくさいのですが、あとのことを考えると設定して損はしないと思います。

どんどんリポジトリをつくって、遊んでみてください。

Git の使い方。。。いつか紹介できるようになったらいいなぁ〜。

でわでわ、たかともでした。

最後まで記事を読んでいただき、ありがとうございます。

このブログを少しでも、みなさんの記憶に残していただけるのであれば、ぜひ 左のアイコンから RSS 登録していただけたらうれしいです。また Twitter や Facebook もやっています。それぞれ、下から登録していただけたら、うれし泣きで号泣させていただきます。

Ads by Google