Archivo de la categoría: Debian

Firewall ¿qué es? ¿para qué sirve?

Hola a todos,

acercándonos a la recta final de esta larga serie de posts sobre configuraciones de red para sistemas Debian, vamos a terminar aplicando un firewall para tener un mejor control sobre el contenido al que tienen acceso los usuarios.


Pero, ¿qué es un firewall? ¿para qué precisamente sirve? Bueno, empecemos por responder la primer pregunta.

Un firewall es un software; un programa de computadora, que restringe tráfico con ciertas características de forma local en un equipo. Es importante notar que las restricciones de tráfico son locales: un firewall (en principio) no afectan a otros equipos.

Estas restricciones de tráfico pueden realizarse por dos motivos principales:

  • Seguridad. Una de las prácticas de seguridad más importantes y básicas es “cerrar” todos los puertos que no usemos en nuestros equipos.
  • Productividad. El administrador de red puede restringir las páginas que son visitadas para evitar distracciones; principalmente en ambientes laborales.

Vamos a detallar un poco lo que quiere decir el primer punto.


Para que un programa pueda conectarse a internet (en general, para que un programa pueda comunicarse con otro remoto), necesita de un “puerto” o “socket”.  Los puertos son una de las varias abstracciones que se hacen para comunicar dos programas que se ejecutan en equipos diferentes.

Esto se debe principalmente al deseo de poder comunicar dos equipos que pueden tener una arquitectura completamente diferente, sistemas operativos diferentes e incluso usar tecnologías diferentes para conectarse a la red.

Por ejemplo, podemos suponer que el servidor que hospeda este blog, es parte de una gran infraestructura distribuída de muchos racks de servidores que ejecutan Linux y se conectan entre sí por Ethernet, pero muy probablemente tienen salida a internet por fibra óptica.

Pero por otro lado, podemos leer el blog usando cualquier tipo de laptop; manufacturada por cualquier fabricante y que ejecuta distintos sistemas operativos; no necesariamente linux. Puede ser un equipo de sobremesa e incluso cualquier variedad de dispositivo móvil. Además, todos estos pueden conectarse a la red usando tecnologías muy diferentes; como USB, Ethernet, WiFi, 3G, 4G, etc…

Para que pueda existir todo este ecosistema de equipos tan diferentes que al final de cuentas pueden comunicarse por red, las redes IP (y muchas otras) utilizan un “stack”, una pila de capas de abstracción; donde cada capa se encarga de abstraer uno o varios aspectos que podrían ser diferentes en los equipos que se comunican: como el sistema operativo, el tipo de la interfaz de red, la velocidad de procesamiento, etc. Este stack a su vez está basado en un estándar (teórico) llamda “modelo OSI”.

Sin entrar en mucho detalle en estas capas de abstracción (las más “profundas” pueden confundir a aquellos que no estén acostumbrados a términos técnicos o no programadores); la primer capa se conoce como la de aplicación. Es decir, esta “capa” no son más que los programas que se conectan a la red. Aquí también están los servidores web, los servidores DNS y DHCP; de los que hemos hablado en post-anterior.

La segunda capa es la de transporte. Esta abstrae los mensajes que producen las aplicaciones; cualesquiera que sean y los envuelven en otro tipo de mensaje. Aquí es donde involucramos a los puertos.

En la mayoría de los casos, una computadora tiene una o dos tarjetas de red; pero también ejecuta muchas más aplicaciones que desean conctarse a internet. Por ejemplo, puede haber múltiples servicios preguntando por actualizaciones de las aplicaciones a las que pertenecen cada cierto tiempo; y cada pestaña de un navegador web, suele solicitar su propia conexión a la red.

Si el sistema operativo le asignara la tarjeta de red completa a la primer aplicación que solicitara acceso a internet, todas las demás quedarían bloqueadas y esperando por tiempos indefinidos por acceder a la red. Sería casi imposible usar un navegador sin obtener frecuentemente un mensaje de error porque “no es posible conectar”.

Para que todas (o la mayoría) de todas estas aplicaciones que desean conectarse al mismo tiempo a la red puedan hacerlo; al solicitar acceso, deben de indicar el número de puerto por el cuál quieren recibir mensajes del exterior.

Podemos pensar en los números de puertos cómo en direcciones que tendrían plataformas en un puerto real. Los botes o barcos que lleguen al muelle (la tarjeta de red), tendrán que dirijirse a una y una sola plataforma específica para anclar y desembarcar. Así, los barcos deben sber a cual de las plataformas deben anclarse y entregar su carga, para que llegue a su destino.

Los mensajes en los que son envueltos los mensajes que salen de la capa de aplicación, indican el número de puerto por el que deben salir; mismo por el que se espera que llegue la respuesta del programa remoto al que está destinado el mensaje original. La capa de transporte tiene algunas funcionalidades adicionales, pero por simplicidad y para los fines de este post; vamos a quedarnos sólo con esta de los números de puerto.

