Gitosis 是一個使用SSH管理Git倉庫的服務端工具,有意思的是,該軟件用來添加用戶和設定權限的界面不是網頁,而是一個特殊的 Git 倉庫。你只需要設定好某個項目,然后推送,Gitosis 就會隨之改變服務器設定,酷!
在Linux下的安裝方法已經非常成熟,上網Google一下就有很多,而在Windows下的安裝則花了我不少功夫,只要是有時候碰到問題無從入手,以下將整個安裝過程詳細記錄下來。
總體分為如下幾大步驟:
一)下載安裝Cygwin
1)到http://www.cygwin.com/官方網站下載 Cygwin 的在線安裝程序 setup.exe。
2)以管理員身份運行setup.exe開始安裝Cygwin
3)Cygwin安裝過程截圖
點擊下一步繼續
選擇“Install from Internet”
設置Cygwin的安裝路徑Root Directory,選擇“All Users(RECOMMENDED)”
設置Cygwin在線下載的數據包的保存路徑Local Package Directory
選擇“Direct Connection”
選擇下載文件的鏡像地址后點擊下一步(選擇不同的地址會影響下載速度)
開始下載相關數據包
如果是首次安裝Cygwin,將會彈出如下界面,點擊確定繼續即可
選擇默認並沒有包含的相應包,包括:
- devel 分類下的 git
- net 分類下的 openssh
- Python 分類下的 python(這里順便記錄一下python的版本號,后面會用到,如2.6)
-
點擊下一步繼續
到了漫長的下載等待界面了
點擊完成后Cygwin就安裝完畢了
二)修改安裝后相關目錄的訪問權限
進入“開始/所有程序/Cygwin/Cygwin Bash Shell”,右鍵以管理員身份運行“Cygwin Bash Shell”,在命令行中分別運行如下命令:
$ chmod +r /etc/passwd
$ chmod u+w /etc/passwd
$ chmod +r /etc/group
$ chmod u+w /etc/group
運行的截圖如下:
三)安裝 ssh 守護進程服務
繼續執行如下命令:
$ ssh-host-config
根據命令的提示分別回答:yes、yes、yes、ntsec tty、no、yes、[密碼]、[重復密碼],參考如下截圖:
至此ssh服務安裝完畢!
打開Windows的命令行,運行“> net start sshd”啟動ssh服務(也可以到Windows服務中啟動)。
四)在Windows防火牆內開放上述 ssh 服務需要的22端口
進入“控制面板/系統與安全/Windows防火牆/高級設置(在左邊欄)”,添加新的入站規則:
名稱可以根據自己的喜好相應修改。
五)安裝python setuptools
先設置python路徑的訪問權限,保證所有用戶都可以訪問:
$ chmod +r /lib/python2.6/ -R
2.6是所安裝python的版本號,要對上你安裝的版本號才行,我裝的時候是2.6,如果忘記了,可以在Cygwin的命令終端輸入“$ python -v”查看一下。
到 Python Package Index 主頁下載對應版本的python setuptools,如2.6版對應要下載 setuptools-0.6c11-py2.6.egg。
將setuptools-0.6c11-py2.6.egg復制到/home/your_user_name目錄下(也可以按自己的需要復制到其它地方,注意下面的運行路徑正確即可),然后在該目錄的Cygwin終端下運行如下命令安裝:
$ ./setuptools-0.6c11-py2.6.egg
看到輸出類似如下的信息就表示安裝成功了:
Processing setuptools-0.6c11-py2.6.egg
Copying setuptools-0.6c11-py2.6.egg to /usr/lib/python2.6/site-packages
Adding setuptools 0.6c11 to easy-install.pth file
Installing easy_install script to /usr/bin
Installing easy_install-2.6 script to /usr/bin
Installed /usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg
Processing dependencies for setuptools==0.6c11
Finished processing dependencies for setuptools==0.6c11
六)安裝配置Gitosis
1) 運行如下命令將Gitosis管理端的git倉庫下載下來:
$ mkdir sources
$ cd sources
$ git clone git://eagain.net/gitosis.git
2) 下載成功后再運行如下命令進行初始化:
$ cd gitosis
$ python setup.py install
這將會輸出一大堆的信息,如果沒有出現問題,最后那一行輸出的信息類似於“Finished processing dependencies for gitosis==0.2”。
3) 到“控制面板/用戶帳戶和家庭安全”添加一個賬戶名稱為“git”的帳號,密碼自定,類型選標准用戶即可。
4) 繼續在Cygwin終端運行如下命令,將剛添加的git帳號添加到Cygwin的passwd文件:
$ mkpasswd -l -u git >> /etc/passwd
再使用你喜歡的任何方式查看一下passwd文件(文件的最后那一行),確認git帳號已經添加進去。
5) 拷貝你的公鑰文件到目錄“/tmp/id_rsa.pub”,再在終端運行“$ chmod 755 /tmp/id_rsa.pub”修改文件的權限
如果你還沒有相應的公鑰,就自己生成一個,參考GitHub Guide上的“Set Up SSH Keys”指引或參考基於互聯網的Git開發環境搭建(Windows系統)中第3點“ 生成 Git 要使用的 ssh key”的相關指引。
6)以git用戶打開一個新的Cygwin終端(如下圖所示,位置在開始/所有程序/Cygwin)
在該終端內運行如下命令初始化公鑰的配置:
$ gitosis-init < /tmp/id_rsa.pub
如果你運氣好的話,成功后你將會看到如下信息:
如果出現錯誤,參考下面第7步的處理
7)如果第6步出現類似如下錯誤信息:
0 [main] python 4268 D:\cygwin\bin\python.exe: *** fatal error - unable to remap \\?\D:\cygwin\lib\python2.6\lib-dynload\select.dll to same address as parent: 0x3E0000 != 0x410000
按如下說明處理:
關閉所有當前打開的所有Cygwin終端窗口,停止sshd服務,然后打開Windows的CMD命令行窗口,切換到cygwin/bin目錄,運行ash命令,會出現$命令行,繼續輸入“$ /bin/rebaseall”,如果沒有任何錯誤信息就OK了,參考如下截圖:
錯誤處理完畢后,重新啟動sshd服務,再按上面第6步重新操作一遍即可。
8)切換回以管理員身份打開的那個Cygwin終端窗口(如果因第7步已經關閉則重新打開一個),運行如下命令
$ chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
至此Gitosis成功安裝完畢!
七)使用Gitosis
1)將Gitosis管理端的git倉庫檢出來,位置隨意
$ git clone git@your-server-name:gitosis-admin.git
以下嘗試創建一個test倉庫,並配置訪問權限。
2)進入剛剛檢出的目錄gitosis-admin,編輯gitosis.conf文件,增加如下信息:
[group test]
writable = test
members = your_email_from_ssh_key
保存,並提交、push到gitosis-admin.git倉庫。
3)在你喜歡的地方創建一個空目錄test,里面放個readme.txt文件,然后打開Git Bash終端,進入到test目錄內運行如下命令,test.git倉庫就會在服務端自動創建了(注意經過第2步后是不能直接"$ git clone"出來的,會報錯,必須自己有個非空的git倉庫然后push上去才行)。
$ git add .
$ git init
$ git commit -m init
$ git remote add origin git@your-server:test.git
$ git push origin master
現在你到“cygwin\home\git\repositories”目錄下看看,test.git倉庫已經穩放在那里了!
test倉庫只是一個原理演示,任何其他的git倉庫操作是類似的。
參考資料:
Setting up Gitosis on Windows 7
python.exe: *** fatal error - unable to remap
還有個git倉庫管理工具叫gitolite,用perl寫的,聽說可以控制到分支的權限等更多功能,有興趣的可以參考一下下面的鏈接:
碰到的錯誤記錄:
1)2011-05-27 啟動sshd服務報錯 "錯誤1069:由於登錄失敗而無法啟動服務"
這是由於用戶密碼錯誤導致的,以后更改用戶后sshd也可能發生這個問題,在 services.msc 里的登錄標簽里更改用戶設置即可!
我剛好是碰到帳號cyg_server處於"用戶下次登錄時須更改密碼"狀態,修改為"密碼永不過期"后sshd就啟動正常了。