\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}
dynamic
tcp://cynerd.cz
\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 "" >>$TMPCNF echo "
$ADDRESS
" >>$TMPCNF echo "
" >>$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 "" >>$TMPCNF # Specify every all devices for dev in eval `echo \$ST_DIR_HOSTS_$NM`; do echo "" >>$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}