diff options
Diffstat (limited to 'presentacion.tex')
-rw-r--r-- | presentacion.tex | 392 |
1 files changed, 392 insertions, 0 deletions
diff --git a/presentacion.tex b/presentacion.tex new file mode 100644 index 0000000..81d6c69 --- /dev/null +++ b/presentacion.tex @@ -0,0 +1,392 @@ +\documentclass[aspectratio=43]{beamer} + +\usetheme{simple} + +\usepackage{lmodern} +\usepackage[scale=2]{ccicons} +\usepackage{hyperref} +\usepackage[inkscapeformat=png]{svg} + +\usepackage[utf8]{inputenc} % No olvides utilizar UTF8, especialmente si tu presentación está en castellano + + +\def\edicion{XXXV} % Edición de las jornadas +\def\fecha{Abril 2023} % Fecha de las jornadas + +\title{NixOS} % Modifica el título de la presentación a tu gusto +\subtitle{Linux dentro de 10 años} % Incluye un subtítulo si lo ves necesario, o bórralo +\author{Manuel Palenzuela Merino} % Cambia el autor de la presentación +\twitter{github.com/Baitinq} % Pon tu Twitter o déjalo en blanco + +% Esto no lo cambies +\institute{\edicion \ Jornadas Técnicas del GUL} +\date{\fecha} + + +% Página principal (no tocar) +\titlegraphic{img/logo1.png} + +\begin{document} + +{ + \setbeamertemplate{footline}{} + \begin{frame} + \titlepage + \end{frame} +} +\addtocounter{framenumber}{-1} + +\setwatermark{\includegraphics[height=8cm]{img/logo1.png}} % Marca de agua (opcional) + +\section{Distribuciones de Linux "tradicionales"} +\subsection{Problemas} +\section{Que es Nix?} +\section{Nix (Lenguaje)} +\subsection{Derivaciones} +\section{Nixpkgs} +\section{Nix (Package Manager)} +\section{NixOS} +\subsection{Highlights} +\subsection{Configuraciones} +\section{El futuro de Linux} +\subsection{Mas informacion} +\section{Preguntas} + +% ------------------------------------------------------------------------------------------ +% La presentación empieza aquí. La primera diapositiva puede dejarse tal cual o sustituirse. +% ------------------------------------------------------------------------------------------ + +\begin{frame} + \frametitle{Antes de empezar} + \begin{enumerate} + \item{Podeis preguntar dudas en cualquier momento} + \item{Cuantas mas preguntas mejor :))} + \item{Tambien se aceptan sugerencias durante la charla (mas alto, explicar algo mas a fondo, etc)} + \item{\href{https://github.com/Baitinq/nixos-presentation}{https://github.com/Baitinq/nixos-presentation}} + \end{enumerate} +\end{frame} + +\begin{frame} + \frametitle{Tabla de contenidos} % Puedes ponerle un título más chulo a la diapositiva con el índice de contenidos o dejar éste + \tableofcontents % Para poblar la tabla de contenidos debes utilizar \section y \subsection apropiadamente (ver demo) +\end{frame} + +\begin{frame} + \frametitle{Distribuciones de Linux "tradicionales"} + \begin{columns} + \column{0.4\textwidth} + Ej: + \begin{itemize} + \item{Arch Linux} + \item{Debian} + \item{Fedora} + \item{Ubuntu} + \end{itemize} + \column{0.4\textwidth} + Que son: + \begin{enumerate} + \item Package manager + \item Repositorios + \item Filesystem structure + \item Etc? + \end{enumerate} + \end{columns} +\end{frame} + +% TODO: Do sections in table of contents +\begin{frame} + \frametitle{Problemas de distros "tradicionales"} + \begin{itemize} + \item Actualizaciones/cambios de configuración modifican destructivamente el estado del sistema (sobrescribiendo archivos en secuencia -\> \textbf{inconsistencia temporal}) + \item Diferentes versiones de un binario + \item Conflictos de paquetes + \item No hay rollbacks + \item No hay gestión de la configuración (dotfiles) + \item\textbf{NO HAY DETERMINISMO} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Que es Nix?} + + \begin{enumerate}[I] + \item{\href{https://nix.dev/tutorials/nix-language}{Nix (lenguaje)}} + \item{\href{https://github.com/NixOS/nixpkgs}{Nixpkgs}} + \item{\href{https://github.com/NixOS/nix}{Nix (package manager)}} + \end{enumerate} + +\end{frame} + +\begin{frame} + \frametitle{Nix (Lenguaje)} + \begin{itemize} + \item Es un DSL (no un GPL!) + \item Usado para describir \textbf{derivaciones} + \item Dynamically typed (por el momento) + \item Lazy + \item Funcional (no hay side-effects) + \item Turing completo + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Nix (lenguaje)} + \begin{block}{} + \begin{verbatim} +let + nombre = "GUL"; + saludar = x: "hola " + x + "!"; +in { + x = saludar nombre; + z = 1; +} + \end{verbatim} + \end{block} + \begin{block}{} + \begin{verbatim} +nix-repl> { x = "hola GUL!"; z = 1; } + \end{verbatim} + \end{block} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Nix (lenguaje) - Derivaciones} + \begin{block}{} + \fontsize{10}{12}\begin{verbatim} +nix-repl> d = derivation { name = "myname"; builder ="mybuilder"; +system = "mysystem"; } +nix-repl> d +«derivation /nix/store/z3hhlxbckx4g3n9sw91nnvlkjvyw754p-myname.drv» + \end{verbatim} + \end{block} +\begin{block}{hello.nix} +\begin{verbatim} +with import <nixpkgs> {}; +stdenv.mkDerivation { + name = "hello"; + src = ./hello-2.10.tar.gz; +} +\end{verbatim} +\end{block} +\begin{block}{} +\fontsize{10}{12}\begin{verbatim} +$ nix-build hello.nix +/nix/store/6y0mzdarm5qxfafvn2zm9nr01d1j0a72-hello +$ /nix/store/6y0mzdarm5qxfafvn2zm9nr01d1j0a72-hello/bin/hello +Hello, world! +\end{verbatim} +\end{block} +\end{frame} + +\begin{frame} + \frametitle{Nixpkgs (the Nix packages collection)} + \begin{itemize} + \item Repositorio en GitHub (Licencia FOSS) + \item Contiene definiciones de paquetes (derivations) + \item Tambien contiene tests, librerias, etc. + \item Ramas diferentes (rolling: master, stable: release-YY.MM) + \item Compilado y testeado por Hydra (+=y subido al cache binario) + \end{itemize} +\vspace{14} + \begin{itemize} + \item Numero de paquetes $\Rightarrow$ nixpkgs-unstable: \textbf{82918} vs AUR: \textbf{72357} + \item Puesto numero \textbf{12} en lenguajes mas populares en GitHub (en cuanto a PRs) + \end{itemize} +\end{frame} + +\begin{frame} + \includesvg[scale=0.4]{img/map_repo_size_fresh.svg} +\end{frame} + +\begin{frame}[fragile] + \begin{block}{aircrack-ng.nix} +\fontsize{7}{9}\begin{verbatim} +{ lib, stdenv, fetchurl, libpcap, openssl, zlib, wirelesstools +, iw, ethtool, pciutils, libnl, usbutils }: + +stdenv.mkDerivation { + pname = "aircrack-ng"; + version = "1.7"; + + src = fetchurl { + url = "https://download.aircrack-ng.org/aircrack-ng-${version}.tar.gz"; + sha256 = "1hsq1gwmafka4bahs6rc8p98yi542h9a502h64bjlygpr3ih99q5"; + }; + + buildInputs = [ libpcap openssl zlib libnl iw ethtool pciutils ]; + + [...] + + meta = with lib; { + description = "Wireless encryption cracking tools"; + homepage = "http://www.aircrack-ng.org/"; + license = licenses.gpl2Plus; + maintainers = with maintainers; [ ]; + platforms = platforms.linux; + }; +} +\end{verbatim} +\end{block} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Nix (package manager)} +\begin{itemize} + \item Un gestor de paquetes puramente funcional (y deterministico) + \item Instalación de paquetes por usuarios sin privilegios + \item Guarda los paquetes en la Nix store (/nix/store por defecto) + \item Cada paquete tiene su propio UUID (/nix/store/\$hash\$version\$name) + \item Permite instalar diferentes versiones de un mismo paquete + \item Elimina totalmente problemas de dependencias + \item Actualizaciones y rollbacks \textbf{atomicos} + \item Instalable en cualquier distro + MacOS (homebrew replacement?) +\end{itemize} +\begin{block}{Ejemplos:} +\begin{verbatim} +$ nix-env -i aircrack-ng +$ nix run vim +$ nix run "github:example/repo#package" +$ nix shell blender-bin#blender_2_83 +\end{verbatim} +\end{block} +\end{frame} + +\begin{frame} + \frametitle{NixOS} + + \begin{center} + Integra profundamente Nix (los 3 tipos) en una distribucion de Linux! + \end{center} + \vspace{20} + \begin{center} + \includegraphics[scale=0.1]{img/1280px-NixOS_logo.svg.png} + \end{center} +\end{frame} + +%TODO: IMAGES + +\begin{frame} + \frametitle{NixOS Highlights} + + \begin{itemize} +\item Actualizaciones atomicas (software & configuration) +\item Actualizaciones fiables (y rollbacks - configuración vinculada a la versión de software correcta + recargas/reinicios del servicio) +\item Rollbacks +\item Reproducible +\item Configuracion del OS \textbf{declarativa} +\begin{itemize} +\item TODO tu sistema operativo en un repositorio git +\end{itemize} +\item \textbf{DETERMINISMO} + \end{itemize} +\end{frame} + +\begin{frame} +\frametitle{Mi Configuracion} + \includegraphics[scale=0.34]{img/20230413_10h27m54s_grim.png} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Configuracion minima de NixOS} +\begin{block}{configuration.nix} +\begin{verbatim} +{ + boot.loader.grub.device = "/dev/sda"; + + fileSystems."/".device = "/dev/sda1"; + + services.sshd.enable = true; +} +\end{verbatim} +\end{block} +\begin{block}{} +\begin{verbatim} +$ nixos-rebuild switch -I nixos-config=configuration.nix +$ nixos-rebuild switch --rollback +$ nixos-rebuild test -I nixos-config=configuration.nix +$ nixos-rebuild build-vm -I nixos-config=configuration.nix +\end{verbatim} +\end{block} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Configuraciones NixOS} +\begin{block}{configuration.nix} +\fontsize{9}{11}\begin{verbatim} +{ config, pkgs, ...} : +{ + imports = [ ./hardware.nix ]; + + environment.systemPackages = with pkgs; [ thunderbird firefox vim ]; + + users.users."alice" = { + isNormalUser = true; + home = "/home/alice"; + extraGroups = [ "wheel" "networkmanager" ]; + }; + + services.xserver = { + windowManager.i3.enable = true; + displayManager.sddm.enable = true; + videoDrivers = [ "nvidia" ]; + }; + + networking.firewall.enable = true; +} +\end{verbatim} +\end{block} +\end{frame} + +\begin{frame} + \frametitle{El futuro de Linux} + \begin{itemize} + \item NixOS tiene problemas + \item Alternativas: + \begin{itemize} + \item Fedora Silverblue? + \item Seguir como estamos? + \end{itemize} + \end{itemize} + \begin{center} + \includegraphics[scale=0.34]{img/1366_2000.jpg} + \end{center} +\end{frame} + +\begin{frame} +\frametitle{Mas informacion} +\begin{center} +\begin{itemize} + \item \begin{center}NixOS modules\end{center} + \item \begin{center}Overriding\end{center} + \item \begin{center}Flakes\end{center} + \item \begin{center}Etc..\end{center} +\end{itemize} +\end{center} +\begin{columns} + \column{0.6\textwidth} +\begin{itemize} + \item \href{https://nixos.org}{NixOS website} + \item \href{https://nixos.org/manual/nixos/stable/}{Nix Manuals} + \item \href{https://nixos.org/guides/nix-pills/}{\textbf{Nix Pills}} + \item \href{https://learnxinyminutes.com/docs/nix/}{Learn X in Y minutes, where X=nix} +\end{itemize} + \column{0.4\textwidth} + \includegraphics[scale=0.4]{img/207px-Home-nixos-logo.png} +\end{columns} +\end{frame} + +\begin{frame} + \frametitle{Gracias por escuchar!} + \begin{center} + \includegraphics[scale=0.4]{img/207px-Home-nixos-logo.png} + \begin{itemize} + \item Preguntas + \item Feedback + \end{itemize} + \end{center} + \vspace{44} + \href{https://github.com/Baitinq/nixos-config}{https://github.com/Baitinq/nixos-config} +\end{frame} + + +\end{document} |