Home > setup Archive

setup Archive

gitosis - Git リポジトリ群の管理とアクセス制御 vol.1

gitosis - Git リポジトリ群の管理とアクセス制御 vol.0 の続編です。

前回のエントリでは、Git リポジトリの管理に対する不満と、それを少し改善してくれる gitosis を簡単に紹介をしました。このエントリでは gitosis のインストール編ということで話を進めていきます。

基本的に Hosting Git repositories, The Easy (and Secure) Way のエントリと同様です。本家の方が安心という人はそちらのエントリをどうぞ。

サーバ/クライアント(ローカル)両方で作業する必要があるので、識別しやすいように以下の表記をします。

サーバ作業のプロンプト表記

remote% 

クライアント(ローカル)作業のプロンプト表記

local% 

また、サーバアドレスを便宜上 remote-name.com とします。

まずは Git リポジトリをホストするサーバに git 及び gitosis をインストールします。サーバにログインしてインストールを開始します。

local% ssh keiji@remote-name.com
remote% sudo aptitude install git git-core
remote% sudo aptitude python python-setuptools # gitosis は python で書かれてるため必要に応じてインストールする。
remote% mkdir ~/src
remote% cd ~/src
remote% git clone git://eagain.net/gitosis.git
remote% cd gitosis
remote% sudo python setup.py install # gitosis をシステムにインストールする。

ここまでで gitosis のインストールは終了。僕は ubuntu 8.04 server edition で試していますが特に問題なくインストール完了しました。

次に、サーバ上にホストする Git リポジトリの管理用ユーザを作成します。gitosis は ~/.ssh/authorized_keys をいじる(生成する)ので、~/.ssh/authorized_keys を編集している場合は gitosis によって勝手に上書きされてしまって「うわーん」な状況になってしまいます。そのため Git 用に新しくユーザを作った方が無難です。

そういうことで、ここでは git ユーザを作成します。このユーザは公開鍵によるログインしか行わないのでパスワードログインは無効にしておきます。

remote% sudo adduser
--system
--shell /bin/sh
--gecos 'git version control'
--group
--disabled-password
--home /home/git
git

git ユーザの作成が完了したら、gitosis が管理する Gitリポジトリコンテナ1 を作成します。このコンテナを作成するには、少なくとも一つはアカウントを登録しなければなりません(ここで登録するアカウントはコンテナの管理アカウントになります。管理アカウントは後で変更できます)。gitosis は公開鍵 によってアカウントを識別するので、まずは自分自身のアカウントを作るために自分の公開鍵をサーバに転送することにします(公開鍵を持っていない場合は適宜作成する)。

local% % scp ~/.ssh/id_rsa.pub keiji@remote-name.com:/home/keiji # 自分の公開鍵をサーバに転送

さて、ようやく gitosis のリポジトリコンテナを作成するときがきました!コンテナの作成には gitosis に付属する gitosis-init スクリプトを使用します。このスクリプトは gitosis のインストールが完了していれば、既にシステム上に存在しているはずです。

% sudo -H -u git gitosis-init < /home/keiji/id_rsa.pub # gitosis-init を用いて先程転送してきた鍵を登録。上で作ったユーザ(git)で実行
Initialized empty Git repository in ./
Initialized empty Git repository in ./
% sudo ls /home/git # git ユーザのホームディレクトリに gitosisrepositories という二つのディレクトリが作られてる
gitosis  repositories

gitosis-init を実行すると /home/git は以下のファイルとディレクトリが作られているはずです。

/home/git/
|-- .gitosis.conf -> /home/git/repositories/gitosis-admin.git/gitosis.conf
|-- .ssh
|   `-- authorized_keys # gitosis-admin.git の内容が push されると、gitosis-admin.git の内容に応じて再生成される
|-- gitosis
|   `-- projects.list
`-- repositories
    `-- gitosis-admin.git

そして最後に gitosis がアクセス制御に使用する Git リポジトリ(gitosis-admin.git) に含まれる post-update フックスクリプトのパーミッションをチェックしておきます。post-update フックスクリプトには実行権限が付与されている必要があります。通常 755 になっているはずですが、なっていなかったら適宜 chmod して下さい。これは重要な作業です。

パーミッションが以下のようになっていれば問題ありません。

