domingo, 23 de enero de 2011

Crear un repositorio local en Ubuntu

Este procedimiento describe como crear un repositorio local de Ubuntu 10.04 en servidor para que pueda usarse en una red local para actualizar equipos clientes que no tengan conexión a Internet.

Configuración del servidor:

Editar manualmente el fichero de configuración de la red:
Para configurar una dirección IP estática:
  1. Editar como root: nano /etc/network/interfaces
  2. Buscar la línea de configuración del eth0 (es el interfaz principal del sistema). Cambiar la palabra static por dhcp
  3. En una nueva línea, presionar TAB y escribir 192.168.1.200 o cualquier otra dirección de red del rango de la red de área local que no esté siendo usada por otro ordenador.
  4. Presionar enter para ir a una línea nueva y presionar TAB para moverse por la línea
  5. Introducir la gateway 192.168.1.1 ó la gateway de la red local
  6. Presionar enter de nuevo para ir la siguiente línea y presionar TAB
  7. Introducir la máscara 255.255.255.0
  8. Presionar enter y TAB, e introducir la dirección de broadcast de la red, por ejemplo: 192.168.1.255
  9. Guardar el fichero con CTRL+O
auto lo
iface lo inet loopback
iface eth0 inet static
address 192.168.1.200
gateway 192.168.1.1
netmask 255.255.255.0
broadcast 192.168.1.255 (en algunas redes, broadcast podría no ser necesario configurarla)
  1. Introducir la siguiente línea para reiniciar el interfaz:
#ifdown eth0
#ifup eth0

La dirección de red estática se usará una vez que reinicies el interfaz.

Instalar los componentes requeridos:
Instalar Apache Web Server:
Antes comprobamos si está o no instalado con:
#dpkg -l | grep apache
si no está instalado este comando no devolverá nada.
Para saber si está en ejecución:
/etc/init.d/apache status

Instalar Apache si no está instalado:

#apt-get install apache2

Apache se quedará instalado y accesible a través del navegador. Escribir la dirección del bucle local en la barra de direcciones del navegador para comprobar que está funcionando:

Mostrará esto:
It works!!!
y comprobarlo también con la dirección IP estática recién configurada: http://192.168.1.200
El directorio público de Apache se queda configurado en : /var/www
Vamos a crear el repositorio espejo en ese directorio.

Instalar los archivos para crear el repositorio con:

#apt-get install apt-mirror

Las fuentes y los paquetes que se descargarán están definidos en el fichero: /etc/apt/mirror.list puedes añadir fuentes para disponer de más paquetes en tu repositorio. Por defecto, se copiarán a tu repositorio los siguientes sets: main, security y updates.
También en este archivo está definido dónde se descargarán los paquetes mediante la variable base_path. Por defecto, esta variable está definida de la siguiente forma:

set base_path /var/spool/apt-mirror

Si queremos que todos los paquetes se descarguen a un disco usb, primero debemos tenerlo montado y luego, debemos modificar la variable de la siguiente forma:

set base_path /media/usbdisk/repo

Ejecuta ahora apt-mirror, tardará bastante en bajarse todos los paquetes y archivos. Puede ocurrir el siguiente error:

apt-mirror: can't open index in proceed_index_gz at /usr/bin/apt-mirror