Los números de puerto son tan importantes para la comunicación en redes IP, que de hecho los primeros números de puerto; entre el 1 y el 1024 están reservados y usualmente se requieren privilegios de administrador o súper-usuario para permitir que una aplicación haga uso de ellos. Se dice que están reservados, porque están asociados a programas o protocolos muy comunes en internet; y básicamente se da por hecho que si un mensaje está destinado a un cierto número de puerto reservado, podemos estar casi seguros de que se trata de un mensaje en cierto formato, con cierto protocolo o creado por cierta aplicación.

Algunos de los números de puerto reservado son los siguientes:

  • 20 FTP
  • 21 FTP
  • 22 SSH (SFTP)
  • 23 Telnet
  • 53 DNS
  • 67 DHCP
  • 80 HTTP
  • 161 SNMP
  • 443 HTTPS
  • 666 Doom

Cuando un puerto no está asociado a ninguna aplicación ene ejecución y el sistema recibe un mensaje dirigido a ese puerto, el sistema simplemente descarta el mensaje; pues el destinatario no existe en ese momento. Es como recibir una carta dirigida a alguien que ya no vive en una casa.

Sin embargo, los distintos programas que se ejecutan en el sistema; incluyendo aquellos propios del sistema operativo que se encargan de la administración de la tarjeta de red y la asignación de puertos, pueden ser vulnerables a la recepción de ciertos mensajes con un formato especial que permite explotar vulnerabilidades de estos programas.

Algunos ataques por parte de hackers de sombrero negro, son perpetrados de esta forma; uno de los casos más conocidos recientemente fue heartbleed, que explotó una vulnerabilidad de este estilo en los certificados que usa HTTPS para obtener un pequeño segmento de memoria que permitía desencriptar los mensajes seguros.

Por esta razón es útil restringir el acceso remoto a ciertos puertos; cerrándolos a pesar de que puedan estar ligados a una aplicación en ejecución. Esta es una de las principales funciones de un firewall, una forma de evitar el acceso de terceros a nuestro equipo.

Un firewall puede evitar que mensajes de red que procedan de ciertos puertos, direcciones IP o usuarios no conocidos sean rechazados ANTES de que pasen a la aplicación que los espera, justamente para evitar este tipo de ataques. También permite que el equipo local se concecte a ciertos puertos, direcciones IP o nombres de dominio (aka páginas web), creando limitaciones en las conexiones que se puede crear el equipo.


En resumen: los firewall son un programa de computadora bastante útil que puede ayudarnos a aumentar nuestra seguridad en línea al evitar que ciertos equipos o usuarios remotos; o cualquiera, se conecte con cierta aplicación o número de puerto en nuestro equipo.

También son usados para evitar la intercepción de mensajes en línea y reducir el SPAM. Por lo que antes de simplemente cerrar el diálogo del sistema que te invita a configurar un firewall, deberías considerar hacerlo seriamente (además de actualziar el equipo).

Justo en el siguiente post y último de esta serie, aprenderemos a configurar un firewall en Debian usando IPTables. Otros firewall para otras plataformas son más amigables con el usuario y pueden resultar más fáciles de usar; por lo que si usas otro sistema operativo que no sea Debian, recomiendo arduamente que revises tu configuración para mantenerte seguro.


El límite es la imaginación. Y el número de puertos seguros en un servidor remoto.

Debian: cómo enlazar interfaces de red con NAT y usar una PC como “adaptador” WiFi de otro dispositivo sin capacidad inalámbrica

Hola a todos!

Encaminándonos hacia la configuración de un equipo con Debian como router inalámbrico; vamos a aprender a usar NAT para enlazar interfaces de red. Esto es muy útil cuando por alguna razón no podemos establecer un puente de red por alguna razón.

Vamos a aprovechar el ejemplo para establecer un puente de red entre una interfa inalámbrica y otra cableada; lo que nos puede permitir usar una laptop (por ejemplo) como “adaptador” WiFi de una máquina de escritorio.

Sin más, comencemos.


Vamos a valernos de la configuración de DNS y DHCP que hemos trabajado en semanas anteriores. Si no cuentas con un servidor DNS y/o DHCP en el equipo que quieres usar como “adaptador inalámbrico”, puedes consultar los post de semanas anteriores que he escrito al respecto:

Vamos a usar estos servidores para montar una subred tras la interfaz eth0 (en el tutorial, si prefieres usar una tarjeta de red distinta a la que el sistema identifique como eth0; puedes, hacerlo, solo sustituye eth0 por la tarjeta que deseas usar).

Los siguientes pasos asumen que hay un servidor DNS y un servidor DHCP ejecutándose en el equipo local (a usar como “adaptador inalámbrico”) y que tiene dirección IP 10.5.5.1 (si has configurado tu servidor DNS y/o DHCP en uno o varios equipos con direcciones IP distintas; sólo ten encuenta que la dirección IP que uses en la configuración que sigue sea la que tenga asignada la interfaz que va a compartir internet).


Bien. Lo primero que debemos hacer es habilitar el reenvío de paquetes en el kernel. Para ello, editamos el archivo /proc/sys/net/ipv4/ip_foward

1

Debemos asegurarnos que aparezca un “1” en la última línea del archivo. Si “1” es el único contenido en el archivo, con eso basta.

Ahora, vamos a dar de alta la configuración que enmascara el tráfico de red al ser retransmitido de una interfaz a la otra. En consola, usamos el siguiente comando:

