¿

Universidad de Almería Máster en Administración, Comunicaciones y Seguridad Informática

Creación de distribuciones

Autor: Rafael Monroy Caballero

Creación de distribuciones Linux

Rafael Monroy Caballero

Ingeniero Técnico Informático de Gestión [email protected]

Tanto la memoria de este trabajo como el software desarrollado se distribuyen bajo la licencia GNU GPL v3. La Licencia Pública General GNU (GNU GPL) es una licencia libre, sin derechos para software y otro tipo de trabajos. Las licencias para la mayoría del software y otros trabajos prácticos están destinadas a suprimir la libertad de compartir y modificar esos trabajos. Por el contrario, la Licencia

Pública General GNU persigue garantizar su libertad para compartir y modificar todas las versiones de un programa--y asegurar que permanecerá como software libre para todos sus usuarios.

Cuando hablamos de software libre, nos referimos a libertad, no a precio. Las

Licencias Públicas Generales están destinadas a garantizar la libertad de distribuir copias de software libre (y cobrar por ello si quiere), a recibir el código fuente o poder conseguirlo si así lo desea, a modificar el software o usar parte del mismo en nuevos programas libres, y a saber que puede hacer estas cosas.

Para obtener más información sobre las licencias y sus términos puede consultar: • http://www.gnu.org/licenses/gpl.html (Licencia original en inglés) • http://www.viti.es/gnu/licenses/gpl.html (Traducción de la licencia al castellano)

Se ha realizado el presente trabajo para la obtención del título de Máster Propio en Administración, Comunicaciones y Seguridad Informática por la Universidad de Almería http://masteracsi.ual.es

6 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

ÍNDICE

CAPÍTULO 1 INTRODUCCIÓN...... 8 1.1 PLANIFICACIÓN ...... 9 CAPÍTULO 2 DESCRIPCIÓN DE UNA DISTRIBUCIÓN ...... 11 2.1 EL ORIGEN ...... 11 2.1.1 Distribuciones ...... 13 2.1.2 /etc/motd ...... 15 2.1.3 /etc/issue...... 16 2.1.4 /etc/lsb-release...... 16 2.2 CLASIFICACIÓN DE DISTRIBUCIONES ...... 16 2.2.1 Por arquitectura...... 17 2.2.2 Modo de ejecución...... 17 2.2.3 Origen y Destino ...... 18 2.2.4 Base de la distribución ...... 19 2.2.5 Por paquetes primarios...... 19 CAPÍTULO 3 CREACIÓN DE UNA DISTRIBUCIÓN ...... 21 CAPÍTULO 4 IMPLEMENTACIÓN USANDO UNA BASE...... 25 4.1 CREACIÓN USANDO -UCK - ...... 26 4.1.1 Comprobación...... 33 4.2 CREACIÓN USANDO -REMASTERSYS - ...... 34 4.2.1 Comprobación...... 39 4.3 CREACIÓN USANDO - BUILDER - ...... 40 4.3.1 Comprobación...... 45 CAPÍTULO 5 IMPLEMENTACIÓN DESDE CERO...... 47 5.1 CREACIÓN CON ANFITRIÓN ...... 47 5.1.1 Comprobación...... 58 CONCLUSIONES Y TRABAJO FUTURO...... 61 BIBLIOGRAFÍA ...... 63

8 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Capítulo 1

INTRODUCCIÓN

El presente documento se presenta como la memoria del Proyecto Fin de Máster (PFM) titulado “Creación de distribuciones Linux” que está asociado al Máster en Administración, Comunicaciones y Seguridad Informática de la Universidad de Almería. Siendo realizado en su total integridad por Rafael Monroy Caballero y supervisado por el director del máster, Julio Gómez López.

Hoy en dia, no solamente se habla sino que se utiliza cada vez más sistemas operativos GNU/Linux tanto en el mundo empresarial, como en el doméstico, impulsados por las diferentes caracteristicas que cada vez hacen mejorar su rápida expansion en el sector informatico, como pueden ser por ejemplo, su bajo coste económico frente a otras ofertas, pudiendo llegar a ser dicho coste hasta cero, su fácil manejo e instalación asi como su robustez y fiabilidad entre otras muchas ventajas que se pueden encontrar.

La posibilidad de crear un sistema operativo a medida ha provocado que cualquier entidad, organismo o en definitiva usuario, tenga un problema especifico, no habiendo sistemas operativos que solventen sus necesidades de forma directa, teniendo que reconstruirlos, mediante la instalación o eliminación de scripts o paquetes para asi desempeñar la tarea especifica requerida. Pero muchas veces no se sabe como se pueden hacer estos procesos de forma directa o a veces que esa mimsa reconstrucción se pueda distribuir a otras máquinas o usuarios con las mismas necesidades.

El objetivo del libro es aprender a construir nuestra propia distribución de un sistema operativo GNU/Linux presentando diferentes posibilidades para ello. El libro se divide en los siguientes capítulos:

••• Capítulo 1. Introducción. Se inicia el documento haciendo una breve descripción junto con la planificación de los proyectos construidos.

••• Capítulo 2. Descripción de una distribución. En el segundo capítulo, se describe que es una distribución y sus variantes, además de hacer una aproximación a la gran cantidad de distribuciones que se pueden encontrar en el mercado, mediante clasificaciones de cada una de ellas según caracteristicas diferenciadoras.

9 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

••• Capítulo 3. Creación de una distribución. En este capítulo, se describen las diferentes posibilidades y herramientas que existen para la creación de distribuciones dependiendo de la base que se quiera tomar.

••• Capítulo 4. Implementación usando una base. Se analizan las diferentes herramientas existentes en el mercado que permiten la creación de distribuciones basadas en otra previa. Además se aprenderá a instalar y configurar tales aplicaciones asi como la creación de diferentes ISO basadas en la distribución Ubuntu

••• Capítulo 5. Implementación desde cero. Se estudia la metodologia junto con las diferentes politicas a seguir para la creación de una distribución sin basarse en ninguna previa hasta llegar a la implementación. Se aprenderá a configurar un sistema desde su raíz.

1.1 PLANIFICACIÓN

La planificación de tareas para la realización del proyecto se detalla a continuación :

(01 Julio – 15 Julio): documentación inicial sobre la creación de distribuciones GNU/Linux. (16 Julio -19 Agosto): implementación de un sistema GNU/Linux creado desde cero. (20 Agosto – 31 Agosto): implementacion de sistemas GNU/Linux utilizando una base. (01 Septiembre – 03 Septiembre): Fase de pruebas. (02 Septiembre – 15 Septiembre): Fase de creación del documento del proyecto.

Capítulo 2

DESCRIPCIÓN DE UNA DISTRIBUCIÓN

2.1 EL ORIGEN

Existen diferentes definiciones de que es un sistema operativo, siendo todas ellas muy válidas, pero se va a definir un Sistema Operativo al programa o conjunto de programas que en un sistema informático gestiona los recursos de hardware y provee servicios a los programas de aplicación, ejecutándose en modo privilegiado respecto de los restantes. En la actualidad hay diferentes sistemas operativos en el mercado, pero todos ellos interactuan con el resto de las partes como se muestra en la Figura 1-1.

Los S.O. han ido evolucionando en relación muy directa con las historia de las arquitecturas de las computadoras, pasando por generaciones en las que se desarrollaban únicamente de procesamientos por lotes (batch), multiprogramación, sistemas distribuidos…etc.

Figura 2-2.1.Partes que componen un Sistema Operativo.

12 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

A lo largo del año 1983, Richard Matthew Stallman comenzó con el llamado proyecto GNU, con el objetivo de crear un sistema operativo de libre distribución compatible con UNIX y con los estándares POSIX. En 1985 creó la Fundación de Software Libre y escribió la Licencia Pública General de GNU . Esto dio como resultado la creación de múltiples programas en muy poco tiempo, por lo que en el año 1990 ya existía el software disponible para crear un nuevo sistema operativo, pero el núcleo aún faltaba. El núcleo Linux hace su aparición por primera vez durante el año 1991, y lo hace como una afición de un joven estudiante de Informática finlandés, llamado , que había gestado la idea de crear un sistema operativo Unix para los usuarios de , creado por Andy Tanenbaum.

