From 34c39badf1ea35401233d97707f7f53ada8e9429 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Mon, 15 Nov 2021 09:22:24 +0100 Subject: 2021-IT21.2: add presentation about Turris 3.x migration --- 2021-IT21.2/Makefile | 10 ++ 2021-IT21.2/migration.png | Bin 0 -> 23633 bytes 2021-IT21.2/pres.pdf | Bin 0 -> 226358 bytes 2021-IT21.2/pres.tex | 318 ++++++++++++++++++++++++++++++++++++++++ 2021-IT21.2/theme/cznic-cz.pdf | Bin 0 -> 6109 bytes 2021-IT21.2/theme/cznic-en.pdf | Bin 0 -> 6060 bytes 2021-IT21.2/theme/nicbottom.pdf | Bin 0 -> 7132 bytes 2021-IT21.2/theme/nictop.pdf | Bin 0 -> 12767 bytes 2021-IT21.2/theme/theme.tex | 42 ++++++ 2021-IT21.2/theme/title.tex | 14 ++ 10 files changed, 384 insertions(+) create mode 100644 2021-IT21.2/Makefile create mode 100644 2021-IT21.2/migration.png create mode 100644 2021-IT21.2/pres.pdf create mode 100644 2021-IT21.2/pres.tex create mode 100644 2021-IT21.2/theme/cznic-cz.pdf create mode 100644 2021-IT21.2/theme/cznic-en.pdf create mode 100644 2021-IT21.2/theme/nicbottom.pdf create mode 100644 2021-IT21.2/theme/nictop.pdf create mode 100644 2021-IT21.2/theme/theme.tex create mode 100644 2021-IT21.2/theme/title.tex 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 Binary files /dev/null and b/2021-IT21.2/migration.png differ diff --git a/2021-IT21.2/pres.pdf b/2021-IT21.2/pres.pdf new file mode 100644 index 0000000..dfc95ff Binary files /dev/null and b/2021-IT21.2/pres.pdf 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 Binary files /dev/null and b/2021-IT21.2/theme/cznic-cz.pdf 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 Binary files /dev/null and b/2021-IT21.2/theme/cznic-en.pdf differ diff --git a/2021-IT21.2/theme/nicbottom.pdf b/2021-IT21.2/theme/nicbottom.pdf new file mode 100644 index 0000000..2bc41c7 Binary files /dev/null and b/2021-IT21.2/theme/nicbottom.pdf differ diff --git a/2021-IT21.2/theme/nictop.pdf b/2021-IT21.2/theme/nictop.pdf new file mode 100644 index 0000000..153c065 Binary files /dev/null and b/2021-IT21.2/theme/nictop.pdf 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 -- cgit v1.2.3