git-daemon-export-okが存在するにもかかわらず、git-daemonは「許可リストにない」と言います。

git-daemon-export-okが存在するにもかかわらず、git-daemonは「許可リストにない」と言います。

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プロトコルを使用できました。

関連情報