- PVSM.RU - https://www.pvsm.ru -

Безболезненная миграция с Gitosis на Gitolite

Gitosis уже не поддерживается, и не за горами стабильный релиз Debian Wheezy, на котором его уже не будет. Поэтому было принято решение о миграции на gitolite. Не смотря на то, что есть соответствующий мануал [1], он не даёт ответа на вопрос — «Как это сделать и ничего не сломать?». Об этом сейчас и пойдёт речь.

Идея состоит в следующем: поднять на этом же пользователе gitolite, проверить его работу и с минимальным downtime заменить gitosis на gitolite.

Поскольку установка ведётся на одном пользователе, то возможны конфликты. Поэтому было выяснено, что при дефолтных конфигурациях возможны конфликты в следующих местах: в папке, в которой располагаются репозитории ~/repositories и в файле ~/.ssh/authorized_keys, который автоматически генерируется этими приложениями. В первом случае есть возможность изменить дефолтный путь, а вот для второго случая автор gitolite не предусмотрел такой возможности. Хоть там и perl, не беда — прорвёмся. Небольшой коммит исправил [2] положение. Установку целесообразно производить из исходников, поскольку это даёт больше гибкости. Алтернативный способ — пересобрать пакет, но тогда теряется преимущество связанное с простым обновлением пакета. Так что первый вариант предпочтительней.

Я не буду расписывать полную установку, так как это уже сделали [3] за меня, а опишу только специфичные моменты. Перед выполнением gitolite setup необходимо изменить в файле src/lib/Gitolite/Rc.pm параметры GL_REPO_BASE и SSH_AUTH_KEY. К примеру заменим authorized_keys на authorized_keys_gitolite, а в GL_REPO_BASE укажем другую папку. Теперь можно смело продолжать установку, поскольку конфликты исключены.

Gitolite и gitosis не могут одновременно использовать один экземпляр ssh, поэтому поднимем второй. Для этого нужно скопировать конфиг по адресу /etc/ssh/sshd_config скажем в /etc/ssh/sshd_config_gitolite и изменить последний.
Следует раскомментировать в нём поле AuthorizedKeysFile и прописать тот файл, который был указан ранее в конфиге gitolite (в нашем случае это authorized_keys_gitolite). А также заменить параметр Port на другой, пусть это будет 22222.

Теперь запускаем ssh в debug режиме sudo /usr/sbin/sshd -ddd -f /etc/ssh/sshd_config_gitolite и проверяем его работу. Для этого склонируем тестовый репозиторий git clone ssh://git@git-server:22222/testing. Далее переходим к той миграции, которая описана в мануале [1] gitolite: добавляем ключи, мигрируем конфиг и тестим права доступа.

Последний шаг заключается в том, чтобы переключиться с gitosis на gitolite. Для этого отрубаем доступ всем к git (чтобы не поступало новых изменений) переместив файл .ssh/authorized_keys в другое место. Далее есть два пути: либо скопировать репозитории из ~/repositories в ~/repo либо сделать симлинки на них. После перемещения репозиториев запускаем gitolite setup, как описано в мануале. Последним действием заменим SSH_AUTH_KEY на дефолтное значение и переименуем файл authorized_keys_gitolite в authorized_keys. Таким образом миграция была успешно завершена.

Что в итоге: способ является достаточно безболезненным, потому что установка gitolite производится независимо и конфигурацию можно протестировать заранее. Плюс этого способа в том, что время downtime'a стремится к нулю.

Удачной миграции!

Автор: f0y


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/16502

Ссылки в тексте:

[1] мануал: http://sitaramc.github.com/gitolite/gsmigr.html

[2] исправил: https://github.com/f0y/gitolite/commit/25f7729dfd68bfa48d0b7188ea076618a7045bff

[3] сделали: http://sitaramc.github.com/gitolite/install.html