# iptables -t nat -A POSTROUTING -s 10.5.5.0/24 -j MASQUERADE

¡Y listo! Estas configuraciones deberían ser suficientes para servir a otros equipos que se conecten directa o indirectamente (a través de un switch opor ejemplo 😉 ) a nuestro equipo. Este tipo de puentes de red no sólo son útiles entre una interfaz wlan0 y otra eht0 para comparitr wifi a través de ethernet; podemos establecer varios puentes de redes de esta forma.

Si queremos revertir estas configuraciones, basta con deshabilitar la retransmisión de paquetes y editar de nuevo el archivo /proc/sys/net/ipv4/ip_foward de forma que ahora el único contenido (o la última línea) sea “0” (cero en lugar de uno).


La próxima semana, aprenderemos a establecer uno quizá más interesante: usar un equipo con Debian como punto de acceso inalámbrico; aka, “compartir wifi”.

Hasta entonces, que el límite sea la imaginación.

Debian: cómo configurar una PC como servidor DHCP y gestionar una subred con él

Hola a todos!

Continuando con la serie de post para la iniciación en gestión de redes, hoy configuraremos un servidor DHCP en Debian 9.

Antes de empezar, es importante tomar en cuenta que en cada subred debe de haber solamente un servidor DHCP, por lo que debemos tener precaución al hacer estas configuraciones o podemos causar efectos no deseados en otros equipos en la misma subred.

Sin más empecemos.


Lo primero que debemos hacer es instalar un servidor DHCP. Vamos a usar isc. Para ello, hacemos en consola:

# apt-get install isc-dhcp-server

Nota: es posible que debas hacer apt-get update primero.

Al instalar isc-dhcp-server, es posible que nos arroje un error. Esto es normal, ya que la configuración por defecto no especifica ninguna interfaz sobre la que se van a atender peticiones DHCP. Justo lo que debemos hacer ahora es configurar nuestro servidor DHCP.


Editamos el archivo /etc/default/isc-dhcp-server. Agregamos la siguietne líenea:

INTERFACESv4="eth0"

Lo anterior indica que el servidor DHCP atenderá peticiones IPv4 por la tarjeta de red eth0. Podemos coonfigurar el servidor DHCP para IPv6 usando INTERFACESv6 (pueden combinarse ambas), y podemos indicar otra o más interfaces de red para atender peticiones agregado más etiquetas INTERFACES y/o cambiando el valor eth0.


Ahora, vamos a configurar detalladamente cómo queda la configuración de nuestra red. Editamos el archivo /etc/dhcp/dhcpd.conf y agrregamos lo siguiente:

option domain-name "nachintoch.local";
option domain-name-servers 10.5.5.1;
default-lease-time 600; 
max-lease-time 7200;
ddns-update-style none;
authoritative;

subnet 10.5.5.0 netmask 255.255.255.0 { 
        range 10.5.5.2 10.5.5.100; 
        option routers 10.5.5.1; 
        option broadcast-address 10.5.5.255; 
}

Con esto estamos declarando que el nombre de la subred es “nachintoch.local”; pero puede tener cualquier otro nombre que desees.

Indicamos también que los servidores DNS. En mi caso, está alojado en el equipo local, al que le asignaré la dirección IP 10.5.5.1 Podemos incluir más DNS separándolos con coma. Esto nos permite agregar DNS de redes externas (cómo el DNS del gateway), para poder replicar las consultas DNS desconocidas. Puedes omitir este campo si no estas seguro de qué configuración de DNS usar, o puedes consultar el último post en este blog sobre configuración de un serviodor DNS.

Luego se indican los tiempos que durarán las sesiones DHCP e indicamos que el  DHCP es el primario de la subred.

Finalmente, definimos propiamente una subred con dirección IP 10.5.5.0; pero el servidor DHCP sólo asignará direcciones IP entre la 10.5.5.2 y la 10.5.5.100 a los clientes; estamos reservando la dirección 10.5.5.1 como la dirección del equipo local que será el servidor DHCP, DNS y gateway. Se indicará a los clientes que la “puerta de enlace” (gateway) es 10.5.5.1 y la dirección de broadcast es la 10.5.5.255


Las configuraciones suponen que la tarjeta de red eth0 tiene una configuración estatica. Si queremos que esto sea así, una opción es modificar el archivo /etc/network/interfaces para asentar la configuración estática. En este caso es conveniente deshabilitar network-manager. Para esto, el archvo /etc/network/interfaces deberá verse así:

auto eth0
iface eth0 inet static
    address 10.5.5.1
    netmask 255.255.255.0

Recordemos que si queremos que nuestra subred tenga salida a internet, la dirección del gateway debe ser la dirección de un equipo en la súper-red que esté conectada a este equipo por el puerto; en el ejemplo, eth0.

Para deshabilitar network-manager:

# service network-manager stop

Si en lugar de deshabilitar network-manager, queremos hacer uso de él (esta es mi opción preferida por simplicidad), otra opción es abrir la configuraciones de las conexiones de red y fijar la dirección IP de una interfaz como la 10.5.5.1 (o la que queramos usar en nuestro equipo).

Screenshot_20170704_134934