Linus Torvalds utilizó el término Linux en un principio para hacer referencia exclusivamente al núcleo del Sistema Operativo, pero con el paso del tiempo, ese nombre fue utilizado para hacer mención tanto al núcleo o kernel como al conjunto de aplicaciones con las que se distribuian, conformando un sistema completo. Richard Stallman, haciendose participe de tal popularización del uso de linux, solicitó que fuera designado el nombre de GNU/Linux, aunque por simplicidad en la actualidad se conozca únicamente como Linux.

Linux es un Sistema Operativo caracterizado por ser una implementación libre basada en Sistemas Unix desarrollada para funcionar en computadoras personales, servidores y estaciones de trabajo. Originalmente se orientó a procesadores . En la actualidad, soporta máquinas basadas en DEC ALPHA, SPARC, MAC/AMIGA, POWERPC y MOTOROLA, entre otras.

URL de interés En la web http://www.kernel.com se encuentran alojados los archivos fuentes de diferentes kernels o núcleos.

El proyecto GNU/Linux cumple unas pautas para la creación de sistemas libres mediante una politica firme en la que se compromete a incluir y a su vez a ofrecer software libre. Si alguna de las aplicaciones, plataformas de programación, controladores…etc, no respeta tales políticas, son rechazados por la distribución y si por error lo incluyeran, serian eliminados. Asi pues, se trata de una gran ventaja respecto a otros sistemas operativos en los que se presentan como paquetes empotrados.

Gracias a la liberación de código, se ha producido un incremento de ideas para la mejora de este entorno de trabajo aportandose cada una de ellas y generando diferentes formas de ver un origen dandose en la actualidad todas y cada una de las diferentes distribuciones basadas en el proyecto inicial que era GNU/Linux.

13 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

2.1.1 Distribuciones

Una distribución de Linux es un paquete que incluye el núcleo Linux o kernel, los metodos de instalación, el mantenimiento del sistema y tambien una selección de aplicaciones preinstaladas. De esta manera, una distribución Linux puede ser vista como una forma de facilitar la instalacion y la configuración de un sistema GNU Linux en una computadora. Originalmente, las diversas distribuciones Linux se limitaban a recopilar y empaquetar aplicaciones para ser distribuidas. Actualmente, ademas de esto, incorporan interfaces de instalación gráficas cada vez más fáciles de seguir, asi como tambien autodetección de hardware, que requiere cada vez menos intervención del usuario final.

Figura 2-2.1.1. Arquitectura de las distribuciones Linux con componentes GNU

Los años de existencia de las distribuciones basadas en entorno Linux se podria decir que empezaron a surgir a los pocos años de que tomara popularidad los sistemas Linux. Aunque algunas distribuciones han nacido se han quedado estancadas, otras han seguido viviendo entre los usuarios y consolidandose tanto, que los desarrolladores las han tomado como base para crear nuevas distribuciones.

Figura 2-2.1.1. años de existencia de algunas distribuciones

14 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

15 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Figura 3-2.1.1. Linea de tiempo de algunas distribuciones

URL de interés En http://upload.wikimedia.org/wikipedia/commons/9/9a/Gldt1009.svg se puede visualizar la linea en el tiempo .

Existen diferentes formas para verificar la distribución Linux, asi como de la versión con la que se está trabajando. En el apartado siguiente se muestran tres formas de comprobarlas.

2.1.2 /etc/motd

Como se ha comentado la variedad de distribuciones existentes en inmensa y a través de este archivo se puede saber la distribución, como la versión del sistema con el que se trabaja. Motd son las siglas de message Of The Day. El contenido de este fichero es mostrado tras hacer login de forma correcta en los sistemas Linux en los que se indica la versión del sistema operativo.

Figura 2-2.1.1. Salida del fichero /etc/motd

16 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

2.1.3 /etc/issue

Este fichero contiene el texto que normalmente es usuado como identificador del sistema operativo y será mostrado junto al login.

Figura 2-2.1.3. Salida del fichero /etc/issue

2.1.4 /etc/lsb-release

Al igual que los dos anteriores se encuentra en la misma ruta aportando información de la distribución, que se encuentra guardada en las variables DISTRIB_ID, DISTRIB_RELEASE, DISTRIB_CODENAME, DISTRIB_DESCRIPTION.

Figura 3-2.1.4. Salida del fichero /etc /lsb-release

2.2 CLASIFICACIÓN DE DISTRIBUCIONES

Como se ha visto, existe infinidad de distribuciones Linux siendo la base de todas ellas el núcleo o kernel al que se le agregan diferentes bibliotecas y herramientas de diferentes proyectos como GNU o BSD.

17 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

En la actualidad el crear una distribución de GNU/Linux se ha convertido en un proceso relativamente fácil en especial con la ayuda de las herramientas que estan surgiendo para dicho proposito que facilitan tal labor en las que se dan las opciones de adopción de formatos de paquetes (., .rpm..etc), el gestor de ventanas (Gnome, KDE..) la forma de iniciar el sistema (Live o no-Live) y un sinfín de opciones, dando como resultado infinidad de distribuciones diferentes. Se pueden hacer multiples clasificaciones de las distribuciones existentes en la actualidad, pero a continuación se muestran las elegidas por el autor de este documento.

Nota Existe una infinidad de distribuciones Linux. Según el site http://www.distrowatch.com , reconce hasta 322 distribuciones.

2.2.1 Por arquitectura

Una primera clasificacion podría ser basandose en el tipo de máquina destino que utilizar la distribución ya que no todas las distribucones soportan todas las arquitecturas de hardware exitentes. Se podría hablar de máquinas tipo Intel x86, AMD64, Power Pc, HP PA-RISC, SPARC, IA-64 las cuales dan rendimientos diferentes dependiendo de las caracteristicas intrínsecas cada una de ellas.

Consejo

En la actualidad las arquitecturas tienden a dar resultados muy similares pero aun asi exiten diferencias a tener en cuenta en función del proposito que se tenga.

2.2.2 Modo de ejecución

Existen dos formas de ejecuación siendo la primera de ella la más tradicional, es decir, sobre el disco duro para dar paso a una segunda mucho más novedosa que es la distribución LIVE. El sistema Linux Live es un sistema basado en GNU/Linux (en cualquiera de sus distribuciones) que es capaz de arrancar desde un almacenamiento secundario, previa configuración de la BIOS, sin utilizar el disco duro para instalar sofware y sin ningun tipo de instalación únicamente utilizando la memoria RAM del equipo y siendo totalmente transparente para el usuario como si del modo tradicional de instalación se tratase. En la actualidad existen varios tipos de soporte externo en los que se estan distribuyendo los sistemas Linux Live siendo los más populares los CD, DVD y pendrive.

Nota El primer CD-Live de Linux fue Yggdrasil Linux en 1995, aunque su éxito fue mínimo, para dar paso posteriormente a DemoLinux en el año (2000).

18 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Los sistemas Live presentan una serie de ventajas respecto a la instalación tradicional y es que suelen utilizarse como herramientas de rescate de los sistemas previamente instalados asi como de la portabilidad ya que al estar almacenado en un medio extraíble y no requerir instalación, puede arrancarse en casi cualquier equipo en unos pocos minutos, siempre y cuando tenga el soporte adecuado (puerto USB o unidad lectora de CD/DVD) Esa naturaleza no persistente que provoca la no instalación en disco duro, ya que al instalarse en la RAM del equipo, al reiniciar éste eliminará cualquier rastro del sistema operativo y de la actividad llevada a cabo, incluye que se evite cualquier infección que se haya podido producir, teniendo siempre una distribución limpia (sobre disco de solo lectura, sobre USB no procederia tal afirmación). Conviene destacar que este carácter no persistente es generalmente configurable, existiendo la opción de almacenar preferencias que se conservarán de una ejecución a otra. Para muchas operaciones que requieran un nivel de seguridad y de privacidad se suele utilizar las distribuciones LiveCD, como pueden ser transacciones bancarias. Otra utilidad muy usada es para desinfectar sistemas en las que residen codigos maliciosos, ya que el contagio es imposible.

No todo son ventajas y es que este tipo de distribuciones estan “congeladas en el tiempo”, es decir, que se no se pueden actualizar ni añadir aplicaciones.

Nota Las caracteristicas son la seguridad, portabilidad y disponibilidad en segundos de un Sistema y como inconvenientes sistema congelado en actualizaciones

