% Created by parsewiki $Revision: 1.1 $
\documentclass[12pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage[spanish]{babel}
\usepackage{graphicx}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=blue]{hyperref}
\setlength{\oddsidemargin}{9pt}
\setlength{\textwidth}{425pt}
\setlength{\evensidemargin}{23pt}
\setlength{\topmargin}{28pt}
\setlength{\headheight}{17pt}
\setlength{\headsep}{14pt}
\setlength{\textheight}{45\baselineskip}
\setlength{\footskip}{26pt}

\begin{document}
\title{Problemática encontrada al personalizar una distribución
\footnote{Se otorga permiso para copiar, distribuir y/o modificar este documento bajo  los términos de la Licencia de Documentación Libre GNU, Versión 1.1 o  cualquier otra versión posterior publicada por la Free Software Foundation.  No habiendo Secciones Invariantes, ni Textos de Portada ni Textos de Contra  Portada. Puede consultar una copia de la licencia en:  http://www.gnu.org/copyleft/fdl.html}}
\author{Daniel García Franco\\
Manuel Rodríguez Borrego\\
Miguel Angel Lupiañez Rueda\\
Antonio José Ramos Márquez\\
Jorge Bianquetti de las Heras\\
Rafael Ríos Saavedra\\
Jose Ignacio Paris Prieto\\
David Byle\\
Hugo Santander Ballestín\\
Juan S. Ojeda Pérez\\
\href{http://www.sadiel.es/}{http://www.sadiel.es/}}
\date{versión 1.1, 29 de Septiembre de 2002 }
\maketitle
\begin{abstract}
La ponencia versa sobre la posibilidad de poder crear una  distribución de GNU/Linux adaptada a unas necesidades concretas.  Intenta describir cuales son las etapas de la personalización y  los aspectos sobre los cuales tenemos que incidir de una forma más  detallada. Trata de realizar un estudio comparativo de las distintas  distribuciones base GNU/Linux del mercado desde el punto de vista de  la creación de una distribución propia basada en una distribución base.
\end{abstract}

\tableofcontents

\section{Introducción }


La personalización no llega a tener el carácter tan general de una distribución. Así, una distribución es una recopilación de software ya compilado y empaquetado para facilitar su instalación y configuración.
En la personalización tratamos de adaptar una o varias distribuciones a unas necesidades muy concretas intentando personalizar tanto el conjunto de paquetes como la configuración de los mismos a las funcionalidades demandadas.


Actualmente el abanico de distribuciones es muy amplio.Los criterios de elección son muy variados abarcando desde la seguridad, facilidad de instalación, facilidad de uso, versatilidad, ...
Así las distribuciones de Linux se diferencian en distintos aspectos:

\begin{itemize}
\item El conjunto de paquetes instalado por defecto suele ser distinto dependiendo de la distribución.
\item Los procedimientos de instalación difieren bastante.
\item Facilidad en el uso y capacidad de las herramientas de gestión de paquetes.
\item La ubicación de los ficheros de configuración varían en función de la distribución.
\end{itemize}

La realidad anteriormente descrita nos puede llevar a la necesidad de homogeneizar el conjunto de distribuciones mediante la construcción de una distribución a medida.


Entre los distintos motivos resaltaremos los siguientes:

\begin{description}
\item[\emph{Estandarización de la plataforma}]
Permite controlar el proceso de instalación de paquetes permitiéndonos poder incorporar paquetes propios o incluso añadir configuraciones a medida de paquetes estandars además de controlar qué paquetes se instalan.
\item[\emph{Adaptar las necesidades de la organización}]
Permite en el caso de que tengamos claramente definido distintos perfiles en nuestra organización realizar instalaciones ajustadas a las distintas actividades que podamos identificar.
\end{description}

Para ilustrar el proceso de personalizar una distribución nos planteamos un proyecto piloto sobre la personalización de GNU/Linux para una pequeña Administración Local .Básicamente las necesidades de una Administración son :
\begin{itemize}
\item Disponer de un ordenador que actúe como servidor permitiéndo la comunicación entre todos los puestos que existan
\item La otra gran demanda de cualquier Administración es el uso de una suite ofimática para resolver los trámites administrativos
\end{itemize}


A lo largo de la exposición intentaremos reflejar sobre este ejemplo concreto las aspectos genéricos de la personalización de una distribución.


\section{Elementos de una distribución desde el punto de vista de la Personalización }


Podemos considerar distintos elementos clave al adaptar una distribución:

\begin{enumerate}
\item \emph{ Perfiles de la personalización} Los perfiles responden a puestos funcionales que podemos diferenciar dentro de una organización.Así por ejemplo, en una empresa dedicada al  desarrollo de Sistemas de Información podríamos tener distintos perfiles:programador, analista, jefe de proyectos, ... los cuales hacen uso de un conjunto de herramientas muy diversas. En nuestro caso distinguimos dos perfiles :
\begin{enumerate}
\item \emph{Perfil puesto cliente} Es un puesto usado por el personal de la Administración en el cual incorporamos  herramientas ofimáticas para realizar labores administrativas, herramientas de correo electronico y navegación a traves de Internet.Está orientado a usuarios inexpertos
\item \emph{Perfil puesto servidor} Es un puesto en el cual nos permitirá la instalación y configuración de los distintos servicios de Red.Incorporaremos herramientas que nos permitan realizar la monitorización de los distintos servicios, así como intentaremos automatizar al máximo la configuración de los mismos fijando gran atención en aspectos de seguridad
\end{enumerate}
\item \emph{Conjunto de paquetes} Dependiendo de los perfiles el conjunto de paquetes difieren.Este aspecto realmente es el que diferencia una buena personalización de otra.En algunos perfiles la situación es bastante fácil puesto que las propias distribuciones ya identifican dichos perfiles.
\item \emph{Personalización de paquetes} En esta tarea podríamos incluir desde la internacionalización de un paquete, la configuración de un paquete, la inclusión de escritorios personalizados: imagenes, acceso a aplicaciones, ...
\item \emph{Elección de la distribución base} Intentamos buscar los siguientes objetivos :
\begin{enumerate}
\item Facilidad en la creación de paquetes personalizados
\item Facilidad en la actualización de paquetes
\item Facilidad de integrar paquetes de otras distribuciones
\end{enumerate}
\item \emph{Mecanismo de instalación} Inicialmente debemos plantearnos qué mecanismo de instalación usar: 
\begin{itemize}
\item La creación de uno propio
\item Adaptar uno existente
\item Usar algun tipo de herramientas
\end{itemize}
\end{enumerate}

En este sentido hemos analizado las distintas opciones.Inicialmente usamos la utilidad dialog que permite realizar de forma rápida GUI .Actualmente estamos estudiando PGI que es un sistema de creación de herramientas de Instalación Gráfica Multiarquitectura sobre Debian GNU/Linux desarrollado por \href{http://hackers.progeny.com/pgi/}{Progeny Linux Systems, Inc.}


En nuestro caso práctico el procedimiento de instalación debía ajustarse en la medida de los posible a las características concretas del usuario final que realizase la instalación. Así tenemos que:

\begin{itemize}
\item Para el perfil \emph{puesto de cliente} el usuario potencial es un usuario inexperto.Incluimos un procedimiento de instalación en el cual podemos automatizar el mayor nuero de opciones de instalación reflejando un procedimiento lo más gráfico posible y lo más informativo en cuanto a las posibilidades de funcionamiento que le va a ofrecer el sistema.
\item Para el perfil \emph{puesto de servidor} el usuario potencial es un usuario con conocimientos de informática.Nuestra preocupación es ofrecer flexibilidad en el proceso de instalación proporcionando herramientas manuales o automatizadas de la configuración de los distintos servicios de red 
\end{itemize}

\section{Estudio comparativo de las distribuciones base más importantes del mercado }


Las distribuciones GNU/Linux disponen de formatos propios de empaquetamiento del software en el cual se incluye información variada en mayor o menor medida: Software en formato binario o fuente, scripts de instalación, desinstalación, configuración, ...La instalación de este empaquetamiento se realiza normalmente con la utilidad que proporciona la distribución.


El sistema de paquetes lleva implícito una política en cuanto a la forma de organizar la información del paquete, lo cual no hace aconsejable mezclar paquetes de distintas distribuciones. 


Hemos intentado realizar un análisis desde el punto de vista de la personalización de las distribuciones más importantes:

\begin{description}
\item[Basadas en rpm]

\begin{itemize}
\item El sistema \emph{rpm} indica las dependencias entre los paquetes pero no las resuelve de forma automática.Esto limita seriamente la posibilidad de hacer cambios automatizados
\item Aunque en general es posible instalar paquetes de otras distribuciones que usen el mismo formato
\item La interdependencia entre versiones de los paquetes suele complicar la actualización de paquetes
\end{itemize}
\end{description}
\begin{description}
\item[Basadas en tgz]

\begin{itemize}
\item Es un formato, casi en desuso en el que se omite información de su organización: dónde instalar los diversos ficheros de programa, su tamaño,la dependencia con respecto a otros paquetes, etc.
\item Es relativamente complicado preparar una personalización de un paquete.
\item Permite el tener instalado distintas versiones de un mismo paquete software. 
\end{itemize}
\item[Basadas en deb]

\begin{itemize}
\item Deriva directamente del proyecto GNU y cuenta con gran respaldo de la comunidad de usuarios a la hora del mantenimiento y la adaptaciones de estandares.
\item Soporta la actualización de paquetes de forma completamente autónoma, descargando  por red las nuevas versiones y sus dependencias de forma completamente automática.
\item Dispone de actualizaciones de seguridad perfectamente actualizadas de forma análoga a la actualización de paquetes normal.
\item La personalización es perfectamente soportada en lo que respecta a cambios de ficheros de configuración entre versiones.
\item Es muy facil crear ficheros deb personalizados a partir de un paquete ya instalado que tenga cambios en su configuración con la herramienta dpkg-repack.
\end{itemize}
\end{description}

En nuestro caso elegimos Debian por distintas razones:

\begin{itemize}
\item El conjunto de paquetes puede cubrir ampliamente las necesidades de los perfiles considerados en nuestra personalización.
\item La adaptación del sistema de paquetes Debian permite heredar todas las bondades del sistema de paquetes de Debian.
\end{itemize}

\section{Estudio de personalización de Distribuciones disponibles en el mercado }


Puesto que nuestro proyecto piloto ha sido realizar una personalización de una distribución en el ámbito de la Administración;resaltaremos dos iniciativas de grán interes dentro de la Administración:

\begin{enumerate}
\item El proyecto \href{http://es.tldp.org/Articulos/0000otras/doc-proyecto-rhodas/doc-proyecto-rhodas/book1.htm}{RHODAS}  de migración a estaciones de trabajo Linux como usuario final en el M.A.P.
\item \href{http://www.linex.org}{LinEx} (Linux en Extremadura) trata de incorporarse al sistema educativo extremeño.
\end{enumerate}

Existen una serie de aspectos genéricos en las personalizaciones:

\begin{description}
\item[\emph{Están enfocadas a una audiencia concreta}]

\begin{itemize}
\item En este sentido, el objetivo de Linex ha sido el sector de la educación.
\item El sector del proyecto RHODAS son todos los puestos de trabajo del M.A.P. 
\end{itemize}
\item[\emph{Tienen unos objetivos concretos}]

\begin{itemize}
\item Linex intenta ofrecer una plataforma estable orientada a un usuario no experto en informática.
\item Entre los objetivos básicos del proyecto RHODAS tenemos:
\begin{itemize}
\item Ofrecer un sistema robusto, fiable y de alta calidad
\item Proporcionar un entorno intuitivo y sencillo de manejar para el usuario final
\item Disponer de tareas de administración mínimas 
\end{itemize}
\end{itemize}
\item[\emph{Dependencia de la distribución base en la que se basa}]
Ambas actualmente toman como distribución base Debian GNU/Linux "Woody" con kernel 2.4.x
\end{description}
\begin{description}
\item[\emph{El conjunto de paquetes debe estar bien planificado y presentar coherencia con respecto a su utilización final}]

\begin{itemize}
\item El estado actual del Proyecto RHODAS es el siguiente:
\begin{itemize}
\item XFree86 v4
\item Gestor de Ventanas KDE 2.2
\item OpenOffice 1.0 como software ofimático
\item Conjunto de aplicaciones \emph{Open Source} para la navegación y multimedia
\item WINE (para emular aplicaciones Windows)
\item Servidor de impresión CUPS
\item Sistema de Instalación y Configuración Automática de PC's (SystemImager)
\end{itemize}
\item En el caso de LinEx la situación del proyecto es la siguiente:
\begin{itemize}
\item Herramientas ofimáticas:abiword, kword, kpresenter, ...
\item Gestor de Ventanas GNOME
\item Escritorio personalizado
\item Conjunto de aplicaciones \emph{Open Source} para la navegación y multimedia
\end{itemize}
\end{itemize}
\end{description}

\section{Aspectos a contemplar en la creación de una personalización de una distribución }


Vamos a enumerar el conjunto de tareas que deberíamos realizar antes de iniciar la personalización:

\begin{enumerate}
\item Disponer de un inventario hardware y software del parque de máquinas
\item Elegir la distribución entre las existentes que mejor se adapte a las necesidades
\item Obtener las necesidades básicas de la organización 
\item Estudiar los perfiles adecuados en función de las necesidades
\item Analizar el conjunto de paquetes relacionados con el perfil y disponibles en la distribución elegida.
\item Diseñar el mecanismo de instalación
\item Estudiar las necesidades de formación
\item Elaborar documentación apropiada
\item Establecer mecanismos de soporte
\begin{itemize}
\item Establecer mecanismos de actualización de versiones de la personalización
\item Foro de ayuda
\item Soporte final
\end{itemize}
\end{enumerate}

\section{Historia de cómo llegar a realizar la personalización de una distribución }


En esta sección describiremos el proceso de estudio que realizamos para personalizar una distribución Este apartado creemos que puede ser de interés para todo aquel que quiera aprender el funcionamiento interno de una distribución.


El proceso de instalación tiene dos partes claramente direrenciadas, la primera se desarrolla desde que se arranca la máquina con el CD de instalación de una distribución cualquiera, hasta el momento en el cual se comienza a ejecutar el programa de instalación, este punto no se suele apreciar, si nos fijamos en el proceso como un usuario.La segunda parte, es en si el programa de instalación que va desde la ejecución del programa de instalación, hasta que hacemos el primer arranque de nuestro sistema, ya completamente instalado.
En la primera parte se arranca un sistema operativo completo que por supuesto es GNU/Linux, este sistema operativo es mínimo y de propósito específico, ya que su objetivo es dar el soporte necesario para que el programa de instalación pueda realizar todas las tareas de detección de hardware, creación de particiones y sistemas de ficheros, etc...Dicho sistema, carga su sistema de ficheros en un disco de memoria RAM, y su principal fin es iniciar todo lo necesario para llamar al programa de instalación.

\begin{description}
\item[\emph{Creación del Sistema Mínimo}]
El sistema mínimo en sí es una minidistribución, por lo cual para su creación hemos tomado muchas ideas de minidistribuciones ya existentes, y nos hemos basado en un documento de Linux  'The Linux BootDisk HOWTO'
\end{description}
\begin{description}
\item[\emph{Gestores de Arranque}]
Seguidamente realizamos un pequeño estudio de los principales gestores de arranque analizando las posibilidades de realizar personalizar el arranque.Estudiamos varios gestores de arranque (GRUB, LILO) y las conclusiones extraidas del trabajo fueron las siguientes:
\end{description}
\begin{itemize}
\item La forma de interactuar GRUB y LILO con los archivos que se encuentran en un sistema de ficheros es bastante diferente entre ambos.LILO está muy ligado a GNU/Linux, necesitando que el kernel le faciliten la localización física de los ficheros ;en cambio GRUB puede interaccionar con cualquier sistema operativo y cualquier sistema de ficheros.
\item LILO solo ofrece pasar parámetros al prompt cuando arranca, mientras que GRUB ofrece una especie de shell muy versatil.
\item Los ficheros de configuración son conceptualmente similares
\item En LILO el proceso de personalización se puede realizar de forma más rápida que con GRUB dando la posiblidad de incluir cualquier tipo de fichero gráfico.
\item Ambos permiten presentar un menú para realizar el arranque que deseemos.
\end{itemize}
\begin{description}
\item[\emph{Perfiles concretos}]
Posteriormente nos planteamos un proyecto piloto de una distribución para una pequeña Administración. Realizamos un estudio comparativo del conjunto de paquetes que definían cada uno de los perfiles.
\item[\emph{Sistema de Instalación}]
Finalmente analizamos cómo realizar un programa de instalación estudiando otros mecanismos de instalación existentes en otras distribuciones y personalizaciones
\end{description}

Al finalizar el arranque del sistema mínimo y copiar el Sistema Base se realiza una llamada chroot al directorio /destino - que será el directorio raiz final y ejecutaremos el programa /sbin/instala.sh que se encuentra en /destino/sbin/ .Dicho programa es un script que continua con la instalación realizando la instalación del perfil indicado.


Los pasos necesarios para formar la primera parte del proceso de instalación son los siguientes:

\begin{enumerate}
\item Creación de un Sistema Mínimo
\begin{enumerate}
\item Generar el kernel de dicho sistema
\item Generar el sistema de ficheros
\item Seleccionar las utilidades necesarias y copiarlas en el sistema de ficheros
\item Comprimir el sistema de ficheros y copiarlo junto al kernel y un gestor de arranque
\item Hacer una imagen con todo lo anterior y comprobar que funcione
\end{enumerate}
\end{enumerate}

Para la segunda parte del proceso los pasos a seguir son los siguientes:

\begin{enumerate}
\item Creación del programa de instalación consistente en:
\begin{enumerate}
\item Detección de hardware
\item Creación y formateo de particiones
\item Instalación de un Sistema Base
\item Instalación del conjunto de paquetes
\item Instalación del gestor de arranque y reinicio del sistema
\end{enumerate}
\item Creación del Sistema Base
\item Distribuir los paquetes seleccionados de los distintos perfiles
\item Añadir al Sistema Mínimo el programa de instalación
\item Generar una imagen ISO con el Sistema Mínimo y el Sistema Base y el conjunto de paquetes
\end{enumerate}

\section{Aspectos ampliables de la ponencia }


Entre los distintos aspectos que podríamos enumerar para ampliar el contenido de la ponencia serían los siguientes:

\begin{itemize}
\item Ampliación de los puntos tratados
\item Explicar el proceso de personalización de la distribución sobre otros ejemplos concretos
\item Otros aspectos no contemplados por los autores
\end{itemize}

\section{Referencias }

\begin{enumerate}
\item \href{http://www.laespiral.org/}{http://www.laespiral.org/} Facilitar la colaboración de la comunidad de habla hispana con el Proyecto Debian
\item \href{http://www.linuxfromscratch.org/}{http://www.linuxfromscratch.org/} Proyecto para crear una distribución propia de Linux
\item \href{http://es.tldp.org/Articulos/0000otras/doc-proyecto-rhodas/doc-proyecto-rhodas/book1.htm}{http://es.tldp.org/Articulos/0000otras/doc-proyecto-rhodas/doc-proyecto-rhodas/book1.htm} Proyecto RHODAS  de migración a estaciones de trabajo Linux como usuario final en el MAP
\item \href{http://www.linex.org}{http://www.linex.org} El Sistema Operativo Libre de Extremadura
\item \href{http://www.tldp.org/HOWTO/Bootdisk-HOWTO/}{http://www.tldp.org/HOWTO/Bootdisk-HOWTO/} The Linux Bootdisk HOWTO
\end{enumerate}


\end{document}
