Cómo montar un servidor para con Debian en un portátil viejo


Cómo montar un servidor para con Debian en un portátil viejo

Llevo tiempo queriendo probar más LLMs de una manera sencilla y cómoda para mí y, de paso, permitir que en casa puedan empezar a trastear.

Por eso, cuando conseguí un día libre (es decir, 100% sin compromisos y solo para mí), “secuestré” a mi colega José (que también tenía interés) y pillé un portátil de gaming que tengo muriéndose de risa en un rincón para montar un servidor que soporte modelos de lenguaje grande (LLMs) utilizando Debian como sistema operativo y Ollama para la gestión de los modelos.

He dividido el proceso en 2 artículos, para centrarme en lo importante de cada fase:

  1. tener un servidor con Debian en un portátil viejo,
  2. montar un servidor de modelos grandes de lenguaje (LLMs) con acceso desde la red local,

Creo que cualquiera puede imaginar lo que es tener un portátil abierto y encendido en casa solo para usarlo desde la red local… así que decidí configurar Debian sin entorno gráfico, con la hibernación de sistema apagada para poder tener el portátil en un soporte para mantenerlo cerrado, en vertical y con bastante buena ventilación.

Te cuento cómo.

1. Instalación de Debian sin entorno gráfico

Comienza instalando Debian sin entorno gráfico y asegúrate de habilitar el servidor SSH durante la instalación. Esto permitirá que administremos el servidor de manera remota sin necesidad de un entorno de escritorio.

2. Configuración general del sistema

Accede como usuario root para realizar la configuración general del sistema. Ten en cuenta que algunas configuraciones y la instalación de software deben realizarse como usuario root para tener los permisos necesarios. Usaremos el siguiente comando para cambiar a root:

su -

Después usa el siguiente script para configurar las fuentes de software de Debian:

#!/bin/bash

mv /etc/apt/sources.list.d/contrib.list /etc/apt/sources.list.d/contrib.list.bak

DIST=$(lsb_release -c -s)
echo "deb http://deb.debian.org/debian ${DIST} main contrib non-free-firmware non-free" >> /etc/apt/sources.list
echo "deb-src http://deb.debian.org/debian ${DIST} main contrib non-free-firmware non-free" >> /etc/apt/sources.list
echo "deb http://deb.debian.org/debian-security/ ${DIST}-security main contrib non-free-firmware non-free" >> /etc/apt/sources.list
echo "deb-src http://deb.debian.org/debian-security/ ${DIST}-security main contrib non-free-firmware non-free" >> /etc/apt/sources.list
echo "deb http://deb.debian.org/debian ${DIST}-updates main contrib non-free-firmware non-free" >> /etc/apt/sources.list
echo "deb-src http://deb.debian.org/debian ${DIST}-updates main contrib non-free-firmware non-free" >> /etc/apt/sources.list
apt -qy update

[!question] ¿Por qué usamos un script?

Si te fijas, el script tiene una línea que pone:

DIST=${lsb_release -c -s}

Esa línea recoge la versión de Debian que hemos instalado y personaliza las fuentes de software para la instalación que estamos configurando.

Con las fuentes de software ya configuradas, instalamos sudo para facilitar las acciones que requieran permisos de superusuario ya que podremos hacerlas desde nuestro usuario sin privilegios de manera atómica (solo para el comando al que acompañe).

Para instalar sudo usamos el siguiente comando:

apt -qy install sudo

Y, por supuesto, nos toca asignarlo a nuestro usuario con:

usermod -aG sudo <user>

donde <user> se sustituye por nuestro usuario.

Con todo esto, ya podemos “cerrar” la sesión de root con:

exit

3. Configuración de una IP fija en la red local

Como todo esto lo estamos haciendo para poder acceder a Ollama en remoto… necesitamos que la IP del portátil sea fija así que… vamos a configurarla.

La IP se configura en el archivo /etc/network/interfaces y, solo por lo que pudiera pasar, vamos a hacer una copia de seguridad del archivo con:

sudo cp /etc/network/interfaces /etc/network/interfaces.bak

Ahora ya podemos ser unos manazas, quiero decir, que ya podemos meter mano, quiero decir, que ya podemos modificar el archivo.

Para ello, lo abrimos con nano (aunque si prefieres vim asegúrate de saber salir después):

sudo nano /etc/network/interfaces

Busca la interfaz de red que te interese. Será una de las líneas en las que pone:

iface ... dhcp

Cambia dhcp por static y debajo (e identado, ¡ojo!), escribe lo siguiente:

    address 192.168.1.100 # o la IP que prefieras
    netmask 255.255.255.0
    gateway 192.168.1.1 # o la que corresponda a la IP que hayas puesto

Como pequeño extra, puedes cambiar los DNSs por defecto por los de CloudFlare (1.1.1.2 y 1.1.1.1) y/o los de Google (8.8.8.8 y 8.8.4.4). Esto se hace en el archivo /etc/resolv.conf y puedes resolverlo (pun intended) con el siguiente comando:

sudo cp /etc/resolv.conf /etc/resolv.conf.bak && sudo echo -e "nameserver 1.1.1.2\nnameserver 1.1.1.1\nnameserver 8.8.8.8\nnameserver 8.8.4.4" > /etc/resolv.conf

[!question] ¿Por qué cambiar los DNS que vienen por defecto?

Modificar los servidores DNS nos permite usar servicios de resolución de nombres más rápidos y seguros que los predeterminados por el proveedor de servicios de internet (ISP). Esto puede mejorar la velocidad de navegación y ofrecer una capa adicional de privacidad al utilizar servidores DNS públicos como los de Cloudflare (1.1.1.1) y Google (8.8.8.8).

En cualquier caso, para que los cambios entren en funcionamiento, necesitas reiniciar el servicio de red con:

sudo systemctl restart networking

4. Deshabilita la hibernación del sistema

Como he comentado, quiero usar el portátil como servidor en la red local. No quiero que ocupe mucho espacio así que lo voy a tener cerrado y en vertical en un soporte para portátiles.

Por defecto, los portátiles entran en hibernación cuando los cerramos, así que toca deshabilitar la hibernación del sistema para que siga en funcionamiento aunque esté cerrado.

Para ello, lo primero es, como siempre, ¡copia de seguridad! En este caso, del archivo /etc/systemd/sleep.conf:

sudo cp /etc/systemd/sleep.conf /etc/systemd/sleep.conf.bak

Después abre el archivo:

sudo nano /etc/systemd/sleep.conf

Busca la línea en la que pone [Sleep] y, justo debajo, añade las siguientes líneas:

AllowSuspend=no
AllowHibernation=no
AllowSuspendThenHibernate=no
AllowHybridSleep=no

Puede que las líneas existan ya, bien comentadas o bien con los valores a yes. Lo importante es que el archivo quede con las líneas como te las he puesto.

Con esto ya tenemos un servidor con Debian en un portátil viejo y podremos instalar cualquier tipo de servicio. En nuestro caso, un servicio con Ollama e interfaz web.

Pero eso, como suele decirse, es otra historia.