summary refs log tree commit diff
path: root/presentacion.tex
diff options
context:
space:
mode:
Diffstat (limited to 'presentacion.tex')
-rw-r--r--presentacion.tex392
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}