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 프로토콜을 사용할 수 있었습니다.