Espanol

Unidistro es un framework para creación de distribuciones linux derivadas de Debian/Ubuntu. Inicialmente el proyecto surge de distintas universidades, es de ahí de donde viene el nombre del proyecto, una mezcla entre universidad y distribución.

Actualmente el proyecto está hospedado en launchpad

Requisitos

  • debootstrap
  • dpkg-dev
  • squashfs-tools
  • coreutils
  • gzip
  • mkisofs
  • e2fsprogs
  • dput

Hay paquetes disponibles para gutsy en el ppa de Agarfu.

deb http://ppa.launchpad.net/agarfu/ubuntu gutsy main
deb-src http://ppa.launchpad.net/agarfu/ubuntu gutsy main

Si quieres crearte tu propia distribución utilizando unidistro, el paquete que necesitas es undisitro-framework. Hay muchos otros paquetes en el repositorio que se utilizan para otros menesteres.

La versión de desarrollo está actualmente hospedada en Launchpad

bzr branch http://bazaar.launchpad.net/~unidistro/unidistro/unidistro 

Documentación

Usage: framework.py [options] config_file [package1 package2 ...]
         note if you select -i or -u at least one package MUST be provided

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -d DBS_ACTION, --debootstrap=DBS_ACTION
                        Debootstrap action to run
  -i INSTALL_PACKAGES, --install_package=INSTALL_PACKAGES
                        A package to install
  -p GENPACKAGES, --gen-package=GENPACKAGES
                        Packages to build
  -u REMOVE_PACKAGES, --remove_package=REMOVE_PACKAGES
                        A package to remove
  -m, --make_iso        Generate the iso
  -x, --create_metapackages
                        Create metapackages
  -y, --create_configpackages
                        Create configpackages
  -r REPOSITORY, --repository=REPOSITORY
                        Repository action to run
  -t THE_TEMPLATE, --template=THE_TEMPLATE
                        Generate a template
  -S, --source          Build only binary packages
  -g, --gpgsign         Sign created packages
  -k KEYID, --key-id=KEYID
                        GPG's ID
  -U UPLOADREPO, --upload=UPLOADREPO
                        Upload packages using dput
  -l, --list-packages   List packages

Unidistro

Unidistro es un proyecto que nació de la colaboración entre varias universidades, inicialmente la Universidad de Sevilla, la Universidad de Las Palmas de Gran Canaria, la Universidad Rey Juan Carlos III, la Universidad de La Laguna, la Universidad de Huelva y la UNED.

El objetivo del proyecto es generar una herramienta cómoda para la creación de distribuciones universitarias. Entre los objetivos del proyecto está la compartición de conocimiento relacionado con qué aplicaciones son útiles a cada sector de usuarios de la universidad. Pasando por alumnos, profesores e investigadores de las diferentes titulaciones hasta llegar al personal de administración y servicios. También se encuentra la facilitación de la tarea de obtener varias distribuciones con diferentes sabores, por ejemplo, una para reparti al alumnado y otra para utilizar en las máquinas de la institución con el software y los servicios preconfigurados.

El proyecto está actualmente hospedado en el launchpad de ubuntu https://launchpad.net/unidistro/

Para descargar del bzr el proyecto:

bzr branch http://bazaar.launchpad.net/~unidistro/unidistro/unidistro 

El framework para la creación de distribuciones

El framework se basa en la utilización de documentos XML para definir diferentes cuestiones de la distribución, como nombre, repositorio principal, distribución base, etc ... así como la definición de paquetes de configuración y metapaquetes para instalar software adicional.

La herramienta está pensada para poder derivar de cualquier distribución basada en debian, pero actualmente sólo hay paquetes para crear distros derivadas de ubuntu. Un fichero de configuración típico constará de una sección en la que definiremos cuestiones como directorios para la generación, distribución padre, repositorios de los que partir, etc ... y otra parte de definición de paquetes de nuestra distribución.

Una de las ventajas del framework es que permite la generación de versiones para diferentes arquitecturas de forma muy simple, prácticamente cambiando el tag arch de la configuración nos es suficiente.

Los tags de la configuración están bastante claro, excepto los build_reposiories. Estos son los repositorios de los que se descargarán los paquetes que se quieran instalar y los repositorios que finalmente permanecerán en la distribución live.

