Synology NAS で Gitサーバーを構築

今回も備忘録です。
Docker 環境で使用する Gitリポジトリ を用意するにあたり、使用頻度の低かった Synologu NAS 上に Gitサーバーを構築してみることにしました。

## 環境について
[SSH 認証編](https://qiita.com/b-wind/items/fe22e34c7ea81cc84d6d) と変わりません。
使用する環境は下記のとおりです。

<table>
  <caption><b>クライアント側</b></caption>
  <tr>
    <td> エディション </td> <td>Windows 11 Pro</td>
  </tr>
  <tr>
    <td> バージョン </td> <td>23H2</td>
  </tr>
  <tr>
    <td> OSビルド </td> <td>22631.4169</td>
  </tr>
  <tr>
    <td> エクスペリエンス </td> <td>Windows Feature<br> Experience Pack 1000.22700.1034.0</td>
  </tr>
</table>

<table>
  <caption><b>Synology NAS側</b></caption>
  <tr>
    <td> 製品 </td> <td>DiskStation DS420J</td>
  </tr>
  <tr>
    <td> DSM バージョン </td> <td>DSM 7.2.1-69057 Update 5</td>
  </tr>
  <tr>
    <td> uname -a </td> <td>Linux DS420J 4.4.302+ #69057 SMP Fri Jan 12 17:01:55 CST 2024 aarch64 GNU/Linux synology_rtd1296_ds420j</td>
  </tr>
</table>

## 事前にインストールしたソフトウェア
[git for windows](https://gitforwindows.org/)
サイトのトップページに表示されている「download」ボタンをクリックし、「Git-2.46.2-64-bit.exe」をダウンロードしました。
同ファイルをインストールしましたが、基本的に「既定の設定」のままインストールを進めました。

## 参考にした記事

[Synologyナレッジセンター　Git Server](https://kb.synology.com/ja-jp/DSM/help/Git/git?version=7)
[NASキット Synology DiskStation DS220jで遊ぶ その13: Gitサーバにする](https://scratchpad.jp/synology-diskstation-ds220j-13)

Git サーバーの構築とリポジトリの準備は、この二つのサイトを参照すれば 無難に進められると思います。

## gitリポジトリのクローン手順
前述のサイトでは VSCode からクローンする手順が記載されていました。

1. VSCode を起動する。
1. 左端の「ソース管理」アイコンをクリックする。
1. ソース管理ペイン内の「リポジトリのクローン」ボタンをクリックする。
1. リポジトリへのURLを入力する。<br/>　例. ssh://git-server/git/git_test.git
1. リポジトリのクローンフォルダを作成するフォルダを選択する。<br/>（選択したフォルダの直下に、リポジトリファイルと同名のフォルダが作成される）

ただ、<font color="red">「クローンフォルダの名前」を「リポジトリファイルと異なる名前」にしたいとき</font>は、別の方法でクローンする必要があります。

#### 任意のフォルダへクローンする方法
```git clone```コマンドを使えば、好きな名前のフォルダへクローンすることができます。

1. 「Git CMD」を起動する。
1. リポジトリフォルダを作成するベースフォルダへ移動する。<br>　例. "C:\Docker"
1. リポジトリフォルダを作成し、そこへ移動する。<br>　例. "sample1"
1. git colne コマンドを実行して「カレントフォルダ」へリポジトリをクローンする。

```console
C:\Docker>mkdir sample1
C:\Docker>cd sample1
C:\Docker\sample1>git clone ssh://git-server/git/git_test.git .
Cloning into '.'...
warning: You appear to have cloned an empty repository.
C:\Docker\sample1>
```
* ```git clone```コマンドに指定したURLの「git-server」は、SSH の CONFIG ファイル（.ssh フォルダ下のファイル）に記述したホスト定義名です。
* ```git clone```コマンドに指定したURLの「git」は、Synology NAS 上で作成した「リポジトリフォルダを指すシンボリックリンク」です。

## VSCode からの操作
### git config へのユーザー名とメールアドレスの追加
リポジトリへアクセス際に使用する既定の「ユーザー名」と「メールアドレス」を、git global 設定に追加しておきます。
```console
git config --global user.name "ユーザー名" 
git config --global user.email "メールアドレス"
```
### Visual Studio Code からクローンフォルダを開く
1. 「フォルダーを開く」メニューから、先ほどのクローンフォルダ（C:\Docker\sample1）を開きます。
1. 信頼するかどうかを問い合わせてくるので、「はい、作成者を信頼します」をクリックします。<br/><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90456/8ecf7bb2-dd67-e630-e1df-a38b1c105dc0.png" width="70%" height="70%" />
1. 起動後、ファイルエクスプローラー画面に「クローンしたフォルダ名」が表示され、ウィンドウ左下に「master」と表示されていたら成功です。<br/><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90456/d368c247-fadf-e28c-b33f-9c4395704992.png" width="80%" height="80% />
1.

### ファイルのコミット、Gitサーバーへのプッシュ
「参考にした記事」で示したサイトの内容を確認してください。
[作成したファイルのコミット](https://scratchpad.jp/synology-diskstation-ds220j-13/#toc18)
[Gitサーバーにプッシュ](https://scratchpad.jp/synology-diskstation-ds220j-13/#toc12)


## トラブルシュート
[Git Serverのアクセスを許可するユーザーリストが空になってしまう問題と対応方法](https://everlup.com/synology-nas-install-git/#toc8)

全く同じ現象が発生していましたが、「SYNO.Git.lib」を手動修正することで解消されました。

記事では「SYNO.SDS.GIT.Instance」部分を削除すれば良いとありましたが、現在の私の環境では「“appPriv”: “SYNO.SDS.GIT.Instance“,」という記述自体を削除しています。

<table>
  <tr>
    <td>
    {"SYNO.Git.lib": {"allowUser": ["admin.local", "admin.domain", "admin.ldap"], "authLevel": 1, "lib": "/var/packages/Git/target/webapi/SYNO.Git.so", "maxVersion": 1, "methods": {"1": [{"enum_user": {"grantable": true}}, {"apply": {"grantable": true}}]}, "minVersion": 1, "priority": 0, "priorityAdj": 0}}
    </td>
  </tr>
</table>

## あとがき
非常に役立つ記事を公開してくれている方々に感謝です。
時が過ぎたら記憶もあやふやになってくるので、簡単なことでも備忘録的な記録はやはり必要ですね。