19. Gitolite + git настройка¶
Gitolite — удобное средство, позволяющее управлять Git репозитариями, используя один пользовательский аккаунт, управляя доступом пользователей к репозитариям на основе ssh-ключей, в отличии от позволяет более гибко настраивать доступ к репозиториям.
Gitolite управляет несколькими репозитариями под одной учетной записью пользователя, с использованием SSH ключей для идентификации пользователей. Конечным пользователям не нужны учетные записи на сервере, они будут входить через один общий аккаунт, который не позволит им запускать произвольные команды.
Установка gitolite¶
Если пакет замаскирован, размаскируйте его.
emerge dev-vcs/gitolite-gentoo
После установки будет создан пользователь git (пароль отсутствует, домашняя директория /var/lib/gitolite/)
Настройка gitolite¶
Создаем ключ для root¶
su ssh-keygen -t rsa
Будут созданы два файла:
/root/.ssh/id_rsa.pub /root/.ssh/id_rsa
Публичный и закрытый rsa ключи
Создаем репозиторий с настройками¶
Копируем открытый ключ
cp /root/.ssh/id_rsa.pub /tmp/id_rsa.pub
Инициируем gitolite
su git cd gl-setup /tmp/id_rsa.pub
Удаляем из /tmp открытый ключ
rm /tmp/id_rsa.pub
Если планируется использовать git-web, для того чтобы, репозиторий с настройками был не виден в web изменим права на директорию
chmod 700 /var/lib/gitolite/repositories/gitolite-admin.git
Настраиваем репозиторий для пользователя¶
Переходим в /tmp
cd /tmp
Клонируем директорию с настройками
git clone git@имя_сервера:gitolite-admin.git
Переходим в директорию с настройками
cd gitolite-admin
Копируем пользовательский открытый ключ в директорию /tmp/gitolite-admin/keydir
scp root@имя_клиентского_компьютера:/home/имя_пользователя/.ssh/id_rsa.pub ./keydir/имя_пользователя@имя_клиентского_компьютера.pub
Настраиваем новый репозиторий для пользователя имя_пользователя
vi conf/gitolite.conf
repo gitolite-admin
RW+ = id_rsa
repo project1
RW+ = testuser@remotehost
Права могут быть указаны следующим образом:
R- только чтениеRW- чтение добавление коммитов, запрещен rewind (push --force)RW+- полный доступRWC- возможность создавать веткуRWD- возможность удалять ветку-запретить запись
master@ - веткиref/tags- теги (версии)NAME/имя_файла- имена файлов/каталогов
Для создания группы используется следующий синтаксис
@groupname = user1 user2 user3
Также этот синтаксис используется для группировки веток
@importantbranches = master$ developer$ test$
repo testing
RW @importantbranches = @groupname
- @importantbranches = @groupname
RW+ = @groupname
Делаем commit для настроек
git commit -am "Granted full access for testuser@remotehost to project1"
Записываем репозиторий с настройками
git push origin master
Создаем новый репозиторий¶
В отличии от gitosis в gitolite можно предварительно не создавать репозиторий через --bare init, достаточно добавить его в конфигурационный файл.
Этот репозиторий будет доступен пользователю на его компьютере через ssh
git clone ssh://git@имя_сервера/project1.git
без ввода пароля (по открытому ключу)
Проверка sshd¶
Демон sshd должен быть запущен.
Должен быть разрешен доступ по ssh пользователю git файл /etc/ssh/sshd_config
Настройка git-daemon¶
vi /etc/conf.d/git-daemon GITDAEMON_OPTS="--syslog --port=9418 --base-path=/var/lib/gitolite/repositories/ --export-all" GIT_USER="apache"
Если будут проблемы при перезапуске меняем номер порта --port=9418 на другой номер перезапускаем демона git, меняем обратно перезапускаем демона git.
/etc/init.d/git-daemon restart
Проблема перезапуска git-daemon¶
При перезапуске демона может возникнуть проблема повторного открытия порта, в /var/log/message она записывает как
git-daemon[pid]: unable to allocate any listen sockets on host (null) port 9418
Чтобы ее избежать необходимо добавить в GITDAEMON_OPTS параметр --reuseaddr
Создание пользовательского ключа¶
В сеансе пользователя, на пользовательском компьютере.
ssh-keygen -t rsa
В пользоваетельской директории .ssh будут созданы два ключа
id_rsa id_rsa.pub
закрытый и публичный (pub)
Если публичный ключ записан в директорию keys репозитория настроек gitolite на сервере, а также в файле conf/gitolite.conf настроены права к репозиториям то пользователь получит доступ к репозиториям на сервере.
Примеры прав доступа к репозиториям¶
Разрешить группе developers производить любые действия с репозиторием кроме модификации ветки master
repo myrep
- master$ = @developers
RW+ = @developers
Запретить rewind для ветки master, (в целом это правило означает что группа @developer может добавлять коммиты и только в ветку master).
repo myrep
RW master$ = @developers
Разрешить группе developers выполнять любые действия с репозиторием, кроме создание тегов, теги может создавать только maindeveloper.
repo myrep
RW+ refs/tags = maindeveloper
- refs/tags = @developers
RW = developers