Saltar al pie de página
Iron Academy Logo
Aprender C#
Aprender C#

Otras categorías

Actualización de paquetes de Linux para desarrolladores de C#

Tim Corey
8m 25s

Cuando desarrollas aplicaciones C# en Linux, los paquetes de tu sistema afectan más que solo al sistema operativo. Los motores de navegador para probar aplicaciones web, el SDK de .NET, las bibliotecas compartidas y los parches de seguridad llegan todos a través del gestor de paquetes. Ejecutar paquetes obsoletos puede causar problemas de compilación, vulnerabilidades o incompatibilidad con las últimas funciones de .NET.

En su video "Updating Linux Packages for C# Developers," Tim Corey explica cómo mantener una instalación de Linux actualizada usando tanto el Administrador de Actualizaciones gráfico como la línea de comandos, como parte de su serie más amplia C# en Linux. En este artículo, cubriremos ambos métodos, desentrañaremos lo que hace cada comando realmente y explicaremos por qué mantener tu sistema actualizado es importante específicamente para el desarrollo con .NET.

Cómo la gestión de paquetes en Linux difiere de Windows

[0:00 - 0:38] Tim comienza abordando un obstáculo común para los desarrolladores que vienen de Windows. En Windows, cada aplicación suele gestionar sus propias actualizaciones. Visual Studio verifica las actualizaciones independientemente de Edge, que se actualiza por separado de los controladores de impresora. No hay un sistema único que rastree todo lo instalado en tu máquina.

Linux adopta un enfoque centralizado. Un gestor de paquetes como apt (Advanced Package Tool) rastrea cada pieza de software instalada desde los repositorios oficiales. Cuando ejecutas una actualización, apt consulta los repositorios para cada paquete instalado de una vez. Las actualizaciones de navegadores, los parches de bibliotecas, las actualizaciones de SDK y las correcciones de seguridad llegan todos por la misma línea de conducción.

Para los desarrolladores de C#, esto tiene implicaciones reales. Tu runtime .NET, las bibliotecas OpenSSL de las que dependen tus llamadas HTTPS y las dependencias a nivel del sistema con las que se vinculan tus aplicaciones son gestionadas por este sistema. Si estás comenzando con C# en una plataforma no Windows por primera vez, saber cómo funciona el gestor de paquetes te salva de perseguir errores de construcción misteriosos más tarde. Un solo apt upgrade mantiene alineada toda la pila, algo que necesitarías coordinar a través de muchos actualizadores separados en Windows.

El GUI: Administrador de Actualizaciones

[0:38 - 1:34] Para los desarrolladores que prefieren un flujo de trabajo visual, Tim explica primero el Administrador de Actualizaciones. Linux Mint incluye uno que funciona de manera similar a Windows Update. Un pequeño icono en la esquina inferior derecha de la barra de tareas lo abre, y verás exactamente lo que se actualizará: Microsoft Edge, Firefox, curl, libssh y más. Cada entrada muestra la versión actual, la nueva versión y el tamaño de descarga.

Todos los paquetes están seleccionados por defecto, aunque puedes desmarcar elementos si quieres omitir una actualización en particular. Eso es útil si se requiere una versión específica de una herramienta para tu proyecto y no quieres que cambie a mitad de sprint.

Haces clic en "Instalar Actualizaciones", ingresas tu contraseña cuando se te solicite y esperas a que el proceso se complete. El mensaje de contraseña existe porque modificar paquetes del sistema es una acción administrativa, lo cual cubriremos en la siguiente sección.

Una cosa que hace bien el GUI: clasifica las actualizaciones por nivel de riesgo y es más conservador sobre los cambios que podrían afectar la estabilidad del sistema. Para un desarrollador nuevo en Linux que solo quiere mantener su entorno saludable sin preocuparse por los detalles, el Administrador de Actualizaciones es una opción sólida por defecto.

Entendiendo sudo

[1:34 - 1:51] Antes de pasar al terminal, Tim se toma un momento para explicar sudo, ya que aparece en cada operación de paquete de línea de comandos. Vale la pena entender qué hace antes de empezar a escribir. La mayoría de las cuentas de usuario de Windows son cuentas de administrador por defecto, dándote pleno acceso para instalar, eliminar y modificar software del sistema. Linux adopta el enfoque opuesto: tu cuenta se ejecuta con permisos limitados, y escalas a privilegios de administrador solo cuando es necesario.

Anteponer un comando con sudo solicita una contraseña para verificar tu identidad. Una vez autenticado, ese comando se ejecuta con privilegios de raíz, y luego los permisos vuelven a la normalidad. La gestión de paquetes (instalación, eliminación o actualización de software) es una operación a nivel del sistema que podría afectar a todas las aplicaciones de la máquina, por lo que el prefijo explícito sudo asegura que no modifiques accidentalmente paquetes del sistema cuando pretendías hacer otra cosa.

