\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}
