2014年9月11日 星期四

[NAS][QNAP][Git] 如何在QNAP NAS上安裝Git server

近日由於想要安裝Git server作為版本控制的工具,便動起家裡那台只用於備份的NAS (QNAP TS-219 II)的腦袋。花了一個晚上,也終於搞定了,以下是安裝步驟,有興趣的也可以自己嘗試看看。


  • 安裝Optware IPKG。這個在QNAP官方的App Center裡有提供,直接安裝即可。
  • 安裝Git。這個在QNAP官方的App Center中也有提供,不過版本比較舊;建議可以改用SSH登入admin帳號以後,透過以下的command手動安裝。
    ipkg update
    ipkg install git
    
    
  • 初始化git server的repository。注意:git repository務必存放在非系統default產生的目錄下,否則重開機之後,資料會被砍掉。
    假定服務器端git repository的目錄為:/opt/repos,Project目錄為demoproj.git。則通過SSH登陸admin賬號後運行如下命令。
    cd /opt/repos
    git init --bare demoproj.git
    
    
  • 透過NAS的管理介面,添加名稱為git的User和UserGroup,用於存取所有的git repository。稍微注意的是git用戶無需其他目錄的權限。在建立好之後,通過WEB界面使用git用戶進行登入,這樣NAS系統會自動設置好git用戶的預設目錄(這個目錄是/share/homes/git)。
  • 更改git repository目錄的所有者為git用戶。執行如下命令
    chown -R git:git /opt/repos
    
    
  • 由於QNAP內建的SSH server並不允許admin帳號以外的其他賬號使用SSH的方式連接系統,所以我們需要手動安裝OpenSSH,才方便後續可以用git帳號SSH登入NAS。首先,通過admin賬戶登陸Web管理頁面,修改系統自帶的SSH port從預設的22改為22000或其他不衝突的值。這樣就可以讓OpenSSH正常使用port 22來運行。
  • 安裝OpenSSH並啟動服務。同樣需要通過系統原有的SSH server登陸admin賬號(還記得Port已經被改為22000了嗎?要改用參數 –P22000 來指定為修改後的port number)。
    ipkg install openssh openssh-sftp-server
    /opt/etc/init.d/S40sshd start
    
    在第二步的時候,卻發生了錯誤,此時可以將安裝openssh時候所產生的key拷貝一份過去,至少我這樣用就沒報錯了。
  • 在Client端機器上通過git UI工具產生SSH密鑰,並將公鑰(id_rsa.pub)添加到Server端的認證文件裡。在客戶端機器的git bash中運行如下命令。
    #將公鑰複製到NAS (請自行替換成您個人放公鑰的目錄,以及NAS的IP address)
    scp /c/Users/ryan/.ssh/id_rsa.pub git@www.xxxxxx.net:/share/homes/git/id_rsa.pub
    
    #通過SSH登陸admin賬戶後運行如下命令。
    su git
    cd /share/homes/git
    mkdir .ssh
    cat ./id_rsa.pub >> /home/git/.ssh/authorized_keys
    rm ./id_rsa.pub
    
  • 設置認證文件及其所在各級目錄的權限。由於SSH要求密鑰文件及其目錄的讀寫權限只能開放給當前用戶,否則無法通過密鑰進行認證,這樣每次登陸時還是需要輸入密碼。
    chown -R git:git /share/homes/git
    chmod 700 /share/homes/git
    chmod 700 /share/homes/git/.ssh
    chmod 600 /share/homes/git/.ssh/authorized_keys
  • 這時候就大功告成啦,git client應該已經可以訪問git server的git reposity。實驗看看,在Client端的git bash中運行如下命令。
    git clone git@www.xxxxxx.net:/opt/repos/hets.git
  • 為了安全起見,最好禁止通過SSH來登陸git賬戶。只需要修改/etc/passwd文件。找到行git:x:502:502:Linux User,,,:/home/git:/bin/sh修改為git:x:502:502:Linux User,,,:/home/git:/opt/bin/git-shell。如果不知道git-shell的具體路徑,可以使用which git-shell命令來獲得。
  • 張貼留言