Podemos hacer uso de una configuración IP dinámica, lo más conveniente es indicar en el archivo /etc/dhcp/dhcpf.conf; en la opción option domain-name-servers, la dirección IP del DNS que tenga asignado nuestro equipo y cambiar la dirección estática “10.5.5.1” que usé en los ejemplos por la que se le asigne al equipo por medio de DHCP. Sin embargo, no recomendaría del todo usar esta configuración, ya que:

  • No podemos delegar el DHCP de la red al del gateway de internet, ya que ambos DHCP entrarían en conflico (si la configuración de red no es correcta).
  • El único caso práctico para esto, es cuando tenemos un servior DHCP “esclavo” en nuestra subred, lo que en redes pequeñas puede ser redundante.

Así que por estos motivos, prefiero usar la configuración estática excepto cuando nuestra subred tiene salida a internet (y aún así, es importante configurar el DHCP de la súper-red para que a nuestro equipo siempre se le asigne la misma IP y no tener que estar haciendo cambios a la configuración).


Si estamos usando un servidor DNS como el que indiqué como configurar en el post anteror, es importante recordar que debemos editar su configuración para que corresponda con la que estamos fijando aquí. El DNS debería atender la misma interfaz de red (en este caso, eth0) y usar la dirección estática 10.5.5.1 (en lugar de 192.168.1.111 que usé en el ejemplo anterior).

Una vez que la configuración del  servidor DNS sea correcta, reiniciamos bind:

# servide bind9 restart

Si estamos usnando una configuración estática que NO depende de network-manager, debemos reiniciar networking para que los cambios a /etc/network/interfaces tenga efecto:

# ip addr flush dev eth0
# service networking restart

Estas configuraciones deberían ser suficientes para nuestro servidor DHCP. Para activarlo, sólo hace falta reiniciar el servicio correspondiente para ponerlo en marcha

Reiniciamos el servicio (o la máquina) para que los efectos surtan efecto:

# service isc-dhcp-server restart

Para deshabilitar el servidor DHCP, basta con detener el servicio y re-editar el archivo /etc/default/isc-dhcp-server; comentando la(s) línea(s) INTERFACES que agregamos en el primer paso.

#INTERFACESv4="eth0"

¡Y listo! Ahora podemos configurar la red de cualaquier equipo que se conecte al nuestro por el puerto eth0 o el que sea que configuremos. Podemos aprovechar esta configuración para atender más de un equipo con ayuda de un switch o hacendo un puente de red contra otra tarjeta de red; por ejemplo, una inalámbrica.

Esto lo realizaremos en semanas próximas.

Por lo pronto, que el límite sea la imaginación.

Debian: cómo ejecutar un programa o script al inicio del sistema

Hola a todos!

Para posts futuros, estoy trabajando en tutoriales para usar un equipo con Debian como un equipo de red (router + DNS); sin perder la funcionalidad de poderse usar como un sistema de propósito general. Para esto, podemos requerir de ejecutar una configuración que se inicia convenientemente cada vez que arranca el SO.

Hoy les comparto una forma en la que podemos iniciar un programa cualquiera durante el arranque de Debian. Debian define siete estados de ejecución (conocidos como RunLevel) que podemos usar como referencia para ejecutar un programa cuando el sistema cambia de estado. Estos estados son:

0. Apagado. El sistema está operando, pero ha comenzado el procedimiento de apagado (no reinicio).

  1. Un sólo usuario. Se usa principalmente para operaciones de mantenimiento. En este estado, no es posible utilizar todos los recursos del sistema y/o aplicaciones del usuario.

2 a 5. Multiusuario. La instalación por defecto de Debian no define diferencia alguna entre los estados 2, 3, 4 y 5; permitiéndole al usuario del sistema definir estos estados a su conveniencia.

6. Reinicio. El sistema estaba en un estado entre el 1 y el 5 y se está apagando para volver a iniciar instantáneamente. El estado 6 solo abarca la fase de apagado: cuando el sistema reinicia, pasa a estado 1. Esto es importante; ya que por ejemplo, en sistemas multiboot, al reiniciar el sistema el usuario puede elegir cargar un SO diferente.


Para ejecutar un programa durante el cambio de nivel de ejecución, empezamos por crear un archivo (cuyo nombre es indiferente) en el directorio /etc/init.d

Por ejemplo, el siguiente script se llama /etc/init.d/ejemplo.sh (sólo es una instrucción)

#! /bin/bash
### BEGIN INIT INFO
# Provides: Example loging
# Required-Start: $syslog
# Required-Stop: $syslog
# Default-Start: 1 2 3 4 5
# Default-Stop: 0 6
# Short-Description: Example
# Description: Created & tested by Nachintoch, contact@nachintoch.mx
#
### END INIT INFO
echo "Loging"
case "$1" in
 start)
 echo `date` >> /home/nachintoch/boot_log.txt
 ;;
 stop)
 echo `date` >> /home/nachintoch/shutdown.txt
 ;;
 *)
 echo "Uso: ejemplo.sh {start|stop}"
 exit 1
 ;;
esac
exit 0

Para asegurarnos que el script será ejecutado, cambiamos los permisos del mismo (puede que requieras permisos de super usaurio):

