近日由於想要安裝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命令來獲得。
沒有留言:
張貼留言