Synology DS213+ 設定 Git Server

Git 最著名的 repository 集散地非 Github 莫屬了,所有配套也都相當完整,但我寫的小程式多半是自用,所以從 Subversion 的時代開始,server 也只是拿來同步不同電腦之間的 code,那些 version control 的功能幾乎都沒用到,不過既然 DS213+ 有提供 SSH 功能,就把 git repos 也從弟弟那裡搬回來了。

安裝 git

DSM 內建並沒有 git 程式,可以透過 ipkg 安裝(目前版本為 1.8.2.3-2,會安裝到 /opt/bin 裡)

$ sudo ipkg install git

不過我是安裝 SynoCommunity 所提供的 package(目前版本為 1.8.3-3,會安裝到 /usr/local/git),主要是因為版本較新,且該網站宣稱

The packages offered by SynoCommunity have been tested, and do not interfere with official Synology packages.

姑且就覺得它比較 ok 吧!可惜他的安裝路徑是在 /usr/local/git,與一般 package 會安裝到 /opt/bin 或是 /usr/local/bin 這樣的習慣不同,得額外處理 PATH 的問題。

建立 git 使用者

用 DSM 裡的「控制台」 -> 「使用者帳號」建立一個 git 專用的 user.

為了讓網址好看一些,我把家目錄的名字取為 repos, 並建立一個 symbolic link 在 /

修改 /etc/passwd, 將 git 使用者的 shell 改成 /bin/ash (註:請見文末「尚未解決」段落)

將原先已經存在的 repository 全部搬進去 home directory.

設定 ssh 環境變數

因為 non-interactive 介面的環境變數 PATH 會重設,透過 ssh 來存取 git repository 會找不到 git 程式,可以透過修改每個 project 的 .gitconfig 來設定完整路徑,但比較乾脆的解決方式還是透過 .ssh/environment 來設定,修改 /etc/ssh/sshd_config,打開 PermitUserEnvironment yes

建立 ~/.ssh/environment 並加入

PATH=/opt/bin:/opt/sbin:/usr/local/git/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin

設定新的 origin url

將原本已經 clone 出去的 repo 重新指定 origin url

$ git remote set-url origin ssh://git@git_server_hostname/repos/some_repo.git

尚未解決

一般會建議不要讓 git 這個使用者登入 shell,所以 git 本身提供了一個 git-shell 有限制功能的 shell,但在這台 Synology 的機器上一直會遇到 Permission denied 的問題,暫時解決不了。