remote% sudo ls -l /home/git/repositories/gitosis-admin.git/hooks/post-update
-rwxr-xr-x 1 git git 69 2008-11-06 15:26 /home/git/repositories/gitosis-admin.git/hooks/post-update

これでサーバ上のリポジトリコンテナのセットアップは完了!
クライアントからこのリポジトリコンテナにアクセスできるかどうか試してみます。

local% mkdir -p ~/workspace/hosting-self
local% cd ~/workspace/hosting-self
local% git clone git@remote-name.com:gitosis-admin.git # or ssh://git@remote-name/gitosis-admin.git

gitosis-admin.git を git clone することができれば完了です。

gitosis-admin.git リポジトリについて簡単に説明します。 このリポジトリはアカウントを登録/削除したり、アクセス制御を設定するために使用します。アカウントを追加登録したい場合には、リポジトリ内の keydir ディレクトリ以下に追加アカウント用の公開鍵を git add することで行います。アクセス制御を設定するにはリポジトリ内にある gitosis.conf を編集します。

もちろん、この gitosis-admin.git リポジトリ自体もアクセス制御の対象です。

gitosis-admin.git については次のエントリでもう少し詳しく紹介します。

  1. 複数の Git リポジトリを収容するという意味で僕が勝手にリポジトリコンテナと表現した

インストール済みの Git を 1.6 系にアップグレードする

Ubuntu 8.04 のパッケージリポジトリから Git をインストールすると 1.5.4 くらいのバージョンのものが入ります(2008-10-07now)。1.6系は既にリリースされているようですが、特に必要に迫られることもなかったのでそのまま 1.5 系を使っていました。しかし、今日 git.git のクローンを久々に git pull したらかなりの変更がおっこちてきました。そのうち、graph.c というファイルが追加されていたので試しに最新版の Git をビルドして使ってみました。

すると git log --graph --pretty=oneline で、前から「こんなのあったらいいなぁ」と思ってた表示形式でログを一覧できることが分かりました。こんな表示。

*   38f7950acc657b03265c488b301fd779a4d09512 Merge branch 'branch-a'
|\
| * 54a96d32e7add6d89532666bf6f39ac322d2da42 modified
* | 4a3cd0a96e26684bdc17336f451f355b37aa43f5 MANIFEST.SKIP file added
* | 17636f86133c3dc6cb6d78d7ee9d2c6671042388 modified at master
|/
* 7f5bf37677b166506a209b215274510316bec791 initial

ということで最新版をインストールすることにしました。ただ、ソースからビルドすると後々管理が面倒になるので、Git 1.6 の debパッケージをホストしてるリポジトリを探してインストールすることに。以下は Git 関係のパッケージをアップグレードする手順です。

まず、/etc/apt/sources.list に Git の最新版をホストしてるリポジトリを追加します。以下の二行を追加します。hardy 以外のバージョンを使ってる場合は適宜 https://launchpad.net/~smartlounge/+archive から探すと良いと思います。

deb http://ppa.launchpad.net/smartlounge/ubuntu hardy main
deb-src http://ppa.launchpad.net/smartlounge/ubuntu hardy main

次に、 インストール作業。

% sudo aptitude update
% sudo aptitude safe-upgrade
% sudo aptitude install git-core gitk git-gui git-doc

これでパッケージの更新は終わり。 apt 素晴らしい。ただし、今回はサードパーティのリポジトリを追加しているのでインストール途中に脅されます。

警告: 以下のパッケージは信頼できないバージョンがインストールされます!

信頼できないパッケージはシステムのセキュリティを危うくする可能性があります。
自分がこのインストールを望んでいると確信できる場合のみ、インストールを先に進め
てください。

git-gui gitk git-core

この警告を無視して意地でも先に進みますか?
続行する場合は "Yes" を、中断する場合は "No" を、入力してください:

ですが承知の上ですので、サクっと Yes と応えました。

念のため、ちゃんと最新のバージョンが入ったかどうか確認しておきました。

% git --version
git version 1.6.0.2

ちゃんと入ったみたいです。 zsh 用 completion の更新はどうすれば良いか分かってないのでそのままです。completion は非常に重宝してる(というか無いと非常にイライラする)のではやいところ方法を見つけたいところです。

Ubuntu に M+IPA フォントをインストールする

M+IPA を使ってるデスクトップ

M+IPA を使ってるデスクトップ

フォントをインストールする度にググっている気がするので、メモとして残しておく。

