最近因為工作需求需要安裝git server給大家使用,

但小弟實在是linux菜鳥,(根本是原因linux人員離職,才頂上的...

於是乎上網找了教學,雖然有官網的教學,但我覺得連安裝畫面都不太一樣...好了,廢話不多說!

 

  • 安裝

首先為何要使用Git + Gitolite/Gitosis + Gitweb,Git明顯是當前版控最理想的免費軟體,分散控管的特性更勝SVN一籌,

Gitolite是從gitosis而來,擁有更好的介面與更細微管理,Gitweb能讓browser檢視git repository方便一些人員使用。

Gitolite與Gitosis擇一安裝,以下兩種都有安裝教學,但我最後用Gitosis。

先修改/etc/hosts與/etc/sysconfig/network伺服器名稱。

  • Git

先準備好ssh的公私鑰對,先見管理一開始的部分有說明如何建金鑰對。

使用root作以下操作

套件安裝

yum -y install git-core git httpd perl-Time-HiRes

新增使用者(密碼:gitpw)

useradd git

passwd git

usermod -u 600 git

groupmod -g 600 git

  • Gitolite

複製公鑰到git server /home/git/後,修改擁有者

chown git:git /home/git/id_rsa.pub

注意在設定gitolite.conf中的使用者名稱需要對應公鑰名稱

切換使用者為git

su -l git

切換目錄(預設)

cd /home/git

clone github上的gitolite專案

git clone git://github.com/sitaramc/gitolite

建立bin folder

mkdir -p /home/git/bin

執行安裝,並在/bin中建立link,-in參數預設會在$HOME/bin,也就是/home/git/bin

gitolite/install –ln

設定gitolite的環境,指定pubkey,如此一來git就是管理者

gitolite setup -pk id_rsa.pub

首次安裝gitolite結構,pubkey或admin是必需的

切換回使用者root

exit

檢查suexec的參數,主要為AP_DOC_ROOT和AP_LOG_EXEC

suexec –V

 

-D AP_DOC_ROOT="/var/www"

-D AP_LOG_EXEC="/var/log/httpd/suexec.log"

假定如上,而cgi只能在/var/www下執行,故建立bin目錄並授權

install -d -m 0755 -o git -g git /var/www/bin

建立.sh檔,以切換執行者

vi /var/www/bin/gitolite-suexec-wrapper.sh

export GIT_PROJECT_ROOT="/home/git/repositories"

export GITOLITE_HTTP_HOME="/home/git"

exec ${GITOLITE_HTTP_HOME}/gitolite/src/gitolite-shell

修改權限

chown -R git:git /var/www/bin

chmod 750 /var/www/bin/gitolite-suexec-wrapper.sh

chmod 755 /var/www/bin

修改UMASK

vi /home/git/.gitolite.rc

UMASK => 0027

  • Gitosis

安裝python套件

sudo yum install python-setuptools –y

下載gitosis repository

cd ~

git clone https://github.com/tv42/gitosis.git

cd gitosis

安裝gitosis

sudo python setup.py install

初始化Gitosis,先複製公鑰到git server /tmp/

sudo -H -u git gitosis-init < /tmp/id_rsa.pub

確保使用者git權限

sudo chmod 700 /home/git

sudo chmod 700 /home/git/.ssh

sudo chmod 600 /home/git/.ssh/authorized_keys

  • GitWeb (配合gitolite)

使用root作以下操作

安裝,默認會安裝在/var/www/git

yum install gitweb –y

移動網站目錄,參考網站教學設定,可依自己的配置

mv /var/www/git /var/www/html/gitweb

變更擁有者git

chown -R git:git /var/www/html/gitweb

修改/etc/gitweb.conf

vi /etc/gitweb.conf

our $projectroot = "/home/git/repositories/";

our $projects_list = "/home/git/projects.list";

$projectroot設定為git repository的絕對路徑

修改/var/www/html/gitweb/gitweb.cgi

vi /var/www/html/gitweb/gitweb.cgi

our $projectroot = "/home/git/repositories";

our $projects_list = "/home/git/projects.list";

建立一個假的目錄讓apache存取

install -d -m 0755 -o apache -g apache /var/www/git

配置Apache /conf/httpd.conf 與 /conf.d/git.conf

vi /etc/httpd/conf/httpd.conf

<VirtualHost *:80>

        ServerName        git.mypay.com

        ServerAlias       gitserver

        ServerAdmin       mis@mypay.com

        DocumentRoot /var/www/git

    <Directory /var/www/git>

        Options       None

        AllowOverride none

        Order         allow,deny

        Allow         from all

    </Directory>

    SuexecUserGroup git git

    ScriptAlias /git/ /var/www/bin/gitolite-suexec-wrapper.sh

    ScriptAlias /gitmob/ /var/www/bin/gitolite-suexec-wrapper.sh

    <Location /git>

        AuthType Basic

        AuthName "Git Access"

        Require valid-user

        AuthUserFile /etc/httpd/conf/git.passwd

    </Location>

</VirtualHost>

 

vi /etc/httpd/con.d/git.conf

Alias /gitweb /var/www/html/gitweb

<Directory /var/www/html/gitweb>

  Options +ExecCGI

  AddHandler cgi-script .cgi

  DirectoryIndex gitweb.cgi

</Directory>

<Location /gitweb>

  AuthType Basic

  AuthName "Git Access"

  Require valid-user

  AuthUserFile /etc/httpd/conf/git.passwd

</Location>

Alias 和 Directory改成移動後的位置

增加Apache授權帳號(密碼:gitpw)

htpasswd -c /etc/httpd/conf/git.passwd admin

 

  • Gitweb(配合gitosis)

使用root作以下操作

安裝gitweb

yum install gitweb –y

變更擁有者git

chown -R git:git /var/www/git

修改/etc/gitweb.conf

$projectroot = "/var/www/git"

修改/etc/httpd/conf.d/git.conf

vi /etc/httpd/conf.d/git.conf

Alias /git /var/www/git

<Directory /var/www/git>

Allow from all

AllowOverride all

Order allow,deny

Options +ExecCGI

AddHandler cgi-script .cgi

DirectoryIndex gitweb.cgi

SetEnv GITWEB_CONFIG /etc/gitweb.conf

Dav On

RewriteEngine Off

設定軟連結

ln -s /home/git/repositories/test_repo.git /var/www/git/

  • Others

其他設定,如Apache、iptables、SELinux。

gitweb測試url

http://ip/gitweb/ or http://ip/git/

(教學是這樣,但都gitweb的部分都找不到repositories看來是卡在盲腸了Orz)

 

管理(使用者、權限)

雖然gitweb以失敗告終,但主要能管理就好了,web什麼的let it go...

無論gitosis或gitolite都是在git server內建立一個repository來管理所有的使用者和repositories的關係。

要增加一名使用者,首先要有金鑰對,以下利用Git Bash建立公私鑰,

輸入ssh_keygen –t rsa –C “userid@maildomain,金鑰檔名以userid@maildomain表示,但不要輸入密碼,這樣使用上不用一直打密碼,太麻煩。

Git Bash.png 

當然也可以利用PuTTYgen來產生金鑰對,此處的金鑰非openssh,與Git Bash有所差異。

PuTTYgen.png 

 

可以利用PuTTYgen的conversions轉換,有了金鑰對後,以下分別說明,gitolite與gitosis的管理方式。

 

  • Gitotile

首先將gitolite-admin從git server clone下來,作為平常管理使用。

開啟Git Bash

切換到你希望的目錄下,輸入git clone git@ip:gitolite-admin.git

管理keydir內的公鑰就是管理git的帳號。

編輯conf/gitolite.conf就是管理帳號與repositories的關係

gitolite.conf如下,

repo gitolite-admin

    RW+     =   git-admin

repo testing

    RW+     =   @all

新增repo repository_name,就會新增repository,

R = userid代表該userid可讀取repository_name,

WR = userid代表該userid可讀寫repository_name,

WR+ = userid代表該userid可讀寫刪repository_name,

@all代表所有的使用者,

@符號代表群組可以在檔案中設定,並且可針對使用者也可針對本版庫。

最後使用git tortoise commit and push.

或指令

git add .

git commit -m 'message'

git push origin master

同步到git server上。

 

  • Gitosis

首先將gitosis-admin從git server clone下來,作為平常管理使用。

使用Git Bash輸入git clone git@ip:gitosis-admin.git

管理keydir內的公鑰就是管理git的帳號。

編輯conf/gitosis.conf就是管理帳號與repositories的關係

gitosis.conf如下,

[gitosis]

[group gitosis-admin]

members = git-admin@mypay.tw

writable = gitosis-admin

此檔內的members名稱與對應到keydir的檔名。

最後使用git tortoise commit and push.

或指令

git add .

git commit -m 'message'

git push origin master

同步到git server上。

 

如果你不在意gitweb,接下來可以使用了....哈哈。(有空再研究吧)

 

 

參考網站

官網

https://git-scm.com/book/zh-tw/v1/%E4%BC%BA%E6%9C%8D%E5%99%A8%E4%B8%8A%E7%9A%84-Git-GitWeb

中文

http://eric0806.blogspot.tw/2014/05/ubuntu-git-server-for-small-team-who-use-windows-os.html

英文

https://sachinsharm.wordpress.com/2013/10/04/installsetup-and-configure-git-server-with-gitolite-and-gitweb-on-centosrhel-6-4/

Gitolite權限設定

http://blog.crboy.net/2012/06/gitolite-settings-and-managements.html

TortoiseGit金鑰使用

http://blog.crboy.net/2012/05/git-on-windows.html

arrow
arrow
    文章標籤
    git centos
    全站熱搜
    創作者介紹
    創作者 abcg5 的頭像
    abcg5

    Aaron Yang

    abcg5 發表在 痞客邦 留言(0) 人氣()