українська мова ▾ Topics ▾ Latest version ▾ git-daemon last updated in 2.50.0

НАЗВА

git-daemon  —Доволі простий сервер для репозиторіїв Git

СИНОПСИС

git daemon [--verbose] [--syslog] [--export-all]
	   [--timeout=<n>] [--init-timeout=<n>] [--max-connections=<n>]
	   [--strict-paths] [--base-path=<path>] [--base-path-relaxed]
	   [--user-path | --user-path=<path>]
	   [--interpolated-path=<pathtemplate>]
	   [--reuseaddr] [--detach] [--pid-file=<file>]
	   [--enable=<service>] [--disable=<service>]
	   [--allow-override=<service>] [--forbid-override=<service>]
	   [--access-hook=<path>] [--[no-]informative-errors]
	   [--inetd |
	     [--listen=<host-or-ipaddr>] [--port=<n>]
	     [--user=<user> [--group=<group>]]]
	   [--log-destination=(stderr|syslog|none)]
	   [<directory>…​]

ОПИС

Доволі простий TCP Git-демон, який зазвичай прослуховує порт "DEFAULT_GIT_PORT", також відомий як 9418. Він очікує на зʼєднання, що запитує сервіс, і обслуговуватиме цей сервіс, якщо він увімкнений.

Він перевіряє, чи містить тека магічний файл "git-daemon-export-ok", і відмовляється експортувати будь-яку теку Git, яку не було явно позначено для експорту у такий спосіб (якщо не вказано параметр --export-all). Якщо ви передасте шляхи до тек як аргументи git daemon, пропозиції обмежуватимуться репозиторіями в цих теках.

Зазвичай увімкнено лише службу upload-pack, яка обслуговує клієнтів git fetch-pack та git ls-remote, що викликаються з git fetch, git pull та git clone.

Це ідеально підходить для оновлень у режимі «тільки для читання», тобто для завантаження з репозиторіїв Git.

Також існує upload-archive для обслуговування git archive.

ОПЦІЇ

--strict-paths

Шляхи повинні збігатися точно (тобто не допускається «/foo/repo», якщо справжній шлях — «/foo/repo.git» або «/foo/repo/.git»), а також не використовуються шляхи, повʼязані з користувачем. git daemon відмовиться запускатися, якщо ця опція увімкнена, а аргументи тек не вказано.

--base-path=<шлях>

Перепризначає всі запити шляхів відносно заданого шляху. Це свого роду «корінь Git» — якщо ви запустити git daemon з --base-path=/srv/git на example.com, то якщо ви пізніше спробуєте витягнути дані з git://example.com/hello.git, git daemon інтерпретуватиме шлях як /srv/git/hello.git.

--base-path-relaxed

Якщо --base-path увімкнено і пошук у репозиторії не вдається, з цією опцією git daemon спробує виконати пошук без префікса базового шляху. Це корисно для переходу до використання --base-path, водночас дозволяючи старі шляхи.

--interpolated-path=<шаблон-шляху>

Для підтримки віртуального хостингу можна використовувати інтерпольований шаблон шляху для динамічної побудови альтернативних шляхів. Шаблон підтримує %H для імені цільового хосту, наданого клієнтом, але перетвореного в нижній регістр, %CH для канонічного імені хосту, %IP — для IP-адреси сервера, %P — для номера порту та %D — для абсолютного шляху до названого репозиторію. Після інтерполяції шлях перевіряється на відповідність списку тек.

--export-all

Дозволити витягування з усіх тек, схожих на репозиторії Git (мають субтеки objects та refs), навіть якщо в них немає файлу git-daemon-export-ok.

--inetd

Запускати сервер як службу inetd. Мається на увазі --syslog (можна перевизначити за допомогою --log-destination=). Несумісно з опціями --detach, --port, --listen, --user та --group.

--listen=<host-or-ipaddr>

Прослуховувати певну IP-адресу або імʼя хосту. IP-адреси можуть бути або IPv4-адресою, або IPv6-адресою, якщо підтримуються. Якщо IPv6 не підтримується, то --listen=<імʼя-хосту> також не підтримується, і --listen має бути вказано IPv4-адресу. Можна вказати більше одного разу. Несумісно з опцією --inetd.

--port=<n>

Прослуховувати на альтернативному порту. Несумісно з опцією --inetd.

--init-timeout=<n>

Час очікування (у секундах) між моментом встановлення зʼєднання та отриманням запиту від клієнта (зазвичай це досить невелике значення, оскільки процес має відбуватися практично миттєво).