Si has usado Windows, piénsalo como similar a ejecutar Visual Studio como Administrador, excepto que en Linux elevas comandos individuales en lugar de aplicaciones enteras. Es un modelo más focalizado.

La línea de comandos: apt update

[1:51 - 2:28] Con sudo cubierto, Tim pasa al terminal. Trabajar allí te da un control más granular sobre el proceso de actualización, y él explica tres comandos en secuencia. Entender qué hace cada uno importa porque, como él señala, los nombres son engañosos.

El primer comando es:

sudo apt update
sudo apt update
SHELL

Una suposición común es que este comando actualiza los paquetes. No lo hace. apt update actualiza el índice de paquetes, un catálogo local del software disponible. Con el tiempo, ese catálogo se vuelve obsoleto a medida que los mantenedores lanzan nuevas versiones, por lo que ejecutar este comando descarga la última versión de los servidores del repositorio. No cambia el software en tu máquina. Es puramente un paso de recopilación de información.

Después de ejecutarlo, apt informa cuántos paquetes tienen versiones más recientes disponibles. Puedes inspeccionar la lista completa antes de comprometerte con cualquier cambio:

apt list --upgradeable
apt list --upgradeable
SHELL

Eso te da una vista línea por línea de cada paquete con una versión más reciente disponible, incluidos los números de versión actual y nueva. Si estás trabajando con .NET en esta máquina, aquí es donde podrías detectar actualizaciones de SDK, parches de runtime o cambios en las bibliotecas de las que depende tu aplicación. Entender qué versiones de .NET están en juego en tu máquina te ayuda a decidir si una actualización en particular es segura de aplicar o necesita pruebas primero.

La línea de comandos: apt upgrade

[3:01 - 3:40] Una vez que el índice está actualizado, Tim se muda al segundo comando, el que realmente instala las versiones más nuevas:

sudo apt upgrade
sudo apt upgrade
SHELL

Presta atención a la nomenclatura: update obtiene la información más reciente, upgrade es lo que cambia los paquetes. Esa división de dos pasos es intencional. Separa el paso de "verificar qué está disponible" del paso de "aplicar cambios", dándote tiempo para revisar, investigar o hacer una copia de seguridad antes de que nada se mueva.

Bajo el capó, upgrade sigue reglas estrictas sobre lo que hará y no hará. Descarga e instala versiones más nuevas de paquetes ya en tu sistema, pero nunca eliminará un paquete existente o instalará uno nuevo que no estaba presente anteriormente. Cuando una versión más nueva necesita una dependencia que no está instalada, upgrade retiene ese paquete en lugar de incluir automáticamente la nueva dependencia.

La ventaja es la previsibilidad. Mantener tu stack de .NET actualizado importa, pero también hacerlo de una manera controlada. El sistema te avisa con un resumen de lo que cambiará y te pide confirmar antes de continuar, por lo que nada sucede sin tu permiso explícito.

La línea de comandos: apt full-upgrade

[3:40 - 4:19] Con las actualizaciones seguras aplicadas, Tim introduce el tercer comando para manejar todo lo que upgrade retuvo deliberadamente:

sudo apt full-upgrade
sudo apt full-upgrade
SHELL

full-upgrade maneja los casos que upgrade evita deliberadamente. Si una actualización del paquete requiere instalar nuevas dependencias o eliminar paquetes en conflicto, full-upgrade lo hará. Las actualizaciones del kernel, cambios importantes en bibliotecas del sistema y parches a nivel del sistema operativo se aplican aquí.

Ejecutar esto como un paso separado te da un enfoque por capas. Si algo sale mal durante la resolución de dependencias complejas, ya has aplicado las actualizaciones más directas y solo necesitas solucionar las más complicadas.

Para equipos que gestionan una cadena de compilación que compila aplicaciones de C# en Linux, este flujo de trabajo escalonado es especialmente relevante. En un entorno CI/CD automatizado, podrías optar por ejecutar solo apt upgrade para estabilidad, reservando full-upgrade para ventanas de mantenimiento programadas donde puedes verificar que todo aún se compile y pase después de cambios más profundos del sistema.

Por qué los recuentos de paquetes difieren

[2:28 - 3:01] Algo que regularmente tropieza a la gente: el Administrador de Actualizaciones podría mostrar 23 actualizaciones, mientras que la línea de comandos informa 79 paquetes. Estos no son diferentes conjuntos de actualizaciones; es el mismo sistema contado de manera diferente.

La interfaz gráfica de usuario agrupa los paquetes relacionados en unidades lógicas. Una sola "actualización de Firefox" en el Administrador de Actualizaciones podría consistir en el binario de Firefox, su paquete de localización, las bibliotecas compartidas de las que depende y un paquete de configuración, cada uno de los cuales es rastreado como un paquete separado por apt. Así que lo que el Administrador de Actualizaciones presenta como una actualización, apt lo lista como cuatro o cinco actualizaciones individuales de paquetes.

