Gitサーバーを構築しようとしています。 SSHサーバーを正常に設定し、匿名のgitサービスを設定しようとしても機能しません。
Gitブックからサンプルのsystemdサービスファイルをコピーしました。https://git-scm.com/book/en/v2/Git-on-the-Server-Git-Daemon、私が所有しているファイルのパスのみを変更します。
$ cat /etc/systemd/system/git-daemon.service
[Unit]
Description=Start Git Daemon
[Service]
ExecStart=/usr/bin/git daemon --reuseaddr --base-path=/srv /srv/src/
Restart=always
RestartSec=500ms
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=git-daemon
User=git
Group=git
[Install]
WantedBy=multi-user.target
次にgitユーザーとグループを作成します。
$ sudo useradd -U --system git
$ sudo usermod -d /nonexistent git
$ sudo usermod -s /usr/sbin/nologin git
$ sudo usermod -c git git
$ getent passwd git
git:x:998:998:git:/nonexistent:/usr/sbin/nologin
$ groups git
git : git
その後、サービスを有効にして起動します(サービスが有効になって実行中であることを以下に示します)。
$ sudo systemctl enable git-daemon.service
Created symlink /etc/systemd/system/multi-user.target.wants/git-daemon.service ��� /etc/systemd/system/git-daemon.service.
$ sudo systemctl start git-daemon.service
次に、リポジトリをエクスポートするファイルを作成します。
$ touch /srv/src/alx/libalx.git/git-daemon-export-ok
$ ls -l /srv/src/alx/libalx.git/git-daemon-export-ok
-rw-r--r-- 1 alx alx 0 Jan 7 18:49 /srv/src/alx/libalx.git/git-daemon-export-ok
次に、次から複製してみてください。
$ git clone git://localhost/src/alx/libalx.git
Cloning into 'libalx'...
fatal: remote error: access denied or repository not exported: /src/alx/libalx.git
このサービスはホワイトリストに含まれていないと文句を言います(しかし含まれていませんか?)。
$ sudo systemctl status git-daemon.service
��� git-daemon.service - Start Git Daemon
Loaded: loaded (/etc/systemd/system/git-daemon.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-01-07 18:43:52 CET; 24min ago
Main PID: 43138 (git)
Tasks: 2 (limit: 3366)
Memory: 528.0K
CPU: 26ms
CGroup: /system.slice/git-daemon.service
������43138 /usr/bin/git daemon --reuseaddr --base-path=/srv /srv/src/
������43139 /usr/lib/git-core/git-daemon --reuseaddr --base-path=/srv /srv/src/
Jan 07 18:43:52 rpi systemd[1]: Started Start Git Daemon.
Jan 07 18:43:59 rpi git-daemon[43144]: [43144] '/srv/src/alx/libalx.git': not in whitelist
Jan 07 18:50:02 rpi git-daemon[43175]: [43175] '/srv/src/alx/libalx.git': not in whitelist
Jan 07 18:50:03 rpi git-daemon[43176]: [43176] '/srv/src/alx/libalx.git': not in whitelist
Jan 07 18:52:54 rpi git-daemon[43186]: [43186] '/srv/src/alx/libalx.git': not in whitelist
レプリケーションを通過できないのはなぜですかgit://
?
完全に間違ったパスをレプリケーションに渡すと、クライアント側では同じ出力が表示されますが、サーバー側ではログが異なります。
$ git clone git://localhost/src/ald/sdf/sdf.git
Cloning into 'sdf'...
fatal: remote error: access denied or repository not exported: /src/ald/sdf/sdf.git
$ sudo systemctl status git-daemon.service
...
Jan 07 19:13:37 rpi git-daemon[43261]: [43261] '/srv/src/ald/sdf/sdf.git' does not appear to be a git repository
答え1
私は数分前にこの問題に直面し、問題を解決する過程であなたの質問を見つけました。
systemdファイルのgit daemonコマンドの最後にあるディレクトリパスから末尾のスラッシュを削除します。これは、/var/log/syslog に示されているエラーが示すように、ホワイトリストに問題を引き起こしているようです。
ExecStart=/usr/bin/git daemon --reuseaddr --base-path=/srv /srv/src
同様の変更を行った後、期待どおりにgitプロトコルを使用できました。