# chmod 755 /etc/init.d/ejemplo.sh

Ahora, este programa (script) no será ejecutado en ningún momento durante el ciclo de vida del sistema, a menos de que sea invocado manualmente… Necesitamos indicarle al sistema el o los niveles de ejecución en los que queremos que se ejecute.

Para ello, debemos crear un enlace simbólico hacia alguno de los descriptores de estados del sistema. Estos son siete sabios de Hyrule directorios que en principio contienen los scripts que se deben ejecutar cuando el sistema cambia a su nivel…. Digo en principio, porque las buenas prácticas prefieren contener los scripts en el directorio que acabamos de estudiar /etc/init.d, pues es posible que queramos ejecutar el mismo programa durante el arraque y el reinicio; por ejemplo.

Estos siete directorios con los scripts de arranque son:

  • /etc/rc0.d
  • /etc/rc1.d
  • /etc/rc2.d
  • /etc/rc3.d
  • /etc/rc4.d
  • /etc/rc5.d
  • /etc/rc6.d

El sistema usa los nombres de los enlaces simbólicos en los siete directorios mencionados, para distinguir arranques (1, 2, 3, 4, 5) de apagados (0 y 6)… Para simplificar las cosas, al crear el enlace simbólico, podemos usar el comando update-rc.d

# update-rc.d ejemplo.sh defaults

Si queremos evitar que los scripts sean invocados cuando cambie el estado del sistema, podemos eliminar los enlaces simbólicos de los directorios /etc/rcN.d o usar update-rc.d nuevamente:

# update-rc.d -f ejemplo.sh remove

Esto conserva el script original /etc/init.d/ejemplo.sh


Antes de terminar, necesito hacer una aclaración importante. Al terminar de explicar los siete niveles de ejecución de Debian, agregué un asterisco; porque si bien lo que dice ese párrafo es cierto, hay un detalle: no necesariamente la interfaz gráfica forma parte de los estados de ejecución. Esta es una diferencia importante que hacemos con sistemas basados en Debian y otros sistemas operativos como Gentoo o Windows, donde es posible definir el arranque del sistema como el inicio de la interfaz gráfica.

Dependiendo el entorno gráfico que utilices, puedes agregar scripts también para ejecutar durante su arranque. En mi caso, uso GTK+ porque Gnome3 es demasiado pesado para mi portatil de museo. Podemos ejecutar programas al inicio de sesión gráfica de un usuario para ejecutar programas que usan la interfaz gráfica. Yo hago esto para iniciar el salvapantalla, no porque me preocupe que una imagen se quede en el monitor para siempre (es LCD), pero porque dejar el escritorio y regresar para ver la matrix es bastante satisfactorio 🙂

Además, recordemos que los estados de ejecución del 2 al 5 son personalizables; por lo que podemos modificar las instrucciones de ejecución del inicio y del arranque del escritorio para definir uno de estos estados como “entorno gráfico”; pero esa será quizá historia de otro día.


Y bien, esto es lo que hacemos para dar de alta y baja potenciales servicios durante los cambios del ciclo de vida del sistema. Espero les sea de utilidad y que el límite sea la imaginación.

Cómo actualizar Debian de cualquier versión anterior a Stretch ( 9 )

Saludos!

Es la primera vez que lo hago, y quizá sea la primera de algunas, pero este es un repost -editado y actualizado- donde explico cómo actualizar Debian a su versión más reciente. El post original fue publicado para explicar cómo actualizar Debian de su versión 6 a la 7 (¡publicado hace 4 años!) y después olvidé mencionar que el mismo procedimiento se puede aplicar para actualizar a 8…

Para no olvidarlo y darle presencia de nuevo al post (que al parecer fue bastante útil en su momento), hago este repost; tratando de mejorar la redacción (tuve que haber aprendido algo en 4 años ¿no?) y mejorar la explicación.

Conmemoro y celebro el lanzamiento de Debian 9 Stretch con esta guía que espero les ayude a actualizar sin problemas su sistema Debian. Ya son más de cinco o seis años desde que empecé a usar Debian en su versión 6, después de varios intentos frustrados de usar otros SO basados en Linux… Incluso, después de conocer Debian traté de usar otras distros, pero ninguna me terminó por convencer. Debian es por mucho mi amigo fiel sistema operativo favorito; pareciera que no hay nada en el horizonte que pueda hacerme cambiar de opinión a corto plazo.

Desde esta trinchera felicito y saludo a todos aquellos que hacen de este sistema operativo una realidad ¡qué viva el open source! Y bien, con lo anterior dicho, pongamos manos a la obra, que esos apt-get no se van a ejecutar solos 🙂

Trivia: ¿sabias que las versiones de Debian llevan nombres de personajes de Toy Story? Stretch es el (la) pulpo morado de la tercer película que al inicio sigue a Lotso; pero se redime al final.


Antes de empezar, toma en cuenta que no hay garantías de que la actualización sea 100% exitosa. Algunos programas pueden tener conflictos al ser actualizados y puede que tengas que resolverlos de forma manual. Sin embargo, en la mayoría de los casos (o para la mayoría de las aplicaciones que uses), no debería haber problemas con la actualización.