observa si en el path al fichero que no puede descargar se encuentran dos slash(//) si ese es el error, tendrás que editar /usr/bin/apt-mirror y localizar donde aparece:

system(“gunzip < $path/$index.gz > $path/$index”);

y sustituirla por:

system(“gunzip < $path$index.gz > $path/$index”);

Si cancelas con CTRL-C la descarga de los paquetes, es posible reanudar la ejecución de apt-mirror y continuará por donde estaba descargando.
A veces, no es posible reiniciar la ejecución de apt-mirror porque antes debe borrarse el fichero:

/var/spool/apt-mirror/var/apt-mirror.lock

Bórralo manualmente si no puedes reiniciar apt-mirror

Una vez descargado completamente todo el repositorio, tenemos dos opciones, utilizar un disco duro externo usb para actualizar los sistemas clientes que queramos o bien, utilizar un servidor en la red local para servir los archivos necesarios para la actualización.
Todo el repositorio se habrá descargado en /var/spool/apt-mirror. Hay que enlazar el directorio público de Apache con el repositorio, así que lo mejor es usar un enlace simbólico.
Si tenemos descargado el repositorio en un dispositivo usb tenemos un problema: el dispositivo usb debe estar montado.

Para montarlo, seguimos el siguiente procedimiento:
Si ya estaba montado previamente, lo desmontamos con: umount /media/BA.... (BA.... es el UUID del dispositivo). Podemos saber cual es su UUID mirando en el archivo /etc/fstab o con el comando mount cuando el dispositivo está montado o con el comando blkid.

Una vez desmontado, lo volvemos a montar (ojo, no desconectar el dispositivo después de desmontarlo pues automount lo volverá a montar cuando lo conectemos)

Para montar el dispositivo usb con los permisos que nos interesa, primero tendremos que crear un punto de montaje:

#mkdir /media/usbdisk

Ahora lo montamos:

#mount -t ntfs /dev/sdb1 /media/usbdisk -o uid=1000,gid=100,utf8,dmask=022,fmask=133

dmask=022 hace los directorios navegables a través de Apache
fmask=133 hace que los ficheros puedan leerse desde Apache

Ahora es cuando tenemos que crear el enlace simbólico que sustituya las peticiones al directorio público de Apache, por accesos al directorio donde se encuentra el repositorio:

#ln -s /media/usbdisk/repo/mirror/archive.ubuntu.com/ubuntu /var/www/ubuntu

al listar el directorio público de Apache:

#ls /var/www/ubuntu

debe mostrarse: dists y pool

También deben estar accesibles si hacemos: http://localhost/ubuntu desde nuestro navegador.

Desde cualquier punto de tu red local también debe estar disponible, para probarlo, sustituye localhost por la dirección IP del servidor Apache que has configurado.
El repositorio local está creado. Solo falta configurar los clientes para que éstos puedan acceder a la descarga de paquetes.

Configurar los clientes para acceder a un repositorio local

Vamos a configurar un ordenador cliente para descargar software y actualizaciones desde un repositorio local cuando Internet no esté disponible.
Una vez comprobado que el repositorio está disponible, debemos configurar los clientes para que instalen el software desde el nuevo repositorio local:
Lo primero es hacer una copia de seguridad del fichero actual de orígenes de software:
#cp /etc/apt/sources.list /etc/apt/sources.back

Editamos el fichero actual de orígenes del software:

#nano /etc/apt/sources.list

En las líneas no comentadas del fichero (las que no llevan antepuesto #), debemos modificar el origen del software. En mi fichero las líneas aparecen así:

deb http://es.archive.ubuntu.com/ubuntu/ lucid main restricted
deb-src http://es.archive.ubuntu.com/ubuntu/ lucid main restricted
deb http://es.archive.ubuntu.com/ubuntu/ lucid-updates main restricted
deb-src http://es.archive.ubuntu.com/ubuntu/ lucid-updates main restricted
deb http://es.archive.ubuntu.com/ubuntu/ lucid universe
deb-src http://es.archive.ubuntu.com/ubuntu/ lucid universe
deb http://es.archive.ubuntu.com/ubuntu/ lucid-updates universe
deb-src http://es.archive.ubuntu.com/ubuntu/ lucid-updates universe
deb http://es.archive.ubuntu.com/ubuntu/ lucid multiverse
deb-src http://es.archive.ubuntu.com/ubuntu/ lucid multiverse
deb http://es.archive.ubuntu.com/ubuntu/ lucid-updates multiverse
deb-src http://es.archive.ubuntu.com/ubuntu/ lucid-updates multiverse
deb http://security.ubuntu.com/ubuntu lucid-security main restricted
deb-src http://security.ubuntu.com/ubuntu lucid-security main restricted
deb http://security.ubuntu.com/ubuntu lucid-security universe
deb-src http://security.ubuntu.com/ubuntu lucid-security universe
deb http://security.ubuntu.com/ubuntu lucid-security multiverse
deb-src http://security.ubuntu.com/ubuntu lucid-security multiverse

Y las sustituyo por estas otras:

deb http://192.168.249.200/ubuntu/ lucid main restricted
deb-src http://192.168.249.200/ubuntu/ lucid main restricted

deb http://192.168.249.200/ubuntu/ lucid-updates main restricted
deb-src http://192.168.249.200/ubuntu/ lucid-updates main restricted

deb http://192.168.249.200/ubuntu/ lucid universe
deb-src http://192.168.249.200/ubuntu/ lucid universe
deb http://192.168.249.200/ubuntu/ lucid-updates universe
deb-src http://192.168.249.200/ubuntu/ lucid-updates universe

deb http://192.168.249.200/ubuntu/ lucid multiverse
deb-src http://192.168.249.200/ubuntu/ lucid multiverse
deb http://192.168.249.200/ubuntu/ lucid-updates multiverse
deb-src http://192.168.249.200/ubuntu/ lucid-updates multiverse

deb http:///192.168.249.200/ubuntu lucid-security main restricted
deb-src http:///192.168.249.200/ubuntu lucid-security main restricted
deb http:///192.168.249.200/ubuntu lucid-security universe
deb-src http:///192.168.249.200/ubuntu lucid-security universe
deb http:///192.168.249.200/ubuntu lucid-security multiverse
deb-src http:///192.168.249.200/ubuntu lucid-security multiverse
Puesto que mi servidor web Apache se encuentra configurado con la IP: 192.168.249.200

A continuación, guardar el fichero pulsando Alt-O y ejecutar la actualización en el cliente:

#sudo apt-get clean

y

#sudo apt-get update

También podemos utilizar nuestro repositorio para instalar cualquier paquete que deseemos instalar:

#sudo apt-get install cowsay

Si queremos que nuestro repositorio se mantenga actualizado, debemos ejecutar diariamente en el servidor:

#sudo apt-mirror