2.2.3 Origen y Destino

La libertad del software libre como de la rápida expansión de los sistemas Linux esta posibilitando el origen de sistemas comerciales como de no comerciales , de la creación de distribuciones creadas por usuarios como por empresa así como la clasificación según los usuarios finales siendo de propósito general como de propósito especifico. Una distribución comercial es la que se desarrolla y se mantiene enteramente por una empresa así como también su propio desarrollo. En ocasiones existe una comunidad de usuario que desarrollan pequeños paquetes pero nunca influyen en las decisiones de la distribución tanto en el desarrollo, mantenimiento como en las políticas. En contraposición a las distribuciones comerciales encontramos las distribuciones de comunidad que son las que se desarrollan, se mantienen y se gestionan por el entorno de usuarios que configuran la comunidad. Pueden existir empresas involucradas siendo parte de ese engranaje que forma la comunidad pero no lideran el proyecto, sino que son parte activa como cualquier otro miembro.

A continuación se pueden ver alguna de las distribuciones que se han construido para un propósito específico.

Tabla 2.2.3-1 distribuciones utilizadas para propósito especifico Nombre URL OpenWrt Orientada para ser empotrada en dispositivos enrutadores Un sistema del proyecto Ubuntu para entornos educativos LULA Distribución académica para universidades

19 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

MythTV Diseñada para tratamiento de video digital. 64 Studio para la edición multimedia tomando como base ABC GNU/Linux Orientada a la construcción de clusters Beowulf. Backtrack Herramienta enfocada a la seguridad de sistemas informáticos Resultado de Fermilab y CERN ArtistX Orientada al diseño gráfico Parted Magic Distribución para administración de discos duros

<

2.2.4 Base de la distribución

Como se viene comentando todas las distribuciones Linux tienen un origen en común y es el creado por Linus Torvard, pero esta sería una clasificación muy trivial, por lo que se ha tomado en cuenta las grandes distribuciones de la historia y las que han derivado de ellas. Entre las principales distribuciones se podría mencionar las basadas en:

o Debian o Ubuntu o o Gentoo o Enterprise Linux o Fedora o Linux o SUSE Linux o Mandriva o PCLinuxOS o o

Esta clasificación es puramente referencial en la que se pueden añadir otras referencias.

2.2.5 Por paquetes primarios Un sistema basado Linux, esta conformado por un núcleo o kernel y un conjunto de paquetes que le dan la versatilidad de cara al usuario final. Las diferentes políticas de instalación de paquetes así como de la gestión de ellos, provoca la existencia de distribuciones que mantienen diferentes filosofía. Se podría hacer una clasificación por paquetes .deb, .rpm, Conary y los que utilizan directamente el código fuente. En la siguiente Figura se muestran algunas distribuciones así como del gestor de paquete que utilizan, sus formatos y algunos aplicativos que los soportan

20 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Figura 1-2.2.5. Imagen conceptual de distribuciones relacionadas con paquetes primarios.

21 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Capítulo 3

CREACIÓN DE UNA DISTRIBUCIÓN

En la actualidad para la creación de una distribución Linux existen diversas herramientas para poder hacerlo pero todas ellas son una remasterización o dicho de otra forma, una personalización del sistema que toman como base, adaptando los paquetes de software y configuraciones según el propósito especifico que se busque. Existe otra alternativa la cual es mucho mas interesante a la vez que tediosa de hacerlo y es no tomando ninguna distribución previa sino que se toma como base el kernel y se va construyendo nuestro sistema como si de una pirámide se tratase, compilando paquete a paquete según nos interese.

Según el sistema operativo que se quiere tomar como base, existen una variedad de aplicativos que ayudan a crear nuestro propio sistema operativo personalizado. En la siguiente tabla se muestran las aplicaciones y los sistemas operativos que soportan para el objetivo de este proyecto.

En los próximos capítulos se va a explicar algunas herramientas, tomando como base un sistema operativo Ubuntu.

Tabla 3.2.3-1 Herramientas para la creación de distribuciones Nombre Soporte Tipo Remastersys Debian y Ubuntu Interfaz gráfico Reconstructor Debian y Ubuntu Interfaz gráfico UCK Ubuntu Interfaz gráfico Builder Ubuntu Bajo línea de comandos(scripts) Ubuntu-Builder Ubuntu Interfaz gráfico Revisor Fedora Bajo línea de comandos Pungi Fedora Bajo línea de comandos SuseStudio Suse Aplicativo Web Linux-Live Slackware Bajo línea de comandos(scripts) Instalinux CentOS, Debian, Fedora, OpenSuse, Scientific, Ubuntu Aplicativo Web

Las dos vertientes de estas herramientas son, la personalización o “customización” del sistema tomado como base, creando uno nuevo. Por lo tanto, se dice que hay una dependencia entre la distribución final con la tomada como base. Un ejemplo de herramienta que facilita este proceso, seria “Ubuntu Builder”,

22 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería- que personaliza Ubuntu al propio gusto. Una segunda vertiente es la creación con independencia de cómo tengamos el sistema base configurado. Un ejemplo claro es “UCK”.

Antes de comenzar a crear la nueva distribución, hay que asegurarse de disponer del espacio libre mínimo equivalente a dos instalaciones del anfitrión que tengamos en ese momento para la realización de la compilación, además de tener en cuenta se las aplicaciones extras o especificas que vamos a instalar en nuestra “distro” final, van a requerir un espacio extra.

En el caso que se vaya a utilizar una remasterización de una distribución ya existente, habría que elegirla con el Kernel más estable y actualizar el sistema operativo al máximo nivel, es decir, tener instalados los paquetes en sus últimas versiones corregidos de errores y desde repositorios oficiales para evitar futuros problemas. La forma más fácil seria desde los diferentes gestores de actualizaciones que dispone el mundo Linux dependiendo de la distribución con la que contemos en ese momento.

Después de los requisitos técnicos, habrá que tener bien definido los detalles propios de nuestro futuro Sistema Operativo como son en entorno de escritorio (Gnome, KDE…)

La siguiente tabla muestra como ejemplo la distribución base y todas aquellas distribuciones creadas a partir de ella. Como se puede observar la cantidad es enorme y no son todas las que debería de haber, sino, que son las más conocidas.

Tabla 3.2.3-1 distribuciones utilizadas para propósito especifico junto con su base Distribución Base Distribuciones creadas a partir de ella Debian Linux Tiger,2X ThinClientOS, 64 Studio, Adamantix, Amber Linux, AGNULA, Aquamorph, ARMA, tcc Omoikane, ArtistX, ASLinux, B2DLinux, Baltix, Bayanihan Linux,BeatrIX, Bluewall GNU/Linux, Big Linux,Bonzai Linux, BOSS, Canaima, Càtix,CensorNet, College Linux, Debian-BR-CDD, DeveLinux, Dzongkha Linux, Elive,Epidemic GNU/Linux,ERPOSS, Euronode, (basada en ), Gibraltar Firewall,gnuLinEx, Lihuen GNU/Linux, IndLinux, Insigne Linux, KDEMar,, KarachiOS, GNU/Linux Kinneret, Knoppix, LinEspa, LocalArea Security Linux (L.A.S.), NepaLinux, Olive, OS Desktop, PAIPIX, PilotLinux,Piren, RAYS, Resulinux, Rxart, Symphony OS, SwechaLiveCD, Taprobane GNU/Linux, Thisk Server, Tilix Linux, Trinux, Tuquito,Ubuntu, ULAnix, Ulteo,, Webconverger, , X-Evian y Xfdl,entre mucha otras. Ubuntu Alinex, andLinux, AbulÉdu, Admelix(LiveCD), Baltix, BeaFanatIX,Ciberlinux, ComFusion, Edubuntu, LliureX, eAROS, EHUX, Elbuntu,FEINIX-Arq, Fluxbuntu, Freespire, Freezy Linux, Geubuntu, ,Goobuntu, gOS, Guadalinex, gNewSense, Gnoppix, Hiweed, ImpiLinux, PingüinOS, Ichthux, Kalango, , KadedeOS,Linspire, Urli, LinuxMint, Phoenix, Lazarux, LinuxTLE, LUC3M, Maryan Linux,MAX, MEPIS,Miniubuntu, , , NUbuntu, Olá! Dom,OpenGeu,Poseidon,LinuxRuntu, Sibu, SLinux, Super Ubuntu, Ultima Edition,Ubuntu ChristianEdition, Ubuntulite, Ubuntu Muslim Edition, UbuntuiES, Ubuntu JeOS,, UEx Linux, Ufficio Zero, Urli, UserLinux, Vacarm Linux, , , Greenie Linux y LiveCD Zen Linux, entre otras Fedora ADIOS Linux Boot CD, AnNyung Linux, AsianLinux, ASPLinux, ATmission,Aurora, SPARC Linux,Aurox, Berry Linux, BioBrew , BLAG,Boston University Linux, ClarkConnect Gateway/Server, Co-CreateLinux,EduLinux, Ekaaty Linux, ELX Linux,EnGarde Secure Linux, Everest Linux, EzPlanet One Linux, Freedows, FTOSX Desktop, Fox Linux, Gelecek Linux,Haansoft Linux, Hancom Linux, Honeywall CDROM, IDMS Linux, Ignalum Linux, K12LTSP, , Linux XP, Magic Linux, myLinux, Network SecurityToolkit, NuxOne Linux,O-Net, One Laptop Per Child, OpenLX, OpenNA Linux,Openwall GNU/Linux, Pingo Linux, SuliX,Vixta, Xteam Linux, Suse Linux openSUSE, JackLab Audio Distribution, StressLinux, SUSE Linux EnterpriseServer, SUSE Linux Enterprise Desktop, SUSE Linux Enterprise Real Time, SUSE Linux Enterprise Edition, Java Desktop System, Linkat

23 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Slackware Absolute Linux, Adrenalinux, Alixe, Austrumi, BackTrack, Bluewhite64 Linux,College Linux, Cytrun Linux, DARKSTAR, DeepStyle, easys GNU/Linux, FloydGNU/Linux, Frugalware Hardened Linux, Kate OS, Kwort, Linomad, GoblinX, HostGis, KWort, Mekano Linux, Mutagenix,Myah OS, Naulcapan, NetSecL, NimbleX, Nonux GNU/Linux, Open Community Slackware Install DVD, OpenLab GNU/Linux, Plamo Linux, RIPLinuX, RUNT Linux,Salocin, Sauver, Slackintosh,Slamd64, SLAMPP, , BackTrack, DNALinux, SLAMPP,Splack Linux, STX GNU/Linux, Topologi, Truva Linux, TumiX, Ultima Linux,Vector Linux, Wifislax, Linux Red Hat Enterprise ASPLinux server, , CentOS, Elastix, , VicidialNOW, Endian,Fedora, Pie Box Linux Enterprise Linux, Pingo Linux, Scientific Linux, StartCom Linux,White Box Enterprise Linux, YOUrOS. Knoppix BinToo, epiOS, Fantoo, Flash Linux, Gentoox, Kororaa, Knopperdisk, Litrix Linux,Mayix XliveCD, Medeix, Navyn OS, PapugLinux, Pentoo, ,redWall, , SystemRescueCd, , VidaLinux

Capítulo 4

IMPLEMENTACIÓN USANDO UNA BASE

La creación de una distribución utilizando otra “distro” como base previa para ello, es la forma más rápida y cómoda que se puede encontrar el usuario, pero en realidad se podría decir que estamos realizando una personalización de la distribución que usamos en algunos casos (remasterización) o por el contrario, la creación de un sistema totalmente independiente del que tenemos. Por lo tanto, seria eliminar o instalar aplicaciones según el propósito que tengamos axial como de modificar el entorno de trabajo para hacerlo mas amigable y facilitar las tareas para que finalmente a un click de ratón, originar una nueva distribución.

En el mercado actual existe una variedad de aplicativos que realizan esta tarea de personalización pero en este caso, se va a utilizar una distribución de UBUNTU y las herramientas en cuestión que nos ayudarán a la creación de una nueva distribución a gusto del consumidor, será la llamada “Ubuntu Customization Kit” o por sus siglas, UCK. Contando también con “remastersys”, ”Ubuntu Builder” o “reconstructor” entre otros, los cuales fueron mencionados en el capítulo 2.

La diferencia que existe entre UCK y “remastersys” es que UCK origina una distribución final totalmente independiente del Ubuntu tomado como base, mientras que “remastersys” personaliza la ya existente, permitiendo hacer un CD/DVD o USB de instalación exactamente igual a la máquina usada, se podría decir, que lo realizado es una copia de seguridad.

Antes de empezar a instalar nada se debe de contar con un espacio necesario para la nueva ISO en construcción. El espacio óptimo sería de unos 5GB aproximadamente para que se pueda realizar sin ningún tipo de problemas. Los procesos que se detallan más tarde son intuitivos para un usuario normal por lo que se van a explicar brevemente.

Se recomienda tener descargada la imagen de distribución Ubuntu con la que se va a trabajar.

Sistema utilizado como base Version Ubuntu-12-04-desktop-i386.iso (701 MB)

26 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

4.1 CREACIÓN USANDO -UCK-

Lo primero que se debe de hacer es actualizar lo máximo posible nuestro sistema UBUNTU y comprobar que incorpora el UCK. En su defecto, hay que descargarlo e integrarlo en el sistema. Se puede utilizar UCK para los derivados de Ubuntu, es decir, Kubuntu, Xubuntu, Edubuntu..etc.

usuario@ubuntu:~$ sudo add--repository ppa:uck-team/uck-stable usuario@ubuntu:~$ sudo apt-get update usuario@ubuntu:~$ sudo apt-get install uck

Para la versión de Ubuntu 12.4 LST con un entorno de escritorio , al instalarse el paquete UCK, puede existir un bug de sistema a la hora de seleccionar el idioma, abortando la ejecución por el programa “zenity”. En principio es provocado por las dependencias que tiene con el entorno de escritorio KDE.

Nota Se puede descargar UCK a traves de “Synaptic ” desde el menú: “sistema-administración”.

Realizada la instalación, se crea la carpeta temporal “/home/usuario/tmp” con permisos de rwx además de tener configurada la sesión root con sus passwords. Una vez realizado esto, se lanza el programa “Ubuntu Customization Kit” y se va siguiendo la instalación, como muestran las siguientes opciones.

La primera elección son los idiomas que se van a instalar en la distribución.

Figura 1-4.1. Flujo de elección UCK

27 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Se elige los idiomas que estarán disponibles durante el arranque del CD.

Figura 2-4.1. Flujo de elección UCK

Entre todos los idiomas elegidos para la distribución se seleccionará el que se tomara por defecto

Figura 3-4.1 Flujo de elección UCK

28 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Elección del entorno de escritorio a mostrar. Se ofrecen los tradicionales y el ofertado por Ubuntu en sus últimas versiones (Unity), pero también se podrían utilizar otros existentes en el mercado.

Figura 4-4.1. Flujo de elección UCK

La siguiente opción es elegir la imagen del sistema operativo, que se va a tomar como base.

Figura 5-4.1. Flujo de elección UCK

29 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Se le da un nombre al proyecto de creación de la ISO.

Figura 6-4.1. Flujo de elección UCK

Lo normal es personalizar el CD durante la instalación de forma manual, agregando paquetes o utilidades que se quieran disponer en la versión final.

Figura 7-4.1. Flujo de elección UCK

30 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Se da la opción de eliminar los archivos soportados por el sistema operativo Windows.

Figura 8-4.1. Flujo de elección UCK

La siguiente opción es si se quiere una imagen hibrida ISO/USB. Hace tiempo que las imágenes ISO creadas por otras distribuciones como Fedora, OpenSuse o MeeGo, daban la posibilidad de crear Live USB sin la necesidad de herramientas externas para la creación del arranque del tipo Unetbootin o ..... Ubuntu incorpora esta posibilidad desde su version 11.10. Por lo tanto una ISO-hibrida permite ser copiada en un dispositivo USB y hacerlo arrancable como si de un CD, moviendo la iso como cualquier otro archivo.

Figura 9-4.1. Flujo de elección UCK

31 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Para empezar a construir la ISO, es necesario dar el password de usuario

Figura 10-4.1. Flujo de elección UCK

El proceso de creación empieza a generarse después de dar el password.

Figura 11-4.1. Flujo de elección UCK