Una vez que sepas esto, la discrepancia deja de ser desconcertante. Alguien podría decir "Tenía 100 paquetes para actualizar" para el mismo conjunto de cambios que su Gestor de Actualizaciones muestra como 30 actualizaciones.

Flatpak: Un gestor de paquetes independiente

[5:56 - 6:41] Hay un detalle que es fácil pasar por alto: Linux puede tener múltiples gestores de paquetes instalados, y apt solo conoce los paquetes que él gestiona. Flatpak es una de estas alternativas; es un sistema basado en sandbox que empaqueta aplicaciones con sus propias dependencias, aislándolas del resto del sistema.

Si has instalado software a través de Flatpak, ejecutar apt upgrade no tocará esas aplicaciones. Necesita actualizarlos por separado:

flatpak list
flatpak update
flatpak list
flatpak update
SHELL

El comando flatpak list muestra todo lo instalado a través de Flatpak, y flatpak update lleva esos paquetes a sus últimas versiones. Es una buena práctica verificar regularmente, especialmente si has instalado IDEs, herramientas de bases de datos o aplicaciones de comunicación a través de él.

En Linux, el software puede llegar a través de apt, Flatpak, Snap o incluso instalaciones manuales. Cada uno tiene su propio mecanismo de actualización, por lo que una rutina de actualización completa debería tenerlos en cuenta a todos. Si estás acostumbrado a que cada aplicación incluya su propio actualizador, la diferencia clave aquí es que necesitas saber qué gestor de paquetes posee cada pieza de software y ejecutar el comando de actualización correcto para cada uno.

¿Qué método debería utilizar?

[4:19 - 5:32] Tim opina que ambos enfoques son válidos y que la elección correcta depende de tu flujo de trabajo. Si te sientes más cómodo con una interfaz visual, el Update Manager maneja las mismas actualizaciones que apt a través de una interfaz de apuntar y hacer clic. No es necesario memorizar comandos ni preocuparse por ejecutar pasos en el orden incorrecto. Dicho esto, hay una buena razón para familiarizarse con la línea de comandos: la automatización. Puede crear un script de shell simple que ejecute la secuencia completa de actualización y programarlo para que se ejecute semanalmente usando cron. Un script de tres líneas que mantiene tu sistema actualizado sin que tengas que pensar en ello es el tipo de pequeña inversión que se acumula con el tiempo.

Más allá de la automatización, la línea de comandos te permite aplicar selectivamente ciertos niveles de actualización dependiendo del contexto, o canalizar la salida a otras herramientas para el análisis. Estas opciones no están disponibles a través de la GUI.

Auditar sus paquetes instalados

[7:16 - 7:54] También hay un efecto secundario útil del proceso de actualización: revisar tu lista de actualizaciones sirve también como una auditoría de lo que está instalado en tu sistema. Cuando veas un paquete en la cola de actualizaciones, vale la pena preguntar si todavía lo necesitas.

Puedes ver Firefox en la lista de actualizaciones cuando principalmente usas Edge, o viceversa. Tener dos navegadores instalados para realizar pruebas entre navegadores de aplicaciones web tiene sentido, pero el principio más amplio es que la lista de actualizaciones expone la huella completa de su entorno de desarrollo. Herramientas obsoletas de un proyecto anterior, bibliotecas de desarrollo que se incluyeron como dependencias y nunca se limpiaron, paquetes que olvidó haber instalado hace seis meses: todos aparecen aquí.

Ese tipo de mantenimiento da más frutos de lo que esperarías. Un entorno de desarrollo limpio es más fácil de replicar entre los miembros del equipo, más sencillo de containerizar y menos propenso a producir errores de "funciona en mi máquina". Si tu caja de Linux tiene paquetes instalados que tu Dockerfile no incluye, podrías estar dependiendo de algo que no existirá en producción. Familiarizarse con implementar aplicaciones C# en Docker hace que esta conexión entre tus paquetes locales y tu entorno de producción sea mucho más concreta.

Conclusión

[7:54 - 8:25] Como demuestra Tim, todo el proceso —ya sea a través del Administrador de Actualizaciones o la línea de comandos— toma unos pocos minutos como máximo y te protege de acumular deuda técnica a nivel del sistema operativo. Convertirlo en un hábito semanal en lugar de una tarea ocasional mantiene tus herramientas de desarrollo, dependencias de tiempo de ejecución y bibliotecas del sistema alineadas, y esa alineación es lo que hace que el desarrollo en C# multiplataforma sea confiable en lugar de frustrante.

Para obtener una guía completa paso a paso, consulta el video de Tim Corey en su canal de YouTube.

Hero Worlddot related to Actualización de paquetes de Linux para desarrolladores de C#
Hero Affiliate related to Actualización de paquetes de Linux para desarrolladores de C#

Gana más compartiendo lo que te gusta

¿Creas contenidos para desarrolladores que trabajan con .NET, C#, Java, Python o Node.js? ¡Convierte tu experiencia en un ingreso extra!

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame