Archivo de la etiqueta: Debian

Cómo usar una PC con Debian como punto de acceso inalámbrico a internet

Hola a todos!

Este quizá ha sido el post más difícil de redactar de entre todos los que he publicado en este blog. Antes de publicar tutoriales o manuales de cualquier tipo, siempre realizo los pasos que indico; principalmente cuando estoy experimentando o intentando hacer algo nuevo… Y en este caso, me topé con (¿casi?) todos los problemas que me pude haber encontrado… Al final del post dejaré una bociferación; no solo con el afán de desquitarme, sino también con la esperanza de ayudar a otros que pudieran tener los mismo problemas.

Este es un post particularmente útil para los usuarios de laptop; ya que las computadoras portátiles suelen tener más de una tarjeta de red y necesitamos que la PC a configurar como punto de acceso tenga más de una tarjeta de red. No importa cómo sean las tarjetas de red: sí cuenta con red celular, Wi-Fi, Ethernet; y tampoco importa cómo estén conectadas las tarjetas de red a la computadora; es decir, podemos usar una PC de escritorio con tarjeta ethernet tradicional y un “adaptador” Wi-Fi USB (lo que nos permite usar una PC de escritorio como punto de acceso WiFi) y como acceso a internet podemos usar una interfaz de red virtual USB creada al conectar un dispositivo Android que comparte red por USB.

Vamos a compartir internet usando una PC con Debian de forma muy similar a cómo se hace una “Zona WiFi portátil”  en Android. Antes de continuar, toma en cuenta que algunos gestores de red en Debian ya cuentan con una opción que automatiza este proceso, por lo que es conveniente verificar que puedas hacer esto de entrada con tu gestor de red.

 

 

 

El pase de diapositivas requiere JavaScript.


Bien, con esto dicho; empecemos por detectar las tarjetas de red con las que cuenta el equipo y cómo las reconoce (como las nombra) el sistema; de forma que podamos referirnos a ellas adecuadamente durante el proceso de configuración. Para esto, usamos el comando “lshw -class network”:

bash1

En el ejemplo anterior, podemos ver dos interfaces de red; cuya descripción se encuentra después de cada línea que únicamente dice “* network”. El comando nos proporciona cierta información útil para este procedimiento, como el nombre descriptivo de la interfaz, su identificador, su nombre virtual y su tipo.  Como podemos ver en la imagen, “eth0” es el nombre que recibe una interfaz de Ethernet y “wlan0” es una interfaz de WiFi.

Vamos a usar HostAP para proteger nuestra red inalámbrica, por lo que es necesario asegurarnos de que contamos con HostAP. También HostAP nos provee de un driver que nos ayuda a evitar problemas con la administración de la interfaz de red inalámbrica, pues no todos los drivers soportan actuar como punto de acceso inalámbrico. Sin embargo, existen casos donde no será posible configurar la tarjeta de red como punto de acceso inalámbrico por limitaciones de los dirvers o de la interfaz de red misma. Si tienes problemas al intentar seguir estos pasos, lo más recomendable es buscar si es sabido que tu tarjeta o “adaptador” de WiFi soporta funcionar como punto de acceso inalámbrico.

Así, para asegurarnos que tenemos todos los componentes necesarios, ejecutamos el siguiente comando (con permisos de super usuario):

# apt-get install iw wireless-tools hostapd bridge-utils

Ahora, debemos configurar HostAP. Abrimos el archivo /etc/default/hostapd y editamos la línea que inicia con DAEMON_CONF. Si está comentada (inicia con el caracter ‘#’), la descomentamos (quitamos el ‘#’).

Debe quedar así:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

Ahora, el archivo al que apunta DAEMON_CONF puede no existir en su sistema. De hecho, este tutorial está hecho pensando en que el archivo /etc/hostapd/hostapd.conf no exista. Si existe, puede comentar o eliminar (bajo su propio riesgo) el contenido anterior, o crear un archivo nuevo y usarlo en lugar de hostapd.conf; por simplicidad, recomendaría crearlo en el mismo directorio /etc/hostapd

Debemos editar el arhcivo /etc/hostapd/hostapd.conf (o el que desee crear/editar), para configurar hostapd y definir nuestro punto de acceso inalámbrico. Sin embargo, aquí es importante hacer una observación aquí: la configuración recomendada por la mayoría, es hacer un puente de red usando una tarjeta de red virtual… Sin embargo, no todas los dirvers y no todas las tarjetas de red permiten crear este puente de red. Así que si esto no es posible, podemos dar la vuelta al problema usando redireccionamiento NAT como puente de red.

Si al intentar efectuar estas configuraciones, no podemos usar exitosamente nuestro punto de acceso inalámrico; podemos intentar buscar el mensaje de error:

can't add wlan0 to bridge br0: Operation not supported

Mediante los comandos:

# systemctl status networking.service
# journalctl -xe

Entonces lo más conveniente es usar la configuración con redireccionamiento NAT.


Si usamos un puente de red

Editamos /etc/hostapd/hostapd.conf de la siguiente forma:

interface=<wlan0>
bridge=br0
driver=nl80211
auth_algs=1
ignore_broadcast_ssid=0
logger_syslog=-1
logger_syslog_level=0
hw_mode=g
ssid=<Nachintoch-CT-WAP>
channel=11
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=<"Si encuentras una SSID con el nombre "Nachintoch-CT-WAP" por allí, ten por seguro que esta no es la contraseña y esa no cuenta como software libre ;)">
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
  • En la primer línea; que dice “interface“, asegúrate de escribir el nombre adecuado de la interfaz de red inalámbrica que quieres usar como punto de acceso inalámbrico. En mi caso (y en la mayoría de ellos), es wlan0.
  • En la línea 9; donde dice “ssid”, escribe el nombre que quieres que vean los posibles usuarios de tu red inalámbrica.
  • En la línea 15, escribe la contraseña que quieres usar en tu red inalámbrica. Está contraseña está asociada a un cifrado WPA2, la cual es relativamente segura (cualquier cosa es mejor que WEP, ¿no?). Debe ser de al menos ocho caracteres, pero usar al menos 12 eleva bastante la seguridad y qué mejor que usar caracteres en mayúscula, minúscula, números, símbolos especiales y la sangre de un unicornio.

Ahora, vamos a definir el puente de red br0 que usamos en la configuración anterior pero no necesariamente existe. Una vez más, el tutorial está pensado en que br0 no existe. Si ya tienes un puente de red configurado, recomendaría crear uno nuevo (br1 por ejemplo). En estos casos, asegúrate de usar el puente de red que configures en el archivo /etc/hostapd/hostapd.conf en lugar de br0.

La configuración anterior puede hacerse una sola vez. La sigueinte debe modificarse cada vez que queramos definir el unto de acceso.

Para crear el puente de red, editamos el archivo /etc/network/interfaces. Agregamos lo siguiente:

auto eth0
allow-hotplug eth0
iface eth0 inet static
    address 10.5.5.1
    netmask 255.255.255.0

auto br0
iface br0 inet dhcp
bridge-ports eth0 wlan0

Aquí es importante que sustituyas adecuadamente los nombres de las interfaces de red que estés usando: en mi caso, la salida a internet está asociada a eth0 y pretendo usar wlan0 como punto de acceso inalámbrico.

Además, si usas una configuración de Ethernet estática, debes cambiar la línea 3 para indicar la dirección IP que utilices; ya que si tu gateway no tiene DHCP configurado, no podrás conectar a Internet, y en consecuencia tu red inalámbrica actuará sólo como red local… Lo cual puede ser suficiente si solo quieres levantar un servidor de juego local o una red para un aula.

Es importante tomar en cuenta que no hemos configurado ningún servidor DHCP, por lo que la máquina que quieres usar como AP tiene una IP fija, no podrá proveer más direcciones para los demás dispositivos que se quieran conectar a la red inalámbrcia y los clientes no se podrán conectar automáticamente. Para sortear este problema, puedes crear una subred y configurar tu propio servidor DHCP dentro de la máquina. También puedes asignarles IP fijas si lo deseas; (casi) todos los dispositivos, incluso los Android, permiten cambiar la configuración IP dinámica en estática.


Si usamos redireccionamiento NAT

Editamos /etc/hostapd/hostapd.conf de la siguiente forma:

interface=<wlan0>
driver=nl80211
hw_mode=g
ssid=<Nachintoch-CT-WAP>
channel=11
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=<"Si encuentras una SSID con el nombre "Nachintoch-CT-WAP" por allí, ten por seguro que esta no es la contraseña y esa no cuenta como software libre ;)"> 
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

El resto de las configuraciones deberían funcionar sin mayor problema. Si tienes problemas con las configuraciones que sugiero, recomiendo que revises las capacidades físicas de tu adaptador de red inalámbrico y del driver; pues por ejemplo, quizá no soporta el modo “g”, pero soporta “a”.

Como en el caso de puente de red; podemos dejar la cnfiguración anterior para todas las veces. La siguiente debe efectuarse cada vez que se quiere definir el acces point.

Ahora, debemos configurar el redireccionamiento NAT. Para ello, damos en consola los siguientes comandos:

# iptables --flush
# iptables --table nat --flush
# iptables --delete-chain
# iptables --table nat --delete-chain
# iptables --table nat --append POSTROUTING --out-interface <eth0> -j MASQUERADE
# iptables --append FORWARD --in-interface <wlan0> -j ACCEPT
# sysctl -w net.ipv4.ip_forward=1

Lo siguiente es configurar un servidor DNS y DHCP. Podemos hacer esto como lo he detallado en post anteriores:

Nota: Para crear el access poont, levanté el servidor DHCP (y DNS) sobre la interfaz wlan0 en lugar de eth0 como hice en los ejemplos.


Debemos apagar el gestor automático de la red; pues vamos a usar la configuración fija que acabamos de describir. Para ello, ejecutamos el siguiente comando con permisos de súper usuario:

# service network-manager stop

Si usamos puente de red

Ahora, reiniciamos el servicio de red, limpiamos la configuración de la interfaz a usar como salida e iniciamos HostAP:

# service networking stop
# ip addr flush dev eth0
# service networking start
# service hostapd restart

Si usamos redireccionamiento NAT

Debemos definir; junto con la configuración de DNS y DHCP el modo de asignacón de IPs en la subred y de la interfaz de saida eh0.

Dejo aquí un par de archivos de configuración que puede ayudarlos a automatizar estas tareas:

http://www.nachintoch.mx/libraries/posix/wap-up.sh

http://www.nachintoch.mx/libraries/posix/wap-down.sh


¡Y listo! ahora nuestro equipo ha quedado configurado como un AP y podemos conectarnos a él desde otros. Si la configuración DHCP o IP es correcta también, tanto el equipo configurado, como los que se conecten a él, deberían poder acceder a internet.


Si usamos puente de red

Para terminar con el punto de acceso, debemos comentar las líneas que agregamos a /etc/network/interfaces:

# auto eth0
# allow-hotplug eth0
# iface eth0 inet dhcp

# auto br0
# iface br0 inet dhcp
# bridge-ports eth0 wlan0

Si usamos redireccionamiento NAT

Debemos eliminar la IP estática que hayamos asociado a la interfaz inalámbrica wlan0 y dar de baja el servidor DHCP y DNS.


En ambos casos, debemos comentar también la referencia al archivo de configuración de HostAP para evitar que se cree el puente de red br0 que puede interferir con la configuración de la tarjeta inalámbrica; por lo que comentamos la línea que creamos/editamos en /etc/default/hostapd:

# DAEMON_CONF="/etc/hostapd/hostapd.conf"

Si usamos puente de red; finalmente, restablecemos los servicios (estos son comandos en consola como súper usuario, no comentarios en un script) y damos de baja el puente de red:

# service hostapd stop
# service networking stop
# ip link set br0 down
# service networking start
# service network-manager start

Recordemos que podemos cambiar eth0; no solo por otra interfaz ethernet, si no por cualquier otra; como modem telefónico, 3G, o interfáz virual USB.


Antes de terminar, quiero compartir mi (frustrante) experiencia al escribir este post…

Antes de publicar cualquiera de mis tutoriales, verifico que su contenido sea correcto y realizo los pasos que describo para verificar que obtengo el resultado deseado. Así, puedo agregar comentarios y posible fallas y soluciones a problemas durante el procedimiento.

En este caso, no pude determinar concretamente qué me dio tantos problemas; si el software o el hardware, pues la tarjeta de red original de mi laptop era una Intel PRO/Wireless 3945ABG y pese a varias horas de esfuerzo, no logré ponerla en modo maestro… Aún desconozco si eran limitaciones del driver o del hardware.

Para que podamos configurar una interfaz de red cómo AP (access point), necesitamos que soporte dos modos: AP y master. Esto debe ser tanto por hardware como por driver. El dirver de Debian para esta tarjeta de red es el iwlegacy; contenido en el paquete iwlwifi; el cual NO es software libre, es provisto por Intel. Pero como es un dispositivo viejo, se cosidera obsoleto e Intel ya no le da mantenimiento… Como a mi ATI Raedon X1300… Gracias Nvidia e Intel, Linus Trovals ya ha hecho el gesto…

Busqué parches, intente cambiar las configuraciones que aquí exhibo, quise darle la vuelta al problema de muchas formas y ninguna me llevó a ningún lado (con la Intel 3945ABG). En todos los foros, la respuesta es “consigue otra interfaz de red” o simplemente no había respuesta; y eso que encontré foros de 2008, 2011… Me desesperé y mejor me puse a cocinar…

Mientras cortaba papas en cuadritos para un arroz que al final quedo bastante bueno; pero que necesitaba un poco más de sal, recordé que tenía una interfaz de red inalámbrica botada por allí…

Parece que a muchos de mis colegas les ofende que les pregunten si les pueden arreglar su compuatadora; a mi no me molesta: sí, si puedo, el precio es accesible y garantizo resultados. A veces de plano me dan máquinas descompuestas para vender por partes. Y en otras veces, yo mismo me quedo con piezas que pienso me pueden servir, porqué son piezas que suelo reemplazar en otras máquinas a reparar o que puedo usar yo mismo (en parte, ¡así es cómo he ido mejorando mi laptop!)

Recordé esto y buscando entre mis curiosidades, en efecto encontré una Qualcomm Atheros AR9285.

Regresé a mi escritorio y empecé a googlear de nuevo. Ambas tarjetas de red son PCI-Express; ¡bien! puedo insertarla en el puerto de la motherboard… Bueno, tuve esperanza de que funcionara por hardware, pues no encontré la lista negra ni blanca de interfaces de red inalámbrica soportada por la motherboard de mi equipo. Sin embargo, la Atheros tiene dos antenas y la Intel 3945ABG también es de dos antenas… Eso es buena señal de que puedan ser compatibles.

El driver de la Atheros viene incluido en el kernel de Linux y en Windows también, es bien sabido que soporta los modos AP y master… Empecé a creer que había encontrado la solución a mis problemas y luego empecé a desarmar mi laptop. Levanté el teclado y el horror: la Intel 3945ABG es una tarjeta PCI-Express de tamaño “normal” y la Atheros AR9285 es mini; y el puerto está sobre la motherboard sin otra placa de la que la pudiera sujetar… Pareciera que no podría reemplazarla… Luego, tuve una idea que aún creo es un poco “loca” pero que al final funcionó; y como decimos con mis colegas: si jala, ¡jala!

Bajo el puerto PCI-Express está el chip del bus norte, y las antenas tienen un cable bastante rígido. Así que conecté las antenas a la tarjeta, la inserté en el puerto PCI-Express y con cinta de aislar traté de pegarla al chip del bus norte y a una etiqueta a un costado del chip… ¡es en serio! Y para evitar que la tarjeta se levante o se mueva (por si fuera poco), puse una “plasta” de cinta de aislar de unos 4mm de altura bajo el teclado para que cuando lo cerrara, haga presión sobre la tarjeta y la termine de fijar en su lugar.

Aún tenía la duda de si la motherboard aceptaría la tarjeta, así que sin ensamblar el resto del gabinete de la portatil, la conecté al toma corriente y la encendí. Inicie sesión en Debian e inmediatamente me apareció una notificación diciéndome que “hay conexiones de red disponible”, ¡eureka! Debian reconoció la tarjeta inmediatamente como la interfaz wlan1. Hice lo mismo en Windows 7 y no tan inmediatamente, Windows también instaló los drivers de la AR9285. Funciona todo a la perfección, incluso el Bluethoot en ambos sistemas operativos.

Usando el contenido de este post, volví a configurar HostAP y etc/network/interfaces tal y como aparecen aquí, ejecuté los comandos para reiniciar los servicios y.. nope… no jaló… pero no iba a darme por vencido tan fácilemnte.

Depurando los problemas que tuve; descubrí que desde cierta versión del kernel de Linux, ya no es posible poner una tarjeta ath5 en un puente de red. Así que pensé inmediatamente, bueno; si el kernel no quiere que establezca un puente de red, usaré NAT. Así nació el post para usar una laptop como “adaptador inalámbrico” y con un poco más de esfuerzo, logré establecer un “puente” entre las interfaces eth0 y wlan1 y crear mi AP; unos dos o tres meses después de que empezara a jugar con esto.

¡voalá! por fin pude conectarme a mi nueva red local inalámbrica desde mi celular. No he probado conectarme a una red de 5GHz (pues la AR9285 soporta WiFi n, cosa que no podía la Intel 3945ABG), tengo entendido que las antenas no necesariamente van a darme toda la latencia de los 5GHz (pues la tarjeta original no la soportaba y quizá las antenas no estén diseñadas para eso), pero también es posible que sí, ya que la fecha de manufactura de esta laptop fue cuando el estándar n comenzaba a ganar presencia (en 2006).

Y bueno, ¿qué aprendí? Las tarjetas de red inalámbricas de Intel viejas, no pueden configurarse como AP y siempre hay forma de usar una tarjeta PCI-Express mini en un “slot” de tamaño tradicional. Tengo entendido que en el peor caso; que la tarjeta quede mal colocada o que la motherboard no la soporte, el riesgo de que la tarjeta o el equipo sufran daños, es mínimo; así que creo que vale la pena intentarlo.

Llevo ya aproximadamente dos meses usando este “hack” para instalar la tarjeta de red y no hay señales de que malfuncione o se esté desconectando; al contrario, creo que funciona mejor la vieja Intel.

Bueno, ya, ya me desquité. Estoy feliz porqué el próximo semestre podré usar todas las herramientas de colaboración en el laboratorio de forma más eficiente para los alumnos.

Si estás interesado en conocer el procedimiento para sustituir la tarjeta de red en una máquina como en la mía, estoy trabajando en un post al respecto que aparecerá en el futuro.


Que el límite sea la imaginación… Y el alcance del WiFi pese a la interferencia que causan los muros y los muebles…

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 y DNS: cómo montar un DNS local

Hola a todos!

Continuando con nuestra serie de publicaciones para el administrador Jr de redes, hoy vamos a empezar a aplicar lo que hemos aprendido sobre DHCP y DNS para configurar una PC con debian como router. Este administrará una subred de forma automática (DHCP) y resolverá nombres de dominio (DNS); tanto nombres de equipos dentro de la subred como equipos externos en Internet.

Para que la subred opere de  forma “autónoma”, es necesario configurar un DHCP, pero para usar un DHCP, necesitamos también un DNS. Si nuestra subred tendrá salida a Internet o no nos interesa definir dominios locales; podemos simplemente usar los DNS de Google 8.8.8.8 y 8.8.4.4

Sino, empecemos a configurar nuestro propio servidor DNS.


Empecemos por descargar elservidor DNS bind9. Con permisos de súper usuario, ejecutamos:

# apt-get install bind9 dnsutils

Ahora, vamos a configurarlo. Empecemos por editar el archivo /etc/bind/named.conf.options

options { 
        directory "/var/cache/bind"; 
 
        forwarders { 
                // Google DNS 
                8.8.8.8; 
                8.8.4.4; 
                // DNS Local 
                192.168.1.1; 
        }; 
 
        dnssec-validation auto; 
 
        listen-on port 53 { 127.0.0.1; 192.168.1.111; }; 
        allow-query { 127.0.0.1; 192.168.1.0/24; }; 
        allow-recursion { 127.0.0.1; 192.168.1.0/24; ::1; }; 
        allow-transfer { none; }; 
 
        auth-nxdomain no;
};

La dirección 192.168.1.111 y las subredes 192.168.1.0, las pongo en el ejemplo tal y cómo me han funcionado en mi configuración. Verifica cuál es la IP que tenga asignada tu equipo y reeplaza 192.168.1.111 por la que tenga y el segmento de red (puedes inferirlo por el tercer número en tu IP) por 192.168.1.0 (es común que algunos routers usen 192.168.0.0).


Ahora; si usamos Network Manager (lo más probable si usas un entorno gráfico), es necesario impedir que actualice automáticamente la configuración de DNS o los cambios que hagamos a continuación NO surtirán efecto. Para esto, editamos el archivo /etc/NetworkManager/NetworkManager.conf Ubicamos la sección [main] y agregamos lo siguiente:

[main]
.
.
.
dns=none
.
.
.

Bien, lo siguiente es asegurarnos que en el archivo /etc/nsswitch.conf aparezca una línea con lo siguiente:

hosts:    files dns

Puede haber más configuraciones entre files y dns o después de dns; pero al menos deben aparecer estas dos en la línea hosts. Si no existen, las escribimos.


Ahora, editamos el archivo /etc/bind/named.conf.local para agregar una zona local:

zone "nachintoch.local" {
    type master;
    file "/etc/bind/db.nachintoch.local";
};

Estamos declarando una zona llamada nachintoch.lan; pero puede tener cualquier otro nombre. Sin embargo, la delcaración de los nombres de dominio locales no aparecen aquí, sino en el archivo que indicamos; en este caso /etc/bind/db.nachintoch.lan Puede tener otro nombre; pero es recomendable crear todos estos archivos en el directorio /etc/bind

Podemos probar que el archivo de configuración sea correcto usando el comando:

# named-checkconf

El contenido de un archivo con declaración de nombres de dominio locales debe verse como el siguiente (en este caso es /etc/bind/db.nachintoch.lan, pero puedes usar otro nombre de archivo):

$TTL 3D
@       IN      SOA     nachintoch.local. root.nachintoch.local. ( 
                        2017070501    ; serie 
                                8H    ; periodo actualizacion 
                                2H    ; reintento de transferencia
                                4W    ; periodo caducidad 
                                1D )  ; TTL 
 ;
                NS      ns            ; direccion del DNS

ns                A       192.168.1.111
nachintoch.local. A       192.168.1.111
server            A       192.168.1.111
router            A       192.168.1.1
gateway           CNAME   router 
gw                CNAME   router 
www               CNAME   server

La configuración anterior indica lo siguiente:

  • El dominio que se está configurando se llama “nachintoch.local” y el responsable de su mantenimiento es root (root.nachintoch.local). Podemos cambiar los nombres a gusto/necesidad.
    • El primer número es la serie de la configuración. Cada vez que se modifique este archivo, es importante incrementarlo para evitar anomalías.
    • Indicamos el tiempo con el que deseamos que otros DNS actualicen esta información.
    • Indicamos el tiempo que puede esperar para volver a intentar tranferir la zona que se está configurando.
    • Indicamos el tiempo tras el que haber actualizado se debe borrar la información de la base de datos del DNS porque puede quedar obsoleta.
    • Indicamos el tiempo de vida de la configuración (tras la que se debería de actualizar).
  • La dirección del servidor DNS. Note que no estamos indicando el nobre de dominio tal cual, sino un “nombre de varable” que se define más adelante. En todo caso, el valor se debe resolver a una dirección IP o un nombre de dominio.
  • Indicamos quién es realmente el DNS.
  • Indicamos quién responde por el dominio. Debe llamarse igual que la zona, o el archivo de configuración no tendrá efecto. Note que se debe terminar con un punto ‘.’
  • Indicamos quién es el servidor.
  • Indicamos quién es el gateway-router.
  • Finalmente, aparece un subdominio conocido; www.

Note que una vez más uso en el ejemplo las IP que me funcionaron en mi configuración (192.168.1.111 es la dirección local de mi laptop y 192.168.1.1 es la dirección local de mi enrutador).

Si nuestro equipo ha obtenido su dirección IP por medio de un DHCP, esta dirección puede cambiar y el DNS empezará a otorgar una IP que posiblemente no tiene un servidor web (que es lo que se espera atienda a www). Para resolver esto, podemos usar una configuración de IP estática, o configurar nuestro servidor DHCP para que le asigne siempre la misma IP al equipo. Veremos cómo hacer esto más adelante en posts futuros.

Podemos comprobar que la configuración sea correcta usando:

# named-checkzone nacintoch.local /etc/bind/db.nachintoch.local

Donde “nachintoch.local” es el nombre de la zona tal y como lo indicamos en el archivo /etc/bind/named.conf y “/etc/bind/db.nachintoch.local” es el archivo asociado a la zona también indicado en /etc/bind/named.conf (y el mismo que acabamos de editar y queremos probar).


Finalmente, modificamos el archivo /etc/resolv.conf; el contenido del archivo debería únicamente contener tres líneas como las del ejemplo (en mi caso, uso nachintoch.local porque es la zona que acabo de definir)

domain nachintoch.local
search nachintoch.local
nameserver 127.0.0.1

 


Ahora podemos reiniciar los servicios (sino usas Network Manager, omite network-manager)

# service networking restart
# service network-manager restart
# service bind9 restart

Y finalmente podemos verificar que el DNS funciona usando

nslookup www

Deberíamos ver una respuesta similar a la siguiente:

Server:         127.0.0.1 
Address:        127.0.0.1#53 
 
www.nachintoch.local    canonical name = server.nachintoch.local. 
Name:   server.nachintoch.local 
Address: 192.168.1.111

Por supuesto estamos viendo reflejada la configuración que acabamos de asentar, lo que en efecto significa que hemos terminado.


¡Y listo! Podemos configurar nuestro router para fijar la IP que se asigna por DHCP a nuestro equipo con DNS e incluir esa misma dirección a los DNS que usa el router. De esa forma, otros equipos en la subred podrán acceder a servicios que ofrezcamos en este equipo usando cómodamente nombres de dominio.

Y por si fuera poco, estas configuraciones pueden usarse también para administrar nuestra propia subred, usando la PC como router; esa es la historia de la próxima semana.


Si queremos deshabilitar las configuraciones que acabamos de dar, podemos simplemente comentar las siguientes líneas del archivo /etc/bind/named.conf.options

options { 
        directory "/var/cache/bind"; 
 
        forwarders { 
                // Google DNS 
                8.8.8.8; 
                8.8.4.4; 
                // Local 
                //192.168.1.1; 
        }; 
 
        dnssec-validation auto; 
 
        //listen-on port 53 { 127.0.0.1; 192.168.1.111; }; 
        //allow-query { 127.0.0.1; 192.168.1.0/24; }; 
        //allow-recursion { 127.0.0.1; 192.168.1.0/24; ::1; }; 
        //allow-transfer { none; }; 
 
        auth-nxdomain no;
};

Y reiniciar bind:

# service bind9 restart

Espero les sea de utilidad. A mi en lo personal se me ocurren muchas cosas divertidas que se pueden hacer con un DNS local; y productivas también, pues podríamos ofrecer servicios web (entre otros) en un salón de clase o una oficina.

Que el límite sea la imaginación. Y el periodo de espera entre actualizaciones del DNS.

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.

Cómo gestionar particiones usando GParted con Debian Live

Hola a todos!

Estoy redactando una entrada donde explico cómo instalar un particular SO en una PC, pero en el proceso invito a crear sistemas multiboot; es decir, tener varios sistemas operativos instalados en una misma máquina y poder elegir el deseado al arranque.

Para ello, creí importante crear un post independiente para explicar cómo gestionar particiones en el disco; por lo que estamos aquí. Si tienes curiosidad sobre los sistemas de archivos, te invito a leer el post que he escrito al respecto.

Bien; sin más, comencemos.


Es sumamente importante antes de empezar, realizar un respaldo de toda la información en disco, ya que siempre existe; por diminuto que sea, el riesgo de que algo salga mal durante el procedimiento. En lo personal, he realizado este procedimiento varias veces y nunca he perdido nada realmente; he desconfigurado los cargadores de arranque, pero eso tiene solución.

No me hago responsable por la pérdida de información, programas o Sistemas Operativos o daños en el sistema que puedan ocurrir…. Aunque insisto, he hecho esto varias veces y nunca he tenido mayores problemas.


Primero debemos empezar por contar un un SO en vivo. Hasta el disco de instalación de Windows cuenta con un gestionador de particiones, pero a mi gusto es bastante limitado, por lo que usaré Debian Live; que trae preinstalado GParted, una aplicación para gestionar particiones que a mi gusto es bastante simple y buena. Si no quieres usar Debian Live, puedes optar por cualquier otra distribución de Linux que cuente con GParted u otro gestionador de particiones.

Para descargar Debian Live, vamos a la página de descargas de Debian y elegimos la versión deseada (amd64 para PC de 64 bits o i386 para PC de 32 bits) de Debian Live: https://www.debian.org/CD/live/


Una vez que hemos descargado la imagen del SO en vivo, procedemos a quemarla en un medio adecuado. Las imágenes de Debian Live pueden escribirse indiferentemente un un disco (CD, DVD) o en una memoria USB.

Para quemar un CD, DVD usamos el quemador de nuestra preferencia (por ejemplo el quemador por defecto de Windows, Roxio, Burner, etc…).

Para “quemar” una USB, podemos usar herramientas como Win32 Disk Imager, o desde la consola de un sistema Debian hacer:

# cp ruta/a/la/imagen/descargada /dev/sdX

# sync

Es importante recordar que debemos cambiar la X por la letra que le haya asignado el SO a la unidad de USB en la que queremos grabar la imagen.


Ya que tenemos un medio apropiado con la imagen quemada, lo siguiente será insertar el medio en la máquina con el disco duro donde queremos administrar las particiones. Apagamos la máquina si estaba encendida (que podríamos necesitar; por ejemplo, para insertar el disco primero).

Lo siguiente depende del BIOS; ya que si es “legacy”, mostrará al arranque opciones para seleccionar el medio de inicio deseado. Normalmente esto se hace presionando F2, F8, F10 u F12 al arranque; pero debes verificarlo en tu modelo de PC.

Los BIOS EFI pueden ser un poco más problemáticos en este sentido, por lo que te recomiendo buscar un tutorial específico para tu modelo de PC y versión de BIOS para arrancar desde el medio indicado (el disco o la USB).


Cundo el sistema inicie desde el medio correcto, deberemos ver una pantalla como la siguiente:

menu-d

Podemos iniciar usando la primer opción. Después de un rato (sobre todo usando un disco, esto puede tomar algunos minutos), deberías ver cargado el escritorio del sistema. Si después de varios intentos no logras iniciar adecuadamente, puedes intentar con las opción 686-pae (la tercera). Si no puedes cargar la interfaz gráfica; no podrás usar GParted para administrar las particiones, pero aún podrías hacerlo con programas en modo texto en la consola del sistema.


Una vez que ha cargado el escritorio, abrimos “Gparted” desde el menú de aplicaciones.

Cuando inicie GParted, deberás ver una ventana como esta:

gparted

El diagrama en la parte superior de la ventana, representa la unidad seleccionada. Cada división rectangular de colores es una partición. El relleno amarillo dentro de cada rectángulo representa el espacio ocupado en cada partición. El candado representa que la partición está montada; y puesto que no debemos intentar modificar particiones montadas, no nos permitirá modificarlas a menos que sean desmontadas.

Lo anterior es una razón importante del por que la administración de particiones debe hacerse en vivo y no durante la ejecución de algún SO en alguna de las particiones, pues no podemodeberíamos desmontar la partición del SO; y si es una distribución de Linux, tampoco podemos desmontar la partición del área de intercambio.

Con esto dicho, elegimos el disco al que le queremos modificar las particiones. Para esto podemos desplegar la lista que aparece al hacer clic en el botón que indica la unidad que se está desplegando actualmente; en mi caso /dev/sda.


Supongamos que queremos crear una nueva partición para instalar un nuevo SO. Recuerda que un disco sólo puede tener 4 particiones “físicas” a la vez, por lo que si requieres hacer más de 4 particiones por alguna razón; una de las 4 particiones físicas deberá servir como anfitrión de particiones virtuales. No hay mayor diferencia entre una partición real y una virtual para el SO o los datos que contenga la partición, por lo que esto no representa ningún inconveniente.

Será muy raro que el disco contenga de entrada “espacio sin asignar” suficiente como para alojara un SO. Como podrá ver en la imagen anterior, en mi caso hay 1MB entre mi partición con Windows y la partición con Debian. En mi caso, este espacio ha quedado para siempre sin uso por las características de las particiones que tengo; es posible que al particionar te quede un espacio diminuto similar sin uso entre particiones, no te angusties y déjalo pasar; es sólo 1MB.

Así que, vamos a crear un espacio suficiente como para alojar un SO. Para ello, seleccionamos una partición que tenga suficiente espacio libre (en blanco y no en amarillo) para hacerla pequeña y alojar en ese espacio nuestro nuevo SO. Para ejemplificar, voy a simular que hago pequeña la partición de Windows.

Para esto, damos clic derecho sobre la partición que queremos hacer pequeña y del menú emergente seleccionamos “->| redimencionar/mover”. Aparecerá un cuadro de diálogo como el siguiente:

gparted1


Ahora, ya sea que prefieras usar el slider o ingresar el valor exacto en MB del tamaño de la partición que quieres, puedes hacerlo aquí para crear el espacio vacío para el nuevo SO.

Si quieres ser muy preciso en el tamaño de GB que quieres para el SO, recuerda que 1GB = 1024 MB. Si no te interesa tanto la precisión, simplemente usa 1GB ~ 1000MB y multiplica 1024 o 1000 por el número de GB que quieres dejar para el nuevo SO.

Nota que puedes abrir el espacio para el SO al principio o al final de la partición. En general, es indiferente donde hagas el espacio, incluso esto es conviene; por ejemplo, yo puedo decrementar tanto la partición con Windows como la que tiene Debian en tamaño para tener un espacio suficientemente grande para otro SO; para ello, decrementaría la partición con Windows al final y la partición con Debian al inicio. Las particiones deben ser contiguas: no puedes usar huecos por todo el disco como una sola partición.

También podemos mover una partición hacia los lados si tiene espacio libre para hacerlo. Esto también es bastante útil, ya que por ejemplo; podría también reducir la partición del área de intercambio de Linux para tener más espacio para una nueva partición. Pero como las particiones no pueden ser discontinuas, entonces puedo mover todas las particiones para agrupar todo el espacio libre en un sólo bloque.

No tenemos que preocuparnos por los archivos contenidos en la partición a la hora de moverla, ya que GParted automáticamente se encargará de mover los archivos adecuadamente.

El detalle de reducir una partición con un SO desde la izquierda o moverla;  es que puedes provocar que el SO no inicie, ya que el programa cargador tiene una referencia a la primer dirección de memoria en disco del SO; por lo que al mover la partición o al menos su inicio, movemos los archivos del SO y la referencia que tenga el cargador de inicio ya no será válida y marcará un error al tratar de cargar el SO.

Por esto; si necesitas mover particiones o recortarlas desde el inicio (desde la izquierda) es muy recomendable que al final de este tutorial sigas alguno de estos también si te resulta de utilidad:

Cómo reparar el cargador de inicio cuando hemos movido Windows de su lugar.

Cómo reparar GRUB o identificar SO nuevos y agregarlos al menú de arranque.


Así, al recortar y mover particiones tendremos un nuevo espacio “no asignado” listo para ser formateado. Cabe aclarar que los cambios que hayas realizado hasta este punto no surtirán ningún efecto real en el sistema hasta que presiones el botón “Aplicar”; y aún cuando lo hagas GParted te pedirá que confirmes las acciones pues podrían destruir la información contenida en el disco (por ejemplo al borrar una partición, hacerla más pequeña que lo que ocupan los archivos ya almacenados en ella, etc). Verás algo como esto en la ventana de GParted:

gparted2


Ahora vamos a aprovechar este espacio vacío para crear una partición. Para esto, damos clic derecho sobre el rectángulo gris. Del menú emergente, elegimos “nueva”.

En este punto es necesario aclarar que si tienes 4 particiones; como en mi caso, GParted no podrá crear una nueva partición, pues 4 particiones es el límite físico para crear particiones. Para crear nuevas particiones debemos primero crear particiones lógicas.

Para crear una partición lógica debemos sobreescribir el contenido de una partición existente, por lo que elige bien y respalda archivos antes de continuar.

Si tienes menos de 4 particiones puedes continuar a la siguiente sección omitiendo este punto. Para crear una partición lógica; como he comentado, debemos comenzar por formatear una de las 4 particiones físicas existentes.

Damos clic derecho sobre la partición que queremos que aloje la particiones lógicas y del menú emergente elegimos “formatear cómo” y luego “extendida”. Si no aparece la opción para formatear la partición como extendida debes intenta lo siguiente:

  • Si tienes espacios no asignados, comprueba que ninguno de ellos sea una partición extendida.
  • Desmonta el la partición del área de intercambio.
  • Trata de dejar un espacio de 1MB de espacio no asignado entre particiones.

Usualmente la partición de área de intercambio se trata como a una partición extendida, por lo que es conveniente formatearla directamente como “extendida” en lugar de “linux-swap”. Si usas un SO basado en Linux (excepto Android hasta donde sé), forzosamente necesitas el área de intercambio, por lo que posteriormente deberás crear una nueva dentro de la partición extendida. Lo anterior es importante ya que no es posible contar con más de una partición extendida.

gparted3

Ahora cuentas con una partición extendida. Es sobre esta partición que puedes escribir tantas particiones lógicas como desees.


Para crear una partición en espacio no asignado, hacemos los siguiente:

Damos clic derecho sobre un espacio “sin asignar” y del menú emergente, elegimos “nueva”. Se abrirá el cuadro de diálogo para modificar una partición. En él, ingresamos el tamaño deseado en MB, el sistema de archivos y la etiqueta de la partición si lo deseamos también.

gparted4

Si queremos crear una partición lógica en una partición extendida, el procedimiento es el mismo que el anterior, pero en lugar de seleccionar y dar clic derecho sobre un espacio “sin asignar”, escogerías la partición extendida.

Al final damos clic en “añadir” y veremos la nueva partición indicada en el diagrama del dispositivo.

gparted5


Los cambios que hemos hecho hasta ahora son virtuales; no tendrán efecto hasta de que demos clic en el botón con una paloma verde y grande “aplicar”. Entonces recibiremos una advertencia de que podríamos estar perdiendo información y que los cambios son irreversibles. Si estás seguro de lo que estás haciendo, da clic en aceptar y espera a que GParted termine de formatear tu dispositivo de almacenamiento.


Reitero que si has modificado una partición que contiene Windows podrías necesitar reconfigurar el cargador de Windows usando el disco de instalación. Si has modificado particiones con un SO, podrías necesitar reconfigurar o instalar un cargador de arranque como GRUB. Cualquier sea el caso, podrías encontrar útiles los siguientes post:

Cómo reparar el cargador de inicio cuando hemos movido Windows de su lugar.

Cómo reparar GRUB o identificar SO nuevos y agregarlos al menú de arranque.


Ahora tienes una nueva partición lista en la que puedes almacenar tu información o instalar un SO. La etiqueta de las particiones (por ejemplo, si tenemos sda1, sda2, sda3), serán las mismas siempre que veas el dispositivo; incluso con SO diferentes y corresponden a su orden de creación (sda1 fue la primer partición escrita en el medio, sda2 la segunda y sda3 la última).

Lo anterior es útil porque puedes recordar la etiqueta de la partición que acabas de crear e indicarla al instalar tu nuevo SO y evitar sobrescribir el SO en una partición ya ocupada… Lo cual no debe ser muy lindo.

En fin, espero más de uno encuentre utilidad en esto. Que el límite sea la imaginación… Y la arquitectura de la interfaz SATA conectada al HDD.

Debian: Cómo restaurar GRUB en un sistema multiboot

Hola a todos!

Acabo de platicarles sobre cómo solucioné el problema del arranque en Windows tras haber modificado las particiones de mi computadora. Sin embargo, esa no fue toda la historia, ocurrió otra cosa de la que quiero platicarles. Antes de apagar el sistema mientras ejecutaba el disco vivo (DVD con Kali Linux), decidí ejecutar un “update-grub2” para precisamente evitar lo que pasó con Windows pero a nivel de todos los otros sistemas operativos (antes solo Debian 8 Jessie y por cuestiones del proyecto que les comenté de videojuegos, ahora también Android 4.2.2 JellyBean en una cuarta y última partición).

Sin embargo, al montar la partición con Debian, sda2, y entrar a chroot, no podía ejecutar update-grub2, ni siquiera update-grub ni tampoco llamándolos directamente desde /mnt/usr/sbin/update-grub*

update-grub: orden no encontrada

¿Cómo solucionar este problema? Resulta que tenemos que ser mucho más específicos que sólo montar la partición donde está instalado el sistema operativo que maneja Grub (en mi caso sda2 con Debian). Hay que montar directorios adicionales y copiar un archivo de configuración, que nos permitirán eventualmente ejecutar el update-grub2 dentro de chroot. El procedimiento es el siguiente: (recuerden que necesitamos tener privilegios de súper usuario para ejecutar todos estos comandos sin problema)

  • Hacemos “fdisk -l” para identificar nuestra distribución Linux que maneja Grub (en mi caso sda2 que contiene Debian 8).
  • Luego ingresamos esta serie de comando: “mount /dev/sdXX /mnt && mount –bind /dev /mnt/dev && mount –bind /proc /mnt/proc && mount –bind /sys /mnt/sys && mount –bind /dev/pts /mnt/dev/pts && cp /etc/resolv.conf /mnt/etc/resolv.conf && chroot /mnt”. En sdXX hay que reemplazar XX con el medio y partición donde se encuentre el SO que maneja Grub (en mi caso a2, para completar sda2). Notemos que al final debimos de haber entrado a chroot sobre dicha partición.
  • Ahora que estamos en chroot, hacemos “update-grub2”, o “update-grub”. Debería correr sin problemas.
  • Salimso de chroot “exit”
  • Desmontamos todo “umount /mnt/dev/pts && umount /mnt/dev && umount /mnt/proc && umount /mnt/sys && umount /mnt”
  • Reiniciamos el equipo “reboot”.

¡Y listo! Grub debería cargar todos tus sistemas operativos como lo hayas configurado por última vez de manera exitosa.

Este método debería ser efectivo para recuperar Grub en un sistema que utiliza cualquier distribución(es) de Linux y algún(os) otro(s) SO. La única condición es que el disco vivo que usemos para restaurar, sea de una distro basada en Debian (Debian, Ubuntu, Kali, Knoppix…)

El procedimiento lo encontré tras un rato de frustración en los foros de ubuntu.

Espero les sea de utilidad.

Android: consola de comandos

Saludos!

Les traigo una nueva muy útil para el acceso a comandos que podemos ejecutar directamente sobre el sistema operativo (Android) y aprovechar su kernel (Linux); ya sea por medio de las herramientas de desarrollo, con adb o directamente desde el dispositivo.

Primero, debemos conocer un poco BusyBox; ya que será una de nuestras herramientas principales para sacar el máximo provecho a esta plataforma basada en Linux (Android).

BusyBox es un solo archivo ejecutable que combina varias utilidades de versiones pequeñas de sistemas UNIX. BusyBox generalmente posee menos características que un sistema operativo GNU (por ejemplo Debian [rulez], Fedora, Ubuntu, OpenSuse, RedHat…), pero ofrece las herramientas más útiles y las ejecuta de manera bastante eficiente.

BusyBox es software libre bajo la licencia Pública General GNUv2.

A continuación va una lista de algunos de los comandos de los que disponemos con BusyBox; todos estos deben ser conocidos por usuarios de sistemas tipo UNIX, si hay alguno, varios o ninguno que conozcan de la lista, bastará con una búsqueda en Google para familiarizarse con él:

  • awk
  • bunzip2
  • bzcat
  • bzip2
  • cat
  • clear
  • cp
  • echo
  • fdisk
  • fgrep
  • find
  • fsck
  • ftpd
  • ftpget
  • ftpput
  • grep
  • gzip
  • httpd
  • ifconfig
  • ifdown
  • ifup
  • inetd
  • init
  • ipaddr
  • ipcs
  • length
  • less
  • ls
  • man
  • mv
  • netstat
  • nohup
  • nslookup
  • ping
  • ping6
  • ps
  • pscan
  • pwd
  • reset
  • rm
  • rmdir
  • sed
  • sendmail
  • su
  • tar
  • telnet
  • tftp
  • tftpd
  • traceroute
  • tty
  • vi
  • wc
  • wget

Si leíste todos, mereces una galleta. Bien, podemos instalar BusyBox en Android (para esto es importante tener el dispositivo rooteado) por medio de la aplicación BusyBox disponible en Google Play: https://play.google.com/store/apps/details?id=stericson.busybox&hl=es-419

El kernel de Android incluye también algunos comandos que podemos ejecutar sin necesidad de ser root. Algunos son:

  • echo
  • set
  • export
  • cd
  • pwd
  • exit
  • iftop

Ahora, conocemos algunos comandos comunes de sistemas operativos basados en Linux que podemos ejecutar con Android… Ahora ¿cómo los ejecutamos?

Podemos hacerlo de dos formas: con la ayuda de un ordenador que tenga instaladas las herramientas de desarrollo de Google para Android; o bien, desde el mismo dispositivo con una aplicación que emule la terminal.

Si vamos a acceder a la terminal del dispositivo por medio de las herramientas de desarrollo:

  1. Debemos habilitar el modo de desarrollo en el dispositivo.
  2. Conectamos el cable USB entre el dispositivo y el computador.
  3. Abrimos la consola de comandos e iniciamos el programa adb incluido en las herramientas de desarrollo de Android. Invocamos adb con el comando “adb shell”.
  4. El promt de la consola ahora corresponde al de la consola del dispositivo! Es como si hubieramos iniciado una seción por medio de SSH.

O más facilmente, usando una aplicación que emule la terminal, como esta: https://play.google.com/store/apps/details?id=jackpal.androidterm Simplemente, abrimos la aplicación y estaremos en la consola!

Un detalle más. Así como BusyBox, es posible instalar Debian chroot en Android. Esta es una suite más completa que BusyBox que convierte nuestro dispositivo Android en un dual Android – Debian con todas las capacidades de la distribución de GNU/Linux Debian, incluyendo la capacidad de instalar y ejecutar programas obtenibles por medio de apt-get.

¿Genial no? Hay tanto poder de cómputo en la palma de nuestras manos, que es humillante para la humanidad que los usemos para sólo enviar mensajes, revisar redes sociales y lanzar pájaros contra cerdos verdes. Dejemos volar nuestra imaginación y que esta sea nuestro único límite para todo lo que podemos hacer con nuestros dispositivos móviles: poco distante de lo que podemos hacer con nuestros ordenadores portátiles o de escritorio.

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 🙂

Instlación de PostgreSQL en Debian GNU/Linux

Saludos!

Hace poco tuve que empezar a trabajar usando PostgreSQL. Instalé pgAdmin, pero no sabía como configurarlo. Haciendo una rápida búsqueda por internet, me encontré con un artículo en el que se detalla muy bien el proceso de instalación completo. Les dejo el link:

http://tubasededatoslibre.org/site/instalacion-de-postgresql-en-debian-gnulinux-squeeze/