CentOS 7.0 - Git サーバ構築!

Updated:


「CentOS 7.0 - Git サーバ構築」についての記録です。

(旧バージョンでの作業記録を更新しました。興味がなければスルーしてください)

0. 前提条件

  • CentOS 7.0-1406(x86_64) を NetInstall で最小限インストールしている。
  • サーバ用途なので、作業は基本的に全て一般ユーザから root になって行う。
  • クライアント側は Linux Mint 17 を想定。
  • クライント側から要求があった場合のみ Git サーバを起動するようにするために xinetd を使用する。
  • サーバホスト名は “vbox.mk-mode.com”
  • サーバマシンに OpenSSH サーバ構築済みで、鍵ペアによる SSH 接続が可能。
  • サーバマシンに xinetd 導入済み。
  • 一般ユーザは “wheel” に属する “masaru” を想定。
  • サーバ側 SSH ポートは TCP:9999 を想定。(デフォルトは TCP:22 だが、変更していることを想定)

1. Git サーバ構築

1-1. インストール

git, git-daemon, git-all を yum でインストールする。

# yum -y install git git-daemon git-all
# git --version
git version 1.8.3.1

1-2. xinetd 設定ファイル編集

最近はデフォルトでは存在しないので作成する。

File: /etc/xinetd.d/git

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# default: off
# description: The git dæmon allows git repositories to be exported using \
#       the git:// protocol.

service git
{
        disable         = no      # <= 変更
        socket_type     = stream
        wait            = no
        user            = nobody
        server          = /usr/libexec/git-core/git-daemon
        server_args     = --base-path=/var/lib/git --export-all --user-path=public_git --syslog --inetd --verbose
        log_on_failure  += USERID
}

1-3. Xinetd 再起動

# systemctl restart xinetd

1-4. リポジトリ作成

作成先は /etc/xinetd.d/git の –base-path に指定されている /var/lib/git/ とした。

# cd /var/lib/git/
# mkdir public_git
# mkdir public_git/test.git
# cd public_git/test.git
# git --bare init --shared
Initialized empty shared Git repository in /var/lib/git/public_git/test.git/

--baregit に対するオプションで、管理ファイル等を作成する。 --sharedinit に対するオプションで、グループ書きこみ権限を追加する。

1-5. git 用グループ作成

Git 用グループを作成し、作成したディレクトリ内の権限を設定する。

# groupadd git
# usermod -G wheel,git masaru
# chown -R root:git .

usermod -G wheel,git masaru としているのは、masaru ユーザが既に属している wheel グループから外れてしまわないようにするため。
Git 専用のユーザを作成したのなら usermod -G git masaru とすればよい。

1-6. ディレクトリ確認

この時点で該当ディレクトリは以下のようになっているはず。

# ls -l
合計 16
-rw-rw-r-- 1 root git   23  8月  2 00:23 HEAD
drwxrwsr-x 2 root git    6  8月  2 00:23 branches
-rw-rw-r-- 1 root git  126  8月  2 00:23 config
-rw-rw-r-- 1 root git   73  8月  2 00:23 description
drwxrwsr-x 2 root git 4096  8月  2 00:23 hooks
drwxrwsr-x 2 root git   20  8月  2 00:23 info
drwxrwsr-x 4 root git   28  8月  2 00:23 objects
drwxrwsr-x 4 root git   29  8月  2 00:23 refs

2. クライアントからテスト

2-1. テスト用ファイル作成

ディレクトリを作成し、テスト用ファイルを配置する。
今回はユーザホーム配下に作成した “src” ディレクトリ配下に “test” ディレクトリを作成し、”test.txt” というテキストファイルを配置した。

$ cd ~/src
$ mkdir test
$ cd test
$ echo "Git Test." > test.txt

2-2. ローカルリポジトリの作成

ディレクトリ内にローカルリポジトリを作成する。

$ git init
Initialized empty Git repository in /home/masaru/src/test/.git/

2-3. ローカルリポジトリでコミット

ファイルをローカルリポジトリに追加、コミットする。

$ git add test.txt
$ git commit -m "First Commit"
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

2-4. リモートリポジトリの登録

今後登録名で作業できるようにするために、接続先 URL を登録する。
以下の 9999 はサーバ側 SSH ポート番号。(SSH ポートをデフォルトの 22 から変更していない場合は、ここでのポート指定は不要)

$ git remote add origin ssh://masaru@vbox.mk-mode.com:9999/var/lib/git/public_git/test.git

ちなみに、登録名を省略すると origin になる。

2-5. リモートリポジトリへ Push

リモートリポジトリに push する。

$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 225 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://masaru@vbox.mk-mode.com:9999/var/lib/git/public_git/test.git
 * [new branch]      master -> master

ssh 用の鍵ペアを登録していない場合、パスワードの入力が求められはず。 鍵ペアを登録するとパスワードの入力は不要になる。 また、2回目からは git push のみでよい。

2-6. リモートリポジトリから Pull

リモートリポジトリからローカルへ pull してみる。

$ git pull origin master
From ssh://vbox.mk-mode.com/var/lib/git/public_git/test.git
 * branch            master     -> FETCH_HEAD
Already up-to-date.

2-7. リモートリポジトリを Clone

普段は個人で使用するので、clone することは滅多に無いが、一応テストしてみる。
ローカルにあるリポジトリを一旦削除(削除が心配ならリネーム)し、その後、リモートリポジトリを clone する。
以下の 9999 はサーバ側 SSH ポート番号。(SSH ポートをデフォルトの 22 から変更していない場合は、ここでのポート指定は不要)

$ cd ..
$ rm -rf test
$ git clone ssh://masaru@vbox.mk-mode.com:9999/var/lib/git/public_git/test.git
Cloning into 'test'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
Checking connectivity... done.

$ ls -la test
合計 16
drwxr-xr-x 3 masaru masaru 4096  8月  2 00:34 .
drwxr-xr-x 6 masaru masaru 4096  8月  2 00:34 ..
drwxr-xr-x 8 masaru masaru 4096  8月  2 00:34 .git
-rw-r--r-- 1 masaru masaru   10  8月  2 00:34 test.txt

元通りに復活できたので clone テストは成功している。

2-8. Clone したリポジトリに Pull

clone したリポジトリをリモートリポジトリに pull するには、最初から以下のようするだけでよい。

$ git pull
Already up-to-date.

2-9. その他

ちなみに、リモート側に gitweb というのをインストールすると、ブラウザでリモートリポジトリを操作できるようになるようだ。

# yum -y install gitweb

でインストールして、ブラウザで http://<リモート側のホスト名>/git/ にアクセスする。 当方は、今のところ使用するつもりはないで未確認。


以上。





 

Sponsored Link

 

Comments