Recomendaría hacer un respaldo de emergencia por si las dudas…


Además, les recomiendo arduamente que si tienen acceso a una red cableada de alta velocidad… ¡Úsenla!


Con las precauciones anteriores señaladas, comenzamos:

1. Es conveniente hacer una última actualización rigurosa de la versión actual que tengamos. Esto nos ayudará a evitar conflictos con las aplicaciones instaladas tras la actualización. Para esto, corremos lo siguiente en la consola y con privilegios de administrador:

# apt-get update
# apt-get upgrade

Si todo sale bien, podemos continuar. En caso de que se presenten errores, lo mejor es revisarlos y resolverlos; o la cosa se podría poner más complicada después de actualizar.


2. Migrar repositorios

Los repositorios están definidos en el archivo /etc/apt/sources.list Si no tienes el disco/USB de instalación (como es mi caso), comenta (pon un # al principio de la línea) los orígenes del disco. En el resto, trata de comprobar que existen para la versión stable.

Si en el arhcivo /etc/apt/sources.list puedes ver nombres de versiones previas de Debian (lenny, squeezy, wheezy, jessie…), es recomendado sustituir el nombre que apareza por stable. De esta manera, siempre tendrás la versión más reciente; y cuando eventualmente Debian 10 sea lanzado, puedas actualizar omitiendo este paso.

De hecho, si en lugar de ver nombres de versiones de Debian; ves puros stable, ¡puedes omitir este paso!

Si quieres apuntar rigurosamente a Debian 9, en lugar de la versión previa o stable, escribe stretch.

En mi caso; obtuve el siguiente resultado:

deb http://ftp.utexas.edu/debian/ stable main non-free contrib
deb-src http://ftp.utexas.edu/debian/ stable main non-free contrib

deb http://security.debian.org/ stable/updates main contrib non-free
deb-src http://security.debian.org/ stable/updates main contrib non-free

Nota: Puedes conservar origines con nombres de versiones previas, principalmente para mantener compatibilidad, evitar y resolver problemas con ciertas aplicaciones que causen conflicto. Esto será notorio al finalizar la actualización; si llegas a tener problemas al usar algún programa previamente instalado.


Es conveniente que los mirrors sean próximos al lugar geográfico donde se encuentre el equipo a actualizar. Por ejemplo; yo vivo en México, pero a pesar de esto, la red de la UNAM es algo lenta y prefiero usar el nodo en la universidad de Texas, EE UU. Está más lejos, pero me da mucho mejor rendimiento.


3. Actualizar los paquetes

En una consola con permisos de súper usuario; (podemos añadir el comando sudo al principio de cada comando), usamos

# apt-get update

Automáticamente deberían descargarse los nuevos paquetes.  Si obtienes un error que le dice que no es posible obtener la clave para deb-multimedia; usamos el comando apt-get install deb-multimedia-keyring y acontinuacín apt-get update nuevamente.


3. Actualizar la base del sistema

En la consola, ingresamos

# apt-get upgrade

Antes de proceder; si usas lilo, es recomendable que ingreses el comando lilo en consola. Durante la actualización, lilo puede desconfigurarse, pero llamando el comando lilo la configuración debería volver a un estado correcto.


4. Actualizar el resto del sistema.

Si usas una versión antigua de Debian, de esas que aún usaban OpenOffice por omisión; es posible que tengas problemas al actualizar, pues tu sistema usa ciertas bibliotecas basadas en Java que ya no son compatibles con Debian. Es necesario permitir al proceso de instalación (o hacerlo manualmente) que se remplacen estas bibliotecas obsoletas. De hecho, recomendaría desinstalar OpenOffice por completo antes de continuar.

Si desarrollas con Java habitualmente; no te preocupes, las nuevas bibliotecas no deberían desestabilizar tus herramientas de trabajo.

Si es el caso que usas la versión 6 o una inferior, puede convenirte agregar a /etc/apt/sources.list la siguiente línea:

deb http://ftp.mx.debian.org/debian/ testing main contrib non-free

Y dar en consola los siguientes comandos (como hasta ahora, con privilegios de súper usuario)

# apt-get update
# apt-get upgrade
# aptitude purge oppenoffice.org-common oppenoffice.org
# apt-get install
# apt-get autoremove

 

Antes de continuar, deberás comentar o borrar la línea “testing” que acabamos de agregar a /etc/apt/sources.list


Para todas las versiones: ahora ingresamos en consola y con permisos de súper usuario el comando

# apt-get dist-upgrade

Tras ingresarlo, puede que el sistema se lleve varias horas reemplazando y configurando paquetes. Si no reciben ningún error; todo ha salido bien. Sólo basta llamar al comando lilo; si es que lo usas. Si te ocurre un error, no dejes de leer lo de abajo, quizá encuentres la solución a tus problemas.


¡Listo! Ahora deberías poder reiniciar tu sistema y disfrutar de Debian 9 Stretch.

5. Para comprobar que tu actualización fue exitosa; podemos ingresar en consola los comandos (una vez que hayas reiniciado):

$ lsb_release -a

La salida del comando, debería informarte que estás en Debian 9.


Cómo comenté antes, haber modificado el archivo /etc/apt/sources.list usando stable en lugar de un nombre fijo de versión, nos permite actualizar Debian de forma más flexible, por lo que en el futuro, para actualizar Debian 9 a la versión 10; debería ser posible usando este mismo tutorial saltando el punto 2 (todos los demás son importantes).


UPDATE

Agrego algunas posibles causas de error al actualizar:

  • Elimina software obsoleto incompatible (de ser posible, sino tendrás que intentar parcharlo). Puedes ayudarte del comando # aptitude search ‘~o’ Este nos dará una lista de software programas que han sido eliminados de los orígenes. Para cada uno de los programas en la lista deberemos ejecutar # apt-get purge nombre_programa
  • Elimina orígenes que no den respuesta o conflictuen con paquetes nuevos.
  • Si obtienes un 404 al hacer # apt-get update en algunos paquetes, es posible que el origen que estés usando no se haya sincronizado por completo y debas esperar hasta 24 horas tras haber obtenido el error. Si tras 24 horas aún obtienes un 404, puedes intentar:
    • Descargar el paquete (.deb) no encontrado manualmente desde otro origen e instalarlo con # dpkg -i paquete.deb
    • Cambiar de origen.

¡Debian 9 está increíble!


Vaya, hace cuatro años todavía no inventaba mi feo slogan y terminaba mis publicaciones de golpe, cómo ha pasado el tiempo… Pero ahora existe y me despido como siempre:

Que el límite sea la imaginación. Y que el proyecto Debian siga creciendo.

Steam en Debian 7 “Wheezy”

Saludos!!

Despues de un rato de no aparecerme por aquí, vengo a dejarles un enlace a una pequeña maravilla nos ayuda a instalar la Steam Machine en nuestro equipo con Debian.

https://github.com/GhostSquad57/Steam-Installer-for-Wheezy

Basca con descargar y ejecutar el .deb con el gestor de paquetes para realizar la instalación y voilá!! Steam quedará preparado para jugar ^_^ y nos habremos ahorrado los problemas que muchos nos hemos encontrado al resolver los problemas de dependencias de libc6

Les comento que estoy instalando Steam porque estoy hasta el cuello de trabajo porque un amigo me súper recomendo el juego “The Plan”

http://www.krillbite.com/theplan

Voy a probarlo y si es tal como me lo contó, les dejo el comentario.

Por cierto, estuve trabajando en un sencillo programa en C que permite hacer conexiones entre cliente y servidor por medio de socket asignando puertos, de manera que el servidor pueda -tentativamente- atender a todos los clientes del universo. Me quebré un poco la cabeza resolviendo el problema, puesto que el servidor debe tener un número de puerto fijo para recibir peticiones o de otra manera no podría hacer conexión más que a través de un escaneo de puerto o un poco de suerte.

Voy a tratar de darme otro tiempo para escribir aquí el código de mi solución para compartirla con todos ustedes 🙂

Debian: Cómo actualizar de Squeeze ( 6 ) y anteriores a Wheezy ( 7 )

Saludos!

Cómo sabemos; el proyecto Debian, declaró como estable la versión Wheezy el pasado 4 de mayo del 2013. Si ustedes como yo usan Debian, les recomiendo que actualicen a Wheezy (a menos que usen versiones de prueba). Ésto porque la paquetería de Squeeze está comenzando a perder mantenimiento y sus repositorios se están declarando obsoletos. Ciertos programas ya no funcionan completamente bajo los entornos anteriores debido a que no se tienen las nuevas bibliotecas sólo compatibles con Wheezy.. Aunque por supuesto con el uso de parches todo se puede arreglar; pero creo que lo mejor es siempre tener el software nuevo. Al menos la actualización de Wheezy sí muestra cambios significativos: el kernel es más estable y la consola de carga; por otro lado, es más elegante. Pasa lo mismo con el entorno gráfico de GNOME.

Sin embargo; cabe notar que como el lanzamiento es muy reciente, puede que aún encuentren ciertas inestabilidades, pero éstas no deberían ocurrir en la base del sistema.

Entonces; ¿cómo migramos a Wheezy? El proceso me resultó un poco conflictivo, tuve algunos problemas durante la actualización y les recomiendo arduamente; que si tienen acceso a una red cableada de alta velocidad… Úsenla!

Bien. Para actualizar podríamos simplemente hacer un respaldo de nuestros archivos, descargar la imagen de disco de Wheezy y sobrescribir todo el disco con el nuevo sistema y luego usar Synaptics para descargar los programas que usamos.. Pero esto está muy “chacka” y considero que incluso podemos perder más tiempo (y quizás hasta datos! cuidado!) “actualizando” de ésta manera.

No. Lo que hacemos propiamente es lo siguiente. Antes de continuar, les recuerdo que antes de proceder, deberían hacer un respaldo de emergencia. Yo no lo hice, estaba seguro de que todo estaría bien 🙂 (Sí… Que sangrón!)

1. Migrar repositorios

Los repositorios están definidos en el archivo /etc/apt/sources.list Si no tienes el disco de instalación de Wheezy (como es mi caso), comenta (pon un # al principio de la línea) los orígenes del disco. El resto, trata de comprobar que existen para Wheezy; pero lo importante es sustituir la palabra Squeezy (o el nombre de tu versión previa) por Wheezy

En mi caso; obtuve el siguiente resultado:

#

# deb cdrom:[Debian GNU/Linux 6.0.3 _Squeeze_ – Official i386 DVD Binary-1 20111008-13:01]/ squeeze contrib main

#deb cdrom:[Debian GNU/Linux 6.0.3 _Squeeze_ – Official i386 DVD Binary-1 20111008-13:01]/ squeeze contrib main

deb http://security.debian.org/ wheezy/updates main
deb-src http://security.debian.org/ wheezy/updates main

deb http://http.us.debian.org/debian/ wheezy main non-free
deb-src http://ftp.mx.debian.org/debian/ wheezy main
# deb-src http://ftp.mx.debian.org/debian/ squeeze/updates main contrib
# deb http://backports.debian.org/debian-backports squeeze-backports main
deb ftp://www.deb-multimedia.org wheezy main non-free
deb http://ftp.mx.debian.org/debian/ wheezy main

deb http://mirrors.kernel.org/debian/ wheezy main
deb-src http://mirrors.kernel.org/debian/ wheezy main

deb http://mirrors.kernel.org/debian/ wheezy-updates main
deb-src http://mirrors.kernel.org/debian/ wheezy-updates main

# deb http://ftp.mx.debian.org/debian/ testing main contrib non-free

Los mirrors; traten de adecuarlos a su región de residencia. Como verán, yo uso el de México mx, pero pueden usar otro.

2. Actualizar los paquetes

En una consola con derechos de súper usuario; (podemos añadir el comando sudo al principio de cada comando), usamos

apt-get update

Automáticamente deberían descargarse los nuevos paquetes.  Si obtienen un error que les dice que no es posible obtener la claye para deb-multimedia; usamos el comando apt-get install deb-multimedia-keyring y acontinuacín apt-get update nuevamente.

3. Actualizar la base del sistema

En la consola, ingresamos

apt-get upgrade

Antes de proceder; si usas lilo, es recomendable que ingreses el comando lilo en consola. Ésto por si por algún motivo tu equipo se apaga, puedas cargar el sistema (durante la actualización, lilo puede desconfigurarse, pero llamando el comando lilo solucionamos el problema).

4. Actualizar el resto del sistema.

Aquí es donde podrían atorarse unas horas como fue mi caso. Resulta que Wheezy ya no usa OppenOffice como ofimática, si no LibreOffice y ciertas librerías de Java que usa OppenOffice son incompartibles con Wheezy (no teman desarrolladores Java; yo programo mucho en Java y tuve miedo por ésto. Pero tras la actualización se instalan paquetes de Java nuevos que nos permiten trabajar incluso con NetBeans o Eclipse sin ningún problema 🙂 )Éstas bibliotecas producen un error muy tedioso de encontrar.

Lo que se debe hacer en éste punto para continuar la actualización es ingresar en consola el comando apt-get dist-upgrade

Tras ingresarlo, puede que el sistema se lleve hasta más de una hora reemplazando y configurando paquetes. Si no reciben ningún error; todo ha salido bien. Sólo basta llamar al comando lilo; si es que lo usas. Si te ocurre un error, no dejes de leer lo de abajo.

Por si a alguien le sirve, les dejo qué fue lo que hice tratando de solucionar el problema (sin éxito completo) antes de indicar la solución verdadera.

De acuerdo a lo que medio encontré por la red, agregué a la lista de repositorios el siguiente:

deb http://ftp.mx.debian.org/debian/ testing main contrib non-free

(Por eso aparece comentado arriba). Repetí los pasos

apt-get update

apt-get upgrade

apt-get dist-upgrade

Lo que noté es que reemplazo las bibliotecas del núcleo de Java (entre otras cosas); ésto quizás soluciona el problema de forma parcial, pero no estoy seguro.

Ahora si la solución es la siguiente:

(Si hiciste lo de arriba, debes comentar deb http://ftp.mx.debian.org/debian/ testing main contrib non-free; pues el sistema por sí sólo no permite actualizar con versiones de prueba o inestables (por eso marca un error cuando intentas apt-get dist-upgrade)).

Forzamos la desinstalación de OppenOffice:

aptitude purge oppenoffice.org-common oppenoffice.org

Llamalos

apt-get install

apt-get autoremove

Y finalmente; la llamada esperada:

apt-get dist-upgrade

Si usas lilo; no olvides

lilo

Y redoble de tambores:

reboot

Y presto! Bienvenido a Debian 7 <<Wheezy>>!!

Para comprobar que tu actualización fue exitosa; usamos

lsb_release -a

uname -mrs

Ejemplos de salida de éstas comprobaciones son:

lsb_release -a

LSB Version: core-2.0-ia32:core-2.0-noarch:core-3.0-ia32:core-3.0-noarch:core-3.1-ia32:core-3.1-noarch:core-3.2-ia32:core-3.2-noarch
Distributor ID: Debian
Description: Debian GNU/Linux 7.0 (wheezy)
Release: 7.0
Codename: wheezy

uname -mrs
Linux 3.2.0-4-686-pae i686