====== Własny serwer Git ===== Własny serwer git oparty o: * gitolite (kontrola dostępu) * cgit (frontend do przeglądania repozytoriów) ===== gitolite: instalacja i konfiguracja ===== Instalujemy: pkg install gitolite Zakładamy użytkownika, na którym będzie pracować gitolite: pw useradd -n git -u 999 -c "Gitolite user" -d /home/git -m -s /usr/local/bin/bash Przechodzimy na nowo utworzone konto: sudo -u git -i Tworzymy plik w którym wpiszemy klucz SSH użytkownika, który będzie adminem. Format pliku: uzytkownik.pub - po czym inicjalizujemy nową konfigurację: gitolite setup -pk gitadmin.pub Od tego momentu, użytkownik ''gitadmin'' będzie mógł pobierać repozytorium konfiguracyjne i nim zarządzać: git clone ssh://git@serwer.com/gitolite-admin Po sklonowaniu konfiguracją zarządzamy w drzewie repozytorium: * ''conf/gitolite.conf'' - konfiguracja repozytoriów i uprawnień użytkownikó * ''keydir/'' - katalog z kluczami użytkowników Dodatkowo dostosujemy konfigurację gitolite do pracy z cgit. Zmieniamy dwie wartości w ''~/.gitolite.rc'': GIT_CONFIG_KEYS => '.*', 'cgit', Pierwszą wartość zmieniamy, drugą trzeba odkomentować. ===== cgit: instalacja i konfiguracja ===== Instalujemy paczki: pkg install nginx fcgiwrap spawn-fcgi Konfiguracja do spawnfcgi (''/etc/rc.conf.d/spawn_fcgi''): spawn_fcgi_enable="YES" spawn_fcgi_app="/usr/local/sbin/fcgiwrap" spawn_fcgi_username="git" spawn_fcgi_groupname="www" spawn_fcgi_bindsocket="/var/run/fcgiwrap/fcgiwrap.sock" spawn_fcgi_bindsocket_mode="0770" Włączamy nginx (''/etc/rc.conf.d/nginx''): nginx_enable="YES" Konfiguracja serwera nginx (''/usr/local/etc/nginx/nginx.conf''): server { listen 80; server_name git.server.com; root /usr/local/www/cgit; access_log /var/log/nginx/git.access.log; error_log /var/log/nginx/git.error.log; try_files $uri @cgit; location @cgit { include fastcgi_params; fastcgi_pass unix:/var/run/fcgiwrap/fcgiwrap.sock; fastcgi_param SCRIPT_FILENAME $document_root/cgit.cgi; fastcgi_param PATH_INFO $uri; fastcgi_param QUERY_STRING $args; fastcgi_param HTTP_HOST $server_name; fastcgi_param REMOTE_USER $remote_user; } } Konfiguracja dla cgit (''/usr/local/etc/cgitrc''): # Prepend this string to every url virtual-root=/ # Enable caching of up to 1000 output entriess cache-size=1000 # cache time to live cache-dynamic-ttl=5 cache-repo-ttl=5 # Specify some default clone urls using macro expansion clone-url=http://git.server.com/$CGIT_REPO_URL ssh://git@git.server.com/$CGIT_REPO_URL # Show owner on index page enable-index-owner=1 # Source gitweb.description, gitweb.owner from each project config enable-git-config=1 # Allow http transport git clone enable-git-clone=0 # Show extra links for each repository on the index page enable-index-links=1 # Remove .git suffix from project display remove-suffix=1 # Enable ASCII art commit history graph on the log pages enable-commit-graph=1 # Show number of affected files per commit on the log pages enable-log-filecount=1 # Show number of added/removed lines per commit on the log pages enable-log-linecount=1 # Sort branches by date branch-sort=age # Add a cgit favicon # favicon=/favicon.ico # Use a custom logo # logo=/cgit-css/cgit.png # Enable statistics per week, month and quarter max-stats=quarter # Set the title and heading of the repository index page root-title=git.server.com # Set a subheading for the repository index page root-desc=Site Description # Include some more info about example.com on the index page # root-readme=/var/www/git/about.htm # Allow download of tar.gz, tar.bz2 and zip-files snapshots=tar.bz2 zip ## ## List of common mimetypes ## mimetype.gif=image/gif mimetype.html=text/html mimetype.jpg=image/jpeg mimetype.jpeg=image/jpeg mimetype.pdf=application/pdf mimetype.png=image/png mimetype.svg=image/svg+xml # Highlight source code with python pygments-based highligher source-filter=/usr/local/lib/cgit/filters/syntax-highlighting.py # Format markdown, restructuredtext, manpages, text files, and html files # through the right converters about-filter=/usr/local/lib/cgit/filters/about-formatting.sh ## ## Search for these files in the root of the default branch of repositories ## for coming up with the about page: ## readme=:README.md readme=:readme.md readme=:README.mkd readme=:readme.mkd readme=:README.rst readme=:readme.rst readme=:README.html readme=:readme.html readme=:README.htm readme=:readme.htm readme=:README.txt readme=:readme.txt readme=:README readme=:readme readme=:INSTALL.md readme=:install.md readme=:INSTALL.mkd readme=:install.mkd readme=:INSTALL.rst readme=:install.rst readme=:INSTALL.html readme=:install.html readme=:INSTALL.htm readme=:install.htm readme=:INSTALL.txt readme=:install.txt readme=:INSTALL readme=:install ## ## List of repositories. ## PS: Any repositories listed when section is unset will not be ## displayed under a section heading ## PPS: This list could be kept in a different file (e.g. '/etc/cgitrepos') ## and included like this: ## include=/etc/cgitrepos ## project-list=/usr/home/git/projects.list scan-path=/usr/home/git/repositories Na koniec włączamy serwisy: service spawn-fcgi start service nginx start ===== Troubleshooting ===== ==== Cgit nie widzi nowego repozytorium ==== Nowe repo będzie widoczne na stronie cgit-a, jeśli będzie dodany dostęp do odczytu dla użytkownika ''gitweb''. Przykładowa konfiguracja repo w ''conf/gitolite.repo'': repo new_project RW+ = admin R = gitweb ==== Cgit: brak opisu repozytorium oraz właściciela ==== Ustawia się je w ''conf/gitolite.repo'' poprzez zmienne gitweb.*: repo new_project config gitweb.owner = "Owner" config gitweb.description = "Description" RW+ = admin R = gitweb