{"id":974,"date":"2024-08-10T00:05:09","date_gmt":"2024-08-10T03:05:09","guid":{"rendered":"https:\/\/www.marianoacciardi.com.ar\/?page_id=974"},"modified":"2026-01-12T09:11:16","modified_gmt":"2026-01-12T12:11:16","slug":"manejo-de-paquetes-de-debian-desde-la-consola","status":"publish","type":"page","link":"https:\/\/www.marianoacciardi.com.ar\/?page_id=974","title":{"rendered":"Manejo de paquetes de debian desde la consola."},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"974\" class=\"elementor elementor-974\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4ddd371b e-flex e-con-boxed e-con e-parent\" data-id=\"4ddd371b\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1fe2276e elementor-widget elementor-widget-text-editor\" data-id=\"1fe2276e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>by Mariano Acciardi\u00a0 &#8211; 2024\/08\/09<\/p><p><a href=\"#post-939-__RefHeading___Toc664_2023608668\">A) Principales comandos<\/a><\/p><p><a href=\"#post-939-__RefHeading___Toc666_2023608668\">D) Opciones m\u00e1s usuales de cada comando<\/a><\/p><p><a href=\"#post-939-__RefHeading___Toc678_2023608668\">B) Manejo de archivos de repositorios <\/a><\/p><p style=\"padding-left: 40px;\"><a href=\"#post-939-__RefHeading___Toc680_2023608668\">Formato antiguo de los archivos de fuentes<\/a><\/p><p style=\"padding-left: 40px;\"><a href=\"#post-939-__RefHeading___Toc682_2023608668\">Formato nuevo deb822<\/a><\/p><p><a href=\"#post-939-__RefHeading___Toc684_2023608668\">C) Manejo de claves p\u00fablicas para la firma digital de los paquetes<\/a><\/p><p style=\"padding-left: 40px;\"><a href=\"#post-939-__RefHeading___Toc692_2023608668\">Problema de seguridad de usar apt-key<\/a><\/p><p style=\"padding-left: 40px;\"><a href=\"#post-939-__RefHeading___Toc694_2023608668\">Metodolog\u00eda segura para instalar las claves sin usar apt-key<\/a><\/p><p style=\"padding-left: 40px;\"><a href=\"#post-939-__RefHeading___Toc696_2023608668\">Ejemplo paso a paso usando bajando las claves con el comando gpg<\/a><\/p><p style=\"padding-left: 40px;\"><a href=\"#post-939-__RefHeading___Toc708_2023608668\">Ejemplo paso a paso usando bajando las claves con wget\/curl<\/a><\/p><p><a href=\"#post-939-__RefHeading___Toc664_2023608668_Copy_1\">D) Buenas pr\u00e1cticas para realizar un upgrade de release mayor (dist-upgrade o full-upgrade)<\/a><\/p><p style=\"padding-left: 40px;\"><a href=\"#post-939-__RefHeading___Toc731_2023608668\">Paso a paso dist-upgrade<\/a><\/p><p style=\"padding-left: 40px;\"><a href=\"#post-939-__RefHeading___Toc733_2023608668\">Problemas con los entornos de escritorio<\/a><\/p><p style=\"padding-left: 40px;\"><a href=\"#post-939-__RefHeading___Toc735_2023608668\">Instalaci\u00f3n\/desinstalaci\u00f3n de los paquetes de los entornos de escritorio<\/a><\/p><p style=\"padding-left: 80px;\"><a href=\"#post-939-__RefHeading___Toc737_2023608668\">Opci\u00f3n 1: usando tasksel <\/a><\/p><p style=\"padding-left: 80px;\"><a href=\"#post-939-__RefHeading___Toc739_2023608668\">Opci\u00f3n 2: usando apt para instalar los conjuntos de tareas deseados 15<\/a><\/p><h2><a id=\"post-939-__RefHeading___Toc664_2023608668\"><\/a>A) Principales Comandos<\/h2><p>Los manejadores de paquetes de diferentes distribuciones tienen la funci\u00f3n de permitir, facilitar y administrar la instalaci\u00f3n de software o c\u00f3digo fuente sobre el sistema. El modo de trabajar con repositorios en l\u00ednea de debian es uno de los m\u00e1s antiguos en el mundo GNU\/Linux y fue el precursor de muchos otros hoy existentes. Las utilidades m\u00e1s utilizadas que componen este ecosistema son:<\/p><ul><li><strong>dpkg<\/strong>: Es el comando para instalar\/desinstalar paquetes que hayan sido bajados previamente o se encuentren disponibles de modo local en el equipo. Al instalar este tipo de paquetes puede suceder que la instalaci\u00f3n falle si el sistema no tiene instaladas previamente todas las dependencias necesarias.<\/li><li><strong>dpkg-reconfigure<\/strong>: permite reconfigurar un paquete instalado previamente, reproduciendo los pasos de configuraci\u00f3n de la instalaci\u00f3n.<\/li><li><strong>apt-get<\/strong>: (Advanced Package Tool) es el m\u00e1s antiguo manejador de paquetes en l\u00ednea dentro de una distribuci\u00f3n GNU\/Linux. Data de 1998 A\u00fan hoy su comodidad para la instalaci\u00f3n\/desinstalaci\u00f3n segura de paquetes es indiscutible. Por m\u00e1s que sea antigua mantiene exactamente la misma sintaxis de siempre y es la utilidad m\u00e1s est\u00e1ndar para manejar paquetes. Apt-get busca un paquete por nombre en Internet e instala autom\u00e1ticamente todas las dependencias de ese paquete.<\/li><li><strong>apt-cache<\/strong>: permite buscar informaci\u00f3n en l\u00ednea de los paquetes y manejar el cache local de paquetes.<\/li><li><strong>aptitude<\/strong>: es una evoluci\u00f3n propuesta en el a\u00f1o 1999 como alternativa a apt-get. Tiene una sintaxis muy parecida a la original, con sutiles diferencias. Su novedad es que admite una interfase de texto basada en NCurses que permite navegar seleccionando paquetes. A esta interfase se accede simplemente tipeando \u00abaptitude\u00bb en una consola. Al no ser una interfase gr\u00e1fica estrictamente puede utilizarse sin problemas de modo remoto a trav\u00e9s de una terminal ssh. Puede ser una herramienta un poco m\u00e1s compleja para una persona sin experiencia para evaluar los escenarios propuestos.<\/li><\/ul><p style=\"padding-left: 40px;\">Ventajas:<\/p><ul><li style=\"list-style-type: none;\"><ul><li>Un m\u00e1s evolucionado manejo de dependencias, con b\u00fasqueda de resoluci\u00f3n de conflictos y sugerencias para superar conflictos de dependencias irresueltos.<\/li><li>Propuesta de escenarios diversos de resoluci\u00f3n de conflicto de dependencias basados en puntaje.<\/li><li>Con cada ejecuci\u00f3n de \u201cinstall\u201d revisa y remueve paquetes que hayan sido instalados autom\u00e1ticamente por dependencias y ya no se utilicen, manteniendo as\u00ed un sistema m\u00e1s limpio en donde solo quedan instalados los paquetes realmente necesarios.<\/li><li>Introduce algunas funcionalidades de apt-cache en la misma interfase como la b\u00fasqueda de paquetes por patrones de caracteres (Ej. aptitude search codium)<\/li><\/ul><\/li><li><strong>apt:<\/strong> Es la opci\u00f3n m\u00e1s actualizada de manejador de paquetes nativos en l\u00ednea de que dispone debian. Fue introducida en el a\u00f1o 2014 como una herramienta que combina algunas capacidades de apt-get, apt-cache y aptitude en una sola. Tiene una sintaxis parecida a apt-get. Simplifica la experiencia de usuario mejorando los mensajes sobre las herramientas anteriores y dando informaci\u00f3n mejor formateada. Muestra adem\u00e1s una barra de progreso de la instalaci\u00f3n. Para algunas funciones espec\u00edficas resulta insuficiente y es necesario recurrir a las anteriores, sin embargo dispone de todas las opciones m\u00e1s comunes utilizadas en la administraci\u00f3n cotidiana de paquetes.<\/li><li><strong>apt-key:<\/strong> NO ES CONVENIENTE USAR ESTE COMANDO. Es el comando que hist\u00f3ricamente se utilizaba para agregar claves p\u00fablicas gpg para asegurar la integridad de los repositorios y de los paquetes instalados. El principal problema que trae aparejado es la posibilidad de firma de paquetes cruzada entre repositorios lo que introduce una brecha de seguridad. Ver siguiente apartado<\/li><\/ul><h2><a id=\"post-939-__RefHeading___Toc666_2023608668\"><\/a>D) Opciones m\u00e1s usuales de cada comando:<\/h2><h3><a id=\"post-939-__RefHeading___Toc668_2023608668\"><\/a>dpkg<\/h3><ul><li><strong>dpkg -i xxxx.deb zzzzz.deb<\/strong> (intenta instalar los paquetes xxxx.deb y zzzzz.deb<\/li><li><strong>dpkg -r &lt;nombre de paquete&gt;<\/strong> (desinstala un paquete instalado previamente pero no remueve sus archivos de configuraci\u00f3n)<\/li><li><strong>dpkg &#8211;purge -r &lt;nombre de paquete&gt;<\/strong> (desisnstala el paquete pero adem\u00e1s remueve los archivos de configuraci\u00f3n del sistema. Importante, no remueve los archivos de configuraci\u00f3n de usuario. Es decir solo los archivos de configuraci\u00f3n que se hayan instalado en \/etc pero no los que se instalen en el home del usuario (ej ~\/.config)<\/li><\/ul><h3><a id=\"post-939-__RefHeading___Toc670_2023608668\"><\/a>dpkg-reconfigure<\/h3><ul><li><strong>dpkg-reconfigure &lt;nombre de paquete&gt; <\/strong> (reconfigura el paquete como si fuera la primera vez que se est\u00e1 instalando. Por ej para cambiar\/agregar las locales de idioma del sistema: dpkg-reconfigure locales<\/li><\/ul><h3><a id=\"post-939-__RefHeading___Toc672_2023608668\"><\/a>apt-get<\/h3><ul><li><strong>apt-get update<\/strong> (actualiza los \u00edndices de los repositorios especificados (Ver m\u00e1s abajo). Es conveniente ejecutarlo previamente a toda instalaci\u00f3n o al menos en el d\u00eda en que se est\u00e1n realizando las instalaciones para mantener toda la informaci\u00f3n de los paquetes existentes en los repositorios en l\u00ednea para evitar mensajes de \u201cnot found\u201d. Es importante destacar que NO actualiza ning\u00fan paquete, solo el \u00edndice de paquetes online )<\/li><li><strong>apt-get install &lt;nombre de paquete&gt; &lt;nombre de paquete 2&gt;<\/strong> &#8230; (instala el\/los paquetes especificados y las dependencias necesarias)<\/li><li><strong>apt-get remove &lt;nombre de paquete&gt; &lt;nombre de paquete 2&gt;<\/strong> \u2026 (desinstala el\/los paquetes especificados y sus dependencias sin desinstalar los paquetes de configuraci\u00f3n del sistema)<\/li><li><strong>apt-get purge &lt;nombre de paquete&gt; &lt;nombre de paquete 2&gt;<\/strong> \u2026 (desinstala el\/los paquetes especificados y sus dependencias. Desinstala los paquetes de configuraci\u00f3n del sistema pero no los del home del usuario. (mismo efecto de dpkg &#8211;purge -r &lt;nombre de paquete&gt;)<\/li><li><strong>apt-get upgrade <\/strong>(actualiza todos los paquetes del sistema, dentro de un mismo release (stable, testing o unstable)<\/li><li><strong>apt-get dist-upgrade <\/strong>(actualiza todos los paquetes del sistema, utiliza un algoritmo de dependencias m\u00e1s liviano y es utilizado unicamente cuando queremos cambiar de release mayor, ej, Debian 11 a 12. Por ejemplo pasar el sistema de bookworm a trixie. Esto puede ocasionar problemas de dependencias, sobre todo en paquetes de los grandes escritorios)<\/li><li><strong>apt-get -f install <\/strong>(sin especificar ning\u00fan paquete intenta buscar las dependencias que paquetes que hayan quedado a medio instalar, las instala y adem\u00e1s instala todo los paquetes que quedaron a medias)<\/li><li><strong>apt-get autoremove<\/strong> (desinstala paquetes que hayan sido instalados automaticamente por dependencias y ya no se utilicen )<\/li><\/ul><h3><a id=\"post-939-__RefHeading___Toc674_2023608668\"><\/a>aptitude<\/h3><ul><li><strong>aptitude<\/strong> (sin ningun par\u00e1metro o comando adicional abre una pantalla Ncurses interactiva para instalar\/desinstalar paquetes como si fuera una interface gr\u00e1fica) .<\/li><li><strong>aptitude update <\/strong>(actualiza los \u00edndices de los repositorios especificados (Ver m\u00e1s abajo). Es conveniente ejecutarlo previamente a toda instalaci\u00f3n o al menos en el d\u00eda en que se est\u00e1n realizando las instalaciones para mantener toda la informaci\u00f3n de los paquetes existentes en los repositorios en l\u00ednea para evitar mensajes de \u201cnot found\u201d. Es importante destacar que NO actualiza ning\u00fan paquete, solo el \u00edndice de paquetes online )<\/li><li><strong>aptitude install <\/strong>&lt;nombre de paquete&gt; &lt;nombre de paquete 2&gt; &#8230; (instala el\/los paquetes especificados y las dependencias necesarias. Si se le agrega la opcion \u201c-r\u201d toma las recomendaciones como dependencias y tambi\u00e9n las instala)<\/li><li><strong>aptitude remove<\/strong> &lt;nombre de paquete&gt; &lt;nombre de paquete 2&gt; \u2026 (desinstala el\/los paquetes especificados y sus dependencias sin desinstalar los paquetes de configuraci\u00f3n del sistema)<\/li><li><strong>aptitude purge<\/strong> &lt;nombre de paquete&gt; &lt;nombre de paquete 2&gt; \u2026 (desinstala el\/los paquetes especificados y sus dependencias. Desinstala los paquetes de configuraci\u00f3n del sistema pero no los del home del usuario. (mismo efecto de dpkg &#8211;purge -r &lt;nombre de paquete&gt;)<\/li><li><strong>aptitude safe-upgrade <\/strong>(actualiza todos los paquetes del sistema, dentro de un mismo release (stable, testing o unstable) utilizado un algoritmo de dependencias coservador para evitar romper paquetes).<\/li><li><strong>aptitude full-upgrade <\/strong>(actualiza todos los paquetes del sistema, utiliza un algoritmo de dependencias m\u00e1s liviano y es utilizado unicamente cuando queremos cambiar de release mayor, ej, Debian 11 a 12. Por ejemplo pasar el sistema de bookworm a trixie. Esto puede ocasionar problemas de dependencias, sobre todo en paquetes de los grandes escritorios)<\/li><li><strong>aptitude -f install<\/strong> (sin especificar ning\u00fan paquete intenta buscar las dependencias que paquetes que hayan quedado a medio instalar, las instala y adem\u00e1s instala todo los paquetes que quedaron a medias)<\/li><\/ul><h3><a id=\"post-939-__RefHeading___Toc676_2023608668\"><\/a>apt<\/h3><ul><li><strong>apt update <\/strong>(actualiza los \u00edndices de los repositorios especificados (Ver m\u00e1s abajo). Es conveniente ejecutarlo previamente a toda instalaci\u00f3n o al menos en el d\u00eda en que se est\u00e1n realizando las instalaciones para mantener toda la informaci\u00f3n de los paquetes existentes en los repositorios en l\u00ednea para evitar mensajes de \u201cnot found\u201d. Es importante destacar que NO actualiza ning\u00fan paquete, solo el \u00edndice de paquetes online )<\/li><li><strong>apt install <\/strong>&lt;nombre de paquete&gt; &lt;nombre de paquete 2&gt; &#8230; (instala el\/los paquetes especificados y las dependencias necesarias. Si se le agrega la opcion \u201c-r\u201d toma las recomendaciones como dependencias y tambi\u00e9n las instala)<\/li><li><strong>apt remove<\/strong> &lt;nombre de paquete&gt; &lt;nombre de paquete 2&gt; \u2026 (desinstala el\/los paquetes especificados y sus dependencias sin desinstalar los paquetes de configuraci\u00f3n del sistema)<\/li><li><strong>apt purge<\/strong> &lt;nombre de paquete&gt; &lt;nombre de paquete 2&gt; \u2026 (desinstala el\/los paquetes especificados y sus dependencias. Desinstala los paquetes de configuraci\u00f3n del sistema pero no los del home del usuario. (mismo efecto de dpkg &#8211;purge -r &lt;nombre de paquete&gt;)<\/li><li><strong>apt upgrade <\/strong>(actualiza todos los paquetes del sistema, dentro de un mismo release (stable, testing o unstable) utilizado un algoritmo de dependencias coservador para evitar romper paquetes).<\/li><li><strong>apt full-upgrade <\/strong>(actualiza todos los paquetes del sistema, utiliza un algoritmo de dependencias m\u00e1s liviano y es utilizado unicamente cuando queremos cambiar de release mayor, ej, Debian 11 a 12. Por ejemplo pasar el sistema de bookworm a trixie. Esto puede ocasionar problemas de dependencias, sobre todo en paquetes de los grandes escritorios)<\/li><li><strong>apt autoremove<\/strong> (desinstala paquetes que hayan sido instalados automaticamente por dependencias y ya no se utilicen )<\/li><\/ul><h2><a id=\"post-939-__RefHeading___Toc678_2023608668\"><\/a>B) Manejo de archivos de repositorios<\/h2><p>Cualquiera de las aplicaciones \u201capt\u201d basa su funcionamiento en un \u00edndice de paquetes que se guarda localmente y se actualiza cada vez que utilizamos apt\u2026 update. Este \u00edndice conviene actualizarlo frecuentemente. Si queremos instalar un paquete y recibimos un mensaje \u201cnot found\u201d es muy probable que tengamos el \u00edndice desactualizado. Eso se soluciona simplemente ejecutando apt-get\/apt\/aptitude update.<\/p><p>El \u00edndice se crea a partir de los archivos de fuentes que se localiza en:<\/p><ul><li><strong>\/etc\/apt\/sources.list<\/strong> (pr\u00e1ctica recomendada, usar este archivo unicamente para los repositorios oficiales de la distribuci\u00f3n)<\/li><li><strong>\/etc\/apt\/sources.list.d\/ <\/strong>(archivos en general usados de manera individual para cada repositorio agregado. Los archivos de este directorio pueden ser \u201c.list\u201d para el viejo formato y \u201c.source\u201d para el nuevo formato)<\/li><\/ul><h3><a id=\"post-939-__RefHeading___Toc680_2023608668\"><\/a>Formato antiguo de los archivos de fuentes:<\/h3><p>El formato antiguo utiliza una l\u00ednea por cada repositorio, con varios campos separados por espacios.<\/p><p>IMPORTANTE:los archivos del viejo formato deben tener extensi\u00f3n .list<\/p><p>Ejemplo 1:<\/p><pre><code>deb http:\/\/debian.unnoba.edu.ar\/debian\/ bookworm main contrib non-free non-free-firmware\ndeb-src http:\/\/debian.unnoba.edu.ar\/debian\/ bookworm main contrib non-free non-free-firmware\n<\/code><\/pre><p>Ejemplo 2:<\/p><pre><code>deb [arch=amd64 signed-by=\/usr\/share\/keyrings\/googlechrome.asc] https:\/\/dl.google.com\/linux\/chrome\/deb\/ stable main\n<\/code><\/pre><p>Campos<\/p><ol><li>Define el tipo de repositorio, <strong>deb<\/strong> son paquetes con ejecutables compilados,<strong> deb-src<\/strong> indica un repositorio de paquetes fuentes de programas<\/li><li><strong>[]<\/strong> Entre corchetes se puede especificar como segundo campo que no es obligatorio, la arquitectura de los paquetes mediante <strong>arch=&#8230;<\/strong> (amd64, i386, arm, etc), y algunas opciones como <strong>signed-by=&#8230;<\/strong> para especificar la clave p\u00fablica a utilizar para validar la autenticidad y la integridad de los paquetes.<\/li><li>URL del repositorio,<\/li><li>Versi\u00f3n de la distribuci\u00f3n, en agosto 2024 la versi\u00f3n estable es <strong>bookworm<\/strong>. Podemos utilizar indistintamente <strong>bookworm<\/strong> o <strong>stable. <\/strong>Las mejores pr\u00e1cticas indican utilizar unicamente los nombres de la versi\u00f3n y no stable\/testing\/unstable debido a que estas denominaciones hacen referencia a diferentes versiones a lo largo del tiempo, y si colocamos stable, cuando trixie (testing) pase a ser estable vamos a estar actualizando paquetes de bookworm con paquetes de trixie<\/li><li>Componentes, en debian \u201c<strong>main<\/strong>\u201d identifica a los repositorios \u201ccore\u201d de la distribuci\u00f3n, el mantenimiento lo realiza la comunidad debian. \u201c<strong>contrib<\/strong>\u201d son paquetes mantenidos o aportados por colaboradores de la distribuci\u00f3n que no necesariamente son los desarrolladores debian, \u201c<strong>non-free<\/strong>\u201d incluye paquetes con aplicaciones que tienen alguna restricci\u00f3n de patente (Debe estar desactivado si se tiene una pol\u00edtica estricta de licenciamiento de software legal). \u201c <strong>non-free-firmware<\/strong>\u201d se introdujo a partir de bookworm para gestionar un conjunto espec\u00edfico de paquetes que no cumplen con los requisitos estrictos de software libre de Debian, pero que son necesarios para soportar hardware espec\u00edfico. Esto incluye en general drivers propietarios de hardware como nvidia, etc<\/li><\/ol><p>Los mismos campos pero de una manera m\u00e1s clara se pueden cargar en formato nuevo tal como indica el pr\u00f3ximo apartado<\/p><h3><a id=\"post-939-__RefHeading___Toc682_2023608668\"><\/a>Formato nuevo deb822<\/h3><p>La \u00faltima l\u00ednea del ejemplo anterior correspondiente al repositorio de google para instalar los paquetes de google-chrome puede expresarse en formato nuevo de esta manera<\/p><p>Ejemplo del contenido del archivo:<\/p><pre><code>Types: deb<br \/>\nURI: http:\/\/dl.google.com\/linux\/chrome\/deb\/<br \/>\nSuites: stable<br \/>\nComponents: main<br \/>\nArchitectures: amd64<br \/>\nSigned-By: \/usr\/share\/keyrings\/googlechrome.asc<br \/>\n<\/code> #IMPORTANTE:los archivos del nuevo formato deben tener extensi\u00f3n <strong>.sources<\/strong><\/pre><p><br \/>Tambi\u00e9n este archivo admite varios bloques si quiero expresar varios repositorios en un mismo archivo oficialreps.sources<br \/>Ejemplo de contenido del archivo con varios repositorios:<\/p><pre><code># Repositorio principal de Debian\nTypes: deb\nUri: http:\/\/deb.debian.org\/debian\/\nSuite: bookworm\nComponents: main contrib non-free\n\n# Repositorio de seguridad de Debian\nTypes: deb Uri: http:\/\/security.debian.org\/\nSuite: bookworm-security Components: main\n\n# Repositorio de actualizaciones\nTypes: deb\nUri: http:\/\/deb.debian.org\/debian\/\nSuite: bookworm-updates\nComponents: main contrib non-free\n<\/code><code>\n<\/code><\/pre><p>En el caso del nuevo formato, el orden en que escribamos los campos no importa siempre y cuando se encuentren en el mismo bloque. El contenido se especifica con \u201cetiquetas\u201d (Type, Uri, Uris, etc) que no son sensibles a may\u00fasculas y min\u00fasculas pero por convenci\u00f3n se las escribe mediante capitalizaci\u00f3n pascal o de camello para facilitar la lectura humana.<\/p><h2><a id=\"post-939-__RefHeading___Toc684_2023608668\"><\/a>C) Manejo de claves p\u00fablicas para la firma digital de los paquetes<\/h2><p>Los repositorios debian han sido hist\u00f3ricamente muy seguros debido a que los paquete son validados en su autenticidad e integridad de la siguiente manera:<\/p><h3><a id=\"post-939-__RefHeading___Toc686_2023608668\"><\/a>1. <strong>Autenticidad<\/strong><\/h3><ul><li><strong>Definici\u00f3n<\/strong>: La autenticidad garantiza que el paquete proviene de una fuente confiable y que no ha sido modificado por un tercero no autorizado.<\/li><li><strong>C\u00f3mo se Logra<\/strong>: Los paquetes en los repositorios Debian se firman digitalmente usando claves GPG (GNU Privacy Guard). La firma es generada con la clave privada del mantenedor del repositorio o del desarrollador del paquete.<\/li><li><strong>Verificaci\u00f3n<\/strong>: Cuando APT descarga un paquete, verifica la firma usando la clave p\u00fablica correspondiente, que se encuentra en los keyrings de confianza de APT (\/usr\/share\/keyrings\/ o trusted.gpg.d\/). Esto asegura que el paquete fue firmado por una entidad autorizada.<\/li><\/ul><h3><a id=\"post-939-__RefHeading___Toc688_2023608668\"><\/a>2. <strong>Integridad<\/strong><\/h3><ul><li><strong>Definici\u00f3n<\/strong>: La integridad asegura que el paquete no ha sido alterado o corrompido desde el momento en que fue firmado hasta el momento en que se descarga e instala.<\/li><li><strong>C\u00f3mo se Logra<\/strong>: La firma digital incluye un hash criptogr\u00e1fico del contenido del paquete. Si el contenido del paquete cambia despu\u00e9s de ser firmado, el hash no coincidir\u00e1 con el hash incluido en la firma.<\/li><li><strong>Verificaci\u00f3n<\/strong>: Al verificar la firma del paquete, APT compara el hash del contenido del paquete con el hash que fue firmado. Si los dos hashes coinciden, se confirma que el paquete no ha sido alterado desde que fue firmado.<\/li><\/ul><h3><a id=\"post-939-__RefHeading___Toc690_2023608668\"><\/a>Proceso de Firmado y Verificaci\u00f3n<\/h3><ol><li><strong>Firmado del Paquete<\/strong>:<ul><li>El desarrollador del paquete firma el archivo .deb y sus metadatos con una clave privada.<\/li><li>La firma se incluye en el paquete como un archivo adicional, t\u00edpicamente en formato .changes o .dsc.<\/li><\/ul><\/li><li><strong>Verificaci\u00f3n del Paquete<\/strong>:<ul><li>Cuando APT descarga el paquete, verifica la firma usando la clave p\u00fablica.<\/li><li>APT tambi\u00e9n verifica el hash del paquete para asegurarse de que no ha sido modificado.<\/li><\/ul><\/li><\/ol><p>Esto es muy seguro en tanto y en cuanto confiemos en las claves p\u00fablicas que instalamos en el sistema. Sin embargo hay una posible brecha de seguridad en el manejo de paquetes que posibilita validar paquetes de un repositorio con claves de otro. Esto es as\u00ed porque hist\u00f3ricamente debian no discriminaba las claves seg\u00fan repositorios, con lo cual cualquier clave p\u00fablica instalada en el sistema puede usarse para validar cualquier paquete de cualquier repositorio.<\/p><p>Obviamente la brecha de seguridad no es demasiado alta si cada vez que hemos instalado una nueva clave p\u00fablica en nuestro sistema confiamos en de donde proviene. Sin embargo en los \u00faltimos a\u00f1os se desarroll\u00f3 una forma para evitar el problema de la firma cruzada de paquetes. Esta funcionalidad a\u00fan no ha sido implementada en la herramienta m\u00e1s usual hasta el momento de instalaci\u00f3n de claves para los repositorios \u201c<strong>apt-key<\/strong>\u201d, motivo por el cual desaconsejamos completamente el uso de esta aplicaci\u00f3n apt-key.<\/p><h3><a id=\"post-939-__RefHeading___Toc692_2023608668\"><\/a>Problema de seguridad de usar apt-key<\/h3><p>El comando apt-key sube las claves p\u00fablicas en algunas de estas dos locaciones:<\/p><pre><code>\/etc\/apt\/trusted.gpg.d\/\n\/etc\/apt\/trusted.gpg\n<\/code><\/pre><p>Cualquier clave p\u00fablica incluida en estas dos locaciones puede ser utilizada para validar cualquier paquete de cualquier repositorio. Lo que introduce una brecha de seguridad, ya que claves p\u00fablicas de repositorios de terceros pueden utilizarse para firmar paquetes en cualquier mirror o repositorio, incluso potencialmente en un mirror oficial. Esto permitir\u00eda introducir un paquete alterado, firmarlo con una clave de un tercero y que eso sea tomado como un paquete oficial de la distribuci\u00f3n.<\/p><h3><a id=\"post-939-__RefHeading___Toc694_2023608668\"><\/a>Metodolog\u00eda segura para instalar las claves sin usar apt-key<\/h3><p>Existe una metodolog\u00eda m\u00e1s segura, que b\u00e1sicamente lo que hace es poner las claves p\u00fablicas en otra locaci\u00f3n de manera que no sea tomada por defecto para firmar cualquier paquete, sino que solo pueda ser utilizada para validar paquetes de un repositorio determinado, lo que acota la brecha de seguridad a ese \u00fanico repositorio.<\/p><p>Son muchas las maneras de realizar esto. Los pasos para realizarlo como siempre en GNU\/Linux son variados. Los pasos generales son los siguientes:<\/p><ol><li>Localizar la clave p\u00fablica existente en un repositorio oficial o confiable<\/li><li>Bajar la clave p\u00fablica, en formato binario o ascii (Con wget o gpg)<\/li><li>Colocarla en un directorio que NO SEA <strong>\/etc\/apt\/trusted.gpg.d<\/strong> . Se puede colocar en el directorio estandar de claves compartidas del sistema <strong>\/usr\/share\/keyrings<\/strong><\/li><li>Especificar el archivo de fuentes en <strong>\/etc\/apt\/sources.d<\/strong> con la opci\u00f3n <strong>signed-by=\/usr\/share\/keyrings\/miclave.asc<\/strong><\/li><\/ol><h4><a id=\"post-939-__RefHeading___Toc696_2023608668\"><\/a>Ejemplo paso a paso usando bajando las claves con el comando gpg:<\/h4><p>\u00bfCu\u00e1ndo nos damos cuenta que nos falta una clave p\u00fablica? En general esto solo nos pasa con aplicaicones de terceros y no con aplicaciones propias de la distribuci\u00f3n. Por ejemplo si quisi\u00e9semos instalar Spotify, esta es una aplicaci\u00f3n que no es de la distribuci\u00f3n, sin embargo tiene paquetes para debian. Estos paquetes est\u00e1n en un repositorio propio de Spotify, con lo cual deberemos agregar la referencia al repositorio de spotify en nuestros archivos de fuentes.<\/p><h4><a id=\"post-939-__RefHeading___Toc698_2023608668\"><\/a>1) Agregar archivo de fuentes en en \/etc\/apt\/sources.list.d con el siguiente contenido:<\/h4><p>En formato antiguo (Podemos llamarlo spotify.list)<br \/>Ejemplo:<\/p><pre><code>\ndeb http:\/\/repository.spotify.com stable non-free\n<\/code><\/pre><p>En formato deb822 (Podemos llamarlo spotify.sources):<\/p><pre><code>Types: deb<br \/>\nURIs: http:\/\/repository.spotify.com<br \/>\nSuites: stable<br \/>\nComponents: non-free<br \/>\n<\/code><\/pre><p>Cuando ejecutamos la actualizaci\u00f3n del \u00edndice encontramos:<\/p><pre><code>aptitude update\n<\/code><\/pre><pre><code>Hit http:\/\/security.debian.org\/debian-security trixie-security InRelease<br \/>\nHit http:\/\/debian.unnoba.edu.ar\/debian trixie InRelease<br \/>\nHit http:\/\/debian.unnoba.edu.ar\/debian trixie-updates InRelease<br \/>\nDes: 1 http:\/\/repository.spotify.com stable InRelease [3.316 B]<br \/>\nErr http:\/\/repository.spotify.com stable InRelease<br \/>\n<strong>Las firmas siguientes no se pudieron verificar porque su clave p\u00fablica <br \/>no est\u00e1 disponible: NO_PUBKEY 6224F9941A8AA6D1<\/strong><br \/>\nDescargados 3.316 B en 1s (3.608 B\/s)<br \/>\nW: Error de GPG: http:\/\/repository.spotify.com stable InRelease: Las firmas siguientes no se pudieron verificar porque su clave p\u00fablica no est\u00e1 disponible: NO_PUBKEY 6224F9941A8AA6D1<br \/>\nE: El repositorio \u00abhttp:\/\/repository.spotify.com stable InRelease\u00bb no est\u00e1 firmado.<br \/>\nE: Failed to download some files<br \/>\nW: Se produjo un fallo al descargar http:\/\/repository.spotify.com\/dists\/stable\/InRelease: <br \/>\nLas firmas siguientes no se pudieron verificar porque su clave p\u00fablica no est\u00e1 disponible: <strong>NO_PUBKEY 6224F9941A8AA6D1<\/strong><br \/>\nE: Some index files failed to download. They have been ignored, or old ones used instead.<br \/>\n<\/code><\/pre><p>Se pueden bajar las claves p\u00fablicas utilizando varios m\u00e9todos. Se describen solo dos<\/p><h4><a id=\"post-939-__RefHeading___Toc700_2023608668\"><\/a>2) Importar las claves usando gpg<\/h4><p>1) Buscar la clave en un repositorio de claves confiable y conocido<\/p><p>Vamos a buscar la clave en primer lugar en un repositorio de claves p\u00fablicas gpg confiable como el de ubuntu:<\/p><pre><code>gpg --no-default-keyring --keyring \/tmp\/tempring.gpg --keyserver keyserver.ubuntu.com --recv-key 6224F9941A8AA6D1<\/code><\/pre><p>Esto nos bajar\u00e1 a un archivo temporal (\/tmp\/tempring.gpg) la clave correspondiente si es que existe en el repositorio. Podemos ver una descripci\u00f3n, y que fue importada satisfactoriamente en la salida del comando:<\/p><pre><code>\ngpg: caja de claves '\/tmp\/tempring.gpg' creada\ngpg: clave 6224F9941A8AA6D1: clave p\u00fablica \"Spotify Public Repository Signing Key &lt;tux@spotify.com&gt;\" importada\ngpg: Cantidad total procesada: 1\ngpg: importadas: 1\n<\/code><\/pre><h4><a id=\"post-939-__RefHeading___Toc702_2023608668\"><\/a>3) Exportar la clave a un archivo para luego referenciarla desde el archivo de fuentes:<\/h4><pre><code>gpg --no-default-keyring --keyring \/tmp\/tempring.gpg --armor --export 6224F9941A8AA6D1 |tee \/usr\/share\/keyrings\/spotify.asc\n<\/code><\/pre><p>Esta l\u00ednea exporta la clave reci\u00e9n importada en el archivo temporario \/tmp\/tempring.gpg en formato ascii armado (&#8211;armor) y mediante un pipe (|) le enviamos al comando tee la salida para que la grabe en el archivo que especificamos \/usr\/share\/keyrings\/spotify.asc (Recordemos que el comando tee es pr\u00e1cticamente lo mismo que usar \u201c&gt;\u201d para redireccionar la salida estandar a un archivo, pero tenemos la ventaja que nos muestra por consola lo que mand\u00f3 al archivo as\u00ed nos evitamos tener que verificar si el archivo se creo correctamente).<\/p><h4><a id=\"post-939-__RefHeading___Toc704_2023608668\"><\/a>4) Especificaci\u00f3n de la firma con que se validar\u00e1 el repositorio<\/h4><p>Estos dos simples pasos nos dej\u00f3 disponible para su utilizaci\u00f3n un archivo que creamos en el directorio compartido de claves p\u00fablicas. Ahora le deberemos decir al archivo fuente que esa es la firma mediante la cual est\u00e1n firmados los paquetes del repositorio de Spotify. La ventaja con este m\u00e9todo es que la clave p\u00fablica de desarrollador de Spotify solo ser\u00e1 utilizada para validar paquetes de Spotify. Eso lo hacemos modificando los archivos .list o .sources seg\u00fan hayamos elegido utilizar formato viejo o deb822:<\/p><p>a) En formato antiguo (Podemos llamarlo spotify.list)<\/p><pre><code>deb <strong>[signed-by=\/usr\/share\/keyrings\/spotify.asc]<\/strong> http:\/\/repository.spotify.com stable non-free\n<\/code><\/pre><p>b) En formato deb822 (Podemos llamarlo spotify.sources):<\/p><pre><code>Types: deb<br \/>\nURIs: http:\/\/repository.spotify.com<br \/>\nSuites: stable<br \/>\nComponents: non-free<br \/>\n<strong>Signed-By: \/usr\/share\/keyrings\/spotify.asc<\/strong><br \/>\n<\/code><\/pre><p>Alternativamente a la \u00faltima opci\u00f3n b, en el formato deb822 podemos incluir la clave directamente dentro del archivo spotify.sources inmediatamente debajo de \u201cSigned-By\u201d quedando su contenido as\u00ed:<\/p><pre><code>\nTypes: deb<br \/>\nURIs: http:\/\/repository.spotify.com<br \/>\nSuites: stable<br \/>\nComponents: non-free<br \/>\n<strong>Signed-By: <br \/>\n\u00a0\u00a0-----BEGIN PGP PUBLIC KEY BLOCK-----<br \/>\n \u00a0\u00a0mQINBGVWABgBEACmyHqClhrPEupgMG5n14x1nKSSbqed9IDu5+m4vKve5gUlGLmg<br \/>\n \u00a0\u00a0GqmlKjaIWaxKNsd0NrZ5b4tDE9\/o2DLyI95f77zLavfmUqBHun3ksGnQcOTcnHLy<br \/>\n \u00a0\u00a0bKuxxCMGOz4uPMdfZuilI9KoT5m\/O49fCP23eYMlBiqtQ1zMgwM1dnwcrp8OLYDT<br \/>\n \u00a0\u00a0e92AzE8Ghf1PMtkpXwOugMa1HimxSZ4mfoxf7TgkWtpHd3MvehJYXdO4FNE841rI<br \/>\n \u00a0\u00a0zn\/mSR57M9B22s6TEHFET7sajZsO3adtSZVeadYQAbHEQx+BxpWZ9Rd9ynQXvCbQ<br \/>\n \u00a0\u00a0GMSLB6kR7H3rOSQzHENaR2esDJVoMMaV3ny26aQZLi4GtSR58zu6Tlbv9cSnEa19<br \/>\n \u00a0\u00a0nXLJNfxB4u2ZlOpkHg1NjXXCcLLdkIUSvdXFEgBpAfUE1LSa+q6geQ\/YJk18YRQz<br \/>\n \u00a0\u00a0Uq0eL+avBlcze+z\/vabvWaHGP3NTelUaksk3BxyRpOupn5xJHOyNZBwB2lEnBEwP<br \/>\n \u00a0\u00a0xClJaVzN8seFh9Wq0zQmRFoYR8keVgKsC4KUT8ULHX+\/rU8JptnM9X5SSGd1mv8i<br \/>\n \u00a0\u00a0nT3BMu3KFdXtZHNYb6i9gvpvK2jRyqrZ3RvBKHXlA8Lk4PzHe8bC5qGmsjpd6Xgb<br \/>\n \u00a0\u00a0kZKMoemHZe3vJ5dy5g3JQuzrKaks\/wlWR65Vm8nDE\/bd1dECqxxVprD74wARAQAB<br \/>\n \u00a0\u00a0tDdTcG90aWZ5IFB1YmxpYyBSZXBvc2l0b3J5IFNpZ25pbmcgS2V5IDx0dXhAc3Bv<br \/>\n \u00a0\u00a0dGlmeS5jb20+iQJUBBMBCgA+FiEEY8vuyQBmAgiPmxkyYiT5lBqKptEFAmVWABgC<br \/>\n \u00a0\u00a0GwMFCQJRQwAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQYiT5lBqKptGIsw\/\/<br \/>\n \u00a0\u00a0cgeO0BVuOeAXyGdwoQaGnog8fyoNx\/VkiX63BYB\/J6HSIAnun0F4bImXa7kgScyX<br \/>\n \u00a0\u00a0bPjPusTn7y4PEenqWl4Olaos9+B6U3vs1f0RHOCbbxtQUJOtVAFdfsRMWoxCviic<br \/>\n \u00a0\u00a00boW\/5bFaDitBtuai8olbpb1YiA94uC+wGRXMWC3QOAwNPu9YWdon6IwJ4AFnEsS<br \/>\n \u00a0\u00a0NpU3Vlyqrz4ZEwYm6FhW8cvoBHfOwJo3WQ1nKSXFBMSod58o97Lhr308wvIuev7X<br \/>\n \u00a0\u00a0IgGeIZ1+zN39N7BLTaem9ynB8Fk0Mj9WGR+tztuQMcnZeL18rZNkMuzHx7UFY+ir<br \/>\n \u00a0\u00a0GgusbpenRPRaqXpUGES2zPwxpUWIMV3fzoI045ktVNDHVqxcQ67DfQX+bgiUPcY5<br \/>\n \u00a0\u00a0WaeEBSbpiqhqbqUjLtdTZtqyp1wMNHWxnQ4Bd9M2OipeKLThZ3sorFFZqVLmQ0Qs<br \/>\n \u00a0\u00a0CNJ9fgHpCW2LFs4U3fMxyNxbgfTZ0fog5PlEw67bTDloFh6EuFS8gmr6quSaYhor<br \/>\n \u00a0\u00a01IjbJ8iex7lINqNUgZ4PDUYNnciLhYYgmvj8dKq1pZMPkZwTsGjtFnNJtlIE26qN<br \/>\n \u00a0\u00a0sbbV1qADvxhOCZ9QjeQfT20FjaUYeBryh4KqRu2kTg8FTYdOXSINlunLgLk3qW5F<br \/>\n \u00a0\u00a0IQkRR4+KWNraaGRySYGAGIIWc0Zzd8b6mIfJHcooAlc=<br \/>\n \u00a0\u00a0=F5Ek<br \/>\n \u00a0\u00a0-----END PGP PUBLIC KEY BLOCK-----<br \/>\n<\/strong><\/code><\/pre><p>IMPORTANTE: Todo el bloque de la clave p\u00fablica debe estar indentado al menos con un espacio. Para hacer eso podemos usar las facilidades de manejo de bloques de Vim. 1) <strong>[Ctrl][v] <\/strong> nos pone en modo visual de selecci\u00f3n de bloque, seleccionamos todo el bloque que comienza en la l\u00ednea &#8212;- BEGIN PGP hasta &#8212;-END PGP; 2) presionamos <strong>[Shift][i]<\/strong> para insertar en modo bloque; 3) tipeamos un <strong>[Space]<\/strong> ;4) presionamos <strong>[Esc]<\/strong><\/p><h4><a id=\"post-939-__RefHeading___Toc706_2023608668\"><\/a>5) Actualizar \u00edndice<\/h4><p>Si ahora ejecutamos<\/p><pre><code>aptitude update<\/code><\/pre><p>obtenemos la salida esperada:<\/p><pre><code>Hit http:\/\/debian.unnoba.edu.ar\/debian trixie InRelease<br \/>\nHit http:\/\/debian.unnoba.edu.ar\/debian trixie-updates InRelease<br \/>\nHit http:\/\/security.debian.org\/debian-security trixie-security InRelease<br \/>\n<strong>Des: 1 http:\/\/repository.spotify.com stable InRelease [3.316 B]<\/strong><br \/>\n<strong>Des: 2 http:\/\/repository.spotify.com stable\/non-free amd64 Packages [1.670 B]<\/strong><br \/>\nDescargados 4.986 B en 1s (3.585 B\/s)\n<\/code><\/pre><h4><a id=\"post-939-__RefHeading___Toc708_2023608668\"><\/a>Ejemplo paso a paso usando bajando las claves con wget\/curl<\/h4><p>Raramente puede ocurrir que necesitemos usar un repositorio que no necesariamente est\u00e1 en un servidor de claves p\u00fablicas GPG, y necesitamos bajarnos la clave con wget, ponerla en la carpeta \/usr\/share\/keyrings y hacer los mismos pasos 4 y 5 que en el caso anterior usando gpg<\/p><h4><a id=\"post-939-__RefHeading___Toc710_2023608668\"><\/a>1) Localizar con duckduckgo (yo no uso google) la clave<\/h4><p>Lo hacemos a trav\u00e9s de su huella \u00fanica que nos tir\u00f3 el error: <strong>6224F9941A8AA6D1<\/strong><\/p><p>encontramos un link en donde nos dice cual es la url de la clave:<\/p><p><a>https:\/\/community.spotify.com\/t5\/Desktop-Linux\/GPG-Key-should-be-stored-in-extra-keyring\/td-p\/5483610<\/a><\/p><p>IMPORTANTE: no nos tentemos de usar la opci\u00f3n \u201c<strong>apt-key<\/strong>\u201d, registremos la url de la clave, en este caso:<\/p><p><a href=\"https:\/\/download.spotify.com\/debian\/pubkey_6224F9941A8AA6D1.gpg\">https:\/\/download.spotify.com\/debian\/pubkey_6224F9941A8AA6D1.gpg<\/a><\/p><h4><a id=\"post-939-__RefHeading___Toc712_2023608668\"><\/a>2) Nos bajamos la clave que en este caso es una clave en formato ascii armado<\/h4><pre><code>wget https:\/\/download.spotify.com\/debian\/pubkey_6224F9941A8AA6D1.gpg -O <strong>\/usr\/share\/keyrings\/spotify.asc<\/strong>\n<\/code><\/pre><p>Luego de este paso, como ya tenemos la clave en la carpeta de claves p\u00fablicas compartidas podemos continuar con los pasos 4 y 5 de la opci\u00f3n anterior en que us\u00e1bamos gpg para bajarnos las claves de un servidor de claves p\u00fablicas.<\/p><p>IMPORTANTE: Si hacemos esto tenemos que tener mucha confianza en el repositorio que estamos usando<\/p><h4><a id=\"post-939-__RefHeading___Toc714_2023608668\"><\/a>NOTA: Puede suceder que la clave se encuentre en formato binario. En ese caso podemos convertirla a ascii con el comando gpg de la siguiente manera. Las opciones &#8211;armor convierten de binario a ascii, &#8211;dearmor de ascii a binario:<\/h4><pre><code>curl -fsSL https:\/\/xxx.xxx.com\/pubkey_xxxxxx.gpg | gpg --armor -o \/etc\/apt\/keyrings\/xxx.asc\n<\/code><\/pre><p>o con wget de la siguiente manera:<\/p><pre><code>wget -qO - https:\/\/xxx.xxx.com\/pubkey_xxxxxx.gpg | gpg --armor -o \/etc\/apt\/keyrings\/xxx.asc\n<\/code><\/pre><p>Luego todo lo anterior vale desde los pasos 4 y 5<\/p><h2><a id=\"post-939-__RefHeading___Toc664_2023608668_Copy_1\"><\/a>D) Buenas pr\u00e1cticas para realizar un upgrade de release mayor (dist-upgrade o full-upgrade)<\/h2><p>Para evitarnos problemas de dependencias nunca debemos dejar que nuestro sistema de desactualice demasiado. El dinamismo de desarrollo de debian es tan grande, que si estamos usando la distribuci\u00f3n de testing (a la fecha trixie) por ejemplo, ya dos meses es una eternidad para las actualizaciones. Si estamos usando la versi\u00f3n stable (a la fecha bookworm) podemos tener un poco m\u00e1s de tiempo porque las actualizaciones son m\u00e1s lentas. Como recomendaci\u00f3n es necesario hacer una actualizaci\u00f3n cada 2 meses en testing, cada 6 meses en stable.<\/p><p>El cambio de distribuci\u00f3n o versi\u00f3n mayor, puede generar problemas de dependencia, sobre todo en los paquetes de los entornos gr\u00e1ficos. No es raro tener que desinstalar todo el entorno gr\u00e1fico y reinstalarlo luego de un cambio de release mayor. La operaci\u00f3n parece demasiado dr\u00e1stica, pero en realidad no lo es, porque en linux el desinstalador, a\u00fan con la opci\u00f3n \u201cpurge\u201d no borra los datos de los usuarios, las configuraciones existentes en \/home\/fulano . Por ese motivo, luego de la reinstalaci\u00f3n el usuario mantendr\u00e1 todas sus configuraciones ateriores.<\/p><p>Para evitar al m\u00e1ximo posible la ocurrencia de problemas de dependencias, fundamentalmente debemos actualizar frecuentemente y podemos seguir los siguientes pasos:<\/p><h3><a id=\"post-939-__RefHeading___Toc731_2023608668\"><\/a>Paso a paso dist-upgrade<\/h3><ol><li>Actualizar \u00edndices SIEMPRE (<strong>apt update<\/strong>)<\/li><li>Actualizar la versi\u00f3n actual con los \u00faltimos paquetes existentes (<strong>apt upgrade<\/strong>)<\/li><li>Agregar en los repositorios el repositorio de la siguiente versi\u00f3n (Ej: adem\u00e1s de bookworm agregar los repositorios de trixie). Sobre todo si estamos en testing puede ser conveniente dejar los paquetes de la versi\u00f3n estable anterior, ya que a veces ciertos paquetes tardan en pasar de stable a testing.<\/li><li>Desactivar todos los repositorios externos que se encuentran en \/etc\/sources.list.d. Para eso se pueden renombrar los archivos a cualquier otra extensi\u00f3n que no sea .sources o .list y simplemente son ignorados por apt.<\/li><li>Actualizar \u00edndices (<strong>apt update<\/strong>). Veremos que adem\u00e1s del repositorio de la versi\u00f3n que ten\u00edamos apt se baja informaci\u00f3n de los nuevos repositorios agregados. Verificar que no falte ninguna firma. Si estamos usando solo los repositorios oficiales no deber\u00eda faltar nunca una firma.<\/li><li>Realizar la actualizaci\u00f3n de distribuci\u00f3n (<strong>apt full-upgrade<\/strong>)<\/li><li>Es posible que aparezcan problemas de dependencia, en esos casos trataremos de eliminar los paquetes problem\u00e1ticos hasta tanto logremos un upgrade limpio, eliminamos paquetes y luego volvemos a ejecutar <strong>apt full-upgrade<\/strong><\/li><li>IMPORTANTE: No rebootear si se han producido errores en la instalaci\u00f3n de la linux-image o con los archivos de inicializaci\u00f3n init-ramfs (update-initramfs). Se deben arreglar los problemas al menos hasta que estos dos paquetes terminen correctamente. De lo contrario podr\u00eda suceder que la m\u00e1quina no vuelva a bootear. Como siempre se puede reparar luego pero es m\u00e1s complejo.<\/li><\/ol><h3><a id=\"post-939-__RefHeading___Toc733_2023608668\"><\/a>Problemas con los entornos de escritorio<\/h3><p>Los grandes entornos de escritorio como gnome o kde son un conjunto de aplicaciones, librer\u00edas y configuraciones extremadamente complejos. Puede suceder que su complejidad, sobre todo si hac\u00eda mucho que no actualiz\u00e1bamos el sistema, impidan completamente el paso al nuevo release. En ese caso la forma m\u00e1s pr\u00e1ctica para completar el upgrade es<\/p><ul><li>Desinstalar todos los entornos gr\u00e1ficos de escritorio<\/li><li>Realizar un dist-upgrade\/full-upgrade limpio, que culmine sin errores.<\/li><li>Reinstalar los entornos que necesito luego del upgrade limpio.<\/li><\/ul><p>Para realizar esta tarea que puede ser ardua para identificar a todos los paquetes que corresponden, en debian se pueden utilizar el comando tasksel o instalar los paquetes task-xxx-desktop.<\/p><h4><a id=\"post-939-__RefHeading___Toc735_2023608668\"><\/a>Instalaci\u00f3n\/desinstalaci\u00f3n de los paquetes de los entornos de escritorio<\/h4><h5><a id=\"post-939-__RefHeading___Toc737_2023608668\"><\/a>Opci\u00f3n 1: usando tasksel<\/h5><pre><code>tasksel<\/code><\/pre><p>Nos muestra una interfase interactiva donde podemos seleccionar los entornos a instalar\/desinstalar como as\u00ed tambi\u00e9n algunos conjuntos de paquetes para tareas comunes como ser servidor web, etc.<\/p><p><img fetchpriority=\"high\" decoding=\"async\" width=\"681\" height=\"485\" class=\"wp-image-940\" src=\"https:\/\/www.marianoacciardi.com.ar\/wp-content\/uploads\/2024\/08\/word-image-939-1.png\" srcset=\"https:\/\/www.marianoacciardi.com.ar\/wp-content\/uploads\/2024\/08\/word-image-939-1.png 681w, https:\/\/www.marianoacciardi.com.ar\/wp-content\/uploads\/2024\/08\/word-image-939-1-300x214.png 300w, https:\/\/www.marianoacciardi.com.ar\/wp-content\/uploads\/2024\/08\/word-image-939-1-150x107.png 150w\" sizes=\"(max-width: 681px) 100vw, 681px\" \/><\/p><p>Esta es la herramienta que utiliza el instalador la primera vez pero se puede usar todas las veces que necesitemos, si deseleccionamos las que tienen * se desistalan, seleccionandolas se instalan.<\/p><p>El \u00fanico problema que presenta esta utilidad es que no nos muestra f\u00e1cilmente lo que hace y si llega a fallar es m\u00e1s dif\u00edcil entender que est\u00e1 pasando. La ventaja es que es de muy sencilla utilizaci\u00f3n.<\/p><h5><a id=\"post-939-__RefHeading___Toc739_2023608668\"><\/a>Opci\u00f3n 2: usando apt para instalar los conjuntos de tareas deseados<\/h5><p>Esta opci\u00f3n nos permite instalar como cualquier otro paquete los entornos de escritorios con solo saber el nombre que podemos buscarlos con:<\/p><pre><code>aptitude search '~n^task-.*-desktop<\/code><\/pre><p>Esta expresi\u00f3n regular en aptitude search nos traer\u00e1 los nombres de todas las tareas, incluidas con variantes por idioma. Como siempre en GNU\/Linux las aplicaciones son multilenguaje podemos instalar las est\u00e1ndar y luego configurar los idiomas que necesitemos. En este caso las \u201ctask\u201d est\u00e1ndar para los principales entornos de escritorio son:<\/p><ul><li>task-gnome-desktop<\/li><li>task-kde-desktop<\/li><li>task-xfce-desktop<\/li><li>task-lxde-desktop<\/li><li>task-mate-desktop<\/li><li>task-cinnamon-desktop<\/li><\/ul><p>De esta manera nos es muy sencillo desinstalar o instalar el entorno completo, por ejemplo para desinstalar GNOME podemos utilizar:<\/p><pre><code>aptitude remove task-gnome-desktop\n<\/code><\/pre><p>o m\u00e1s dr\u00e1stico<\/p><pre><code>aptitude purge task-gnome-desktop\n<\/code><\/pre><p>y para volver a instalarlo luego de realizar el dist-upgrade limpio ejecutamos:<\/p><pre><code>aptitude install task-gnome-desktop<\/code><\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>by Mariano Acciardi\u00a0 &#8211; 2024\/08\/09 A) Principales comandos D) Opciones m\u00e1s usuales de cada comando B) Manejo de archivos de repositorios Formato antiguo de los archivos de fuentes Formato nuevo deb822 C) Manejo de claves p\u00fablicas para la firma digital de los paquetes Problema de seguridad de usar apt-key Metodolog\u00eda\u2026<\/p>\n<p> <a class=\"continue-reading-link\" href=\"https:\/\/www.marianoacciardi.com.ar\/?page_id=974\"><span>Continue reading<\/span><i class=\"crycon-right-dir\"><\/i><\/a> <\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"_eb_attr":"","footnotes":""},"class_list":["post-974","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.marianoacciardi.com.ar\/index.php?rest_route=\/wp\/v2\/pages\/974","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.marianoacciardi.com.ar\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.marianoacciardi.com.ar\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.marianoacciardi.com.ar\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.marianoacciardi.com.ar\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=974"}],"version-history":[{"count":12,"href":"https:\/\/www.marianoacciardi.com.ar\/index.php?rest_route=\/wp\/v2\/pages\/974\/revisions"}],"predecessor-version":[{"id":1330,"href":"https:\/\/www.marianoacciardi.com.ar\/index.php?rest_route=\/wp\/v2\/pages\/974\/revisions\/1330"}],"wp:attachment":[{"href":"https:\/\/www.marianoacciardi.com.ar\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=974"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}