3. Especificaci´ on y Dise˜ no
4.1. Herramienta de Instalaci´ on Autom´atica
4.1.4. Ficheros de preconfiguraci´on
A continuaci´on, vamos a ver de qu´e manera podemos automatizar todo el proceso de instalaci´on. A partir de un fichero de preconfiguraci´on, que contiene todas las respuestas al proceso de instalaci´on, podemos evitar que el programa de instalaci´on de Ubuntu nos realice ninguna pregunta sobre la configuraci´on del Sistema Operativo.
Isolinux Isolinux9
es un cargador de de arranque para Linux (arquitectura i386). Necesitamos editar el fichero de configuraci´on de Isolinux para poder indicar que queremos cargar un fichero de preconfiguraci´on. Esto lo podemos hacer de la siguiente forma:
Listado 4.9: Fichero de configuraci´on de Isolinux
1 LABEL i n s t a l a c i o n A u t o m a t i c a
kernel ubuntu - i n s t a l l e r / i386 / linux
3 append vga = normal initrd = ubuntu - i n s t a l l e r / i386 / initrd . gz
netcfg / c h o o s e _ i n t e r f a c e = eth1 locale = es_ES
5 console - setup / a s k _ d e t e c t = false console - setup / l a y o u t c o d e = es
l a n g u a g e c h o o s e r / language - name = Spanish c o u n t r y c h o o s e r / s h o r t l i s t = ES
7 console - keymaps - at / keymap = es netcfg / g e t _ h o s t n a m e = una ssigned - h o s t n a m e
preseed / url = http :// minervo . escet . urjc . es / preseed --
N´otese el uso de la directiva preseed/url indicando que el fichero de preconfiguraci´on es un recurso HTTP situado en la direcci´on indicada por la URL. Si quisi´eramos haber incluido el fichero de preconfiguraci´on directamente en la imagen m´ınima del kernel que se arranca con el proceso de instalaci´on, deber´ıamos hacer uso de la directiva preseed/file, indicando la ruta absoluta hacia el fichero de semilla.
El fichero de configuraci´on de isolinux puede contener numerosas opciones de arranque (cada una forma una etiqueta LABEL). Podemos tener por tanto numerosas opciones de arranque,
8
https://help.ubuntu.com/community/Installation/Netboot
9
CAP´ITULO 4. IMPLANTACI ´ON
cada una dependiendo por ejemplo de un hardware espec´ıfico, o de unas opciones de instalaciones concretas.
Si queremos que en cada momento se arranque siempre una instalaci´on en concreto (una etiqueta LABEL) lo podemos hacer incluyendo las siguientes l´ıneas:
Listado 4.10: Fichero de configuraci´on de Isolinux
8 DEFAULT i n s t a l a c i o n A u t o m a t i c a 9 PROMPT 0
10 TIMEOUT 0
Donde indicamos que se debe arrancar por defecto la etiqueta instalacionAutomatica, con un timeout de 0 segundos, y sin indicador de arranque.
Fichero de preconfiguraci´on
Por ´ultimo, ´unicamente nos queda empezar a definir el fichero de preconfiguraci´on que utilizar´a el sistema de instalaci´on autom´atica para realizar el proceso de instalaci´on en un modo no interactivo. Este fichero es un fichero de texto, visible y modificable por cualquier editor de textos. Podemos usar nuestro editor de textos favorito para poder editar nuestro fichero de preconfiguraci´on personalizado.
El fichero de preconfiguraci´on contiene todas las respuestas a cada una de las secciones del proceso de instalaci´on. As´ı, en vez de solicitar al usuario la entrada por teclado, la leer´a de este fichero. Las opciones m´as importantes son las relacionadas con la red, el particionado del disco duro, la configuraci´on de la herramienta de gesti´on de software, y la creaci´on de usuarios. Mencionaremos las opciones m´as importantes, dejando la posibilidad de leer el fichero de preconfiguraci´on completo en el ap´endice de este documento.
En primer lugar, debemos indicar las opciones necesarias para preconfigurar la red. En nuestro caso, nos es particularmente interesante que la preconfiguraci´on se realice a trav´es del protocolo DHCP. Esto nos facilitar´a que cada estaci´on asuma la direcci´on de red que le pertenece. Una vez finalizado el proceso, podemos cambiar esta configuraci´on de din´amica a est´atica, si as´ı nos sentimos m´as seguros ante la ca´ıda del servidor DHCP y por ende el cese del funcionamiento de todas las estaciones. Esto lo podemos conseguir con las siguientes l´ıneas:
Listado 4.11: El fichero de preconfiguraci´on preseed.cfg.
10 d - i netcfg / c h o o s e _ i n t e r f a c e select eth1
11 d - i netcfg / d i s a b l e _ d h c p boolean false
12 d - i netcfg / c o n f i r m _ s t a t i c boolean true
Una vez hemos configurado la red, procedemos a indicar el sitio r´eplica de donde se descargar´a la imagen del sistema base a ser instalada. Es preciso indicar tambi´en que sistema deseamos instalar (versi´on concreta). Lo podemos indicar con el codename o nombre en clave de cada una de las versiones. En nuestro caso, vamos a instalar la vesi´on Hardy (numerada 8.04) de la distribuci´on Ubuntu:
Listado 4.12: El fichero de preconfiguraci´on preseed.cfg.
12 d - i mirror / country string enter i n f o r m a t i o n m a n u a l l y
13 d - i mirror / http / h o s t n a m e string peloto . escet . urjc . es 14 d - i mirror / http / d i r e c t o r y string / ubuntu /
15 d - i mirror / suite string hardy
16 d - i mirror / security - host peloto . escet . urjc . es
4.1. HERRAMIENTA DE INSTALACI ´ON AUTOM ´ATICA
Tenga en cuenta que es interesante tener un mirror o espejo local en la Intranet para acelerar notablemente el proceso de instalaci´on. Si por motivos de espacio no le es posible instalar un mirror completo de toda la distribuci´on, puede usar la herramienta apt-proxy para evitar descargar un mismo paquete repetidas veces (una por estaci´on). Notar´a una mejor´ıa notable en el proceso de instalaci´on.
Una parte importante del proceso de instalaci´on reside en la configuraci´on del particionado del disco donde se ha de instalar el Sistema Operativo. Esto requiere de numerosas l´ıneas de preconfiguraci´on que indican entre otras cosas, que disco ha de usarse en la instalaci´on (usando la nomeclatura cl´asica de sistemas Unix), que esquema de particionado se va a usar (para novatos, experto o con receta) y el esquema concreto que va a usarse.
En nuestro caso, vamos a usar una receta10
de partman (el programa que se encarga del particionado del disco para la instalaci´on). Para ello, indicamos las siguientes l´ıneas:
Listado 4.13: El fichero de preconfiguraci´on preseed.cfg.
16 d - i mirror / security - host peloto . escet . urjc . es
17 d - i partman - auto partman - auto / s e l e c t _ d i s k string / dev / sda
18 d - i partman - auto / disk string / dev / sda
19 d - i partman - auto / method string regular
20 d - i partman - auto / e x p e r t _ r e c i p e string
21 boot - root :: 300 5500 30000 ext3
22 $ p r i m a r y { } $ b o o t a b l e { }
23 method { format } format { }
24 u s e _ f i l e s y s t e m { } f i l e s y s t e m { ext3 }
25 m o u n t p o i n t { / } .
26 64 512 300 % linux - swap
27 method { swap } format { } .
28 100 10000 1 0 0 0 0 0 0 0 0 0 ext3
29 method { format } format { }
30 u s e _ f i l e s y s t e m { } f i l e s y s t e m { ext3 }
31 m o u n t p o i n t { / data } .
32 d - i partman / c h o o s e _ p a r t i t i o n select Finish
33 p a r t i t i o n i n g and write changes to disk
34 d - i partman / confirm boolean true
En la etiqueta se indica una receta de partman. Como vemos, en ella se indica que se crear´an tres particiones, todas ellas deber´an ser formateadas, y el sistema de ficheros de todas ellas ser´a (el sistema de ficheros m´as usado en particiones Linux). Se indican adem´as los puntos de montaje de cada una de ellas, adem´as como el tama˜no (indicando el cilindro de comienzo y el de final). Se recomienda la lectura de las reglas de sintaxis para la formaci´on de recetas para el particionador partman.
Es necesario configurar el lenguaje predefinido del Sistema. Adem´as, tenemos que configurar apt-get, la herramienta de gesti´on de paquetes de Ubuntu. Tambi´en nos interesar´a que se use nuestro mirror local (situado en el servidor peloto.escet.urjc.es) y que adem´as, se usen todas las secciones de las distribuciones11
. Esto lo conseguimos con las siguientes l´ıneas: Listado 4.14: El fichero de preconfiguraci´on preseed.cfg.
34 d - i l a n g u a g e c h o o s e r / language - name - fb select Spanish 35 d - i debian - i n s t a l l e r / locale select es_ES . UTF -8
10
Receta viene del t´ermino anglosaj´on recipe, muy usado en la comunidad Open source.
11
Usualmente, en las distribuciones Debian y Ubuntu el software incluido ha estado dividido en secciones. En Ubuntu existen principalmente cuatro: main, universe, multiverse, restricted y backports.
CAP´ITULO 4. IMPLANTACI ´ON
36 d - i apt - setup / u r i _ t y p e select http
37 d - i apt - setup / country select enter i n f o r m a t i o n m a n u a l l y
38 d - i apt - setup / h o s t n a m e string peloto . escet . urjc . es
39 d - i apt - setup / d i r e c t o r y string / ubuntu /
40 d - i apt - setup / another boolean false
41 d - i apt - setup / security - updates boolean false
42 d - i apt - setup / s e c u r i t y _ h o s t string peloto . escet . urjc . es
43 d - i apt - setup / main boolean true
44 d - i apt - setup / u n i v e r s e boolean true
45 d - i apt - setup / m u l t i v e r s e boolean true
46 d - i apt - setup / r e s t r i c t e d boolean true
47 d - i apt - setup / b a c k p o r t s boolean true
Tambi´en nos interesa configurar la zona horaria del Sistema y su localizaci´on. Lo conseguimos con las l´ıneas siguientes:
Listado 4.15: El fichero de preconfiguraci´on preseed.cfg.
47 d - i t z c o n f i g / gmt boolean false
48 d - i t z c o n f i g / c h o o s e _ c o u n t r y _ z o n e / Europe select Madrid 49 d - i t z c o n f i g / c h o o s e _ c o u n t r y _ z o n e _ s i n g l e boolean true
Las cuales depender´an evidentemente de la localizaci´on de la estaci´on que se instale en ese momento. A continuaci´on, vamos a configurar el usuario gen´erico del sistema, que dispondr´a de privilegios especiales por medio de la herramienta sudo para convertirse en superusuario:
Listado 4.16: El fichero de preconfiguraci´on preseed.cfg.
49 d - i passwd / user - f u l l n a m e string a g u t i e r r
50 d - i passwd / u s e r n a m e string a g u t i e r r
51 d - i passwd / user - password - crypted
52 d - i
passwd $ 1 $ a s c C q W . t $ b f U O F H D Q L p B m p r 9 d O r P . a0
La contrase˜na, como se puede observar, se introduce en claro (cifrada con un peque˜no hash. Recomendamos la inclusi´on de una contrase˜na gen´erica y que una vez terminado el proceso, se sustituyan lo m´as r´apido posible los ficheros /etc/passwd y /etc/shadow.
En las l´ıneas finales, indicaremos que, como ´ultima tarea, deseamos ejecutar un script descargado de Internet. A trav´es de este script, realizaremos todas aquellas tareas que no no es posible configurar a trav´es de esta herramienta de preconfiguraci´on. En este script podremos instalar paquetes, retocar ficheros de configuraci´on, tener en cuenta algunas particularidades espec´ıficas de hardware, etc´etera. Esta aplicaci´on es muy interesante, ya que nos permite dejar el sistema al gusto del administrador. Lo conseguimos con las l´ıneas:
Listado 4.17: El fichero de preconfiguraci´on preseed.cfg.
52 d - i preseed / l a t e _ c o m m a n d string wget http :// minervo . escet . urjc . es / 53 i n s t a l a c i o n / ajusta - linux - m o s t o l e s ;
54 chmod + x ajusta - linux - m o s t o l e s ; sh ajusta - linux - m o s t o l e s
Por ´ultimo, indicamos donde se instalar´a el gestor de arranque. El gestor de arranque es necesario para poder iniciar el sistema una vez instalado. El gestor de arranque que se usa hoy en d´ıa es Grub, en detrimento de Lilo (LinuxLoader) que se usaba hasta hace muy poco en la mayor´ıa de las distribuciones. Lo conseguimos con las siguientes l´ıneas:
4.1. HERRAMIENTA DE INSTALACI ´ON AUTOM ´ATICA
Listado 4.18: El fichero de preconfiguraci´on preseed.cfg.
54 d - i finish - install / r e b o o t _ i n _ p r o g r e s s note 55 d - i grub - i n s t a l l e r / o n l y _ d e b i a n boolean true 56 d - i grub - i n s t a l l e r / w i t h _ o t h e r _ o s boolean true
Preconfiguraci´on gen´erica de paquetes
El fichero de configuraci´on mostrado anteriormente es v´alido para todas aquellas instalaciones basadas en la versi´on Hardy (8.04) de Ubuntu. Sin embargo, si se quiere usar este m´etodo en futuras versiones, es muy probable que la notaci´on de la preconfiguraci´on haya cambiado. El objetivo de este apartado es la de entender como funciona internamente la preconfiguraci´on de un paquete, y poder usar este m´etodo para preconfigurar cualquier paquete en la instalaci´on, sin necesidad de guiarnos por un m´etodo gen´erico (el fichero mostrado anteriormente).
Es muy probable que si usamos este m´etodo en versiones posteriores a la usada en el presente documento, se introduzcan en la instalaci´on nuevos paquetes (con su correspondiente configuraci´on) que hagan que si ´este no se encuentra preconfigurado (enti´endase por preconfigurado el que se indique en el fichero de preconfiguraci´on todas las preguntas a su configuraci´on) se muestre el di´alogo del proceso de instalaci´on instando a la persona que realiza el proceso de instalaci´on a responder a las preguntas que sean necesarias. Coment´abamos en el cap´ıtulo Introducci´on que sin duda una de las ventajas principales del m´etodo de instalaci´on desatentida basada en ficheros de preconfiguraci´on es que el proceso se realiza autom´aticamente, sin necesidad de realizar ninguna acci´on entre el administrador que instala el sistema y el proceso de instalaci´on. Si bien responder a una pregunta o dos en el proceso de instalaci´on no representa mayor molestia, si el n´umero de instalaciones es elevado, el proceso puede llegar a convertirse en tedioso.
Figura 4.1: El proceso de instalaci´on en Debian/Ubuntu y la preconfiguraci´on de paquetes. Si nos vemos en el papel de realizar una instalaci´on desatendida basada en ficheros de preconfiguraci´on y tenemos la mala suerte de que el fichero incluido en el ap´endice de este documento no resulta completo frente a la preconfiguraci´on de todos los paquetes que se instalan en el proceso de instalaci´on del sistema, no tenemos que asustarnos, puesto que el m´etodo es muy simple. En primer lugar, debemos fijarnos en qu´e paquete est´a solicitando configuraci´on
CAP´ITULO 4. IMPLANTACI ´ON
adicional. Para ello, podemos observar el t´ıtulo de la ventana de debconf, donde indica el paquete en cuesti´on. Por ejemplo, en la imagen 4.1 se muestra como el paquete slapd est´a solicitando configuraci´on adicional.
Una vez que hemos identificado el paquete molesto, debemos obtener sus fuentes para inspeccionar la plantilla de configuraci´on. Para realizar este paso, podemos optar por diversas soluciones. Si se tiene configurada una l´ınea de fuentes en el fichero /etc/apt/sources.list, simplemente una llamada a apt-src puede ser m´as que suficiente. En el listado 4.19 se muestra la llamada a este comando. N´otese que la llamada a apt-src no requiere privilegios especiales, y que la instalaci´on resolver´a todos aquellos paquetes necesarios, de los que depende el que se quiere instalar. Nuestro objetivo solamente ser´a el paquete indicado en la llamada a apt-src, pudiendo obviar el resto.
Listado 4.19: Instalaci´on del paquete slapd a trav´es de apt-get
$ apt - src install slapd
Una vez que las fuentes han sido descargadas, es necesario descomprimir el c´odigo fuente del paquete en busca del fichero templates. Este fichero en la mayor´ıa de las ocasiones suele encontrarse en el directorio debian/ de las fuentes del paquete. En el caso del paquete slapd, el fichero mencionado se encontrar´ıa en el directorio openldap2.3- 2.4.7/debian/slapd.templates12
. Una vez que hemos localizado el fichero, podemos abrirlo con nuestro editor de texto favorito. Un p´arrafo del fichero puede ser el siguiente:
Listado 4.20: El fichero de plantilla de debconf para el paquete slapd.
56 T e m p l a t e : slapd / n o _ c o n f i g u r a t i o n
57 Type : boolean
58 Default : false
59 _ D e s c r i p t i o n : Omit O p e n L D A P server c o n f i g u r a t i o n ?
60 If you enable this option , no initial c o n f i g u r a t i o n or d a t a b a s e will be
61 created for you .
La lectura de este fichero es muy sencilla: en ´el se incluyen todas las preguntas que deben ser respondidas cuando se instala el paquete por primera vez, a trav´es de la herramienta debconf. En el caso del fragmento del fichero anterior, se indica que se realiza una pregunta que solamente puede tener dos respuestas (de ah´ı el tipo booleano), que de forma predeterminada se responder´a que No y que tiene la descripci´on indicada en las l´ıneas siguientes. Si estuvi´eramos interesados en preconfigurar este paquete, deber´ıamos incluir una l´ınea por cada pregunta que fuera incluida en la configuraci´on del mismo. Para el caso de la pregunta anterior, ser´ıa suficiente que incluy´eramos la siguiente l´ınea:
Listado 4.21: Preconfigurando el paquete slapd.
61 slapd slapd / n o _ c o n f i g u r a t i o n boolean false
Con esto conseguir´ıamos que la pregunta anterior no se llevara a cabo, ya que se encuentra preconfigurada. Si realizamos este mecanismo para todas aquellas preguntas que interfieren en el proceso de instalaci´on no dejando que sea un proceso desatendido al cien por cien, habremos conseguido que no sea necesario realizar ninguna acci´on para instalar el paquete en cuesti´on.
Como vemos, la preconfiguraci´on de paquetes es un m´etodo muy potente y flexible, que nos brinda la posibilidad de realizar procesos de instalaci´on completamente desatendidos sin m´as
12
Fuentes del paquete slapd en la distribuci´on Ubuntu Hardy.