git-daemon: «невозможно выделить какие-либо прослушивающие сокеты на хост-порт (нулевой) порт 9418» - PullRequest
4 голосов
/ 19 июня 2011

В Debian squeeze я получаю ошибку системного журнала:

unable to allocate any listen sockets on host (null) port 9418

И я тоже не могу удаленно клонировать.

Файл /etc/service/git-daemon/run:

"$(git --exec-path)"/git-daemon --verbose --base-path=/var/cache/git --detach --syslog --reuseaddr --export-all

netstat -l | grep git вывод:

tcp        0      0 *:git                   *:*                     LISTEN     
tcp6       0      0 [::]:git                [::]:*                  LISTEN

В настоящее время я перезапускаю службы с помощью командной строки sv start/stop и прекращаю процесс обслуживания, чтобы гарантировать его перезагрузку.

Может быть, я упускаю что-то действительно глупое. Любая помощь очень ценится.

Ответы [ 3 ]

1 голос
/ 14 марта 2012

Я думаю, что когда вы используете --listen параметр git-daemon, он не будет жаловаться на отсутствие host ...

1 голос
/ 21 июня 2016

Такая проблема является хорошим поводом напомнить себе, что git daemon поставляется с параметрами:

--init-timeout=<n>

Тайм-аут (в секундах) между моментом установления соединения и получением клиентского запроса (обычно это довольно низкое значение, поскольку оно должно быть в основном немедленным).

--timeout=<n>

Тайм-аут (в секундах) для определенных клиентских подзапросов.
Сюда входит время, необходимое серверу для обработки подзапроса, и время, потраченное на ожидание запроса следующего клиента.

Это гарантирует, что сокет доступен для размещения, а не для хранения, для клиента, которого там может не быть.

git 2.9.x + (3 квартал 2016 г.) обнаружит эти случаи раньше:

См. коммит a43b68a (25 мая 2016 г.) Эрик Вонг (ele828) .
(Объединено с Junio ​​C Hamano - gitster - в коммит a43b68a , 25 мая 2016 г.)

daemon: включить SO_KEEPALIVE для всех розеток

Когда "git daemon" запускается без указания --[init-]timeout, a соединение с клиентом, которое молча отключается, может зависать долго тратил ресурсы .
Уровень сокета KEEPALIVE был включен, чтобы позволить ОС замечать такие неудачные соединения.

Хотя опции --init-timeout и --timeout существуют, и я никогда не запустить git daemon без них, некоторые пользователи могут забыть установить их и сталкиваются с зависшими процессами демона при сбое соединения.

Включить тайм-ауты на уровне сокета , чтобы ядро ​​могло отправлять сообщения активности Зондирование по мере необходимости для обнаружения неисправных соединений.

0 голосов
/ 14 марта 2012

Сравните с настройкой git daemon, это может быть проще:

  • Для публичного репозитория поместите его в github
  • Для частного хранилища настроить sshd / ssh может быть легко.

Проблема также однажды произошла на моем сервере.

Есть два способа использования клона из git: // ... не может работать.

1, git over ssh, добавьте открытый ключ пользователя в ~ / .ssh / authorized_keys, тогда для доступа к хранилищу имя пользователя / пароль не требуется:

git clone user@host:/path/to/git/repository/myproject.git

2, поместите репозиторий в доступную директорию веб-сервера, такую ​​как

/var/www/git

Убедитесь, что / var / www / доступен, например, для него задан корень doc Apache httpd. Это позволило пользователю получить его как минимум.

...