伺服器使用git協議

來源:互聯網
上載者:User
1.    前言

         最近在伺服器上搭建支援git協議的版本庫,遇到了些麻煩(主要是因為對linux系統不太熟悉導致),在此小做筆記,以供自己和他人蔘閱。

         我的環境如下表所示,我通過另一台機器複製版本庫來驗證:git clone git://192.168.1.101/path/to/repos/mygit.git mygit

linux伺服器系統

Ip地址

版本庫路徑

debian

192.168.1.101

/path/to/repos/mygit.git

2.    Git協議概要

Git協議是提供git版本庫唯讀服務的常用協議(匿名讀取),該協議的缺點就是不能提供身份認證,也真是因為寫操作沒有授權控制,因此一般不用來提供寫操作。

         對於提供公用的,非授權的唯讀訪問,Git協議在效能和速度上遠比HTTP協議高效,所以對於提供唯讀版本庫,我們常用git協議,而不用http協議。

3.    Git協議部署3.1. 部署原理

從原理上來講,Git
協議的配置很簡單。基本上,只要以守護進程的形式運行git-daemon服務軟體即可,即以守護進程的形式運行以下參數(參數何意,後面會講):

git daemon --inetd --verbose --export-all /path/to/repos

         以守護進程的形式運行該進程的方法有很多,我前後用過兩種方式實現:inetd和xinetd,其實xinetd是inetd的升級版(大家用xinetd就好,我是抱著學習的態度才試著用inetd的),你可以到xinetd的官網看看它介紹就知道了:http://www.xinetd.org/,有關inetd和xinetd的細節不在本本文討論範圍內。

3.2. 部署inetd

         inetd到底是什麼東東,自己先問下“度娘”或者“Google”,要先有個簡單的瞭解。也可以參考man inetd協助文檔(特別是學習完後再回過頭來看更有效果)。

3.2.1. 安裝

sudo aptitude install netkit-inetd

發現可找到,但無論如何也安裝不對。提示了一個資訊要指定一個確定安裝軟體,有一個是openbsd-inetd。繼續尋找:netkit-inetd已經由openbsd-inetd所替代。於是安裝openbsd-inetd:

sudo aptitude install openbsd-inetd

注意:不同的linux系統,情況估計跟我的不一樣。

 

安裝成功後,先用以下命令看看inetd運行了沒有:

ps ax |grep inetd

先看看openbsd-inetd支援的參數有哪些,輸入/etc/init.d/openbsd-inetd –help看協助:

# /etc/init.d/openbsd-inetd --help

Usage: /etc/init.d/openbsd-inetd {start|stop|reload|force-reload|restart|status}

         常用的命令:

/etc/init.d/openbsd-inetd start

啟動inetd

/etc/init.d/openbsd-inetd stop

停止inetd

/etc/init.d/openbsd-inetd restart

重啟inetd

/etc/init.d/openbsd-inetd reload

修改了設定檔inetd.conf,可以通過該命令使配置立刻生效

3.2.2. 修改設定檔

注意:可以通過man inetd.conf來查看詳細的參數說明。        

在設定檔/etc/inetd.conf中添加如下設定:

git stream tcp nowait nobody /usr/lib/git-core/git git daemon --inetd --verbose --export-all /path/to/repos

說明:

◇在設定檔中,以上只是一行

◇/usr/lib/git-core/git是我git程式所在位置,git daemon後面是運行git的參數。

◇預設git-daemon只對包含檔案git-daemon-export-ok的版本庫提供服務。使用--export-all後,無論版本庫是否存在標識檔案git-daemon-export-ok,都對版本庫提供git訪問服務。

◇其中/path/to/repos是我在linux伺服器上git版本庫的存放目錄。

◇git daemon的參數很多,這裡只列出了簡單的用法,有興趣的可以通過git daemon –help或者man inetd.conf協助慢慢研究。

3.2.3. 使配置立刻生效

         修改了設定檔後,可以通過/etc/init.d/openbsd-inetd restart或者/etc/init.d/openbsd-inetd reload來使配置馬上生效。我這裡介紹另一種方法。

git-daemon運行時,inetd會讀取它的設定檔,預設為/etc/inetd.conf。如果修改了該設定檔,給inetd進程發一個SIGHUP訊號,inetd在接收到SIGHUP掛起訊號後會重新讀取其設定檔。按如下步驟給inetd進程發送一個SIGHUP訊號:

◇找出inetd進程的process number

ps ax | grep inetd