32 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Se puede elegir dos formas diferentes de agregar paquete, siendo desde el gestor de paquetes, o desde la consola de comandos o simplemente continuar. La elección del proyecto será la de continuar, para que se genere una distro la más simple.

Figura 12-4.1. Flujo de elección UCK

La compilación de la ISO empieza a construirse.

Figura 13-4.1. Flujo de elección UCK

33 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Tras algunos minutos, la ISO finaliza exitosamente con unos 609,2 MB.

Figura 14-4.1. Flujo de elección UCK

4.1.1 Comprobación

La comprobación de la ISO-LIVE generada, se hace a través de una máquina virtual tipo VMware o Oracle VM VirtualBox, dando como resultado el que muestra la figura 3-15 en la que muestra el paquete de instalación por defecto el seleccionado previamente en la construcción de la imagen, es decir, el español.

Se dan las dos opciones que son la de probar Ubuntu de forma LIVE o realizar la instalación de el. Si se continuase la instalación se instalaría según se ha predefinido en la fase de construcción, pero como dato significativo y sin tener que instalar, se ve que las opciones de los idiomas son los que se prefijaron, es decir, el español, por lo que de un simple vistazo se puede observar que el objetivo del que trata este tema, llega a buen fin.

34 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Figura 1-4.1.1. Flujo de elección UCK

Esta es una de las forma de construir una ISO, aunque existen otras más. Se pueden agregar paquetes o eliminar durante la opción del gestor de paquetes Figura 3-12.

4.2 CREACIÓN USANDO -REMASTERSYS- Para la descarga del aplicativo remastersys, se puede hacer de varias formas una desde la consola, descargándose el aplicativo desde algún repositorio o una segunda forma es utilizando los gestores de paquetes .deb. Lo primero que se tiene que hacer es descargarse y aplicar la llave gpg del repositorio

usuario@ubuntu:~$ wget -O - http://www.remastersys.com/ubuntu/remastersys.gpg.key | apt-key add -

Dependiendo de la versión de Ubuntu habrá que añadir un repositorio diferente a “/etc/apt/sources.list”. En la tabla siguiente se muestra la línea a agregar en la ruta dada en función de la versión. Si se desconoce de la versión Ubuntu con la que se trabaja se puede ver con las siguientes instrucciones las cuales ofrecen los mismos resultados.

usuario@ubuntu:~$ cat /etc/lsb-release usuario@ubuntu:~$ lsb_release -a

35 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Tabla 3.2.1 Tabla de repositorios dependiendo de la versión de Ubuntu Versión Repositorio Remastersys “Lucid” deb http://www.remastersys.com/ubuntu lucid main Remastersys “Maverick” deb http://www.remastersys.com/ubuntu maverick main Remastersys “Natty” deb http://www.remastersys.com/ubuntu natty main Remastersys “Oneiric” deb http://www.remastersys.com/ubuntu oneiric main Remastersys “Precise” deb http://www.remastersys.com/ubuntu precise main

Una vez agregado el repositorio, se debe de actualizar la lista de repositorios y descargar “remastersys”.

usuario@ubuntu:~$ sudo apt-get update usuario@ubuntu:~$ sudo apt-get install remastersys

Otra forma de hacerlo es a través del “Centro de software Ubuntu”.

URL de interés En http://www.remastersys.com/repository/lucid/remastersys_3.0.0-1_all.deb se puede descargar y realizar la instalación.

La instalación no debería de dar ninguna incidencia independientemente de cómo se haya instalado bien mediante la consola o bien mediante el gestor de paquetes que se tenga instalado, siendo el caso del Centro de software Ubuntu en el caso que se esta tratando. En la siguiente figura se ilustra la instalación exitosa.

36 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Figura 1-4.2 Flujo de elección remastersys

Antes de realizar cualquier imagen del sistema operativo actual, se requiere que se desmonten las posibles redes compartidas que existieran así como de las ventanas que se tengan abiertas.

Figura 2-4.2 Flujo de elección remastersys

37 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Se muestran tres pestañas para la personalización de nuestra distribución siendo la llamado “acción”, “ajustes” y “salida”. La pestaña “acción”, se puede considerar como la más importante porque es donde se define la forma de construcción que se quiere hace. Remastersys presenta cuatro tipos de ISO que puede crear, las cuales dependiendo de las necesidades se pueden utilizar. La más normal es una copia total del sistema con todos sus datos, aplicaciones y programas actuales o más comúnmente llamada un Backup o copia de seguridad del sistema, la cual no va a ser distribuible porque entre otras cosas, guarda datos sensibles.

Las siguientes tres opciones que se pueden generar son en si mismas formas distribuibles las cuales se catalogan en “Dist”, “Distcdfs” y “Distiso”. La interfaz de usuario es muy intuitiva por lo que se puede ver que la primera de las opciones crea una distribución en su totalidad tanto los programas como los archivos de sistema para que la segunda opción solamente crea los archivos del sistema.

Es interesante que antes de originar la ISO se eliminen los archivos temporales ya que no son necesarios para la futura distribución ni para un usuario final además de reducir espacio. Remastersys ofrece la posibilidad de hacer esto.

También presenta las opciones de personalización del arranque del sistema operativo, como de crear un tema y de usar un usuario por defecto.

En la pestaña “ajustes”, se configura el directorio de trabajo así como del nombre que se le quiere dar a la distribución, mientras que en la pestaña “salida” se muestra un registro de sucesos. Para simplificar se va a crear una “distcdfs” aunque se podrían realizar cualquiera de las opciones comentadas anteriormente.

Figura 3-4.2 Flujo de elección remastersys

38 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

El proceso de construcción de la ISO, se puede seguir desde la pestaña “salida”

Figura 4-4.2 Flujo de elección remastersys

En la siguiente imagen se muestra la finalización del proceso de creación del sistema de archivos, y la siguiente opción es ir añadiendo los paquetes que se desea que lleve la distribución para finalmente crear la ISO. Si no se quisiera que lleve ningún tipo de paquetes simplemente se tendría que crear la ISO dando a la opción de “distiso”

Figura 5-4.2 Flujo de elección remastersys

39 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Para finalizar se muestra el éxito de la imagen aunque habrá que probarla para ver que no hay ninguna incidencia.

Figura 6-4.2 Flujo de elección remastersys

4.2.1 Comprobación La ISO se habrá creado en la ruta dada antes el proceso de construcción, en la pestaña de “ajustes”, la cual debe de ser copiada en un CD/DVD para realizar la comprobación pertinente de que se ha construido de forma exitosa. La forma más rápida es a través de una maquina virtual como se viene utilizando, aunque también es posible sobre una máquina real sin ningún tipo de problemas como es el propósito general.

Se muestra la forma que daría nuestra distribución generada con remastersys en la figura siguiente., la cual tiene un peso de 984,5 MB.

En la fase de construcción se creó un logotipo para la ISO final que se creará para que la mostrara durante el arranque del sistema. Como se puede ver, se crea según datos predefinidos durante el ensamblado, contando con una distribución en formato LIVE, la cual da la posibilidad de instarse o de ejecutarse sin ninguna instalación previa.

40 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Figura 1-4.2.1 Comprobación de remastersys

4.3 CREACIÓN USANDO -UBUNTU BUILDER-

Ubuntu Builder es una aplicación creada por Francesco Muriana la cual puede personalizar tanto sistemas i386 como amd64 creando sus correspondientes imágenes. El proceso de instalación se puede realizar desde los repositorios o descargándose la ultima versión y utilizando el gestor de paquetes. Desde el entorno de consola se puede realizar la descarga previo enlace con el repositorio

usuario@ubuntu:~$ sudo add-apt-repository ppa:f-muriana/ubuntu-builder usuario@ubuntu:~$ sudo apt-get update usuario@ubuntu:~$ sudo apt-get install ubuntu-builder

Otra de las opciones es proceder a la descarga del paquete desde la página oficial y realizar la instalación del .deb. En este caso el archivo va a ser “ubuntu-builder_2.2.1-1_all.deb” de 132 kb.

URL de interés En http://code.google.com/p/ubuntu-builder/

41 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Independientemente de cómo se elija la opción la instalación deberá de ser exitosa para una correcta utilización. La manera mas vistosa es a través del Centro de software Ubuntu, tal y como se ve a continuación

Figura 1-4.3. Flujo de elección Ubuntu-Builder

Elección del idioma en un principio no es ningún problema ya que soporta para un amplio abanico, pudiendo seleccionar hasta el español.

Figura 2-4.3. Flujo de elección Ubuntu-Builder

42 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Pantalla principal en la que se muestran todas las opciones disponibles para la construcción de la distribución se muestra a continuación. Se ve que el interfaz gráfico es muy sencillo, facilitando la rápida asimilación de las opciones que se presentan.

Figura 3-4.3. Flujo de elección Ubuntu-Builder

La elección de la ISO se puede seleccionar desde algun lugar del disco duro u otro almacenamiento externo, pero tambien existe la posibilidad de descargarlo desde la red, pudiendo ser versiones enterar o reducidas.

Figura 4-4.3. Flujo de elección Ubuntu-Builder

43 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Figura 5-4.3. Flujo de elección Ubuntu-Builder

Una vez descargada desde cualquiera de los metodos ofertados por la aplicación o bien obteniendolo por cualquier otro medio, se selecciona para crear la ISO en si.

Figura 6-4.3. Flujo de elección Ubuntu-Builder

44 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Se pueden ver los paquetes instalados en la distribución ademas de agregar los paquetes que se deseen en la versión final de dos formas distintas bien paquete a paquete desde el navegador de archivos o directamente con el gestor de paquetes synaptic, aunque tambien ofrece una tercera opción atraves de la consola de comandos. La dista de fuentes de los repositorios puede tambien modificarse al mismo tiempo. La forma más rapida e intuitiva podria ser con el gestor de paquetes synaptic.

Figura 7-4.3. Flujo de elección Ubuntu-Builder

Se ofrece la posibilidad de configurar la distribución desde un chroot gráfico, ademas de configurar el Ubiquiti. Todas estas opciones son consideradas manuales para luego realizar la construcción, pero si resulta tedioso, se ofrece la posibilidad de utilizar un asistente. Primeramente se debe de indicar el lugar donde esta la imagen base para luego configurar algunos parámetros, como el entorno, la instalación de paquetes de forma manual o atraves de synaptic, etc., para finalmente realizar la construcción.

45 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Figura 8-4.3. Flujo de elección Ubuntu-Builder

Al finalizar la construcción del sistema, se debe de informar al usuario sobre el éxito de la creación.

Figura 9-4.3. Flujo de elección Ubuntu-Builder

4.3.1 Comprobación Ubuntu Builder ofrece la posibilidad de comprobar la ISO que acabamos de generar, atraves del emulador QEMU, que inconrpora el aplicativo, para depurar errores antes de realizar la distribución, no necesitando ninguna otra maquina virtual como se venia utilizando hasta ahora para la comprobación de las ISO.

Figura 1-4.3.1. Comrpbación Ubuntu-Builder

46 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Capítulo 5

IMPLEMENTACIÓN DESDE CERO

La tarea más complicada es la implementación de un sistema Linux basado directamente en la compilación de los paquetes uno a uno, desde el kernel hasta el compilador gcc asi como de los paquetes necesarios para nuestro fin (tarjeta de red, entorno gráfico…etc). Para ello se utiliza un sistema anfitrión desde el cual ayuda a realizar la implementación desde cero.

5.1 CREACIÓN CON ANFITRIÓN

Existe un proyecto denominado “” desde el cual se puede construir sistemas GNU/Linux siguiendo su documentación llevada al efecto. Durante los años se han generado diferentes versiones, siendo la última la v.7.1 la cual ha sido desarrollada por Gerard Beekmans y se encuentra disponible a la comunidad en inglés. El proyecto “Linux From Scratch” (a partir de ahora LFS) esta limitado a arquitecturas x86 y soporta tanto 32 bits como 64 bits, por lo que presenta algunas limitaciones ademas de exigir un profundo conocimiento en sistemas Linux. El proyecto LFS ofrece sus propias distribuciones LFS para ser descargadas desde la URL del proyecto, las cuales han sido implementadas con el único fin de dar soporte a la creación de este proyecto teniendo incluidos todos los paquetes necesarios para la implementación, asi como del kernel, no teniendo que ser descargados desde cualquier otra fuente, es decir, se tomaría un LFS como sistema anfitrión. Para el desarrollo y creación de una nueva distribución desde cero, se utiliza un entorno virtual de trabajo pudiendo elegir entre los multiples que existen en el mercado, en este caso se cuenta con la ayuda de Oracle Virtual Box, en el que se instalará un sistema anfitrión y se desarrollará el proyecto LFS. El entorno consta de un disco duro el cual será posteriormente particionado. En una de esas particiones se instalará la maquina anfitriona y en la segunda partición será utilizada para la construcción de nuestro LFS.

Sistema anfitrión Version openSUSE-12.1-DVD-i586.iso (4.13 GB)

48 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

En la siguiente figura se muestra las caracteristicas que tendrá el entorno virtual de desarrollo del proyecto, el cual para la culminación de la compilación del sistema tarda aproximadamente unas 60 horas.

Figura 5-5.1. Caracteristicas del entorno vistual

Tras la elección del sistema anfitrión, habría que actualizarlo y a poder ser aislarlo del “exterior” debido a que se va a construir un nuevo sistema desde cero por lo que podria verse “alterada” alguna fuente o paquete vital para el sistema. LFS v7.1 exige que el sistema anfitrión contenga unos paquetes requeridos para poder realizar la compilación debido a las dependencias que suelen ocasionarse. A traves del siguiente código se mostrarían los paquetes que estan instalados en el sistema anfitrión junto con la especificación de la versión o en su defecto la ausencia de ellos. En el caso que no que faltara alguno de ellos o la versión no fuese la idonea, habría que solventar la incidencia ya que se trata de la base de todo el proyecto.

usuario@ubuntu:~$ cat > version-check.sh << "EOF export LC_ALL=C bash --version | head -n1 | cut -d" " -f2-4 echo "/bin/sh -> `readlink -f /bin/sh`" echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-

49 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

bison --version | head -n1 if [ -e /usr/bin/yacc ]; then echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`"; else echo "yacc not found"; fi

bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6- echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2 diff --version | head -n1 find --version | head -n1 gawk --version | head -n1 if [ -e /usr/bin/awk ]; then echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`"; else echo "awk not found"; fi

gcc --version | head -n1 ldd --version | head -n1 | cut -d" " -f2- # glibc version grep --version | head -n1 gzip --version | head -n1 cat /proc/version m4 --version | head -n1 make --version | head -n1 patch --version | head -n1 echo Perl `perl -V:version` sed --version | head -n1 tar --version | head -n1 echo "Texinfo: `makeinfo --version | head -n1`" xz --version | head -n1

echo 'main(){}' > dummy.c && gcc -o dummy dummy.c if [ -x dummy ] then echo "gcc compilation OK"; else echo "gcc compilation failed"; fi rm -f dummy.c Dummy EOF version-check.sh

El script “version-check.sh” tendrá una salida la cual debe de ser comprobada y relacionada con la siguiente tabla, en la que se muestra la correspondencia de los paquetes necesarios para la versión 7.1 de LFS asi como las versiones recomendadas que debe de tener el sistema anfitrión.

Tabla 5.2.3-1 Los paquetes en sus versiones mínimas deben de ser Paquete Versión mínima Bash 3.2 (/bin/sh debe de ser un enlace a bash) Binutils 2.17 (versiones superiores a 2.22 no han sido comprobadas pudiendo ocasionar problemas) Bison 2.3 (/usr/bin/yacc debe de ser un enlace a bison) Bzip2 1.0.4 Coreutils 6.9 Diffutils 2.8.1 Findutils 4.2.31 Gawk 3.1.5 (/usr/bin/awk debe de ser un enlace a gawk) Gcc 4.1.2 Glibc 2.5.1 Grep 2.35.1a Gzip 1.3.12

50 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Linux Kernel 2.6.25(habiendo sido compilado con GCC-4.1.2 o versión superior) M4 1.4.10 Make 3.81 Patch 2.5.4 Perl 5.8.8 Sed 4.1.5 Tar 1.18 Texinfo 4.9 Xz 5.0.3

URL de interés En http://www.linuxfromscratch.org puede encontrar el proyecto LFS asi como documentación diversa.

