||<>|| '''Attention:''' We are affected by [[https://bugs.launchpad.net/soyuz/+bug/165230|this launchpad bug]]. This causes that if you use directly agarfu's ppa your distro wont be correctly build. We recommend you generate all unidistro debs locally and add them to your local repository until this bug is fixed. '''Unidistro''' goal is to develope a infrastructure or framework to create distros. This projects was an effort of some universities, so the project's name is a mix between university and distribution. [[https://wiki.ubuntu.com/Unidistro/Espanol|Unidistro en español]] At this time Unidistro is being developed at launchpad. You can see the [[http://launchpad.net/unidistro|project page]]. = TODO = * Write more documentation, there are some no documented cool features, like the ~/.unidistro configuration files and tag on diverts and installs. * Add some templates to create ubuntu, kubuntu, ubuntu-studio (a little bit ticky because the kernel they use), etc ... * Add some recipes as CustomisedIsoImageTools mention * Investigate how to create package based isos and try to write code to do it. [[http://wiki.debian.org/CDDT|Custom Debian Distribution Toolkit]] * Conquer the whole world ... = Requirements = * debootstrap * dpkg-dev * squashfs-tools * coreutils * gzip * mkisofs * e2fsprogs * dput Packages for gutsy are available in the Agarfu's ppa repository {{{ deb http://ppa.launchpad.net/agarfu/ubuntu gutsy main deb-src http://ppa.launchpad.net/agarfu/ubuntu gutsy main }}} If you want to try Unidistro to create your own distro, you need to install undisitro-framework package (from agarfu's repo) There are lots of other packages, these other are helpers to properly create a distro. The currently development version is hosted in launchpad {{{ bzr branch http://bazaar.launchpad.net/~unidistro/unidistro/unidistro }}} The framework is under active development therefore the old spanish documentation may contain some mistakes. In the last week we had been working in simplifying the creation of a distro and now it's possible to generate it in a single line under certains circumstances despite the line is quite long. Anyway the XML definitions are right. = Timeline = * As metapackages generation and configpackages generation has been merge we don't depend anymore on equivs. * The framework has been improved to be able to generate source packages. * The framework has been improved to be able to sign packages. * The framework has been improved to be able to upload packages to a repository using dput. = Documentation = Unidistro started as some spanish Universities common effort to develop a something to deal with custom distros. Therefore at this time most documentation is still in spanish. This is some documentation... {{{ 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 is a project that was born out of collaboration between several Spanish universities, initially Universidad de Sevilla, Universidad de Las Palmas de Gran Canaria, Universidad Rey Juan Carlos III, Universidad de La Laguna, Universidad de Huelva and Universidad Nacional de Educación a Distancia. The aim is to create an easy to use tool to create univesitary linux distributions. Another target is to find one good way to share knowledge about applications that are useful in each group of users in university. We have different kind of users, we have professors and researchers, pupils and people from administration and services. Nowadays the project is hosted at Ubuntu's launchpad https://launchpad.net/unidistro/ To download the project's code: {{{ bzr branch http://bazaar.launchpad.net/~unidistro/unidistro/unidistro }}} = Framework to build distributions = The framework uses xml documents to define different questions about distribution, for instance the name, principal depository, distribution base, etc ... as well as packages definitions (metapackages and config packages). The tools is designed to extend any distribution based on Debian, but today there are only packages to derive from Ubuntu. A typical configuration file will consist of two main sections. One where we define things like the generation directories, parent distribution, base repository, etc ... and the second section where we define all our packages. With this tool you can generate the same distro for various architectures, the only thing you have to change content of the '''''' tag. Configuration tags are self explanatory except '''build_repository'''. These are the repos that we will use after debootstrap is done. We will download and install packages from this repositories. {{{ unidistro /bardinux/ live-extra/ debs /bardinux/tmp yes var/tmp/paquetes http://archive.ubuntu.com/ubuntu feisty i386 deb http://archive.ubuntu.com/ubuntu gutsy main universe multiverse deb http://ppa.launchpad.net/tsimpson/ubuntu gutsy main deb http://ppa.launchpad.net/agarfu/ubuntu gutsy main }}} Historically we have two different kind of packages, metapackages and config packages. Right now we have merged both, because config packages are a superset of metapackages and merging them we gain the ability to create source packages that we can upload to PPA using dput. The framework itself is able to do it using -S -U. == Metapackages == A metapackage is a package that doesn't contain anything, just dependencies, conflicts, recommendations, etc ... With Unidistro create a metapackage is as simple as add the description to a xml document. {{{ optional
metapackages
all 0.2 casper ubiquity-ubuntu-artwork xfsprogs jfsutils ntfsprogs discover1 man man-db groff-base xresprobe laptop-detect linux-image-generic command-not-found Metapackage to create an unidistro distribution. becarios@ssl.ull.es Unidistro
}}} This example metapackage will depend on all packages that are listed in tag. If you use Ubuntu, all packages listed on suggests will istall as well as depends. We can also specify all the following tags. {{{ mozilla-firefox bash python audacity gnuplot octave audacity emacs21 unidistro-ingenieria }}} == Config packages == A configuration package is able to install files in different directories and create diverts of other configuration files that are part of packages. This is a legal work around of Debian Policy to change configuration files and keep them updated. {{{ optional
base
all 0.2 casper ubiquity-frontend-kde ubiquity-ubuntu-artwork xfsprogs jfsutils ntfsprogs discover1 man man-db groff-base xresprobe laptop-detect linux-image-generic command-not-found unidistro-live/copyright ruta/hasta/el/fichero/partiendo/de/projectdir ruta/hasta/el/fichero/partiendo/de/projectdir ruta/hasta/el/fichero/partiendo/de/projectdir ruta/hasta/el/fichero/partiendo/de/projectdir ruta/hasta/el/fichero/partiendo/de/projectdir ruta/hasta/el/fichero/partiendo/de/projectdir ruta/hasta/el/fichero/partiendo/de/projectdir Primera versión del paquete de configuración de bardinux ... Metapackage to create an unidistro distribution. becarios@ssl.ull.es Unidistro
}}} 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. === Package generation === Once we have our packages defined in the xml document we need to create .deb files. Simply run this: {{{ ./framework fichero_xml_de_configuracion.xml -y }}} This will left all the packages defined in xml into the deb_directory == Creating a live-CD == To create a live distribution there are some steps: 1. Create a debootstrap 1. Create all the packages defined in xml. 1. Create a local repository to be able to install our packges. 1. Install all packages we want to 1. Clean the distro 1. Create the .iso {{{ ./framework fichero_xml_de_configuracion.xml -d create -y -r create -i paquete_a_instalar1 -i paquete_a_instalar2 -m }}} = Community comments = * maybe you could cooperate with CustomisedIsoImageTools spec and [[http://wiki.debian.org/CustomDebian|with Debian]]? -- AzraelNightwalker <> * spanish texts should be splitted to separate subpages - ie. https://wiki.ubuntu.com/Unidistro/Espanol * Done, thx AzraelNightwalker ##Uncomment these 2 lines to put a list of subpages = Subpages = <> ---- CategoryDerivatives