--timeout=<n>

Час очікування (у секундах) для окремих субзапитів клієнта. Цей показник включає час, необхідний серверу для обробки субзапиту, та час очікування наступного запиту від клієнта.

--max-connections=<n>

Максимальна кількість одночасних клієнтів, зазвичай — 32. Встановіть значення нуль щоб прибрати обмеження.

--syslog

Скорочення для --log-destination=syslog.

--log-destination=<destination>

Надсилати повідомлення журналу за вказаним призначенням. Зверніть увагу, що цей параметр не передбачає використання опції --verbose, тому зазвичай реєструватимуться лише помилки. <Призначення> має бути одним з:

stderr

Виводити дані у стандартний потік помилок. Зверніть увагу, що якщо вказано параметр --detach, процес відключається від реального стандартного потоку помилок, що фактично робить цей потік еквівалентним параметру none.

syslog

Записувати в syslog, використовуючи ідентифікатор git-daemon.

none

Вимкнути ведення журналу.

Стандартно — syslog, якщо вказано --inetd або --detach, інакше — stderr.

--user-path
--user-path=<шлях>

Дозволити використання нотації ~user у запитах. Якщо параметр не вказано, запит git://host/~alice/foo розглядається як запит на доступ до репозиторію «foo» у домашній теці користувача alice. Якщо вказано --user-path=<шлях>, той самий запит розглядається як запит на доступ до репозиторію <шлях>/foo у домашній теці користувача alice.

--verbose

Записувати в журнал відомості про вхідні зʼєднання та запитувані файли.

--reuseaddr

Під час привʼязування сокета для прийому використовувати SO_REUSEADDR. Це дозволяє серверу перезапускатися, не чекаючи на закінчення терміну дії старих зʼєднань.

--detach

Відʼєднати від оболонки. Передбачає використання параметра --syslog.

--pid-file=<файл>

Зберегти ідентифікатор процесу у <файл>. Ігнорується, коли демон запускається з параметром --inetd.

--user=<користувач>
--group=<група>

Змінити UID та GID демона перед входом у цикл обслуговування. Якщо вказано лише --user без --group, використовується ідентифікатор основної групи користувача. Значення цього параметра передаються до функцій getpwnam(3) та getgrnam(3), а числові ідентифікатори не підтримуються.

Використання цих опцій з --inetd є помилкою; за потреби скористайтеся можливостями демона inet, щоб досягти того ж результату, перш ніж запускати git daemon.

Як і багато програм, які змінюють ідентифікатор користувача, демон не скидає змінні середовища, такі як HOME, під час запуску програм git, наприклад, upload-pack та receive-pack. Використовуючи цю опцію, ви також можете встановити та експортувати HOME так, щоб він вказував на домашню теку <користувач> перед запуском демона, та переконатися, що будь-які файли конфігурації Git у цій теці доступні для читання <користувачу>.

--enable=<служба>
--disable=<служба>

Вмикання/вимикання служби для всього сайту в стандартних налаштуваннях. Зверніть увагу, що службу, вимкнену для всього сайту, все одно можна увімкнути для окремого репозиторію, якщо вона позначена як така, що підлягає перезапису, і репозиторій увімкне цю службу за допомогою параметра конфігурації.

--allow-override=<служба>
--forbid-override=<служба>

Дозволити/заборонити заміну стандартних налаштувань для всієї системи налаштуваннями для окремих репозиторіїв. Зазвичай налаштування всіх служб можна перевизначити.

--informative-errors
--no-informative-errors

Якщо увімкнено інформативні помилки, git-daemon надсилатиме клієнту більш докладні повідомлення про помилки, розрізняючи такі ситуації, як «такого репозиторію не існує» та «репозиторій не експортовано». Це зручніше для клієнтів, але може призвести до витоку інформації про наявність неекспортованих репозиторіїв. Якщо інформативні помилки не увімкнено, у всіх повідомленнях про помилки клієнту повідомляється «доступ заборонено». Стандартним значенням є --no-informative-errors.

--access-hook=<шлях>

Кожного разу, коли клієнт підключається, спочатку запускається зовнішня команда, вказана в <шляху>, з іменем служби (наприклад, «upload-pack»), шляхом до репозиторію, іменем хоста (%H), канонічним іменем хоста (%CH), IP-адресою (%IP) та портом TCP (%P) як аргументами командного рядка. Зовнішня команда може вирішити відмовити у наданні послуг, завершивши роботу з ненульовим статусом (або дозволити їх, завершивши роботу з нульовим статусом). Вона також може перевірити змінні середовища $REMOTE_ADDR та $REMOTE_PORT, щоб дізнатися про користувача, який надсилає запит, під час прийняття цього рішення.