Una vez que se ha comprobado que el sistema anfitrión dispone de los paquetes necesarios junto con las versiones, los cuales son necesarios para la construcción del sistema LFS, el siguiente paso seria crear la estructura de directorios. La forma en la que se debe montar el LFS, sería una partición o en disco rigido independiente teniendo la forma de directorios que se describe en la siguiente imagen. La forma que se ha elegido en el proyecto es la instalación sobre una partición del disco duro primario (sda). Sobre esta partición la cual será “sda3” se crean dos directorios siendo uno “sources” en el que se alojaran los paquetes fuentes que van a ser precompilados y que se iran instalando sobre la carpeta “tools” y configurando al mismo tiempo diversos aspectos del sistema LFS. La estructura del proyecto se ve representada en la figura 4.1.

DISCO RIGIDO (sda)

swap (sda1)

sistema anfitrion (sda2)

LFS (sda3)

sources (sda3/sources) tools (sda3/tools)

Figura 2-5.1. Estructura del proyecto

51 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Creada la estructura, se continua con la definición de una variable que apuntará al directorio donde se va a construir el sistema LFS, ademas de , hacer algunos enlaces simbolicos, la creación de un usuario y grupo junto con la configuración de su entorno de trabajo o del interprete de comandos para tener uno completamente vacio y modificado, según las necesidades del LFS, evitando que aparezcan variables indeseadas o que esten dañadas y puedan entorpecer la culminación del proyecto.

Creación de variable y comprobación: usuario@ubuntu:~$ export LFS=/mnt/lfs usuario@ubuntu:~$ echo $LFS

Creación de enlace simbolico: usuario@ubuntu:~$ ln –sv $LFS/tools /

Creación de grupo y usuario: usuario@ubuntu:~$ groupadd lfs usuario@ubuntu:~$ user add -s /bin/bash -g lfs -m -k /dev/null lfs

Configuración del entorno de trabajo: usuario@ubuntu:~$ cat > ~/.bash_profile << "EOF" exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash EOF

usuario@ubuntu:~$ cat > ~/.bashrc << "EOF" set +h umask 022 LFS=/mnt/lfs LC_ALL=POSIX LFS_TGT=$(uname -m)-lfs-linux-gnu PATH=/tools/bin:/bin:/usr/bin export LFS LC_ALL LFS_TGT PATH EOF

Despues de estos pasos, se esta listo para entrar en el entorno que se ha creado para la construcción del sistema LFS. Este entorno esta limpio de otras variables que podrían crear conflictos con nuestro sistema en construcción de ahí la creación y el uso posterior de este entorno.

Creación de grupo y usuario: usuario@ubuntu:~$ source ~/ .bash_profile

52 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

En el sistema LFS se va a realizar en dos iteraciones de compilación. En una primera etapa se va a construir un sistema mínino el cual será totalmente independiente del anfitrión teniendo su propio compilador, ensamblador, enlazador y algunas pocas librerias, aunque le faltaria el kernel para poder funcionar de forma correcta. Este sistema intermedio se va a construir bajo el directorio “tools” el cual debe de ser borrado al finalizar su cometido conjuntamente con el directorio “sources”. En una segunda etapa se va a terminar de compilar todos los paquetes necesarios para que el sistema LFS pueda ejecutarse correctamente. Finalizada las iteraciones de compilación de paquetes se procede a la configuración del sistema para hacerlo ejecutable y que inicie el sistema por si solo.

Durante el proceso de construcción se tiene en cuenta el tipo de arquitectura del sistema anfitrión ya que dependiendo de esta se utilizarán diferentes sentencias de comandos para la optimización o simplemente porque son datos intrinsecamente diferenciados de unas arquitecturas de otras.

Figura 3-5.1. Resumen del procedimiento de construcción

Finalizada las dos fases de compilación se debe de crear los sistemas de ficheros virtuales al núcleo, que son los que van a ser usados por el kernel en la gestión de procesos internos y como caracteristica tiene que no van a utilizar el espacio en disco.

mkdir –v $LFS/ {dev,proc,sys}

Ademas, de los ficheros virtuales se necesita algunos nodos de dispositivos que son utilizados en el arranque del núcleo en especial console y null los cuales deben de ser creados

mknod –m 600 $LFS/dev/console c 5 1 mknod –m 666 $LFS/dev/null c 5 3

53 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

.Despues de la creación de los ficheros virtuales y los nodos se debe realizar el proceso de montaje sobre ellos.

mount –v –bind /dev $LFS/dev mount –vt devpts devpts $LFS/dev/pts mount –vt tmpfs shm $LFS/dev/shm mount –vt proc proc $LFS/proc mount –vt sysfs sysfs $LFS/sys

Un factor muy importante es la gestión de paquetes que va a llevar nuestro futuro sistema LFS. Como es sabido un administrador de paquetes permite la supervisión en la instalación asi como de la eliminación de paquetes al tiempo que facilita la actualización de ellos, liberando al usuario de cargas.

Los gestores de paquetes siguen diferentes políticas de gestión que se detallan a continuación:

• Técnica de instalación en directorios separados: De antemano se informa que esta técnica es útil para un número mínimo de paquetes pero para número considerable se hace ineficiente. La administración de paquetes no precisa de otros para el manejo de la instalación instalandose cada paquete en un directorio aparte. Es decir que si se tiene una librería gráfica llamada “Libgraf version 1”, se crearia un directorio con ese nombre y el enlace seria hacia tal directorio. Si en un futuro se ampliara a otra versión y fuera necesaria su instalación, se crearía otro directorio llamado “Libgraf version 2” en la cual se instalarian los nuevos ficheros pero cambiando el enlace de la versión 1 a la versión 2. Como la versión 1 se mantien aunque el enlace va dirigido hacia la versión 2, se debe de hacer constar sobre la existencia de la version 1 haciendo referencia en las variables de entorno PATH_LD, LD_LIBRARY_PATH, MANPATH, INFOPATH y CPPFLAGS.

• Técnica de administración por medio de enlaces: teniendo como referencia la técnica anterior, esta técnica es una variante de ella ya que la instalación de paquetes se hace bajo /usr evitando la creación de enlaces asi como la ampliación de las cinco variables de entorno. Tambien se pueden utilizar otro directorio diferente a este, pero requiere que se tenga que falsear la dirección utilizando estrategias como DESTDIR. Algunos gestores de paquetes que utilizan esta politica son Stow, Epkg, Graft y Depot.

• Técnica basada en marca de fechas: cuando se realiza la instalación de un paquete se le relaciona con la fecha actual asi el gestor de paquetes guarda un registro de la fecha de instalación de todos sus paquetes. Se presenta el inconveniente en esta técnica sobre un posible efecto de concurrencia entre paquetes provocando que los registros queden marcados erróneamente asi como si el sistema contiene una fecha diferente a la actual. Es una técnica simple pero al mismo tiempo es algo inconsistente. Un ejemplo de gestor de este tipo es install-log.

• Técnica basada en LD_PRELOAD: la existencia de una librería que supervisa la instalación adjuntandose a algunos ejecutables y las llamadas al sistema. Para que funcione este método, obviamente debe de estar enlazados dinámicamente los ejecutables y la librería y sin los bit de “suid” o “sgid”, es decir, sin los privilegios de grupo o de usuario.

54 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

• Técnica de crear archivos de paquetes: Se crea una instalación previa en la que se genera la estructura de arbol y unida mediante enlaces generando un archivo de todos los paquetes. El paquete puede ser instalado en la máquina local o en otras máquinas. Un ejemplo claro de esta técnica son los los administradores de paquete RPM, pkg-utils, apt y .

• Técnica de administración basada en usuario: es una técnica de gestión de paquetes propia del proyecto LFS y que ha sido desarrollada por Matthias Benkmann en la que cada paquete se instala con un usuario diferente con lo que quedan relacionados los ficheros con un usuario. Se detallan más datos en la pagina oficial del proyecto.

• Técnica de todo en mi cabeza: la más trivial es la ausencia de gestor de paquetes, es decir, que el propio administrador es el propio gestor.

Una vez realizada la preinstalación se en el entorno chroot para finalizar con la construcción del sistema.

chroot "$LFS" /tools/bin/env -i \ HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \ PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \ /tools/bin/bash --login +h

A continuación se va a crear la estructura de árbol que va a tener el sistema LFS. Esta estructura es la forma tradicional aunque si se quisiera se podria ver modificada según las necesidades del sistema futuro.

