Pull to refresh

Разворачиваем сервер git на Mac OS X Leopard

Lumber room
Данный топик это некоторая компиляция из руководства по установке gitosis на Ubuntu Server и Leopard, плюс акценты от меня на некоторые места в которых могут возникнуть проблемы.

Изначально предположим, что вы уже знаете что такое git, и определились зачем вам надо настраивать удаленный репозиторий для этой распределенной системы управления версиями.

Установка git.


Если git у вас уже установлен — можете пропустить эту часть.
Чтобы установить git вы можете воспользоваться инсталлятором или поставить git из портов (MacPorts). Мне кажется более удобным второй путь, потому как порты в будущем можно будет легко обновить до свежей версии.

Git с помощью установщика.

Скачиваем dmg файл c google code, открываем, запускаем pkg файл установщика и все: git уже лежит у вас в /usr/local/.

Git из портов.

Предположу, что вы уже устновили порты. Если нет — устанавливайте, там нет ничего сложного, и продолжим.
Запускаем установку git из исходников:
sudo port install git-core
Если все прошло без ошибок — только что скомпилированный git лежит у вас в /opt/local/bin/. Я не случайно упоминаю пути, они могут вам понадобится если что-то пойдет не так.

Установка gitosis.


gitosis — это очень удобный git сервер. По большому счету это набор скриптов, которые выполняются при открытии ssh-сессии. После установки вы получите удобное, быстрое, безопасное хранилище для ваших файлов. Gitosis, как я уже писал выше, работает в связке с ssh. Таким образом, при желании что-то настроить «под себя» у вас есть полная свобода действий: посмотреть на текущие конфиги, поправить что-либо, поправить еще раз, исправить, наконец, все ошибки и довольно улыбнуться.
Скачиваем исходники gitosis и ставим его:
mkdir src
git clone git://eagain.net/gitosis.git
cd gitosis
sudo python setup.py install

Если в процессе установки возникли ошибки с setuptools пробуем их обойти:
cd ..
easy_install gitosis

Скорее всего на этом приключения с установкой gitosis должны были закончится. Попробуем его настроить.

Настройка gitosis.


Для обеспечения должного уровня безопасности для gitosis заводится отдельный пользователь и отдельная группа.

Создание группы и пользователя.

1. Найдем свободные UID и GID для нового пользователя
sudo dscl . list /Users uid
sudo dscl . list groups gid

(допустим 401 GID и UID свободны)
2. Создадим группу git
sudo dscl . create groups/git
sudo dscl . create groups/git gid 401

3. Создадим пользователя git
sudo dscl . create users/git
sudo dscl . create users/git uid 401
sudo dscl . create users/git NFSHomeDirectory /Users/git
sudo dscl . create users/git gid 401
sudo dscl . create users/git UserShell /bin/bash
sudo dscl . create users/git Password '*'

4. Создадим домашнюю директорию (ту что указали в строчке 3, пунктом раньше)
sudo mkdir /Users/git
sudo chown git /Users/git
sudo chgrp git /Users/git


Инициализируем gitosis и создаем репозиторий с файлами конфигурации.

Для инициализации конфигурационных файлов нам понадобится публичная часть rsa ключа пользователя который будет первым администратором. Дальше будет понятней. :)
1. если вы еще не создавали ключа для ssh — создаем.
ssh-keygen -t rsa
копируем ключ в папку на сервере доступную всем пользователям на чтение:
scp ~/.ssh/id_rsa.pub your.server.com:/tmp/my_key.pub
или, если настраиваем локальный сервер
cp ~/.ssh/id_rsa.pub /tmp/my_key.pub
2. От имени нашего новоиспеченного пользователя запускаем инициализацию gitosis
sudo -H -u git gitosis-init < /tmp/my_key.pub
Вы увидите что-то вроде этого:
Initialized empty Git repository in ./
Reinitialized existing Git repository in ./

от себя замечу, что у меня были пути абсолютные, а не относительные.
3. Настроим переменные окружения для пользователя git. Можно указать свои пути которые вам выводит echo $PATH.
sudo su git (enter your password)
echo "PATH=PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin" > ~/.ssh/enviroment
exit


Последние штрихи.

Пробуем клонировать репозиторий с настройками:
git clone git@your.server.com:gitosis-admin.git
и если все прошло удачно, вы должны увидеть что-то вроде
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 5 (delta 0)
Receiving objects: 100% (5/5), done.

Теперь можно приступать к работе с нашим удаленным репозиторием.

Работа с gitosis.


Первым делом нам надо создать новый репозиторий и дать права на запись одному или нескольким пользователям. Добавим в gitosis.conf следующие строки:
[group habraTeam]
members = admin ufo
writable = habraProject

Таким образом, мы создали группу habraTeam из пользователей admin и ufo, и разрешили им писать в репозиторий habraProject.
Далее в папку keydir нам надо положить паблик части rsa ключей наших пользователей:
cd gitosis-admin
cp ~/ufo.pub keydir/

Добавляем новые файлы в коммит, создаем его с комментарием и отправляем на сервер:
git add keydir/ufo.pub
git commit -a -m "habraProject настроен. Можно взлетать."
git pull

После выполнения этого кода admin и ufo могут писать в репозиторий habraProject, но его еще не существует на сервере.
Создаем репозиторий:
mkdir ../habraProject
cd ../habraProject
git init
git remote add origin git@your.server.com:habraProject.git

Теперь вы можете добавить пару файлов в проект, или можете этого не делать, и сразу залить скелет на сервер:
git push origin master:refs/heads/master

Эпилог.

Надеюсь, вам помогло это руководство, даже если вы прошли его от начала до конца просто забавы ради. Буду рад поправкам, вопросам, уточнениям и дополнениям.
p.s. Для повседневной работы с репозиторием я обычно использую Gitx — очень удобная утилита. В ней все еще есть немного багов, но с повседневными задачами она справляется хорошо.
Tags:
Hubs:
Total votes 6: ↑5 and ↓1 +4
Views 2K
Comments Comments 4