aboutsummaryrefslogtreecommitdiff
path: root/installfest2017/pres.tex
diff options
context:
space:
mode:
Diffstat (limited to 'installfest2017/pres.tex')
-rw-r--r--installfest2017/pres.tex303
1 files changed, 303 insertions, 0 deletions
diff --git a/installfest2017/pres.tex b/installfest2017/pres.tex
new file mode 100644
index 0000000..2138f82
--- /dev/null
+++ b/installfest2017/pres.tex
@@ -0,0 +1,303 @@
+\documentclass{beamer}
+\usetheme{metropolis}
+\usepackage{lmodern}
+\usepackage[czech]{babel}
+\usepackage[utf8x]{inputenc}
+%\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{graphicx}
+\usepackage{wrapfig}
+\usepackage{color}
+\usepackage{mathtools}
+\usepackage{hyperref}
+\usepackage{epstopdf}
+\usepackage{svg}
+\usepackage{amsmath}
+\usepackage{minted}
+\hypersetup{
+ colorlinks,
+ citecolor=black,
+ filecolor=black,
+ linkcolor=black,
+ urlcolor=black
+}
+\usepackage{pdflscape}
+
+\title{3 problémy při práci na 3 počítačích}
+\author{Karel Kočí}
+
+\begin{document}
+
+\frame{\titlepage}
+
+\begin{frame}
+ \begin{block}{\huge Napiš si skript!}
+ Přednášené skripty a více naleznete na:
+ \url{https://github.com/Cynerd/myconfigs}
+ \end{block}
+\end{frame}
+
+\begin{frame}
+ \frametitle{3 problémy}
+ \begin{itemize}
+ \item Synchronizace souborů
+ \item Synchronizace a správa konfigurací
+ \item Správa systému
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Synchronizace souborů}
+ \def\svgwidth{1cm}
+ \input{face_sad.pdf_tex}
+ \begin{itemize}
+ \item Dropbox
+ \item Mega
+ \item Google drive
+ \item \ldots
+ \end{itemize}
+
+ \def\svgwidth{1cm}
+ \input{face_cry.pdf_tex}
+ \begin{itemize}
+ \item Owncloud/Nextcloud
+ \end{itemize}
+
+ \def\svgwidth{1cm}
+ \input{face_happy.pdf_tex}
+ \begin{itemize}
+ \item Syncthing
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{``Easy to use'' říkají}
+ \includegraphics[width=11cm]{syncthing.png}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Matematický problém}
+ Přidání zařízení mezi N synchronizujících M složek.
+
+ \begin{itemize}
+ \item Nastav nové zařízení
+ \item $N$-krát přidej zařízení
+ \item $N$-krát spáruj s novým zařízením
+ \item $N \times M$ přidej k synchronizovaným složkám
+ \item $M$-krát přidej složku na novém zařízení
+ \end{itemize}
+
+ \vspace{0.4cm}
+ \[
+ 1+\left(M+2\right)N+M
+ \]
+\end{frame}
+
+\begin{frame}
+ \frametitle{Moje zařízení}
+ \def\svgwidth{27cm}
+ \input{scheme.pdf_tex}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Syncthing konfigurace hodně zjednodušeně}
+ \small
+ \begin{minted}{xml}
+<configuration version="18">
+ <folder id="a" label="A" path="/home/user/a/">
+ <device id="0000000-0000000-.."></device>
+ <device id="1111111-1111111-.."></device>
+ </folder>
+ <folder id="b" label="B" path="/home/user/b/">
+ <device id="0000000-0000000-.."></device>
+ <device id="1111111-1111111-.."></device>
+ </folder>
+ <device id="0000000-0000000-.." name="cynerd-pc">
+ <address>dynamic</address>
+ </device>
+ <device id="1111111-1111111-.." name="server">
+ <address>tcp://cynerd.cz</address>
+ </device>
+</configuration>
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Napiš si skript, vstupní data}
+ \begin{minted}{bash}
+# Syncthing PC id
+ID="0000000-0000000-0000000-0000000-.."
+# Name of machine
+NAME="cynerd-pc"
+# Address to machine, can be tcp://address.com or dynamic
+ADDRESS="dynamic"
+
+# Directoris to be synchronized
+# Format is ID:PATH
+DIRS="Sync:/home/user/Sync
+Sync2:/home/user/SyncIt"
+
+# REST api key
+APIKEY="bT6dCxEds9JPwiXMXavGNsXsz7ZFpSC5"
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Napiš si skript, generuj zařízení do XML}
+ \begin{minted}{bash}
+# ...
+for h in syncthing/*; do
+
+. "$h" # Source host
+# Set to configuration
+echo "<device id=\"$ID\" name=\"$NAME\">" >>$TMPCNF
+echo "<address>$ADDRESS</address>" >>$TMPCNF
+echo "</device>" >>$TMPCNF
+# Parse DIRS of this host
+eval `echo "$DIRS" | sed -ne \
+'s/^\([^:]*\):.*$/ST_DIR_HOSTS_\1="$ST_DIR_HOSTS_\1 $ID"/p'`
+
+done
+# ...
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Napiš si skript, generuj složky do XML}
+ \begin{minted}{bash}
+# ...
+. syncthing/"$HOST"
+while read -r d; do
+NM="$(echo "$d" | sed 's/:.*$//')" # Directory name
+PTH="$(echo "$d" | sed 's/^[^:]*://')" # Get target path
+# Write folder init
+echo "<f id=\"$NM\" label=\"$NM\" path=\"$PTH\">" >>$TMPCNF
+# Specify every all devices
+for dev in eval `echo \$ST_DIR_HOSTS_$NM`; do
+ echo "<device id=\"$dev\"></device>" >>$TMPCNF
+done
+# ...
+done <<<"$DIRS"
+# ...
+\end{minted}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Moje řešení}
+
+ \begin{itemize}
+ \item Nastav nové zařízení
+ \item Přidej do sdílené konfigurace
+ \item N-krát deploy konfigurace
+ \end{itemize}
+
+ \vspace{0.4cm}
+ \[
+ 2+N < 1+\left(M+2\right)N+M
+ \]
+\end{frame}
+
+\begin{frame}
+ \frametitle{Synchronizace konfigurace}
+ \includegraphics[width=3cm]{git.eps}
+
+ \vspace{1cm}
+ \begin{block}{\$HOME dot soubory}
+ 3 zařízení 3 různé požadavky
+ \begin{itemize}
+ \item Laptop, OpenRC, Bumblebee, 2 disky
+ \item Laptop, OpenRC
+ \item Desktop, Systemd
+ \end{itemize}
+ \end{block}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Skriptujeme jednoduše}
+ \begin{minted}{bash}
+# install.sh
+cd `dirname $0`
+rsync -rlpt bashrc ~/.bashrc
+rsync -rlpt profile ~/.profile
+
+
+# get.sh
+cd `dirname $0`
+rsync -rlpt ~/.bashrc bashrc
+rsync -rlpt ~/.profile profile
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Skriptujeme s vimdiff}
+ \begin{minted}{bash}
+cd `dirname $0`
+checkdiff() {
+ for f in `find "$1" -type f`; do
+ if ! cmp "$1" "$f" >/dev/null; then
+ F="${f#$1}"
+ vimdiff "$1/$F" "$2/$F"
+ fi
+ done
+}
+inst() {
+ [ -e "$2" ] && checkdiff "$1" "$2" \
+ || rsync -rlpt "$1" "$2"
+}
+inst bashrc ~/.bashrc
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Skriptujeme skupinky}
+ \begin{minted}{bash}
+# ...
+
+read -p "Install bashrc? (Y/n) "
+if [[ $REPLY =~ ^[Yy]?$ ]]; then
+ inst bashrc ~/.bashrc
+ inst profile ~/.profile
+fi
+
+read -p "Install VIM scripts? (Y/n) "
+if [[ $REPLY =~ ^[Yy]?$ ]]; then
+ inst vimrc ~/.vimrc
+ inst vim ~/.vim
+fi
+
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Balíčky jako konfigurace}
+ Pro Archlinux:
+ \begin{minted}{bash}
+sudo pacman -D --asdeps pkg
+sudo pacman -D --asexplicit pkg
+\end{minted}
+
+ \begin{minted}{bash}
+m4 archlinux.pkgs | sort | uniq > /tmp/file1
+pacaur -Qqe | sort > /tmp/file2
+diff --supppress-common-lines -ay /tmp/file1 /tmp/file2
+\end{minted}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Závěrem}
+ \begin{itemize}
+ \item Jeden git repositář s konfigurací
+ \item Skript pro přesun změn v konfiguračních souborech z a do repositáře
+ \item Skript porotnání explicitně nainstalovaných balíčků
+ \item Skript pro generování Syncthing konfigurace
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \begin{block}{\large Děkuji za pozornost}
+ \end{block}
+ \url{https://github.com/Cynerd/myconfigs}
+ % TODO
+\end{frame}
+
+\end{document}