\documentclass[aspectratio=169]{beamer} \usetheme{metropolis} \usepackage{lmodern} \usepackage[czech]{babel} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{graphicx} \usepackage{wrapfig} \usepackage{color} \usepackage{mathtools} \usepackage{hyperref} \usepackage{epstopdf} \usepackage{amsmath} \hypersetup{ colorlinks, citecolor=black, filecolor=black, linkcolor=black, urlcolor=black } \usepackage{pdflscape} \definecolor{omnia}{rgb}{0, 0.635, 0.886} \title{Osobní Git server s Gitolite a více} \author{Kar(t)el Kočí} \date{3.3.2018} \begin{document} \frame{\titlepage} \begin{frame}[fragile] \frametitle{Proč?} Proč mít osobní git server? \begin{itemize} \item Důvěryhodný hosting pro vaše soukromé repositáře \item Bezpečné napojení na vaše systému a infrastrukturu \item Nezanášíte kolaborační platformy nekolaborativními projekty \end{itemize} Proč zrovna gitolite? \begin{itemize} \item Spravuje git repositáře a nic víc \item Téměř: deploy and forget \item Konfigurace je v gitu (spravujete git v gitu) \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Co je tedy přesněji gitolite?} \begin{itemize} \item Manager přístupu k repositářům \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Jak nasadit?} Když vám funguje SSH tak už stačí jen nainstalovat gitolite a: \begin{verbatim} useradd -U -m git su - git gitolite setup -pk /tmp/admin.pub \end{verbatim} Naklonovat admin repo: \begin{verbatim} git clone git@server:gitolite-admin \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{Co je v admin repu?} \begin{itemize} \item Složka pro přístupové klíče: keydir \item Konfigurační soubor: conf/gitolite.conf \end{itemize} gitolite.conf \begin{verbatim} # Amin repo (comment) repo gitolite-admin RW+ = admin repo testing RW+ = @all \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{Přidnání repositáře} \begin{verbatim} repo gitolite-admin RW+ = admin repo myproject RW+ = admin \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{Přidnání uživatele} Přidáme veřejný klíč do složky keydir \begin{verbatim} $ ls keydir admin.pub pepa.pub \end{verbatim} \begin{verbatim} repo gitolite-admin RW+ = admin repo myproject RW+ = admin RW = pepa \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{Skupiny} \begin{verbatim} @admins = admin lojza @admin-repos = gitolite-admin admin-doc repo @admin-repos RW+ = @admins repo myproject RW+ = @admins RW = pepa \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{@all} \begin{verbatim} @admins = admin lojza repo gitolite-admin RW+ = @admins repo @all RW+ = @admins repo myproject RW = pepa R = @all \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{Přístup k repositářům} \begin{itemize} \item ssh \item git protokol (git-daemon) \item http(s) (gitweb, cgit) \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{git-daemon} Pro Alpine (openrc: /etc/conf.d/git-daemon) \begin{verbatim} GITDAEMON_OPTS="--syslog --base-path=/var/lib/git/repositories" GIT_USER="nobody" GIT_GROUP="git" \end{verbatim} gitolite.conf \begin{verbatim} repo myproject RW = pepa R = daemon \end{verbatim} \textit{git-daemon-export-ok} \end{frame} \begin{frame}[fragile] \frametitle{cgit} \begin{verbatim} root-title=Muj GIT root-desc=Muj novy git logo=/ico.svg virtual-root=/ enable-git-config=1 project-list=/var/lib/git/projects.list scan-path=/var/lib/git/repositories/ \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{cgit - clone} \begin{verbatim} enable-http-clone=1 clone-url=https://git.cynerd.cz/$CGIT_REPO_URL git://cynerd.cz/$CGIT_REPO_URL.git git@cynerd.cz:$CGIT_REPO_URL snapshots=tar.gz tar.bz2 zip \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{cgit - README a syntax} \begin{verbatim} 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 source-filter=/usr/lib/cgit/filters/syntax-highlighting.py about-filter=/usr/lib/cgit/filters/about-formatting.sh readme=:README.md \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{gitolite a cgit} \begin{verbatim} repo myproject RW = pepa R = daemon gitweb config gitweb.description = "Huge project" \end{verbatim} Na serveru v .gitolite.rc odkomentovat \begin{verbatim} # updates 'description' file instead of 'gitweb.description' config item 'cgit', \end{verbatim} A na serveru spustit jako uživatel git (fix everything) \begin{verbatim} gitolite setup \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{Hooky} \begin{verbatim} repo myproject RW = pepa R = daemon gitweb option hook.post-receive = build-trigger \end{verbatim} Skript build-trigger do: local/hooks/repo-specific/build-trigger Je nutné aktivovat (odkomentovat) na serveru v .gitolite.rc \begin{verbatim} # allow repo-specific hooks to be added 'repo-specific-hooks', \end{verbatim} A na serveru spustit jako uživatel git (fix everything) \begin{verbatim} gitolite setup \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{Mirroring} \begin{verbatim} #!/bin/sh [ -t 0 ] || cat >/dev/null # Drop all input from git git push --mirror "git@gitlab.com:$MIRROR" \end{verbatim} \begin{verbatim} repo myproject option ENV.MIRROR = "Lojza/project.git" option hook.post-receive = smirror \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{Pokročilé možnosti které jsme si neukázali} \begin{itemize} \item Templaty \item Virtuální reference \item Pokročilé řízení přístupu \item Forkování, dynamické vytváření a pokročilejší správat \end{itemize} \end{frame} \begin{frame} \Large Děkuji za pozornost. \url{git.cynerd.cz} \end{frame} { \setbeamercolor{background canvas}{bg=omnia} \begin{frame} \pagecolor{yellow!30!orange} \center \color{white} \Huge play.turris.cz \end{frame} } \end{document}