手順

  1. フォントをダウンロードする
  2. 解凍
  3. フォントをインストール (~/.fonts にコピー, ~/.fonts ディレクトリがない場合は予め作っておく)
  4. フォントキャッシュを更新

ターミナルで作業する(Nautilus とか使って解凍/コピーしてもいい)

% mkdir -p ~/fonts
%
% wget "http://osdn.dl.sourceforge.jp/mix-mplus-ipa/25997/mixfont-mplus-ipa-TrueType-20060520p1.tar.bz2"
% tar jxf mixfont-mplus-ipa-TrueType-20060520p1.tar.bz2
% cp mixfont-mplus-ipa-TrueType-20060520p1/opfc-ModuleHP-1.1.1_withIPAFonts_and_Mplus/fonts/M+*.ttf ~/.fonts/
%
% fc-cache -f

以上でインストールは終了。一応フォントキャッシュが更新されているから確認する。

% fc-list | grep 'M\+'
M+1P+IPAG:style=regular
M+2P+IPAG circle:style=regular
M+1P+IPAG circle:style=regular
M+1VM+IPAG circle:style=regular
M+2P+IPAG:style=regular
M+2VM+IPAG circle:style=regular

あとは、 システム > 設定 > 外観の設定 から設定する等々…

M+IPA フォントは結構カワイイ字体で気に入ってます。

Ubuntu で e-mobile(D02HW) を使う

外出先でもネットに繋げる環境が必要になったので e-mobile と契約した。ホストマシンが ubuntu なのですが、ググってみると動作報告がチラホラと見つかるので安心して契約した。安心して契約したのですが、上手くいかない方法もあったのでエントリとしてあげておくことにする。

まず、僕の動作環境

  • ubuntu 8.04
  • D02HW (e-mobile 端末)

接続のために参考になったページは Ubuntu日本語フォーラム / Emobile D02HW です。

接続方法はいたって簡単です。GnomePPPを使って設定すると上手くいかなかった(なぜか ‘ネットワークの設定’ ダイアログを利用した場合も同様に接続できなかった)ので、直接ダイアルアップ用の設定ファイルを編集する方法で e-mobile の端末設定を行いました。設定は全てターミナルで作業します。

$ sudo sh -c 'cat > /etc/ppp/peers/ppp0'
user "em"
connect "/usr/sbin/chat -v -f /etc/chatscripts/ppp0"
/dev/ttyUSB0
115200

noipdefault
usepeerdns
defaultroute
persist
noauth

$ sudo sh -c 'cat > /etc/chatscripts/ppp0'
TIMEOUT 60
ABORT ERROR
ABORT BUSY
ABORT VOICE
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
ABORT "NO DIAL TONE"
ABORT "NO ANSWER"
"" "ATZ"
"" "AT&FH0M0"
OK-AT-OK "ATDT*99***1#"
TIMEOUT 75
CONNECT

設定自体はこれで終わりです。簡単

次に、e-mobile 端末を↑で設定を行ったマシンに接続して端末のライトがブルー色に点滅するのを待ちます。
ライトがブルー点滅をはじめたら接続準備ができたということ (だと思う) なので、ネットワークへの接続を開始します。

まだターミナルで作業します。以下のコマンドを実行します。

$ sudo pon ppp0

暫くすると e-mobile 端末のブルー点滅が常時点灯に変わると思います。ブルーのライトが常時点灯するようになったらネットワークへの接続が成功しています。以下のコマンドを実行して接続確認してみます。

$ ping www.google.com

レスポンスが返ってきたら無事接続成功です。端末のブルーのライトが点滅したままの場合、ネットワークに接続できていないので、以下のコマンドを実行して端末を再認識させてから、再度↑の通り pon しなおしてみると上手くいくかもしれません。ただし、端末のブルーの点滅をはじめる前に pon しても上手くいきませんので注意。

$ sudo modprobe -r uhci_hcd
$ sudo modprobe uhci_hcd

接続するためにわざわざターミナルでコマンドを実行するのは面倒なので、一度マシンを再起動します。起動すると画像のネットワーク管理用の通知領域に ダイアルアップ接続 という選択肢が増えていますので、これを使って接続と切断を管理できるようになります。

ネットワークデバイスと接続を管理する通知領域

ネットワークデバイスと接続を管理する通知領域

ただし、これは無線LANの接続状態のインジケーターとは連動していないので接続できているかは e-mobile の端末がブルー点灯しているかで確認します。