Зовнішня команда може за бажанням записати один рядок у стандартний вивід, який буде надіслано користувачу як повідомлення про помилку у разі відхилення послуги.

<тека>

Решта аргументів надають список тек. Якщо вказано будь-які теки, то процес git-daemon обслуговуватиме запитувану теку, лише якщо вона міститься в одній з цих тек. Якщо вказано --strict-paths, то запитувана тека має точно відповідати одній з цих тек.

СЛУЖБИ

Ці служби можна глобально вмикати/вимикати за допомогою параметрів командного рядка цієї команди. Якщо потрібен детальніший контроль (наприклад, дозволити запуск git archive лише в кількох вибраних репозиторіях, які обслуговує демон), для їх увімкнення або вимкнення можна використовувати файл конфігурації для кожного репозиторію.

upload-pack

Служба обслуговує клієнтів git fetch-pack та git ls-remote. Зазвичай є увімкненою, але репозиторій може вимкнути її, встановивши елемент конфігурації daemon.uploadpack у значення false.

upload-archive

Служба обслуговує git archive --remote. Зазвичай є вимкненою, але репозиторій може ввімкнути її, встановивши елемент конфігурації daemon.uploadarch у значення true.

receive-pack

Служба обслуговує клієнтів git send-pack, дозволяючи анонімне надсилання змін. Зазвичай є вимкненою, оскільки в протоколі немає автентифікації (іншими словами, будь-хто може надсилати будь-що до репозиторію, включаючи запит на видалення посилань). Вона призначена виключно для закритої локальної мережі, де всі знають одне одного. Цю службу можна ввімкнути, встановивши для елемента конфігурації daemon.receivepack значення true.

ПРИКЛАДИ

Ми припускаємо наступне у /etc/services
$ grep 9418 /etc/services
git		9418/tcp		# Система контролю версій Git
git daemon як сервер inetd

Щоб налаштувати git daemon як службу inetd, яка обробляє будь-який репозиторій у /pub/foo або /pub/bar, помістіть запис, подібний до наступного, у /etc/inetd, розмістивши його в одному рядку:

	git stream tcp nowait nobody  /usr/bin/git
		git daemon --inetd --verbose --export-all
		/pub/foo /pub/bar
git daemon як inetd-сервер для віртуальних хостів

Щоб налаштувати git daemon як службу inetd, яка обробляє репозиторії для різних віртуальних хостів, www.example.com та www.example.org, помістіть запис, подібний до наступного, у /etc/inetd, розмістивши його в одному рядку:

	git stream tcp nowait nobody /usr/bin/git
		git daemon --inetd --verbose --export-all
		--interpolated-path=/pub/%H%D
		/pub/www.example.org/software
		/pub/www.example.com/software
		/software

У цьому прикладі коренева тека /pub міститиме субтеку для кожного підтримуваного імені віртуального хосту. Крім того, обидва хости оголошують репозиторії просто як git://www.example.com/software/repo.git. Для клієнтів, які використовують версії до 1.4.0, також можна створити символічне посилання з теки /software на відповідний репозиторій.

git daemon як звичайний демон для віртуальних хостів

Щоб налаштувати git daemon як звичайну службу, не повʼязану з inetd, яка обробляє репозиторії для кількох віртуальних хостів на основі їхніх IP-адрес, запустіть демон ось так:

	git daemon --verbose --export-all
		--interpolated-path=/pub/%IP/%D
		/pub/192.168.1.200/software
		/pub/10.10.220.23/software

У цьому прикладі коренева тека /pub міститиме субтеку для кожної підтримуваної IP-адреси віртуального хосту. Однак доступ до репозиторіїв все ще можна отримати за назвою хосту, якщо вони відповідають цим IP-адресам.

вибіркове вмикання/вимикання служб для кожного репозиторію

Щоб увімкнути git archive --remote та вимкнути git fetch для репозиторію, додайте наступне у файл конфігурації репозиторію (тобто файл config поруч із HEAD, refs та objects).

	[daemon]
		uploadpack = false
		uploadarch = true

НАВКОЛИШНЄ СЕРЕДОВИЩЕ

git daemon встановить REMOTE_ADDR на IP-адресу клієнта, який підключився до нього, якщо IP-адреса доступна. REMOTE_ADDR буде доступний в середовищі гачків, що викликаються під час виконання служб.

GIT

Частина набору git[1]