Сообщество «Я и Ubuntu»
06 Февраль 2012, 06:52:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Добро пожаловать!
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: проблема с gitosis  (Прочитано 1867 раз)
andrexus
Новичок
*
Сообщений: 3


Просмотр профиля
« : 01 Август 2010, 17:44:23 »

Решил организовать совместную работу с репозиториями git под управлением gitosis. Однако, следуя шагам, которые описаны в статье "Установка и настройка git и gitosis в Ubuntu" (http://meandubuntu.ru/2009/12/установка-и-настройка-git-и-gitosis-в-ubuntu/), у меня возникли некоторые сложности:

1. Доступ по ssh на удаленный сервер, где работает gitosis происходит по нестандартному порту (8110)
Цитировать
ЗАМЕЧАНИЕ: Если порт сервера отличается от стандартного или вы связываетесь с сервером в локальной сети по IP, а хотите по имени, то можно добавить в папку ~/.ssh/ конфигурационный файл config:
Host server
Hostname myhost.com
User user
Port 8110
IdentityFile ~/.ssh/user_dsa
Соответственно возникает вопрос о том как клонировать репозиторий с учетом этого конфига?
git clone git@server:gitosis-admin.git  не проходит
Единственное, что получилось - git clone ssh://user@myhost.com:8110/home/git/repositories/gitosis-admin.git
Однако такой подход, когда нужно указывать полный путь к репозиторию мне не кажется правильным.

2. После клонирования репозитория на клиентскую машину, внесения изменения и обратного пуша, настало время создать репозиторий с проектом и разместить его на сервере. Для этого, следуя инструкциям в статье, я сделал следующее:
Цитировать
mkdir test
cd test
git init
git remote add origin ssh://git@myshost.com:8110/home/git/repositories/test.git
git add .
git commit -a -m "Создано пустое хранилище"
git push origin master:refs/heads/master
Однако при пуше получаю следующее

fatal: '/home/git/repositories/test.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly


Подозреваю что проблема связано с использованием нестандартного порта ssh.
Записан
Zeboton
Администратор
Старожил
*****
Сообщений: 318


Просмотр профиля
« Ответ #1 : 02 Август 2010, 05:53:00 »

0. Соединитесь по ssh с сервером. Выполните:
Код:
sudo nano /home/git/.gitosis.conf
На следующей строке после [gitosis] добавьте строку loglevel = DEBUG . В результате должно получиться что-то типа:
Код:
[gitosis]
loglevel = DEBUG
[group gitosis-admin]
writable = gitosis-admin
members = serg@server

1. А почему у вас в ~/.ssh/config написаны настройки для пользователя user, а при клонировании хранилища вы пытаетесь подключиться к серверу с именем git: git clone git@server:gitosis-admin.git ? При этом в полной записи подключения вы указываете пользователя user: git clone ssh://user@myhost.com:8110/home/git/repositories/gitosis-admin.git ?

2. Вы разберитесь под каким пользователем подключаетесь к git-хранилищам: git или user? У меня есть подозрение, что под user. В gitosis пользователи — камень преткновения, так как подключаться нужно под физическим пользователем, но при этом отдавать ключ от виртуального gitosis-кого.
Нестандартный порт здесь не при чём, так как сам работаю через нестандартный порт и всё работает как нужно.
« Последнее редактирование: 02 Август 2010, 09:00:13 от Zeboton » Записан
andrexus
Новичок
*
Сообщений: 3


Просмотр профиля
« Ответ #2 : 02 Август 2010, 08:21:23 »

Цитировать
1. А почему у вас в ~/.ssh/config написаны настройки для пользователя user, а при клонировании хранилища вы пытаетесь подключиться к серверу с именем git: git clone git@server:gitosis-admin.git ? При этом в полной записи подключения вы указываете пользователя user: git clone ssh://user@myhost.com:8110/home/git/repositories/gitosis-admin.git ?
Дело в том что и пользователь git и user (он же администратор gitosis) имеют доступ к репозиторию. Это я уже немного опечатался. git clone ssh://git@myhost.com:8110/home/git/repositories/gitosis-admin.git тоже сработает.

добавил
Код:
[gitosis]
loglevel = DEBUG

Склонировал репозиторий  git clone ssh://git@myhost.com:8110/home/git/repositories/gitosis-admin.git и запушил еще раз изменения.
В результате получаю следующий вывод
Код:
git push
...
remote: INFO:gitosis.run_hook:Running hook post-update
remote: DEBUG:gitosis.gitdaemon:Global default is 'deny'
remote: DEBUG:gitosis.gitdaemon:Walking '.', seeing ['gitosis-admin.git']
remote: DEBUG:gitosis.gitdaemon:Deny 'gitosis-admin'
remote: INFO:gitosis.run_hook:Done.
...

однако на сервере все равно не создаются репозитории, указанные в конфиге. Соответсвенно и пуш нового проекта в несуществующий на сервере репозиторий приводит к ошибке:
Код:
fatal: '/home/git/repositories/test.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

P.S. Нашел еще один способ клонирования с учетом конфига ssh
Код:

[quote]Нестандартный порт здесь не при чём, так как сам работаю через нестандартный порт и всё работает как нужно.[/quote]
А как вы клонируете репозиторий? Вы тоже указываете полный путь?

git clone git@server/home/git/repositories/gitosis-admin.git
однако при этом все равно приходится вводить абсолютный путь к репозиторию

Цитировать
Нестандартный порт здесь не при чём, так как сам работаю через нестандартный порт и всё работает как нужно.
А как вы клонируете репозиторий? Вы тоже указываете полный путь?
Записан
Zeboton
Администратор
Старожил
*****
Сообщений: 318


Просмотр профиля
« Ответ #3 : 02 Август 2010, 09:38:38 »

Я использую короткую запись и у меня всё работает:
Код:
serg@desktop:~/tmp$ git clone gituser@server:cms.git
Initialized empty Git repository in /home/serg/tmp/cms/.git/
DEBUG:gitosis.serve.main:Got command "git-upload-pack 'cms.git'"
DEBUG:gitosis.access.haveAccess:Access check for 'serg@server' as 'writable' on 'cms.git'...
DEBUG:gitosis.access.haveAccess:Stripping .git suffix from 'cms.git', new value 'cms'
DEBUG:gitosis.group.getMembership:found 'serg@server' in 'tester'
DEBUG:gitosis.group.getMembership:found 'serg@server' in 'cms'
DEBUG:gitosis.group.getMembership:found 'serg@server' in 'project2'
DEBUG:gitosis.group.getMembership:found 'serg@server' in 'project3'
DEBUG:gitosis.access.haveAccess:Access ok for 'serg@server' as 'writable' on 'cms'
DEBUG:gitosis.access.haveAccess:Using prefix 'repositories' for 'cms'
DEBUG:gitosis.serve.main:Serving git-upload-pack 'repositories/cms.git'
remote: Counting objects: 1313, done.
remote: Compressing objects: 100% (1046/1046), done.
remote: Total 1313 (delta 376), reused 745 (delta 116)
Receiving objects: 100% (1313/1313), 1.29 MiB | 469 KiB/s, done.
Resolving deltas: 100% (376/376), done.

Про пользователей и подключение к gitosis, написанное мной выше, я ошибся, но уже исправился. Правильный алгоритм выглядит так:
* В ОС создаётся пользователь (в листинге у меня это gituser), который является владельцем директории с хранилищами, то есть у вас это git (так как есть папка /home/git/). Далее  этого пользователя я буду называть ПОС.
* ПОС имеет доступ к серверу, а не хранилищам! Поэтому создаётся виртуальный пользователь (ВП), который имеет ключ, но самостоятельно подключиться к серверу не может (у вас это user), но может подключаться к хранилищам. Переносим на компьютер-клиент секретную часть ключа ВП. В ~/.ssh/config пишем:
Код:
Host server
User gituser # Это ПОС
Port 9876
IdentityFile ~/.ssh/serg_dsa # Ключ от ВП
Используя ключ ВП, получаем на клиентский компьютер хранилище gitosis-admin.git. Редактируем конфигурационный файл:
Код:
[gitosis]
loglevel = DEBUG
[group gitosis-admin]
writable = gitosis-admin
members = serg@server

[group cms]
writable = cms
members = serg@server

[group project2]
writable = project2
members = serg@server

[group project3]
writable = project3
members = serg@server

[group tester]
writable = test
members = serg@server
Обратите внимание, что имя у пользователя не просто serg, а serg@server! Узнать как правильно пишется имя пользователя можно в файле /home/ПОС/.ssh/authorized_keys на сервере.
* После этого отправляем gitosis-admin.git на сервер со всеми изменениями и ключами новых пользователей, если если они были добавлены.

Теперь всё должно работать как часы.

У вас я вижу явную путаницу в пользователях и, возможно, у вас неправильно настроена учётная запись ПОС в ~/.ssh/config на компьютере-клиенте.

Цитировать
Склонировал репозиторий  git clone ssh://git@myhost.com:8110/home/git/repositories/gitosis-admin.git и запушил еще раз изменения.
В результате получаю следующий вывод
Вывод свидетельствует о том, что пользователь под которым вы пытаетесь отправить изменения не имеет доступа к хранилищам. А это ещё раз указывает на то что в ~/.ssh/config на компьютере-клиенте указан ключ о ПОС, а нужно указать ключ от ВП!

Если после всего вышеописанного не заработает, то файлы ~/.ssh/config с компьютера-клиента и /home/ПОС/.ssh/authorized_keys , /home/ПОС/.gitosis.conf с сервера приложите к сообщению.
« Последнее редактирование: 02 Август 2010, 09:40:17 от Zeboton » Записан
andrexus
Новичок
*
Сообщений: 3


Просмотр профиля
« Ответ #4 : 02 Август 2010, 11:41:49 »

Спасибо за помощь. Немного запутался с пользователями, но уже разобрался.

P.S. проблема с ssh была в том что я в конфеге ssh помимо параметра Host указывал еще и Hostname, что в общем-то необязательно.
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.15 | SMF © 2006-2008, Simple Machines Valid XHTML 1.0! Valid CSS!