aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2021-IT21.2/Makefile10
-rw-r--r--2021-IT21.2/migration.pngbin0 -> 23633 bytes
-rw-r--r--2021-IT21.2/pres.pdfbin0 -> 226358 bytes
-rw-r--r--2021-IT21.2/pres.tex318
-rw-r--r--2021-IT21.2/theme/cznic-cz.pdfbin0 -> 6109 bytes
-rw-r--r--2021-IT21.2/theme/cznic-en.pdfbin0 -> 6060 bytes
-rw-r--r--2021-IT21.2/theme/nicbottom.pdfbin0 -> 7132 bytes
-rw-r--r--2021-IT21.2/theme/nictop.pdfbin0 -> 12767 bytes
-rw-r--r--2021-IT21.2/theme/theme.tex42
-rw-r--r--2021-IT21.2/theme/title.tex14
10 files changed, 384 insertions, 0 deletions
diff --git a/2021-IT21.2/Makefile b/2021-IT21.2/Makefile
new file mode 100644
index 0000000..4285339
--- /dev/null
+++ b/2021-IT21.2/Makefile
@@ -0,0 +1,10 @@
+FILE=pres
+
+$(FILE).pdf: $(FILE).tex $(patsubst %.svg,%.pdf,$(wildcard *.svg))
+ pdflatex -shell-escape $<
+
+%.pdf: %.svg
+ inkscape -D -z --file=$< --export-pdf=$@ --export-latex
+
+clean:
+ ls | grep -v -E "($(FILE).tex|Makefile|theme|svg|jpg|png|eps)$$" | xargs rm -rf
diff --git a/2021-IT21.2/migration.png b/2021-IT21.2/migration.png
new file mode 100644
index 0000000..8137bdb
--- /dev/null
+++ b/2021-IT21.2/migration.png
Binary files differ
diff --git a/2021-IT21.2/pres.pdf b/2021-IT21.2/pres.pdf
new file mode 100644
index 0000000..dfc95ff
--- /dev/null
+++ b/2021-IT21.2/pres.pdf
Binary files differ
diff --git a/2021-IT21.2/pres.tex b/2021-IT21.2/pres.tex
new file mode 100644
index 0000000..7327cd3
--- /dev/null
+++ b/2021-IT21.2/pres.tex
@@ -0,0 +1,318 @@
+\documentclass[aspectratio=169]{beamer}
+\usepackage{lmodern}
+\usepackage[czech]{babel}
+\usepackage[utf8x]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{textpos}
+\usepackage{tikz,calc}
+\usepackage{graphicx}
+\usepackage{wrapfig}
+\usepackage{color}
+\usepackage{mathtools}
+\usepackage{hyperref}
+\usepackage{epstopdf}
+\usepackage{amsmath}
+\usepackage{minted}
+\hypersetup{
+ colorlinks,
+ citecolor=black,
+ filecolor=black,
+ linkcolor=black,
+ urlcolor=black
+}
+\usepackage{pdflscape}
+
+\input{theme/theme.tex}
+
+\title{Migrace z Turris OS 3.x}
+\author{Karel Kočí}
+\date{10.11.2021}
+
+\begin{document}
+
+\input{theme/title.tex}
+
+\begin{frame}{Migrace z Turris OS 3.x pro uživatele}
+ Dokumentace: https://docs.turris.cz/geek/tos3-migration/
+
+ \vspace{1cm}
+
+ \includegraphics[width=10cm]{migration.png}\\
+ S vydáním Turris OS 5.3.1..
+
+ \vspace{1cm}
+ Do konce roku spuštění automatické migrace ve vlnách.
+\end{frame}
+
+\begin{frame}{Proč je nutná migrace?}
+ Obrovské změny mezi lety 2016 a 2018.
+
+ Turris OS 3.x: OpenWrt 15.05 (poslední merge Leden 2016)
+
+ Turris OS 4.0: OpenWrt 18.06
+
+ \begin{itemize}
+ \item Velké změny v konfiguraci
+ \item Změna LibC na Turris 1.x
+ \item Změny v repozitářích (jiná dispozice)
+ \item Změny v balíčkách
+ \item Odstranění některých funkcionalit
+ \end{itemize}
+\end{frame}
+
+\begin{frame}{Konfigurace}
+ \begin{itemize}
+ \item Přechod od swconfig k DSA pro switch konfiguraci
+ \item Správa SFP v kernelu (chybějící přepínání za běhu)
+ \item Změna identifikace Wi-Fi karet
+ \item Přesun od UCI konfigurace k nativní pro sshd
+ \item Update LXC z 1.0 na 3.0 (4.0)
+ \item Přechod od uCollect k Sentinel
+ \end{itemize}
+
+ Spousta změn v druhotném softwaru..
+\end{frame}
+
+\begin{frame}[fragile]{Migrace konfigurace}
+ Balíček \textit{tos3to4} s migračními skripty.
+ Pro budoucí rozšiřitelnost v Turris OS 4.0+.
+
+ \begin{minted}[frame=lines]{bash}
+config_load wireless
+wifi_handle() {
+ local radio="$1"
+ config_get path "$radio" path
+ mac="$(cat /sys/devices/platform/"$path"/ieee80211/phy*/macaddress)"
+ uci set "wireless.$radio.macaddr=$mac"
+ uci delete "wireless.$radio.path"
+}
+config_foreach wifi_handle wifi-device
+uci commit wireless
+ \end{minted}
+\end{frame}
+
+\begin{frame}[fragile]{Offline aktualizace}
+ Nahrajeme nový systém, zmigrujeme konfiguraci a provedeme reboot...
+
+ \vspace{0.2cm}
+
+ Výhody:
+ \begin{itemize}
+ \item Jednoduché
+ \item Atomické díky BTRFS
+ \end{itemize}
+
+ \vspace{0.2cm}
+
+ Proč to nejde:
+ \begin{minted}[frame=lines]{lua}
+[ -n "$IPKG_INSTROOT" ] || {
+ package_migration
+}
+\end{minted}
+ ⇒ Aktualizace za běhu
+\end{frame}
+
+\begin{frame}[fragile]{Trocha teorie... Updater}
+ Lua předpis/konfigurace z online zdrojů (updater lists).
+
+ \begin{minted}[frame=lines]{lua}
+Repository('turris/core', '../packages/core')
+Install('updater-ng', 'updater-supervisor', { critical = true })
+Package('updater-ng', { replan = 'finished' })
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]{Trocha teorie... Package extras}
+ \begin{minted}[frame=lines]{lua}
+Package('updater-ng', { replan = 'finished' })
+\end{minted}
+
+ \begin{itemize}
+ \item \textbf{virtual}: k danému názvu balíčku neexistuje binární balíček
+ \item \textbf{deps}: dodatečné závislosti balíčku
+ \item \textbf{reboot}: \textit{delayed} vyžádá reboot a
+ \textit{finished} bezpodmínečně provede na konci transakce
+ \item \textbf{replan}: \textit{finished} způsobí znovu spuštění updateru
+ okamžitě po ukončení a \textit{immediate} způsobí to samé, ale
+ okamžitě o instalaci balíčku
+ \item \textbf{abi\_change} a \textbf{abichange\_deep} způsobí reinstalaci
+ všech závislých balíčků
+ \item \textbf{order\_before} a \textbf{order\_after} nikdy nefungovaly
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]{První iterace aneb "tohle nebude fungovat"}
+ Balíček \textit{tos3to4} v Turris OS 3.x:
+ \begin{minted}[frame=lines]{lua}
+Script("https://repo.turris.cz/hbs/omnia/lists/migrate3x.lua", {
+ security = "Local", ca = system_cas, crl = no_crl,
+ pubkey = { "file:///etc/updater/keys/release.pub" }
+})
+\end{minted}
+
+ \textit{migrate3x.lua} na serveru:
+ \begin{minted}[frame=lines]{lua}
+Repository("turris", "https://repo.turris.cz/hbs/"..board.."/packages", {
+ priority = 60,
+ subdirs = { "base", "core", "packages", "turrispackages"}
+})
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]{Druhá iterace aneb "update updater"}
+ \begin{minted}[frame=lines]{lua}
+if version_match(self_version, "<64.0") then
+ Repository("turris", "https://repo.turris.cz/hbs/"..board.."/packages", {
+ priority = 60,
+ subdirs = { "base", "core", "packages", "turrispackages"}
+ })
+ Install('updater-ng', { critical = true })
+ Package('updater-ng', {
+ replan = 'immediate',
+ deps = { 'libgcc', 'busybox', 'tos3to4-early' }
+ })
+end
+Package("libc", { abi_change_deep = true })
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]{Updater: vítejte v pekle}
+ Kontrola kolizí...
+ \begin{minted}[frame=lines]{md}
+DIE: [string "transaction"]:334: [string "transaction"]:158: Collisions:
+• /usr/sbin/cron: vixie-cron (existing-file), cronie (new-file)
+\end{minted}
+
+ \vspace{0.4cm}
+
+ Dobře tak:
+ \begin{minted}[frame=lines]{lua}
+Package("cronie", { virtual = true })
+\end{minted}
+ \begin{minted}[frame=lines]{md}
+ERROR: inconsistent: Candidate exists for virtual package gettext-tools
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]{Pokračování teorie... pořadí změn}
+ \begin{minted}[frame=lines]{lua}
+Install('updater-ng', { critical = true, priority = 50 })
+\end{minted}
+
+ Pravidla řazení, první v pořadí:
+ \begin{enumerate}
+ \item Závislý balíček na následujícím v pořadí
+ \item Balíček který má konflikt s následujícím v pořadí
+ \item Kriticky vyžádané balíčky
+ \item Priorita (vyšší hodnota znamená dřívější zařazení)
+ \item Instalace balíčku (odstranění se provádí až na konci)
+ \end{enumerate}
+ BTW, toto platí jen pro nové verze updateru.
+\end{frame}
+
+\begin{frame}[fragile]{Třetí iterace aneb "early later"}
+ \begin{minted}[frame=lines]{lua}
+ Package('updater-ng', {
+ replan = 'immediate',
+ deps = { 'libgcc', 'busybox' }
+ })
+else
+ if version_match(installed["tos3to4"].version, "<2.0.0") then
+ Install('tos3to4-early', { critical = true, priority = 100 })
+ Package('tos3to4-early', { replan = 'immediate' })
+ end
+end
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]{Čtvrtá iterace aneb "ufff to trvá"}
+ OpenWrt používá Procd jako init systém, a ten komunikuje přes ubus.
+
+ Nová verze ubus nekomunikuje se starou a čeká na timeout dvě minuty.
+
+ \begin{minted}[frame=lines]{bash}
+[ -n "${IPKG_INSTROOT}" ] || {
+ ubus call system info 2>/dev/null >&2 || killall ubusd
+}
+\end{minted}
+
+ \begin{minted}[frame=lines]{lua}
+if version_match(installed["ubus"].version, "<2018") then
+ Package("ubus", { replan = 'immediate' })
+end
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]{Pátá iterace aneb "chybí mi balík"}
+ \begin{minted}[frame=lines]{lua}
+Install("cups")
+\end{minted}
+
+ \begin{minted}[frame=lines]{md}
+ERROR: inconsistent: Requested package cups that is not available.
+\end{minted}
+
+ \vspace{0.2cm}
+
+ Po implementaci v updateru:
+ \begin{minted}[frame=lines]{lua}
+Mode("optional_installs")
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]{Šestá iterace aneb "localrepo ach localrepo"}
+ Localrepo uchovává balíčky, které nebyly nainstalované z repozitáře.
+
+ Jo, ty které se neaktualizují, a rozhodně fungovat nebudou.
+
+ \begin{minted}[frame=lines]{bash}
+SOURCE="/usr/share/updater/localrepo"
+COLLIDED="/usr/share/updater/collided$SOURCE"
+mv "$SOURCE" "$COLLIDED"
+\end{minted}
+
+ \begin{minted}[frame=lines]{lua}
+ Package('updater-ng', {
+ replan = 'immediate',
+ deps = { 'libgcc', 'busybox', 'tos3to4-earliest' }
+ })
+else
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]{Sedmá iterace aneb "brick"}
+ Po aktualizaci máme DSA nastavení, ale nemáme DSA v jádře..
+
+ \begin{minted}[frame=lines]{lua}
+Package("tos3to4", { reboot = "finished" })
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]{Osmá iterace... no nic, to by bylo na dlouho}
+ Takže takový update vypadá takto:
+ \begin{enumerate}
+ \item Instalace \textit{tos3to4} v Turris OS 3.x
+ \item Aktualizace updateru na nejnovější verzi a instalace
+ \textit{tos3to4-earliest}
+ \item Aktualizace ubus (dvě minuty čekání)
+ \item Instalace \textit{tos3to4-early} a migrace nastavení updateru
+ \item Aktualizace zbytku systému včetně odstranění starých balíčků
+ \item Poslední replan (pšš, stejně nám nejde síť)
+ \item Reboot
+ \item Odstranění \textit{tos3to4} a dalších migračních balíčků
+ \end{enumerate}
+ Plus nějaké další přeplánování a další speciální balíčky (\textit{fix-*}).
+\end{frame}
+
+\begin{frame}
+ \Large Děkuji za pozornost. Otázky?\\
+
+ \vspace{0.5cm}
+ \small karel.koci@nic.cz
+
+ \vspace{0.5cm}
+ \small \url{git.cynerd.cz/presentations/about/}
+\end{frame}
+
+\end{document}
diff --git a/2021-IT21.2/theme/cznic-cz.pdf b/2021-IT21.2/theme/cznic-cz.pdf
new file mode 100644
index 0000000..8434d23
--- /dev/null
+++ b/2021-IT21.2/theme/cznic-cz.pdf
Binary files differ
diff --git a/2021-IT21.2/theme/cznic-en.pdf b/2021-IT21.2/theme/cznic-en.pdf
new file mode 100644
index 0000000..6208787
--- /dev/null
+++ b/2021-IT21.2/theme/cznic-en.pdf
Binary files differ
diff --git a/2021-IT21.2/theme/nicbottom.pdf b/2021-IT21.2/theme/nicbottom.pdf
new file mode 100644
index 0000000..2bc41c7
--- /dev/null
+++ b/2021-IT21.2/theme/nicbottom.pdf
Binary files differ
diff --git a/2021-IT21.2/theme/nictop.pdf b/2021-IT21.2/theme/nictop.pdf
new file mode 100644
index 0000000..153c065
--- /dev/null
+++ b/2021-IT21.2/theme/nictop.pdf
Binary files differ
diff --git a/2021-IT21.2/theme/theme.tex b/2021-IT21.2/theme/theme.tex
new file mode 100644
index 0000000..5479c32
--- /dev/null
+++ b/2021-IT21.2/theme/theme.tex
@@ -0,0 +1,42 @@
+% vim: ft=tex
+
+\definecolor{cznicblue}{RGB}{0,56,145}
+\definecolor{cznicred}{RGB}{204,18,38}
+
+\setbeamertemplate{frametitle}{
+ \begin{textblock}{100}[0,0](0.0,1.1)
+ \insertframetitle
+ \end{textblock}
+}
+
+\defbeamertemplate*{footline}{CZ.NIC}{
+ \begin{beamercolorbox}[wd=\paperwidth,ht=2.5ex,dp=1.125ex,
+ leftskip=.3cm,rightskip=.3cm plus1fil]{bottom}
+
+ \parbox{15.4cm}{\vspace*{0pt}\hfill\insertpagenumber/\inserttotalframenumber}
+
+ \includegraphics[width=11cm,keepaspectratio]{theme/nicbottom.pdf}
+ \hspace{0.5cm}
+ \includegraphics[width=3.7cm,keepaspectratio]{theme/cznic-cz.pdf}
+ \end{beamercolorbox}
+}
+
+\defbeamertemplate*{title page}{CZ.NIC}[1][]{
+ \usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle\par
+ \usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle}\insertsubtitle\par
+ \bigskip
+ \usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor\par
+ \usebeamerfont{institute}\usebeamercolor[fg]{institute}\insertinstitute\par
+ % Commenting out following lines hides date from first slide
+ \usebeamerfont{date}\usebeamercolor[fg]{date}\insertdate\par
+ \usebeamercolor[fg]{titlegraphic}\inserttitlegraphic
+}
+
+\setbeamercolor{structure}{fg=cznicred}
+\setbeamercolor{title}{fg=cznicblue}
+\setbeamercolor{subtitle}{fg=cznicred}
+\setbeamercolor{frametitle}{fg=cznicblue}
+\setbeamercolor{author}{fg=cznicblue}
+\setbeamercolor{date}{fg=cznicblue}
+
+\beamertemplatenavigationsymbolsempty
diff --git a/2021-IT21.2/theme/title.tex b/2021-IT21.2/theme/title.tex
new file mode 100644
index 0000000..258eacb
--- /dev/null
+++ b/2021-IT21.2/theme/title.tex
@@ -0,0 +1,14 @@
+% vim: ft=tex
+
+\begingroup
+\setbeamertemplate{headline}
+{
+ \begin{beamercolorbox}[wd=\paperwidth,ht=1.7cm,dp=1.125ex,
+ leftskip=.3cm,rightskip=.3cm plus1fil]{top}
+ \includegraphics[width=15.4cm,keepaspectratio]{theme/nictop.pdf}
+ \end{beamercolorbox}
+}
+
+\frame{\titlepage}
+
+\endgroup