git+gitosis+gitweb(cgit) на Debian.
Небольшая инструкция описывающая установку описанного в теме комплекта на Debian
Не буду рассказывать почему выбрал именно git для системы контроля версий -- сам не знаю, скорее всего просто потому что пользоваться ей достаточно просто. По поводу остального -- gitosis это единственное, что позволяет делать многопользовательский доступ, не требует висящего демона и просто настраивается. Выбор веб интерфейса остаётся за Вами, лично мне больше понравился cgit, он достаточно быстр и, в принципе, более функционален. Установка будет описывать работу именно с ним. Конфигурационный файл для gitweb я также добавлю в конце поста. Предполагается, что вебсервер уже установлен, папка, в которой будут располагаться папки виртхостов: /var/www, gitosis устанавливается в /srv/gitosis. Также предполагается, что имеются некоторые основы работы с ключами и вы понимаете различием между публичным и приватным ключом(применительно к SSH)
Итак приступим Для начала добавим репозиторий, где лежит пакетик с cgit:
echo "deb http://debian.stbuehler.de/debian/ stbuehler main" >> /etc/apt/sources.list
apt-key add --keyserver keys.gnupg.net --recv-keys 80121CD2479689D8
apt-get update
Установим необходимое ПО и будем разруливать настройки потихоньку: aptitude install git-core gitosis cgit Настроим gitosis:
su gitosis
cd $HOME
Создадим ключик для того чтобы gitosis сам для себя мог делать изменения:
ssh-keygen -t rsa
gitosis-init < .ssh/id_rsa.pub
Потом клонируем папку, в которой будет происходить настройка gitosis:
git clone gitosis@localhost:gitosis-admin.git
В папке /srv/gitosis будет создана папка gitosis-admin, с настройками программы. Заходим в неё, редактируем файл gitosis.conf и добавляем пользователей:
[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = gitosis@server.name
[group repo1]
members = user1 user2
writable = repo_name
[repo repo2]
gitweb = yes
cgit = yes
owner = Owner name
description = server.name git repo
Добавление пользователей происходит очень просто, нужно просто добавить публичный ключ в папку gitosis-admin/keydir, например:
echo "ssh-rsa ..... localuser@hostname" > keydir/user1.pub
Это добавляет ключ для доступа пользователя user1 Применяем изменения:
git commit -a -m "Info about added data"
git push
Затем создаём репозиторий:
mkdir -p ../repositories/repo_name.git
Переходим в него
cd ../repositories/repo_name.git
Выполняем инициализацию репозитория:
git init --bare
У себя также делаем инициализацию, забираем репозиторий к себе и коммитим то, что нам нужно:
cd projects/repo_name
git init
git remote add origin gitosis@server.name:repo_name.git
git pull origin master
git commit -a -m "initial commit"
git push origin master
Настраиваем Apache
apitude install apache2
Добавляем в конфиг виртхоста:
<VirtualHost _:80>
ServerAdmin webmaster@localhost
ServerName git.server.name
DocumentRoot /var/www/git.server.name/public/
DirectoryIndex index
Options Indexes FollowSymlinks ExecCGI
Alias /cgit.css /usr/share/cgit/cgit.css
Alias /cgit.png /usr/share/cgit/cgit.png
ScriptAlias /index /usr/lib/cgi-bin/cgit.cgi
<Directory "/var/www/git.server.name/public">
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^._ /index/$0 [L,PT]
</Directory>
ErrorLog /var/log/apache2/git.server.name.error.log
LogLevel warn
CustomLog /var/log/apache2/git.server.name.access.log combined
</VirtualHost>
Теперь создаём конфиг для cgit /etc/cgitrc
virtual-root=/
enable-index-links=1
enable-log-filecount=1
enable-log-linecount=1
snapshots=tar.gz tar.bz2 zip
css=/cgit.css
logo=/cgit.png
root-title=git.server.name
# scan-path=/srv/gitosis/repositories
repo.url=repo_name.git
repo.path=/srv/gitosis/repositories/repo_name.git/
repo.desc=maxsites.ru repository
repo.owner=Maxsites Team
repo.clone-url=ssh://gitosis@server.name:repo_name.git
Если раскомментировать scan_path, то cgit будет брать все репозитории из папки, иначе нужно задавать их вручную, как я описал выше. Использование projects.list(то есть генерируемого списка на основе опции cgit=yes) возможно только на Gentoo, где включён в gitosis специальный патч, реализующий данную функциональность(надо будет на досуге покопаться).
Для gitweb таких ограничений нет, там всё работает корректно из коробки. Вот содержимое файла /etc/gitweb.conf
$projects_list = "/srv/gitosis/gitosis/projects.list";
$projectroot = '/srv/gitosis/repositories';
$gitosis_conf = '/srv/gitosis/repositories/gitosis-admin.git/gitosis.conf';
$export_ok = "";
$strict_export = "true";
Теперь перезапускаем Apache, идём на git.server.name и радуемся :)
Если у вас остались вопросы, напишите мне письмо.