Servidor para install partys
Copyrigth y Licencia
Copyright (c) 2007-2008 Ales Zabala Alava <shagi@gisa-elkartea.org>, Maider Likona Santamarina <pisoni@gisa-elkartea.org>
Es posible copiar, distribuir y/o modificar éste documento bajo los términos de la FDL (Free Documentation License), versión 1.2 o posterior.
Introducción
Para la install party del Openaldia 2007 (Un festival de software libre de Donostia) nos encontramos con las siguientes necesidades:
- Había que montar una red local, simplificando al máximo su uso.
- Todos los asistentes debían tener conexión a Internet.
- No había mucho ancho de banda, por lo que fue necesario minimizar el tráfico de descarga.
- Necesitaríamos acceso a un repositorio para tener todos los programas posibles accesibles. Descargarlo directamente de Internet lo ralentizaría mucho. Además al tener un repositorio luego podríamos generar de manera sencilla CDs o DVDs de Debian GNU/Linux.
Cuando terminamos de configurar el servidor nos dimos cuenta que esas mismas necesidades se repetirían en muchas install partys, por lo que decidimos escribir esta guía.
La idea de este howto es explicar cómo montar un servidor con las siguientes características:
- Compartir conexión a Internet
- Servidor de DHCP
- Cacheo de DNS y tráfico web
- Mirror de Debian GNU/Linux
- Instalación por PXE
Los programas utilizados están todos en Lenny Debian GNU/Linux, y no hará falta demasiada configuración. Sin embargo, el servidor debería ser lo suficientemente seguro (no permitir enmascarar tráfico de Internet, cerrar conexiones de Internet a la red local, etc.)
No voy a explicar todas las posibilidades de los programas, sólo las necesarias para conseguir poner en marcha el servidor. Esto no quiere decir que los programas sólo hagan lo que se explica aquí, es recomendable echar una ojeada a la documentación de todos ellos para ver qué pueden hacer por nosotros.
Necesidades de hardware
- Disco duro
- Un mirror de Debian GNU/Linux (sólo main) ocupa alrededor de 20 gigabytes. Un proxy caché ocupa tanto como puedas dejarle. Por lo tanto, el disco duro debería ser de mínimo 40 GB para estar cómodos.
- Dos tarjetas de red
- Una para conectarse a Internet, y otra para ofrecer red a los asistentes.
- Una torre normalita
- No necesitamos mucha máquina. Nosotros utilizamos un procesador a 1500MHz y 256 MB de memoria ram, pero seguramente valdría también una máquina menos potente.
Instalación del sistema mínimo
Con sistema mínimo quiero decir exactamente eso: MÍNIMO. Cuantas menos cosas haya instaladas más sitio para la caché. Es suficiente con los paquetes que se instalan de base en Debian GNU/Linux. El resto de paquetes los iremos instalando luego de uno en uno.
Particiones
Es recomendable que haya como mínimo tres particiones:
- El sistema
- Con 1 gigabyte debería ser suficiente para instalar todo el sistema. Se pueden poner 2 sin problema.
- La swap
- 500 mebabytes deberían ser suficientes.
- Lugar para guardar el mirror y la caché del proxy
- Es la partición que más espacio necesita. Cuanto más mejor. El sitio recomendado para montar esta partición es /var/spool. Esta partición va a tener muchos ficheros, de tamaños que variarán etre los 4Kb y los 100Mb.
Red
La tarjeta de red que vayamos a utilizar para conectarnos a Internet no requiere ninguna configuración especial. Con que esté configurada para conectarse a Internet es suficiente. Esto cambia de una red a otra, pero típicamente se suele configurar con DHCP.
La tarjeta de red que utilizaremos para la red de la party tiene que tener un rango de IP diferente a la otra. Tendrá que tener también una dirección fija. Casi siempre se puede poner el rango 10.1.1.0.
El fichero /etc/network/interfaces
quedaría así:
auto lo iface lo inet loopback #eth1 es la interfaz que utilizamos para salir a Internet auto eth1 iface eth1 inet dhcp #eth0 es la interfaz que se conecta a la red de la party auto eth0 iface eth0 inet static address 10.1.1.1 netmask 255.255.255.0 network 10.1.1.0 broadcast 10.1.1.255
Es muy útil ponerle nombre y dominio al servidor para evitar tener que andar con las IPs.
Si no hemos especificado el nombre en la instalación, editamos el fichero
/etc/hostname
y lo escribimos ahí. Nosotros le hemos llamado liberador
.
Para especificar el dominio (otra vez, sólo necesario si no lo hemos
especificado en la instalación), editamos el fichero /etc/hosts
y
añadimos o corregimos la línea:
127.0.1.1 liberador.install-party.taz liberador
Compartir salida a Internet a los asistentes
Para que toda la gente de la install party se pueda conectar a Internet a través de nuestra única IP tendremos que utilizar masquerading. Para que la red de los asistentes sea más fácil de configurar utilizaremos DHCP.
Masquerading
Ipmasq es una serie de scripts que configuran todo lo necesario para que funcione el masquerading. Cierra el firewall lo suficiente para que no nos dé pánico conectar un servidor que haga masquerading, y por defecto no permite que se pueda acceder a los ordenadores de la red local desde Internet. Es muy flexible, por lo que podremos cambiar cualquier parte de su funcionamiento de manera sencilla. Y todo esto sin preguntar nada!
Utiliza unos scripts sencillitos para detectar cual es la interfaz de salida y cual(es) las de la red local. Claro que como no nos pregunta nada, tendremos que configurar bien la red antes de ejecutarlo, y habrá que reiniciarlos después de cualquier cambio en la red. Pequeño precio para semejante joya.
Instalamos ipmasq:
aptitude install ipmasq
DHCP
Como servidor DHCP utilizaremos dnsmasq. Es un servidor dhcp y dns. Además de ser muy fácil de configurar la parte de DHCP, obtendremos un DNS-cache por el mismo precio, reduciendo el tráfico DNS al máximo.
Instalamos dnsmasq:
aptitude install dnsmasq
El fichero de configuración está muy bien comentado y muestra ejemplos muy variados. Nosotros sólo necesitamos una pequeña parte de la que ofrece, por lo que nos vale con las siguientes líneas:
interface=eth0 except-interface=eth1 domain=install-party.taz dhcp-range=10.1.1.3,10.1.1.100,12h
Con interface
especificamos las tarjetas de red en la que escucharán los
servidores DHCP y DNS. Tendremos que cambiar eth0 por el nombre de la tarjeta
de red que enchufemos a la red de la party.
Con except-interface
especificamos las tarjetas de red en las que NO
escucharán los servidores DHCP y DNS. Por si acaso pondremos aquí el nombre de
la tarjeta de red que utilicemos para conectarnos a Internet.
Con domain
especificamos el dominio de la red de la install party. No es
obligatorio, pero queda bien.
Y por último lo más importante. Con dhcp-range
configuramos el servidor
DHCP. En este ejemplo estamos diciendo que ofrecemos direcciones IP desde la
10.1.1.3 hasta la 10.1.1.100, y que la IP será válida por 12 horas.
Una vez configurado reiniciamos dnsmasq
:
/etc/init.d/dnsmasq restart
Proxy-cache
Squid
Squid es un proxy-cache. Es muy completo y permite controlar muchísimas cosas, pero a nosotros sólo nos interesan dos:
- Proxy-cache de tráfio web
- Puede funcionar de modo transparente
El fichero de configuración está muy comentado, es prácticamente la mejor
fuente de documentación. Está en /etc/squid/squid.conf
. Las partes que
tenemos que cambiar son pocas:
http_port 3128 transparent acl MIRROR dst 10.1.1.0/255.255.255.0 cache deny MIRROR cache_dir ufs /var/spool/squid 5000 16 256 acl allowed_hosts src 10.1.1.0/255.255.255.0 cache_mgr admin@liberador.install-party.taz visible_hostname liberador.install-party.taz
En la línea de http_port
simplemente hay que añadir transparent
al
final, para poder utilizarlo en modo transparente.
Las líneas acl MIRROR...
y cache deny MIRROR
indicamos que no vamos a
cachear el tráfico interno de la red. De este modo nos ahorramos cachear el
contenido del mirror.
En la línea cache_dir ...
tenemos que cambiar el primero de los números
para que indique la cantidad de megabytes que le vamos a permitir a la caché.
En este ejemplo le dejamos 5000.
La línea acl allowed_hosts ...
describe a los clientes que vamos a permitir
utilizar la caché. En este caso permitimos a cualquier ordenador de la red
10.1.1.0
Las dos últimas líneas indican el correo del administrador y el nombre de la máquina.
Una vez configurado reiniciamos el squid y listos:
/etc/init.d/squid restart
Iptables
Para que el proxy sea transparente tendremos que redirigir todo el tráfico que
pase por nuestro servidor (que también es router de los asistentes) al puerto
donde escucha squid. Para ello necesitaremos una regla de iptables. Como
estamos utilizando ipmasq
, que es quien se encarga de configurarlo, lo
mejor es que configuremos este programa para que añada las reglas necesarias.
Editamos el fichero /etc/ipmasq/rules/F00chain.rul
:
$IPTABLES -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Con esta regla estamos diciendo que todo el tráfico TCP que vaya a algún
puerto 80 desde la red a la que está conectada la tarjeta eth0 se redirija al
puerto 3128 (donde escucha squid
). Puede que tengamos que cambiar eth0 por
la tarjeta de red que tengamos enchufada a la red de la party.
Mirror de Debian GNU/Linux
Para que la party vaya lo más rápido posible, es recomendable llevar un repositorio. Los paquetes se descargarán mucho más rápido, incluso con la mejor conexión de Internet del mercado.
Antes de decidir montar un mirror del repositorio tendremos que plantearnos las siguientes preguntas:
¿Me cabe en el disco duro? Son un montón de gigas (la sección main de Debian Etch ocupa 14GB)
¿Voy a sacarle provecho? Si solo voy a instalar media docena de ordenadores, o si se va a instalar exactamente lo mismo en todos, es probable que no merezca la pena.
¿Va a serme útil más veces? Le vamos a pedir un montón de tráfico a los servidores de Debian. Hay que mirar cómo amortizar todas esas descargas. Aprovecha luego y haz CDs o DVDs de Debian con tu repositorio, llévalo a más sitios, utilízalo con todos los ordenadores de casa/trabajo/local,... Piensa que a Debian le cuesta dinero mantener todo ese ancho de banda.
En el caso de que la respuesta sea afirmativa en los tres casos, instalamos el mirror.
Obtener el mirror
Apt-mirror es una herramienta que genera un mirror de parte o la totalidad de una distribución Debian (o cualquier otra fuente de apt) listo para utilizar.
Instalamos apt-mirror:
aptitude install apt-mirror
El fichero de configuración (''/etc/apt/mirror.list'') es bastante sencillo. Para tener un mirror de debian testing para la arquitectura i386 hay que descomentar y/o cambiar las líneas:
set defaultarch i386 set nthreads 20 deb http://ftp.fr.debian.org/debian lenny main deb http://security.debian.org/debian-security lenny/updates main deb http://ftp.fr.debian.org/debian lenny main/debian-installer clean http://security.debian.org/ clean http://ftp.fr.debian.org/
Con set defaultarch
especificamos la arquitectura. Otras arquitecturas
habituales suelen ser amd64 o powerpc.
Con set nthreads
fijamos el número de descargas que se realizarán en
paralelo. 20 es un número bastante alto. Si tu conexión a Internet es lenta es
mejor que reduzcas esto a 5 o así, ya que de todas maneras no notarías
mejoría.
Con las tres líneas que empiezan por deb
especificamos fuentes de apt de
las que queremos hacer mirror. Su sintaxis es igual a la utilizada en
/etc/apt/sources.list
. Tened en cuenta que por lo general en las install
partys no se instalan fuentes de paquetes (o muy pocas) por lo que no merece
la pena meter entradas deb-src
.
Con las líneas que empiezan por clean
nos aseguramos que no tendremos
ficheros de sobra en el mirror.
Cuando ya está todo configurado ejecutamos apt-mirror como usuario apt-mirror
su - apt-mirror -c apt-mirror
Esto lleva su tiempo. Si no puedes hacerlo todo de una sola vez puedes comenzar más tarde con el mismo comando y seguirá donde lo dejaste. Hay que tener paciencia, porque hasta que el comando no termine no tendremos el mirror operativo.
Ofrecerlo a los asistentes
Los métodos más habituales para exportar un repositorio son http y ftp. En nuestro caso utilizaremos http, ya que así podremos aprovechar el servidor para poner material disponible a los usuarios vía web. Utilizaremos el servidor apache2, por ser el más extendido, aunque existen muchos otros más apropiados para lo que nos va a hacer falta.
Apache es con diferencia el servidor web más utilizado. #FIXME: hablar de bondades de apache o cambiarlo por otro servidor más simple
Instalamos apache:
aptitude instal apache2
Crearemos un host virtual para el repositorio, donde publicaremos el
directorio donde está el mirror. Para ello creamos el fichero
/etc/apache2/sites-available/mirror
:
NameVirtualHost 10.1.1.1 <VirtualHost 10.1.1.1> ServerName 10.1.1.1 ServerAdmin webmaster@liberador.install-party.taz Alias /debian "/var/spool/apt-mirror/mirror/ftp.fr.debian.org/debian" Alias /debian-security "/var/spool/apt-mirror/mirror/security.debian.org/debian-security" </VirtualHost>
Con NameVirtualHost
especificamos la IP en la que funcionará el dominio
virtual, en nuestro caso la que tengamos en la red de la party.
Con <VirtualHost>
y su correspondiente etiqueta de cierre marcamos la
configuración que afecta al dominio virtual. Hay que ponerle la misma IP que
hemos puesto en NameVirtualHost
.
Con ServerName
especificamos qué nombre tendrá nuestro servidor en ese
dominio virtual. Otra vez le ponemos la misma IP.
Por último, definimos varios Alias
para hacer accesible los repositorios
en la dirección /debian
del servidor web. Hay que pasarle como parametro
el directorio donde está el mirror (en este caso
/var/spool/apt-mirror/mirror/ftp.fr.debian.org/debian
para el mirror de
ftp.fr.debian.org).
Después de configurar el dominio virtual, hay que activarlo y recargar la configuración del servidor
a2ensite mirror /etc/init.d/apache2 reload
Crear CDs y DVDs de instalación
Para crear CDs o DVDs de instalación a partir de un repositorio existe la
herramienta jigdo-file
. Lo único que tendremos que hacer será encontrar los
enlaces a ficheros .jigdo
, que están en la web de Debian:
http://www.debian.org/CD/jigdo-cd/. Debian Lenny ocupa 31 CDs o 5 DVDs, por lo
que bajaremos los DVDs. Como el repositorio que hemos descargado es de testing,
los que necesitamos son los siguientes:
http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-1.jigdo http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-2.jigdo http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-3.jigdo
Instalamos jigdo-file
aptitude install jigdo-file
Ejecutamos jigdo-file
jigdo-lite http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/debian-testing-i386-DVD-1.jigdo
Nos preguntará si tenemos algún CD o DVD viejo que podamos aprovechar; como tenemos el repositorio completo le decimos que no. Cuando nos pregunte por el repositorio a utilizar le ponemos el nuestro: http://liberador.install-party.taz/debian
Es posible que no encuentre todos los paquetes necesarios en el repositorio, ya que algunos se habrán actualizado. No es problema, jigdo se bajará los que falten de un repositorio por defecto.
Por cada uno de los enlaces tendremos que repetir el proceso. Al final
tendremos 3 ficheros .iso
.
Instalaciones por PXE
Si no queremos grabar tantos CDs podemos arrancar el instalador de Debian GNU/Linux por red. Hay que tener en cuenta que algunas máquinas (sobre todo las antiguas) no tienen capacidad para arrancar por red; hay que comprobarlo en la BIOS.
Para ponerlo en marcha necesitamos que el servidor de DHCP de información adicional para el arranque de red. Con dnsmasq es suficiente con añadir al fichero de configuración la siguiente línea:
dhcp-boot=pxelinux.0,liberador,10.1.1.1
Donde liberador
y 10.1.1.1
son el nombre y la dirección del servidor
tftp.
Después es necesario poner en marcha el servidor TFTP. Primero instalamos el paquete necesario:
aptitude install tftpd-hpa
Verificamos que tftp se arrancará mediante inetd. Tenemos que tener una línea como esta (descomentada):
tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot
Por último necesitamos las imágenes de arranque. Para ello utilizaremos el
programa di-netboot-assistant
, que tendremos que instalar:
aptitude install di-netboot-assistant
Este comando se encarga de descargar los ficheros necesarios, ponerlos
accesibles por TFTP y configura pxelinux para que podamos elegir entre las
distintas imágenes disponibles. Nosotros le pediremos que consiga instaladores
de i386
y de amd64
:
di-netboot-assistant install lenny --arch=i386 di-netboot-assistant install lenny --arch=amd64
Recordad que hay que reiniciar los servidores que hemos configurado:
/etc/init.d/dnsmasq restart /etc/init.d/openbsd-inetd restart
Referencias
- Debian GNU/Linux
- http://www.debian.org
- ipmasq
-
No he encontrado la web oficial de ipmasq, pero se puede utilizar la
documentación que viene con el paquete:
/usr/share/doc/ipmasq/ipmasq.html/index.html
- dnsmasq
- http://thekelleys.org.uk/dnsmasq/doc.html
- apt-mirror
- http://apt-mirror.sourceforge.net/
- bind
- http://www.isc.org/index.pl?/sw/bind/
- apache
- http://httpd.apache.org/
- iptables
- http://www.netfilter.org/
- jigdo-file
- http://atterer.net/jigdo/
- instalación con PXE
-
- Setting up a server for PXE network booting
- http://www.debian-administration.org/articles/478
- Guía de instalación de Debian GNU/Linux. Capitulo 4.5
- http://www.debian.org/releases/stable/amd64/ch04s05.html.es
Historia
- 11/04/2007
- Primera versión del documento. Un servidor de install parties funcional.
- 23/11/2008
- Añadida instalación por PXE y revisión del documento.