Un repositorio es un conjunto de paquetes Debian organizados en un directorio en árbol especial, el cual también contiene unos pocos ficheros adicionales con los índices e información de los paquetes. Si un usuario añade un repositorio a su fichero sources.list, él puede ver e instalar facilmente todos los paquetes disponibles en éste al igual que los paquetes contenidos en Debian.
Un repositorio consiste en al menos un directorio con algunos paquetes DEB en él, y dos ficheros especiales que son el Packages.gz para los paquetes binarios y el Sources.gz para los paquetes de las fuentes. Una vez que tu repositorio esté listado correctamente en el sources.list, si los paquetes binarios son listados con la palabra clave deb al principio, apt-get buscará en el fichero índice Packages.gz, y si las fuentes son listadas con las palabras claves deb-src al principio, éste buscará en el fichero indice Sources.gz. Ésto se debe a que en el fichero Packages.gz se encuentra toda la información de todos los paquetes, como nombre, version, tamaño, descripción corta y larga, las dependencias y alguna información adicional que no es de nuestro interés. Toda la información es listada y usada por los Administradores de Paquetes del sistema tales como dselect o aptitude. Sin embargo, en el fichero Sources.gz se encuentran listados todos los nombres, versiones y las dependencias de desarrollo (esto es, los paquetes necesitados para compilar) de todos los paquetes, cuya información es usada por apt-get source y herramientas similares.
Una vez que hayas establecido tus repositorios, serás capaz de listar e instalar todos sus paquetes junto a los que vienen en los discos de instalación Debian; una vez que hayas añadido el repositorio deberás ejecutar en la consola:
$ sudo apt-get update
Ésto es con el fin de actualizar la base de datos de nuestro APT y así el podrá “decirnos” cuales paquetes disponemos con nuestro nuevo repositorio. Los paquetes serán actualizados cuando ejecutemos en consola.
$ sudo apt-get upgrade
Existen dos tipos de repositorios: los complejos, que es donde el usuario sólo tiene que especificar la ruta base de el repositorio, la distribución y los componentes que él quiera (APT automáticamente buscará los paquetes correctos para la arquitectura correspondiente, si están disponibles), y los más simples, donde el usuario debe especificar la ruta exacta (aqui APT no hará magia para encontrar cuales de los paquetes son los indicados). El primero es más difícil de establecer, pero es más fácil de utilizar, y siempre debería ser usado para repositorios complejos y/o plataformas cruzadas; el último, es más fácil de establecer, pero sólo debería ser usado para repositorios pequeños o de una sola arquitectura.
Aunque no es realmente correcto, aquí llamaré al primero Repositorios Automáticos y al último Repositorios Triviales. Repositorios Automáticos
La estructura del directorio de un repositorio automático con las arquitecturas estándares de Debian y sus componentes se asemeja mucho a ésto:
(tu repositorio root) | +-dists | |-stable | |-main | | |-binary-alpha | | |-binary-arm | | |-binary-... | | +-source | |-contrib | | |-binary-alpha | | |-binary-arm | | |-binary-... | | +-source | +-non-free | |-binary-alpha | |-binary-arm | |-binary-... | +-source | |-testing | |-main | | |-binary-alpha | | |-binary-arm | | |-binary-... | | +-source | |-contrib | | |-binary-alpha | | |-binary-arm | | |-binary-... | | +-source | +-non-free | |-binary-alpha | |-binary-arm | |-binary-... | +-source | +-unstable |-main | |-binary-alpha | |-binary-arm | |-binary-... | +-source |-contrib | |-binary-alpha | |-binary-arm | |-binary-... | +-source +-non-free |-binary-alpha |-binary-arm |-binary-... +-source
Los paquetes libres van en el directorio main; los que no son libres van en el directorio non-free y los paquetes libres que dependen de los que no son libres van en el directorio contrib.
Existen también otros directorios poco comunes que son el non-US/main que contienen paquetes que son libres pero que no pueden ser exportados desde un servidor en los Estados Unidos y el directorio non-US/non-free que contiene paquetes que tienen alguna condición de licencia onerosa que restringe su uso o redistribución. No pueden ser exportados de los Estados Unidos porque son paquetes de software de cifrado que no están gestionados por el procedimiento de control de exportación que se usa con los paquetes de main o no pueden ser almacenados en servidores en los Estados Unidos por estar sujetos a problemas de patentes.
Actualmente Debian soporta 11 tipos de arquitecturas; en éste ejemplo se han omitido la mayoría de ellas por el bien de la brevedad. Cada directorio binary-* contiene un fichero Packages.gz y un fichero opcional Release; cada directorio fuente contiene un fichero Sources.gz y también contiene un fichero opcional Release.
Nota que los paquetes no tienen que estar en el mismo directorio como los ficheros índices, porque los ficheros índices contienen las rutas a los paquetes individuales; de hecho, podrían estar ubicados en cualquier lugar en el repositorio. Ésto hace posible poder crear estanques.
Somos libres de crear tantas distribuciones como componentes y llamarlos como queramos; las que se usan en el ejemplo son, justamente las usadas en Debian. Podríamos, por ejemplo, crear las distribuciones current y beta (en vez de stable, unstable y testing, y que los componentes sean foo, bar, baz y qux (en lugar de main, contrib y non-free).
Ya que somos libres de llamar los componentes como queramos, siempre es recomendable usar las distribuciones estándar de Debian, porque son los nombres que los usuarios de Debian esperan. Repositorios Triviales
Los repositorios triviales, consisten en un directorio raíz y tantos sub-directorios como deseemos. Como los usuarios tienen que especificar la ruta a la raíz del repositorio y la ruta relativa entre la raíz y el directorio con los ficheros indices en él, somos libres de hacer lo que queramos (inclusive, colocar todo en la raíz del repositorio; entonces, la ruta relativa simplemente sería /. Se parecen mucho a ésto:
(your repository root) | |-binary +-source
dpkg-scanpackages es la herramienta con la que podemos generar el fichero Packages y con la herramienta dpkg-scansources creamos los ficheros Sources. Ellos pueden enviar sus salidas a stout; por consiguiente, para generar ficheros comprimidos, podemos usar una cadena de comandos como ésta:
$ dpkg-scanpackages arguments | gzip -9c > Packages.gz
Las dos herramientas trabajan de la misma manera; ambas toman dos argumentos (en realidad son más, pero aquí no hablaremos de eso; puedes leerte las páginas del manual si quieres saber más); el primer argumento es el directorio en cual están los paquetes, y el segundo es el fichero predominante. En general no necesitamos los ficheros predominantes para repositorios simples, pero como éste es un argumento requerido, simplemente lo pasamos a /dev/null. dpkg-scanpackages escanea los paquetes .deb, sin embargo, dpkg-scansources escanea los ficheros .dsc, por lo tanto es necesario colocar los ficheros .orig.gz, .diff.gz y .dsc juntos. Los ficheros .changes no son necesarios. Así que, si tienes un repositorio trivial como el mostrado anteriormente, puedes crear los dos ficheros indice de la siguiente manera:
$ cd my-repository $ dpkg-scanpackages binary /dev/null | gzip -9c > binary/Packages.gz $ dpkg-scansources source /dev/null | gzip -9c > source/Sources.gz
Ahora bien, si tienes un repositorio tan complejo como el mostrado en el primer ejemplo, tendrás que escribir algunos scripts para automatizar éste proceso. También puedes usar el argumento pathprefix de las dos herramientas para simplificar un poco la sintaxis.
Si quieres permitirle a los usuarios de tu repositorio usar el pinning con tu repositorio, entonces deberás incluir un fichero Release en cada directorio que contenga un fichero Index. (Puedes leer más acerca del pinning en el COMO APT). Los ficheros Release son ficheros de texto simple y cortos que tienen una forma muy parecida a la que sigue:
Archive: archivo Component: componente Origin: TuCompañia Label: TuCompañia Debian repositorio Architecture: arquitectura
El nombre de la distribución de Debian. Los paquetes en éste directorio pertenecen a (o estan diseñados para), por ejemplo, stable, testing o unstable.
Aquí van los componentes de los paquetes en el directorio, por ejemplo, main, non-free o contrib.
El nombre de la persona que hizo los paquetes.
Algunas etiquetas adecuadas para los paquetes de tu repositorio. Usa tu imaginación.
La arquitectura de lo paquetes en éste directorio, como i386 por ejemplo, sparc o fuente. Es importante que se establezcan Architecture y Archive de manera correcta, ya que ellos son más usados para hacer pinning. Los otros, sin embargo, son menos importantes en éste aspecto.
Con los repositorios automáticos, distribuir los paquetes en los diferentes directorios puede tornarse rápidamente en una bestia indomable, además también se gasta mucho espacio y ancho de banda, y hay demasiados paquetes (como los de la documentación, por ejemplo) los cuales son los mismos para todas las arquitecturas.
En éstos casos, una posible solución es un estanque. Un estanque es un directorio adicional dentro del directorio raíz del repositorio, que contiene todos los paquetes (los binarios para todas las arquitecturas, distribuciones y componente y todas las fuentes). Se pueden evitar muchos problemas, a través de una combinación inteligente de ficheros predominantes (tema que no se toca en éste documento) y de scripts. Un buen ejemplo de un reposotorio “estancado” es el propio repositorio de Debian.
Los estanques sólo son útiles para repositorio grandes. Nunca he hecho uno y no creo que lo haga en un futuro cercano y ésa es la razón por la cual no se explica como hacerlo aquí. Si tu crees que esa sección debería ser añadida siéntete libre de escribir una y contáctame luego. Herramientas
Existen varias herramientas para automatizar y facilitar la creación de ficheros Debian. A continuación son listados los más importantes:
Usar un repositorio es muy sencillo, pero ésto depende de el tipo de repositorio que hayas creado, ya sea binario o de fuentes, automático o trivial. Cada repositorio ocupa una línea en el fichero sources.list. Para usar un repositorio binario solo tenemos que usar deb al principio de la línea y para usar un repositorio de fuentes, en vez de deb, sólo tenemos que agregrar deb-src. Cada línea tiene la siguiente sintaxis:
deb|deb-src uri distribución [componente1] [componente2] [...]
El URI es el Identificador Universal de Recursos de la raíz del repositorio, como por ejemplo: ftp://ftp.tusitio.com/debian, http://tusitio.com/debian, o, para ficheros locales, . Donde la barra inclinada es opcional. Para repositorios automáticos, tienes que especificar la distribución y uno o más componentes; la distribución no debe terminar con una inclinada.
A continuación unos ejemplos de repositorios:
deb ftp://sunsite.cnlab-switch.ch/mirror/debian/ unstable main contrib non-free deb-src ftp://sunsite.cnlab-switch.ch/mirror/debian/ unstable main contrib non-free deb file:///home/aisotton/rep-exact binary/ deb-src file:///home/aisotton/rep-exact source/
Donde los dos primeros se corresponden con repositorios de tipo Automático y los dos últimos Triviales.
$ sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup $ sudo gedit /etc/apt/sources.list
## Uncomment the following two lines to fetch updated software from the network # deb http://us.archive.ubuntu.com/ubuntu breezy main restricted # deb-src http://us.archive.ubuntu.com/ubuntu breezy main restricted ## Uncomment the following two lines to fetch major bug fix updates produced ## after the final release of the distribution. # deb http://us.archive.ubuntu.com/ubuntu breezy-updates main restricted # deb-src http://us.archive.ubuntu.com/ubuntu breezy-updates main restricted ## Uncomment the following two lines to add software from the 'universe' ## repository. ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu ## team, and may not be under a free licence. Please satisfy yourself as to ## your rights to use the software. Also, please note that software in ## universe WILL NOT receive any review or updates from the Ubuntu security ## team. # deb http://us.archive.ubuntu.com/ubuntu breezy universe # deb-src http://us.archive.ubuntu.com/ubuntu breezy universe # deb http://security.ubuntu.com/ubuntu breezy-security main restricted # deb-src http://security.ubuntu.com/ubuntu breezy-security main restricted # deb http://security.ubuntu.com/ubuntu breezy-security universe # deb-src http://security.ubuntu.com/ubuntu breezy-security universe
## Uncomment the following two lines to fetch updated software from the network deb http://us.archive.ubuntu.com/ubuntu breezy main restricted deb-src http://us.archive.ubuntu.com/ubuntu breezy main restricted ## Uncomment the following two lines to fetch major bug fix updates produced ## after the final release of the distribution. deb http://us.archive.ubuntu.com/ubuntu breezy-updates main restricted deb-src http://us.archive.ubuntu.com/ubuntu breezy-updates main restricted ## Uncomment the following two lines to add software from the 'universe' ## repository. ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu ## team, and may not be under a free licence. Please satisfy yourself as to ## your rights to use the software. Also, please note that software in ## universe WILL NOT receive any review or updates from the Ubuntu security ## team. deb http://us.archive.ubuntu.com/ubuntu breezy universe deb-src http://us.archive.ubuntu.com/ubuntu breezy universe deb http://security.ubuntu.com/ubuntu breezy-security main restricted deb-src http://security.ubuntu.com/ubuntu breezy-security main restricted deb http://security.ubuntu.com/ubuntu breezy-security universe deb-src http://security.ubuntu.com/ubuntu breezy-security universe deb http://archive.ubuntu.com/ubuntu breezy multiverse deb-src http://archive.ubuntu.com/ubuntu breezy multiverse
$ sudo aptitude update
## Extras deb http://ubuntu-backports.mirrormax.net/ breezy-extras main restricted universe multiverse
## Backports deb http://archive.ubuntu.com/ubuntu breezy-backports main restricted universe multiverse
$ mkdir -p $HOME/backup/var/lib/ $ sudo cp -R /var/lib/apt/ $HOME/backup/var/lib/ $ mkdir -p $HOME/backup/var/cache/ $ sudo cp -R /var/cache/apt/ $HOME/backup/var/cache/ $ mkdir -p $HOME/backup/etc/apt $ sudo cp -R /etc/apt/ $HOME/backup/etc/ $ sudo chown -R $USER $HOME/backup/
$ sudo cp -fR $HOME/backup/var/* /var/ $ sudo cp -fR $HOME/backup/etc/apt/* /etc/apt/
$ sudo apt-cdrom add $ sudo aptitude update
Supongamos que tenemos la imagen en /home/user/imagen.iso
(sustituye la ruta y el nombre de la imagen iso por lo que corresponda en tu caso)
/media/iso
cdrom
, que apuntará posiblemente a /media/cdrom (antes de borrarlo mira dnde apunta, para restaurarlo al final del proceso$ sudo su # cd / # ls -l (mira adónde apunta cdrom, y anótalo) # mkdir -p /media/iso # rm cdrom # ln -s /media/iso cdrom
/etc/fstab
y añade esta entrada/home/user/imagen.iso /media/iso iso9660 loop
# modprobe loop # mount /home/user/imagen.iso /cdrom -t iso9660 -o loop # apt-cdrom add # aptitude update
Ya puedes usar aptitude o synaptic para actualizar tu sistema.
Cuando termines, restaura el enlace simbólico cdrom adonde apuntaba antes de comenzar (si has seguido las instrucciones, lo tendrás anotado).
|Construcción de un mirror local|
debmirror
. para obtenerlo:$ sudo aptitude install debmirror
$ debmirror --nosource -m --passive --host=archive.ubuntulinux.org \ --root=ubuntu/ --method=ftp --progress --dist=breezy \ --section=main,multiverse,universe --arch=i386 ubuntu/ --ignore-release-gpg
Nota: Fíjate que el final “\” es para partir el comando en varias líneas. El comando en sí mismo es solamente una línea.
División de los repositorio en directorios del tamaño de un DVD |
debpartial
hace esto por tí.$ sudo aptitude install debpartial
$ mkdir ubuntu-dvd
$ debpartial --nosource --dirprefix=ubuntu --section=main,universe,multiverse \ --dist=breezy --size=DVD ubuntu/ ubuntu-dvd/
debpartial
lo hará.$ ruby debcopy ubuntu/ ubuntu-dvd/ubuntu0 $ ruby debcopy ubuntu/ ubuntu-dvd/ubuntu1 $ ruby debcopy ubuntu/ ubuntu-dvd/ubuntu2
debmirror
y ubuntu-dvd/* son los directorios preparados para el nuevo repositorio en DVD. debcopy
con la opción -l:$ ruby debcopy -l ubuntu/ ubuntu-dvd/ubuntu0 $ ruby debcopy -l ubuntu/ ubuntu-dvd/ubuntu1 $ ruby debcopy -l ubuntu/ ubuntu-dvd/ubuntu2
Crea la imágenes ISO |
$ mkisofs -f -J -r -o ubuntu-dvd-0.iso ubuntu-dvd/ubuntu0 $ mkisofs -f -J -r -o ubuntu-dvd-1.iso ubuntu-dvd/ubuntu1 $ mkisofs -f -J -r -o ubuntu-dvd-2.iso ubuntu-dvd/ubuntu2
... The following packages are not AUTHENTICATED: lista_de_paquetes_sin_verificar_su_autenticidad Do you want to continue? [y/N]
Para solucionar este problema tendremos que añadir la llave pública del repositorio que posee dicho paquete a nuestra lista de llaves confiables (dicha lista la puedes ver con el comando apt-key list
). Por ejemplo, para añadir la llave pública de los repositorios Ubuntu Backports debemos hacer lo siguiente:
$ wget http://backports.ubuntuforums.org/ubp/pubkey.gpg -O- | sudo apt-key add -
Por supuesto, usted debe buscar la llave pública correspondiente en su caso particular.
— Milton Mazzarri 2005/08/07 23:37
$ sudo mv /etc/apt/sources.list /etc/apt/sources.list_old $ sudo gedit /etc/apt/sources.list
— Aitor Calero García 2006/02/026 14:56
$ dpkg --get-selections > paquetes-instalados.txt
$ dpkg -l | grep ^ii > paquetes-instalados.txt