<configuration>
   <project_name>unidistro</project_name>
   <project_dir>/bardinux/</project_dir>
   <live_extra_content_dir>live-extra/</live_extra_content_dir>
   <debfiles_dir>debs</debfiles_dir>
   <tmp_dir>/bardinux/tmp</tmp_dir>
   <remove_tmp_files>yes</remove_tmp_files>
   <repository_dir>var/tmp/paquetes</repository_dir>
   <repository_remote_base>http://archive.ubuntu.com/ubuntu</repository_remote_base>
   <base_distribution>feisty</base_distribution>
   <arch>i386</arch>
   <build_repositories>
      <repository>deb http://archive.ubuntu.com/ubuntu gutsy main universe multiverse</repository>
      <repository>deb http://ppa.launchpad.net/tsimpson/ubuntu gutsy main</repository>
      <repository>deb http://ppa.launchpad.net/agarfu/ubuntu gutsy main</repository>
   </build_repositories>
</configuration>

En el framework a históricamente teníamos la posibilidad de generar dos tipos diferentes de paquetes, metapaquetes y paquetes de configuración. Con la evolución del framework hemos fusionado ambos tipos de paquete ya que los paquetes de configuración son un superconjunto de los metapaquetes. Con esta fusión hemos eliminado la dependencia de equivs y tenemos capacidad de generar paquetes fuentes de todo lo que especificamos en el framework. Esto nos da la posibilidad de utilizar de forma automatizada "dput" para subir los nuevos paquetes a los repositorios.

Metapaquetes

Un metapaquete es un paquete que no instala software, sólamente tiene dependencias, predependencias, confictos, recomendaciones, etc ... En el framework de unidistro la creación de un metapaquete es tan simple como añadir su descripción a un fichero en xml.

<configpackages>
   <package name="unidistro-live">
      <priority>optional</priority>
      <section>metapackages</section>
      <maintainer name="Carlos De La Cruz Pinto" email="carlos@ssl.ull.es"/>
      <architecture>all</architecture>
      <version>0.2</version>
      <depends>
         <pkg>casper</pkg>
      </depends>
      <recommends>      
         <pkg>ubiquity-ubuntu-artwork</pkg>
         <pkg>xfsprogs</pkg>
         <pkg>jfsutils</pkg>
         <pkg>ntfsprogs</pkg>
         <pkg>discover1</pkg>
         <pkg>man</pkg>
         <pkg>man-db</pkg>
         <pkg>groff-base</pkg>
         <pkg>xresprobe</pkg>
         <pkg>laptop-detect</pkg>
         <pkg>linux-image-generic</pkg>
         <pkg>command-not-found</pkg>
      </recommends>
      <description>Metapackage to create an unidistro distribution.</description>
      <bugs>becarios@ssl.ull.es</bugs>
      <origin>Unidistro</origin>
   </package>
</configpackages>

Este metapaquete de ejemplo dependerá de todos los paquetes que están listados en el tag <depends>. En la configuración de apt de Ubuntu, se especifica que se instalen todas las sugerencias de los paquetes que pertenezcan a la sección metapackages. Además de este tag podemos utilizar los siquientes:

   <suggests>
      <pkg>mozilla-firefox</pkg>
   </suggests>
   <pre-depends>
      <pkg>bash</pkg>
      <pkg>python</pkg>
      <pkg>audacity</pkg>
   </pre-depends>
   <depends>
      <pkg>gnuplot</pkg>
      <pkg>octave</pkg>
   </depends>
   <recommends>
      <pkg>audacity</pkg>
   </recommends>
   <conflicts>
      <pkg>emacs21</pkg>
   </conflicts>
   <replaces>
      <pkg>unidistro-ingenieria</pkg>
   </replaces>

Paquetes de configuración

Un paquete de configuración es un paquete que es capaz de instalar ficheros en diferentes directorios y crear diverts de otros ficheros de configuración que pertenezcan a otros paquetes diferentes al nuestro, rodeando de esta manera a la debian policy.