230 ?? Ss 0:00.01 inetd

20392 std S+ 0:00.01 grep inetd

從上面可以看出,我這裡的process number是'230'。

◇發送SIGHUP訊號

sudo kill - SIGHUP 230

 

至此,你就可以通過git協議複製版本庫了。

3.3. 部署xinetd

         既然xinetd是inetd的替代版,建議大家都使用xinetd,需要給你一個替代的理由?去官網看:http://www.xinetd.org/,你可以通過man
xinetd來看下協助手冊。

3.3.1. 安裝

sudo aptitude install xinetd

或者去官網下載最新源碼進行安裝。安裝成功後,你可以搜尋下xinetd檔案,發現可執行檔檔案有兩個:/etc/init.d/xinetd和/usr/sbin/xinetd,其他的要麼是檔案夾要麼沒有可執行檔許可權。(注意:不同的linux系統可能路徑不太一樣)。

# find / -name xinetd –exec  ls -idl {} \;

665609 -rwxr-xr-x 1 root root 2063  3月 27 2008 /etc/init.d/xinetd

665608 -rw-r--r-- 1 root root 316  3月 27 2008 /etc/default/xinetd

263351 -rwxr-xr-x 1 root root 133908  3月 27 2008 /usr/sbin/xinetd

269429 drwxr-xr-x 3 root root 4096 10月 24 11:01 /usr/share/doc/xinetd

3281001 -rw-r--r-- 1 root root 28 10月 24 11:01 /var/lib/update-rc.d/xinetd

         我一度沒弄明白要用哪個路徑下的xinetd來啟動,好像兩個都可以啟動xinetd服務。後來才發現/usr/sbin/xinetd才是真正的執行程式,而/etc/init.d/xinetd檔案是shell指令碼(最終也是調用/usr/sbin/xinetd來執行)。

         如果要看/usr/sbin/xinetd程式支援哪些參數,可以manxinetd查看協助。如果要看/etc/init.d/xinetd指令碼支援哪些參數,可以/etc/init.d/xinetd –help查看。是不是有點亂,不要搞混了,你可以開啟/etc/init.d/xinetd指令檔看看裡面的內容應該就明白了。

         可以通過以下命令查看下xinetd有沒有有運行:

ps ax | grep xinetd

         如果沒有運行,可以通過以下命令來啟動xinetd:

/etc/init.d/xinetd start

啟動xinetd

/etc/init.d/xinetd stop

停止xinetd

/etc/init.d/xinetd restart

重啟xinetd

另外,如果你想看xinetd運行過程中的log資訊(如果你設定檔寫錯了,從log中就能發現錯誤,有助於排查問題),可以用以下命令,其中/xinetdlog.txt就是log檔案。

/usr/sbin/xinetd -filelog /xinetdlog.txt

3.3.2. 修改設定檔

注意:可以通過man xinetd.conf來查看詳細的參數說明。

成功安裝後,可以看到/etc/xinetd.conf設定檔,這跟inetd不同,你不能在這裡直接修改,你需要在/etc/xinetd.d/目錄下建立一個git-daemon檔案,檔案內容如下:

# default: off

# description: The git server offers access to git repositories

service git

{

   disable       = no

   type            = UNLISTED

   port            = 9418

   socket_type     = stream

   wait            = no

   user            = nobody

   server          = /usr/local/bin/git

   server_args     = daemon --inetd --verbose --export-all  /path/to/repos

   log_on_failure  += USERID

}

3.3.3. 使配置立刻生效

         在/etc/xinetd.d/目錄裡新加/修改設定檔,重啟xinetd即可生效:

/etc/rc.d/init.d/xinetd restart

4.    提供簡短的URL地址

我們上面使用的URL是git://192.168.1.101/path/to/repos/mygit.git,如果版本庫的路徑比較深,有什麼辦法能在使用者訪問時提供短一些的URL地址呢?可以為git
daemon使用--base-path參數建立版本庫根目錄映射,如inetd.conf設定檔寫成這樣:

git stream tcp nowait nobody /usr/lib/git-core/git git daemon --inetd --verbose --export-all --base-path=/path/to/repos /path/to/repos

         那麼我們就可以用git://192.168.1.101/mygit.git來訪問版本庫。

5.    其他

         Git協議的預設連接埠是9418,通過以下命令可以驗證,當然你也可以不用預設連接埠。

# grep 9418 /etc/services

git            9418/tcp                        # git pack transfer service

git            9418/udp                        # git pack transfer service

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.