Различия
Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.
wiki:server_git [2013/04/06 13:47] c61 |
wiki:server_git [2013/12/10 21:43] (текущий) c61 |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== Сервер git ====== | ====== Сервер git ====== | ||
- | //...о том, как сделать из Keenetic Giga git-сервер (dropbear+gitosis+gitlist+(lighttpd+php)), как настроить клиент под Windows и прочее...// | + | //или рассказ о том, как сделать из Keenetic Giga git-сервер (dropbear+gitosis+gitlist+(lighttpd+php)), как настроить клиент под Windows, и прочее, прочее...// |
---- | ---- | ||
Строка 23: | Строка 23: | ||
**__Работаем по SSH с сервером__** | **__Работаем по SSH с сервером__** | ||
- | 1) Если не поставили web-сервер на lighttpd и php - ставим (ищем инструкции на этом интернет-ресурсе). Затем ставим git, python, для php нужен php5-mod-ctype | + | 1) Если не поставили web-сервер на lighttpd и php - ставим (ищем инструкции на этом интернет-ресурсе). Затем ставим git, python, для php нужен php5-mod-ctype и php5-mod-simplexml |
<code bash>opkg install git | <code bash>opkg install git | ||
opkg install python | opkg install python | ||
- | opkg install php5-mod-ctype</code> | + | opkg install php5-mod-ctype |
+ | opkg install php5-mod-simplexml</code> | ||
Зачем нам еще и web-сервер с php ? Для того, чтобы добавить web-интерфейс к git, облегчив доступ к репозиторию на чтение. | Зачем нам еще и web-сервер с php ? Для того, чтобы добавить web-интерфейс к git, облегчив доступ к репозиторию на чтение. | ||
Строка 106: | Строка 107: | ||
6) С сервером надо соединиться первый раз - чтобы PLink его "запомнил" (такая вот "фича"). | 6) С сервером надо соединиться первый раз - чтобы PLink его "запомнил" (такая вот "фича"). | ||
- | <code bash>plink -P port root</code> | + | <code>plink -P port root@myserver.ru</code> |
Соглашаемся сохранить ключ в кэше (если спросит), вводим пароль root и после того, как видим приглашение ash, выполняем "exit". | Соглашаемся сохранить ключ в кэше (если спросит), вводим пароль root и после того, как видим приглашение ash, выполняем "exit". | ||
+ | |||
+ | То же самое надо проделывать на других компьютерах, которые ещё ничего не знают о Вашем сервере, например, для gituser1: | ||
+ | <code>plink -P port gituser1@myserver.ru</code> | ||
+ | Также соглашаемся сохранить ключ в кэше (если спросит), на запрос пароля прерываем выполнение по Ctrl/C. Эта операция наверняка понадобится, если Вы передали кому-то ключ (например, gituser1.ppk). | ||
---- | ---- | ||
Строка 120: | Строка 125: | ||
2) Вносим исправления в /media/DISK_A1/system/root/repositories/gitosis-admin.git/hooks/post-update | 2) Вносим исправления в /media/DISK_A1/system/root/repositories/gitosis-admin.git/hooks/post-update | ||
Из-за ограничений на environment в dropbear добавляем пути в PATH после команды "set -e": | Из-за ограничений на environment в dropbear добавляем пути в PATH после команды "set -e": | ||
- | <code bash>PATH=$PATH:/media/DISK_A1/system/bin:/media/DISK_A1/system/usr/bin:/media/DISK_A1/system/usr/libexec/git-core</code> | + | <code bash>PATH=$PATH:/media/DISK_A1/system/bin:/media/DISK_A1/system/usr/bin:/media/DISK_A1/system/usr/lib/git-core</code> |
Также надо задать правильные права (из-за особенностей python; для NTFS не обязательно) | Также надо задать правильные права (из-за особенностей python; для NTFS не обязательно) | ||
<code bash>chmod 755 /media/DISK_A1/system/root/repositories/gitosis-admin.git/hooks/post-update</code> | <code bash>chmod 755 /media/DISK_A1/system/root/repositories/gitosis-admin.git/hooks/post-update</code> | ||
Строка 136: | Строка 141: | ||
"^/gitlist(/[^\?]*)(\?.*)?" => "/gitlist/index.php$1$2" | "^/gitlist(/[^\?]*)(\?.*)?" => "/gitlist/index.php$1$2" | ||
)</code> | )</code> | ||
+ | |||
+ | Также укажем в php.ini свою таймзону | ||
+ | <code>[Date] | ||
+ | date.timezone = Europe/Kiev</code> | ||
+ | |||
+ | Узнать как пишется Ваша таймзона можно здесь http://php.net/manual/en/timezones.php | ||
5) Создадим хранилища c именами "project1", "project2". Перейдем в /root/repositories. Создадим каталог project1.git, перейдем в него и выполним команду создания пустого репозитория | 5) Создадим хранилища c именами "project1", "project2". Перейдем в /root/repositories. Создадим каталог project1.git, перейдем в него и выполним команду создания пустого репозитория | ||
Строка 162: | Строка 173: | ||
MOUNT="/media/DISK_A1/system" | MOUNT="/media/DISK_A1/system" | ||
- | PATH=$PATH:$MOUNT/bin:$MOUNT/sbin:$MOUNT/usr/bin:$MOUNT/usr/sbin:$MOUNT/usr/libexec/git-core | + | PATH=$PATH:$MOUNT/bin:$MOUNT/sbin:$MOUNT/usr/bin:$MOUNT/usr/sbin:$MOUNT/usr/lib/git-core |
gitosis-serve $1 $2 $3 $4 $5</code> | gitosis-serve $1 $2 $3 $4 $5</code> | ||
Строка 201: | Строка 212: | ||
<code bash>rm $MOUNT/etc/dropbear | <code bash>rm $MOUNT/etc/dropbear | ||
rm -r /tmp/dropbear</code> | rm -r /tmp/dropbear</code> | ||
+ | |||
+ | а также увеличим размер буфера Dropbear добавим ключ -W 819200 | ||
+ | |||
+ | <code bash>$DROPBEAR -d $DSS -r $RSA -W 819200</code> | ||
+ | |||
после чего сохраним файл и **перезапустим роутер**. Ждем, пока произойдет загрузка. | после чего сохраним файл и **перезапустим роутер**. Ждем, пока произойдет загрузка. | ||
Строка 365: | Строка 381: | ||
Если все работает - см. ниже: | Если все работает - см. ниже: | ||
+ | |||
+ | ---- | ||
+ | |||
+ | **__Известные проблемы и их решение__** | ||
+ | |||
+ | 1) Попытка создания проектов с большими файлами или с большим количеством файлов вызывает сетевую ошибку | ||
+ | <code>FATAL ERROR: Network error: Software caused connection abort | ||
+ | fatal: The remote hang up unexpectedly | ||
+ | fatal: recursion detected in die handler</code> | ||
+ | При этом в журнале есть записи такого вида | ||
+ | <code>6 апр 13:01:44 dropbear[24035] Exit (root): Received data after eof</code> | ||
+ | |||
+ | Причина в малом буфере Dropbear. Увеличим размер буфера добавим ключ -W 819200 в скрипте запуска S10dropbear | ||
+ | |||
+ | <code bash>$DROPBEAR -d $DSS -r $RSA -W 819200</code> | ||
+ | |||
+ | 2) Если Вы используете gitosis, не устанавливайте python-openssl из-за проявления Segmentation Fault в .../lib/python2.7/lib-dynload/_ssl.so. | ||
---- | ---- | ||
Строка 370: | Строка 403: | ||
**__Выводы__** | **__Выводы__** | ||
- | 1) На кинетике создан полноценный многопользовательский git-сервер с возможностью удаленного администрирования (gitosis), а также web-интерфейсом для чтения проектов (gitlist). | + | 1) На кинетике создан (почти) полноценный многопользовательский git-сервер с возможностью удаленного администрирования (gitosis), а также web-интерфейсом для чтения проектов (gitlist). |
2) Под логином root возможность работы с git-сервером отключена, но git (и gitosis) на сервере работают из-под root. | 2) Под логином root возможность работы с git-сервером отключена, но git (и gitosis) на сервере работают из-под root. |