<configpackages>
   <package name="unidistro-live">
      <priority>optional</priority>
      <section>base</section>
      <maintainer name="Carlos De La Cruz Pinto" email="carlos@ssl.ull.es"/>
      <architecture>all</architecture>
      <version>0.2</version>
      <depends> 
         <pkg>casper</pkg>
         <pkg>ubiquity-frontend-kde</pkg>
         <pkg>ubiquity-ubuntu-artwork</pkg>
         <pkg>xfsprogs</pkg>
         <pkg>jfsutils</pkg>
         <pkg>ntfsprogs</pkg>
         <pkg>discover1</pkg>
         <pkg>man</pkg>
         <pkg>man-db</pkg>
         <pkg>groff-base</pkg>
         <pkg>xresprobe</pkg>
         <pkg>laptop-detect</pkg>
         <pkg>linux-image-generic</pkg>
         <pkg>command-not-found</pkg>
      </depends>
      <copyright>unidistro-live/copyright</copyright>
      <diverts>
         <file genuine="/ruta/a/sustituir/en/la/distro.sh">ruta/hasta/el/fichero/partiendo/de/projectdir</file>
         <file genuine="/ruta/a/sustituir/en/la/distro.desktop">ruta/hasta/el/fichero/partiendo/de/projectdir</file>
         <file genuine="/ruta/a/sustituir/en/la/distro.directory">ruta/hasta/el/fichero/partiendo/de/projectdir</file>
         <file genuine="/ruta/a/sustituir/en/la/distro.png">ruta/hasta/el/fichero/partiendo/de/projectdir</file>
      </diverts>
      <install>
         <file installpath="/ruta/a/instalar/en/la/distro">ruta/hasta/el/fichero/partiendo/de/projectdir</file>
         <file installpath="/ruta/a/instalar/en/la/distro">ruta/hasta/el/fichero/partiendo/de/projectdir</file>
         <file installpath="/ruta/a/instalar/en/la/distro">ruta/hasta/el/fichero/partiendo/de/projectdir</file>
      </install>
      <changelog>
            <log maintainer="René Martín Rodríguez" email="rene@ssl.ull.es" datetime="Mon, 23 Jul 2007 17:09:20 +0100" version="0.1">
             Primera versión del paquete de configuración de bardinux ...
            </log>
      </changelog>

      <description>Metapackage to create an unidistro distribution.</description>
      <bugs>becarios@ssl.ull.es</bugs>
      <origin>Unidistro</origin>
   </package>
</configpackages>

En este tipo de paquetes también podremos utilizar las etiquetas que soportan los metapaquetes y además las etiquetas diverts e install. Los ficheros que están entre los tags diverts instalan el fichero que se le indica en la distribución que se genera y añade un dpkg-divert del fichero que aparece en el atributo installpath. Esto vale, por ejemplo para poner nuestra propia configuración de cualquier servicio. Por ejemplo, si queremos cambiar la configuración de samba por defecto deberemos robreescribir /etc/samba/smb.conf. Si nosotros hacemos un paquete que instale este fichero, el sistema de paquetería evitará instalar nuestro paquete informándonos de que uno de los ficheros del mismo pretende sobreescribir un fichero (/etc/smb/samba.conf) que pertenece a otro paquete. Para evitar esto lo que haremos es instalar /etc/samba/smb.conf.unidistro, hacer un dpkg-divert de /etc/samba/smb.conf y seguidamente hacer un enlace simbólico desde /etc/smb/samba.conf.unidistro a /etc/smb/samba.conf. Además nuestro paquete es lo suficientemente inteligente, para que una vez que se desinstale deshaga el cambio hecho y vuelva a dejar el fichero de configuración del paquete original.

Generación de paquetes

Una vez que tengamos definido en el xml el paquete necesitaremos generar el .deb, para ello simplemente tendremos que ejecutar el framework pasando el flag -y

./framework fichero_xml_de_configuracion.xml -y

Esto nos dejará en el directorio que le hayamos especificado en el fichero de configuración un .deb que contiene lo que hemos descrito en el xml.

Creando una distribución live

Para crear una distribución live los pasos que tendremos que seguir son los siguientes:

  1. Crear una instalación base (debootstrap)
  2. Si los hubiera, generar los paquetes que tenemos en el xml.
  3. Generar un repositorio local con los paquetes generados.
  4. Instalar cuantos paquetes querramos
  5. Limpiar la distribución live de "impurezas"
  6. Generar la iso final.

./framework fichero_xml_de_configuracion.xml -d create -y -r create -i paquete_a_instalar1 -i paquete_a_instalar2 -m

Unidistro/Espanol (last edited 2008-08-06 17:01:13 by localhost)