windows と比べると設定が面倒ですが、一度設定できてしまえばあとは

  1. e-mobile 端末を ubuntu マシンに接続
  2. ブルー点滅するのを待つ
  3. ネットワークの通知領域から [ ダイアルアップ接続 > ppp0 via Modem に接続します ] をクリック

という手順なのでよしとしましょう。

接続が上手くいかない場合は、デバイスを再認識させる必要がありますが。

$ sudo modprobe -r uhci_hcd
$ sudo modprobe uhci_hcd

許容できる範囲じゃないでしょうかね。

好きな場所に cpan モジュールをインストールする

cpan モジュールを /usr/share/local といったシステムグローバルな場所にではなく ~/local といった個人のディレクトリにインストールしたい (or しなければならない) 場合の cpan シェルの設定方法を備忘録的に書き残しておく。因みに僕の環境は ubuntu 8.04 + perl 5.8.8 + zsh。

今回は cpan というユーザを作って、$HOME/local 以下に cpan モジュールをインストールできるようにしてみる。まずは、とにもかくにも cpan を実行する。

$ cpan
You don't seem to have a user configuration (MyConfig.pm) yet.
Do you want to create a user configuration now? (Y/n) [yes]

初回起動時は、設定のために色々と質問をされるので適当に応える。僕の場合、直接設定ファイルを手修正してしまうので、ここではひたすら Enter キー を連打する。root ユーザで cpan シェルの設定がされている場合は、以下のように「自動で設定する?」と聞かれるので、Enter キーを押す(yes の意)。yes を選択した場合、設定は一瞬で終わる。

Would you like me to configure as much as possible automatically? [yes]

設定が終わると、cpan シェルが起動するので以下のように o conf commit して、それまで設定してきた内容を保存しておく。保存しないと、次回また同じことをしないといけないので忘れずに。終わったら quit。

cpan[1]> o conf commit
cpan[2]> quit

次に、たった今保存された ~/.cpan/CPAN/MyConfig.pm の設定内容の一部を手で書き直していく。↑で Enter キー連打したところで一つ一つ設定できるので別に手で修正する必要はないんだけども、インタラクティブに回答して設定していくのはなんか疲れる。

$ vim ~/.cpan/CPAN/MyConfig.pm

設定ファイルは “key” => [value] という形式 (perl のハッシュ) で記述されている。編集するキーは以下のよっつ(余分な設定もあるかもしれないけど)。

  • make_arg
  • make_install_arg
  • makepl_arg
  • mbuildpl_arg

これらのキーを探して、以下のように値を編集する。

'make_arg' => q[PREFIX=/home/cpan/local],
'make_install_arg' => q[PREFIX=/home/cpan/local],
'makepl_arg' => q[PREFIX=/home/cpan/local],
'mbuildpl_arg' => q[--install_base /home/cpan/local],

編集が終わったらファイルを保存する。

次に 環境変数 PERL5LIB に /home/cpan/local 以下にある cpan モジュールの情報を設定しておく。これをしないと、cpan モジュールはインストールされているけど、実行時に perl がモジュールを見つけられないという状態になってしまうので注意。僕は zsh を使っているので ~/.zshrc に以下の行を追加した。PERL5LIB に設定する値はバージョンによって変わるので適宜置き換えて下さい。

export PERL5LIB=/home/cpan/local/lib/perl/5.8.8:/home/cpan/local/share/perl/5.8.8:/home/cpan/local/lib/perl5:$PERL5LIB

これで設定は完了!ちゃんと設定されているか確認するために何か適当な cpan モジュールをインストールしてみる。

$ cpan
CPAN: File::HomeDir loaded ok (v0.80)

cpan shell -- CPAN exploration and modules installation (v1.9205)
ReadLine support enabled

cpan[1]> install Readonly

モジュールのインストールが成功すれば終了。

以下のようなエラーが出てしまったら ~/.cpan/CPAN/MyConfig.pm のビルド関係の設定を見直してみてください。因みに以下のエラーは PREFIX を指定しなかったために /usr/local 以下に man をインストールしようとしてパーミッションエラーで おつ な状態。

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ERROR: Can't create '/usr/local/man/man3'
Do not have write permissions on '/usr/local/man/man3'
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Home > setup Archive

Search
Feeds
Meta

Return to page top