mkdir -pv /{bin,boot,etc/opt,home,lib,mnt,opt} mkdir -pv /{media/{floppy,cdrom},sbin,srv,var} install -dv -m 0750 /root install -dv -m 1777 /tmp /var/tmp mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src} mkdir -pv /usr/{,local/}share/{doc,info,locale,man} mkdir -v /usr/{,local/}share/{misc,terminfo,zoneinfo} mkdir -pv /usr/{,local/}share/man/man{1..8} for dir in /usr /usr/local; do ln -sv share/{man,doc,info} $dir done mkdir -v /var/{lock,log,mail,run,spool} mkdir -pv /var/{opt,cache,lib/{misc,locate},local}

55 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Cuando se crea un directorio mediante el comando mkdir , se crean por defecro con los permisos 755, por lo que deben de ser cambiados para que ningun usuario entre dentro del directorio del root. Se volveria a realizar las compilaciones de los paquetes, teniendo en cuenta que al realizar las compilaciones mediante la opción de –g del gcc, se crean símbolos de depuración. Si no se desean mantenerlos, se pueden eliminar del sistema ya que el tamaño del total puede ser sustancial, liberando un espacio sustancial.

Despues de todas estas fases de construcción, se entraría en la fase de configuración del arranque utilizando para ello Grub, el cual debe de ser programado según las necesidades de nuestro sistema. Entre otros el archivo /etc/fstab debe de hacer referencia a los dispositivos que tengamos instalados o que se quiera que nuestro sistema tenga en consideración a la hora de iniciarse. En la siguiente figura se descarta la opción de reconocimiento del sistema anfitrión.

Una opción a tener en cuenta es el idioma en el que el sistema LFS va a trabajar. Para el idioma español de España y que trabaje con euro, no habría ningun problema. Lo único que se debe de hacer es descargar los paquetes necesarios que dan soporte al idioma.

A continuación se muestran las configuraciones de los scripts para el arranque del sistema.

Figura 4-5.1. Configuración de scripts

56 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Finalmente y para concluir la fase de compilaciones, se pasaría a la creación de la imagen del kernel y de sus modulos. Dentro de la configuración, se pueden abilitar discos SATA, tarjetas de red y demás opciones para que el kernel los reconozca durante el proceso de inicio del sistema. Hay que tener un conocimiento de antemano del sistema que va a soportar nuestro LFS porque como se ve a continuación si no se tienen en cuenta algunos detalles, podria bloquearse el sistema y nunca llegaría a arrancar o daría mensajes de error o panics. El siguiente ejemplo se debe a la ausencia de configuración de algunos modulos del kernel

Figura 5-5.1. Error de inicio del sistema

57 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Figura 6-5.1. Configuración del kernel

Nota Para evitar el error de devtmpfs habría que marcar Device Drivers -- Generic Driver Options -- Maintain a devtmpfs filesystem to mount at /dev

Finalmente se configura el GRUB instalandose sobre el disco duro en el que tenemos LFS.

58 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Nota Desde el dia 1 de septiembre del 2012 esta disponible la versión LFS 7.2

5.1.1 Comprobación

Salir del entorno de trabajo de LFS es lo principal para desmontar todo el sistema ya que hay que tener privilegios root sobre el sistema anfitrión para realizar el desmontaje de dispositivos y poder reiniciar el sistema. Arrancado nuestro sistema entrará en funcionamiento el sistema GRUB dandonos la opción de “”, para pasar al chequeo del sistema y al promp del sistema.

Figura 1-5.1.1. Arranque del proyecto fin de master

59 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

Figura 2-5.1.1. Arranque del proyecto fin de master

CONCLUSIONES Y TRABAJO FUTURO

Se han visto dos formas de creación de distribuciones Linux, en la que una de las opciones estaba basada en una distribución previa, existiendo en el mercado una amplia variedad de distribuciones para tomarlas como base, pero que en nuestro caso Ubuntu ha sido la elegida, utilizando algunas de las herramientas que ofrece para la creación o remasterización de distribuciones siendo UCK, Remastersys y Ubuntu Builder . Una segunda opción era originarla desde cero sin ninguna base, unicamente con la ayuda de un sistema anfitrion y unos conocimientos profundos en Linux. La basada sobre Ubuntu se origina de una forma rápida y sin conocimientos previos en Linux y de una manera muy intuitiva y que cualquier persona podría hacerla, ofreciendo la posibilidad de dar soporte final en formato LIVE o no. En una segunda instancia el proyecto LFS, es mucho mas tedioso a la vez que costoso en tiempo por las compilaciones de los paquetes, que según cual, se lleva bastantes horas de compilación, pero depura mas el sistema final porque únicamente se instala lo necesario aunque en contraposición el usuario debe de tener un buen conocimiento sobre las dependencia entre sus paquetes y sus versiones. Además se queda instalado en el soporte donde se produjo todo el proceso, teniendo que realizar un proceso de creación de distribución para poder dar soporte a otros equipos. Tambien el entorno de trabajo final es en modo consola por lo que se tendria que realizar la construcción del entorno gráfico por pantallas en el caso que se precisara. Gracias a la personalización del la distribución se produce una optimización de los elementos que componen el sistema operativo ayudando a un mejor rendimiento del sistema, ya que existen casos en los que el requerimiento de paquetes es mínimo debido a las exigencias del sistema informatico que se quiere construir, por lo que distribuciones grandes no son optimas. Como futuro trabajo se podria desarrollar la forma en la que dispusiera de un entorno gráfico por el que fuera mas intuitivo no quedandose unicamente en el entorno de consola.

BIBLIOGRAFÍA

A continuación es listada la documentación y páginas Web que han servido de referencia bibliográfica complementaria durante el desarrollo del proyecto.

1. Proyecto GNU http://www.gnu.org (último acceso: Agosto 2012). 2. Linux zone http://www.linuxzone.es (último acceso: Agosto 2012). 3. Distribución Debian http ://www.debian.org (último acceso: Agosto 2012). 4. Rincón de Linux http://www.linux-es.org (último acceso: Agosto 2012). 5. Ubuntu, http://www.ubuntu.com (último acceso: Agosto 2012). 6. Proyecto Fedora, http://www.fedoraproject.org/es/ (último acceso: Agosto 2012). 7. Sourceforge, http://www.sourceforge.net / (último acceso: Agosto 2012). 8. Ubuntu root http://ubunturoot.wordpress.com (último acceso: Agosto 2012). 9. http://www. distrowatch.com (último acceso: Agosto 2012). 10. Ubuntu http://www.ubuntu.com (último acceso: Agosto 2012). 11. Linux questions http://iso.linuxquestions.org (último acceso: Agosto 2012). 12. Librería de archivos digitales http://www.ibiblio.org (último acceso: Agosto 2012). 13. Linux Info http://www.aboutlinux. (último acceso: Agosto 2012). 14. Proyecto Linux from scratch http ://www.linuxfromscratch.org (último acceso: Agosto 2012). 15. Suse Studio http://susestudio.com/ (último acceso: Agosto 2012). 16. Proyecto Ubuntu Builder http://code.google.com/p/ubuntu-builder (último acceso: Agosto 2012). 17. Revista http://www.linuxjournal.com (último acceso: Agosto 2012). 18. Linux Unity http://unity-linux.org/ (último acceso: Agosto 2012). 19. Linux news http://lxer.com/ (último acceso: Agosto 2012). 20. Lion’s Wing http://www.lions-wing.net (último acceso: Agosto 2012). 21. Khmeros http://www.khmeros.info/ (último acceso: Agosto 2012). 22. Linux basics http://www.linuxbasis.com/ (último acceso: Agosto 2012). 23. Julio Gomez. López. Administracion de sistemas GNU/LINUX . ISBN: 978-84-92650-46-0 24. Julio Gómez López. Administracion Avanzada De Sistemas Informaticos . 978-84-9964-007-5

64 Distribuciones Linux. Proyecto Fin de Master CSI.- Universidad de Almería-

25. About debian http://www.aboutdebian.com (último acceso: Agosto 2012). 26. How open source http://www.howopensource.com (último acceso: Agosto 2012).

Máster en Administración, Comunicaciones y Seguridad Informática

http://masteracsi.ual.es