Download Gee is Not another UNIX manual - dEIC

Document related concepts
Transcript
Gee is Not another UNIX manual
(a debian based intro)
febrero 2004 - versión 2.4 (es)
Aviso legal
Se garanitza permiso para copiar, distribuir y modificar este documento según los términos de la
GNU Free Documentation License, versión 1.2 o cualquier posterior publicada por la Free Software Foundation. Se dispone de una copia de esta licencia en el apéndice D y ésta o posteriores en
http://www.fsf.org/licenses/fdl.txt .
Agradecimientos
Los autores agradecen a la Fundació per la Universitat Oberta de Catalunya (www.uoc.edu) la financiación de la primera edición de esta obra, enmarcada en el Màster Internacional en Software LLiure.
También se agradece la colaboración de todos aquellos que han aportado sus sugerencias, comentarios y
correciones, en especial a Guillem Jover.
Se agradecerá cualquier sugerencia/comentario/correción del documento (pág. final para contactar).
Documento y fuentes disponibles en: http://jane.uab.es/pub/guides/geedgli/
Aunque hace ya más de veinte años que el software libre existe, no ha sido hasta los últimos tiempos que se
ha perfilado como una alternativa válida para muchos usuarios, empresas y, cada vez más, instituciones y
gobiernos. Actualmente GNU/Linux es uno de los sistemas operativos más fiables y eficientes que podemos
encontrar. Aunque su naturaleza de software libre creó, inicialmente, ciertas reticencias por parte de usuarios
y empresas, GNU/Linux ha demostrado estar a la altura de cualquier otro sistema operativo existente.
El objetivo de este curso es iniciarnos en el mundo del GNU/Linux. En el mismo obtendremos las claves
para entender la filosofía del código libre, aprenderemos cómo usarlo y manipularlo a nuestro gusto y
daremos las herramientas necesarias para poder movernos fácilmente en este nuevo mundo. El documento
tampoco pretende ser un manual de referencia imprescindible para administradores y/o usuarios; para esto
ya hay centenares de manuales, HOWTOS y multitud de otras referencias que nos ocuparían millares de
páginas. Aquí pretendemos aprender a dar los primeros pasos en esta tierra poco explorada para todavía
demasiados usuarios y administradores a la vez que enseñaremos cómo plantear y resolver por nosotros
mismos los problemas que puedan aparecer.
Aunque el curso no pretende basarse en ninguna distribución en particular, en la mayoría de ejemplos
y actividades se utilizará Debian GNU/Linux (versión 3.0 -Woody-). Aunque no es una distribución tan
intuitiva y fácil de utilizar como algunas otras, nos servirá para explicar paso a paso todas las características
de un sistema operativo basado en GNU/Linux. Además, su extraordinaria calidad, estabilidad y seguridad
la hacen una de las opciones actualmente más válidas.
Esperamos que el curso sea de su agrado y sirva para abrirle las puertas al mundo del software libre. Como
más usuarios seamos, más y de mejor calidad software tendremos.
¡Bienvenidos al GNU/Linux!
Índice general
1. Introducción
1
1.1. ¿Qué es el GNU? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2. ¿Qué es el GNU/Linux? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.3. Distribuciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.4. Programas y documentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2. Conceptos y comandos básicos
6
2.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.2. Usuarios y grupos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.3. El sistema de ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.3.1. La jerarquía del sistema de ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.3.2. Directorios del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.3.3. Moviéndonos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.3.4. Enlaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.3.5. Permisos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
2.3.6. Manipulación, patrones y búsquedas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.3.7. Tipos y contenido de ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.4. Los procesos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.5. Otros comandos útiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
2.5.1. La ayuda del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
2.5.2. Empaquetado y compresión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
2.5.3. Operaciones de disco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
2.6. Operaciones con comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
2.6.1. Redirecciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
2.6.2. Comandos específicos del bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
2.6.3. Shell scripts con bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
3. Taller de KNOPPIX
22
3.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.2. Arranque del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.3. Paro del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
3.4. Configuración del teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
3.5. Inspección del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
3.6. Manejo directorios y ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
3.7. Administración de usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
3.8. Gestión de processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
3.9. Activación y uso del ratón . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
3.10. Otras operaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
3.11. Conclusión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
I
ÍNDICE GENERAL
II
4. Instalación de GNU/Linux
35
4.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
4.2. Arrancando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
4.3. Particionando el disco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
4.4. Instalación de módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
4.5. Configuración básica de la red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
4.6. Sistema de arranque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
4.7. Elección de paquetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
4.8. Otros aspectos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
5. Taller de instalación de Debian Woody
40
5.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
5.1.1. Sistemas de instalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
5.1.2. Tipos de paquetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
5.1.3. Estado de desarrollo de los paquetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
5.2. Instalación de Debian Woody . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
5.2.1. Flavours de Debian Woody . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
5.2.2. CDROMs de Debian Woody y sus distintos flavours . . . . . . . . . . . . . . . . . . . . . . . .
42
5.2.3. Installing Debian GNU/Linux 3.0 For Intel x86 . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
5.3. Instalación de Debian Woody mediante CDROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
5.3.1. Antes de empezar la instalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
5.3.2. Arranque del sistema de instalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
5.3.3. Configuración del idioma de instalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
5.3.4. Menú principal de instalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
5.3.5. Configuración del teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
5.3.6. Partición del disco duro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
5.3.7. Inicialización y activación de la partición swap . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
5.3.8. Inicialización y activación de una partición Linux . . . . . . . . . . . . . . . . . . . . . . . . . .
47
5.3.9. Inicialización y activación de otras particiones Linux . . . . . . . . . . . . . . . . . . . . . . . .
47
5.3.10. Instalación del kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
5.3.11. Configuración de módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
5.3.12. Configuración del hostname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
5.3.13. Instalación del sistema base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
5.3.14. Creación de un disco de arranque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
5.3.15. Instalación de LILO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
5.3.16. Reinicialización del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
5.3.17. Arranque del sistema base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
5.3.18. Configuración horaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
5.3.19. Configuración geográfica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
5.3.20. Establecimiento de la política de passwords . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
5.3.21. Últimas configuraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
5.3.22. Configuración de apt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
5.3.23. tasksel y dselect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
5.4. Instalación de Debian Woody por red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
5.4.1. Particularidades de una instalación por red . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
5.4.2. Aspectos comunes de los distintos métodos de instalación . . . . . . . . . . . . . . . . . . . . .
51
5.4.3. Instalación del módulo de red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
ÍNDICE GENERAL
III
5.4.4. Configuración de la red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
5.4.5. Configuración de apt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
5.5. Conclusión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
6. Configuraciones básicas
53
6.1. El sistema de login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
6.2. Explorando el bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
6.3. El sistema de arranque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
6.3.1. Lilo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
6.3.2. Grub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
6.4. Acceso a otras particiones y dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
6.5. Configuración de dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
6.5.1. El teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
6.5.2. Tarjeta de red (tipo Ethernet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
6.5.3. Tarjeta WiFi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
6.5.4. Módems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
6.5.5. Tarjeta de sonido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
6.5.6. Impresora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
7. Daemons y runlevels
65
7.1. Los daemons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
7.2. Los runlevels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
7.3. El arranque del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
7.4. Daemons básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
7.4.1. Logs de sistema (sysklogd) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
7.4.2. Ejecuciones periódicas (cron) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
7.4.3. Ejecuciones retardadas (at y batch) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
8. Instalación de aplicaciones
73
8.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
73
8.2. El sistema de paquetes Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
73
8.3. Compilación de nuevos programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
76
9. Taller de configuraciones básicas
78
9.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
9.2. El gestor de arranque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
9.2.1. Instalación de LILO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
9.2.2. Instalación de grub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
9.3. El sistema de paquetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
9.3.1. /etc/apt/sources.list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
9.3.2. apt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
82
9.3.3. dpkg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
84
9.3.4. dselect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
84
9.3.5. aptitude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
84
9.4. locales: configuración regional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
9.5. Configuración de man y su pager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
9.6. El archivo principal de arranque, /etc/inittab . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
86
9.7. Montaje de dispositivos, /etc/fstab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
86
ÍNDICE GENERAL
IV
9.8. Configuración de dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87
9.8.1. Configuración del ratón . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87
9.8.2. Configuración de módems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
88
9.8.3. Configuración de módems DSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
89
9.8.4. Configuración de tarjetas de red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
89
9.8.5. Configuración de impresoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91
9.8.6. Configuración de tarjetas de sonido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
92
9.9. Conclusión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
92
10. Arquitectura X-Window
93
10.1. ¿Qué es X-Window? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
93
10.2. Configuración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
96
10.3. X display manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
98
11. Taller de X-windows
100
11.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
11.2. Instalación del sistema básico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
11.2.1. Distintas estrategias para la instalación de los paquetes . . . . . . . . . . . . . . . . . . . . . . . 100
11.2.2. Instalación de paquetes básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
11.2.3. Inicialización del servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
11.2.4. El fichero de log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
11.2.5. El servidor de fuentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
11.3. Window Managers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
11.4. X Session Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
11.5. X Display Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
11.6. Desktop Managers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
11.6.1. GNOME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
11.6.2. KDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
11.7. Personalización de algunos aspectos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
11.7.1. Personalización de aspectos locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
11.7.2. Personalización de aspectos de red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
11.8. Configuración de impresoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
11.9. OpenOffice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
11.10.Conclusión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
A. Tablas de comandos
113
A.1. Sistema de ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
A.2. Ayuda del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
A.3. Permisos de los ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
A.4. Copia y borrado de ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
A.5. Parada o reinicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
A.6. Operaciones con ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
A.7. Compresión de ficheros y copias de seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
A.8. Operaciones de disco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
A.9. Usuarios y grupos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
A.10.Gestión de procesos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
B. El editor vi
119
B.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
B.2. Modos del vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
C. Heramientas de administración
122
C.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
C.2. Linuxconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
C.3. Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
D. GNU Free Documentation License
126
Capítulo 1
Introducción
1.1. ¿Qué es el GNU?
Para entender todo el movimiento del software libre debemos situarnos a finales de la década de los sesenta, principios
de los setenta. En aquellos tiempos las grandes compañías de ordenadores no daban el valor que hoy día se dá al software. En su gran mayoría eran fabricantes de ordenadores que obtenían sus principales ingresos vendiendo sus grandes
máquinas, a las que incorporaban algún tipo de sistema operativo y aplicaciones. Las universidades tenían permiso para
coger y estudiar el código fuente del sistema operativo para fines docentes. Los mismos usuarios podían pedir el código
fuente de drivers y programas para adaptarlos a sus necesidades. Se consideraba que el software no tenía valor por si mismo si no estaba acompañado por el hardware que lo soportaba. En este entorno, los laboratorios Bell (AT&T) diseñaron
un sistema operativo llamado UNIX, caracterizado por la buena gestión de los recursos del sistema, su estabilidad y su
compatibilidad con el hardware de diferentes fabricantes (para homogeneizar todos sus sistemas). Este último hecho fue
importantísimo (hasta entonces todos los fabricantes tenían sus propios operativos incompatibles con los otros) y fue el
factor que le proporcionó mucha popularidad.
Poco a poco, las grandes empresas empezaron a tomar conciencia del valor del software: primero fue IBM quién
en 1965 dejó de dar el código fuente de su sistema operativo, a finales de los 70 Digital Research empezó a vender el
suyo, etc. Este hecho hizo que todas las compañías se dieran cuenta que el software podía ser muy rentable y les podía
aportar grandes beneficios. Con ésto, la mayoría de empresas empezaron a poner reticencias a dejar el código fuente de
sus programas y sistemas operativos y empezaron a vender sus programas como un valor añadido a su hardware. En este
entorno cada vez más cerrado, Richard Stallman (que trabajaba en el MIT -Massachusetts Institute of Technology-) se
sintió indignado al comprobar que cada vez era más difícil conseguir el código fuente de los programas que utilizaba para
adaptarlos a sus necesidades, tal y como había hecho hasta entonces. Como anécdota, el mismo Stallman cuenta lo mucho
que se enfadó al descubrir que la compañía que les había vendido una nueva impresora para el laboratorio donde trabajaba
no le quería facilitar el código fuente de los drivers. ¡Él sólo quería modificarlos para que le avisara automáticamente
cuando se atascaba el papel! La compañía se negó absolutamente a proporcionárselos.
A partir de ese momento Stallman decidió ser consecuente con sus ideales e iniciar un gran proyecto para intentar
abrir otra vez el código fuente de los programas. Consciente que no podría conseguir que las compañías cedieran en este
punto, se propuso crear su propio sistema operativo y aplicaciones iniciando un proyecto llamado GNU (Gee’s Not UNIX
modificado más tarde por GNU’s Not UNIX), añadiéndose a la moda de los nombres/bromas recursivas de aquel tiempo.
De especial interés para entender los motivos que llevaron a Stallman a iniciar GNU es su primer manifiesto, el
documento dónde explicó a toda la comunidad qué sería el proyecto, cómo lo orientaría y por qué tenía que hacerlo. En
él empezó a describir el concepto de software libre y para qué creía necesario que programadores y desarrolladores de
alrededor del mundo contribuyeran con él. Aunque en muchas ocasiones se confunde el concepto de software libre con
el de software gratuito (en inglés, free tiene los dos significados), en posteriores documentos se ha dejado muy claro que
el software libre no debe por qué ser gratuito. Debemos entender como software libre programas de los cuales podemos
conseguir su código fuente, estudiarlo, modificarlo y redistribuirlo sin que nos obliguen a pagar por ello. Lo que debemos
tener claro es que sí podemos pedir el dinero que queramos por los programas y su código fuente, el soporte que podemos
ofrecer a los usuarios, los libros que vendamos o el material que proporcionemos, tal y como muchas compañías que
distribuyen GNU/Linux hacen. En ningún momento, pero, podemos obligar que los usuarios no distribuyan el software
que les hemos vendido. Éste debe poder ser distribuido de forma libre. Es una forma de entender el software diferente a
la que estamos acostumbrados. En muchos de los textos de la FSF (Free Software Foundation) se habla más de filosofía
que de ingeniería. Debemos entender todo este movimiento más como una forma de pensar o hacer las cosas que como
una compañía de software más.
La filosofía que se tiene en la FSF del software lo define con las siguientes cuatro libertades:
La libertad 0 se refiere a la libertad de poder usar el programa para cualquier propósito.
1
CAPÍTULO 1. INTRODUCCIÓN
2
La libertad 1 es la que te permite estudiar cómo funciona el programa y adaptarlo a tus necesidades. El acceso al
código fuente es una condición necesaria para garantizar esta libertad.
La segunda libertad es la que te permite distribuir libremente copias del software, ayudando a tu vecino.
La última libertad es la que te permite mejorar el programa y hacer públicas tus mejoras a los demás, en beneficio de
toda la comunidad. El accesso al código fuente también es un requisito imprescindible para asegurar esta libertad.
Para dar todas estas libertades al software que se desarrollaba en el proyecto y a los usuarios finales del mismo se
esribió la licencia con la cual se ha protegido todo este tipo de programas, la GPL (General Public License). Esta licencia
pone por escrito todas las ideas anteriormente comentadas.
El proyecto empezó a producir software a partir del 1984, comenzado con el desarrollo de todas la herramientas
necesarias para poder implementar un sistema operativo completo. Aunque realizar un proyecto de estas características es
largo y complejo, desde el principio muchos programadores y desarrolladores de software se vieron cautivados por la idea
de Stallman y empezaron a colaborar con él de forma gratuita. La comunidad no paró de crecer y poco a poco empezaron
a disponer de las herramientas necesarias (editores, compiladores, etc.) para implementar el núcleo del sistema operativo.
Tal y como la misma palabra indica, el núcleo (kernel) de un sistema operativo es el corazón con el cuál puede funcionar. Es
el núcleo de software que gestiona los recursos del ordenador: se comunica con los dispositivos y aplicaciones instalados,
administra la memoria adecuadamente, reparte tiempo de procesamiento para todos los programas, se comunica con los
dispositivos de almacenamiento para guardar los archivos, etc. Esta tarea es de una complejidad muy notable y necesita las
herramientas que inicialmente desarrolló el proyecto GNU. Desde el primer momento se quiso hacer un sistema operativo
parecido a UNIX y siguiendo las normas POSIX (Portable Operating System Interface). Aunque UNIX también tenía
sus problemas y carencias era, y sigue siendo, suficientemente bueno para adaptarse a la mayoría de necesidades. La
tarea de diseñar y escribir el núcleo del sistema operativo fue la que se dejó para el final. Todavía hoy no se ha acabado
definitivamente y el núcleo del GNU, llamado Hurd, aún está en fase de desarrollo.
ACTIVIDADES
1. Leer el primer mensaje escrito por Stallman en 1983 anunciando su proyecto (traducido al castellano):
http://www.fsf.org/gnu/initial-announcement.es.html
2. Leer “El Manifiesto GNU” original de Stallman (traducido al castellano):
http://www.fsf.org/gnu/manifesto.es.html
3. Leer la “General Public License”:
http://www.fsf.org/licenses/gpl.html
1.2. ¿Qué es el GNU/Linux?
En este contexto, y cuando la FSF todavía no tenía ningún núcleo estable para su sistema operativo, un profesor de la
Universidad de Holanda, Andrew Tanenbaum, decidió escribir un sistema operativo para que sus estudiantes pudieran
estudiarlo. Igual que Stallman, hasta el momento había podido utilizar el código fuente del UNIX de AT&T para que sus
alumnos aprendieran a diseñar sistemas operativos. Su idea era escribir un sistema operativo que pudiera ser estudiado y
modificado por cualquiera que quisiera. En 1987 se pusó manos a la obra y llamó a su proyecto mini UNIX, dando lugar
a MINIX. Al no utilizar ni una sola línea de código del UNIX de AT&T, no hay ninguna restricción en coger el código,
utilizarlo y modificarlo libremente.
Tanenbaum quisó crear un sistema orientado a fines docentes, con lo que lo diseñó utilizando una arquitectura microkernel. La tecnología micro-kernel se basa en dividir las diferentes funcionalidades del núcleo de un sistema operativo en
programas totalmente separados y que se comunican entre sí. Esto lo hace muy modular, facilitando muchísimo el test,
detección y corrección de errores, mantenimiento, etc. Actualmente algunos sistemas operativos como Amoeba, Chorus,
Mach o WindowsNTTM han incorporado este tipo de tecnología. Este tipo de núcleo es ideal para una fácil comprensión,
aportando una tecnología muy novedosa para la época que le permitía mucha versatilidad, multiplataforma, etc. Éste ha
sido uno de los puntos fuertes y débiles a la vez del MINIX: aunque el sistema es una pequeña joya para su estudio
y diseño, es muy probable que nunca se pueda utilizar en entornos reales. Se optó por hacerlo entendedor, modular y
muy pedagógico, pero no por ser rápido. De todas formas, Tanenbaum tampoco pretendía eso; a lo largo de los años
MINIX ha ido evolucionando y realmente hoy en día todavía sigue existiendo y siendo estudiado por muchos alumnos de
Universidades de alrededor del mundo.
Aquí es cuando entra en juego Linux. Mientras la FSF seguía con su gran proyecto proporcionando herramientas para
la construcción de un sistema operativo, Tanenbaum orientaba MINIX para fines docentes y muchas empresas seguían
evolucionando sus propias versiones de UNIX, Linus Torvalds, estudiante de la Universidad de Helsinki, decide crear
en agosto de 1991 su propio núcleo para un nuevo sistema operativo, Linux. Su idea era crear un UNIX para PC para
1.3. DISTRIBUCIONES
3
que todos los que quisieran lo pudieran utilizar en su ordenador. La primera aparición en escena fue en un debate sobre
MINIX y sistemas operativos, dónde expuso las siguientes ideas:
Newsgroups: comp.os.minix
Subject: What would you like to see most in minix?
Date: 25 Aug 91 20:57:08 GMT
Organization: University of Helsinki
Hello everybody out there using minix.
I’m doing a (free) operating system (just a hobby,
won’t be big and professional like gnu) for 386(486)
AT clones. This has been brewing since april, and
is starting to get ready. I’d like any feedback on
things people like/dislike in minix, as my OS resembles
it somewhat (same physical layout of the file-system
(due to practical reasons) among other things).
I’ve currently ported bash(1.08) and gcc(1.40),
and things seem to work.
This implies that I’ll get something practical
within a few months, and I’d like to know what
features most people would want. Any suggestions
are welcome, but I won’t promise I’ll implement
them :-)
Si accediéramos al fórum de debate donde apareció este primer mensaje veríamos como rápidamente gente de alrededor del mundo empezó a interesarse por este nuevo sistema, que al utilizar el compilador e intérprete de comandos de
GNU (gcc y bash) como piezas fundamentales también tenía las características de software libre. Aunque en palabras del
mismo Torvalds, si él mismo hubiera sabido la cantidad de trabajo necesario para lograr que su idea funcionase, nunca lo
hubiera hecho, los esfuerzos de muchos expertos en informática de alrededor del mundo hicieron este proyecto posible.
Linux, el núcleo de GNU/Linux es de tipo monolítico. Ésto indica que no se separan las diferentes funcionalidades del
mismo en diferentes módulos, sino que todo es un mismo programa. El principal inconveniente de este tipo de diseño es
que la localización de errores y mantenimiento son muy costosos. En contrapartida, el rendimiento que se consigue es
mucho mayor que en otros tipos de diseño.
De hecho, en los primeros años de su existencia, GNU/Linux se identificaba como el sistema operativo de los hackers.
Su difícil instalación, manipulación y falta de drivers lo hacían una herramienta sólo apta para gente muy entendida en
el tema. Fueron estos primeros usuarios los que diseñaron los drivers para los discos, impresoras, tarjetas, etc. y los que
empezaron a dar a conocer al mundo este sistema. Poco a poco, el número de usuarios empezó a crecer y actualmente ya
existen muchas empresas y grupos de usuarios que crean sus propias distribuciones de GNU/Linux.
1.3. Distribuciones
Actualmente existen muchas distribuciones diferentes basadas en GNU/Linux. Las hay para toda clase de ordenadores
y dispositivos electrónicos: ordenadores portátiles o de sobremesa, pocketPC o PDA, puntos de acceso de redes wireless,
etc. La naturaleza del software libre permite esto: cualquiera puede coger el código desarrollado hasta el momento y
adaptarlo a sus propias necesidades. Es un hecho que, cada vez más, empresas y usuarios eligen sistemas basados en
GNU/Linux por sus elevadas prestaciones y la cantidad de software disponible.
De todas formas, aunque existen decenas de distribuciones, hay algunas más populares que se han extendido mucho.
La filosofía de software libre hace que muchas empresas que han creado sus propias distribuciones de GNU/Linux no
restrinjan el acceso a su código. Aún así, el soporte que dan y el material que venden les aporta beneficios, permitiendo
su subsistencia. También es importante saber que en muchas de estas distribuciones se incluye software propietario que
algunos usuarios prefieren, aunque en muchos casos existen programas homólogos con licencia GPL o de tipo libre (Free
Software). Aunque muchas de estas distribuciones se denominan solamente Linux, es importante que diferenciemos que
realmente Linux es el núcleo del sistema operativo y que el proyecto GNU es el que realmente ha aportado mucha de la
estructura para el funcionamiento del mismo.
A continuación haremos una breve descripción de algunas de las distribuciones de GNU/Linux:
Slackware: una de las primeras distribuciones que aparecieron. Fue creada por Patrick Volkerding y tuvo un gran
éxito en sus primeros años de existencia.
Debian GNU/Linux: una de las primeras distribuciones de GNU/Linux que aparecieron y aun siguen existiendo
y evolucionado. El sistema de paquetes nos permite diferenciar claramente el software libre del que no lo es,
CAPÍTULO 1. INTRODUCCIÓN
4
permitiéndonos tener todo el sistema solamente con programas de licencias Free Software. Es desarrollada por un
grupo de colaboradores distribuídos alrededor del mundo y no tiene el respaldo de ninguna empresa. Aunque es de
las más estables y seguras que existen, su sistema de instalación y configuración necesita de conocimientos previos.
RedHat Linux: junto con SuSE, es una de las distribuciones de mayor popularidad. Está creada por una empresa
de EUA, aportando software de gran calidad. Tiene un entorno muy intuitivo que facilita mucho su instalación y
configuración.
SuSE Linux: aunque es una distribución creada bastante recientemente, ha tenido una gran difusión. Está desarrollada por una empresa alemana, aportando mucho software propietario de calidad. Es muy completa y fácil de
instalar y mantener, aunque en algunos aspectos no se siguen algunos de los estándares de la comunidad.
Knoppix: distribución en un CD-live basada en Debian. Detecta automáticamente todo tipo de hardware y aporta el
último escritorio de KDE y la suite OpenOffice. Muy útil para demostraciones y usuarios noveles en el sistema.
Tampoco podemos olvidar que existen otros sistemas operativos compatibles con UNIX y los estándares que se siguen
actualmente. Muchos de los conceptos y herramientas que veremos a lo largo del curso también servirán para estos otros.
En especial debemos destacar GNU/Hurd (núcleo desarrollado por el proyecto GNU) y FreeBSD.
ACTIVIDADES
1. Leer la descripción de algunas de las distribuciones actuales basadas en GNU/Linux:
http://www.linuxhq.com/dist.html
1.4. Programas y documentación
Internet siempre ha sido el principal medio de comunicación entre los desarrolladores y usuarios del software libre.
Es por esta razón que ya desde el principio de la gran expansión de GNU/Linux siempre se ha podido encontrar en el red
muchísima información sobre el operativo. La mayoría de programas los podemos descargar de Internet, empaquetados
con alguno de los sistemas más comunes o bien directamente a partir de su código fuente para que lo podamos compilar
en nuestro sistema. Además, la mayoría de distribuciones también se pueden descargar de la red sin necesidad de comprar
ningún pack especial de las revistas especializadas o de las mismas empresas que lo producen. También es cierto que si
1.4. PROGRAMAS Y DOCUMENTACIÓN
5
queremos el soporte que algunas de las distribuciones dan, lo mejor es comprar todo el material que se proporciona (CDs,
manuales, etc.) y registrarse.
A medida que nos vayamos introduciendo en el mundo del software libre y del GNU/Linux, también veremos como
uno de los aspectos clave para moverse en él es saber encontrar la documentación que nos interesa. Cuando nos encontramos delante de un problema, antes de empezar a dar vueltas sobre cómo resolverlo, debemos pensar que es muy probable
que otra gente como nosotros se haya encontrado con lo mismo o con algo similar. Buscar y encontrar la documentación
que se adapte mejor a los problemas que se nos vayan planteando nos ahorrará mucho tiempo y esfuerzos. La comunidad
del software libre genera centenares de documentos que podemos descargarnos libremente de Internet, además de los
foros de discusión, páginas de rumores y noticias, etc.
Algunas de las referencias más populares y que más nos pueden ayudar son:
Documentación
- http://www.tldp.org: The Linux Documentation Project. La mayoría de guías, HOWTOS, FAQS, etc. existentes
los podemos encontrar en este sitio, que además está en varios idiomas.
- http://lucas.linux.org.mx: LinUx en CAStellano. Gran proyecto de documentación en castellano para los HOWTOS, guías, etc. de GNU/Linux.
- http://www.linuxpowered.com/HOWTO/HOWTO-INDEX: El HOWTO de los HOWTOS.
- http://www.linux.com: Página con diferentes secciones de noticias, documentación, etc.
- http://www.debian.org/doc: Documentación para Debian GNU/Linux.
Noticias
- http://slashdot.com: Noticias y rumores del mundo GNU/Linux. En inglés.
- http://barrapunto.com: La réplica de slashdot en castellano.
- http://puntbarra.com: La réplica de slashdot en catalán.
- http://bulmalug.net: Bisoños Usuarios de Linux de Mallorca y Alrededores. Noticias y secciones dedicadas a
temas concretos.
- http://www.es.gnu.org/gnuticias: Noticias de GNU en español.
- http://linuxtoday.com: Otra página de noticias muy práctica para estar a la última.
- http://libertonia.escomposlinux.org: Página de noticas. De especial interés es su sección de “Fuentes de Noticias”,
dónde hay multitud de otros enlaces a otras páginas del mismo estilo.
Foros
- http://www.foroslinux.org: Varios foros de GNU/Linux dedicados a todo tipo de temas.
- http://www.linuxsecurity.com/resources/forums-1.html: Foros centrados en temas de seguridad y similares.
Búsqueda
- http://www.google.com/linux: El mayor buscador del mundo también para GNU/Linux.
- http://www.buscadoc.org: Buscador de documentación informática en castellano.
Distribuciones
- http://www.fsf.org: La página oficial de la Free Software Foundation.
- http://www.debian.org: Página oficial de debian GNU/Linux.
- http://www.redhat.com: Página oficial de RedHat Linux.
- http://www.suse.com: Página oficial de SuSE.
- http://www.slackware.com: Página oficial de Slackware Linux.
- http://www.knoppix.com: Página oficial de Knoppix.
Descargas
- http://sourceforge.net: La mayor página con proyectos de software libre.
- http://www.softonic.com : Sección de descarga para GNU/Linux de una de las múltiples páginas de downloading.
- http://download.com: Página de descargas.
Otras
- http://www.linuxsecurity.com: Página muy actual centrada en todo tipo de temas de seguridad en GNU/Linux.
- http://www.linuxhq.com: Información general sobre distribuciones de GNU/Linux, seguridad, etc.
- http://www.linuxjournal.org: Página de noticias y artículos sobre GNU/Linux.
- http://www.linuxgazette.com: Revista de GNU/Linux.
- http://www.linux-mag.com: Revista de GNU/Linux.
- http://www.xfree86.org: Página oficial del proyecto XFree86.
Capítulo 2
Conceptos y comandos básicos
2.1. Introducción
En este capítulo aprenderemos las ideas e instrucciones básicas para movernos adecuadamente por el sistema. Si no
estamos acostumbrados a utilizar la línea de comandos para manipular el sistema operativo, al principio puede parecernos
un poco complicado, pero a medida que las vayamos utilizando veremos como son muy útiles y nos permiten realizar
cualquier tarea que queramos (un comando es un programa que realiza una determinada acción -generalmente relacionado
con el operativo-). Además, el hecho de saber utilizar correctamente los comandos nos será muy útil cuando necesitemos
conectarnos de forma remota a una máquina además de poder diseñar pequeños programas (shell scripts) para automatizar
las tareas de administración más comunes.
La mayoría de comandos que veremos en este capítulo forman parte del estándar (normas IEEE POSIX) y son comunes a todos los sistemas GNU/Linux y a UNIX. Aunque cada distribución tiene sus propias aplicaciones de administración
y gestión, muchas de las acciones que se realizan a partir de ellas también se pueden hacer con los comandos que veremos.
A partir de los mismos, podremos manipular casi todos los aspectos del sistema y movernos eficientemente por él. Aprendiendo a utilizar correctamente estos comandos aprenderemos a navegar por cualquier sistema basado en GNU/Linux, sin
importar qué distribución estemos usando.
Cada uno de los comandos del sistema suele tener multitud de parámetros diferentes. Un parámetro no es más que una
opción determinada de un comando, que le añadimos a continuación del mismo precedido por un espacio y, en muchas
ocasiones, también por un guión. Por ejemplo, si un comando fuera listar, podríamos pasarle un parámetro como
“listar -todo”. Con la utilización de los parámetros podemos, con un mismo comando, hacer muchas acciones
diferentes, aunque todas sean de un mismo estilo. En este documento no especificaremos los diferentes parámetros de
cada uno de los comandos que veremos ya que extenderíamos el texto más allá de lo permisible y tampoco tiene sentido
saber exactamente todos los parámetros posibles para cada uno. Todos ellos tienen un amplio manual dónde se especifican
todas sus opciones, de forma que siempre que necesitemos realizar alguna acción en concreto podremos recurrir a él. En
los talleres distribuidos a lo largo del curso sí veremos algunas de estas opciones, aunque es importante saber que con el
manual siempre podremos descubrir muchas otras opciones que nos pueden ayudar a realizar todo lo que necesitemos.
2.2. Usuarios y grupos
Actualmente la mayoría de sistemas operativos existentes son multiusuario y multitarea. Ésto implica que más de un
usuario puede trabajar en el sistema de forma simultánea a otros, ejecutando una o más tareas a la vez. Por este motivo,
es muy importante que el mismo sistema operativo incorpore mecanismos para manipular y controlar correctamente
los usuarios: el sistema de entrada e identificación (login), los programas que puede ejecutar cada uno, mecanismos de
seguridad para proteger el hardware del ordenador, protección para los ficheros de los usuarios, etc.
Los sistemas operativos basados en UNIX organizan todo esto por usuarios y grupos. Al entrar en el sistema debemos
identificarnos con un login y una contraseña. El login suele ser un nombre que identifica de forma inequívoca al usuario.
En sistemas donde hay más que unos pocos usuarios es importante tener una buena política de nombres para poderlos
identificar a todos de forma clara (una política de nombres muy utilizada suele ser poner como login la primera inicial del
nombre del usuario seguido de su apellido). La contraseña debe ser una combinación de letras, números y caracteres especiales. Es muy importante que no sea ninguna palabra de diccionario o similares porque puede representar un problema de
seguridad muy importante. El sistema de contraseñas del sistema es de tipo unidireccional. Esto quiere decir que nuestra
contraseña no es almacenada como texto, sino que es cifrada y guardada en esta forma. Cuando entramos en el sistema y
escribimos nuestra contraseña, ésta es cifrada y comparada con la almacenada. Si coinciden, la identificación es positiva,
sino no. Lo importante de todo este sistema es que a partir del cifrado no podemos conseguir, de ninguna forma, la clave
6
2.2. USUARIOS Y GRUPOS
7
original. Los programas que intentan romper las contraseñas de los usuarios lo único que pueden hacer es cifrar palabras
a partir de diccionarios (con sistemas automáticos para derivarlas y buscar variantes) y probar si coinciden con el cifrado
de alguna de las contraseñas de usuario. Es por este motivo que debemos escoger cuidadosamente nuestras contraseñas;
de otra forma comprometeremos toda la seguridad del sistema.
Actualmente, en los sistemas GNU/Linux podemos escoger dos tipos de cifrado posible para las contraseñas de usuario. El que se viene usando desde los inicios de UNIX es el 3DES. El único inconveniente de este tipo de cifrado es que
solo nos permite contraseñas de 8 letras (si escribimos más, se ignoran), a diferencia del otro tipo de cifrado, llamado
MD5, con el cual podemos usar contraseñas de la longitud que queramos (de hecho, MD5 es un sistema de hashing, pero
también se puede utilizar para cifrar contraseñas de forma unidireccional). Como más larga sea la contraseña, más segura
es, con lo cual se recomienda utilizar el segundo tipo de cifrado. De todas formas, pero, debemos tener en cuenta que si
necesitamos usar algunos programas especiales para la gestión de usuarios, como el NIS 1 , puede que no sean compatibles
con MD5.
Si un usuario es un individuo particular que puede entrar en el sistema, un grupo es un conjunto de usuarios con
acceso al sistema que comparten unas mismas características, de forma que nos es útil agruparlos para poder darles una
serie de permisos especiales en el sistema. Un usuario debe pertenecer, almenos, a un grupo, aunque puede ser de más de
uno. El sistema también utiliza todo este mecanismo de usuarios y grupos para gestionar los servidores de aplicaciones
instalados y otros mecanismos. Es por este motivo que además de todos los usuarios reales, en un sistema habrá muchos
otros vinculados a otras tareas que se deben realizar en el operativo. Generalmente, este tipo de usuario no podrá entrar
(con un login normal) al sistema.
En todo sistema operativo debe haber un superusuario (root). Éste será el usuario con todos los permisos, el que
tendrá los priviliegios máximos que le permitirán hacer cualquier operación sobre el sistema. Este usuario debe existir ya
que es el que se encargará de toda la administración y gestión de servidores, grupos, etc. Es importante que esta cuenta
no se utilice para trabajar normalmente en el sistema. Sólo deberíamos entrar como root cuando es realmente necesario,
utilizando otras cuentas para el trabajo normal de los usuarios. De esta forma nunca podremos dañar el sistema con
operaciones erróneas o con la prueba de programas maliciosos, etc.
Toda la información de usuarios y grupos se guarda en los siguientes archivos:
/etc/passwd: información (nombre, directorio home, . . . ) del usuario.
/etc/group: información sobre los grupos de usuarios.
/etc/shadow: contraseñas cifradas de los usuarios y configuración para su validez, cambio, etc.
Utilizar el archivo de shadow es opcional. En un principio, las contraseñas cifradas de los usuarios se guardaban en
el mismo fichero de passwd, pero por razones de seguridad (muchos mecanismos deben poder leer este fichero, con lo
cual era muy fácil hacerse con él e intentar crackear -conseguir la palabra clave- las contraseñas) se optó para cambiar este
mecanismo para hacer que el fichero de shadow solo fuera accesible por algunos usuarios con priviliegios especiales en el
sistema (es recomendable utilizarlo). También es posible configurar el sistema para que se utilice un fichero shadow para
los grupos (en caso que sea necesario ponerles contraseña). Este fichero se nombraría /etc/gshadow. Generalmente
la configuración de contraseñas se indica al instalar el sistema, aunque todo se puede cambiar y adaptar a nuestro gusto a
partir del fichero de configuración de login /etc/login.defs, los módulos PAM (Pluggable Authentication Modules
for Linux) -encargados de todo el sistema de autentificación de usuarios- y los comandos pwconv y grpconv -que nos
permiten convertir ficheros passwd a textttshadow-.
Todos estos ficheros están organizados por líneas donde cada una de ellas identifica un usuario o grupo (dependiendo
del fichero). En cada línea hay diversos campos separados por el caracter “:”. En tareas de adminsitración es importante
saber qué son estos campos, con lo que los vamos a explorar con un poco más de detalle:
passwd
1. Login: el nombre del usuario. No puede haber dos nombres iguales, aunque sí alguno que coincida con un
grupo del sistema.
2. Contraseña cifrada: si no se utiliza el fichero de shadow, las contraseñas cifradas se almacenan en este campo.
Si utilizamos el fichero de shadow, todos los usuarios existentes en este fichero deben existir también en el
de shadow y en este campo se pone el caracter “x”.
3. User ID: número de identificación del usuario. Es el número con el cual el sistema identifica el usuario. El 0
es el único que está reservado para el root.
4. Group ID: el número de grupo al cual pertenece el usuario. Como un usuario puede pertenecer a más de un
grupo, se denomina este grupo como primario.
1 NIS
son una serie de aplicaciones de gestión centralizada de usuarios. Más información en http://www.tldp.org/HOWTO/NIS-HOWTO/
CAPÍTULO 2. CONCEPTOS Y COMANDOS BÁSICOS
8
5. Comentarios: campo reservado para poner los comentarios que queramos del usuario. Se suele utilizar para
poner el nombre completo o algún tipo de identificación personal.
6. Directorio home: el directorio home del usuario es dónde el usuario podrá guardar todos sus ficheros. Suelen
ponerse todos en alguna carpeta del sistema (generalmente /home/) y organizados por grupos.
7. Intérprete de comandos: un intérprete de comandos (shell) es un programa que se encarga de leer todo
lo que escribimos en el teclado y ejecutar los programas o comandos que le indiquemos. Hay decenas de
ellos, aunque el más utilizado es, sin duda, el bash (GNU Bourne-Again SHell). Si en este campo escribimos
/bin/false no permitiremos que el usario ejecute ningún comando en el sistema, aunque esté dado de alta
en el mismo.
group
1. Nombre del grupo.
2. Contraseña cifrada: la contraseña de un grupo se utiliza para permitir que los usuarios de un determinado
grupo se puedan cambiar a otro o para ejecutar algunos programas con permisos de otro grupo (siempre que
se disponga de la contraseña).
3. Group ID: número de identificación del grupo. Es el número con el cual el sistema identifica internamente a
los grupos. El 0 es el único que está reservado para el grupo del root (los administradores).
4. Lista de usuarios: los nombres de los usuarios que pertenecen al grupo, separados por comas. Aunque todos
los usuarios ya deben pertenecer a un determinado grupo (especificado en el cuarto campo del fichero de
passwd), este campo se puede utilizar para que usuarios de otros grupos también tengan los permisos del
que se está referenciando.
shadow
1. Login: debe ser el mismo nombre que se utiliza en el fichero de passwd.
2. Contraseña cifrada.
3. Días, desde el 1 de enero de 1970, que han pasado hasta que la contraseña ha sido cambiada por última vez.
4. Días que deben pasar hasta que la contraseña pueda ser cambiada.
5. Días que han de pasar hasta que la contraseña deba ser cambiada.
6. Días antes de caducar la contraseña en el que se avisará al usuario que debe cambiarla.
7. Días que pueden pasar después que la contraseña caduque antes de desabilitar la cuenta del usuario (si no se
cambia la contraseña).
8. Días, desde el 1 de enero de 1970, desde que la cuenta está deshabilitada.
9. Campo reservado.
Cuando un usuario entra en el sistema, se le sitúa en su directorio home y se ejecuta el intérprete de comandos (shell)
configurado. De esta forma ya puede empezar a trabajar. Sólo el root del sistema (o los usuarios de su grupo) tienen
permiso para manipular la información de los usuarios y grupos, darlos de alta, de baja, etc. Existen muchos comandos
para manipular todo esto. Cada uno de ellos tiene, además, varios parámetros diferentes para gestionar todos los campos
que hemos visto anteriormente de forma amena. A continuación mostrarmos algunos de estos comandos:
adduser: nos sirve para añadir un nuevo usuario al sistema. La forma como éste se añade (si no le especificamos
nada) se puede configurar en el fichero /etc/adduser.conf. Se le pueden pasar multitud de opciones diferentes
para especificar el directorio home, el shell a utilizar, etc.
useradd: crea un nuevo usuario o cambia la configuración por defecto de los mismos. Este comando y el anterior
nos pueden servir para realizar las mismas acciones.
usermod: con este comando podemos modificar la mayoría de los campos que se encuentran en el fichero de
passwd y shadow, como el directorio home, el shell, la expiración de la contraseña, etc.
chfn: cambia la información personal del usuario, contenida en el campo de comentarios del fichero de “passwd”.
chsh: cambia el shell del usuario.
deluser: elimina un usuario del sistema, borrando o guardando todos sus ficheros según los parámetros que le
pasemos, haciendo copia de seguridad de los mismos o no, etc. La configuración que se utilizará por defecto con
este comando está especificada en el fichero /etc/deluser.conf.
userdel: comando con las mismas posibilidades que el anterior.
2.3. EL SISTEMA DE FICHEROS
9
passwd: nos sirve para cambiar la contraseña de un usuario, la información de expiración de las mismas o para
bloquear o desbloquear una determinada cuenta.
addgroup: permite añadir un grupo al sistema.
groupadd: lo mismo que el comando anterior pero con diferentes parámetros.
groupmod: nos permite modificar la información (nombre y GID) de un determinado grupo.
delgroup: elimina un determinado grupo. Si algún usuario todavía lo tiene como primario no se podrá eliminar.
groupdel: igual que en el caso anterior.
gpasswd: nos sirve para cambiar la contraseña del grupo.
Para saber qué usuario somos podemos utilizar el comando whoami, que nos mostrará nuestro login. groups nos
sirve para saber a qué grupos pertenecemos y id nos mostrará usuario y grupos. También es interesante poder convertirnos
en otro usuario sin tener que salir de la sesión (comando login o su) o cambiarnos de grupo con el comando newgrp.
Este último comando debemos utilizarlo sólo cuando no pertenecemos al grupo en cuestión y sabemos su contraseña (que
debe estar activada en el fichero de group). Si sólo necesitamos los permisos del grupo en cuestión para ejecutar un
determinado comando también podemos utilizar sg.
En sistemas donde hay centenares de usuarios, es usual poner algún tipo de mecanismo para restringir el espacio de
disco que puede utilizar cada uno. En los sistemas GNU/Linux éste sistema se llama quota.
Tal y como decíamos anteriormente, GNU/Linux es un sistema operativo multiusuario, con lo cual en un mismo
momento puede haber varios usuarios conectados al sistema de forma simultánea. Para saber qué usuarios hay en un
determinado momento podemos utilizar el comando who, que nos muestra la lista de usuarios dentro del sistema. w,
además, nos muestra qué es lo que están haciendo. Nos podemos comunicar con ellos utilizando el comando write, con
el cual aparece el mensaje que escribamos en la pantalla del usuario que indiquemos o wall, que escribe el contenido del
fichero que especifiquemos a todos los usuarios dentro del sistema. Para activar o desactivar la opción de recibir mensajes
hay el comando mesg. También podemos hacer un chat personal con algún usuario a partir del comando talk.
Como vemos, en GNU/Linux tenemos más de una forma para hacer una determinada acción. Esta es la tónica general
que se sigue en el sistema: podemos editar directamente los ficheros y modificarlos nosotros mismos, utilizar algunos de
los comandos que existen, creárnoslos nosotros mismos, etc. En definitiva, tenemos la posibilidad de elegir qué es lo que
más nos gusta.
2.3. El sistema de ficheros
2.3.1. La jerarquía del sistema de ficheros
Todo sistema operativo necesita guardar multitud de archivos: desde los de la configuración del sistema, los de log, los
de los usuarios, etc. En general, cada operativo utiliza su propio sistema de ficheros, caracterizándolo en muchos aspectos
como pueden ser el rendimiento, seguridad, fiabilidad, etc. GNU/Linux es capaz de leer/escribir archivos con cualquiera
de los sistemas de ficheros que actualmente existen, aunque para su propia raíz y directorios principales es necesario un
sistema de ficheros que le permita ciertas operaciones. Generalmente se suele utilizar el tipo ext2, ext3 o ReiserFS. El
ext2 es el más típico y extendido. Su rendimiento es bastante bueno, incorpora todo tipo de mecanismos de seguridad y
tunning y es muy fiable. Ha sido diseñado para manejar de forma muy rápida ficheros pequeños, que es lo que más suele
tener un sistema operativo. Con el manejo y manipulación de grandes ficheros multimedia no se desenvuelve tan bien,
aunque siempre se puede hacer un poco de tunning para adaptarlo más a nuestras necesidades. ext3 es la evolución del
mismo, incorporando una tecnología llamada de journaling. Una de las principales ventajas de esta tencología es que si
hay un corte en el suministro de energía y el ordenador se apaga sin cerrarse adecuadamente, los sistemas de recuperación
de ficheros son más efectivos. ReiserFS es un nuevo tipo de sistema que incorpora nuevas tecnologías de diseño que le
permiten ser más rápido. En el proceso de instalación del sistema operativo se nos preguntará cuál de estos tres queremos
usar.
Una característica muy importante de todos los sistemas operativos basados en UNIX es que todos los dispositivos
del sistema se pueden tratar como si fueran ficheros. Igualmente, cuando queramos acceder al contenido de un CD,
disquete o cualquier otro dispositivo de almacenamiento, deberemos montarlo en un directorio ya existente en el sistema
y navegaremos por él como si se tratara de una carpeta más (el uso de diferentes unidades -A:,B:,C:,D:,. . . - es un esquema
sólo existente en sistemas operativos tipo WindowsTM).
Lo primero que debemos tener claro es que todo el sistema de ficheros parte de una misma raíz, a la cual nos referiremos con el caracter “/”. Es el origen de todo el sistema de ficheros y sólo existe una. Para organizar los ficheros
adecuadamente, el sistema proporciona lo que llamaremos directorios (o carpetas), dentro de las cuales podemos poner
archivos y más directorios. De esta forma conseguimos una organización jerárquica como la que vemos en la figura 2.1.
CAPÍTULO 2. CONCEPTOS Y COMANDOS BÁSICOS
10
RAÍZ
/
Directorio1
archivoB
Directorio2
Directorio3
archivoC archivoD
Directorio1_1
Directorio3_1
archivoE
Directorio1_2
archivoF
archivoA
archivoH
Directorio3_3
Directorio3_2
archivoI
archivoG
RUTA archivoA: /archivoA
RUTA archivoB: /Directorio1/archivoB
RUTA archivoC: /Directorio2/archivoC
RUTA archivoD: /Directorio2/archivoD
RUTA archivoE: /Directorio1/Directorio1_1/archivoE
...
Figura 2.1: Jerarquía de un sistema de ficheros.
2.3.2. Directorios del sistema
La mayoría de sistemas operativos siguen el estándard FHS (Filesystem Hierarchy Standard) 2 dónde se especifica la
distribución en directorios para organizar correctamente los archivos y poder localizarlos de forma rápida y sencilla. En la
mayoría de distribuciones basadas en GNU/Linux se siguen estas recomendaciones, encontrando los siguientes directorios
principales:
/bin/: comandos básicos para todos los usuarios del sistema.
/boot/: archivos estáticos necesarios para el arranque del sistema.
/dev/: dispositivos del sistema.
/etc/: archivos de configuración del sistema y de las aplicaciones instaladas en el mismo.
/home/: directorio para poner las carpetas home de los usuarios.
/lib/: librerías esenciales para el núcleo del sistema y módulos del mismo.
/mnt/: punto de montaje temporal para dispositivos.
/proc/: procesos y variables del núcleo del sistema3 .
/root/: directorio home para el root del sistema.
/sbin/: comandos especiales para el root del sistema.
/tmp/: archivos temporales. Según la distribución utilizada (o la configuración que utilicemos) se borran al arrancar el sistema o cada cierto período de tiempo.
/usr/: segunda estructura jerárquica, utilizada para almacenar todo el software instalado en el sistema.
/var/: directorio para los spoolers de impresión, ficheros de log, etc.
Es muy recomendable conservar y no eliminar ninguno de estos directorios (o los que por defecto nos cree la distribución que utilicemos) ya que son básicos para el buen funcionamiento del sistema. Generalmente los procesos de
instalación de nuevas aplicaciones necesitan que exista la organización dada y muchos de los archivos de configuración
de los programas deben estar en determinados directorios. Lo que sí podemos hacer sin ningún tipo de restricción es crear
nuevos directorios a la raíz del sistema o en cualquier otra carpeta.
2 Más
información en http://www.pathname.com/fhs/
los ficheros que vemos en este directorio no están guardados en ningún sistema de almacenaje, sino que son variables, flags, . . . utilizados
en el núcleo del sistema.
3 Realmente
2.3. EL SISTEMA DE FICHEROS
11
2.3.3. Moviéndonos
Para movernos por la estructura de directorios debemos utilizar los comandos para listar contenidos y cambiar de
carpeta. Cuando entramos en el sistema es usual que el login nos sitúe en nuestro directorio home, que generalmente
se suele referenciar con el caracter “∼”. Si queremos ver lo que hay en el directorio donde estemos situados podemos
listar los contenidos utilizando el comando ls. Debemos tener en cuenta que por defecto el comando no nos muestra los
archivos que empiezan por un punto (es así porque cada vez que listemos el contenido del directorio no tengamos que
ver los ficheros y directorios de configuración de las aplicaciones que utilizamos -que suelen empezar por este caracter- y
las entradas del directorio actual y anterior, que siempre existen). Con el parámetro “-a” sí nos mostraría absolutamente
todos los ficheros. En todos los directorios existe una entrada “.” y otra “..”. El punto es la referencia al directorio actual,
mientras que los dos puntos seguidos hacen referencia al directorio immediatamente superior (en el árbol de jerarquías)
al actual. Naturalmente, cuando estemos situados en la raíz del sistema de ficheros, la entrada “..” no existirá porque
estamos en el nivel superior.
Para cambiar de directorio podemos utilizar el comando cd. Si no le pasamos ningún parámetro, por defecto nos
situará en nuestro directorio home. Generalmente se le suele indicar dónde queremos ir, pasándolo de forma absoluta o
relativa. De forma relativa significa que partiremos del directorio donde estemos en el momento de ejecutar el comando.
Por ejemplo, si estamos en el directorio /usr/bin/ y queremos ir al /root/, deberíamos introduir el siguiente comando: “cd ../../root” (los dos primeros puntos indican /usr/ y los siguientes la raíz “/” del sistema, a partir
de la cual ya podemos acceder a /root/). De forma absoluta siempre partimos de la raíz, de manera que el comando
que utilizaríamos para el ejemplo anterior sería: “cd /root”. Para saber en qué directorio estamos podemos utilizar el
comando pwd.
2.3.4. Enlaces
Otro mecanismo que nos proporcionan la gran mayoría de sistemas de ficheros son lo que llamamos enlaces. Un
enlace es un puente a un archivo o directorio perteneciente al sistema; como una referencia que podemos poner en cualquier sitio que nos interese y que actúa como un acceso directo a cualquier otro. Este mecanismo nos permite acceder
a carpetas o archivos de forma más rápida y cómoda, sin tener que desplazarnos por la jerarquía de directorios. Vamos
a verlo con un ejemplo: imaginemos que somos un usuario (user1) que necesita acceder frecuentemente al directorio
/usr/share/man/man3/. En lugar de escribir el largo comando que nos situaría en el directorio en cuestión cada vez
que necesitáramos desplazarnos a él, podemos crear un enlace en nuestro propio directorio que nos redireccione directamente hacia allí. El comando “ln -s /usr/share/man/man3 mmm” nos crearía este puente, que hemos llamado
“mmm”. El usuario sólo debería escribir (desde su directorio home) “cd mmm” y automáticamente el sistema lo redirigiría
hacia /usr/share/man/man3/. Es importante tener en cuenta que al hacer un “cd ..” para ir al directorio superior, volveríamos al directorio home y no a usr/share/man/, ya que hemos accedido a él a partir de nuestro enlace.
Podemos ver este esquema de forma gráfica en la figura 2.2.
RAÍZ
/
usr
share
man
home
user1
mmm
directorio home
de user1
enlace simbólico
man3
Figura 2.2: Enlaces en el sistema de ficheros.
Al crear el enlace del ejemplo anterior hemos pasado el parámetro “-s” al comando. Ésto indica que queremos
crear un enlace simbólico. Los enlaces simbólicos significan que tan solo estamos creando un apuntador o puente hacia el
fichero o directorio, de forma que si borrásemos el fichero destino el enlace no apuntaría a ninguna parte. Si no ponemos el
parámatro “-s” se crearía lo que llamamos un enlace fuerte (hard link) que, a diferencia del anterior, hace un duplicado
del fichero. De hecho, internamente no es exactamente un duplicado; es como dos entradas que apuntan a los mismos
datos. De esta forma, si modificamos uno u otro, los dos quedan iguales. La ventaja de este tipo de enlace es que si
borramos cualquiera de las dos copias del fichero la otra todavía se conserva. Este tipo de enlace no se utiliza demasiado
porque complica la gestión y manipulación de los ficheros (siempre es mejor tener una sola copia de los archivos).
CAPÍTULO 2. CONCEPTOS Y COMANDOS BÁSICOS
12
Además, si hacemos un enlace fuerte de un directorio, todos los archivos y subdirectorios que contuviera también se
deberían referenciar. Es por este motivo que sólo el root del sistema puede hacer enlaces fuertes de directorios. Otra
diferencia es que con un enlace simbólico podemos ver a qué fichero estamos apuntando, mientras que con uno de fuerte
no (debido al mecanismo que se utiliza internamente para ellos). Además, los enlaces fuertes sólo se pueden crear entre
ficheros o directorios de una misma unidad.
2.3.5. Permisos
En cualquier sistema operativo multiusuario necesitamos que los ficheros que guardamos en nuestro disco puedan tener
una serie de propiedades que nos permitan verlos, modificarlos o ejecutarlos para los usuarios que nosotros definamos.
Aunque hay varias alternativas para hacer esto, GNU/Linux utiliza el sistema clásico de UNIX, que combinado con todos
los mecanismos de gestión de usuarios y grupos nos permite cualquier configuración posible. La idea es definir, para
cada fichero o directorio, a qué usuario y grupo pertenece y qué permisos tiene para cada uno de ellos y para el resto
de usuarios del sistema. Ejecutando “ls -l” veremos como por cada archivo del directorio donde estemos aparece una
línea parecida a la siguiente:
-rwxr-xr-x
1
user1
grupo1
128931 Feb 19 2000 gpl.txt
Los primeros diez caracteres (empezando por la izquierda) nos indican los permisos del fichero de la siguiente forma:
Caracter 1: esta entrada nos indica si es un fichero o un directorio. En caso de ser un fichero aparece el caracter “-”,
mientras que por los directorios aparece una “d”.
Caracteres 2,3,4: nos indican, respectivamente, los permisos de lectura, escritura y ejecución para el propietario del
fichero. En caso de no tener el permiso correspondiente activado encontramos el caracter “-” y sino “r”, “w” o
“x” según si lo podemos leer (Read), escribir (Write) o ejecutar (eXecute). En el tercer caracter, además, podemos
encontrarnos una “s”, que nos indica si el archivo es de tipo SetUserId, que quiere decir que al ejecutarlo obtendrá
los permisos del propietario del fichero. Si sólo tiene el permiso “x”, cuando el programa se ejecuta lo hace con los
permisos de quién lo haya lanzado. El mecanismo de SetUserId es muy útil cuando un programa necesita tener los
permisos de su propietario para acceder a ciertos archivos o hacer algún tipo de operación en el sistema. De todas
formas, debemos vigilar mucho con este tipo de ficheros porque mal utilizados pueden suponer fallos de seguridad
en el sistema.
Caracteres 5,6,7: estos caracteres tienen exactamente el mismo significado que anteriormente pero haciendo referencia a los permisos dados para los usuarios del grupo al que pertenece el fichero.
Caracteres 8,9,10: igual que en el caso anterior pero para todos los otros usuarios del sistema.
Después de estos 10 caracteres encontramos un número que nos indica el número de enlaces fuertes que tiene el
fichero. Para los directorios, este número indica cuántas carpetas hay dentro de él además de los enlaces fuertes que tiene
(cuando no hay ninguno, el número es 2 debido a la gestión interna del operativo). A continuación vemos el propietario y
el grupo del archivo, seguido del tamaño (en bytes) que ocupa y la fecha de la última modificación. En todos los ficheros
se guarda su fecha de creación, último acceso y modificación, que podemos manipular con el comando touch. Al final
hay el nombre del fichero, dónde se diferencian minúsculas de mayúsculas y podemos tener todo tipo de caracteres sin
ningún problema.
Para cambiar los permisos de un determinado archivo podemos utilizar el comando chmod. Debemos tener en cuenta
que sólo el propietario del archivo (o el root) puede cambiar estos permisos ya que sino todo el mecanismo no tendría ningún sentido. Podemos utilizar este comando de muchas formas diferentes, pero las dos más frecuentes son las siguientes:
La primera forma de utilizarlo es del estilo “chmod XXX nombreArchivo”. Las “X” deben ser tres números
entre 0 y 7. El primer número indica los permisos que queremos establecer para el usario, el segundo para el grupo
y el tercer para todos los otros. Para interpretar correctamente los permisos que daremos utilizando los números del
0 al 7 debemos utilizar la representación binaria del número en cuestión, de forma que el primer dígito indicará el
permiso de escritura, el segundo el de lectura y el tercero el de ejecución. En cada caso un 0, indica que no se dá el
permiso en cuestión y el 1 que sí. En la siguiente tabla podemos ver esta relación:
2.3. EL SISTEMA DE FICHEROS
representación decimal
0
1
2
3
4
5
6
7
13
representación binaria
000
001
010
011
100
101
110
111
significado
----x
-w-wx
r-r-x
rwrwx
La otra forma de utilizar el comando es indicando de forma explícita qué permiso queremos dar o eliminar del fichero. La forma de hacerlo es indicando, primero, si nos referimos a los permisos del usuario, grupo o a todos los otros
con las letras “u”,“g” u “o” respectivamente. Seguidamente debemos añadir un “+” o “-” según si queremos añadir
o eliminar el atributo, que indicaremos con “r”, “w”, “x” o “s” (éste último para el SetUserId). Además, podemos
hacer todas las combinaciones posibles, refiriéndonos a más de un permiso y/o usuarios. Por ejemplo, “chmod
go+r gpl.txt"daría el permiso de lectura al grupo y a todos los otros usuarios para el fichero gpl.txt.
Para cambiar el propietario de un fichero existe el comando chown, que sólo puede utilizar el root por razones de
seguridad (si dejásemos que los usuarios pudieran cambiar el propietario de sus ficheros, comprometeríamos la seguridad
del sistema). Para cambiar el grupo de un determinado archivo se puede utilizar el comando chgrp. Como podemos
suponer, cuando un usuario crea un nuevo archivo, el sistema pone como propietario el usuario que lo ha creado y perteneciente al grupo primario del mismo usuario. Los permisos que se ponen por defecto al crear un nuevo archivo los
podemos configurar con el comando umask, que le debemos pasar la misma notación de tres números decimales entre 0
y 7 que veíamos anteriormente pero complementados. Por ejemplo, si queremos que nuestros ficheros se inicialicen con
los permisos “rw-r--r--” deberíamos escribir “umask 133”.
2.3.6. Manipulación, patrones y búsquedas
Ahora que ya sabemos movernos correctamente por la jerarquía de directorios también necesitamos saber cómo copiar, eliminar y manipular correctamente otros aspectos de los ficheros. El comando rm es el que se encarga de eliminar
los archivos que le indiquemos. Para eliminar un directorio podemos utilizar el comando rmdir, aunque sólo lo borrará cuando éste esté vacío (si quisiéramos borrar completamente un directorio y todo su contenido podríamos utilizar
“rm -r”). Para copiar archivos de un lugar a otro tenemos el comando cp, con el cual siempre debemos indicarle el
fichero o directorio origen y el lugar o nombre de destino, aunque sea en el directorio actual. De esta forma, si queremos copiar el archivo /home/user1/gpl.txt en el directorio actual (y con el mismo nombre) deberíamos escribir
“cp /home/user1/gpl.txt .”. Si en lugar de copiar los archivos queremos moverlos de sitio podemos utilizar el
comando mv.
Un mecanismo muy útil que nos proporciona el sistema son los patterns (patrones), la sintaxi de los cuales puede
llegar a ser muy compleja pero útil -permitiéndonos referenciar cualquier conjunto de archivos que queramos-. Hasta ahora
hemos visto como aplicar ciertas operaciones sobre un determinado archivo. Cuando estamos manipulando un sistema en
muchos casos nos interesará aplicar alguna de las operaciones que hemos visto pero sobre un grupo grande de ficheros.
Los patrones nos permitirán aplicar las operaciones que queramos especificando, en una sola instrucción, varios ficheros
que cumplan con una serie de características especificadas. Debemos verlos como plantillas de nombres, de forma que el
caracter “∗” significa cualquier cadena de caracteres posibles y el “?” nos sirve como comodín a cualquier caracter. De
esta forma, si queremos listar todos los archivos que empiecen por “s”, que después tengan cualquier otro caracter, les siga
una “a” y después cualquier otra cadena podríamos utilizar “ls s?a*”. Entre “[]” podemos incluir otros caracteres,
indicando que el patrón tiene éxito si se encuentra alguno de ellos en el nombre. Por ejemplo, si quisiéramos referenciar
todos los archivos que empezaran por “a” o por “b” y que continuaran con cualquier otra cadena, podríamos escribir el
pattern “[ab]*”. Si después de “[” pusiéramos el caracter “!” (“[!ab]*”) indicaríamos que el pattern coincidiría con
cualquier archivo que no empezara por “a” o “b”. Finalmente, para facilitar ciertas búsquedas, dentro de “[]” podemos
especificar clases de caracteres de la siguiente manera: “[:clase:]”, dónde la “clase” puede ser cualquiera de las
nombradas en la siguiente tabla:
clase significado
clase significado
alnum [A-Za-z0-9] alpha [A-Za-z]
blank [ \]
cntrl cars de control
digit
[0-9A-Fa-f]
graph cars imprimibles (sin espacios)
lower [a-z]
print cars imprimibles (con espacios)
punct [.,¡!¿?:;] . . .
space [ ]
upper [A-Z]
xdigit [0-9A-Fa-f]
A-Z indica caracteres de la A a la Z, \t es el tabulador
y \n es un salto de línea.
14
CAPÍTULO 2. CONCEPTOS Y COMANDOS BÁSICOS
Naturalmente, los patterns los podemos utilizar con cualquiera de los comandos que hemos visto y la mayoría de los
que veremos a continuación. Además, la mayor parte de los comandos de listado, eliminación, copia, etc. de ficheros
también permiten pasarles un parámetro (generalmente “-r”) para realizar las acciones respectivas de forma recursiva.
De esta forma se irá entrando y ejecutando la instrucción correspondiente en todos los archivos y directorios a partir del
que estemos hasta llegar al último nivel de la jerarquía.
Otro tipo de operación muy útil es la búsqueda de ficheros. Tenemos varios comandos que nos permiten realizar
búsquedas de diferentes tipos sobre todos los ficheros del sistema. find es el comando más versátil para realizar esta
acción. Nos permite filtrar los ficheros para encontrar desde los que tienen un determinado nombre, los modificados o
creados a partir de una cierta fecha, los que tienen ciertos permisos, etc. Su única desventaja es que no utiliza ningún
tipo de mecanismo para acelerar la búsqueda, con lo cual éstas pueden tardar bastante. locate es otro comando pero, a
diferencia del anterior, utiliza una base de datos interna que se actualiza periódicamente y nos permite hacer búsquedas
bastante más rápidas (para actualizar su base de datos interna podemos utilizar updatedb). Debemos tener en cuenta,
pero, que los resultados no siempre estarán actualizados, además que no podemos realizar búsquedas tan versátiles como
con find. Para acabar con los comandos de búsqueda, whereis está orientado a la búsqueda de los archivos binarios
(los ejecutables), de ayuda o los de código fuente de un determinado programa.
2.3.7. Tipos y contenido de ficheros
Los archivos que tenemos en nuestro sistema pueden ser de muchos tipos diferentes: ejecutables, de texto, de datos,
etc. A diferencia de otros sistemas, que utilizan la extensión del archivo para determinar de qué tipo son, GNU/Linux
utiliza un sistema denominado de magic numbers, determinando con un número mágico el tipo de fichero según sus
datos (se pasan una serie de tests que intentan determinar de qué tipo es el fichero). El comando file nos lo indica. Este
sistema es más seguro que utilizar la extensión, ya que cualquiera puede cambiarla y generar confusiones y errores en el
sistema.
Si necesitamos ver el contenido de un fichero, uno de los comandos más básicos es el cat. Pasándole el nombre/s del
archivo/s que queramos ver, sencillamente se muestra por pantalla. Debemos vigilar en no mostrar ficheros ejecutables o de
datos por pantalla ya que el volcado de caracteres no imprimibles nos dejaría la cónsola con caracteres no comprensibles
(siempre la podemos reinicializar tecleando reset o tset). Para ficheros muy extensos nos irán mucho mejor los
comandos less o more, que permiten desplazarnos por el fichero de forma progresiva. Si el tipo de fichero es binario y
queremos ver qué contiene podemos utilizar los comandos hexdump u od para ver el contenido de forma hexadecimal
u otras representaciones. strings nos buscará las cadenas de caracteres dentro de un fichero binario y las mostrará por
pantalla.
Otro tipo de comando muy útil son los que nos buscan un cierto patrón en el contenido de los ficheros. Con el
comando grep le podemos pasar como segundo parámetro el nombre del archivo y como primero el pattern que queramos
buscar (con la sintaxi que veíamos anteriormente, extendida con otras opciones). Además, el comando nos permite otras
múltiples acciones, como contar el número de líneas dónde aparece el patrón (parámetro “-c”), . . . Con cut podemos
separar en campos el contenido de cada línia del fichero especificando qué caracter es el separador, muy útil en tareas
de administración del sistema para su automatización. También podemos coger un determinado número de líneas del
principio o fin de un archivo con los comandos head y tail respectivamente. Con wc podemos contar el número de
líneas o palabras, la máxima longitud de línea de un fichero, etc.
Finalmente, para acabar con esta sección de manipulación de ficheros lo único que nos falta por ver es cómo comparar
diferentes archivos. Igual que con las otras operaciones, tenemos varios comandos que nos permiten hacerlo. diff, cmp
i comm realizan comparaciones de diferentes formas y métodos en los ficheros que les indiquemos. sdiff, además,
permite mezclarlos de la forma que deseemos.
2.4. Los procesos
El hecho que el sistema operativo sea multitarea implica que podemos lanzar más de una programa a la vez. Un proceso
no es más que un programa o aplicación cargado en memoria y ejecutándose. Aunque nuestro ordenador solo disponga
de una CPU, el sistema operativo se encarga de repartir el tiempo de procesamiento de la misma para que varios procesos
puedan ir realizando sus operaciones, dando la sensación que se están ejecutando todos a la vez. La gestión de procesos
es un aspecto vital en todo sistema operativo, ya que nos determina el tiempo de respuesta de nuestras aplicaciones, la
eficiencia con que se utiliza la memoria y la CPU, etc. Con los comandos de manipulación de procesos podremos realizar
cualquier acción que nos interese: desde pausar los procesos de un usuario concreto, eliminar aquéllos que no nos interesan
o hacer que algunos ocupen más tiempo la CPU para que vayan más rápido.
Para identificar de forma inequívoca cada proceso, el núcleo del sistema les asigna un número llamado PID (Process
IDentification). Aunque podríamos pensar que con solo el nombre ya los podríamos referenciar, es imprescindible tener
este número porque podemos ejecutar un mismo programa tantas veces como queramos, teniendo diferentes instancias
del mismo ejecutándose. Para saber qué procesos se están ejecutando podemos utilizar el comando ps. Para explorar un
2.4. LOS PROCESOS
15
poco más todo este mecanismo de procesos, explicaremos con un poco más de detalle algunos de los parámetros que le
podemos pasar a este comando:
“T”: esta opción viene por defecto y nos indica que sólo se mostrarán los procesos que se están ejecutando en el
terminal dónde estemos o que se hayan lanzando a partir de él.
“-a”: nos muestra los procesos de todos los terminales del sistema.
“-A”: nos muestra todos los procesos del sistema. Si ejecutamos el comando veremos que, aparte de los programas
que los usuarios ejecutan, hay muchísimos otros. Muchos de ellos ejecutan las funciones necesarias para que el
operativo funcione correctamente, otros son los servidores de aplicaciones configurados, etc.
“-l”: enseña información extendida para cada proceso, como el tiempo de CPU que ha utilizado, el terminal
dónde se ejecuta, etc. En la segunda columna también podemos ver el estado del proceso. Aunque el sistema tenga
muchos procesos ejecutándose en un mismo instante de tiempo, esto no implica que todos necesiten tiempo de CPU
constantemente. Por ejemplo, cuando un servidor de páginas web no tiene ninguna petición, no es necesario que
haga absolutamente ninguna operación. Aunque esté en memoria, preparado para ejecutarse al recibir una petición,
es mejor que no pase en ningún momento por la CPU ya que, mientras, ésta puede utilizarse para otros procesos que
sí la necesiten. Internamente, el sistema operativo tiene implementados una serie de mecanismos muy eficaces para
gestionar toda esta clase de operaciones. De esta forma, un proceso puede estar en los siguientes estados (mostrados
con el caracter correspondiente):
• “D”: proceso ininterrumpible. Este tipo de proceso generalmente suele pertencer a la entrada/salida de algún
dispositivo que se dañaría si dejara de ser atendido.
• “R”: proceso que en el momento de ejecutar el comando también se está ejecutando, o sea, todos aquéllos que
están en cola de ejecución. La cola de ejecución de procesos es dónde se ponen todos aquéllos que se van
repartiendo el tiempo de la CPU.
• “S”: proceso dormido o esperando que ocurra algún tipo de evento para que el sistema lo despierte y lo ponga
en la cola de ejecución.
• “T”: proceso que ha sido detenido por el usuario o el sistema.
• “Z”: proceso zombie. Este estado indica que el proceso ha tenido algún fallo y no funciona correctamente.
Generalmente es mejor eliminar este tipo de procesos.
Otro comando muy útil es el top, que nos informa de forma interactiva de los procesos del sistema, del estado
de utilización de la CPU, la memoria utilizada y libre, la RAM que utiliza cada proceso, etc. Este programa es muy
indicado cuando el sistema no responde adecuadamente o notamos alguna disfunción extraña, ya que nos permite localizar
rápidamente qué proceso está afectando negativamente al rendimiento del sistema.
Como vemos, el sistema nos informa sobre todos los aspectos posibles de los procesos del sistema. Además de esto,
podemos enviar ciertas señales a los procesos para informarles de algún evento, podemos sacarlos de la cola de ejecución,
eliminarlos, darles más prioridad, etc. Saber manipular correctamente todos estos aspectos también es muy importante
ya que nos permitirá utilizar nuestro ordenador de forma más eficiente. Por ejemplo, si somos administradores de un
centro de cálculo dónde la mayoría de aplicaciones que se ejecutan necesitan de mucho tiempo de CPU, podríamos
configurar el sistema para hacer que los más urgentes se ejecuten con más prioridad que otros para que acaben primero.
El comando kill nos permite enviar señales a los procesos que nos interese. En general, todos los programas se diseñan
para que puedan recibir este tipo de señales. De esta forma, según el tipo de señal recibido saben que deben realizar ciertas
operaciones u otras. Hay muchos tipos diferentes de señales, que podemos ver en el manual de kill, aunque las más
utilizadas son las que nos sirven para obligar a un proceso que termine o pause su ejecución. Con la señal TERM (“kill
-15 PID”), le indicamos al proceso que queremos que termine, de forma que al recibir la señal deberá guardar todo lo
necesario y acabar su ejecución. Si hay algún tipo de problema o el programa no está preparado para recibir este tipo de
señal podemos utilizar KILL (“kill -9 PID”), que automáticamente lo expulsa de la cola de ejecución. killall
sirve para referirnos al nombre de varios procesos a la vez en lugar de referenciarlos por su PID y, de esta forma, enviarles
una señal a todos a la vez. Con el comando skill también podemos enviar señales a los procesos pero con una sintaxi
diferente. Por ejemplo, si queremos detener todas las ejecuciones de un determinado usuario podríamos utilizar “skill
-STOP -u nombreLogin”, con lo cual todos los procesos de dicho usuario se pararían. Para reiniciarlos de nuevo
podríamos pasar el señal de CONT. Cuando estamos ejecutando algún programa en una consola y queremos pasarle
la señal de TERM podemos utilizar la combinación de teclas CTRL+C. Con CTRL+Z podemos pausar un programa y
revivirlo con fg.
Otra forma de ver los procesos es por su jerarquía. Igual que en el sistema de ficheros, los procesos siguen una cierta
jerarquía de padres a hijos. Todo proceso debe ser lanzado a partir de otro, sea el propio intérprete de comandos, el entorno
gráfico,. . . de forma que se crea una relación de padres a hijos. Con el comando pstree podemos ver esta jerarquía de
forma gráfica. Si lo ejecutamos veremos como el padre de todos los procesos es uno llamado init. A partir de él parten
16
CAPÍTULO 2. CONCEPTOS Y COMANDOS BÁSICOS
todos los demás que, a la vez, pueden tener más hijos. Esta estructura jerárquica es muy útil ya que, por ejemplo, matando
a un proceso padre que contiene muchos otros hijos, también matamos a todos sus hijos. También nos puede servir para
identificar de donde parten ciertos procesos, etc. Si no le pasamos ningún parámetro al comando, por defecto compacta
todos los procesos con un mismo nombre para no mostrar una estructura demasiado grande, aunque ésto también es
configurable a partir de sus parámetros.
Todos los procesos del sistema tienen una cierta prioridad. Como decíamos antes, esta prioridad indica el tiempo de
CPU que se le dejará al proceso. Como más prioritario sea el proceso, más tiempo de ejecución tendrá respecto a los otros.
El rango de prioridades va desde el -20 al 19, de mayor a menor. Para lanzar un proceso con una determinada prioridad
podemos utilizar el comando nice. Si queremos dar una prioridad diferente a un proceso que ya esté en ejecución
podemos utilizar renice. Sólo el root puede utilizar el rango de prioridades negativas; así el sistema se asegura que el
root siempre tenga la posibilidad de ejecutar procesos más rápidamente que los usuarios. Por defecto, la prioridad con
que se ejecutan los programas es la 0. Un aspecto a tener en cuenta es que con todo este mecanismo de prioridades, no
podemos medir el tiempo de ejecución real de un proceso porque la CPU se reparte por todos los que tengamos en la cola
de ejecución. En centros de cálculo dónde se factura según el tiempo de utilización de las máquinas es muy importante
poder medir adecuadamente este asepecto. Por este motivo, el sistema nos proporciona el comando time, que pasándole
el programa que queramos medir nos devolverá el tiempo real de CPU que ha utilizado.
2.5. Otros comandos útiles
2.5.1. La ayuda del sistema
Tal y como hemos dicho a lo largo del documento, todos los comandos tienen multitud de opciones y parámetros
diferentes que nos permiten manipularlos de la forma como queramos. Desde el principio se tuvo muy en cuenta que
es imprescindible contar con una buena documentación para todos ellos. Igualmente, toda esta información también es
necesaria para los ficheros de configuración del sistema, las nuevas aplicaciones que utilizamos, etc. Es por ésto que
el mismo sistema incorpora un mecanismo de manuales con el cual podemos consultar casi todos los aspectos de los
programas, utilidades, comandos y configuraciones existentes. El comando más utilizado es el man, que nos enseña el
manual del programa que le indiquemos como parámetro. Por defecto esta documentación es mostrada utilizando el
programa less, con el cual podemos desplazaranos hacia adelante i atrás con las teclas de AVPÁG y REPÁG, buscar
una palabara con el caracter “/” seguido de la palabra (“n” nos sirve para buscar las siguientes ocurrencias y “N” para las
anteriores), “q” para salir, etc. Los manuales del sistema están dividos en diferentes secciones según la naturaleza de los
mismos:
1. Programas ejecutables (aplicaciones, comandos, etc.).
2. Llamadas al sistema proporcionadas por el shell.
3. Llamadas a librerías del sistema.
4. Archivos especiales (generalmente los de dispositivo).
5. Formato de los archivos de configuración.
6. Juegos.
7. Paquetes de macro.
8. Comandos de administración del sistema (generalmente aquéllas que solo el root puede utilizar)
9. Rutinas del núcleo.
Si hay más de un manual disponible para una misma palabra, podemos especificarlo pasándole el número correspondiente de la sección deseada antes de la palabra, por ejemplo “man 3 printf”. Como los otros comandos, man
también tiene multitud de opciones diferentes documentadas en su propio manual (“man man”) a partir de las cuales
podemos hacer búsquedas automáticas, crear un fichero del manual en formato imprimible, etc. Una de estas opciones
que nos puede ir muy bien en las ocasiones que no sepamos exactamente el programa que estamos buscando es “-k” (el
comando apropos hace casi exactamente lo mismo). Con “man -k” seguido de una palabra que haga referencia a la
acción que queramos realizar se buscará por entre todos los manuales del sistema y se mostrarán los que en su descripción
o nombre aparezca la palabra indicada. De esta forma, podemos encontrar todo los queramos sin tener que recurrir a
ningún libro o referencia externa al sistema.
Para que la aplicación man realice sus búsquedas de forma rápida utiliza una base de datos interna que va a buscar
por los archivos que contienen los manuales y los indexa de forma adecuada. Si queremos actualizar este manual (aunque
normalmente el mismo sistema ya lo hace automáticamente) podemos utilizar el comando mandb.
2.5. OTROS COMANDOS ÚTILES
17
Si el manual no nos proporciona toda la información que necesitemos también podemos usar el comando info, que
es lo mismo que el manual pero aún más extendido. Si lo único que queremos es tener una breve referencia de lo que hace
un determinado programa/librería/. . . podemos utilizar el comando whatis.
2.5.2. Empaquetado y compresión
Comprimir un archivo, agrupar varios en uno de solo o ver qué contiene un archivo comprimido son tareas que utilizaremos frecuentemente para hacer copias de seguridad, transportar archivos de un sitio a otro, etc. Aunque existen multitud
de programas diferentes que nos permiten hacer esta clase de operaciones, generalmente en todos los sistemas GNU/Linux
encontraremos la herramienta tar. Este programa nos permite manipular de cualquier forma uno o varios archivos para
comprimirlos, agruparlos, etc. Aunque sus múltiples opciones son inacabables y tiene muchísima flexibilidad, aquí tan
solo explicaremos algunas de las más básicas para hacernos una idea de lo que podemos hacer con él. La sintaxi que
utiliza es la siguiente: “tar opciones archivoDestino archivosOrigen”, dónde el archivo de destino será
el nuevo fichero que queremos crear y los de origen serán los que se agruparán o comprimirán. Es importante tener en
cuenta que si queremos agrupar toda una carpeta, por defecto el proceso es recursivo, de forma que al empaquetarla ésta
se recorrerá en todos sus niveles y se agrupará todo lo que contenga. Para crear un nuevo archivo debemos pasarle el
parámetro “c”, y si lo queremos guardar en un archivo, “f”. De esta forma, “tar cf final.tar o*” empaquetará
todos los archivos del directorio actual que empiecen por “o”. Si además quisiéramos comprimirlos podríamos utilizar
“czf” con lo que se utilizaría el programa gzip después de empaquetarlos. Para desempaquetar un determinado archivo el parámetro necesario es el “x”, de forma que deberíamos escribir “tar xf” indicando el fichero empaquetado. Si
estuviera comprimido deberíamos pasar “xzf”.
Aunque con el mismo tar podemos comprimir archivos, la aplicación en sí misma no es de compresión. Como hemos
dicho, para ello utiliza programas externos como el gzip. El gzip utiliza un formato de compresión propio y diferente
del tan popularizado zip, que también podemos utilizar instalando la aplicación correspondiente. Otra aplicación de
compresión bastante utilizada y que proporciona muy buenos resultados es el bzip2. En la siguiente tabla podemos ver
la extensión que se suele utilizar para identificar qué formato utiliza un archivo comprimido o empaquetado:
extensión
“.tar”
“.gz”
“.tgz”
“.bz2”
“.zip”
“.Z”
formato
tar
gzip
tar + gzip
bzip2
zip
compress
2.5.3. Operaciones de disco
La gestión y manipulación de los discos duros del ordenador es otro aspecto fundamental en las tareas de administración del sistema. Aunque más adelante ya veremos como configurar adecuadamente los discos que tengamos instalados
en el ordenador, en esta sección explicaremos cuáles son los comandos necesarios para ver información relativa a los mismos. Todo disco duro está dividido en particiones, a las cuales podemos acceder como si de un dispositivo independiente
se tratase, al cual le llamaremos unidad. Ésto es muy útil porque nos permite separar de forma adecuada la información
que tengamos en el sistema, para tener más de un sistema operativo instalado en el mismo disco, etc. El comando df nos
muestra, de cada unidad montada en el sistema, el espacio utilizado y el libre. Vamos a interpretar la siguiente salida de
df:
Filesystem
/dev/hda1
/dev/hdb1
/dev/hdc
1k-blocks
7787712
19541504
664432
Used Available Use%
421288
6970828
6%
5742384 13799120 29%
664432
0 100%
Mounted on
/
/info
/cdrom
Como podemos ver, por cada partición o dispositivo montado en el sistema, el comando nos muestra la cantidad de
bloques disponibles y utilizados. El bloque de disco es una unidad que se utiliza internamente en los dispositivos de
almacenaje para que el manejo de los mismos sea más efectivo. Por defecto, este comando nos enseña la información por
bloques de 1k, aunque pasándole el parámetro “-h” (human readable) lo podríamos ver de forma más amena. La primera
línea siempre nos muestra la raíz del sistema de ficheros (el root filesystem) y después todos los otros dispositivos.
Fijémonos como también nos muestra su punto de anclaje (en la última columna), que es la carpeta donde deberíamos ir
para poder ver su contenido.
Otro comando muy útil es du, que nos muestra realmente lo que nos ocupa un fichero a disco. Para entender claramente qué queremos decir con esto debemos profundizar un poco más en la organización interna de los discos y en cómo
18
CAPÍTULO 2. CONCEPTOS Y COMANDOS BÁSICOS
el sistema operativo los manipula. Tal y como decíamos anteriormente, por razones de eficiencia, el sistema operativo
divide el espacio del disco en pequeños trozos, llamados bloques. El tamaño del bloque es configurable y generalmente
depende del tamaño del disco, aunque también lo podemos configurar para adaptarlo más a nuestras necesidades. Cada
vez que queremos añadir un nuevo archivo, el sistema operativo le asigna un bloque. De esta forma, al leer u operar sobre
él, el operativo puede leer directamente todo un bloque (del tamaño configurado) en un solo paso. Cuando el fichero ocupa
más de un bloque, se le asignan más, intentando que queden lo máximo de juntos posible porque se puedan leer consecutivamente e incrementando, así, la velocidad de lectura. El único inconveniente de este sistema es el desaprovechamiento
que se hace de los bloques cuando los ficheros son muy pequeños, ya que si un determinado archivo no ocupa todo el
bloque, el espacio restante no se puede aprovechar para ningún otro. De todas maneras, esta forma de organización es la
que utilizan todos los sistemas de ficheros existentes ya que es lo más rentable para aprovechar el disco duro. El comando
du, pues, nos muestra el número de bloques que realmente utiliza un determinado archivo en el disco. El tamaño del
bloque y otros muchos parámetros se pueden configurar al formatear una partición del disco duro (con el sistema ext2
o ext3). Estos parámetros se pueden ajustar para hacer que el sistema se adapte más a nuestras necesidades y conseguir
mayor eficiencia.
Un problema que aparece en algunos sistemas de ficheros es la fragmentación de ficheros, que significa que un mismo
archivo está situado en bloques alejados del disco. Esto supone tener que desfragmentar el disco de forma periódica, que
no es más que la reorganización de los bloques de los ficheros para que queden en lugares consecutivos y su acceso sea
más rápido. En los sistemas de ficheros que utilizamos con GNU/Linux no hace falta desfragmemtar los discos (aunque
hay programas para hacerlo) porque el sistema ya se encarga automáticamente de su buena organización.
Para saber los parámetros que tenemos configurados en nuestras unidades de disco formateadas con ext2 o ext3,
podemos utilizar el comando dumpe2fs, pasándole la partición concreta. Veremos como hay multitud de opciones
diferentes que nos permiten ajustar muy bien el comportamiento del mismo (en el manual encontraremos qué signifca
cada opción). De todas formas, una vez hayamos formateado una partición, ya no le podremos modificar casi ninguna de
estas opciones. Si quisiéramos cambiarlas, deberíamos copiar toda la información de la partición, formatear de nuevo y
volver a copiar los archivos originales.
Las funciones del núcleo que se encargan de la gestión de ficheros utilizan una serie de métodos para agilizar los
procesos de lectura y escritura de los mismos. Uno de ellos es la utilización de una cache de disco, de forma que no se
haya de estar constantemente leyendo y escribiendo en el dispositivo físico, proceso lento y costoso. Lo único que hace
el mecanismo de cache es mantener una copia del fichero con el que se está trabajando en la memoria RAM (mucho
más rápida), de forma que para el usuario el proceso sea transparente (la copia a disco se realiza según algún tipo de
política implementada en el núcleo). El único problema de esta gestión es que si tenemos un corte en la alimentación
y no hemos cerrado correctamente el sistema es posible que algunos ficheros no se hayan podido guardar en el disco
físico y tengamos alguna inconsistencia en el sistema de ficheros. El programa fsck comprueba y arregla un sistema de
ficheros que haya quedado en este estado. Aunque lo podemos ejecutar cuando queramos, generalmente el mismo sistema
operativo lo ejecuta cuando en el proceso de arranque detecta que el sistema no se cerró adecuadamente (antes de apagar
el ordenador debemos ejecutar el comando shutdown, que se encarga de lanzar todos los procesos necesarios para que
los programas acaben, se desmonte el sistema de ficheros, etc). En este sentido, el sistema de ficheros ext3 es más eficaz
que su predecesor ya que el journaling le permite recuperar más información de los ficheros perdidos y de forma más
rápida.
Naturalmente, si los ficheros que tratamos en nuestro sistema son muy críticos y no podemos, en ningún caso, permitirnos el hecho de perderlos, también podemos configurar el operativo para que no utilice el sistema de cache de disco. De
todas formas, es muy recomendable utilizar este mecanismo porque incrementa mucho el rendimiento del sistema. Si en
algún momento nos interesa sincronizar la informació de la cache de disco con el disco físico podemos utilizar el comando
sync. Finalmente, también podemos comprobar la integridad física de una partición utilizando el comando badblocks,
que lleva a cabo un chequeo sobre el dispositivo indicado para comprobar que no haya ninguna zona dañada.
La mayoría de los comandos expuestos en esta sección necesitan de permisos especiales para ejecutarse, de forma que
sólo el root podrá utilizarlos.
2.6. Operaciones con comandos
2.6.1. Redirecciones
Una vez aprendido como utilizar algunos de los comandos del sistema, es muy probable que en algunos casos nos
interese utilizarlos de forma simultánea para agilizar más las acciones que queramos realizar. Una operación muy interesante es poder coger la salida de un comando para que sirva de entrada a otro y procesarla adecuadamente. El sistema
operativo utiliza un mecanismo de pipes (tuberías) que nos permite redirigir las salidas de cualquier comando o programa hacia dónde queramos. Su funcionamiento es muy simple: se trata de poner el caracter “|” entre los comandos de
forma que la salida del primero sirve como entrada para el segundo. Vamos a verlo con un ejemplo: al escribir el comando “echo campo1:campo2:campo3:campo4” lo único que conseguiríamos sería que por pantalla nos apareciera
2.6. OPERACIONES CON COMANDOS
19
“campo1:campo2:campo3:campo4”. Si de esta salida sólo quisiéramos coger el “campo3” podríamos redirigirla
con un pipe hacia el comando cut para que sólo seleccionara el campo que nos interesara de la siguiente forma: “echo
campo1:campo2:campo3:campo4 | cut -d: -f 3”. En la figura 2.3 podemos ver este ejemplo de forma gráfica.
echo campo1:campo2:campp3:campo4
campo1:campo2:campo3:campo4
PIPE
cut −d: −f 3
campo3
Figura 2.3: Ejemplo de uso de tuberías.
Naturalmente, podemos conectar tantos pipes como necesitemos para realizar acciones más prácticas que la que acabamos de ver. Otro tipo de redireccionamientos muy prácticos son aquellos relacionados con los ficheros. Este tipo de
redirección nos permite coger toda la salida de un comando o programa y guardarla en un fichero utilizando el caracter
“>” de igual forma que hacíamos con “|”. Por ejemplo, si queremos guardar en un nuevo fichero todo lo que vayamos
escribiendo hasta apretar CTRL+C podríamos utilizar lo siguiente: “cat > prueba.txt”. Con “>>” podemos hacer
exactamente lo mismo pero en lugar de crear siempre el nuevo fichero si éste ya existiera se añadiría la información al
final del mismo. Con “<” la redirección es en el sentido contrario, de forma que el contenido del fichero que le indiquemos
se dirigirá hacia el comando o programa indicado.
Un aspecto muy interesante que debemos conocer es que en sistemas tipo UNIX se separa la salida normal de un
programa con la de los errores. Aunque por defecto las dos salidas están dirigidas a la consola donde se ha ejecutado
el programa, podemos manipularlas para que se dirijan hacia donde queramos. Un ejemplo para ver esto es si probamos
de borrar un fichero que no existe con la siguiente instrucción: “rm fichero > resultados”. Aunque estamos
redireccionando la salida del comando hacia el fichero de resultados, por pantalla nos aparecería un mensaje de error
indicando que no se ha encontrado el fichero. Esto es debido a que por defecto las redirecciones sólo aceptan la salida
estándar del programa y no la de error, que por defecto también se muestra por pantalla. Para redirigir la salida de error
deberíamos indicar, antes del caracter “>” el número “2”, que es la salida de error (la “1” es la normal). De esta forma,
ejecutando “rm fichero 2 > resultados” sí conseguiríamos que la salida se redirigiera al archivo de resultados.
También podemos guardar la salida normal y la de errores en dos ficheros diferentes: “rm fichero 1> resultados
2> errores”. Si por el contrario quisiéramos que todas las salidas se dirigieran hacia un mismo archivo podríamos
utilizar “>&”. Además, con el caracter “&” podemos encaminar salidas de un tipo hacia otras; por ejemplo, si quisiéramos
encaminar la salida de errores hacia la normal podríamos indicarlo de la siguiente forma: “2>&1”.
Es importante tener en cuenta que el orden de las redirecciones es significativo: siempre se ejecutan de izquierda a
derecha.
2.6.2. Comandos específicos del bash
Aunque algunos de los comandos que hemos visto ya son específicos del bash, este intérprete de comandos tiene
otros que nos pueden servir para realizar otras muchas operaciones interesantes. Un mecanismo muy útil es el de ejecutar
procesos en lo que se llama modo background. Este modo sencillamente indica que el proceso se está ejecutando pero
que el shell nos devuelve la línea de comandos para poder seguir ejecutando otros programas. Para indicarle ésto al
bash debemos escribir el caracter “&” después del comando o programa a ejecutar. Una vez lanzado el proceso en modo
background se muestra una línea dónde se nos indica el número de trabajo y PID del proceso lanzado.
Con el comando jobs podemos ver qué procesos están lanzados en modo background (pasándole el parámetro “-l”
también podremos ver su PID). Si quisiéramos pasar uno de estos procesos a modo foreground (como si lo hubiéramos
lanzado desde la línea de comandos sin el caracter “&”), podemos utilizar el comando fg indicando el PID del proceso.
También existe bg, que nos envía un determinado proceso a modo background. Este último es útil cuando, por ejemplo,
ejecutamos un programa en mode foreground y lo pausamos con CTRL+Z. Si después ejecutamos bg indicándole su PID,
el proceso continuará su ejecución en modo background. Tal y como veíamos en secciones anteriores, los procesos también
tienen un jerarquía de padres a hijos. Cuando ejecutamos algún programa en modo background no estamos interfiriendo
en esta jerarquía, de forma que si salieramos de la sesión, todos éstos procesos se acabarían porque el padre (el intérprete
de comandos desde donde los hemos lanzado) ya no estaría en ejecución. Si queremos desvincular un proceso de su padre
podemos utilizar disown.
CAPÍTULO 2. CONCEPTOS Y COMANDOS BÁSICOS
20
Otro mecanismo muy útil del bash es la historia de comandos. Es normal que utilzando el sistema hayamos de repetir
muchas instrucciones ya escritas anteriormente. Con la teclas de cursor arriba y abajo podemos ir viendo todos los comandos que hemos ido utilizando y repetir alguno apretando RETURN. También podemos utilizar history, con el cual se
mostrarán por pantalla todos los comandos ejecutados, enumerados según su aparición. Escribiendo “!NUM” se ejecutará
el que corresponda con ésta historia. También podemos escribir “!” seguido de las letras iniciales de algún programa
ejecutado anteriormente y se buscará el más reciente para ejecutarlo.
El bash también dispone de teclas de acceso rápido que nos permiten ejecutar ciertas acciones sin tan siquiera escribirlas. Algunas de las más frecuentes son:
TAB: al escribir el nombre de un fichero, directorio o comando no hace falta hacerlo completamente. Si escribimos
los primeros caracteres y después apretamos la tecla de tabulador nos acabará de escribir el resto. Si hubiera más de
una coincidencia nos mostraría las diferentes posibilidades.
CTRL+L: limpia la pantalla (igual que el comando clear).
SHIFT+REPÁG: enseña media pantalla anterior.
SHIFT+AVPÁG: enseña media pantalla posterior.
CTRL+W: elimina la última palabra escrita.
CTRL+T: intercambia el orden de los últimos caracteres.
CTRL+U: borra todos los caracteres anteriores al cursor.
CTRL+D: sale del intérprete de comandos (equivalente a hacer un logout).
ulimit es un comando que nos permite configurar algunos de los aspectos internos relacionados con el bash. Por
ejemplo, permite indicar la cantidad de memoria que puede utilizar el intérprete de comandos, el número máximo de
archivos que se pueden abrir, etc. Este comando puede servirnos para restringir un poco las acciones que pueden hacer los
usuarios de nuestro sistema (en caso de administrar servidores con muchos usuarios).
2.6.3. Shell scripts con bash
Los shell scripts son ficheros donde escribimos una serie de comandos (cualquiera de los que hemos visto en este
capítulo) para que sean ejecutados (también existe el comando fc que nos permite, igual que los shell scripts, escribir una
serie de comandos para que se ejecuten pero sin tener que guardar el archivo). Aunque su sintaxi puede llegar a ser muy
compleja y tendríamos que entrar en aspectos de programación para entenderla claramente, en esta sección explicaremos
de forma resumida algunas de las características esenciales de ellos para que podamos entenderlos y utilizarlos mínimamente (si queremos profundizar más en ellos podemos recorrer al manual del bash). La primera línea del shell script debe
especificar el intérprete de comandos que se utiliza:
#!/bin/bash
Después de esta línea ya podemos empezar a escribir los comandos que queramos que se ejecuten, uno en cada línea.
Como en todo lenguaje de programación, podemos utilizar variables, estructuras condicionales y bucles. Para declarar una
variable utilizaremos la siguiente sintaxi:
nombreVariable=contenido
Si el contenido es una cadena de caracteres, debemos ponerlo entre comillas, si es un número no hace falta poner
nada y si queremos guardar en la variable la salida de un comando deberíamos ponerlo entre caracteres ‘. Para referirnos
al contenido de la variable en otras instrucciones siempre debemos preceder al nombre con el caracter “$”. Para las
instrucciones condicionales podemos utilizar las siguientes estructuras:
if condición; then
instrucciones
else
instrucciones
fi
2.6. OPERACIONES CON COMANDOS
21
dónde condición puede hacer referencia a un archivo, realizar alguna operación de comparación aritmética (entre
caracteres “(( ))”), etc. De especial utilidad es el comando test, que nos permite hacer comprobaciones de archivos,
directorios, etc. y nos devuelve un boleano. De esta forma, por ejemplo, si quisiéramos realizar una acción u otra según si
existiera un determinado archivo, podríamos utilizar la siguiente estructura:
if test -f /etc/inittab; then
echo "El fichero inittab existe."
else
echo "El fichero inittab NO existe."
fi
Otra estructura condicional es la de selección:
case palabra in
caso1)
instrucciones
;;
caso2)
instrucciones
;;
*)
instrucciones
esac
En esta estructura se compara palabra con caso1, caso2,. . . hasta encontrar la que coincida, en la que se ejecutarán las instrucciones del caso. Si no se encontrara ninguna, se pasaría a la sección “*)”, que es opcional. Esta estructura
puede irnos muy bien cuando, por ejemplo, queramos que un determinado script haga unas acciones u otras según un parámetro que le pasemos. Los parámetros los podemos referenciar a partir de “$1” para el primero, “$2” para el segundo y
consecutivamente. Para los bucles podemos utilizar alguna de las siguientes estructuras (para escribir comentarios en los
shell scripts podemos utilizar el caracter “#” seguido del comentario que queramos -válido hasta final de línea-):
#BUCLE TIPO FOR
for i in lista; do
instrucciones
done
#BUCLE TIPO WHILE
while condición; do
instrucciones
done
Naturalmente, antes de poder ejecutar un shell script deberemos dar el permiso de ejecución al fichero correspondiente
(comando chmod 750 nombreFichero).
Capítulo 3
Taller de KNOPPIX
3.1. Introducción
Este taller pretende ser nuestra primera experiencia con un entorno UNIX. Por esta razón su desarrollo es guiado paso
a paso, dejando, por supuesto, la puerta abierta a los más curiosos a que investiguen por cuenta propia. Con él se pretende
mostrar de forma práctica todo lo que se ha expuesto hasta ahora de forma teórica.
Todo el taller se puede desarrollar sobre cualquier PC ya que el riesgo de dañar la información que podamos tener en
el és mínima. Se ha escogido esta distribución ya que para arrancarla no se requiere conocimientos previos del sistema
operativo, y porque una vez detenido el sistema, no deja rastro, a no ser que nosotros lo forcemos (KNOPPIX por defecto
no monta en el sistema los discos duros, así que nuestros datos están a salvo), en el ordenador donde se ha hecho correr.
Obviamente, si se dispone de un sistema operativo tipo UNIX se puede usar para hacer el seguimento del taller.
El hecho de ser una distribución arrancable (bootable) desde un CDROM y no dejar rastro en el ordenador donde se
ha ejecutado, una vez ha terminado el processo de parada, hace que, aún estando basada en Debian, el sistema de ficheros
no siga lo que marca la Debian Policy al respecto. No obstante, estas diferencias no afectarán al desarrollo del taller, y,
todo lo que aprendamos será válido para los posteriores. Además, es bueno que desde el principio nos acostumbremos
a trabajar con distintas distribuciones, y aprendamos a distinguir entre lo que es común a todos los sistemas basados en
UNIX y lo que es propio de cada distribución.
Antes de empezar sólo un consejo: adelante con nuestras propias iniciativas, intentemos responder nosotros mismos
a nuestras inquietudes, consultemos los man, hagamos pruebas, fallemos y analicemos el porqué lo hemos hecho, intentémoslo de nuevo, una y otra vez, hasta conseguir los resultados deseados; es así como se aprende UNIX, sin miedo,
sacando partido de los propios fallos.
3.2. Arranque del sistema
En primer lugar debemos aseguranos que nuestro ordenador arrancará desde el CDROM. Para esto entraremos en la
BIOS (Basic Input Output System), generalmente pulsando la tecla Supr durante el processo de chequeo de la memoria
RAM, y comprobaremos que el CDROM está configurado como primer dispositivo de arranque; si es así, ya podemos salir
de la BIOS sin necessidad de guardar nada y poner el CDROM de KNOPPIX en el lector. Si no fuese el caso, haríamos
los cambios pertinentes y los salvaríamos antes de salir de la BIOS.
Tras reiniciar el ordenador, transcurridos unos segundos nos aparecerá la pantalla de arranque de KNOPPIX con las
siguientes líneas en la parte inferior:
F2 for help
boot:
Podemos pulsar la tecla F2 para entrar en la pantalla donde se nos muestran las opciones que acepta KNOPPIX para arrancar. Podríamos, por ejemplo, arrancar con teclado español y lengua castellana para la interacción, y activar el
scroll wheel del ratón; para hacerlo, bastaría con teclear en la línea de comandos (boot:) lo siguiente “knoppix lang=es
wheelmouse”. Pero no es el caso; el ejemplo anterior era sólo para mostrar la potencia de KNOPPIX; nosotros, después de
insertar un disquet nuevo formateado en la disquetera, sobre el que daremos nuestros primeros pasos en Linux, garantizando así el resto de información que podamos tener en nuestros discos duros, sólo escribiremos “knoppix 2” y pulsaremos
INTRO para arrancar el sistema en modo texto.
Nota: inicialmente el teclado está configurado para EUA (us), así que algunos caracteres no se corresponden a teclado
español; en seguida arreglaremos esto, aun y así puede ser de interés saber dónde se encuentran algunos caracteres us en
el teclado español: “=” està en la tecla a£,
˛ “/” en -_ y “-” en la tecla ’?.
22
3.3. PARO DEL SISTEMA
23
Una vez pulsado INTRO KNOPPIX empezará a cargar el sistema operativo, devolviendo por pantalla algunos de los
resultados de los tests que va ejecutando para la auto configuración.
Una vez terminado este proceso se obtendrá la línea de comandos root@tty1[/]#:
Welcome to the KNOPPIX live Linux-on-CD!
Found SCSI device(s) handled by atp870u.o.
Accessing KNOPPIX CDROM at /dev/scd0...
Total memory found: 515888 kB
Creating /ramdisk (dynamic size=407928k) on /dev/shm...Done.
Creating directories and symlinks on ramdisk...Done.
Starting init process.
INIT: version 2.78-knoppix booting
Processor 0 is AMD Athlon(TM) XP 2100+ 1732MHz, 256 KB Cache
APM Bios found, power management functions enabled.
USB found, managed by hotplug.
Enabling hotplug manager.
Autoconfiguring devices...
Done.
Mouse is Generic 3 Button Mouse (PS/2) at /dev/psaux
Soundcard: CM8738, driver=cmpci
AGP bridge detected.
Video is ATI|Radeon 7500 QW, using XFree86(radeon) Server
Monitor is LTN 020e, H:31-60kHz, V:55-75Hz
Using Modes "1024x768" "800x600" "640x480"
Enabling DMA acceleration for: hde.
Scanning for Harddisk partitions and creating /etc/fstab... Done.
Network device eth0 detected, DHCP broadcasting for IP. (Backgrounding)
Automounter started for: floppy cdrom cdrom1.
INIT: Entering runlevel: 2
root@tty1[/]#
Ya estamos dentro del sistema. En este caso no ha hecho falta ni usuario ni password, hemos entrado como root
directamente; lo notamos porque el prompt temina con el carácter “#”. Para cualquier otro usuario, distinto del de root, el
último carácter sería “$”.
3.3. Paro del sistema
Una vez dentro, lo primero que debemos saber, tal y como ya se ha remarcado, es cómo pararlo. Recordemos una vez
más que no podemos parar el ordenador sin haber detenido antes el sistema operativo. Hay múltiples maneras de hacerlo.
Las más comunes son: pulsar la combinación de teclas CTRL+ALT+Supr o mediante el comando halt (hay muchas
más, mediante el comando reboot, cambiando de runlevel a 0 o 6, etc...). Una vez hayamos dado la orden al sistema
para que se detenga, éste empezará a ejecutar las intrucciones pertinentes de paro (desmontaje de dispositivos, parada de
procesos, etc.), y al final de todo este proceso, KNOPPIX expulsará el CDROM , y nos pedirá que pulsemos INTRO para
parar el ordenador.
3.4. Configuración del teclado
Una vez sabemos cómo parar el sistema, y volvamos a estar en él, siguiendo los mismos pasos de arranque anteriores,
lo primero que debemos hacer es configurar el mapeo del teclado correctamente. Hay dos formas de hacerlo, manualmente:
root@tty1[/]#loadkeys /usr/share/keymaps/i386/qwerty/es.kmap.gz
o bien gráficamente con el comando kbdconfig y escogiendo la opción “es
es”.
Es importante recordar que siempre tememos la opción de autocompletar pulsando TAB una vez, si sólo hay una
opción posible, y que se autocomplete; o dos veces seguidas, si hay más de una opción, y que se nos muestren las
posibilidades. Podemos probarlo con el comando loadkeys mismo. Tecleemos sólo una “l” y pulsemos TAB una vez, el
sistema emite un pitido; y una segunda para obtener los siguiente:
root@tty1[/]# l
Display all 143 possibilities? (y or n)
CAPÍTULO 3. TALLER DE KNOPPIX
24
En este caso no queremos que se nos muestren las 143 possibilidades. Pulsemos pues “n”, añadamos una “o” y
repitamos la operación anterior de pulsar dos veces TAB. Ahora obtenemos un resultado distinto:
root@tty1[/]# lo
loadkeys
locale-gen
loadshlib
localedef
local
locate
locale
lockfile
root@tty1[/]# lo
lockfile-create
lockfile-remove
lockfile-touch
logdump
logger
login
logname
logout
logredo
logresolve
logrotate
look
lookbib
lorder
losetup
Vemos que solo falta añadir “adk” y volver a pulsar TAB para que funcione el autocompletaje obteniendo:
root@tty1[/]# loadkeys
El autocompletaje también sirve para hacer referencia a ficheros y directorios. Basta con teclear “loadkey /u” y
pulsar TAB para obtener:
root@tty1[/]# loadkeys /usr
Y volver a pulsar TAB para obtener:
root@tty1[/]# loadkeys /usr/
El autocompletaje es una herramienta muy útil, no sólo porque ahorra teclear, sino porque además sirve para verificar
que hemos escrito correctamente, tanto los comandos como los directorios y ficheros. Es una herramienta, que una vez
acostumbrados a usarla, su ausencia se hace notar.
3.5. Inspección del sistema
Una vez tenemos el teclado configurado, podemos proceder a inspeccionar un poco el sistema. En primer lugar, en
qué sitio, de la estructura de directorios nos encontramos actualmente? Ésto lo podemos saber mediante el comando pwd:
root@tty1[/]# pwd
/
Estamos en la raíz del sistema, lo sabemos por el retorno del comando pwd, pero también lo hubiéramos podido saber
leyendo la información que nos da el prompt: “root@tty1[/]#”. Antes ya hemos entendido el significado del carácter
“#”, entendamos ahora el resto de información que éste nos da:
“root”, en este campo aparece el nombre de usuario, root en este caso, información un tanto redundante, pues lo
mismo indica el caracter “#”, pero para el resto de usuarios es interesante.
Después del carácter “@”, el cual simplemente sirve para separar campos, hay “tty1”, este campo nos indica en qué
terminal nos encontramos, y es que, y tal como ya se ha dicho, Linux és multiusuario y multiproceso; así pues, no es de
extrañar que podamos acceder al sistema desde varios terminales. Concretamente KNOPPIX por defecto ofrece cuatro
terminales, a los que podemos acceder mediante las combinaciones de teclas ALT+F1 (tty1), ALT+F2 (tty2), ALT+F3
(tty3) y ALT+F4 (tty4); ésto es extremadamente útil, ya que nos permite tener hasta cuatro sesiones de trabajo, pudiendo,
por ejemplo, en una estar probando un comando, y en otra tener el man del comando cuestión para ir leyendo sus opciones,
mientras que en otro podemos tener un editor abierto para ir tomando nota de lo que vamos haciendo (muchas distribuciones ofrecen seis terminales modo texto, reservando el séptimo para el terminal gráfico; en KNOPPIX el terminal gráfico,
si se ha habilitado, no en nuestro caso, se hallaría en el quinto terminal). Así pues probemos la combinación ALT+F2,
observemos ahora que en el campo que estamos estudiando aparece “tty2”, y ejecutemos un comando, por ejemplo man
man, para leer el manual de la aplicación man. De momento dejémosla ahí y volvamos a la tty1, y comprobemos que todo
está como lo habíamos dejado.
Finalmente, y siguendo con la interpretación del prompt, antes del campo ya conocido “#” encontramos “[/]”:
aquí se nos indica el directorio actual, el raíz en este caso, tal y como ya habíamos sabido mediante el comando pwd. La
diferencia radica en que el prompt sólo nos informa del directorio actual, mientras que pwd nos devuelve la ruta completa.
Podemos, ahora listar los contenidos del directorio en el que estamos. Para hacerlo utilizaremos el comando ls, primero
sin pasarle ninguna opción, y después dos para indicarle que nos devuelva información más detallada (normalmente las
opciones van precedidas de “-”, aunque hay comandos que no lo exijan, y una vez puesto el “-” se pueden concatenar
como se hace en el ejemplo):
3.5. INSPECCIÓN DEL SISTEMA
root@tty1[/]# ls
KNOPPIX bin boot cdrom dev
ramdisk sbin tmp usr var
root@tty1[/]# ls -la
total 45
drwxr-xr-x
9 root
root
drwxr-xr-x
9 root
root
drwxr-xr-x
20 root
root
lrwxrwxrwx
1 root
root
lrwxrwxrwx
1 root
root
dr-xr-xr-x
5 root
root
drwxr-xr-x
3 root
root
drwxr-xr-x 139 root
root
lrwxrwxrwx
1 root
root
lrwxrwxrwx
1 root
root
drwxr-xr-x
13 root
root
lrwxrwxrwx
1 root
root
dr-xr-xr-x
30 root
root
drwxrwxrwt
4 root
root
lrwxrwxrwx
1 root
root
lrwxrwxrwx
1 root
root
lrwxrwxrwx
1 root
root
lrwxrwxrwx
1 root
root
25
etc
home
lib
1024
1024
4096
12
13
2048
29696
6144
13
12
1024
12
0
80
13
8
12
12
Mar
Mar
Jan
Jan
Jan
Jan
Mar
Mar
Mar
Jan
Mar
Jan
Mar
Mar
Jan
Jan
Jan
Mar
mnt
2
2
18
18
18
4
2
2
2
18
2
18
2
2
18
18
18
2
opt
18:37
18:37
18:05
17:58
17:58
03:34
17:58
17:49
18:37
17:58
17:38
17:58
18:37
18:37
17:58
17:58
17:58
18:37
proc
.
..
KNOPPIX
bin -> /KNOPPIX/bin
boot -> /KNOPPIX/boot
cdrom
dev
etc
home -> /ramdisk/home
lib -> /KNOPPIX/lib
mnt
opt -> /KNOPPIX/opt
proc
ramdisk
sbin -> /KNOPPIX/sbin
tmp -> /var/tmp
usr -> /KNOPPIX/usr
var -> /ramdisk/var
Fijémonos en los distintos colores con los que se nos muestran los resultados: azul marino para los directorios; magenta
para los enlaces simbólicos, el destino de los cuales se nos muestran después de la combinación de caracteres “->”; verde
para los scripts y ejecutables (aún que, obviamente, en el directorio raíz no esperamos encontrar ninguno de ellos, ya que,
tal y como hemos visto, en UNIX el orden dentro del sistema de ficheros es muy rígido); etc.
Entremos en algún directorio donde seguro que encontraremos ejectuables, por ejemplo /usr/bin/ (para hacerlo
ejecutemos “cd /usr/bin/”). El directorio /usr/ es en realidad un enlace simbólico sobre /KNOPPIX/usr/;
podríamos pues, acceder a sus contenidos entrando en él directamente mediante el comando cd o bien seguir, mediante el
mismo comando, el destino real. Sin embargo, escogemos la primera opción, pues cuando nos encontremos en un sistema
UNIX instalado en un disco duro este directorio será un directorio real:
root@tty1[bin]#
total 171831
drwxr-xr-x
2
drwxr-xr-x
14
-rwxr-xr-x
1
-rwxr-xr-x
1
-rwxr-xr-x
1
.
.
.
-rwxr-xr-x
1
-rwxr-xr-x
1
ls -la
root
root
root
root
root
root
root
root
root
root
root
root
root
root
311296
2048
5380
1649
1971
Jan 18 18:04 .
Aug 17 2002 ..
Apr 1 2002 411toppm
Sep 15 20:36 822-date
Jun 5 2002 AbiWord
17992 Sep 16 22:34 zsoelim
966 Sep 4 13:53 zxpdf
Probablemente no hayamos podido ver más que las últimas líneas de las que han cruzado la pantalla. Podemos vizualizar algunos resultados más pulsando Shift+RePág para retroceder en listado y Shift+AvPág para avanzar; aun y así,
el búffer del terminal tiene un límite, y probablemente no podremos vizualizar tampoco, mediante esta técnica, toda la
información devuelta por el comando ls. Debemos, pues, recurrir a otras técnicas, el redireccionamiento de la salida (en
este caso sobre un fichero) o el uso de pipes “|” y paginadores (less en este caso, que usa las teclas RePág y AvPág para
desplazar el contenido mostrado por pantalla, y la tecla “q” para salir). Utilizaremos esta última, ya que no nos interesa
para nada guardar un listado del contenido de un directorio, además aprovecharemos para poner en práctica otra utilidad
que nos ahorrará teclear: pulsando los cursores de arriba y abajo podemos desplazarnos por todas las líneas de comandos
que hemos pasado al sistema; así pues, para obtener la línea deseada, “ls -la | less”, bastará con pulsar una vez el
cursor de arriba una vez y añadir “| less”.
less es un paginador muy potente que KNOPPIX, y la mayoría de distribuciones, usa para mostra los contenidos de
los man (aunque, como la mayoría de cosas en Linux, lo podemos configurar a nuestro gusto). Así pues, podemos hacer
un “man less” para informarnos un poco sobre este comando, y de paso irnos acostumbrando a la morfología de esta
ayuda. Óbviamente, ya que estamos bajo less para salir de man basta con pulsar la tecla “q”.
Fijémonos en que en todos los listados de contenidos de directorios que hemos ido haciendo siempre aparecen, al
principio de todo, dos directorios un tanto especiales: “.” y “..”; estos directorios son creados automáticamente por el
sistema al crear un directorio como subdirectorios del directorio creado, y continen información muy especial: “.” hace
CAPÍTULO 3. TALLER DE KNOPPIX
26
referencia al propio directorio (de modo que, si hacemos, por ejemplo, un “ls -la .” obtendremos la misma información que haciendo un “ls -la”) y “..” hace referencia al directorio padre, (haciendo un “ls -la ..” obtendremos
el listado de contenidos del directorio padre).
ACTIVIDADES
1. Hacer un man del comando ls y entender qué funciones tienen los parámetros “-a” y “-l”.
¿Recordamos dónde estamos dentro del sistema de ficheros? ¿No? Pues el comando pwd nos lo recordará. Volvamos
al directorio raíz. Hay básicamente dos formas de hacerlo, y una otra especial para este caso; de cualquier manera todas
se basan en el uso del comando cd, diferenciándose entre ellas por el argumento que le pasemos en cada uno de los
casos. La primera forma es ir volviendo a los directorios padre paso a paso, mediante “cd ..” (atención, el sistema no
entiende “cd..”, ya que interpreta que estamos intentando ejecutar un comando llamado “cd..”, el cual no existe),
iterativamente hasta llegar al directorio raíz (lo veremos en el prompt). La segunda, más eficaz, ya que con una sola
línea de comandos conseguiremos nuestro propósito, es ir directamente al directorio deseado, pasándolo como argumento
al comando cd, “cd /” en este caso; esta segunda opción es mucho más potente ya que permite pasar directamente
a directorios que pertenecen a distintas ramas, podríamos, por ejemplo, haber hecho “cd /etc/rcS.d/” 1 para ir a
este directorio, estando a /usr/bin/. Como hemos dicho, para este caso hay una tercera opción para conseguir el
mismo fin, y con variaciones: se trata de ejecutar cd sin pasarle ningún argumento, y nos situaríamos directamente a la
raíz del sistema ya que éste es, en el caso de KNOPPIX (caso excepcional y un tanto peculiar, ya que en la mayoría de
distribuciones, y según el Filesystem Hierarchy Standard2 , root debe tener un home propio /root), el directorio home
de root; una variación de este método es “cd ”, ya que “ ” es equivalente al home del usuario, el directorio raíz en este
caso. Aún existe otra opción para volver al directorio raíz, o mejor dicho, para volver al directorio del que venimos, el
raíz, ya que habíamos ejecutado “cd /usr/bin”, y que es “cd -”, ya que en “-” se guarda el último directorio en el
que hemos estado antes del actual.
3.6. Manejo directorios y ficheros
Una vez examinadas tantas opciones para hacer lo mismo, nos hallamos todavía en el directorio raíz. Podemos ahora
aprender a crear directorios y ficheros, moverlos, copiarlos, borrarlos, etc. Lo haremos sobre el disquet que hemos introducido al arrancar KNOPPIX, y que el sistema mismo, al arrancar lo automontado (más a delante aprenderemos como
montar y desmontar dispositivos). Recordemos que en UNIX los dispositivos antes de poderse usar deben ser montados,
y que antes de retirar el soporte deben ser desmontados. Este último punto es extremadamente importante, ya que si no
la integridad de los datos no está en absoluto garantizada. Podemos, por ejemplo, antes de proceder a trabajar sobre el
disquet, intentar retirar el CDROM pulsando el botón de expulsión. Oh! sorpresa, no se puede; no pensemos que se ha
estropeado el dispositivo y menos que lo haya hecho Linux. Simplemente sucede que este dispositivo también ha sido
montado automáticamente por el sistema durante el arranque, y que, por tanto, ha pasado a formar parte de éste; no tendría ningún sentido que pudiésemos retirar el CDROM sin antes informar al sistema; así pues, éste ha tomado el control
de este dispositivo, y entre otras cosas ha deshabilitado el botón de expulsión del CDROM, precisamente con el fin de
que accidentalmente éste sea retirado sin antes ser desmontado. No sucede lo mismo con la disquetera: en este dispositivo la expulsión se hace de forma puramente mecánica, así que es imposible que el sistema pueda impedir que nosotros
expulsemos el disquet sin informarle antes, pero esto no es en absoluto recomendable, tal y com ya se ha dicho, porque
esto puede suponer la pérdida de todos los datos que pudiese contener. Así pues, mientras no aprendamos a montar y
demontar dispositivos de soporte de datos, el disquet debe permanecer en la disquetera desde que el sistema arranca hasta
que esté parado, ya que durante el proceso de parada, entre otras operaciones, se efectuaran las de desmontaje de estos
dispositivos. Vayamos al disquet: pero, ¿dónde está? ¿dónde lo ha montado el sistema? Para responder a estas preguntas
ejecutemos el comando mount sin argumentos ni opciones adicionales (precisamente éste es el comando que se utiliza
para montar dispositivos, y umount para desmontarlos):
root@tty1[/]# mount
/dev/root on / type ext2 (rw)
/dev/cdrom on /cdrom type iso9660 (ro)
/dev/cloop on /KNOPPIX type iso9660 (ro)
/dev/shm on /ramdisk type tmpfs (rw,size=407928k)
none on /proc/bus/usb type usbdevfs (rw,devmode=0666)
automount(pid443) on /mnt/auto type autofs (rw,fd=6,pgrp=443,minproto=2,maxproto=4)
/dev/fd0 on /mnt/auto/floppy type vfat (rw,nosuid,nodev,uid=1000,gid=1000,umask=000)
Este comando, llamado sin argumentos, nos muestra los dispositivos montados en el sistema en el momento de ejecutarlo junto con alguna información adicional acerca de ellos (esta misma información se puede encontrar en el fichero
1 la
última barra es opcional
2 http://www.pathname.com/fhs/
3.6. MANEJO DIRECTORIOS Y FICHEROS
27
/etc/mtab, en consequencia haciendo un cat “/etc/mtab” conseguiríamos los mismos resultados). En la segunda línea retornada por el comando ya podemos ver que, efectivamente, el CDROM, /dev/cdrom, está montado en el sistema,
y además podemos ver que está montado sobre el directorio /cdrom/. La última línia retornada responde las preguntas que nos formulábamos anteriormente: el sistema ha montado el disquet, /dev/fd0/, en /mnt/auto/floppy/.
Cambiemos pues a este directorio para empezar a trabajar sobre el disquet, y comprobemos que efectivamete está vacío:
root@tty1[/]# cd /mnt/auto/floppy
root@tty1[floppy]# ls -la
total 8
drwxrwxrwx
3 knoppix knoppix
drwxr-xr-x
3 root
root
7168 Jan
0 Mar
1 1970 .
3 19:34 ..
Creemos nuestro primer directorio, entremos en él y creemos un par de subdirectorios:
root@tty1[floppy]# mkdir dir00
root@tty1[floppy]# cd dir00/
root@tty1[dir00]# mkdir subdir00 subdir01
root@tty1[dir00]# ls
subdir00 subdir01
Entremos en el primer subdirectorio y creemos nuestro primer fichero:
root@tty1[dir00]# cd subdir00
root@tty1[subdir00]# touch file00
root@tty1[subdir00]# ls -la
total 1
drwxrwxrwx
2 knoppix knoppix
drwxrwxrwx
4 knoppix knoppix
-rwxrwxrwx
1 knoppix knoppix
512 Mar
512 Mar
0 Mar
3 20:21 .
3 20:21 ..
3 20:21 file00
En realidad touch no sirve para crear ficheros vacíos, aunque lo hace si el fichero no existe, sino que sirve para cambiar
las informaciones relativas a fechas y horas de los archivos. Podemos poner algún contenido a nuestro primer fichero, y
comprobar que efectivamente ha quedado registrado:
root@tty1[subdir00]# echo "my fist hello world in Linux" > file00
root@tty1[subdir00]# cat file00
my first hello world in Linux
Añadámosle un poco más de texto:
root@tty1[subdir00]# echo "Nice to meet you, we’re gonna be good friends" >> file00
root@tty1[subdir00]# cat file00
my first hello world in Linux
Nice to meet you, we’re gonna be good friends
No olvidemos usar los cursores para ahorrarnos tecleo, ni del autocompletaje. Podemos ahora utilizar un editor de
texto para crear nuestro segundo fichero. Para ello usaremos el vi. Recordemos que este editor tiene dos modos: el de
comandos, en el que se entra cuando se arranca, y el modo de edición. Para entrar en el modo de edición basta con
pulsar la tecla “i”, y para pasar al modo de comandos hay que pulsar ESC. Una vez en modo comando “w” para guardar
y “q” para salir (obviamente, vi dipone de muchísimos más comandos, pero por ahora con estos dos nos basta). Es
muy interesante conocer estos comandos básicos de vi, ya que este editor biene en casi todos los paquetes básicos de
instalación de cualquier distribución, y si ésta fallase en algún momento, nos puede ser útil para modificar algún fichero
para poder proseguir dicha instalación3 . Ejecutemos, pues, vi seguido del nombre que queramos dar a nuestro segundo
fichero, pulsemos la tecla “i”, escribamos lo que nos parezca oportuno, pulsemos ESCy “:wq” para guardar y salir.
Mediante more, otro paginador, comprobemos que todo ha ido como esperábamos:
root@tty1[subdir00]# vi file01
it seems we’re on the right way, mate!!!
I agree.
~
3 En sistemas básicos tipo UNIX, si no se cuenta con vi se puede probar si hay instalados otros editores de texto más elementales como pueden ser
nano, pico, etc.
CAPÍTULO 3. TALLER DE KNOPPIX
28
~
~
:wq
root@tty1[subdir00]# more file01
it seems we’re on the right way, mate!!!
I agree.
Ahora probemos de borrar nuestro primer fichero. Lo haremos mediante el comando rm :
root@tty1[subdir00]# rm file00
rm: remove regular file ‘file00’?
Lo cierto es que esta pregunta por parte del sistema no nos la esperábamos. Pulsemos CTRL-C para cancelar, “n” para
no borrar o “y” para hacerlo. Lo importante ahora es que entendamos por qué el sistema nos ha formulado esta pregunta.
Si leemos el man del comando rm veremos que éste debería borrar el archivo sin hacer ninguna pregunta (recordemos
que podemos ejecutar dicho man en otra tty, y que en la tty2 aún tenemos abierto el man de man, si no hemos salido de él
mediante “q”, o si no hemos apagado el ordenador desde que lo invocamos, y así proseguir nuestro trabajo en la tty que
estábamos). Pero fijémonos en la explicación de la opción “-i” de este mismo man. ¿Qué està pasando? Parece como si
esta opción estuviera activada por defecto. En realidad no es exactamente así, lo que ocurre es que el sistema por defecto
ha establecido unos alias; para verlos todos ejecutemos el comando alias:
root@tty1[etc]# alias
alias ..=’cd ..’
alias cp=’cp -i’
alias l=’ls -a --color=auto’
alias la=’ls -la --color=auto’
alias ll=’ls -l --color=auto’
alias ls=’ls --color=auto’
alias mv=’mv -i’
alias rm=’rm -i’
alias where=’type -all’
alias which=’type -path’
Aquí empezamos a entender muchas más cosas, como por ejemplo, por qué el retorno del comando ls es en colores,
o que para hacer un “ls -la” basta con teclear la. Y también entendemos por qué cuando hemos ejectuado el rm
anterior, el sistema nos ha preguntado si realmente queríamos hacerlo. Mediante alias podemos establecer y modificar
el comportamiento por defecto de comandos o incluso crear de nuevos:
root@tty1[subdir00]# alias hi=’echo "I say hello"’
root@tty1[subdir00]# hi
I say hello
Continuando con el man del comando rm leamos para qué sirven las opciones -f y -r. La primera sirve para que
el comando se ejecute sin mostrar prompt, o lo que es lo mismo, desobedeciendo la opción -i, así que si no habíamos
borrado nuestro primer fichero podemos hacerlo ahora mediante “rm -f file00”. La segunda opción fuerza la recursividad, es decir, que la orden se extienda sobre todos los posibles subdirectorios y sus contenidos. Estas opciones son
comunes a la mayoría de comandos básicos destinados a la manipulación de directorios y ficheros; así pues, podemos
crear un segundo directorio en la raíz del disquet con todos los contenidos del primero que hemos creado mediante el
comando cp; para hacerlo debemos acudir a la recursividad:
root@tty1[subdir00]# cp /mnt/auto/floppy/dir00/ /mnt/auto/floppy/dir01 -r
En este caso hemos usado el direccionamiento absoluto, tanto para especificar el origen como el destino, para realizar la operación, es decir, hemos indicado, partiendo del directorio raíz, la ruta completa tanto para el origen como el
destino. También se podría haber utilizado el direccionamiento relativo para especificar el origen, el destino o ambos de
la operación. Cuando usamos el direccionamiento relativo el origen del direccionamiento es la posición actual dentro
del filesystem. Como en la mayoría de ocasiones el sistema nos ofrece la posiblidad de obtener los mismos resultados
empleando distintos métodos. Se trata de conocer cuantos más mejor, y saber escoger el más efectivo para cada caso en
particular. Así pues hubiésemos obtenido el mismo resultado haciendo “cp ../../dir00/ ../../dir01 -r”, es
decir, comunicándole a cp que el origen es el directorio /dir00/ el cual se encuentra dos ramas por debajo de nuestra
posición actual, y que el destino es /dir01/ al que también queremos situar dos ramas por debajo de nuestra posición.
Asimismo hubiese sido perfectamente válida la línea “cp -r ../ ../../dir01/” para alcanzar los mismos fines.
ACTIVIDADES
3.7. ADMINISTRACIÓN DE USUARIOS
29
1. Explicar el porqué de esta última aseveración.
Ahora podemos descender un subdirectorio, con lo cual nos situaremos en /mnt/auto/floppy/dir00/ y podemos copiar el segundo fichero que hemos creado en el subdirectorio /subdir00 en este mismo directorio:
root@tty1[dir00]# cp subdir00/file01 .
Tenemos que entender completamente el significado y el porqué de la línea anterior: en primer lugar especificamos el
origen del fichero a copiar (también hubiese sido válido, entre muchas otras opciones, “./subdir00/file01”), y en
segundo lugar hay que especificar obligatoriamente el destino, siendo éste la posición actual, es decir “.”. Mediante un
ls podemos comprobar si hemos obtenido el resultado deseado. Ahora podemos situarmos en el directorio padre, donde
se halla montado el disquet y borrar todo lo que hemos generado hasta ahora. Para hacerlo utilizaremos el wildcard “*” 4
para ahorrar tecleo:
root@tty1[floppy]# rm -rf *
3.7. Administración de usuarios
Debe alarmarnos el hecho de haber estado realizando todas las tareas anteriores como root, puesto que ya tenemos
muy claro que este usuario solo debe emplearse en caso necesario. No obstante, queda justificado ya que hasta ahora no
habíamos tenido ningún contacto directo con un sistema UNIX, y esto nos ha servido para familiarizarnos un poco con
los comandos básicos y con su sistema de ficheros. Ha llegado el momento de empezar a trabajar como hay que hacerlo
siempre a partir de ahora, es decir, utilizando la cuenta de root sólo cuando es estrictamente necesario, como en el primer
paso que daremos a continuación, el de crear un nuevo usuario del sistema y asignarle una cuenta, ya que esta operación
sólo la puede realizar el root. Procedamos pues a crear un usuario.
root@tty1[etc]# useradd user00
Hemos creado nuestro primer usuario, pero el proceso ha sido un tanto opaco pues el sistema no nos ha retonado
ninguna información respecto a este comando que acabamos de ejecutar. No sabemos pues ni a qué grupo o grupos
pertenece este usuario, dónde tiene este el home, qué shell se le ha asignado por defecto, etc. Mucha de esta información
la encontraremos en el fichero de passwords, /etc/passwd, así que analicemos, por campos, su contenido:
root@tty1[/]#cd /etc
root@tty1[etc]# cat passwd
root:x:0:0:root:/home/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
.
.
.
partimag:x:104:65534::/home/partimag:/bin/false
user00:x:1001:100::/home/user00:/bin/bash
La información deseada la encontramos en la última línea del fichero, pues nuestro usuario ha sido el último en
añadirse. Analicemos el contenido de esta línea:
user00 es el nombre del usuario, que ya conocíamos, ya que lo hemos creado nosotros mismos.
x su password se halla en el fichero de shadow, /etc/shadow.
1001 es su número de identificación como usuario (UID).
No tiene ningún comentario asociado.
/home/user00 éste es su directorio home, tal como era de esperar, pues todos los usuarios tienen su home en
/home/usuario.
/bin/bash el shell con el cual el usuario se encontrará al iniciar la sesión es el bash, el mismo que hemos utilizado
hasta ahora.
4 Existe también el wildcard ? el cual sirve para un solo carácter, así como distintos métodos para especificar rangos de caracteres, y para referirse,
en general a más de un fichero o directorio
CAPÍTULO 3. TALLER DE KNOPPIX
30
La pregunta que nos formulamos immediatamente ante estas informaciones es relativa al password del usuario. Debemos pues consultar el fichero de shadow, ya que así lo indica el fichero /etc/passwd. De paso introduciremos un
concepto nuevo, el de filtro, que en este caso se materializa con el comando grep (general regular expression processor).
Los filtros son herramientas extremadamente potentes y muy usadas en UNIX, y su campo de acción se extiende mucho
más allá de lo que comúnmente se entiende por filtro. En este caso, pasaremos, mediante un pipe, la salida de cat a grep
para que éste muestre por pantalla aquellas líneas que contengan la palabra que le pasamos como parámetro, user00:
root@tty1[etc]# cat shadow | grep user00
user00:!:12115:0:99999:7:::
A partir de ahora no debemos preocuparnos más: el segundo campo nos indica que nuestro usuario no tiene password.
Si lo hubiese tenido, no lo podríamos conocer, pues tal como se ha dicho, los passwords se guardan encriptados y la
encriptación es unidireccional. Pero esto no debería preocuparnos tampoco ya que root, mediante el comando passwd,
puede cambiar el password de cualquier otro usuario. Así pues, lo único que realmente debemos intentar es no olvidar
el password de root, que tampoco tiene password en este caso, tal como shadow nos inidica, aunque, si esto sucediera, también tiene solución. Continuemos con nuestra investigación acerca de las propiedades de nuestro nuevo usuario.
/etc/group nos ayudará a saber exactamente a qué grupos pertenece:
root@tty1[etc]# cat group | grep user00
root@tty1[etc]# cat group | grep 100
users:x:100:knoppix
knoppix:x:1000:
Con la primera línea de comandos nos preguntamos, con respuesta negativa, si /etc/group tiene alguna referencia
explícita a user00 (también se podría haber hecho mediante el comando groups, “groups user00”). Con la segunda
buscamos el reverso del grupo 100, grupo primario de user00 según /etc/passwd, grupo que se llama users en este
caso. Así pues ya podemos afirmar que nuestro nuevo usuario pertenece a un solo grupo, y que éste es user. El fichero
/etc/group también se puede editar para añadir usuarios a grupos y crear grupos nuevos, pero hay que remarcar que
en ningun caso en el campo de usuarios pertenecientes a un grupo en concreto se puede poner el nombre de otro grupo
con la intención de añadir todos los usuarios de éste útlimo al primero. Pero esta práctica no es demasiado recomendable
ya que existen comados específicos para trabajar con grupos (newgrp, addgroup, etc.)
Queda sólo una última cuestión a resolver: si listamos los contenidos de /home/ veremos que el subdirectorio
/user00/ no existe. Debemos pues crearlo y asignarle las propiedades y atributos pertinentes manualmente:
root@tty1[etc]#mkdir /home/user00
root@tty1[etc]#chown user00 -R /home/user00
root@tty1[etc]#chgrp users -R /home/user00
root@tty1[etc]# cd /home
root@tty1[home]# ls -la
total 0
drwxr-xr-x
5 root
root
100 Mar
drwxrwxrwt
4 root
root
80 Mar
drwxr-xr-x
2 knoppix knoppix
40 Mar
drwxr-xr-x
2 root
root
40 Mar
drwxr-xr-x
2 user00
users
60 Mar
4
4
4
4
4
08:12
08:35
08:35
08:35
08:12
.
..
knoppix
root
user00
Nota: el proceso de adición de nuevos usuarios al sistema mediante Debian es mucho más sencillo como se verá más
adelante. Pero crear uno mediante KNOPPIXño ha sido una tarea en balde, pues nos ha servido para familiarizarnos con
el sistema y aprender comandos nuevos.
ACTIVIDADES
1. Mediante man, entender el funcionamiento de los comandos chown y chgrp.
Ha llegado el momento de entrar en el sistema como nuevo usuario. Lo haremos mediante el comando su, el cual abre
un proceso hijo con un login con el usuario que le hayamos pasado. Como root podemos utilizar siempre este mecanismo
para entrar como otro usuario sin necesidad de conocer su password, ya que al ejecutar su como root éste no es necesario;
además, se da el caso que el usuario que hemos creado no tiene password, y por tanto éste nunca se pedirá. Pero, si
probásemos de ejecutar su en cualquier otra circumstancia sí que se nos pediría el password del usuario:
root@tty1[home]# su user00
su(pam_unix)[4312]: session opened for user user00 by (uid=0)
user00@tty1[home]$
3.8. GESTIÓN DE PROCESSOS
31
Notemos primeramente el cambio de aspecto del prompt. Hemos dejado de ser usuario root, para pasar a ser user00,
por lo que hemos perdido los privilegios de root, hecho que se manifiesta por el cambio del último carácter del prompt.
Podemos acceder ahora a entrar en nuestro directorio home, creemos un fichero y cambiémosle los atributos para que tan
sólo user00 pueda leerlo, ejecutarlo y escribir en él. De momento, el permiso de ejecución no tiene mucho sentido para
nosotros, pues no sabemos aún crear ficheros ejecutables, pero es bueno conocerlo de antemano para cuando se precise
de él:
user00@tty1[home]$ cd
user00@tty1[user00]$ echo "only user00 can read, write and execute this file." > user00file
user00@tty1[user00]$ chmod 700 user00file
ACTIVIDADES
1. Crear un nuevo usuario siguiendo los pasos anteriormente descritos, y comprobar que, efectivamente, este nuevo
usuario no puede ni leer el fichero recién creado ni escribir en él.
3.8. Gestión de processos
UNIX se caracteriza por una excelente gestión de los procesos que se ejecutan sobre el sistema. En primer lugar aprendamos a detectar qué procesos están corriendo sobre el sistema y sus praticularidades (modo en que corren, recursos que
consumen, quién los está ejecutando, etc.). Ejecutaremos el comando ps (process status) pasándole diversos parámetros
para ver cómo estos inciden sobre la información devuelta por el comando:
root@tty1[/]# ps
PID TTY
TIME CMD
481 tty1
00:00:00 bash
1559 tty1
00:00:00 ps
Sin argumentos ps nos informa sobre los procesos que corren sobre el terminal donde se ejecuta; naturalmente el
primer proceso siempre corresponderá a la shell.
Podríamos mandar ejecutar un proceso en background, sleep, por ejemplo (proceso que simplemente espera que
transcurra el número de segundos que le pasemos como parámetro para terminar) y observar el retorno de ps:
root@tty1[/]# sleep 300
[1] 1703
root@tty1[/]# ps
PID TTY
TIME
481 tty1
00:00:00
1703 tty1
00:00:00
1705 tty1
00:00:00
&
CMD
bash
sleep
ps
Podemos ahora preguntarnos por todos los procesos que están corriendo sobre el sistema:
root@tty1[/]# ps aux
USER
PID %CPU %MEM
root
1 0.4 0.0
root
2 0.0 0.0
root
3 0.0 0.0
root
4 0.0 0.0
root
5 0.0 0.0
root
6 0.0 0.0
root
52 0.0 0.0
root
59 0.0 0.0
root
433 0.0 0.1
root
475 0.0 0.1
VSZ
72
0
0
0
0
0
0
0
1368
1316
RSS
72
0
0
0
0
0
0
0
616
596
root
root
root
root
root
2864
2864
2856
2856
3436
1988
1988
1952
1976
1552
481
482
483
484
2086
0.0
0.0
0.0
0.0
0.0
0.3
0.3
0.3
0.3
0.3
TTY
?
?
?
?
?
?
?
?
?
?
STAT START
TIME COMMAND
S
15:41
0:07 init [2]
SW
15:41
0:00 [keventd]
SWN 15:41
0:00 [ksoftirqd_CPU0]
SW
15:41
0:00 [kswapd]
SW
15:41
0:00 [bdflush]
SW
15:41
0:00 [kupdated]
SW
15:41
0:00 [kapmd]
SW
15:41
0:00 [khubd]
S
15:41
0:00 pump -i eth0
S
15:41
0:00 /usr/sbin/automount
--pid-file=/var/run/autofs/_:mnt_:auto.pid
tty1
S
15:41
0:00 /bin/bash -login
tty2
S
15:41
0:00 /bin/bash -login
tty3
S
15:41
0:00 /bin/bash -login
tty4
S
15:41
0:00 /bin/bash -login
tty1
R
16:06
0:00 ps aux
CAPÍTULO 3. TALLER DE KNOPPIX
32
También puede ser interesante en determiandas situaciones ejecutar el comando top, el cual nos muestra la actividad
de la CPU, el uso de memoria, etc. de forma interactiva.
Ahora vamos a arrancar un proceso, detenerlo, y mandarlo a ejecutar en background. Para hacerlo haremos un “sleep
20”, pulsaremos la combinación de teclas CTRL+Z antes de 20 segundos, para pararlo, jobs para asegurarnos que efectivamente está parado y conocer su numero de identificación, y bg junto a su número de identificación para mandarlo
ejecutar en modo background:
root@tty1[/]# sleep 20
<Ctrl+Z>
[1]+ Stopped
\intro
root@tty1[/]#jobs
[1]+ Stopped
root@tty1[/]# bg 1
[1]+ sleep 20 &
[1]+ Done
root@tty1[/]#
sleep 20
sleep 20
sleep 20
Ha sucedido que al haber transcurrido los 20 segundos el proceso ha terminado, estando aún en background, se nos
ha informado por pantalla. Podemos comprobar mediante ps que efectivamente no hay ningún proceso corriendo. Ahora
podemos parar un proceso y devolverlo a foreground mediante fg:
root@tty1[/]# man ls
<Ctrl+z>
[1]+ Stopped
root@tty1[/]# jobs
[1]+ Stopped
root@tty1[/]# bg 1
man ls
man ls
3.9. Activación y uso del ratón
El ratón es una herramienta extremadamente útil para trabajar en modo consola, ya que permite seleccionar un texto
y pegarlo (así es como se han capturado todas las entradas y salidas para redactar el texto de este taller, por ejemplo).
Así pues, lo primero que haremos es configurar el ratón, y lo haremos con el programa más comúnmente utilizado, el
gpm, el cual automáticamente ya corre en modo background 5.
Hay muchos tipos de mice, pero los más corrientes son los de tres botones conectados al ordenador via puerto serie
o via puerto PS2. Si tenemos un ratón del primer tipo ejecutaremos la línia siguiente (se presupone que el ratón está
conectado en el primer puerto serie del ordenador, si no fuese así soló habría que cambiar el device ttyS0 (/dev/ttS0)
por ttyS1 (/dev/ttS1) en caso de estar en el segundo puerto, por ttyS2 para el tercer puerto o por ttyS3 para el quarto
puerto):
#gpm -m /dev/ttyS0 -t msc
Si lo que tenemos es un ratón conectado al puerto PS2, para activarlo se usará el mismo procedimiento anterior
variando únicamente el device y el tipo de ratón:
#gpm -m /dev/psaux -t ps2
En principio, después de ejecutar una de las dos líneas de comandos anteriores, como root, moviendo el ratón deberíamos ver, en todos los terminales, el indicador de posicionamiento del ratón, y al ejecutar:
#ps aux | grep gpm
deberíamos obtener una respuesta del tipo
5 Ésto
es debido a que gpm es un daemon, termino que se analiza con detalle en secciones posteriores
3.10. OTRAS OPERACIONES
root
182 0.0 0.1 1552 524 ?
33
S
Mar11
0:00 /usr/sbin/gpm -m /dev/psaux -t ps2
conforme gpm está corriendo en background.
Si no fuese así, es que nuestro ratón no es estándar. En este caso deberemos leer con atención el man de gpm y ejecutar
“gpm -t help” para tratar de identificar el tipo de ratón que se adapte al que tenemos.
Una vez configurado mediante el botón de la izquierda podemos seleccionar la parte de texto que nos interese, y al
pulsar el botón del medio pegaremos el contenido seleccionado en la posición actual del cursor. Si se está acostumbrado
a usar el ratón para marcar el posicionamiento del cursor, puede que los resultados que obtengamos no sean precisamente
los deseados, pero practicando un poco, enseguida nos acostumbraremos a este modo de operar.
Hay que destacar que el contenido del búffer del ratón se conserva al pasar de una tty a otra
ACTIVIDADES
1. Sacando provecho de el hecho de que el contenido del búffer del ratón se mantiene entre terminales, abrir en una
sesión de vi y en otra situarse a la raíz del sistema de ficheros, listar sus contenidos con detalle, y portar estos datos
al editor de texto. Salvar los contenidos del fichero de texto y meditante cat comprovar que efectivamente hemos
obtenido los resultados deseados.
3.10. Otras operaciones
Para finalizar este primer taller ejectutaremos un seguido de comandos para seguir proceso de familiarización con el
sistema y para ir adquidiendo recursos para poder solucionar futuros problemas que puedan surgir.
Informémonos sobre el sistema, el tipo de máquina sobre el que corre, el hardware que tengamos instalado, etc (los
retornos de los comandos que siguen serán, naturalmente, distintos para cada caso en particular):
root@tty1[/]# uname -a
Linux Knoppix 2.4.20-xfs #1 SMP Die Dez 10 20:07:25 CET 2002 i686 AMD Athlon(TM) XP
2100+ AuthenticAMD GNU/Linux
root@tty1[/]# cat /proc/cpuinfo
processor
: 0
vendor_id
: AuthenticAMD
cpu family
: 6
model
: 8
model name
: AMD Athlon(TM) XP 2100+
stepping
: 1
cpu MHz
: 1732.890
cache size
: 256 KB
fdiv_bug
: no
hlt_bug
: no
f00f_bug
: no
coma_bug
: no
fpu
: yes
fpu_exception
: yes
cpuid level
: 1
wp
: yes
flags
: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr sse syscall mmxext 3dnowext 3dnow
bogomips
: 3460.30
root@tty1[/]# lspci
00:00.0 Host bridge: VIA Technologies, Inc. VT8367 [KT266]
00:01.0 PCI bridge: VIA Technologies, Inc. VT8367 [KT266 AGP]
00:05.0 Multimedia audio controller: C-Media Electronics Inc CM8738 (rev 10)
00:06.0 RAID bus controller: Promise Technology, Inc. PDC20276 IDE (rev 01)
00:07.0 FireWire (IEEE 1394): Texas Instruments TSB43AB22 1394a-2000 Controller
00:09.0 USB Controller: VIA Technologies, Inc. USB (rev 50)
00:09.1 USB Controller: VIA Technologies, Inc. USB (rev 50)
00:09.2 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 51)
00:0d.0 SCSI storage controller: Artop Electronic Corp AEC6712D SCSI (rev 01)
00:0f.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8029(AS)
00:11.0 ISA bridge: VIA Technologies, Inc. VT8233A ISA Bridge
CAPÍTULO 3. TALLER DE KNOPPIX
34
00:11.1
00:11.2
00:11.3
01:00.0
IDE
USB
USB
VGA
interface: VIA Technologies, Inc. Bus Master IDE (rev 06)
Controller: VIA Technologies, Inc. USB (rev 23)
Controller: VIA Technologies, Inc. USB (rev 23)
compatible controller: ATI Technologies Inc Radeon 7500 QW
root@tty1[/]# df
Filesystem
/dev/root
/dev/cdrom
/dev/cloop
/dev/shm
/dev/fd0
1K-blocks
1971
715744
1837536
407928
1424
Used Available Use% Mounted on
1516
455 77% /
715744
0 100% /cdrom
1837536
0 100% /KNOPPIX
40
407888
1% /ramdisk
56
1368
4% /mnt/auto/floppy
ACTIVIDADES
1. En el directorio virtual /proc/ y en sus subdirectorios encontraremos mucha información relativa a nuestro sistema en ficheros de texto. Situarse en este directorio, y mediante more o cat explorar la información de estos
ficheros.
3.11. Conclusión
Este ha sido nuestro primer contacto con un entorno UNIX. Ha servido un poco para romper el mito de que trabajar
en este tipo de sistemas operativos es complicado y difícil. Es más, ha servido para que empecemos a intuir su potencia
y versatilidad. Hemos a prendido a movernos por su sistema de ficheros y realizar operaciones con éstos, a buscar información, etc. Todo lo que hemos aprendido hasta ahora nos será de gran utilidad de aquí en adelante, y nos servirá de base
para ampliar nuestros conocimientos.
Por otra parte, debido a la gran potencia de autodetección y configuración de harware de KNOPPIX hace que éste nos
pueda ser muy útil a la hora de instalar, en el próximo taller, Debian si surgieran problemas de harware. Siempre podremos
volver a arrancar KNOPPIX y estudiar cómo éste ha solucionado el problema (básicamente estudiando los archivos de
configuración).
Como última actividad del taller podemos volver a arrancar KNOPPIX en modo gráfico, es decir, sin pasar el parámetro
2 al iniciarlo (una manera de hacerlo puede ser pasando los parámetros "knoppix lang=es wheelmouse").
Capítulo 4
Instalación de GNU/Linux
4.1. Introducción
En este capítulo veremos los pasos esenciales que se siguen en la mayoría de procesos de instalación de GNU/Linux.
Aunque cada distribución tiene su propio entorno de instalación, en todas ellas deben existir unos pasos básicos. En este
capítulo veremos estos pasos, explicando los conceptos necesarios para superarlos correctamente. Es importante que antes
de instalar un nuevo sistema operativo conozcamos adecuadamente los componentes principales que tenemos instalados
en nuestro ordenador para poder configurarlo todo adecuadamente, aun cuando la distribución que utilicemos ya incorpore
detección de hardware. De especial interés es conocer la marca y modelo de la tarjeta gráfica y la de sonido que tenemos
instalada, la tarjeta de red, la marca, tipo y características del monitor y cualquier otro hardware especial que tengamos.
Generalmente, para la placa base, la CPU y la memoria RAM no suele ser necesario conocer sus características. Para
obtener esta información podemos recorrer a los manuales entregados en la compra del ordenador o, si tenemos otro
sistema operativo instalado, recorrer a él para obtenerla (en sistemas Windows TM lo podemos conseguir a partir del panel
de control).
Es posible que en un solo disco duro tengamos instalados dos o más sistemas operativos totalmente independientes.
Aunque el proceso de instalación de otro operativo en el mismo disco (o en otro instalado en el ordenador) no debería interferir con las particiones de los demás, es aconsejable hacer copias de seguridad de todos nuestros documentos. Aunque
si seguimos adecuadamente los pasos que detallaremos a continuación es prácticamente imposible perder información,
siempre es recomendable la prudencia y realizar copias de los archivos que realmente nos importan.
4.2. Arrancando
Generalmente, todas las distribuciones de GNU/Linux proporcionan algún tipo de medio para el arranque del proceso
de instalación. Actualmente se suele proporcionar un CD o DVD de arranque o, en caso que nuestro ordenador no tenga
el lector correspondiente o queramos realizar una instalación remota, se proporciona un disquete de arranque. Algunas
distribuciones de GNU/Linux nos permiten realizar la instalación desde cualquier medio: CD, DVD, FTP, HTTP, disco
duro, NFS, etc. (también existen métodos de instalación que permiten arrancar el proceso desde otros sistemas operativos).
Para empezar con el proceso deberemos introducir el medio proporcionado en su dispositivo y arrancar el ordenador,
configurando la BIOS o EFI del mismo para que arranque desde la unidad deseada.
El primer paso del proceso suele ser escoger qué tipo de instalación queremos realizar. Generalmente, la elección
suele ser para identificar qué tipo de usuario está instalando el sistema para, según el mismo, proporcionarle más o
menos información y dejarle configurar con más precisión el sistema o no. Si tenemos los conocimientos suficientes, es
recomendable hacer la instalación en modo experto (o similar) para poder adaptar más el sistema a nuestras necesidades
específicas. En algunas distribuciones, este primer paso sirve para seleccionar la versión del núcleo que queremos instalar o
para configurar el proceso de instalación en modo gráfico o texto, etc. Es imprescindible leer antentamente la información
que se nos proporciona en esta primera fase para poder elegir adecuadamente lo que más se ajuste al destino que queramos
darle al sistema.
Seguidamente, la mayoría de distribuciones nos dejan elegir el tipo de teclado (o configuración similar) que utilizamos.
Aunque hay de muchas clases diferentes, los más frecuentes son los qwerty (los primeros caracteres empezando por
arriba y la izquierda del teclado), con lo cual deberíamos seleccionar qwerty/es (Spain).
35
CAPÍTULO 4. INSTALACIÓN DE GNU/LINUX
36
4.3. Particionando el disco
Particionar el disco duro es una de las partes más críticas de todo el proceso. Este paso significa dividir el disco duro
en diferentes secciones viendo, cada una de ellas, como unidades independientes. Si ya tenemos un sistema operativo
instalado en nuestro ordenador el disco ya estará particionado en una o varias particiones pero si el disco es nuevo,
generalmente no.
Para instalar GNU/Linux debemos disponer de, almenos, una partición para él (aunque hay formas de instalar GNU/Linux
utilizando el sistema de ficheros de otro operativo no es recomendable utilizar este tipo de instalación porque el rendimiento del sistema baja considerablemente.). El hecho que al modificar el tamaño de una partición debamos eliminarla y
crearla de nuevo implica perder toda la información que tengamos en ella. Por este y otros motivos existen programas que
nos permiten modificar el tamaño de las mismas sin tener que eliminarlas. El fips es un programa con licencia GPL que
nos permite redimensionar nuestras particiones formateadas con FAT (para sistemas Windows TM de la rama no NT) sin
perder la información de las mismas. También existen otros programas comerciales que nos permiten hacer este tipo de
operación con cualquier otro sistema de ficheros, de forma que si no queremos perder la información de nuestros sistemas,
deberemos utilizar alguno de ellos antes de empezar con todo el proceso.
Es recomendable que GNU/Linux utilice almenos dos particiones en el disco duro. Una servirá para guardar los
ficheros del sistema y la otra para el swap. El swap es una zona de intercambio entre la memoria RAM del ordenador y
el disco duro. Sirve cuando el sistema operativo tiene toda la memoria RAM ocupada y los programas en ejecución piden
más. Es en este momento cuando se empieza a utilizar el swap para guardar zonas de RAM que no se están utilizando,
intercambiándolas para que las aplicaciones no se queden sin memoria disponible. También es posible prescindir de
swap, pero no es recomendable porque el sistema no podrá gestionar tan adecuadamente sus recursos además que al
utilizar simultáneamente muchas aplicaciones, éstas se quedarán sin memoria con más facilidad. Aunque el tamaño del
swap puede ser tan grande como queramos, se recomienda que éste sea el doble de la RAM instalada en el ordenador si
tenemos 64MB o menos, y de 256 o 512 si tenemos más. Estos cálculos pueden variar según el tipo y uso que damos
al ordenador, aunque generalmente si las aplicaciones necesitan utilizar demasiada memoria swap, el rendimiento del
sistema se decrementa mucho, haciendo que quede prácticamente saturado (para ver qué cantidad de memoria RAM y
swap se está utilizando el sistema nos proporciona el comando free).
Aunque con una o dos particiones es suficiente para poder instalar GNU/Linux, es interesante dividir más el disco y
situar ciertos directorios en diferentes unidades para poder hacer una gestión más eficiente de los recursos, evitar caídas
del sistema por saturación de disco, etc. Aunque la elección de esta configuración debe hacerla el administrador según el
uso que se dará al sistema, se suelen poner los directorios /usr, /opt, /var, /home y /tmp en diferentes particiones.
Para los ordenadores personales existen dos clases de discos duros: los IDE y los SCSI. Las controladoras IDE (Integrated Drive Electronics) son las que la mayoría de placas base llevan. Con este controlador podemos conectar dos
dispositivos compatibles (discos, CD,. . . ) en cada uno de los dos canales. Las controladoras SCSI (Small/Smart Computer System Interface) permiten hasta 8 dispositivos y tienen tasas de transferencia más altas, aunque su precio también es
bastante más elevado que los IDE.
Existen varias aplicaciones para particionar el disco. Una de las primeras que apareció fue el fdisk, aunque acutalmente existen muchas otras, como cfdisk, diskDruid, etc. En algunos procesos de instalación se puede escoger cuál
queremos utilizar, aunque todas permiten hacer exactamente lo mismo cambiando, eso sí, la presentación, el entorno, etc.
La forma como GNU/Linux identifica los discos es /dev/hdX para los discos IDE y /dev/sdX para los SCSI, dónde
en ambos casos la “X” es una letra, correspondiente con el disco al que nos queramos referir de la siguiente manera (para
guardar la información de particiones y el programa de arranque, los discos tienen una zona de datos reservada llamada
MBR -Master Boot Record-):
dispositivo
/dev/hda
/dev/hdb
/dev/hdc
/dev/hdd
/dev/sda
/dev/sdb
...
significado
Maestro del primer canal IDE
Esclavo del primer canal IDE
Maestro del segundo canal IDE
Esclavo del segundo canal IDE
Primer disco de la controladora SCSI
Segundo disco de la controladora SCSI
Si tenemos más de un disco en nuestro ordenador, antes de entrar en el programa de particionamiento podremos elegir
sobre cuál de ellos operar. Cuando creemos una partición se nos preguntará si debe ser primaria o lógica. En un disco duro
podemos tener hasta cuatro particiones primarias y hasta 64 de lógicas. Si no necesitamos más de 4 particiones, podemos
escoger cualquiera de los dos tipos. Si necesitamos más, deberemos tener en cuenta que las lógicas se sitúan dentro de
una primaria (hasta un máximo de 16 para cada una), de forma que no podemos tener 4 particiones primarias creadas y
después añadir otras de lógicas. En este caso, deberíamos crear 3 de primarias y hasta 16 de lógicas en la cuarta partición
primaria. De todas las particiones de un disco duro podemos elegir una para que sea la activa. Este flag sirve para indicar a
4.4. INSTALACIÓN DE MÓDULOS
37
la BIOS o la EFI del sistema cuál es la partición que debe iniciar si en la MBR no encuentra ningún programa de arranque.
En la figura 4.1 podemos ver un ejemplo de forma gráfica.
DISCO DURO 2 (hdb)
DISCO DURO 1 (hda)
hdb1
hda1
Partición primaria 1
Partición primaria 1
hdb2
hda2
hdb5
Partición primaria 2
Partición lógica 1
hdb6
hda3
Partición lógica 2
Partición primaria 3
hdb3
Partición primaria 3
hda4
hda5
Partición lógica 1
hda6
Partición lógica 2
Particions
accesibles:
− hda1
− hda2
− hda3
− hda5
− hda6
hdb4
hdb7
Partición lógica 3
Particions
accesibles:
− hda1
− hda3
− hda5
− hda6
− hda7
Figura 4.1: Ejemplo de particiones.
Cuando creamos una partición debemos indicar qué sistema de ficheros utilizaremos para ella (Linux ext2, Linux
ext3 o Linux swap). Una vez realizadas las particiones, guardaremos la configuración y deberemos indicar al proceso
de instalación dónde queremos situar la raíz del sistema del ficheros (root filesystem) y el swap del sistema. Una vez
hechos estos pasos, ya podremos continuar con el resto del proceso de instalación.
4.4. Instalación de módulos
Los módulos del núcleo son partes de software especializadas en alguna tarea concreta. Como hay toda clase de
dispositivos diferentes y decenas de funciones para múltiples sistemas de ficheros, operaciones de gestión en red, etc., se
decidió no incluir de forma estándard todos estos drivers y funciones. En las primeras versiones de Linux, cuando el núcleo
que teníamos no incluía alguna función, debíamos recompilarlo completamente todo y generar uno de nuevo adaptado
a nuestras necesidades. Con la incorporación de los módulos todo este proceso no es necesario y podemos seleccionar
directamente las funciones que necesitemos.
Generalmente, las distribuciones ya incorporan centenares de módulos diferentes para el núcleo Linux. Se suelen
organizar en diferentes categorías para facilitar su localización y, normalmente, con el mismo nombre del módulo o la
breve descripción que se facilita con el mismo ya sabremos para qué dispositivo está diseñado o qué función realiza. Es
por este motivo que anteriormente decíamos que era importante conocer el hardware de nuestro ordenador: en este paso
podremos elegir con más precisión los módulos que necesitamos. En algunos de ellos es obligatorio pasar algún parámetro
especial (como la dirección de E/S, la interrupción que utiliza el dispositivo, etc.), información que podemos obtener de
la BIOS o EFI del sistema o por los procedimientos que anteriormente comentábamos.
También es cierto que si el proceso de instalación lleva algún tipo de programa para el reconocimiento automático de
hardware, todo el proceso de selección y carga de módulos no es necesario porque ya se realiza de forma automática. Sin
embargo, es posible que no se detecte adecuadamente alguno de los dispositivos que tengamos instalados, con lo cuál sí
deberemos incluir manualmente el módulo correspondiente.
Si en el momento de instalar el sistema nos olvidamos de incluir algún módulo (o instalamos algún nuevo dispositivo)
siempre podemos recorrer a los comandos insmod (para agregar un nuevo módulo), lsmod (para listar los instalados),
rmmod (para eliminar alguno) y modprobe (para probar alguno y, si funciona correctamente, incluirlo en el núcleo).
Todos estos módulos no son más que ficheros binarios que acostumbramos a encontrar en el directorio /lib/modules/
del sistema. El fichero de configuración de los módulos se suele encontrar en /etc/modules.
Si tenemos problemas para descubrir qué hardware tenemos instalado en el ordenador, una utilidad muy práctica que
se suele incluir en las distribuciones es discover. Con ésta, podremos saber exactamente qué componentes tenemos y
qué módulos les corresponden.
38
CAPÍTULO 4. INSTALACIÓN DE GNU/LINUX
4.5. Configuración básica de la red
Después de configurar los módulos que se incluirán en el núcleo del sistema operativo deberemos configurar la red (si
tenemos la tarjeta necesaria). Aunque en este documento no entraremos en detalles sobre redes de computadores, daremos
las ideas necesarias para poder realizar este paso sin complicaciones.
Lo primero que se pedirá es el nombre que queremos darle al sistema. Este nombre servirá para referirnos a él sin
tener que recordar siempre su dirección IP (una dirección IP es la identificación de un ordenador dentro de una red cuando
utilizamos el protocolo TCP/IP, el que más se utiliza en Internet). Una vez entrado el nombre se suele pedir si en nuestra
red utilizamos un mecanismo llamado DHCP o BOOTP, que consiste en tener un servidor especial que se encarga de
asignar automáticamente las IP a los ordenadores que arrancan. Si utilizamos este mecanismo deberemos indicarlo y sino
se nos preguntará por la IP y máscara de nuestro ordenador. Si no sabemos cuáles son estos datos, deberemos dirigirnos
al adminstrador de nuestra red. Seguidamente deberemos introducir la IP del gateway de nuestra red. El gateway es un
dispositivo u ordenador que actúa de puente entre nuestra red local e Internet (si no tenemos ningún dispositivo de este
tipo podemos dejar en blanco este campo). A continuación deberemos especificar el (o los) servidores de nombres que
utilizamos. Un servidor de nombres (servidor DNS) es una máquina que nos proporciona la equivalencia entre un nombre
y una dirección IP. Si no sabemos cuál usamos, también deberemos recorrer al administrador de la red.
Si estamos en un red local es importante que recorramos al administrador de la misma para que nos proporcione toda la
información necesaria. Si tenemos otro operativo instalado en el ordenador también podemos acceder a su configuración
para obtenerla. En ningún caso, pero, nos podemos inventar estos valores porque lo más probable es que no se configure
adecuadamente y provoquemos problemas en la red local.
4.6. Sistema de arranque
Una vez configurados todos estos aspectos, deberemos instalar un pequeño programa en el disco duro para que en el
proceso de arranque del ordenador podamos elegir qué sistema operativo de los que tenemos instalados queremos arrancar.
Aunque sólo hayamos instalado GNU/Linux, también tendremos que instalar este programa ya que el sistema de arranque
del mismo lo necesita.
Existen varias aplicaciones para realizar este proceso. Las más usuales son el Lilo (LInux LOader) y el Grub (GNU
GRand Unified Bootloader). Lo único que hacen estas aplicaciones es iniciar el proceso de carga y ejecución del núcleo
del sistema operativo que le indiquemos. Generalmente, todas las distribuciones ya detectan si tenemos algún otro sistema
operativo instalado en los discos duros y nos configuran automáticamente el sistema de arranque. Lo único que debemos
tener en cuenta es que debemos situar este programa correctamente para que se ejecute al arrancar el ordenador. Normalmente se suele poner en la MBR del disco maestro del primer canal IDE o SCSI, que es el primer sitio que la BIOS o EFI
del ordenador inspecciona buscando un programa de estas características.
4.7. Elección de paquetes
Un paquete es uno o varios programas/librerías/ . . . relacionados entre sí que se agrupan para formar un sólo bloque.
La mayoría de distribuciones incluyen utilidades para el manejo de paquetes (instalación, eliminación, configuración,
etc.). Esta forma de organización es muy útil porque al necesitar un programa/utilidad/. . . podremos instalarlo todo a la
vez.
La mayoría de procesos de instalación incluyen dos formas de seleccionar los programas que instalaremos en el sistema: básico o experto. Con el proceso de selección básico generalmente se agrupan los paquetes disponibles por grandes
grupos de programas: administración, desarrollo de software, ofimática, matemáticas, etc. Si todavía no conocemos exactamente los programas que vamos a utilizar, este tipo de instalación es el más adecuado porque podremos escoger, de
forma muy general y sin entrar en detalles, qué tipo de programas utilizamos.
Cuando conozcamos un poco más el sistema y sepamos qué es exactamente lo que vamos a utilizar, es mejor la
selección experta de paquetes. Con este tipo de selección podremos ajustar mucho mejor qué programas necesitamos,
ahorrándonos espacio en el disco y evitando que el sistema cargue más programas de los necesarios. Al instalar un sistema
para un uso específico (servidor http, cvs, etc.) es muy recomendable escoger sólo aquellos programas que realmente
utilizaremos para evitar problemas de seguridad (como menos puertas dejemos abiertas al exterior, más seguro será el
sistema).
Algunas distribuciones también admiten la posibilidad de obtener los paquetes desde ubicaciones diferentes, como
uno o varios CDs, desde servidores en Internet, etc. Debian GNU/Linux fue la primera en tener un sistema de este tipo,
llamado apt. Este tipo de gestión es muy útil porque nos proporciona mucha flexibilidad, estanod siempre al día con las
últimas correcciones y actualizaciones de los programas.
4.8. OTROS ASPECTOS
39
4.8. Otros aspectos
Debemos saber qué hacer si hemos tenido algún problema con la instalación o en algún momento el sistema de
arranque no nos deja cargar el sistema operativo. Generalmente, en el proceso de instalación existe algún paso donde se
nos pregunta si queremos crear un disquete de recuperación. Siempre es muy recomendable generar este disquete ya que
nos permite cargar el operativo y acceder al sistema de ficheros para arreglar lo que haga falta.
En algunas distribuciones, con el mismo CD de arranque podremos hacer lo mismo. En el caso de Debian, por ejemplo,
con el mismo proceso de arranque se incluye una consola (apretando CTRL+F2 podemos acceder a ella) con los comandos
básicos para que podamos realizar operaciones esenciales de recuperación. De todas formas, si nos encontramos con algún
grave inconveniente que no nos permite arrancar el sistema correctamente y queremos todas las herramientas usuales,
también podemos arrancar con un CD-live de Knoppix o cualquier otra distribución y montar la unidad dónde tengamos
instalado el sistema para arreglar la disfunción. Lo que sí es importante es disponer de alguna de estas herramientas y
haberla probado antes que ocurra algún problema serio para estar siempre preparados.
La mayoría de procesos de instalación utilizan una aplicación denominada bootstrap, que también podemos instalar en el sistema con el paquete correspondiente. Con ella podríamos crearnos nuestro propio proceso de instalación o
ver cómo realmente el sistema realiza éstas operaciones de instalación y configuración del sistema. La mayoría de ellas
las podemos reproducir con el programa base-config o alguno de los otros que él mismo llama (más información
en su manual), aunque siempre podemos recorrer a los mismos ficheros de configuración del operativo para realizarlo
manualmente.
Capítulo 5
Taller de instalación de Debian Woody
5.1. Introducción
Si el primer taller nos servía para dar nuestros primeros pasos sobre un sistema tipo UNIX, y para ello utilizabamos
una distribución que no dejase rastro en nuestro PC, pues se arrancaba y se ejecutaba desde CDROM, éste debe servirnos
para aprender a instalar un sistema básico GNU/Linux en nuestro ordenador. La distribución escogida para el desarrollo
del taller ha sido la Debian 3.0r1 (Las versiones 3.0 también se conocen con el nombre de Debian Woody).
Tomar la decisión de escoger Debian frente a RedHat para el desarrollo de este taller, y de los dos restantes, no ha
sido nada fácil, pues RedHat ofrece productos comerciales que tinene muy buena acogida en el mundo empresarial, y en
general se considera mucho más sencillo instalar una RedHat que una Debian. El hecho de que se haya optado por Debian
se debe principalmente: en primer lugar, a que esta distribución es la que sigue más fielmente la filosofía GNU/Linuxy
todo se hace gracias al trabajo voluntario de miles de personas; en segundo lugar porque, es, probablemente, una de las
distribuciones que, tanto a la hora de instalar como de mantener, deja más libertad a los usuarios; y como último punto
fundamental, por su sistema de paquetes, el cual es, probablemente, el más consistente que existe actualmente.
Se ha optado, pues, por Debian, no porque se considere mejor que RedHat, (seguro que existen tantas opiniones al
respecto como usuarios de ambas distribuciones), sino porque simplemente se ha creído que su flexibilidad la convierte
en una distribución muy apta para fines didácticos. Pero siendo conscientes del fuerte arraigo que tiene RedHat, se ha
dedicado un apéndice a esta distribución, para que el lector pueda conocerla también, y pueda formarse su propia opinión.
Tampoco hay que olvidar que, aparte de estas dos distribuciones, existen muchas más. Pero creemos que, una vez
se ha tenido un primer contacto con alguna de ellas, ya es tarea de cada usuario ir probando distintas distribuciones e ir
forjándose una opinión propia de cuál es la que se adapta mejor a sus necesidades o exigencias. Por este motivo, una vez
más animamos a hacer todo tipo de experimentos y pruebas, y que cada cual dirija sus esfuerzos hacia donde crea más
interesante. GNU/Linuxño es un sistema cerrado, si no todo lo contrario, GNU/Linux es sinónimo de libertad, y por este
illo la intención básica de este módulo es en general, que, una vez terminado, se hayan sentado las bases de conocimiento
necesarias para que se pueda ejercer sin ningún tipo de impedimento esta libertad, beneficiándose de todas sus ventajas y
asumiendo todas sus consecuencias.
ACTIVIDADES
1. Ya que se va a instalar Debian, es recomendable visitar su página web y familiarizarse un poco con sus contenidos.
Así pues, se propone visitar la web http://www.debian.org y sus subapartados (http://www.debian.org/
doc/ , http://www.debian.org/distrib/cd , http://www.debian.org/distrib/netinst).
Una vez más se insta al lector a dejarse guiar por su curiosidad, y, en esta ocasión, seguir los enlaces que le parezcan
interesantes.
5.1.1. Sistemas de instalación
Por sistema de instalación se entiende qué recursos o dispositivos se van a utilizar para hacer la instalación del sistema.
Actualmente casi todas las distribuciones ofrecen diversas posibilidades para realizarla, pero esencialmente se puede
distinguir entre dos sistemas de instalación: mediante CDROM o por red. Además es posible, en general, combinar
distintos sistemas.
Debian ofrece tres tipos de instalación: mediante un juego de CDROMs, con un único CDROM, el cual contiene el
software de instalación y los paquetes básicos, dejando que el resto de ésta se haga por red, y por red exclusivamente.
Aunque, óbviamente, si se opta por éste último sistema, hará falta algun tipo de soporte inicial para arrancar el sistema
40
5.1. INTRODUCCIÓN
41
de instalación (normalmente un juego de disquets, entre dos i diecisiete, dependiendo del tipo y sistema de instalación
escogidos, o un CDROM, del propio juego de CDs de la distribución, aunque también es posible usar otros métodos,
como DHCP para hacer una instalación completamente remota).
El grado de interacción que requiere una instalación también depende del sistema y el tipo de instalación escogidos.
Tal y como es de esperar, cada uno de estos sistemas tiene sus ventajas y sus inconvenientes: mientras que una instalación
estándar nos permite ir configurando paso a paso, hecho que nos será extremadamente útil para adecuar el sistema a
nuestras necesidades y posibilidades, un sistema de instalación totalmente automático requiere de unas infraestructuras
y de unos conocimientos más avanzados, y por tanto de una inversión, tanto en tiempo, como en dinero, que queda sólo
justificada si el número de sistemas a montar es muy grande (por ejemplo se podría plantear la implementación de este
tipo de instalación en un departamento donde convivieran ordenadores destindos a uso personal, con otros destinados a la
paralelización, y donde el su número augmenta a menudo).
A la hora de escoger un sistema y tipo de instalació, debemos pues considerar diversos factores, como son: ¿cuántas
instalaciones vamos a realizar?, ¿cuántas instalaciones distintas vamos a realizar?, ¿qué grado de experiencia tenemos?,
etc. El hecho de ser ésta nuestra primera instalación nos dirige inmediatamente al tipo de instalación más interactiva, y el
más usado: la instalación interactiva estándar. Ahora sólo falta por determinar el sistema de instalación, y esto dependerá,
fundamentalmente, de si disponemos de conexión a Internet y de la velocidad de la misma. Óbviamente si no disponemos
de conexión a Internet, o la velocidad de acceso que tenemos es muy baja (como la que ofrecen los módems estándars)
no tenemos más opción que escoger una instalación basada en un juego de CDROMs; si por el contrario disponemos de
una velocidad de accesso a Internet medianamente aceptable (como la que pueden ofrece las línias basadas en tecnología
ADSL) o alta (conexión directa a Internet, via gateway), la mejor opción será inclinarse por una instalación por red.
Una instalación por red conlleva muchas ventajas sobre una hecha mediante CDROMs, y especialmente en Debian, ya
que esto nos permitirá instalar las últimas versiones disponibles de los paquetes, y actualizar todos los paquetes instalados
en el sistema será tan simple como ejecutar una sola instrucción. Pero este hecho no debe hacernos abandonar la instalación
utilizando CDROMs, si, como hemos dicho, no disponemos de conexión a Internet o la que tenemos es muy lenta (no hay
que subestimar tampoco los paquetes que contienen estos CDROMs, ya que Debian se caracteriza por ser una distribución
donde sólo se incluyen paquetes que han sido probados exhaustivamente).
5.1.2. Tipos de paquetes
Centrémonos ahora en Debian y en su sitema de paquetes. Un paquete de Debian es identificable por su extensión
.deb. En una distribución de Debian los paquetes1 se pueden clasificar según su licencia. Así pues distiguiremos entre
cuatro tipo de paquetes distintos:
main: Paquetes que cumplen con las Debian Free Software Guidelines 2 , es decir, que se garantiza su uso y redistribución libre tanto de todos los binarios que los componen, como de su código fuente completo 3.
contrib: Paquetes que, aun siendo libres, y por tanto, aparte de los binarios, también está disponible su código
fuente, dependen de otros paquetes que no lo son.
non-free: Paquetes que, aun pudiendo no costar dinero, estan bajo condiciones onerosas que restringe de alguna
forma su uso o redistribución.
non-US/main non-US/non-free: Paquetes que no pueden ser exportados fuera de EEUU, por contener software de
cifrado o software que puede afectar a asuntos relacionados con patentes.
5.1.3. Estado de desarrollo de los paquetes
El estado de desarrollo de los paquetes marcará el tipo de distribución que instalemos. Así pues se habla de tres tipos
de distribución:
stable: Distribución con todos los paquetes con versión oficial más reciente de la distribución. Consta de softwre
estable y bien probado, y cambia sólo al incorporar correcciones importantes de seguridad o de usabilidad.
testing: Distribución que contiene los paquetes que se espera que sean parte de la próxima distribución estable. Hay
una serie de requisitos muy estrictos4 que cada paquete debe cumplir antes de dejar de ser unstable para pasar a ser
testing.
1 http://www.debian.org/distrib/packages
2 http://www.debian.org/social_contract#guidelines
3 Estos
son los paquetes propios de la distribución Debian; los otros los provee la organización Debian para el beneficio de sus usuarios.
4 http://www.debian.org/releases/testing/
CAPÍTULO 5. TALLER DE INSTALACIÓN DE DEBIAN WOODY
42
unstable: En esta distribución los paquetes más recientes de Debian y, en cosecuencia, los menos probados. Por
esta razón puden contener problemas suficientemente graves como para afectar a la estabilidad del sistema.
Hay que tener en cuenta que debido a las dependencias, en general, no se deben mezclar paquetes de distintas distribuciones. De todas formas, si es necesario podemos recorrer a la aplicación apt-pinnig, que nos facilita este proceso.
5.2. Instalación de Debian Woody
Como se ha dicho, en esencia Debian presenta tres tipos de instalación: via juego de CDROMs, via CDROM mínimo, y
instalación por red. Si se dominan la primera y la última, utilizar la segunda es trivial. Así pues, empezaremos por instalar
nuestro primer sistema mediante el juego de CDROMs facilitados paso a paso, y, una vez terminado, analizaremos las
diferencias entre este proceso y el de instalación por red.
Hay que añadir que el método de instalación via CDROM mínimo, si bien está admitido como tal por parte de Debian,
las imágenes de estos de estos CDROMs, no son oficiales. Estas imágenes son creadas por cuenta propia, generalmente
por gente perteneciente a la Debian people5 , y sólo estan referenciadas en la página oficial de Debian, en el apartado
de instalación mediante CDROM mínimo6. Aun así, en general este sistema de instalación es muy práctico, y ha sido
probado con buenos resultados, con imágenes de distintas fuentes, en diversos ordenadores.
5.2.1. Flavours de Debian Woody
Se conoce con el nombre de flavors o sabores, a los distintos kernels precompilados, destinados a soportar distintos
tipos de hardware, de las distribuciones. Debian Woody presenta cuatro flavors distintos:
vanilla: Este kernel está basado en la serie 2.2 en el cual se han incluido muchos drivers destinados a soportar
hardware antiguo (como puede dispositivos ISA), además de dar soporte al puerto USB.
compact: Este kernel está basado en la serie 2.2 y principalmente orientado a dar soporte a dispositivos PCI y
sistemas IDE y SCSI.
idepci: Este kernel está basado en la serie 2.2 y está concebido para dar soporte a la mayoría de hardware posible.
Por esta razón se trata de un kernel bastante grande y poco optimizado.
bf24: Kernel basado en la serie 2.4 con soporte para ext3 i ReiserFS orientado a dar soporte a hardware nuevo,
como pueden ser los teclados USB. También da soporte a dispositivos SCSI e IDE ATA-100.
En este taller se hará la instalación utilizando el flavor bf24, ya que la experiencia dice que conlleva muy buenos
resultados, aparte de usar un kernel basado en la serie 2.4. Si con este flavor se diera el caso que durante el proceso de
arranque el ordenador se quedase colgado o notásemos comportamientos extraños, como podría ser el no reconocimento
de disco duro, deberíamos cambiar de flavour, intentando hallar el que se adaptase mejor a nuestras necesidades, o el que
simplemente nos dejase arrancar sin problemas; en este caso la primera opción que debería probarse es la idepci.
5.2.2. CDROMs de Debian Woody y sus distintos flavours
De los siete CDROMs de que se compone Debian Woody, cinco llevan asociados un o más flavours, y por tanto se
puede arrancar el sistema de instalación desde ellos. La relación entre CDs y flavours es la siguiente:
CD1 Este CDROM es multiboot, es decir, que se le puede pasar, al arancar, como parámetro, entre otros, el flavor
deseado. Si no se le pasa ningún parámetro, transcurridos unos segundos arrancarà como idepci.
CD2 vanilla.
CD3 compact.
CD4 idepci.
CD5 bf24.
Así pues, para inicializar nuestra instalación bastará con bootar el ordenador desde la unidad de CDROM con el CD1
y teclear bf24 o con el CD5 y pulsar INTRO.
5 http://db.debian.org/
6 http://www.debian.org/CD/netinst/
5.3. INSTALACIÓN DE DEBIAN WOODY MEDIANTE CDROM
43
5.2.3. Installing Debian GNU/Linux 3.0 For Intel x86
El documento básico que nos proporciona Debian para su instalación es el Installing Debian GNU/Linux 3.0 For Intel
x86, incluido en el CD17 disponible en distintos idomas, entre ellos el castellano8 . Es recomendable leer este documento
y tener una copia del mismo a mano por si surgiera algun problema, como podría ser el de no disponer de una unidad de
CDROM bootable.
5.3. Instalación de Debian Woody mediante CDROM
Esta instalación se hará en un PC estándar sobre un disco duro IDE conectado como máster sobre el puerto IED
primario estándar. Si se dispone de otro tipo de conectores en la placa base más rápidos (ATA-100 o ATA-133), probablemente también sean soportados por Debian, pero en general se requiere de configuraciones especiales, y, en consecuencia,
quedan fuera de este taller. Por lo que se refiere a controladoras y discos SCSI, si estos son medianamente estándars, serán
detectados sin ningún problema durante el proceso de arranque.
5.3.1. Antes de empezar la instalación
Antes de empezar la instalación propiamente dicha habrá que cerciornarse de que disponemos de un espacio mínimo
en nuestro disco duro donde realizarla (se recomienda que se disponga, como mínimo, de entre dos y tres gigabytes
de espacio libre). Si éste es nuevo podemos empezar directamente con la instalación, a pesar de que pensemos instalar
también otro sistema operativo en él (bastará con reservar el espacio que creamos necesario para éste con el tipo de
partición que requiera).
Si disponemos de un espacio que previamente habíamos reservado, pues ya teniamos en mente instalar GNU/Linux,
o tenemos una partición de cualquier otro sistema operativo donde deseamos instalarlo, también podemos proseguir con
la instalación, es decir, arrancar des del CDROM.
Si por el contrario tenemos todo el disco duro ocupado y con una sola partición (cosa muy poco recomendable, pues
en general, esto hace disminuir sensiblemente el rendimiento de cualquier sistema operativo, y en especial aquellos con
sistemas de ficheros poco consistentes), deberemos liberar espacio para poder instalar Debian Woody. La dificultad de
realizar esta operación dependerá estrictamente de qué sistema de ficheros sea el que contenga dicha partición.
Probablemente el sistema operativo en cuestión sea de la familia de productos de Microsoft TM; si el sistema de ficheros
es de tipo FAT o FAT32 (utilizados por MSDOSTM , Windows95TM y Windows98TM) el problema es relativamente sencillo
de solventar, ya que con la misma distribucion se nos facilita una aplicación (fips20.exe en el CD1 9 ) que nos asistirá
en la repartición del disco duro y en la creación de espacio para instalar GNU/Linux (es muy recomendable que antes de
hacer correr fips se defragmente el disco). Si el sistema de ficheros es de tipo NTFS (WindosNT TM, Windows2000TM o
WindowsXPTM ) la cosa se complica, pues hasta la fecha no se conoce ninguna aplicación GPL que pueda reparticionar
este tipo de sistema de ficheros10 . Así pues, frente a esta situación, de momento, sólo se puede recurrir a aplicaciones
comerciales (como puede ser PartitionMagicTM).
5.3.2. Arranque del sistema de instalación
Llegados a este punto podemos empezar la instalación propiamente dicha. Para ello arrancaremos el ordenador, nos
aseguraremos que el primer dispositivo a la hora de bootar sea la unidad de CDROM (entrando en la BIOS), y pondremos
el CD1 en ella (dado que, en este caso concreto, vamos a usar el flavor bf24. También podríamos haber arrancado con el
CD5 con los mismos resultados). Al cabo de unos momentos nos aparecerá una pantalla de bienvenida como la siguiente:
Welcome to Debian GNU/Linux 3.0!
This is a Debian CD-ROM. Keep it available once you have installed
your system, as you can boot from it to repair the system on your hard
disk if that ever becomes necessary (press <F3>for details).
For a "safe" installation with kernel 2.2.20, you can press <ENTER> to begin.
If you want additional features like modern hardware support, specify a
different boot flavor at the boot prompt (press <F3> to get an overview).
If you run into trouble or if you already have questions, press <F1>
7 /install/doc/install.en.html
8 /install/doc/es/install.es.html
9 /tools/fips20.zip
10 se
anima al lector cuando llegue a este punto a buscar en Internet y en otras fuentes si tal programa ha aparecido.
CAPÍTULO 5. TALLER DE INSTALACIÓN DE DEBIAN WOODY
44
for quick installation help.
WARNING: You should completely back up all of your hard disks before
proceeding. The installation procedure can completely and cirreversibly
erase them! If you haven’t made backups yet, remove the CD-ROM
from the drive and press <RESET> or <Control-Alt-Del> to get back to
your old system.
Debian GNU/Linuxcomes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law. For copyright information, press <F10>.
Press <F1> for help, or <ENTER> to boot.
boot:
Podemos pulsar F1, sin demorarnos demasiado tiempo, ya que si no la instalación empezaría de forma automática y
con el flavour idepci, flavour que se usa por defecto, para acceder al índice de ayuda:
HELP INDEX:
Press the function keys <F1> through <F10> for helpful information.
KEY
TOPIC
<F1>
<F2>
<F3>
<F4>
<F5>
<F6>
<F7>
<F8>
<F9>
<F10>
This page, the help index.
Prerequisites for installing this system.
Boot methods for special ways of using this Rescue disk.
Special boot arguments, overview.
Special boot arguments for special machines.
Special boot arguments for selected disk controllers.
Special boot arguments for the install system.
How to get help.
Debian e-mail lists.
Copyrights and warranties.
Press <ENTER> or type boot method, arguments, and <ENTER> to boot.
Press any of <F2> through <F10> for quick installation help.
boot:
Podemos pulsar cualquiera de las opciones que el menú nos ofrece, pero la más destacable es la F3, en la cual
encontraremos los distintos flavours que admite el modo de arranque, y también el cómo utilizar este mismo CD1 para
usarlo como disco de rescate:
BOOT METHODS
The Rescue disk can be used for system recovery as well as for installation.
The rescue method will mount an existing root partition, while the other
methods will give you a small, standalone root system.
Available boot methods:
linux or idepci
Start the installation -- this is the default.
fbf24
Start the installation with a Linux 2.4 kernel.
compact
Start the installation with a kernel including PCI SCSI and IDE drivers.
vanilla
Start the installation with a kernel including many drivers for
older hardware (such as systems with ISA-based hardware).
rescue
Boot and mount any root filesystem. The root filesystem must be given at
the prompt, so e.g., type rescue root=/dev/hda1. (You can also use
5.3. INSTALACIÓN DE DEBIAN WOODY MEDIANTE CDROM
45
rescbf24, resccomp, or rescvanl.)
Press <ENTER> or type boot method, arguments, and <ENTER> to boot.
Press function key <F1> for the help index.
boot:
Tecleemos pues bf24, y empecemos con la instalación.
Una vez hecho esto, se cargará el kernel (veremos durante unos instantes las salidas por pantalla de las distintas
pruebas que se hacen) e inmediatamente nos aparecerá una pantalla, Choose The Language, para que mediante los
cursores seleccionemos el idioma de instalación.
A partir de ahora ya disponemos, pulsando la combinación de teclas ALT+F2 e INTRO, de una shell, aún que muy
básica, que puede usarse en cualquier momento de la instalación. En la tty3 (ALT+F3) el kernel va dejando sus mensajes
(es decir, el contenido del fichero /var/log/messages).
5.3.3. Configuración del idioma de instalación
Es muy recomendable seleccionar la opción en - Choose this and press Enter to proceed
in English para evitar posibles errores de traducción. En general, y si es posible, siempre es mejor trabajar con el
idioma original, y así se hará durante el resto del taller, pero una vez más se deja libertad al lector para que decida el
mismo qué es mejor, en este caso, que sea él quien escoja el idioma que va a utilizar durante la instalación.
Así pues, escogemos el idioma inglés y pulsamos INTRO. En la pantalla Choose Language Variant siguiente
se puede escoger qué inglés se quiere utilizar, nosotros usaremos el americano English (United States) 11 .
5.3.4. Menú principal de instalación
Después de la pantalla de créditos Release Notes, y tras pulsar INTRO, entraremos en la interfície Debian
GNU/Linux Installation Main Menu que nos servirá para configurar el resto de la instalación. Esta interficie opera según unos criterios preestablecidos, así siempre se nos sugerirá el próximo paso a dar para una instalación
estàndard, seguido, si procede, de alternativas a esta opción. No obstante, mediante los cursores podemos desplazarnos y
seleccionar cualquier opción de las que se nos ofrecen tras una línea en blanco (aquí se listan todas las opciones posibles
de instalación, aunque algunas no estarán disponibles si primero no hemos utilizado otras; en principio, salvo casos excepcionales, y por ser nuestra primera instalación, nunca usaremos estas opciones y dejaremos que la misma interficie de
instalación nos guíe por ellas mediante la sugerencia que nos haga en cada momento).
5.3.5. Configuración del teclado
Como primera sugerencia, la interficie de instalación nos propone que configuremos el teclado Configure the
Keyboard. Así lo haremos. Pulsemos pues INTRO para accender a la pantalla Select a Keyboard, y seleccionemos el teclado, qwerty/es :Spanish y pulsemos INTRO, para que el dispositivo de entrada responda al mapeado de
caracteres del teclado español. En la tty2 podemos comprobar que, efectivamente, ya disponemos de acentos, por ejemplo.
5.3.6. Partición del disco duro
Una vez selecionado el teclado el proceso de instalación nos devuelve al menú principal y nos propone que procedamos
a particionar el disco duro, Partition a Hard Disk. Así lo haremos. Pulsemos pues INTRO y entremos en la
pantalla de selección de dispositivos a particionar, Select Disk Drive. Si disponemos de más de un disco duro,
mediante los cursores podremos seleccionar sobre cuál de ellos queremos operar. Una vez hecha la selección pulsemos
INTRO. Tras una pantalla de advertimiento referente a las limitaciones de lilo, LILO Limitations, y pulsando
INTRO entramos en otra pantalla de consejo acerca de cómo se debe calcular el tamaño de las particiones si se tiene
intención de utilizar el Reiser filesystem, Note on additional space for Reiserfs Journal. Pulsemos
INTROñuevamente y se arranca la aplicación cfdisk para crear y gestionar las particiones.
Los tamaños, sus características, y el número de particiones depende fuertemente del tipo de uso y de la cantidad de
disco duro de que se disponga. Al tratarse de una instalación con fines educativos, a continuación se facilita la información
sobre las particiones que se crearán suponiendo que se trabaja sobre un espacio de entre los cinco y los quince gigabytes
destinados a la nueva instalación.
11 El idioma de instalación no condiciona en modo alguno ni la configuración del teclado, el cual hasta el momento es us, ni el idioma de interación
con el sistema ni otras configuraciones. Esta opción sólo es válida durante el proceso de instalación.
46
CAPÍTULO 5. TALLER DE INSTALACIÓN DE DEBIAN WOODY
Como mínimo hay que crear dos particiones: una primera para montar el sistema y otra de swap (es cierto que se
puede hacer instalaciones sin swap, pero, tal como ya se ha dicho, no es en absoluto recomendable). Nosotros para
augmentar la eficiencia del sistema crearemos cinco particiones. La primera destinada a albergar la root partition; ésta no
tiene que ser muy grande, por ello se le destinará alrededor de un diez por cien del disco duro, preferentemente en una
partición primaria; pero, si no disponemos de ella, la podemos crear como partición lógica sin darle más importancia. La
segunda se destinará a swap. Se recomienda que ésta tenga un tamaño de entre 512Mb y 1Gb 12 ; con estas dimensiones
nos aseguraremos, salvo casos excepcionales, que nunca llegará a saturarse; esta partición también es preferible que sea
primaria, pero, si tiene que ser lógica, tampoco repercutirá en el rendimiento del sistema. La tercera partición estará
destinada a albergar el directorio /home/, cuya finalidad es almacenar datos de usuario, y, dependiendo del tamaño del
disco duro, se le puede asignar entre un diez y un veinte porciento del disco duro, en función del número de usuarios y
del uso que se va hacer del sistema. La cuarta partición será para el directorio /usr/; hay que tener presente que esta
partición albergará gran parte del software que se instale; así pues tiene que tener un tamaño significativo, alrededor de
un cuarenta por ciento del disco. El espacio restante se destinará al directorio /var/, directorio donde se alojan librerías,
ficheros de log, etc.
La distribución de particiones anterior es tan solo una propuesta que tiene dos objetivos: por un lado, pretende mejorar
el rendimiento que ofrece una instalación basada en tan solo dos particiones, y, por otro, da más robustez al sistema. Entre
otras ventajas, el tener los datos repartidos entre distintas particiones hace que la corrupción de una de ellas no implique
automáticamente la pérdida de toda la información del sistema. Óbviamente pueden crearse otras particiones u omitir
algunas de las propuestas13.
Por lo que se refiere a cfdisk, su funcionamiento se basa en el uso de los cursores, tanto para moverse por las
particiones del disco (parte superior de la pantalla, mediante los cursores Up y down), como para seleccionar las posibles
operaciones que se puedan realizar en cada momento (parte inferior de la pantalla, con left y right), ya que éstas
irán variando según el estado de la partición seleccionada. Para crear una nueva partición hay que seleccionar la opción
[ Ñew
]; a continuación se nos preguntará, si aún se pueden crear particiones primarias (el número máximo és
cuatro), si la queremos crear como partición primaria o lógica; después debemos especificar, en Mb, el tamaño de la
partición; y finalmente su ubicación física en el disco (es recomendable que antes de empezar a particionar el disco nos
hagamos un pequeño esquema de cómo lo queremos hacer y crear las particiones a partir de éste, para así poder responder
siempre [Beginning] a esta pregunta).
Una vez se han creado las particiones hay que asignarles el tipo de sistema de ficheros. Por defecto las particiones
se crean de tipo Linux, es decir, con código 0x83; en general pues esta opción por defecto ya nos será útil salvo para
la partición destinada a swap. Para esta partición en concreto habrá que seleccionar la opción [ Type ] con lo que
primero se nos mostrará, en hexadecimal, la relación entre códigos y filesystem types, y después se nos preguntará qué
tipo de sistema de ficheros queremos asignarle a la partición seleccionada. Por defecto se nos propone la 0x82, es decir
Linux swap, que es la opción deseada14 ; bastará, pues con pulsar INTRO y se nos retornará a la pantalla principal de
cfdisk mostrándonos que, efectivamente, se ha realizado el cambio.
Una vez tengamos construida la tabla de particiones a nuestra medida, bastará con seleccionar la opción [ Write ]
para que ésta, tras una pregunta de confirmación final a la que respondremos yes, se escriba en la MBR y hacer de esta
manera efectivos los cambios. Ahora pues, ya podemos abandonar cfdisk con la opción [ Quit ] y proseguir con
la instalación
5.3.7. Inicialización y activación de la partición swap
Una vez hemos salido del cfdisk retornamos al menú principal. Esta vez se nos propone que inicialicemos y activemos la partición de swap, Initialize an Activate a Swap Partition. Pulsemos INTRO para entrar
en una pantalla, Scan fo Bad Blocks?, donde se nos pregunta si deseamos chequear la partición en búsqueda de
posibles bloques defectuosos. Esta misma pantalla nos aparecerá cada vez que inicializemos y activemos una partición.
Hay que advertir que el proceso de chequeo es lento, así pues, esta vez lo activaremos para ver su modo de proceder,
pero para el resto de particiones dejaremos que cada uno tome la decisión que estime más acertada. La experiencia pone
de manifiesto que para discos nuevos, o en buen estado, no es necesario ejecutar este proceso de prueba, puesto que los
resultados siempre suelen ser positivos.
Una vez terminado el proceso de chequeo entramos en una pantalla de confimación final, Are You Sure?, antes
de proceder a la inicialización y a la activación de la partición. Pulsemos INTRO para llevar a termino nuestro objetivo.
12 Otro criterio que se utiliza para establecer el tamaño de la particion swap es el de establecer este igual a la cantidad de memoria RAM de que se
disponga, y que ambas sumadas no superen el 1Gb.
13 El orden de las particiones no afecta al comportamiento del sistema.
14 Si tenemos más de una instalación de GNU/Linux en el mismo ordenador, se puede utilizar la misma partición swap para todas ellas, ya que la
información que se pueda almacenar en ella durante el funciomamiento del sistema es totalmente volátil.
5.3. INSTALACIÓN DE DEBIAN WOODY MEDIANTE CDROM
47
5.3.8. Inicialización y activación de una partición Linux
De vuelta al menú principal, éste nos sugiere que inicialicemos y activemos una partición de Linux, Initialize
and Active a Swap Partition. Esta operación es indispensable, pues es aquí cuando inicializaremos, ativaremos y montaremos la partición root (/). Pulsemos INTRO para entrar en la pantalla de selección del tipo de sistema de
ficheros que deseamos para esta partición, Choose Filesystem Type. Nosotros escogeremos que sea de tipo ext3.
Una vez hecha esta selección entramos en la pantalla donde eligiremos la partición sobre la que queremos operar, Select
Partition. Como se trata de montar la partición root, escogeremos la primera. Una vez escogida entraremos en la pantalla ya conocida de chequeo de bloques defectuosos, y después entraremos en la pantalla de confirmación de operación.
Tras la operación el sistema de instalación nos pregunta si queremos montar en esta partición el root filesystem, Mount
as the Root Filesystem?. Óbviamente, pues así lo habíamos planeado, responderemos afirmativamente.
5.3.9. Inicialización y activación de otras particiones Linux
Ahora el menú principal nos sugiere, como opción principal, que instalemos el kernel y su módulos en la root partition, Install Kernel and Driver Modules. Nosotros no lo haremos aún, pues, tal y como habíamos planeado,
tenemos que inicializar, activar y montar el resto de particiones que hemos creado. Escojamos pues la primera alternativa
que nos ofrece el menú principal Initialize a Linux Partiton. Hecho esto entraremos en la pantalla de selección de filesystem, ext3 nuevamente, y entraremos en la pantalla de selección de partición. Escojamos la primera que
se nos sugiere, y entremos en las pantallas de chequeo de bloques y de confirmación. Una vez terminada la operación,
se nos pregunta qué partición queremos montar Select Mount Partition. Aquí la primera vez escogeremos la de
/home, siguiendo el planteamiento inicial.
Otra vez en el menú principal repetiremos las acciones anteriores para montar las particiones de /usr y de /var.
5.3.10. Instalación del kernel
Una vez terminado con el proceso de inicialización, activación y montaje de todas las particiones que habíamos
creado, podemos proceder a seguir el próximo paso que el menú de instalación hace rato que nos sugiere, es decir, intalar
el kernel y los módulos Install kernel and Driver Modules. Entramos ahora en la pantalla de selección del
medio de instalación Select Installation Medium. Como estamos instalando el sistema utilizando el juego de
CDs, escogeremos la primera opción. Se nos pide ahora el primer CD, Please insert the CD-ROM , pero como
éste ya se halla en el lector podemos continuar el proceso.
Entramos ahora en una pantalla en la que se nos pide dónde debe ir el sistema a buscar los ficheros del kernel para la
instalación, pero, como estamos realizando la instalación desde CDROM, sólo se nos da una opción. Así pues pulsemos
INTRO para instalar el kernel en el disco duro, en la root partition.
5.3.11. Configuración de módulos
Llegados a este punto, el menú principal nos sugiere la configuración de los módulos del kernel Configure Device
Driver Modules. Siguiendo este paso entramos en una pantalla de advertencia sobre los módulos que ya lleva incorporado el kernel que se ha instalado Note about loaded drivers, el cual nos indica que si no encontramos ningún
módulo del cual sabemos totalmente de su necesidad prosigamos la intalación. En principio no debemos preocuparnos
demasiado acerca de los módulos, pues por ahora nuestro objetivo principal es instalar un sistema mínimo en nuestro
PC, y luego ya lo iremos ampliando y mejorándolo. Así pues, podemos dar un paseo por el menú de módulos con fin de
adquirir conocimientos, pero en principio no activaremos ninguno (una vez instalado el sistema básico, podremos entrar
en este mismo menú y activar cualquier módulo mediante el comando modconf).
5.3.12. Configuración del hostname
Es momento de dar un nombre al sistema que estamos instalando Configure the hostname. Por defecto se nos
sugiere el nombre de debian, Choose the Hostname. Podemos borrar esta sugerencia y dar un nombre que nos
guste más compuesto de una sola palabra15, brau, por ejemplo.
5.3.13. Instalación del sistema base
Con toda esta información, el sistema ya puede hacer la instalación del sistema base; es lo que nos propone el menú
principal, Install the System Base. Aceptemos pues esta propuesta. Nuevamente se nos pregunta por el medio
15 En este punto sólo hay que especificar el nombre local del sistema. Si éste va a formar parte de una red, y por tanto necesita de dominio, éste ya se
especificará en el apartado de configuración de la red.
48
CAPÍTULO 5. TALLER DE INSTALACIÓN DE DEBIAN WOODY
de intalación, CDROM una vez más, la opción por defecto y segidamente se nos requiere de nuevo el CD1 para proseguir;
pulsemos, pues INTRO y dejemos que el sistema lea los ficheros necesarios.
El siguiente paso es especificar el directorio desde donde se va a instalar el sistema base Select Archive Path.
Sólo se nos muestra una opción, instmnt, que es el directorio virtual que se ha creado para tal fin (en realidad esta
información se obtendrá del CD1, a partir de enlaces simbólicos de este directorio al directorio /cdrom/). Así pues
pulsemos INTRO y dejemos que finalmente empiece la instalación del sistema base en el disco duro.
5.3.14. Creación de un disco de arranque
Una vez terminado el proceso de instalación del sistema base, el menú principal nos sugiere hacer el sistema bootable,
Make System Bootable. Como medida de seguridad, pero, escogeremos la primera alternativa que se nos ofrece, es
decir, crear un disco de arranque. Así pues seleccionemos esta opción, Make a Boot Floppy, y pulsemos INTRO.
Insertemos un disquet virgen en la disquetear y procedamos a crear dicho disco.
5.3.15. Instalación de LILO
Una vez creado el disco de arranque, el menú principal nos sugiere que rebootemos el sistema. Pero también podemos
hacer el sistema bootable, como se nos sugería anteriormente, es decir, dejar que escriba en la MBR la información
necesaria para que se pueda arrancar la instalación que acabamos de realizar desde el propio disco duro. Para esto debemos
seleccionar la opción Make System Bootable y contestar, por lo general, afirmativamente a las propuestas que el
sistema de instalación nos hace.
Realizar esta operación en este momento está plenamente justificada si en nuestro PC sólo hemos instalado GNU/Linux,
o si creemos que el gestor de arranque LILO será capaz de bootar otros posibles sistemas operativos que tengamos instalados (en el caso de tratarse de sistemas MicrosoftTM, puede instalarse LILO ya que la experiencia muestra que LILO es
perfectamente capaz de gestionar su arranque). Pero no debemos realizar esta operación, si ya disponemos de otro gestor
de arranque (el cual habrá que configurar para que pueda arrancar el sistema que acabamos de instalar), o si queremos instalar otro gestor de arranque como puede ser grups, o si no estamos plenamente seguros que LILO será capaz de gestionar
correctamente el arranque del resto de sistemas operativos que tengamos instalados.
Si no hemos instalado LILO, de momento podemos arrancar el sistema operativo mediante el disquet que hemos
creado anteriormente, y en el próximo taller evaluaremos la posibilidad de instalar el gestor de arranque desde el propio
sistema.
5.3.16. Reinicialización del sistema
Ha llegado el momento de reinicializar el sistema para arrancar el sistema base que hemos instalado en nuestro
disco duro, y a partir de él empezar a personalizar nuestra primera instalación de GNU/Linux. Así pues, retiremos el
CD1, o cuando se produzca la reinicialización, entremos en la BIOS para reestablecer la secuencia de dispositivos de
arranque (preferiblemente disquetera, disco duro, CDROM, etc... para un sistema estándar), y el disquet si hemos instalado
LILO, y seleccionemos la opción Reboot the System. Tras una pantalla final de advertencias y recomendaciones
que debemos leer atentamente, podemos proceder a la reinicialización. Si no se ha instalado LILO, el disquet deberá
permanecer en la disquetera, y deberemos asegurarnos que el PC arrancará desde él.
5.3.17. Arranque del sistema base
Si todo ha ido como es debido, tras reiniciar el sistema observaremos, tanto si hemos arrancado integramente desde el
disco duro, como si se ha hecho inicialmente mediante disquet, que el sistema, al arrancar, ya usa información del disco
duro. Transcurridos unos momentos en los cuales irán apareciendo por pantalla los resultados de los distintos procesos que
se ejecutan durante el arranque, el sistema entrará en una pantalla de bienvenida, y nos invitará a proseguir la instalación,
recordándonos que podremos repetir este proceso en cualquier momento ejecutando el comando base-config como
root. Pulsemos INTRO y prosigamos.
5.3.18. Configuración horaria
Inmediatamente después de la pantalla inicial de configuración entramos en la de la configuración horaria del sistema,
Iime Zone Configuration. En ésta se nos mostrará la hora de la BIOS. Si esta hora coincide con la hora de
nuestro huso horario, debemos contestar que no; por el contrario, si esta hora está establecida respecto al Meridiano de
Greenwich, debemos contestar que sí, para que el sistema haga los cálculos necesarios para situarnos en la hora de nuestro
huso horario.
5.3. INSTALACIÓN DE DEBIAN WOODY MEDIANTE CDROM
49
5.3.19. Configuración geográfica
Una vez establecido el critero para el cálculo horario, debemos especificar, en las dos pantallas siguientes, Time
Zone Configuration, nuestro emplazamiento geográfico. Si la hora de la BIOS está sintonizada según la hora local,
y así lo hemos especificado en el apartado anterior, las respuestas a estas preguntas no tendrán ninguna relevancia. Sí que
es importante contestar correctamente a estas preguntas si el horario de la BIOS se ha establecido según el criterio GTM 16 .
5.3.20. Establecimiento de la política de passwords
Terminados los procedimientos para la configuración horaria el sistema ha llegado el turno de establecer la política de passwords, Password Setup. Ésta se compone de posible habilitación de los sistemas md5 i shadow, y del
establecimiento del password de root, y de la creación de una cuenta de usuario.
Sistema md5
En primer lugar el sistema nos pregunta si queremos instalar el sistema de passwords md5. Si no tenemos sospecha
de problemas de incompatibilidades17 podemos contestar que sí, ya que es buena idea poder usar passwords con más de
ocho caracteres.
Sistema shadow
Una vez más si no tenemos sospecha de posibles incompatibilides 18, es bueno habilitar esta opción, ya que así nos
aseguramos que el fichero que contiene los passwords encriptados (/etc/shadow) sólo será accessible por el root. Esto
supone una medida más de protección para nuestro sistema.
Password de root
Ahora debemos entrar el password de root. Es importante seguir las recomendaciones para seleccionar este password,
y acordarse de él. Con el objetivo de confirmar que se ha entrado el password deseado y no ha habido posibles errores de
tecleo, se nos pide que lo volvamos a escribir a modo de confirmación 19.
Creación de una cuenta de usuario
Tal y como ya se ha remarcado, trabajar siempre como root es una mala política por distintas razones. Por esta razón el
sistema nos recomienda que creemos una cuenta de usuario normal. Se nos pedirá el nombre de esta cuenta, si queremos
añadir datos suplementarios respecto a esta cuenta (por defecto Debian user), y su password, que, por los mismos motivos
que antes, deberemos escribirlo dos veces.
5.3.21. Últimas configuraciones
Paquetes PCMCIA
Una vez creado el usuario normal, si no disponemos de dispositivos PCMCIA (típicos en ordenadores portátiles), el
sistema lo detectará automáticamente y nos sugerirá que confirmemos que los paquetes asociados a estos dispositivos
pueden ser eliminados.
Configuración de un sistema PPP
Si disponemos de un módem puede ser buena idea que procedamos a su configuración, aunque también se puede hacer
una vez estemos en el sistema mediante la aplicación pppconfig ejecutada como root. Óbviamente, si no disponemos
de este dispositivo, responderemos negativamente a esta pregunta 20.
16 Siempre
es posible reconfigurar estos parámetros mediante el comandotzconfig
uso de NIS las puede provocas, por ejemplo.
18 Este sistema no suele implicar problemas de incompatibilidades.
19 Frente al olvido del password de root hay distintas estrategias a seguir. Una de ellas puede ser utilizar el CDROM de instalación, inicializar una
instalación y justo después de haber configurado el teclado, acceder a la tty2; una vez allí podemos montar la root partition de nuestro disco duro, y,
mediante un editor, eliminar el contenido del campo de password encriptado del fichero /etc/passwd. Cuando volvamos a reiniciar el sistema, el
superusuario no tendrà password, es por esto que lo primero que debemos hacer es asignarle immediatamente uno
20 Si no requerimos de los servicios de PPP podemos desinstalar sus paquetes: ppp, pppconfig, pppoe y pppoeconf.
17 El
CAPÍTULO 5. TALLER DE INSTALACIÓN DE DEBIAN WOODY
50
5.3.22. Configuración de apt
En esta sección se nos pregunta acerca de las fuentes donde apt deberá ir a buscar la información para construir su
base de datos sobre los paquetes (dependencias, estado de instalación, etc.). Al estar haciendo una instalación íntegramente
basada en CDROM, escogeremos la primera opción, y, tras poner el CD1 en el lector, aceptaremos la ruta que nos sugiere
para accede a él. Transcurridos unos momentos en los cuales apt extrae la información relativa a qué paquetes contiene este
CD, se nos preguntará si queremos añadir el contenido de otro CD a la base de datos. Una vez hayamos introducido el CD2
en el lector, contestaremos yes a esta pregunta. Repetiremos esta operación hasta que apt haya procesado el contenido
del séptimo CDROM. Las operaciones sobre la gestión de contenidos de los CDROMs se pueden hacer también desde el
sistema mediante la apliación apt-cdrom.
Una vez finalizado el escaneo de los contenidos de los siete CDROMs, se nos preguntará si queremos añadir alguna
otra fuente de donde apt pueda obtener paquetes. De momento contestaremos que no, al igual que a la siguiente pregunta
respecto al chequeo de segurdiad de los contenidos de los paquetes (no nos es necesario de momento ya que al estar
usando únicamente paquetes de la distribución oficial, en principio, sus contenidos ya son seguros).
5.3.23. tasksel y dselect
A continuación se nos pregunta si queremos que se ejecuten los programas de selección de paquetes, primero tasksel
y luego dselect. Responderemos que no, pues estos programas también los podremos ejecutar desde la línea de comandos una vez hayamos terminado la instalación.
Aquí termina la instalación básica, como último punto, y ya respondiendo a preguntas formuladas por apt, se nos
informará de los paquetes que se van a instalar y los que se van a desinstalar. Una vez aceptado éste proceso, se nos
preguntará si queremos borrar los paquetes .deb de nuestro disco duro 21. Al disponer de ellos en CDROM podemos
contestar que sí, ya que su presencia sólo implica la ocupación de espacio en el disco duro.
Automáticamente se arranca el programa de configuración de exim. Al no ser objeto de este taller la configuración
de este programa de gestión de correo, escogeremos la opción 5 para salir del programa.
Finalmente, tras unos momentos nos aparecerá por pantalla:
Debian GNU/Linux 3.0 brau tty1
brau login:
Tenemos pues, instalado ya un sistema básico estándar en nuestro ordenador. Ahora empieza la tarea de construir
un sistema a nuestra medida. Es muy importante, llegado a este punto, distinguir entre dos tipos de sistemas: los de
desarrollo y los de producción. Un sistema de desarrollo es aquél que está destinado a experimentación, donde se hacen
pruebas y experimentos, y donde no priman ni la estabilidad ni la eficiencia, es, en definitiva, un sistema destinado
a la adquisición de conocimientos sobre el propio sistema. Contrariamente, en un sistema destinado a producción la
eficiencia y estabilidad son las características que más peso tienen. Así pues, debemos asegurarnos que contenga única y
exclusivamente aquellos paquetes estrictamente necesarios, ya que el hecho de tener paquetes inecesarios instalados va
en detrimento de la eficiencia. La estrategia a seguir antes de montar un sistema de producción (un servidor de web, un
servidor de aplicaciones, etc.) pasa siempre por trabajar primero sobre un sistema de desarrollo, donde se ensayarán y
probarán distintas estrategias, para poder sacar conclusiones de cara a montar el sistema de producción.
Nuestro primer sistema será, evidentemente, un sistema de desarrollo, tanto porque no tenemos en mente que sirva
para cubrir ninguna necesidad en concreto, como porque es nuestra primera experiencia de montaje de un sistema, cuya
finalidad es, únicamente, la obtención de conocimientos. Instalaremos y desinstalaremos distintos paquetes, haremos
pruebas con distintas configuraciones, etc. y esto, claro está, perjudica directamente la eficiencia y la estabilidad del
sistema. Así pues, animamos al lector, a que, una vez finalizado el módulo y haya obtenido ya una idea global de lo que
es instalar un sistema con lo que ello implica, reinstale de nuevo todo el sistema partiendo de cero para que lo adapte
estrictamente a sus necessidades.
5.4. Instalación de Debian Woody por red
Muchos de los pasos para realizar una instalación por red son comunes a los de una instalación mediante CDROM,
así pues destacaremos y nos centraremos en aquellos aspectos que difieren del proceso anteriormente descrito.
21 Estos
archivos se almacenan en /var/cache/
5.4. INSTALACIÓN DE DEBIAN WOODY POR RED
51
5.4.1. Particularidades de una instalación por red
La diferencia básica entre una instalación hecha mediante un juego de CDROMs y una por red es la del lugar de
donde se obtendrán los paquetes a la hora de instalarlos. Mientras que en una instalación hecha a partir de CDROMs,
habrá que insertar en el lector al menos uno de ellos cada vez que se instale un paquete nuevo para poder extraer de él
los datos necesarios. En una instalación por red los paquetes se obtienen remotamente, hecho que nos permite, en primer
lugar, acceder a la última versión de éstos, y el poder actualizar todos los que tengamos instalados con una simple línea
de comandos22.
Por otro lado, para realizar una instalación por red, generalmente basta con un juego de disquets, o con un único
CDROM, que contengan la información necesaria para poder arrancar un sistema operativo básico sobre el qual se hará
correr el programa de instalación (que ya está incluido en el juego de disquets o en el CDROM, junto con los módulos
que nos puedan ser necesarios para configurar el accesso a la red), y a partir de aquí, el resto de información se obtendrá
remotamente.
5.4.2. Aspectos comunes de los distintos métodos de instalación
Como ya se ha dicho, muchos de los pasos a seguir para hacer una instalación por red son comunes a los datos para
hacer una instalación mediante el juego de CDROMs de la distribución. Así pues, entraremos en el programa de instalación
de la misma forma que hemos hecho anteriormente ([5.3.1] y [5.3.2]) e inicialmente seguiremos los mismos pasos para
configurar el idioma de instalación, el teclado, particionar el disco duro y activar las particiones ([5.3.3], [5.3.4], [5.3.6],
[5.3.7], [5.3.8] y [5.3.9]), y para instalar el kernel ([5.3.10] 23). Llegados a este punto, tendremos que comprobar si el kernel
ha reconocido nuestra tarjeta de red y, si no es el caso, procediremos a instalar y configurar el módulo pertinente para
hacerla operativa24. Una vez hecho esto, deberemos configurar la red, especificar de qué sitio obtendremos las fuentes, y
apartir de ahí seguiremos los mismos pasos que en la instalación por CDROM para terminar la instalación.
5.4.3. Instalación del módulo de red
Éste es un punto clave para poder realizar la instalación por red, ya que es aquí donde, si el driver de nuestra tarjeta
de red no ha sido compilado dentro del kernel, deberemos seleccionar el módulo necesario para tener acceso a ella. En
primer lugar, pues deberemos averiguar si nuestra tarjeta de red ya ha sido detectada durante el proceso de arranque y se ha
cargado su correspondiente driver. Para hacerlo, accederemos al segundo terminal (ALT+F2) y ejecutaremos el comando
dmesg. Ahora debemos buscar, entre las muchas líneas que nos ha devuelto este comando, si hay algunas que hacen
referencia a nuestra tarjeta de red. A modo de ejemplo, para una tarjeta RTL-8029 (Realtek Semiconductors) se obtiene:
brau:~# dmesg
.
.
.
ne2k-pci.c:v1.02 10/19/2000 D. Becker/P. Gortmaker
http://www.scyld.com/network/ne2k-pci.html
PCI: Found IRQ 11 for device 00:0b.0
PCI: Sharing IRQ 11 with 00:07.2
eth0: RealTek RTL-8029 found at 0xe400, IRQ 11, 52:54:00:DB:FB:D4.
.
.
.
Si la búsqueda ha resultado infructuosa, debemos en primer lugar determinar qué tarjeta de red tenemos. Para esto lo
mejor es acudir a la documentación suministrada con ella o inspeccionándola visualmente. Si esto no és posible, hay otras
estrategias para deteminar cuál es nuestra tarjeta, como puede ser, pulsar ALT+F2 para acceder a la consola e investigar
el contenido del fichero /proc/pci (mediante cat, por ejemplo), o podemos recurrir a la información que nos puede
proporcionar algún otro sistema operativo que tengamos instalado en el ordenador.
Una vez conozcamos qué tipo de tarjeta de red es la que tenemos, debemos averiguar qué módulo es el que nos
servirá para acceder a la tarjeta. La estrategia más segura para este fin es recurrir a cualquier buscador 25, entrar palabras
clave sobre nuestra tarjeta (referencia de la tarjeta NIC linux module, por ejemplo) y leer algunas de
22 apt-get
upgrade
apartado Select Installation Medium escojeremos la opción /dev/fd0 e inmediatamente se nos pedira que insertemos el rescue disk seguido de los discos de drivers. Las imágenes de estos discos se hallan en
/cdrom/dists/woody/main/disks-i386/3.0.23-2002-05-21/images-1.44/bf2.4.
24 En muchos casos la configuración, paso de parámetros, se puede hacer de modo automático mediante modprobe, programa que se puede lanzar
desde la misma interficie de instalación después de la selección de un módulo
25 http://www.google.org
23 En
el
52
CAPÍTULO 5. TALLER DE INSTALACIÓN DE DEBIAN WOODY
las páginas encontradas. También se puede recurrir a las páginas de las principales distribuciones de linux, y entrar la
referencia de la tarjeta en sus buscadores. Como último recurso se puede recurrir a la documentación de módulos de red
del kernel, donde se especifica, para todas las tarjetas soportadas, el módulo correspondiente. También es bueno saber si
el fabricante ha desarrollado su propio módulo26.
Una vez hayamos averiguado el módulo que necesitamos, después de instalar el kernel ([5.3.10]), debemos seleccionar la propuesta que nos sugiere el menú principal Configure Device Driver Modules. Tras una pantalla de
advertencia, donde se nos recuerda que muchos drivers ya están incluidos en el kernel, entraremos en la pantalla de selección de módulos Select Category 27 , y mediante los cursores seleccionaremos la opción kernel/drivers/net.
Una vez dentro de la pantalla de seleción de módulos de tarjeta de red Select Kernel/drivers/net modules,
seleccionaremos otra vez con los cursores el módulo que necesitamos. Tras responder que sí a la pregunta sobre si realmente queremos instalar dicho módulo, podemos dejar que el autoprobe configure el módulo por nosotros, si no sabemos
que haya que passar algún parámetro en concreto al módulo en cuestión. Pasados unos instantes, recibiremos el mensaje
indicándonos si el módulo se ha instalado correctamente o no.
5.4.4. Configuración de la red
Una vez sepamos que la tarjeta de red está operativa, en el menú principal de la instalación seguiremos el paso
sugerido Configure the Network para proceder a la configuración de la red. En primer lugar deberemos configurar
el nombre del host (antes se ha sugerido brau, por ejemplo), sin entrar el dominio. A continuación deberemos entrar la
IP, la máscara de red, el gateway, el nombre de dominio, y los servidores de DNS, hasta un número de tres, separados por
espacios.
5.4.5. Configuración de apt
Una vez se ha configurado la red, todos los siguientes pasos a seguir son idénticos a los seguidos en la instalación
por CDROM, hasta llegar a la configuración de apt Apt Configuration. Llegados a este punto, en vez de escojer la
opción de cdrom, elijiremos la opción de red que más nos convenga. A efectos prácticos es lo mismo escoger el protocolo
http que el ftp. Después de realizar la selección se nos preguntará si deseamos usar paquetes de tipo non-US; en principio,
y salvo problemas legales, responderemos que sí. Respecto a la respuesta sobre la pregunta siguiente, referente al uso
de paquetes non-free, ya se deja que el mismo lector tome la decisión según sus principios éticos. Acto seguido se nos
pregunta de qué estado debe ser el mirror del qual apt deberá obtener los paquetes, debemos escoger siempre el que nos
sea accesible de forma más rápida posible, el qual siempre acostumbra a ser el más próximo, geográficamente hablando, a
nosotros. Una vez seleccionado el estado, se nos pide que seleccionemos un servidor en concreto 28. Resuelta esta cuestión,
se nos muestra la pantalla de configuración de acceso a través de proxy; si no tenemos que usar este servicio, dejaremos
en blanco la línea.
Es importante que los paquetes críticos en cuanto a seguridad se refiere, se obtengan de servidores seguros. Por esta
razón se recomienda que estos se obtengan en concreto de security.debian.org.
Terminados todos estos pasos apt conectará con el mirror que le hemos especificado para configurar su base de datos.
Apartir de este punto, para el resto de la instalación seguiremos los mismos pasos que en la instalación realizada mediante
CDROM.
5.5. Conclusión
En este taller hemos aprendido a instalar GNU/Linux en nuestro ordenador. Aunque por ahora nuestro sistema sea
muy básico, el objetivo del taller se ha cumplido plenamente, ya que hemos sentado las bases para poder empezar a sacar
partido de la flexibidad y potencia de este sistema operativo. En el próximo taller aprenderemos cómo configurar el sistema
e instalar nuevas aplicaciones para ir adaptándolo y dotándolo de todas las herramientas que estimemos necessarias para
cubrir nuestras necesidades.
26 Llegar
a encontrar un módulo para una tarjeta puede ser una tarea muy complicada, incluso imposible, ya que puede suceder que no haya soporte
para dicha tarjeta o que haya que recurrir a métodos avanzados para poderlo configurar; por este motivo se recomienda utilizar siempre tarjetas lo más
estándar possible.
27 Podemos acceder a esta interficie en cualquier momento, ejecutando el comando modconf. Este comando sirve como front-end para la administración de drivers que han sido compilados de forma modular junto al kernel.
28 La aplicación netselect destinada a facilitar la elección de servidores de paquetes según el critero de velocidad de acceso.
Capítulo 6
Configuraciones básicas
6.1. El sistema de login
Si todavía no tenemos configurado el entorno gráfico, cuando arrancamos un sistema GNU/Linux nos aparece una
pantalla de login dónde se pide al usuario que se identifique antes de empezar a utilizar el sistema. De hecho, la mayoría
de distribuciones lanzan varias consolas a las que podemos acceder a partir de ALT+F1, ALT+F2,. . . Ésto nos permite
trabajar simultáneamente con diferentes cuentas a la vez, tener varias sesiones abiertas para ejecutar diferentes programas,
etc.
El programa que se encarga de gestionar cada una de estas consolas es el getty. Lo único que hace este programa
es abrir una conexión con el dispositivo adecuado (en el caso de las consolas de la pantalla es el /dev/ttyX, dónde la
“X” es el número de consola) y lanzar la aplicación de login. Este mecanismo nos permite mucha flexibilidad, ya que el
mismo programa getty permite comunicarse con diferentes dispositivos, de forma que podríamos connectar un terminal
por el puerto serie del ordenador, montar una consola utilizando la línea telefónica y un módem, etc.
Antes de lanzar la aplicación de login, se muestra un mensaje de bienvenida por pantalla. Este mensaje lo podemos
configurar en el fichero /etc/issue, escribiendo lo que queramos. En este mismo fichero también podemos mostrar
algunas de las variables del sistema referenciándolas como:
“\d”
“\s”
“\l”
“\m”
“\n”
“\o”
“\r”
“\t”
“\u”
la fecha actual.
el nombre del sistema operativo.
el número de consola.
la arquitectura del ordenador.
el nombre del ordenador.
el nombre del dominio.
la versión del sistema operativo.
la hora actual.
número de usuarios activos en el sistema.
Una vez entremos en el sistema, el programa de login se encarga de mostrarnos el mensaje del día. Este mensaje es
lo que hay escrito en el fichero /etc/motd, que también podemos cambiar. Este mecanismo es muy útil para informar
a todos los usuarios de algún evento determinado, avisarles de algún problema, etc. Si un usuario quiere suprimir este
mensaje puede hacerlo creando un fichero vacío llamado .hushlogin en su directorio home. Después de mostrar este
mensaje, el proceso de login lanza el shell configurado por defecto para el usuario. Lo primero que hace el intérprete
de comandos es ejecutar el contenido del fichero .profile (que debe estar en el directorio home del usuario). Este
fichero sirve para que se ejecuten las instrucciones configuradas siempre que el usuario entre en el sistema. Además de
este ∼/.profile también tenemos el /etc/profile, que se ejecuta para todos los usuarios del sistema, muy útil
para poder configurarles a todos las opciones que queramos sin tener que poner las instrucciones dentro de cada uno de
los .profile de los usuarios.
6.2. Explorando el bash
Si bien el fichero .profile es ejecutado sea cual sea el shell que utilicemos, los archivos .bashrc o .bash_profile
se suelen ejecutar sólo cuando utilizamos el bash (aunque se puede configurar a partir del mismo .profile del usuario,
que es dónde se llama a la ejecución de este archivo). Vamos a ver algunas de las instrucciones que podemos encontrar en
estos ficheros:
53
CAPÍTULO 6. CONFIGURACIONES BÁSICAS
54
#CONFIGURACIONES BÁSICAS
mesg n
umask 022
#PATH
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:
/sbin:/bin:/usr/bin/X11
#PROMPT
export PS1=’\h:\w\$ ’
#ALIAS DE USUARIO
alias l=’ls --color=auto’
alias ll=’ls --color=auto -al’
alias rm=’rm -i’
alias cp=’cp -i’
alias mv=’mv -i’
alias v=’vim’
Como vemos, en este archivo podemos definir lo que queramos. Las dos primeras instrucciones del fichero anulan la
entrada de mensajes de otros usuarios y configuran los permisos que tendrán los nuevos ficheros que creemos. La siguiente
instrucción es la definición del PATH. El PATH son los directorios dónde tenemos los comandos, programas, aplicaciones,
etc. que queremos poder llamar desde cualquier sitio de la jerarquía de sistema de ficheros sin necesidad de escribir su ruta
completa (cada directorio del PATH lo separamos con “:”). Si quisiéramos poder ejecutar los programas del directorio
dónde estemos situados sin necesidad de poner “./” al principio, podríamos añadir ésta entrada en la declaración del
PATH (aunque no es recomendable por motivos de seguridad). Igualmente, si en el PATH no hay algún programa que
necesitamos ejecutar, podemos especificar la ruta completa del mismo en la línea de comandos. La siguiente declaración
es la del prompt del sistema. El prompt es la línea que aparece en el shell antes del caracter “#” (para el root) o “$” (para
los otros usuarios). Podemos configurarnos este prompt de la forma que queramos utilizando las siguientes variables del
sistema:
“\d”
“\h”
“\s”
“\u”
“\v”
“\w”
“\!”
“\$”
la fecha del sistema.
el nombre de la máquina.
el shell que utilizamos.
el nombre del usuario.
la versión del bash.
el directorio actual.
el número de historia del comando.
aparece “#” si somos el root o “$” para los otros usuarios.
Finalmente, tenemos los alias de usuario. Los alias son sinónimos, generalmente para los comandos que más utilizamos (para no tener que escribirlos completamente). Por ejemplo, en uno de los alias que teníamos en el ejemplo definíamos
que al escribir “l” se ejecutara “ls -color=auto”. De esta forma, podemos utilizar largos comandos sin tener que
estar escribiéndolo todo cada vez que los utilicemos. Podemos ver todos los alias definidos a partir del mismo comando
alias.
Tanto en la definición del PATH como en la del prompt hemos utilizado el comando export. Este comando nos
permite definir lo que llamamos una variable de entorno. Estas variables son utilizadas por el shell para realizar ciertas
operaciones, guardar algún tipo de información, etc. Podemos ver todas las que hay declaradas con el mismo comando
export. Con set y unset también podemos manipular otros atributos que tiene el intérprete de comandos. Algunas
de estas variables y atributos, que tiene por defecto el bash, son:
PWD: directorio actual.
BASH_VERSION: versión del bash que utilizamos.
RANDOM: genera un número aleatorio diferente cada vez que mostramos su contenido.
SECONDS: número de segundos que han pasado desde que hemos abierto el shell.
HOSTNAME: nombre del sistema.
OSTYPE: tipo de sistema operativo que estamos utilizando.
MACHTYPE: arquitectura del ordenador.
HOME: directorio home del usuario.
6.3. EL SISTEMA DE ARRANQUE
55
HISTFILESIZE: tamaño del fichero de historia (número de comandos que se guardan).
HISTCMD: número de comando actual en la historia.
HISTFILE: fichero dónde se guarda la historia de comandos (generalmente .bash_history del directorio
home del usuario).
Con la manipulación de estas variables podemos personalizar mucho más nuestro intérprete de comandos para adaptarlo a nuestros gustos y necesidades. Con “echo $NombreVariable” podemos ver el contenido de estas variables y
atributos.
6.3. El sistema de arranque
Aunque con la instalación del sistema operativo ya se lleva a cabo la configuración e instalación de un sistema de
arranque, en esta sección veremos con detalle qué opciones nos proporcionan y cómo debemos personalizarlos y adaptarlos a nuestras necesidades. Aunque existen muchos, el Lilo y el Grub son los más utilizados en los entornos GNU/Linux,
con lo cual sólo nos centraremos en ellos.
Antes de entrar en detalles sobre la configuración de estos dos programas, explicaremos como funciona el sistema
de arranque de un PC estándar. Tal y como ya sabemos, a partir de la BIOS o EFI del ordenador podemos configurar
la secuencia de arranque del mismo. En general, esta secuencia suele empezar buscando en la disquetera y sigue con el
CD/DVD y el disco duro. Aunque podemos instalar el Lilo o el Grub en un disquete o en el sector de arranque de un CD,
es más usual instalarlo en el disco duro para no tener que introducir el disco cada vez que arrancamos nuestro ordenador.
Cuando el sistema de arranque del ordenador va a buscar en el disco duro, lo primero que inspecciona es si la MBR
(Master Boot Record) del primer disco duro (máster del primer canal IDE o el primer disco del canal SCSI) contiene
alguna indicación del sistema a cargar. La MBR es la primera pista del disco duro, allí donde se guarda la información
de las particiones configuradas y, opcionalmente, el programa encargado de iniciar el sistema operativo. Si aquí no se
encuentra este programa, se inspecciona el sector de arranque de la partición activa del disco. Siempre que queramos
instalar un programa en el sistema de arranque del ordenador deberemos situarlo en alguna de estas zonas. En figura 6.1
podemos ver todo este proceso cuando la secuencia de arranque es primero la disquetera y después el disco.
DISCO DURO (hda)
DISQUETERA (A:)
1
MBR
2
hda1 (partición activa)
3
hda2
Figura 6.1: Proceso de arranque.
Siempre que instalemos un sistema de arranque debemos tener en cuenta que el orden con que se realiza esta secuencia
es importante: si instalamos uno en la MBR y otro en la partición activa, se ejecutaría el de la MBR porque la BIOS o
EFI inspecciona primero esta zona. Si no tuviéramos partición activa, deberíamos situar el programa de arranque en la
MBR. De todas formas, lo más recomendable es instalar siempre el programa en la MBR porque es lo primero que se
inspecciona. Aunque podamos tener instalados otros sistemas operativos en otros discos, deberemos instalar el Lilo o
Grub en alguna de estas zonas. En la configuración del programa ya le indicaremos dónde están situados los operativos
que queremos cargar.
6.3.1. Lilo
El Lilo nos permite múltiples configuraciones diferentes para realizar casi cualquier acción con el sistema de arranque
del ordenador. Para no extendernos innecesariamente, en esta sección sólo explicaremos las opciones más importantes para
poder configurar un sistema de arranque de múltiples operativos teniendo en cuenta la seguridad del mismo. En el manual
del programa y de su fichero de configuración (“man lilo” y “man lilo.conf”) encontraremos la especificación
completa para todas las otras opciones.
56
CAPÍTULO 6. CONFIGURACIONES BÁSICAS
El fichero de configuración del Lilo es el /etc/lilo.conf. Cuando ejecutemos lilo, el programa busca toda la
información en este fichero e instala el programa de arranque en la zona que le indiquemos. En este fichero de configuración tenemos dos secciones: la global y las locales a cada sistema operativo. En la sección global encontramos todas
las configuraciones generales para el programa. En cada línea podemos poner una directiva de configuración para indicar
algún tipo de información al programa. Las directivas más importantes de esta sección son las siguientes:
boot = DISPOSITIVO: le indicamos en qué dispositivo queremos instalar el Lilo. Si quisiéramos instalarlo en
la MBR del primer disco del canal IDE, en DISPOSITIVO pondríamos /dev/hda, si lo quisiéramos en la primera partición /dev/hda1, etc. También tenemos la opción de instalarlo en un disquete, indicando el dispositivo
/dev/ fd0.
default = NOMBRE: indicamos el sistema operativo que se cargará por defecto. El NOMBRE debe corresponder a alguna de las etiquetas configuradas en cada sistema de las secciones locales.
prompt: con esta directiva indicamos al programa que antes de cargar el sistema muestre un prompt por pantalla
para que podamos seleccionar el que queramos. Si no activamos esta opción no podremos seleccionar el operativo
a cargar y automáticamente ya se iniciará el que tengamos por defecto.
delay = TSECS: especifica el número de décimas de segundo que el Lilo esperará antes de cargar el sistema
opertivo por defecto (la directiva default debe existir). Esta opción es válida cuando sólo tenemos un sistema
operativo en el disco; si utilizamos prompt, tendremos que configurarlo con timeout.
timeout = TSECS: décimas de segundo que el Lilo esperará en el prompt antes de arrancar el sistema operativo
por defecto (deben existir la directiva de prompt y default).
lba32: esta opción nos sirve para poder arrancar cualquier partición del disco duro. Si desactivamos esta directiva no podremos arrancar sistemas operativos en particiones situadas en sectores superiores del disco (a partir del
cilindro 1024) y deberemos poner el arranque del sistema en una pequeña partición al inicio del disco (más información en “man lilo.conf”). Todas las BIOS a partir del 1998 soportan esta opción, de forma que es muy
recomendable utilizarla para ahorrarnos problemas.
Las directivas locales son las que corresponden con cada uno de los sistemas operativos instalados en las particiones de
nuestros discos. La primera directiva debe ser o bien image u other, la explicación de las cuales tenemos a continuación
(junto con otras directivas posibles):
image = CAMINO: el CAMINO nos indica el archivo que contiene la imagen núcleo del sistema operativo. Esta
opción sólo es válida para sistemas GNU/Linux o similares. Generalmente, las distribuciones crean un directorio
/boot/ donde se pone la imagen del núcleo del sistema, aunque también es usual poner un enlace en la raíz
llamado /vmlinuz (o similar). En esta directiva podemos especificar cualquiera de los dos.
other = CAMINO: dispositivo que contiene un sistema operativo diferente a GNU/ Linux o similar.
label = NOMBRE: etiqueta para el sistema operativo. Esta directiva es obligatoria para todas las secciones locales
que tengamos configuradas ya que sino no podríamos identificarlas de ninguna forma.
alias = NOMBRE: sinónimo para la misma sección local. Podemos tener tantos como queramos.
root = DISPOSITIVO: esta opción sólo es válida para los sistemas GNU/Linux o similares. Se le especifica en
qué dispositivo está situado la raíz del sistema de ficheros (root filesystem). Esta opción se pasa como argumento
al cargar el núcleo del sistema y es opcional; si no se le pasa nada se coge la que tiene configurada por defecto la
imagen del núcleo.
El sistema de arranque de un sistema GNU/Linux o similar nos permite, con un mismo sistema de ficheros, cargar
varios núcleos diferentes. De esta forma, sin la necesidad de instalar de nuevo el sistema, podemos trabajar con diferentes
núcleos. Para configurarlo tan solo tendríamos que especificar dos secciones locales poniendo, en cada una, qué núcleo
utilizaremos.
Hay algunas de las directivas del Lilo que también pueden ser configuradas directamente sobre la imagen del núcleo del
operativo. Con el comando rdev podemos configurar todas las posibles opciones de una imagen núcleo Linux. Algunas
de ellas son la raíz del sistema de ficheros (que si no lo configuramos con el Lilo se coge el que hay en la imagen), el
modo vga, etc.
Con el Lilo o el Grub podemos pasar parámetros al núcleo Linux en el momento de arrancar. Ésto es muy útil cuando
queremos realizar alguna operación específica en el sistema; por ejemplo, pasando single o 1 se iniciaría el sistema en
el runlevel 1, con root=/dev/hda3 especificaríamos la raíz del sistema de ficheros, etc.
6.3. EL SISTEMA DE ARRANQUE
57
Si queremos proteger adecuadamente el sistema de arranque del ordenador deberemos añadir algunas directivas más
en este fichero de configuración. Lo primero que debemos hacer es proteger la BIOS o EFI con una contraseña y configurar
la secuencia de arranque porque sólo se pueda realizar a partir del disco duro. Con ésto pasamos toda la responsabilidad
al Lilo. A partir de las directivas password = CONTRASEÑA y restricted podremos configurar la seguridad del
mismo de cinco formas diferentes:
Contraseña global
Contraseñas locales
Contraseña restringido global
Contraseña global y restringido local
Contraseña y restringido local
Debemos poner la directiva de password
en la sección global y al arrancar cualquiera de los sistemas se pedirá la constraseña.
En los sistemas que queramos que nos pida contraseña debemos poner la directiva
password y sólo al arrancar éstos se pedirá la misma.
Debemos poner la directiva de password
y restricted en la sección global y sólo al arrancar algún sistema pasando algún
parámetro al núcleo se pedirá la contraseña.
La contraseña se pone en la sección de global y sólo ponemos el restricted en
los sistemas que queremos que se pida contraseña al pasar algún parámetro al núcleo.
Es lo mismo que la configuración anterior
pero con la ventaja que podemos configurar diferentes contraseñas para los diferentes sistemas que queramos arrancar.
Debemos tener en cuenta que si utilizamos la directiva password, la constraseña se escribe en el fichero como un
texto, de forma que deberemos eliminar los permisos de lectura del lilo.conf para todos los usuarios menos el root.
Finalmente, después de escribir este fichero de configuración podemos instalar el Lilo en el sector de arranque configurado.
Para hacerlo, tan sólo debemos ejecutar “lilo”. Si quisiéramos desinstalarlo deberíamos pasarle el parámetro “-u”.
A continuación mostramos un ejemplo de este fichero de configuración, preparado para arrancar un sistema GNU/Linux
y otro WindowsTM:
lba32
boot = /dev/hda
prompt
timeout = 50
message = /etc/message
default = debian
restricted
password = contraseña
image
label
root
= /vmlinuz
= debian
= /dev/hda1
other
label
= /dev/hda3
= w2000
Toda esta configuración sirve para un arranque estándar del sistema. También hay otro tipo de arranque que utiliza
una imagen llamada de RAM Disk (initrd). Este otro tipo de arranque sirve para realizar una configuración modular del
núcleo Linux. Es muy utilizado cuando necesitamos un núcleo con alguna configuración especial, para incluir módulos
en el mismo núcleo, para realizar una imagen de arranque para un CD live, para tener una misma imagen para todos
los ordenadores de un laboratorio almacenada en un único servidor, etc. De todas formas, las instalaciones estándar del
sistema operativo no utilizan casi nunca este tipo de arranque. Si queremos crearnos una imagen de este tipo podemos
informarnos en el manual de initrd y en el del programa mkinitrd.
6.3.2. Grub
El Grub (GRand Unified Bootloader) es el programa de arranque del proyecto GNU. Igual que el Lilo, el GRUB
también nos sirve para instalar un programa en la zona de arranque que queramos del ordenador. A diferencia del Lilo,
58
CAPÍTULO 6. CONFIGURACIONES BÁSICAS
tiene muchísimas más posibilidades que lo hacen muy versátil: permite tener un pequeño intérprete de comandos al
arrancar el ordenador, nos permite acceder a los archivos de las particiones del disco sin cargar ningún operativo, etc.
Como en el caso anterior, en esta sección sólo veremos su configuración básica. Si quisiéramos profundizar más en su
uso, podemos recorrer a su manual o en el HOWTO correspondiente.
El sistema de arranque del Grub se carga en dos fases. Generalmente, con la instalación del paquete, se incorporan
dos ficheros correspondientes a estas dos fases. Si queremos que al arrancar el Grub no nos muestre ningún menú para
seleccionar el operativo que queremos cargar, sólo deberíamos ejecutar el programa grub y en el intérprete de comandos
que nos muestra ejecutarle:
$ install (hd0,0)/PATH/stage1 d (hd0) (hd0,0)/PATH/stage2
Esta instrucción instala el Grub en la MBR del disco maestro del primer canal IDE. La forma como se referencian los
discos varía un poco de como se hace en GNU/Linux y con el Lilo. En “hdX” la “X”, en lugar de “a”, “b”,. . . , es “0”,
“1”,. . . Para las particiones también se empieza con el número “0” para denominar la primera y a diferencia de hda1 se debe escribir (hd0,0) y consecutivamente para las otras. Leyendo la instrucción de esta forma fijémonos como el primero
parámetro sirve para designar dónde está el archivo de la primera fase del Grub (le indicamos la partición correspondiente,
directorio -PATH- y fichero -stage1-). Generalmente, cuando instalemos el paquete del Grub también se añaden estos
dos ficheros para cada una de las fases de carga (suelen estar situados en /usr/share/grub/i386-pc/). El parámetro d (hd0) indica que la primera fase del Grub se instalará en la MBR del primer disco. La última opción especifica
dónde está situado el fichero para la segunda fase de carga, que es ejecutada por la primera.
Con esta configuración, al reiniciar el ordenador aparecería, por defecto, el intérprete de comandos del Grub. Con
él podemos manipular muchos aspectos del disco, arrancar el sistema operativo que queramos, etc. Para ver todos los
comandos disponibles en el shell del Grub podemos apretar TAB. También se incluyen ayudas para tener una referencia completa de todos los comandos. Si quisiéramos arrancar un sistema GNU/Linux deberíamos escribir las siguientes
instrucciones:
$ kernel (hd0,0)/vmlinuz root=/dev/hda1
$ boot
Con la primera indicamos dónde está situada la imagen núcleo (con los parámetros que quisiéramos) y con la segunda
iniciamos el proceso de carga del operativo. Si quisiéramos un menú de selección para no tener que escribir estos comandos cada vez que arrancamos el ordenador podríamos generar un fichero de menú como el siguiente (los comentarios
empiezan por “#”):
#Especificación del operativo que se cargará por defecto.
#Este número está en correspondencia con el orden de los
#sistemas que hay en las secciones locales a los operativos.
default 0
#Indicamos que espere 10 segundos antes de cargar el sistema
#configurado por defecto.
timeout 10
#Configuración de arranque para un sistema GNU/Linux
title Debian GNU/Linux
kernel (hd0,0)/vmlinuz root=/dev/hda1
#Configuración de arranque para un sistema Windows
title W2000
root
(hd0,2)
makeactive
Para instalar el Grub con este menú de arranque deberíamos ejecutar la misma instrucción que anteriormente pero
añadiendo el parámetro p (hd0,0)/PATH/menu.lst con el disco, camino y fichero de menú. Para proteger el sistema de arranque (que desprotegido es aún más peligroso que con el Lilo) podemos poner la directiva de password
CONTRASEÑA en la sección global del fichero de configuración. De esta forma, cuando desde el menú se quiera entrar
en el shell del Grub se pedirá la contraseña. Como en el caso del Lilo, si utilizamos esta directiva es muy importante que
sólo el root pueda leer este archivo de configuración (aunque en este caso también hay la opción de poner la contraseña
cifrada con MD5).
6.4. ACCESO A OTRAS PARTICIONES Y DISPOSITIVOS
59
6.4. Acceso a otras particiones y dispositivos
Los sistemas tipo UNIX tratan todos los dispositivos del ordenador como si fueran ficheros. Esto nos permite mucha
flexibilidad ya que podemos aprovechar todos los mecanismos y funciones que utilizábamos con los ficheros y aplicarla
a los dispositivos. En el directorio /dev/ tenemos todos los dispositivos reconocidos por el sistema. Si el sistema no
reconociera adecuadamente un dispositivo o quisiéramos crear uno de especial, el comando mknod nos permite realizar
esta clase de operaciones, aunque es importante saber exactamente qué queremos hacer antes de utilizarlo ya que su mal
uso podría dañar partes del sistema.
Para las unidades de almacenaje el sistema nos proporciona otro tipo de operación para poder acceder a sus sistemas
de archivos, la de montaje. Para esta operación utilizaremos los comandos mount y umount, que sitúan (montan) o desmontan todo el sistema de ficheros de un determinado dispositivo/unidad en un directorio existente del sistema. La forma
básica de utilizar el comando es “mount dispositivo directorio”, dónde dispositivo puede referenciar
cualquier dispositivo del canal IDE o SCSI (/dev/hdXX, /dev/sdXX), la disquetera (dev/fdX), cintas de backups,
etc. y directorio es la ubicación dónde montaremos la estructura de ficheros del dispositivo. Es recomendable que
el directorio donde montemos estos dispostivos esté vacío, ya que cuando se utiliza como punto de montaje no se puede
acceder a ellos. Para la disquetera y CD/DVD muchas distribuciones ya crean un directorio por defecto dónde montarlos
(/floppy/ o /mnt/floppy/ y /cdrom/ o /mnt/cdrom/). También se suele proporcionar el directorio /mnt/,
dónde podemos crear otros directorios para los otros dispositivos que tengamos en el sistema.
Para desmontar uno de estos dispostivos podemos utilizar “umount directorio”, dónde directorio debe ser el
punto de montaje utilizado. Si montamos dispositivos como un disquete o CD, es importante no sacar del dispositivo del
soporte ya que antes debemos avisar al sistema para que actualice la cache del sistema de ficheros del dispositivo. Igualmente, tampoco podremos desmontar el dispositivo si algún usuario o aplicación está utilizando alguno de sus archivos o
directorios (al intentarlo, el sistema daría un mensaje de error).
Fijémonos que con el comando de montaje no estamos especificando en ningún momento el tipo de sistema de ficheros
utilizado en la unidad que queremos montar, de forma que se deberá determinar de forma automática. Si quisiéramos
especificarlo manualmente, podríamos pasar al comando mount el parámetro “-t tipo” dónde tipo podría ser alguno
de los de la siguiente tabla (ir al manual de mount para ver el listado completo):
TIPO
ext
ext2
ext3
swap
sysv
minix
iso9660
nfs
smbfs
ntfs
msdos
vfat
SISTEMA
GNU/Linux (versiones de núcleo anteriores a 2.1).
GNU/Linux (versiones de núcleo posteriores a 2.1).
GNU/Linux (versiones de núcleo posteriores a 2.2 o 2.4).
Sistema de swap de GNU/Linux.
Sistemas tipo UNIX.
MINIX.
Sistema de ficheros que utilizan la mayoría de CDs.
Sistema de ficheros remoto (Network File System).
Sistema de ficheros remoto en redes WindowsTM(Samba File System).
Rama de WindowsNTTM.
MS-DOSTM .
Rama de Windows95TM.
Además de pasar el tipo de sistema de ficheros utilizado por la unidad que queremos montar también podemos indicar
otras opciones que nos pueden ser muy útiles en determinadas situaciones (siempre precedidas por “-o” y, si queremos
pasar más de una, separadas por comas):
significado de la opción
permitimos
no permitimos
Ejecución de binarios
exec
noexec
Uso del bit de SetUserId
suid
nosuid
Ficheros de sólo lectura
ro
rw
Sistema sincronizado (uso de cache de disco)
sync
async
Interpretación de caracteres o bloques especiales
dev
nodev
Permiso para que cualquier usuario monte o desuser
nouser
monte el dispositivo
Sistema de tipo swap
sw
(si pasásemos defaults se utilizarían las opciones rw, suid, dev, exec, auto,
nouser y async)
En la figura 6.2 podemos ver un ejemplo de utilización de este comando para montar varios dispositivos diferentes:
Además de estos comandos para montar y desmontar unidades, el sistema operativo nos proporciona otra forma de
hacer lo mismo y tener siempre una determinada configuración según la unidad. En el fichero /etc/fstab podemos
CAPÍTULO 6. CONFIGURACIONES BÁSICAS
60
hda
hda1 (ext2)
linux root
filesystem
MASTER
hda2 (swap)
hda3 (ntfs)
W2000
IDE 1
hdb
SLAVE
mount −t ntfs −o ro /dev/hda3 /mnt/w2000
hdb1 (fat32)
/
mnt
cdrom
floppy
MASTER
IDE 2
w2000
infor
FLOPPY DISK
mount −t vfat /dev/hdb1 /mnt/info
mount /dev/hdc /cdrom
mount /dev/fd0 /floppy
Figura 6.2: Montaje de dispositivos.
guardar esta información de forma que cada línea indicará una unidad con su directorio de montaje y las opciones que
queramos configurarle. La sintaxi de cada una de estas líneas será:
<disp> <dir> <tipoSistema> <opciones> <dump> <orden>
En el primer campo le debemos especificar el dispositivo tal y como hacíamos con el comando de mount y el segundo
será el directorio donde queramos montar la unidad indicada. En el campo de tipoSistema le podemos especificar
el sistema de ficheros que utiliza la unidad o bien auto para que lo detecte automáticamente. En opciones podemos
escribir las mismas que utilizábamos con el comando de mount, separadas por comas si ponemos más de una. Una opción
útil de este campo es la configuración de auto o noauto, con lo cual indicamos al sistema que monte automáticamente
(o no) la unidad al arrancar. El campo de dump indica si queremos realizar copias de seguridad (más información en el
manual de dump). Si no utilizamos este sistema podemos poner un “0”. El último campo sirve para indicar el orden de
montaje de las unidades. Si le ponemos un “0” indicamos que el orden no es importante. La raíz del sistema de ficheros
es lo primero que se debe montar, con lo cual en este campo debería haber un “1”.
Una entrada que siempre veremos en este fichero y que nos puede sorprender es la del directorio /proc/, que tiene
un significado especial. Realmente lo que hay en este directorio no son ficheros, sino el valor de muchas de las variables
que utiliza el núcleo del sistema. Siguiendo la misma política del operativo, con la cual todo se debe poder referenciar
como un archivo, en el directorio /proc/ también podemos manipular variables internas del núcleo tal y como si fueran
ficheros.
Aunque todo este diseño para montar las unidades en la estructura jerárquica de directorios es muy potente y nos
permite mucha flexibilidad, en algunos casos no es muy práctico. Por ejemplo, cada vez que queramos copiar un archivo
a un disquete tendremos que montar la unidad, copiar y desmontarla de nuevo. Por esta razón existen algunas otras
aplicaciones que nos facilitan todo este proceso para ahorrarnos algunos pasos. Una de ellas son las mtools, que es
un paquete con varias aplicaciones que nos permiten copiar directamente archivos a y desde un disquete y algunas otras
herramientas interesantes. También existe un paquete llamado autofs, que detecta automáticamente la inserción de
algún dispositivo en el sistema y los monta sin necesidad de escribir ningún comando.
6.5. Configuración de dispositivos
Aunque en los inicios de GNU/Linux no era así, actualmente cada vez más fabricantes proporcionan drivers para sus
dispositivos especiales para GNU/Linux. Antes de intentar configurarlos debemos buscar información sobre los mismos
en los mismos manuales del sistema, los módulos, en Internet, etc. para ahorrarnos problemas en su puesta en marcha.
Aunque acutalmente la mayoría de dispostivos cuentan con HOWTOS, manuales o algún tipo de documentación, es
importante que antes de comprar uno nuevo nos informemos adecuadmante de si existe algún driver disponible para él.
Aunque en esta sección sólo veremos cómo configurar algunos de los dispositivos más frecuentemente utilizados
en los ordenadores personales, según la distribución que utilicemos el proceso puede variar significativamente. En toda
la sección nos hemos basado en el sistema que se utiliza en Debian GNU/Linux, aunque aprendiendo desde la base
6.5. CONFIGURACIÓN DE DISPOSITIVOS
61
cómo funciona este proceso no deberíamos tener problemas para buscar cuál es la configuración que se utiliza en otras
distribuciones.
6.5.1. El teclado
La correcta configuración del teclado es un aspecto muy importante para poder solucionar cualquier problema que nos
surja con él. En primer lugar, debemos saber que cuando el sistema arranca, se carga un mapa de caracteres correspondiente al configurado en el proceso de instalación. Este mapa de caracteres se suele encontrar situado en /etc/console/
boottime.kmap.gz o en algún otro directorio de /etc/. Si cambiásemos de teclado sólo tendríamos que cambiar
este fichero con el que correspondiera con el nuevo teclado y al arrancar de nuevo ya se cargaría el nuevo mapa. Todos
los mapas de caracteres existentes se suelen situar dentro del directorio /usr/share/keymaps/ ordenados por arquitecturas de ordenadores y países. Concretamente, el que utilizamos en España con ordenadores basados en la arquitectura
i386 y un teclado estándar lo encontraríamos en i386/qwerty/es.kmap.gz.
Aunque todos estos mapas de caracteres están comprimidos en formato gzip, podemos descomprimirlos y cambiar alguna de sus entradas para adaptarlas a nuestras necesidades. En cada línea encontramos la directiva keycode, que indica
que estamos definiendo una tecla, indicada en el número que sigue a la directiva (podemos saber qué número corresponde
con cada una de las teclas a partir del comando showkey). Después de esta definición tenemos los significados que tiene
la tecla apretándola sola, con el SHIFT, etc. Veámoslo con un ejemplo:
keycode 53 = minus underscore
control keycode 53 = Delete
En la primera línea se indica qué carácter corresponde al apretar la tecla sola (minus) o con el SHIFT apretado
(underscore). La segunda nos muestra la función a realizar en caso de apretar la tecla juntamente con la de CTRL
(se eliminaría el siguiente caracter). Toda la información necesaria para configurar correctamente un archivo de este tipo
la podemos encontar en el manual de keymaps, muy útil cuando nos encontremos con algún problema con teclados
especiales o de otros países. Si no queremos reiniciar el sistema al cambiar este fichero de mapa, podemos utilizar el
comando loadkeys (dumpkeys nos muestra las configuradas).
Con el programa consolechars podemos cargar la fuente que queramos en el terminal. Debemos diferenciar
claramente lo que es una fuente y lo que es el mapa de caracteres: el mapa nos determina qué significado tiene cada
tecla mientras que la fuente es tan solo la representación gráfica que le damos a la misma. Toda la configuración de las
fuentes de caracteres se suele encontrar en /etc/console-tools /config. Con el comando “dpkg-reconfigure
console-data” Debian nos proporciona un sistema de reconfiguración con diálogos.
Otro aspecto relacionado con el teclado es el tema de las diéresis, acentos, etc. Todo esto lo podemos configurar a
partir del fichero de /etc/inputrc (todas las directivas posibles de este fichero las tenemos especificadas en el manual
de readline). La que nos puede ser más útil es la de convert-meta, que desactivándola (set convert-meta
off) nos permite utilizar los acentos y diéresis (para el catalán).
Finalmente, otra configuración importante (indirectamente relacionada con el teclado) es la de locales. Con locales
podemos configurar la zona o zonas geográficas a las que estamos para poder utilizar teclas especiales en el teclado, ver
las fechas en el formato al que estamos acostumbrados, etc. Esta configuración es utilizada por muchas de las librerías del
sistema, de forma que en muchos comandos y aplicaciones del sistema, se utilizará su configuración para adaptar algunas
funciones a nuestro entorno local. Su configuración la podemos encontrar en /etc/locale.gen y podemos utilizar
los comandos locale-gen y locale para verla o actualizarla. En Debian también podemos utilizar “dpkg-reconfigure
locales” para reconfigurarlo, con lo que se nos guiará a partir de un sistema de diálogos.
6.5.2. Tarjeta de red (tipo Ethernet)
Para configurar una nueva tarjeta de red (tipo Ethernet) o NIC (Network Interface Card) lo primero que debemos hacer
es añadir el módulo del núcleo necesario para que se reconozca adecuadamente. Aunque en algunas tarjetas es posible que
no tengamos que realizar este paso porque el mismo núcleo ya puede estar compilado para reconocer las más habituales
debemos asegurarnos (antes de comprar la tarjeta) que existe el driver o módulo necesario para ella.
Con “discover -module Ethernet” podemos saber qué módulo necesita nuestra tarjeta de red. Si queremos
dejarlo configurado para que se cargue siempre deberíamos escribirlo en /etc/modules (sino, con modprobe o
insmode podemos insertarlo).
Una vez el sistema reconoce la tarjeta ya podemos configurarla de la forma que queramos. En el fichero /etc/network/
interfaces podemos especificarle toda su configuración, dónde también tendremos la de todas las otras interfícies del
sistema. Una interíficie es un dispositivo (real o lógico) relacionado con la red a partir del cual el sistema se puede comunicar con otros ordenadores, ofrecer unos determinados servicios, etc. Son las puertas que tiene el sistema para poderse
CAPÍTULO 6. CONFIGURACIONES BÁSICAS
62
comunicar. Para cada interfície reconocida en el sistema, en este fichero se le especifican las directivas necesarias para su
correcto funcionamiento. Vamos a verlo con un ejemplo:
#Interfície de loopback
auto lo
iface lo inet loopback
#NIC
auto eth0
iface eth0 inet static
address 192.168.0.10
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
#opcional
#opcional
#opcional
La primera entrada que encontraremos en este fichero suele ser para la interfície de loopback. Esta interfície no se
corresponde con ninguna tarjeta ni dispositivo real del ordenador, sino que es un mecanismo del operativo que le permite
utilizar los protocolos de comunicación de forma interna. De esta forma, si probamos funciones de la red sin comunicarnos
con ningún otro ordenador no hace falta ni tan solo tener una tarjeta de red instalada. En todas las entradas encontramos la
directiva de auto antes de especificar la configuración del dispositivo. Esta directiva indica que la tarjeta se puede montar
automáticamente cuando el sistema arranca. La directiva de iface especifica el tipo de tarjeta y protocolo que se utilizará
con ella con la siguiente sintaxi: “iface dispositivo familiaProtocolo métodoConfiguración”. Con
las tarjetas Ethernet el dispositivo será ethX, dónde la “X” será un número empezando por “0”, que indica el número de
tarjeta instalada en el ordenador. La familia del protocolo de comunicación utilizado con la tarjeta suele ser cualquiera de
los siguientes:
inet: IPv4, utilizado en Internet y la mayoría de redes locales.
inet6: IPv6, la nueva versión de IPv4, que poco a poco se va instaurando.
ipx: para redes NovellTM.
Finalmente, en el último campo se indica como se obtiene la configuración de red de la tarjeta (su dirección, la red
dónde está, el gateway a utilizar, etc.). En la siguiente tabla podemos ver cuáles son estas opciones para la familia de
protocolos inet:
CONFIG
loopback
OPCIONES
static
address
netmask
broadcast
network
gateway
dhcp
hostname
leasehours
leasetime
vendor
client
bootp
bootfile
server
hwaddr
ppp
provider
DESCRIPCIÓN
Método para definir la interfície de loopback (se debe utilizar con la interfície
lo).
Método para configurar una NIC con una dirección IP estática.
Dirección IP de la interfície. Campo requerido.
Máscara de la dirección IP. Campo requerido.
Dirección de broadcast. Si no se especifica se calcula automáticamente.
Dirección de identificación de red. Sólo requerida para versiones del núcleo
2.0.X.
Dirección IP del gateway que utilizamos para esta interfície.
Método para configurar de forma remota la IP de todos los ordenadores de una
red local (Dynamic Host Configuration Protocol).
IP del servidor de DHCP.
Tiempo, en horas, de alquier de la IP (pasado este tiempo se renueva).
Tiempo, en segundos, de alquier de la IP.
Identificador de tipo de servidor (en general, dhcpd).
Identificador del tipo de cliente (en general, dhcpd).
Método para configurar de forma remota la IP de todos los ordenadores de una
red local (BOOT Protocol). Actualmente se utiliza más DHCP.
Fichero a utilizar en el momento de arranque.
Dirección IP del servidor de BOOTP.
Dirección MAC del servidor BOOTP.
Método utilizado con el protocolo Point to Point Protocol, usado en los módems.
Proveedor del servicio.
6.5. CONFIGURACIÓN DE DISPOSITIVOS
63
A partir de las versiones 2.2 del núcleo Linux ya se puede utilizar una nueva infrastructura de red denominada iproute2. Con ella podemos manipular todos los aspectos relacionados con nuestras NIC y las tablas internas que utiliza el
operativo para manejar todo lo relacionado con la red.
Aunque en este capítulo no entraremos en redes de computadores, debemos saber que disponemos de muchos comandos para manejar la configuración de red del sistema operativo. Los más importantes son ifconfig, con el cual
podemos ver los dispositivos configurados, ifdown e ifup, que nos permiten apagar o encender la interfície que queramos y route, que nos muestra la tabla de routing del sistema.
6.5.3. Tarjeta WiFi
Las redes de comunicación sin cables son cada vez más frecuentes, tanto en instalaciones domésticas como en instituciones, escuelas o empresas. Para la instalación de las mismas se debe disponer de lo que denominamos puntos de acceso,
que son unos dispositivos conectados a la red física de la institución. Estos puntos de acceso permiten que, a partir de unas
tarjetas PCMCIA, cualquier ordenador de su alrededor pueda conectarse a la red. De esta forma, se simplifica mucho el
cableado de los edificios.
Para que nuestro GNU/Linux detecte y configure adecuadamente una tarjeta wireless (de tipo PCMCIA) debemos
añadir al núcleo del sistema los módulos orinoco_cs y hermes, que en muchos casos ya vienen compilados en el
mismo núcleo. Toda la configuración de estas tarjetas se guarda en los ficheros del directorio /etc/pcmcia/. Lo único
que debemos añadir en el fichero /etc/pcmcia/config.opts es (dependiendo de la tarjeta deberíamos cambiar la
directiva de “card”):
card " Conceptronic Wireless"
version "802.11", "11Mbps Wireless LAN Card"
bind "orinoco_cs"
Con esto ya conseguimos que el sistema reconozca la tarjeta wireless como un dispositvo más del sistema. Si no tenemos ninguna otra tarjeta Ethernet instalada se referenciará como eth0, eth1 si ya tenemos una, etc. A continuación, lo
único que nos faltaría para que la tarjeta se conecte al punto de acceso sería editar el fichero /etc/network/interfaces
y añadirle la configuración necesaria para que se le asignara una IP. Naturalmente, esta interfície del sistema la podemos
tratar como cualquier otra, utilizando los mecanismos de firewall del sistema, con las aplicaciones iproute2, etc.
6.5.4. Módems
Para la configuración de un módem generalmente se suele utilizar la aplicación pppconfig, que escribe los archivos
de configuración necesarios para el daemon del sistema ppp, que es el programa encargado de establecer la conexión a
Internet. Con pppconfig (o aplicaciones similares) siempre se deben realizar unos determinados pasos, que detallamos
a continuación (para nuevas conexiones):
1. Nombre del proveedor: el proveedor es la empresa con la que tenemos el contrato de conexión a Internet. Este
nombre sirve para poder identificar cada conexión que configuremos de forma única.
2. Configuración de servidores de nombres: cuando establecemos el contrato con nuestro proveedor, generalmente
se suelen proporcionar la/s IP/s de los servidores de nombres que deben utilizarse. Si tenemos estas IPs debemos
indicar que utilizamos una configuración estática, con lo cual seguidamente se nos pedirán estas IPs. Sólo en el caso
que nuestro proveedor nos indique que la configuración de DNS es dinámica, debemos escoger este otro tipo de
configuración. Con la tercera opción, que nos informa que DNS será tratado por otros medios, podemos utilizar la
configuración del fichero /etc/resolv.conf.
3. Método de autentificación: el método de autentificación puede ser PAP o CHAP. Generalmente los proveedores
suelen utilizar el PAP (Peer Authentication Protocol), aunque si no funcionara deberíamos informarnos adecuadamente.
4. Nombre de usuario y contraseña: ésta es la información que nos proporciona el proveedor para poder conectarnos
y acceder a sus servicios.
5. Velocidad del módem: según qué módem tengamos podremos acceder a Internet a más o menos velocidad. Actualmente todos van a 115200 bps, con lo que lo más recomendable es dejar el valor “115200”. Si tuviéramos un
módem más lento ya se suele detectar y reconfigurar automáticamente en el momento de la conexión.
6. Llamada con pulsos o tonos: la mayoría de centralitas telefónicas ya funcionan con tonos, aunque en determinadas
zonas rurales aún se utiliza el antiguo sistema de pulsos.
CAPÍTULO 6. CONFIGURACIONES BÁSICAS
64
7. Número de teléfono: este número también debe propocionarlo el proveedor de Internet.
8. Puerto de comunicación: el puerto de comunicación es el puerto en el cual tenemos conectado el módem. Si le
indicamos que lo detecte automáticamente, se realizará un chequeo de todos los puertos y se configurará automáticamente. Sino podemos indicarlo con /dev/ttySX dónde la “X” es un 0 para el COM1, un 1 para el COM2,
etc.
Toda esta configuración se suele almacenar en los archivos situados en el directorio /etc/ ppp/. Aunque también
podemos editar estos ficheros y cambiar las directivas manualmente, es más recomendable utilizar alguna aplicación
automática ya que su configuración es bastante compleja. Para establecer la conexión con nuestro proveedor, deberíamos
iniciar el daemon ejecutando “/etc/init.d/ppp start”. Para pararlo podemos utilizar “/etc/init.d/ppp
stop”.
6.5.5. Tarjeta de sonido
La tarjeta de sonido necesita la inserción de un módulo del núcleo del sistema para poder funcionar correctamente.
Si tenemos instalada la aplicación discover podemos descubrir qué módulo es el que corresponde con nuestra tarjeta
con el comando “discover -module sound”. Para instalar el módulo podemos utilizar los comandos insmod o
modprobe y si queremos dejarlo configurado permanentemente deberíamos escribirlo en el fichero /etc/modules.
Aunque con la inclusión del módulo correspondiente ya podremos utilizar la tarjeta de sonido adecuadamente, generalmente también se suele instalar la infrastructura de sonida ALSA (Advanced Linux Sound Architecture). ALSA es
un proyecto que ha desarrollado mucho software relacionado con aplicaciones de tratamiento de sonido, nuevos módulos
para el núcleo Linux, etc. Generalmente, la mayoría de distribuciones lo suelen incluir por defecto, aunque si no es así se
puede instalar con el paquete correspondiente.
6.5.6. Impresora
En GNU/Linux la configuración de impresoras se puede realizar con muchas aplicaciones diferentes. Aunque el lpd
(Line Printer Daemon) fue uno de los primeros programas de gestión de impresión que aparecieron en los sistemas tipo
UNIX, actualmente existen muchísimos otros de más fácil configuración y gestión. A continuación comentamos algunos
de los más utilizados:
lpd: uno de los primeros daemons de impresión de los sistemas tipo UNIX. Su configuración debe realizarse
manualmente.
lpr: la versión de BSD del lpd. Es muy recomendable utilizar algún tipo de filtro automático como magicfilter
o apsfilter para configurar las impresoras. Este tipo de filtro detecta automáticamente el tipo de fichero a imprimir y prepara la impresión adecuadamente (utiliza un filtro llamado IFHP).
lprng: aplicaciones basadas en lpr con la ventaja que incorpora una herramienta de configuración denominada
lprngtool que permite realizar la configuración de forma gráfica y sencilla.
gnulpr: la versión de GNU del sistema de impresión lpr. También incorpora herramientas gráficas de configuración, gestión de los servicios, etc.
CUPS: de Common UNIX Printing Systems, este conjunto de aplicaciones es compatible con los comandos de
lpr y también sirve para redes WindowsTM. Utiliza un conjunto de filtros propios y soporta la gran mayoría de
impresoras del mercado.
Aunque todas estas aplicaciones tienen sus propios métodos de configuración, todas utilizan el fichero /etc/printcap
para guardarla. Generalmente también utilizan algún tipo de daemon para que el sistema de impresión sea operativo. El
daemon se puede configurar para que el ordenador dónde la impresora está conectada sirva como servidor de impresión.
De esta forma, varios ordenadores de la misma red podrán utilizar la misma impresora, ahorrando recursos. Para los clientes de impresión se pueden utilizar los mismos programas especificando, en la configuración, que la impresora es remota
(generalment se debe proporcionar la IP del servidor de impresión y la cola).
Si quisiéramos configurar un servidor de impresión para redes Windows TM o configurar una impresora de un servidor
WindowsTM desde un cliente GNU/Linux deberíamos utilizar otro tipo de programas. Samba es un conjunto de aplicaciones de GNU/Linux que utilizan los protocolos de las redes Windows TM. Aunque sus funcionalidades van mucho más
allá de la configuración de un servidor o cliente de impresión, para poder utilizar impresoras en Windows TM tendremos
que utilizar este conjunto de aplicaciones o bien las que nos proporciona CUPS.
Al configurar un servidor de impresión es importante que configuremos adecuadamente desde qué máquinas/usuarios
permitimos la impresión. De otra forma un atacante podría aprovechar la vulnerabilidad y aprovechar nuestros recursos,
dejar la impresora sin papel, etc.
Capítulo 7
Daemons y runlevels
7.1. Los daemons
Como ya sabemos, GNU/Linux nos permite ejecutar simultáneamente tantos procesos como queramos repartiendo
equitativamente el tiempo de la CPU entre ellos. De hecho, el mecanismo de manejo de procesos también debe tener en
cuenta lo que se llaman interrupciones. Una interrupción es una señal que llega al núcleo del sistema desde cualquiera
de los dispositivos que tenemos instalados en nuestro ordenador. Estas interrupciones suelen estar vinculadas a algún
proceso en concreto, de forma que el núcleo debe despertar el proceso en cuestión (si no está en ejecución) y redirigirle
la interrupción para que la procese adecuadamente. Un ejemplo típico de interrupción es cuando apretamos una tecla
del teclado o movemos el ratón: al hacerlo, el dispositivo envía una señal que debe ser redirigida hacia la aplicación
correspondiente para que sea tratada de forma adecuada.
Para poder manejar adecuadamente todas las interrupciones que se producen, el núcleo no escucha permanentemente
a los dispositivos del sistema esperando sus señales. En lugar de eso, el sistema ejecuta las operaciones de los procesos en
cola de ejecución y sólo cuando se produce una interrupción atiende al dispositvo que la ha generado. Esto debe realizarse
de esta forma debido a la gran diferencia de velocidad entre los dispositivos del sistema y la CPU. El tratamiento de
interrupciones es fundamental para cualquier sistema operativo ya que es este mecanismo, entre otros, el que nos permite
mantener en ejecución tantos procesos como queramos y, en cuanto lleguen las interrupciones, despertar a los procesos
que las están esperando (figura 7.1).
1
procesos en cola de ejecución
CPU
DISPOSITIVO
núcleo
ejecutándose
procesos suspendidos
(en espera de una señal)
procesos en cola de ejecución
2
CPU
DISPOSITIVO
núcleo
ejecutándose
INTERRUPCIÓN
procesos suspendidos
(en espera de una señal)
3
procesos en cola de ejecución
CPU
DISPOSITIVO
el núcleo trata la
interrupción y la redirige
al proceso correspondiente
(si está suspendido lo
despierta y lo pone en la
cola de ejecución)
procesos suspendidos
(en espera de una señal)
Figura 7.1: Interrupciones.
65
CAPÍTULO 7. DAEMONS Y RUNLEVELS
66
Un daemon (Disk And Execution MONitor) es un proceso que, generalmente, tenemos cargado en memoria esperando
alguna señal (provinente de una interrupción de dispositivo o del mismo núcleo) para que sea despertado y ejecute las
funciones necesarias para tratarla. Aunque esta definición también puede encajar con otros procesos del sistema (lanzados
por los usuarios o por el mismo sistema) un daemon también suele ajustarse a esta forma de ejecución (aunque en algunos
casos especiales, no). De esta forma, los daemons que tengamos cargados no ocupan la CPU mientras no es estrictamente
necesario y por muchos que tengamos en memoria siempre podremos trabajar con el ordenador sin problemas.
Aunque un daemon sea un proceso como cualquier otro que se ejecuta en modo background, la forma como los
organizamos y tratamos sí que es diferente del resto de comandos y programas del sistema. Generalmente, todos los
daemons tienen un shell script situado en el directorio /etc/init.d/ que nos permite iniciarlo, pararlo o ver su
estado de ejecución. Los shell scripts de los daemons no son más que una herramienta para facilitar todo su proceso de
arranque, parada, etc. En algunos casos, también podemos utilizar el mecanismo y organización de estos daemons para
poder ejecutar ciertas operaciones que nos interesen (escribiendo un shell script que se ejecute al entrar en un determinado
nivel de ejecución). Para realizar algunas de estas funciones debemos ejecutar el shell script correspondiente al daemon
que queramos tratar pasándole alguno de los siguientes parámetros:
start: para iniciar el daemon. Si éste ya estuviera ejecutándose se muestra un mensaje de error.
stop: para parar el daemon. Si no estuviera ejecutándose se muestra un mensaje de error.
restart: reinicia el daemon. Sirve para que se vuelvan a leer los archivos de configuración del mismo.
reload: aunque no todos los daemons lo permiten, este parámetro sirve para poder recargar los archivos de
configuración sin tan siquiera tener que pararlo.
Para ejecutar un daemon debemos llamarlo con su ruta completa (/etc/init.d/ nombreDaemon) y pasarle el
parámetro que nos interese. Algunas distribuciones incorporan el comando service, que permite hacer lo mismo sin
tener que especificar la ruta completa.
La mayoría de estos scripts utilizan un programa llamdo start-stop-daemon que nos proporciona el sistema
operativo y que sirve para el tratamiento de estos procesos. Es habitual que al administrar un servidor tengamos que
diseñarnos nuestros propios daemons para realizar alguna tarea concreta. En el directorio donde se sitúan todos los shell
scripts de los daemons también se suele encontrar uno de ejemplo (/etc/init.d/skeleton) para que lo podamos
utilizar cuando necesitemos configurar uno nuevo que no esté en la distribución. Generalmente suelen estar programados
de la siguiente forma:
#! /bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:
/usr/sbin:/usr/bin
DAEMON=/usr/sbin/daemon
NAME=daemon
DESC="some daemon"
test -x $DAEMON || exit 0
set -e
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
start-stop-daemon --start --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME "
start-stop-daemon --stop --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON
echo "."
;;
restart|force-reload)
echo -n "Restarting $DESC: $NAME"
start-stop-daemon --stop --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON
sleep 1
start-stop-daemon --start --quiet --pidfile \
7.2. LOS RUNLEVELS
67
/var/run/$NAME.pid --exec $DAEMON
echo "."
;;
*)
N=/etc/init.d/$NAME
echo " Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
Como vemos, en las variables declaradas al inicio del shell script especificamos qué PATH es necesario para el proceso
del daemon, el programa a ejecutar (DAEMON), el nombre que le damos (NAME, que se debe ser igual que el nombre del
shell script) y su descripción (DESC). Lo único que hace el código al arrancar el daemon es escribir en el directorio
/var/run/ un fichero con el PID del proceso. Al pararlo se va a buscar este PID y se envía la señal de finalización al
proceso correspondiente. Naturalmente, encontraremos shell scripts preparados para realizar muchísimas más operaciones
con el daemon a tratar, aunque como mínimo todos deben tener esta estructura.
Aunque los daemons son programas como cualquier otro, su programación difiere un poco de las aplicaciones de
usuario porque deben incluir funciones para quedar suspendidos y esperar señales para que sean despertados, etc.
7.2. Los runlevels
Los daemons que tengamos ejecutándose en un determinado momento nos marcan los servicios que el sistema operativo está ofreciendo y/o recibiendo. El hecho que podamos tener tantos daemons diferentes hace que tengamos que
plantear su organización de forma adecuada. Entenderemos un runlevel (o nivel de ejecución) como la ejecución de unos
determinados daemons que a su vez proporcionan unos determinados servicios. En la instalación de un servidor es habitual diseñar una configuración para que en determinados momentos se pueda ofrecer determinados servicios y en otros
no. Para permitir este tipo de funcionamiento, el sistema operativo nos proporciona diferentes niveles de ejecución para
poder adaptarlos a nuestras necesidades.
Aunque podemos configurarnos el número de niveles de ejecución que queremos y la funcionalidad de cada uno de
ellos, generalmente los sistemas like UNIX nos proporcionan 6 de diferentes con las siguientes propiedades:
NIVEL
0
1
2∼5
6
Funcionalidad
El nivel de ejecución 0 está configurado para parar el sistema.
Este nivel es denominado como single user ya que sólo permite
la entrada al sistema al root del mismo. Se arrancan los daemons
mínimos y sirve para tareas de mantenimiento.
Los niveles del 2 al 5 están destinados para ser configurados según las necesidades de cada instalación. Al instalar el sistema,
por defecto todos son iguales. Estos niveles también se llaman
multiusuario ya que, por defecto, permiten que más de un usuario trabaje en el sistema.
El último nivel está preparado para reinicar el sistema. Es muy
parecido al 0 pero se añade una función de reinicio.
El comando necesario para cambiar de nivel de ejecución es init (le pasamos como parámetro el nivel de ejecución
que queramos) y para ver en qué estamos runlevel. Los comandos halt, reboot, shutdown o poweroff lo
único que hacen es llamar al nivel de ejecución 0 o 6 realizando, antes, alguna operación concreta (ver su manual para
más información). Sólo el root del sistema puede utilizar todos estos comandos.
La forma como se organizan estos daemons en cada nivel de ejecución es muy simple. Cada nivel de ejecución tiene
un directorio situado en /etc/rcX.d/ donde la “X” es el número de nivel. En estos directorios encontramos enlaces
simbólicos a los shell scripts de los daemons situados en /etc/init.d/ que nos sirven para indicar al sistema si
queremos iniciar o parar el daemon al que apuntan. Con el mismo nombre del enlace se identifica la acción a realizar: si el
enlace empieza por “S” (Start) indicamos que queremos iniciar el daemon, mientras que se empieza por “K” (Kill) indica
que queremos pararlo. Si el nombre no empieza por ninguna de estas letras, el sistema no hace nada con él. Después de
esta letra se pone un número de 2 cifras entre “00” y “99” que indica el orden de inicio o parada de los mismos. Este
orden es importante ya que algunos daemons necesitan que otros estén en ejecución antes de ser iniciados.
Al cambiar de nivel de ejecución el sistema inspeccionará los daemons del directorio correspondiente y empezará, primero, parando los daemons indicados y, después, iniciará los demás. Lo único que se hace es llamar al daemon pasándole
CAPÍTULO 7. DAEMONS Y RUNLEVELS
68
como parámetro start o stop, de forma que si paramos alguno que no se esté ejecutando en el momento de parada
no pasaría nada porque el mismo shell script lo tiene en cuenta. Esto nos sirve para poder cambiar de nivel de ejecución
sin tener en cuenta el nivel anterior al que estábamos. En la figura 7.2 podemos ver un ejemplo de configuración para 3
niveles de ejecución:
NIVEL DE EJECUCIÓN 2
K50sshd
K51apache−ssl
K52tftpd
K53telnet
DAEMONS EJECUTÁNDOSE
S10sysklogd
S12kerneld
S20dhcpd
S50proftpd
S90apache
sysklogd
kerneld
dhcpd
proftpd
apache
NIVEL DE EJECUCIÓN 3
K50dhcpd
K51proftpd
K52apache
K53tftpd
K53telnet
S10sysklogd
S12kerneld
S20sshd
S50apache−ssl
sysklogd
kerneld
sshd
apache−ssl
NIVEL DE EJECUCIÓN 4
K50dhcpd
K51proftpd
K52apache
K53tftpd
K53telnet
S10sysklogd
S12kerneld
S20tftpd
S50telnet
sysklogd
kerneld
tftpd
telnet
Figura 7.2: Runlevels.
En el fichero /etc/inittab tenemos definida toda la configuración de los runlevels: el nivel de ejecución por
defecto, el número de consolas disponibles en cada uno de ellos, etc. Cada línea del fichero es una directiva con la sintaxi:
“<id> : <runlevels> : <action> : <process>”. El primero campo es el identificador de la directiva,
seguidamente encontramos en qué niveles de ejecución es válida esta directiva, la acción a realizar y el proceso a lanzar.
En el siguiente ejemplo explicamos como configurar algunas de estas directivas:
# El nivel de ejecución por defecto (en este caso, el 2)
id:2:initdefault:
# Scripts a ejecutar al arrancar el sistema (antes
# de entrar en el nivel de ejecución por defecto)
si::sysinit:/etc/init.d/rcS
# Programa que se llama al entrar en el nivel de ejecución
# single user (la acción wait indica que se lanza el
# proceso y no se hace nada más)
~~:S:wait:/sbin/sulogin
# Configuración de los diferentes niveles de ejecución
# disponibles en el sistema
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Comando a ejecutar al apretar CTRL+ALT+DEL
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
# Definición de las consolas abiertas en cada
# nivel de ejecución (la acción respawn indica
7.3. EL ARRANQUE DEL SISTEMA
69
# que al terminar la ejecución del proceso
# getty se lance otra vez)
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
Como vemos, en este fichero se configura todo lo referente a los niveles de ejecución de forma muy flexible pudiendo
cambiar lo que nos interese para adaptarlo más a nuestras necesidades. Fijémonos que aunque aquí definamos el nivel de
ejecución por defecto, también lo podríamos especificar al arrancar el sistema con el Lilo o Grub. Esto es muy útil, por
ejemplo, cuando tenemos problemas graves en el sistema que no nos permiten arreglarlos adecuadamente; si arrancamos
con el primer nivel (pasando “1” o “single” al Lilo o Grub) sólo se iniciarán las funciones más necesarias y podremos
entrar para arreglar lo que haga falta. En este fichero también podríamos configurar un terminal que se comunicara con
el sistema a partir de un módem y otro ordenador con la directiva “T1:23:respawn:/sbin/ mgetty -x0 -s
57600 ttyS1”. De esta forma, podríamos tener una consola del sistema en otro terminal comunicándonos con una
línea telefónica.
7.3. El arranque del sistema
El proceso padre de todos los demás es el init. Este proceso se encarga de arrancar todos los otros que tengamos en
el nivel de ejecución configurado. Antes de entrar en este nivel, pero, se ejecutan todos los shell scripts de /etc/rcS.d/
(configurado en /etc/inittab), que pueden ser o bien daemons como los de los otros runlevels o simplemente shell
scripts necesarios para el sistema (carga del mapa de caracteres, carga de los módulos del núcleo, etc.). Si queremos
eliminar alguno de ellos debemos saber exactamente qué estamos haciendo, ya que generalmente son imprescindibles
para el buen funcionamiento del operativo.
Una vez se han arrancado estos daemons (o shell scripts), se entra en el nivel de ejecución configurado por defecto,
parando e iniciando los daemons especificados en él. Una vez aprendida toda esta organización, ya podremos adaptar el
arranque del sistema a nuestras necesidades creando y situando los daemons que queramos en cualquiera de los sitios que
hemos visto.
7.4. Daemons básicos
Según la distribución de GNU/Linux que utilicemos, el mismo proceso de instalación ya configura unos daemons u
otros. Aún así, todas las distribuciones suelen incorporar el daemon para el sistema de logs y el de la ejecución periódica
y retardada de aplicaciones (aunque las configuraciones de los mismos pueden variar un poco). En esta sección veremos
como funcionan estos tres daemons básicos y cómo podemos configurarlos. Es importante saber manejar estos daemons
básicos porque nos pueden ayudar mucho en algunas de las tareas de administración.
7.4.1. Logs de sistema (sysklogd)
Los logs del sistema son ficheros de traza que un daemon del operativo se encarga de generar para que quede constancia de cualquier acción realizada sobre el mismo (el núcleo del sistema tiene un daemon propio para gestionar sus logs
denominado klogd). El daemon encargado de realizar estas tareas es el sysklogd, la configuración del cual encontramos en /etc/syslog.conf. Cada línea de este fichero consiste en una regla con dos campos: el selector y la acción.
Con el selector configuramos de qué servicio queremos tratar los logs y el nivel de prioridad de los mismos. La acción
sirve para indicar hacia dónde queremos redirigir los logs (a un fichero, a una consola, etc.). En las tablas de la siguiente
página podemos ver las diferentes opciones válidas para estos campos.
Generalmente, todos los ficheros de logs del sistema se suelen almacenar en el directorio /var/log/. Aunque la
mayoría de ficheros de logs son de texto y los podemos ver con cualquier editor, podemos encontrar alguno de especial
que no guarde sus datos en este formato. Generalmente suelen ser los ficheros /var/log/wtmp y /var/log/btmp,
que son los logs de entrada de usarios en el sistema y de entradas erróneas respectivamente. Para ver estos dos ficheros
podemos utilizar los comandos last y lastb. Si tuviéramos configurados estos logs en algún otro fichero, también
podríamos verlos pasando el parámetro “-f fichero” al comando last (para ver los últimos registros de entrada de
los usuarios también podemos utilizar el comando lastlog).
CAPÍTULO 7. DAEMONS Y RUNLEVELS
70
Servicio
authpriv
cron
daemon
ftp
kern
lpr
mail
news
syslog
user
uucp
local0∼7
SELECTOR
significado
Prioridad significado
Mensajes de autorizaciones o de aspectos emerg
El sistema es inutilizable.
de seguridad.
Daemon crond y atd.
alert
La acción se debe realizar de inmediato.
Daemons del sistema sin opciones de logs. crit
Condiciones críticas.
Daemon del servidor FTP (File Transfer err
Condiciones de error.
Protocol).
Mensajes del núcleo del sistema.
warning
Condiciones de emergencia.
Mensajes del subsistema de impresión.
notice
Noticias normales, pero importantes.
Mensajes del subsistema de correo (si lo te- info
Mensajes de información.
nemos configurado).
Mensajes del subsistema de noticias (si lo debug
Mensajes de debugging.
tenemos configurado).
Logs generados por el mismo daemon syslogd.
Logs de aplicaciones de nivel de usuario.
Mensajes generados por el sistema de
UUCP (Unix-To-Unix Copy Protocol).
Reservados para su uso local.
(los servicios y prioridades se pueden combinar como se quiera)
Destino
Fichero regular
Pipe nombrado
Consola
Máquina remota
Usuarios
Usuarios on-line
ACCIÓN
explicación
Se especifica la ruta completa del fichero. Poniendo un “-” delante no se requiere que el fichero
sea sincronizado cada vez que se escribe en él (aunque se perderá el log en caso de fallar la
alimentación).
Este sistema permite que los mensajes se redirijan hacia una tubería creada antes de iniciar el
daemon de sysklogd con el comando mkfifo. Se indica poniendo el caracter “|” antes del
nombre del fichero. Es muy útil para operaciones de debugging de programas.
Especificando /dev/ttyX dónde “X” es un número de consola o /dev/console los logs se
redirigen a la pantalla especificada.
Para especificar que los logs se redirijan a una máquina remota debemos preceder el nombre del
host remoto con “@”.
Especificando el nombre de usuario o usuarios (separados por comas) los logs correspondientes
se redirigen a éstos.
Con “*” especificaremos que los logs se redirijan a todos los usuarios que en el momento de
ocurrir el log estén dentro del sistema. Ésto se utiliza para avisar a todos los usuarios que ha
pasado alguna acción crítica en el sistema.
(las acciones se pueden poner en todos los selectores que se quiera)
Esta forma de tratar los logs permite mucha flexibilidad para configurarlos adecuadamente cuando instalamos un servidor, tarea muy importante para tener controlados los aspectos que más nos interesan del sistema. Aún así, si tuviéramos
que guardar todos los logs que se generan en un servidor, seguramente al final saturaríamos el disco por el tamaño siempre
creciente de estos archivos. Para evitar ésto se utiliza un sistema de rotación de logs, que consiste en ir comprimiendo,
cada cierto tiempo, estos ficheros y guardar sólo hasta una determinada antigüedad. Aunque generalmente se suelen comprimir cada semana y se guardan sólo los de uno o dos meses anteriores, podemos configurar todo esto a partir del fichero
/etc/logrotate.conf. Los logs de ciertos servidores y/o aplicaciones también se pueden configurar de forma explícita para tener un control más adecuado de lo que hacen. La configuración personalizada de logs para estas aplicaciones
suele situarse en /etc/logrotate.d/.
Si quisiéramos configurar una consola del sistema para ver todos los logs que se van generando podríamos añadir la
línea “*.* /dev/ttySX” (donde “X” es la consola donde queremos ver los logs) al fichero /etc/syslog.conf y
reiniciar el daemon sysklogd.
Internamente, el sistema utiliza unos programas para manejar de forma más amena todo este sistema de logs. Con
logger podemos escribir en el sistema de logs del sistema. savelog y logrotate sirven para guardar y, opcionalmente, comprimir algunos de los ficheros de logs que tenemos (con el segundo podemos configurar más opciones que con
el primero). Estos comandos también se pueden utilizar para crear nuestros propios ficheros de logs o, si es necesario,
manipular manualmente los del sistema (con el manual de los mismos obtendremos más información sobre su tratamiento
y manipulación).
7.4. DAEMONS BÁSICOS
71
7.4.2. Ejecuciones periódicas (cron)
Muchas de las tareas de administración de un servidor se tienen que llevar a cabo de forma periódica. También
hay muchas acciones, como la actualización de los logs o las bases de datos internas que utilizan ciertos comandos,
que necesitan ejecutarse regularmente para su buen funcionamiento. Por este motivo es muy importante que el mismo
operativo nos proporcione alguna herramienta para poder configurar eficientemente todas estas ejecuciones periódicas.
El daemon cron es el que se encarga de manejar todo el sistema de ejecuciones periódicas. Muchas de las aplicaciones
del sistema necesitan de algún tipo de actualización periódica, generalmente configurada a partir de este programa. Su
organización es muy simple: en el fichero /etc/crontab se guarda la configuración interna del daemon y en los
directorios /etc/cron.daily/, /etc/cron.weekly/ y /etc/monthly/ los shell scripts de los programas que
se ejecutarán diariamente, semanalmente o mensualmente respectivamente. También existe el /etc/cron.d/, donde le
podemos situar archivos con un formato especial para configurar la ejecución de determinados programas de forma más
flexible.
Generalmente, en el fichero /etc/crontab encontramos las siguientes directivas:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:
/sbin:/bin:/usr/sbin:/usr/bin
#m h
25 6
dom mon dow
*
*
*
user
root
47 6
*
*
7
root
52 6
1
*
*
root
command
test -e /usr/sbin/anacron ||
run-parts --report /etc/cron.daily
test -e /usr/sbin/anacron ||
run-parts --report /etc/cron.weekly
test -e /usr/sbin/anacron ||
run-parts --report /etc/cron.monthly
La definición de las variables SHELL y PATH sirven para indicar al daemon qué intérprete de comandos utilizar y cuál
será su PATH. Las siguientes tres líneas están formados por los campos: “<minuto> <hora> <díaMes> <mes>
<diaSetmana> <usuario> <comando>”. Los cinco primeros indican cuando ejecutar el comando correspondiente (deben ser coherentes) y en el sexto encontramos el usuario que se utilizará para ejecutar el comando especificado
en el último. Fijémonos como en el fichero de configuración, los comandos que se ejecutan una vez al día, una vez a la
semana o una vez al mes son los encargados de lanzar los shell scripts que se encuentren en los directorios especificados.
Si existe el programa anacron se ejecutan con él, sino se utiliza el run-parts, que aunque no tiene tantas funcionalidades como el anacron también sirve para poder ejecutar todos los shell scripts que se encuentren en un determinado
directorio. Ésta configuración es la que nos permite toda la estructura de directorios que comentábamos anteriormente. Si
quisiéramos, podríamos cambiar las directivas de este archivo para adaptarlas más a nuestras necesidades.
Si instalamos GNU/Linux en un ordenador que no está en funcionamiento todo el día es recomendable tener instalado
el programa anacron porque ejecutará los scripts configurados con el cron adecuadamente (aunque sea en horas
diferentes de las previstas).
Aunque también podríamos utilizar este mismo fichero de configuración para poner nuestros propios comandos, es
más recomendable utilizar la estructura de directorios que nos proporciona el mismo daemon. El único que no aparece en
esta configuración es el de /etc/cron.d/, que el daemon ya lo tiene en cuenta automáticamente. En este directorio
podemos situarle archivos exactamente con la misma sintaxi que en el /etc/crontab para programar ejecuciones
personalizadas. De esta forma, la flexibilidad es total.
Si para las tareas de administración periódicas del sistema es recomendable utilizar toda esta estructura, cuando son
los usuarios los que quieren configurar alguna tarea periódica es más usual utilizar ficheros particulares para cada uno
de ellos. Con el comando crontab podemos pasar los parámetros “-u USER -e” y automáticamente se editará el
fichero de configuración particular para el usuario especificado. Los ficheros particulares de los usuarios se guardan en el
directorio /var/spool/cron/crontabs/ (de hecho, el fichero /etc/crontab es el mismo que el particular del
root). Para poder limitar qué usuarios pueden utilizar este daemon podemos editar los ficheros /etc/cron.allow y
/etc/cron.deny, donde podemos poner, respectivamente, la lista de usuarios a los que permitimos utilizar el cron y
a los que no. Utilizando el comando crontab, al grabar el fichero se comprueba que la sintaxi sea correcta.
7.4.3. Ejecuciones retardadas (at y batch)
Si bien el cron nos permite realizar operaciones cada cierto período de tiempo, el daemon atd permite ejecutar un
comando o aplicación en un momento determinado. Todo el sistema de at y batch funcionan con unos mecanismos de
cola de ejecución (uno para cada uno de los dos). Aunque podemos configurar más de estas dos, generalmente con ellas ya
tendremos suficiente para realizar cualquier tipo de ejecución retardada en el sistema. Igual que con el daemon anterior,
72
CAPÍTULO 7. DAEMONS Y RUNLEVELS
podemos configurar qué usuarios pueden utilizarlo o no a partir de los ficheros /etc/at.allow y /etc/at.deny.
En este caso, no tenemos fichero de configuración explícito para el daemon, sino que es con el comando at que podemos
especificar en qué momento queremos ejecutar cierta operación con la sintaxi: “at -f fichero TIEMPO”. Generalmente el fichero suele ser un programa o shell script creado por el mismo usuario dónde se escriben todas las instrucciones
que se quieran ejecutar. La especificación de TIEMPO puede llegar a ser muy compleja, pudiendo determinar una HORA
con el formato “hh:mm”, un tiempo a partir del momento de ejecución con “now + XX minutes”, etc. (en su manual
se especifican todos los posibles formatos).
Con atq podemos ver qué trabajos tenemos retardados y con atrm podemos borrar alguno de los que esté en la cola.
Finalmente, si queremos ejecutar todos los trabajos en la cola del at, podemos utilizar el comando atrun. Éste nos
permite pasarle el parámetro “-l LOADAVERAGE” donde LOADAVERAGE debe ser un número que indica a partir de
qué momento de carga del sistema1 se podrán ejecutar los comandos retardados. Esto enlaza directamente con el comando
batch, que sirve exactamente para lo mismo que el at y sigue su misma sintaxi pero sin necesidad de especificar un
tiempo concreto de ejecución. Las operaciones configuradas en esta cola se llevarán a término cuando la carga del sistema
baje a menos de 1’5.
De esta forma, cuando necesitemos ejecutar un determinado comando en una hora concreta, deberíamos utilizar el at,
mientras que para operaciones que queramos realizar sin que entorpezcan el funcionamiento normal del ordenador, deberíamos utilizar el batch. En los directorios /var/spool/cron/atjobs/ y /var/spool/cron/atspool/ se
guardan los ficheros correspondientes a todos estos trabajos retardados.
1 La carga del sistema es un parámetro que nos indica el grado de actividad del ordenador. Con el comando top podemos ver esta carga de forma
interactiva.
Capítulo 8
Instalación de aplicaciones
8.1. Introducción
La gestión y manipulación de los paquetes es un aspecto fundamental en cualquier distribución de GNU/Linux. Un
paquete es uno o varios programas, librerías o componentes de software empaquetados en un solo archivo preparado
para que sea instalado y integrado en el sistema operativo. En el diseño de cualquier distribución es muy importante
proporcionar las herramientas necesarias para poder instalar y gestionar adecuadamente estos paquetes. También se deben
proporcionar herramientas, especialmente para los desarrolladores de software, para poder crear de nuevos. En estos
paquetes se suelen incluir los ejecutables del programa y sus dependencias y conflictos con otras aplicaciones. Las
dependencias indican, al instalar un paquete, si necesitan otros programas para que la aplicación funcione correctamente,
mientras que los conflictos nos informan de incompatibilidades entre programas instalados y el que queremos instalar.
Los sistemas de paquetes están diseñados de esta forma para facilitar la instalación de las nuevas aplicaciones ya que
algunas librerías son utilizadas por más de un programa y no tendría sentido que todas las aplicaciones que las utilizasen
las instalaran de nuevo.
Actualmente, la gran mayoría de distribuciones utilizan uno de los dos sistemas de paquetes más extendidos en el
mundo del GNU/Linux: los deb o los rpm. Por un lado, los paquetes deb son los que la distribución de Debian GNU/Linux
utiliza en su distribución, mientras que los rpm (Redhat Package Manager) son los nativos de RedHat. Las distribuciones
basadas en alguna de estas dos generalmente adoptan el sistema de paquetes correspondiente, aunque la mayoría de las
otras distribuciones propias también han optado por incorporar alguno de los dos sistemas ya que actualmente la gran
mayoría de programas se empaquetan utilizando estos formatos.
Por otra parte, los programas con licencia GPL o similar también se suelen distribuir con su código fuente (empaquetados y comprimidos con algún formato estándar, como el tar). A partir de este código fuente también podemos instalar
el programa en nuestro operativo, compilándolo y situando los ejecutables en el lugar dónde les corresponda.
En este capítulo veremos cómo está organizado el sistema de paquetes de la distribución Debian por la gran cantidad
de herramientas que se proporcionan y la flexibilidad de su configuración. En la última sección, aprenderemos cómo
instalar un programa a partir de su código fuente ya que en algunos casos podemos encontrarnos que el programa que
necesitemos no esté empaquetado. Esta forma de instalación era la que se utilizaba siempre antes que aparecieran los
primeros sistema de paquetes, que surgieron para facilitar todo este proceso.
8.2. El sistema de paquetes Debian
Las aplicaciones para manipular el sistema de paquetes de Debian GNU/Linux son, básicamente, de dos tipos: los
programas apt (Advanced Packaging Tool) y los dpkg (Debian package). El conjunto de aplicaciones apt sirven para
configurar de dónde conseguimos los paquetes, cuáles son los que queremos y resolución de dependencias. Los programas
dpkg sirven para instalar los paquetes, configurarlos, saber cuáles tenemos instalados, etc. Hay otras aplicaciones, como
dselect o aptitude1 , que sirven para manipular los programas apt y dpkg proporcionando, en un solo entorno,
herramientas interactivas para la manipulación de los mismos. En la figura 8.1 podemos ver este esquema:
Los programas que, en última instancia, se encargan de instalar las aplicaciones son los dpkg. Aunque primero apt
se encarga de comprobar las dependencias, dpkg descomprime el fichero “.deb” y instala el programa. Las aplicaciones
apt nos ayudan a localizar las últimas versiones de los programas que necesitamos y copian los ficheros de las fuentes de
donde las hayan extraído (FTP, CD-ROM, etc.) en el disco para que se puedan instalar. Las principales aplicaciones apt
son las siguientes:
1 Es
más recomendable utilizar aptitude.
73
CAPÍTULO 8. INSTALACIÓN DE APLICACIONES
74
APLICACIONES apt
configuración y actualitzación del origen de los paquetes
(actualitzación del árbol de dependencias)
dselect
aptitude
APLICACIONES dpkg
(el dselect o aptitude son front−ends
de manipulación de los programas apt y dpkg)
instalación de aplicaciones al sistema
(tratamiento con ficheros .deb)
SISTEMA OPERATIVO
Figura 8.1: Sistema de paquetes.
apt-config: sirve para configurar algunas de las opciones de apt (la arquitectura de nuestro sistema, directorio
donde se guardan los archivos, . . . ).
apt-setup: aplicación para configurar las fuentes de los paquetes (de dónde los obtenemos).
apt-cache: gestión de la cache de paquetes (directorio dónde se guardan los archivos “.deb” antes de ser
instalados).
ap-cdrom: aplicación para gestionar CD-ROMs que contengan paquetes.
apt-get: actualización, instalación o descarga de los paquetes.
Toda la configuración de apt está en el directorio /etc/apt/. En el fichero /etc/apt/ sources.list es
dónde se guarda la configuración de las fuentes de los paquetes. Con todas estas fuentes se genera un listado de paquetes
disponibles, que podemos consultar e instalar cuando siempre que nos interese. Generalmente el formato de este archivo
sigue la siguiente sintaxi:
deb http://site.http.org/debian distribución sección1
sección2 sección3
deb-src http://site.http.org/debian distribución sección1
sección2 sección3
El primer campo de cada línea indica el tipo de archivo al que nos referimos: binarios (deb) o código fuente
(deb-src). Seguidamente encontramos la referencia de dónde la fuente de los paquetes, que puede ser un CD-ROM, una
dirección de Internet, etc. El campo de distribución indica a apt qué versión de Debian GNU/Linux estamos utilizando.
Este campo es importante porque cada versión de la distribución tiene sus propios paquetes, generalmente incompatibles
con las otras. En los últimos campos podemos especificar qué tipo de paquetes queremos utilizar. Debian divide todos
los paquetes en diferentes secciones debido a licencias restrictivas de algunos de ellos o a temas legales. Las diferentes
secciones de los paquetes son las siguientes:
Main: la principal sección de la distribución2, donde se incluyen todos los paquetes con licencia libre.
Contrib: paquetes con licencia libre pero que dependen de otros no libres.
Non-Free: aunque no todos los paquetes de esta sección no sean libres, muchos de ellos tienen alguna condición
en su licencia que restringe su uso o distribución.
Non-US/Main y Non-US/Non-Free: paquetes que no se pueden exportar de los EUA, generalmente porque
utilizan sistemas de cifrado o por problemas de patentes. Aunque la mayoría son libres, hay unos pocos que no.
Si cambiásemos este fichero de forma manual podríamos utilizar el comando “apt-get update” para actualizar
todos los paquetes disponibles en el sistema. Para insertar los paquetes de un CD-ROM en el listado de paquetes disponibles, podríamos utilizar “apt-cdrom add”, con lo cual se exploraría el CD insertado y se actualizaría el listado
de paquetes del sistema. Si algunas de las fuentes contuvieran paquetes iguales, al instalarlo la misma aplicación apt
detectaría cual es el más reciente o el que su descarga implica menos tiempo y lo bajaría de la fuente correspondiente.
Con el programa netselect, además, podríamos configurar más ampliamente todo este sistema de descarga.
2 Estos
son los paquetes propios de la distribución Debian, los otros los proporciona la organización Debian para beneficio de los usuarios
8.2. EL SISTEMA DE PAQUETES DEBIAN
75
Otra opción muy interesante que nos proporcionan la mayoría de distribuciones es la de la actualización de paquetes
en los que se ha descubierto algún tipo de vulnerabilidad o fallo en su funcionamiento. Con Debian, tan sólo tenemos que
añadir la siguiente línea en el archivo /etc/apt/sources.list:
deb http://security.debian.org/ stable/updates
main contrib non-free
A medida que se van detectando paquetes críticos, se van poniendo en esta fuente, de forma que con solo ejecutar
“apt-get update” se avisa de las nuevas actualizaciones que debemos realizar en el sistema y se reinstalan los
paquetes necesarios.
Aunque con los programas dpkg podemos manipular cualquier aspecto de los paquetes instalados en el sistema, crear
de nuevos, modificar los instalados, etc., en este curso sólo repasaremos los más importantes, a nivel de usuario, para que
podamos realizar las operaciones básicas con ellos. Los principales programas dpkg son los siguientes:
dpkg-divert: nos sirve para manipular el lugar de instalación de algunos de los paquetes instalados en el sistema.
Muy útil para evitar algunos problemas de dependencias.
dpkg-reconfigure: con un mismo paquete deb, muchas veces también se incluye algún mecanismo para configurar algunas de las opciones de la aplicación de forma interactiva. Con esta aplicación podemos volver a configurar
el paquete que le indiquemos con los mismos mecanismos utilizados en su instalación.
dpkg-scanpackages: este programa sirve para escanear un determinado directorio del sistema que contenga
archivos “.deb” para que se genere un archivo de índice. Con este archivo de índice podemos incluir el directorio
como una fuente más de apt. Muy útil cuando bajamos programas no oficiales de la distribución.
dpkg-scansource: aplicación con las mismas funcionalidades que la anterior pero para paquetes de código
fuente.
dpkg-split: programa para dividir y unir un paquete en varios archivos diferentes.
Con estos programas podemos manipular de cualquier forma nuestros paquetes. La aplicación principal, dpkg, es la
que nos permite instalar, listar o eliminar los paquetes del sistema. Para listar todos los paquetes disponibles le podemos
pasar el parámetro “-l”, con lo cual se mostrará una lista completa de los paquetes y su estado de instalación (instalados,
instalados pero no configurados, etc.). Si quisiéramos ver toda la información de un determinado paquete podríamos
utilizar el parámetro “-p” seguido del nombre del paquete, con lo cual se muestran todas las dependencias, conflictos con
otros paquetes, versión, descripción, etc. Con dpkg también podemos utilizar patrones para seleccionar, instalar, eliminar,
. . . los paquetes del sistema.
Para instalar nuevos paquetes podemos utilizar el parámetro “-i” seguido del nombre del archivo. Si nos dá problemas
de dependencias podemos ignorarlas con “--ignore- depends=X” dónde la “X” indica la dependencia, aunque
debemos vigilar mucho cómo utilizamos este parámetro porque al ignorar dependencias es posible que el programa
instalado no funcione correctamente. Si sólo quisiéramos descomprimir el archivo “.deb” para ver qué contiene también
podríamos utilizar “-x”. Para eliminar los paquetes debemos pasar “-r” seguido del nombre del paquete, que lo elimina
del sistema pero guardando sus archivos de configuración (con “-P” se elimina todo).
Otro parámetro muy interesante es el de “--force-things X” (dónde la “X” es alguna de las siguientes opciones),
que nos puede ayudar en alguno de los casos que mostramos a continuación:
“auto-select”: selecciona automáticamente los paquetes que se deben instalar o desinstalar con el nuevo paquete que elegimos.
“downgrade”: instala el paquete aunque haya versiones más nuevas del mismo.
“remove-essential”: aunque el paquete esté considerado como esencial en el sistema, lo elimina.
“depends”: no tiene en cuenta las dependencias, las considera como alertas.
“depends-version”: no tiene en cuenta dependencias de versión de los paquetes.
“conflicts”: instala el paquete aunque entre en conflicto con algún otro del sistema.
...:
Aunque todos los programas que hemos ido comentado a lo largo de esta sección tienen muchísimas otras opciones
y existen muchos otros, con los que hemos especificado ya nos bastará para realizar casi cualquier tarea necesaria con el
sistema de paquetes de la distribución que utilicemos. Si bien ya hemos comentado que con programas como el dselect
o aptitude ya podremos realizar las tareas básicas de instalación y eliminación de paquetes, es importante conocer
adecuadamente estos otros comandos porque para realizar operaciones específicas o para automatizar los procesos de
selección y instalación pueden ser muy útiles.
76
CAPÍTULO 8. INSTALACIÓN DE APLICACIONES
8.3. Compilación de nuevos programas
En la administración de cualquier servidor es muy probable que en algunos casos nos encontremos que debemos utilizar algún programa que nuestra distribución no tiene o que necesitemos la última versión de un servidor de aplicaciones
que todavía no está convenientemente empaquetado, etc. En estos casos, siempre podemos descargarnos el código fuente
del programa y compilarlo manualmente. Es importante que sepamos que es muy diferente compilar un programa para
conseguir su ejecutable que descargar directamente el binario. Cuando compilamos un programa, éste utiliza las librerías
disponibles en el sistema, mientras que si lo desargamos directamente lo más problable es que no funcione adecuadamente
porque intente utilizar alguna librería no exactamente igual a la que tengamos instalada en el sistema. Es por este motivo
que lo más recomendable, cuando necesitemos instalar un nuevo programa del que no disponemos del paquete correspondiente, es compilarlo de nuevo. Al compilar un programa es muy problable que necesitemos tener instaladas en el sistema
las fuentes o las cabeceras de las librerías que utiliza. Generalmente, estos paquetes suelen tener el mismo nombre que la
librería pero añadiendo “-dev” (de desarrollo) al final.
Al bajar las fuentes de una aplicación nos encontraremos con un fichero empaquetado y comprimido con tar y gzip
o similares. Es usual añadir un fichero llamado README en el cual se explica paso a paso todas las acciones necesarias para
compilar correctamente el programa. Aunque es recomendable leerlo, en la mayoría de casos, el proceso de instalación
siempre es el mismo. El proceso de compilación de un programa puede durar desde segundos a horas, según la aplicación.
Por ejemplo, la compilación del núcleo Linux va desde 5 o 10 minutos a las 2 horas (según la versión del núcleo y la
potencia del ordenador).
Lo primero que debemos hacer para compilar el nuevo programa es descomprimirlo y desempaquetarlo. Una vez hecho
esto dispondremos del código fuente estructurado en varios directorios. En su raíz, podemos encontrar (o no) un fichero
llamado Makefile. Este archivo indica al compilador qué librerías se utilizan, como se deben compilar los archivos
de código, etc. Si tenemos este Makefile ya podemos compilar el programa ejecutando make. No hace falta que le
pasemos ningún parámetro porque por defecto ya busca el fichero de Makefile y ejecuta las acciones que se especifican
en él. Si el proceso no ha dado ningún error ya podremos mover el ejecutable generado para ponerlo en alguno de los
directorios del PATH configurado para que siempre que lo queramos ejecutar no tengamos que escribir su ruta completa.
Muchos Makefile también proporcionan instrucciones para que podamos ahorrarnos este último paso. Generalmente,
ejecutando “make install” el mismo programa se encarga de situar adecuadamente los binarios y, si existieran, los
archivos de documentación. Finalmente, si no nos interesara guardar el código fuente del programa ya podemos eliminar
todo el contenido de los directorios creados.
Si el programa no incorpora el archivo de Makefile, generalmente se suele incluir algún shell script para generarar
automáticamente este fichero (habitualmente, este script se suele nombrar configure). Al ejecutar este shell script se
comprobará que el sistema tenga instaladas todas las librerías necesarias para una buena compilación y, si faltara alguna,
se daría un mensaje de aviso. Una vez ejecutado correctamente este shell script ya dispondremos del Makefile, con lo
que el proceso vuelve a ser el mismo que anteriormente. En la figura 8.2 podemos ver todo ésto de forma gráfica.
Aunque la mayoría del código fuente de los programas se organiza de la forma como hemos expuesto, también es
posible que nos encontremos con otros tipos de instalación. Hay alguno que incorpora menús, entornos en X o otros
métodos más amenos. Últimamente también empiezan a aparecer algunas aplicaciones que permiten realizar todo el
proceso de instalación bajando el código directamente de Internet.
8.3. COMPILACIÓN DE NUEVOS PROGRAMAS
77
ARCHIVO COMPRIMIDO
gunzip nombreArchivo.tar.gz
tar −xf nombreArchivo.tar
descompresión
ESTRUCTURA DE DIRECTORIOS
CON EL CÓDIGO FUENTE
no existe el MakeFile
existe el MakeFile
EJECUTAMOS EL CONFIGURE
PARA GENERAR EL MAKEFILE
./configure
COMPILAMOS EL PROGRAMA
make
INSTALAMOS EL PROGRAMA
make install
BORRAMOS LOS ARCHIVOS
make clean
rm −rf directorioAplicación
Figura 8.2: Compilación de un programa.
Capítulo 9
Taller de configuraciones básicas
9.1. Introducción
En el segundo taller aprendimos a instalar un sistema básico para que, a partir de éste, empecemos a montar un sistema
a medida de nuestras necesidades. Éste será el objeto de estos dos últimos talleres. En el primero, después de terminar con
algunos aspectos referentes a la configuración del sistema de instalación de paquetes, y quedarán sentadas las bases para
poder instalar las aplicaciones que nos sean necessarias. A continuación, aprenderemos a utilizar las distintas herramientas
que nos ofrece Debian para la gestión de paquetes, es decir, para instalar, desinstalar, actualizar, etc. aplicaciones, e
instalaremos y configuraremos algunas de ellas, que son comunes y necesarias en la mayoría de sistemas tipo UNIX.
El último taller está plenamente orientado al sistema gráfico. En él aprenderemos a instalarlo, configurarlo, adaptarlo a
nuestras preferencias y por último aprenderemos a instalar y utilizar aplicaciones que se sirven de este sistema para poder
correr.
9.2. El gestor de arranque
En primer lugar debemos asegurarnos de instalar un sistema de arranque que sea capaz de gestionar sin problemas
los posibles sistemas operativos que tengamos instalados en nuestro ordenador. Esta cuestión ya se abordó someramente
durante en el taller anterior, durante el proceso de instalación. Si ya tenemos instalado el gestor de arranque y hemos
comprobado su correcto funcionamiento, podemos pasar a la sección siguiente; pero si no es así, es decir, que para
arrancar nuestro sistema operativo necesitamos del disquet de rescate que creamos durante el proceso de instalación, ha
llegado el momento de instalar un sistema de gestión de arranque en el disco duro para evitar la tediosa tarea de utilizar
cada vez el disquet. De cualquier forma, siempre es interesante tener instalado un sistema gestor de arranque ya que nos
permitirá, entre otras cosas, poder arrancar diversos kernels.
Tal como se ha expuesto, hay distintos gestores de arranque, entre ellos LILO y grub. grub es un poderoso sistema
gestor de arranque, del proyecto GNU, que se caracteriza por poder gestionar correctamete el arranque de cualquier
sistema operativo que tengamos instalado en nuestro ordenador, no obstante, su uso y su configuración son un tanto
complejos. LILO es el gestor que se diseñó inicialmente para gestionar los arranques de los kernels Linux, se caracteriza
por tener un sistema de instalación más intuitivo, además de ofrecer la posibilidad de forma sencilla, mediante una sola
línea de comados, de reestablecer la imagen de la MBR anterior si algo ha ido mal, aspecto muy interesante, sobre todo si
en nuestro disco duro conviven distintos sistemas operativos, ya que escribir en la MBR puede inutilizar alguno de ellos,
en especial si se trata de sistemas MicrosoftTM.
De cualquier forma, si no disponemos de gestor de arranque y si queremos instalar uno, lo primero que debemos hacer
es arrancar el sistema operativo que hemos instalado mediante el disco de arranque y comprobaremos si la aplicación está
instalada, haciendo, por ejemplo, un man de la aplicación.
9.2.1. Instalación de LILO
El archivo de configuración de LILO se encuentra en /etc/lilo.conf. El archivo está bien documentado, y por
consiguiente, es fácil de modificar, mediante un editor de texto, y adaptarlo a nuestras necesidades. Una vez hayamos
hecho las modificaciones que consideremos oportunas, lo que haremos es, ejecutar, como root, la instruccición lilo para
transferir a la MBR el contenido del fichero de configuración.
Como medida de precaución lo que haremos inmediatamente después es reiniciar el ordenador, por ejemplo mediante
el comando reboot, y comprobaremos que todos los sistemas operativos que tenemos instalados arrancan correctamente.
Si no fuese así, lo que se debe hacer es, volver arrancar nuestro recién instalado sistema operativo (mediante LILO, si
78
9.2. EL GESTOR DE ARRANQUE
79
éste es capaz de hacerlo, o mediante el disquet de rescate1 ) y ejecutar la instrucción siguiente para reestablecer la copia
de seguridad del la MRB que LILO ha hecho antes de escribir sobre ella; con ello estaremos en la misma situación que
estábamos antes de ejecutar lilo:
brau:~# lilo -U
Una vez hecho esto debemos proceder a estudiar el porqué de los errores y tratar de corregirlos; ha llegado el momento
de empezar a leer documentación, empezando por los mans, las FAQs, la documentación que podemos encontrar en
/usr/share/doc/lilo/etc. Una vez hechos los cambios pertinentes repetiremos el proceso anterior.
Puede suceder que tras diversos intentos lleguemos a la conclusión que: o que LILO no puede o que no sabemos
configurarlo correctamente para arrancar todos los sistemas operativos que tenemos instalados en el ordenador. Ha llegado
el momento de probar con otros gestores, como puede ser grub.
9.2.2. Instalación de grub
Grub no viene instalado por defecto, y es por este motivo que antes de usarlo debemos proceder a su instalación.
Para ello podemos proceder a leer las secciones posteriores para informarnos sobre el sistema gestor de paquetes, su
configuración y su uso, o simplemente, en caso de que durante la instalación hagamos introducido en la base de datos los
contenidos de todos los CDs o que hagamos optado por una instalación por red, ejecutar la línea siguiente:
brau:~# apt-get install grub grub-doc
Si no deseamos instalar el paquete de documentación, se puede omitir el último parámetro de la línea anterior.
Una forma recomendable de trabajar con grub es hacer, antes de escribir en la MRB, las pruebas que se estimen
oportunas sobre un disquet, y probar su correcto funcionamiento arrancando desde éste. Para ello lo primero que haremos
es copiar los ficheros necesarios en /boot/:
brau:~# cp /usr/lib/grub/i386-pc/stage* /boot/
brau:~# cp /usr/share/doc/grub/examples/menu.lst /boot/
Una vez hecho esto, editaremos el fichero de configuración de grub, /boot/menu.lst, y lo adaptaremos a nuestras
necessidades. Esta operación puede ser un tanto compleja, debido, entre otras cosas, al cambio de nomenclatura en lo que
hace referencia a los discos duros; así pues, para identificar en qué dispositivo se halla un fichero en concreto podemos
ayudarnos del comando find una vez hayamos entrado en el modo de comandos de grub mediante grub. Así pues, por
ejemplo, para localizar un fichero, cuya ubicación seguro que necesitaremos especificar en el fichero de configuración de
grub, como puede ser /vmlinuz, procederemos de la manera siguiente:
brau:~# grub
GRUB
version 0.91
(640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub> find /vmlinuz
(hd2,0)
grub cuenta con muchos más comandos, para ver un listado de algunos de ellos basta que pulsemos la tecla TAB en la
línea de comandos para obtener lo siguiente:
grub>
Possible commands are: blocklist boot cat chainloader cmp color configfile deb
ug device displayapm displaymem embed find fstest geometry halt help hide impsp
robe initrd install ioprobe kernel lock makeactive map md5crypt module moduleno
unzip partnew parttype password pause quit read reboot root rootnoverify savede
fault serial setkey setup terminal testload testvbe unhide uppermem vbeprobe
grub>
1 El
que hemos utilizado hasta el momento para arrancar el sistema.
CAPÍTULO 9. TALLER DE CONFIGURACIONES BÁSICAS
80
Para obtener ayuda de algún comando en concreto basta con teclear help seguido del nombre de dicho comando.
Una buena forma de trabajar sobre nuestro fichero de configuración de grub, /boot/menu.lst es abriendo una nueva
sesión en una tty distinta e ir modificando dicho fichero a medida que vayamos trabajando sobre la interficie de comandos
de grub.
Una vez hayamos terminado de editar el fichero de configuración, y tras introducir un disquet virgen en la disquetera,
teclearemos, sustituyendo el carácter X por el número de disco duro e Y por la partición correspondientes, la siguiente
línea de comandos:
grub> install (hdX,Y)/boot/stage1 d (fd0) (hdX,Y)/boot/stage2 p (hdX,Y)/boot/menu.lst
Con la línea anterior hemos transferido al disquet (fd0) la información de la MBR (stage1), grub y su interficie de
comandos (stage2), y el menú de arranque que hayamos configurado en en fichero /boot/menu.lst. Estamos, pues,
en condiciones de reiniciar la máquina, arrancar mediante el disquet que acabamos de crear y comprobar si nuestra
configuración es correcta.
Es muy interesante disponer de un disquet con grub, ya que mediante su interficie de comandos podemos intentar
arrancar directamente los distintos sistemas operativos que tengamos instalados, con el objeto de ir haciendo pruebas
para refinar el contenido del fichero /boot/menu.lst. A modo de ejemplo, se expone el procedimiento a seguir
para arrancar un sistema MicrosoftTMinstalado como (hd0,0) y a continuación los comandos necesarios para arrancar un
sistema GNU/Linux instalado como (hd1,0):
Para un sistema Microsoft:
grub> rootnoverify (hd0,0)
grub> makeactive
grub> chainloader +1
grub> boot
Para un sistema GNU/Linux:
grub> kernel (hd1,0)/vmlinuz root=/dev/hdc1
grub> boot
Una vez tengamos en nuestro disquet el sistema de arranque definitivo que deseamos implementar, simplemente
debemos transferir esta misma configuración a la MBR del disco duro de arranque, desde la misma línea de comados del
disquet teclearemos:
grub> install (hdX,Y)/boot/stage1 d (hd0,0) (hdX,Y)/boot/stage2 p (hdX,Y)/boot/menu.lst
Como se ha dicho, utilizar grub es un tanto más complejo que LILO, por esta razón se recomienda que antes de
inbrincarse en su instalación y posterior configuración, se lea detenidamente los mans y la documentación que se ha
instalado con el paquete grub-doc, también accesible en http://www.gnu.org/software/grub/.
9.3. El sistema de paquetes
Ha llegado el momento de entrar a analizar y de aprender a utilizar el sistema de paquetes de Debian, probablemente
el más sólido y fiable de cuantos existan en el mundo GNU. En las subsecciones siguientes aprenderemos a configurar su
base de datos, a manipularla, a instalar paquetes, actualizarlos, etc. En muchas ocasiones hay distintas maneras de obtener
el mismo resultado. Se expondrán algunas de ellas, con dos objetivos principales: el primero, para que el lector pueda
escoger la que más le interese, y el segundo, porque es interesante conocer siempre más de una solución a un mismo
problema por si, por cualquier motivo, alguna de ellas fallase.
ACTIVIDADES
1. Para la plena comprensión del funcionamiento del sistema de paquetes Debian se recomienda la lectura de:
9.3. EL SISTEMA DE PAQUETES
81
APT HOWTO: http://www.de.debian.org/doc/manuals/apt-howto/index.en.html
http://www.de.debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html
http://www.de.debian.org/doc/manuals/debian-faq/ch-pkgtools.en.html
Los mans2 de: apt, apt-cache, apt-get, sources.list, dpkg y dselect.
9.3.1. /etc/apt/sources.list
El archivo /etc/apt/sources.list es el corazón de la configuración del sistema de paquetes de Debian. Al
tratarse de un fichero de texto, como la mayoría de ficheros de configuración en los sistemas UNIX, lo podemos editar
manualmente, o bien mediate algunas herramientas de las que dispone el sistema para tal fin.
El contenido de este fichero dependerá en gran medida de la velocidad con que podamos acceder a Internet, si es que lo
podemos hacer. Pero no debemos olvidar en ningún caso ejecutar, una vez hayamos modificado el fichero, la instrucción
siguiente como root:
brau:/etc/apt# apt-get update
Si no lo hicieramos, la base de datos del sistema de paquetes no se actualizaría, y en consecuencia, ninguno de los
cambios realizados surgiría efecto. En una instalación donde los paquetes se obtengan de forma remota, este comando
debe ser ejecutado periódicamente par ir actualizando la base de datos; por este motivo no es mala idea incluirlo dentro
del sistema cron.
Cada línea de este fichero hace referencia a una fuente de paquetes y los campos van separados por un espacio. En
primer lugar especificaremos si la fuente de paquetes es de paquetes binarios deb o si es de código fuente deb-src. En
el segundo campo especificaremos la forma de aceder a estos: cdrom, http, ftp, etc. seguido de la dirección de acceso.
Los campos restantes hacen referencia tipo de paquetes al que queremos acceder por esta línea.
/etc/apt/sources.list con acceso rápido a Internet
En el mejor de los casos dispondremos de un acceso rápido a Internet. Esto probablemente, ya nos haya permitido
hacer la instalación del sistema básico por red, además de permitirnos disponer siempre de las últimas versiones de
los paquetes. Se trata, además de la forma más cómoda de trabajar con paquetes, ya que no tenemos tan siquiera que
preocuparnos de insertar el CD correspondiente para hacer una instalación.
De lo que debemos cerciornarnos, antes que nada, es de que el contenido de /etc/apt/sources.list sea
correcto. A continuación se muestra un ejemplo:
deb http://ftp2.de.debian.org/debian/ stable main non-free contrib
deb-src http://ftp2.de.debian.org/debian/ stable main non-free contrib
deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
deb http://security.debian.org/ stable/updates main contrib non-free
Todas las direcciones anteriores son oficiales, es decir, reconocidas por Debian. A parte de estas fuentes también
se pueden utilizar paquetes no oficiales, los cuales, por no ser oficiales, no significa que carezcan de calidad suficiente
como para ser incluidos en nuestro fichero de configuración. Una buena dirección para obtener información acerca de la
localización de estos paquetes és http://www.apt-get.org.
Una vez editado el fichero y salvado, ejecutaremos el comando “apt-get update” y tras unos instantes en los
cuales el sistema de paquetes reconfiguraraá su base de datos y visualizará por pantalla los distintos accesos que se
realizan, ya tendremos acceso a los nuevos paquetes.
/etc/apt/sources.list sin acceso rápido a Internet
En el caso de no disponer de conexión a Internet o de ser ésta lenta, debemos optar, sin dudarlo, por utilizar el juego
de CDs de la distribución para ir instalando los distintos paquetes. Si durante el proceso de intalación no hemos insertado
todos los CDs, ahora ha llegado el momento de hacerlo. Insertemos el primer CDROM en el lector y usemos el comado
apt-cdrom para incluir sus contenidos en la base de datos:
2 Para hacer estas lecturas más asequibles podemos esperar a realizarlas cuando tengamos configurada la impresora hayamos aprendido a imprimir
mans.
CAPÍTULO 9. TALLER DE CONFIGURACIONES BÁSICAS
82
brau:/etc/apt# apt-cdrom add
Using CD-ROM mount point /cdrom/
.
.
.
Repeat this process for the rest of the CDs in your set.
Llegados a este punto repetiremos el mismo proceso para todos y cada uno de nuestros CDs de la distribución 3 .
Una vez tengamos configurado nuestro acceso a Internet, si lo estimamos oportuno, también podemos incluir fuentes
de paquetes de acceso reomoto. Para esto editaremos el fichero /etc/apt/sources.list y despues de ejecutrar
“apt-get update” ya tendremos disponibles los nuevos paquetes.
9.3.2. apt
apt es acrónimo de Advanced Package Tool, como ya se ha dicho en diversas ocasiones es el sistema básico encargado
de la administración de paquetes de las distribuciones basadas en Debian. apt pone a nuestra disposición esencialmente
dos herramientas: apt-get y apt-cache. El primer comando lo puede utilizar única y exclusivamente el root del
sistema, ya que es la herramienta de gestión de paquetes: instalación, desinstalación, actualización, etc. mientras que el
segundo, al ser un comando orientado a la búsqueda de información dentro de la base de datos, ya sean paquetes instalados
o sin instalar, puede ser utilizado por cualquier usuario.
Con el objeto de facilitar el manejo de paquetes se han desarrollado otras aplicaciones que corren por sobre de apt,
como puede ser el middle-end dpkg o los front-end dselect o aptitude. Pero antes de adentrarnos en los distintos
sistemas de administración de paquetes, debemos conocer algunos conceptos acerca de éstos y de su relación con el
sistema y el sistema de gestión.
Tipos de paquetes según su prioridad
Dentro del sistema de paquetes se distingue entre cinco tipo de paquetes distintos según su grado de dependencia con
el mismo sistema. Por orden decreciente de prioridad se clasifican como:
Required: Se trata de paquetes indispensables para el correcto funcionamiento del propio sistema.
Important: Se trata de paquetes que deberían estar presentes en cualquier sistema tipo UNIX.
Standard: Se trata de paquetes que comúnmente se encuentran en un sistema GNU/Linux. Se trata, por lo general,
de aplicaciones de tamaño reducido, pero que ya no son indispensables para el sistema
Optional: Se trata de paquetes que pueden estar o no presentes en un sistema GNU/Linux. Entre otros, dentro de
este grupo se hallan todos los paquetes referentes al sistema gráfico, ya que éste no se considera indispensable. En
realidad, en muchos servidores, con el objeto de augmentar su redimiento se prescinde del entorno gráfico.
Extra: Son paquetes que, o bien presentan conflictos con paquetes con prioridad superior a la suya, o bien porque
requieren de configuraciones especiales que no los hacen aptos para ser integrados como Optional.
Podemos determinar a qué grupo pertenece un paquete en concreto mediante, por ejemplo, la sentencia “apt-cache
show <nombre_del_paquete>” y consultar el contenido del campo Priority:
Grado de dependencia entre paquetes
apt se caracteriza por su gran consistencia a la hora de gestionar las dependencias que existen entre paquetes. Puede,
por ejemplo, que una determinada aplicación que queremos instalar dependa de una librería, y, en consecuencia, de otro
paquete que no tengamos instalado. En este caso apt nos informará de esta dependencia y nos preguntará si queremos que,
junto con la aplicación que vamos instalar, se instale el paquete que contiene dicha librería. Las relaciones entre paquetes
se clasifican de la manera siguiente:
depends: El paquete que queremos instalar depende de estos paquetes y, por consiguiente, si queremos que este
paquete funcione correctamente, debemos permitir que apt instale el resto de paquetes.
recommends: El responsable del mantenimiento del paquete ha estimado que normalmente los usuarios que vayan
a intalar este paquete también usaran los que recominenda.
3 Puede,
también, utilizarse el mismo procedimiento para incorporar datos procedentes de CDROMs no oficiales.
9.3. EL SISTEMA DE PAQUETES
83
suggests: Los paquetes que se suguieren permiten obtener un mayor rendimiento del paquete que vamos a instalar.
conflicts: El paquete que vamos a instalar no funcionará correctamente si estos otros paquetes están presentes en el
sistema.
replaces: La instalación de este paquete implica la desinstalación de los otros paquetes.
provides: El paquete que vamos a instalar incorpora todo el contenido de los paquetes mencionados.
Podemos determinar las dependencias de un paquete, por ejemplo, la sentencia “apt-cache depends
<nombre_del_paquete>”.
Acciones sobre los paquetes
Mediante los flags siguientes dpkg o dselect nos informará qué es lo que el usuario pretende hacer con dichos paquetes:
unknown: Nunca se ha hecho referencia a dicho paquete.
install: Se quiere instalar o actualizar el paquete.
remove: Se quiere desinstalar el paquete, pero manteniendo sus ficheros de configuración (comúnmente situados
en /etc/).
purge: Se quiere desintalar por completo el paquete, inclusive sus ficheros de configuración.
hold: Se quiere indicar que sobre este paquete no se quiere que se realice ninguna opercación (es decir, que se
mantenga hasta nuevo aviso su versión y su configuración).
Estado de instalación de los paquetes
Dentro del sistema un paquete se puede hallar:
installed: El paquete ha sido instalado y configurado correctamente.
half-installed: La instalación del paquete se ha comenzado, pero, por algnuna razón, no ha terminado.
not-installed: El paquete no está instalado en el sistema.
unpacked: El paquete ha sido desempaquetado, pero no configurado.
config-files: Sólo existen, en el sistema, los archivos de configuración de dicho paquete.
apt-cache
Como ya se ha dicho, apt-cache, es un comando orientado al análisis del sistema de paquetes, y por tanto, al no
ser un arma potencialmente peligrosa para el sistema, es accesible a todos sus usuarios. Los parámetros más utilizados
para este comando son los siguientes:
search pattern: Busca en la base de datos los paquetes cuyo nombre contenga pattern o en cuya Description
aparezca pattern (si el resultado es un lista extensa debido a que pattern es muy general, se puden utilizar pipes i
grep para filtrar estos resultados).
show package: Da información acerca del paquete, sus dependencias, y una descripción del mismo.
policy package: Da información acerca del estado de intalación, la versión y revisión del paquete y su procedencia.
depends package: Explicita las dependencias del paquete.
CAPÍTULO 9. TALLER DE CONFIGURACIONES BÁSICAS
84
apt-get
apt-get es el comando que se utiliza para gestionar los paquetes del sistema. Por este motivo su uso está restringuido
al root del sistema. Los parámetros más utilizados para este comando son los siguientes:
install package: Para instalar el paquete. Si éste depende de paquetes que no se encuentran en el sistema, apt nos
informará de ello, y nos preguntará si junto con el paquete en cuestión queremos instalar los paquetes de los que
depende y que no están instalados; por lo general es interesante seguir los consejos de apt.
update: Para actualizar la base de datos de apt. Este comando debe ejcutarse cada vez que se modifique el archivo
/etc/apt/sources.list.
upgrade: Para forzar la actualización de todos los paquetes instalados en el sistema a la última versión disponible.
remove package: Para eliminar el paquete, sin eliminar los ficheros de configuración, de cara a posibles reinstalaciones.
remove –purge package: Para eliminar por completo el paquete, incluyendo sus archivos de configuración.
autoclean: Para eliminar las copias caducadas de los paquetes que se ha ido instalando, proceso en el cual se
almacena de manera automática una copia del paquete sin desempaquetar en /var/cache/apt/archives
cuando se instala un paquete. Comando muy útil cara a liberar espacio del disco duro, ocupado por ficheros que,
probablemente, nunca más sean utilizados.
clean: Para eliminar todas las copias no desempaquetadas de los paquetes, independientemente de su vigencia.
9.3.3. dpkg
dpkg es acrónimo de Debian Pckage manager y fue concibido como back-end de apt. Los parámetros más utilizados
son los siguientes:
-l: Para listar todos los paquetes de la base de datos y su estado de instalación (generalmente esta opción se combina
con grep).
-L package: Para listar los ficheros contenidos en el paquete.
-r package: Tiene el mismo efecto que apt-get remove package.
-P package: Tiene el mismo efecto que apt-get remove -purge package.
-p package: Tiene el mismo efecto que apt-get show package.
-s package: Describe el estado de instalación del paquete.
-S file: Busca a qué paquetes pertenece el fichero.
9.3.4. dselect
dselect es una GUI (Graphical User Interface) que corre sobre apt. Para entrar en ella basta con teclear el comando
dselect, y mediante los menús de esta interfice ir selecionando los distintos paquetes sobre los cuales queremos operar
y especificar qué tipo de operación deseamos hacer sobre ellos.
9.3.5. aptitude
aptitude es otra GUI que corre sobre apt. Por defecto no viene instalada; hay por esto antes de proceder a su uso ya
que instalarla:
brau:/etc/apt# apt-get install aptitude
Una vez instalada, la lanzamos mediante el comando aptitude, y en seguida veremos que su uso es igual o más
simple que el de dselect ya que dispone de menús desplegables accesibles mediante F10.
9.4. LOCALES: CONFIGURACIÓN REGIONAL
85
9.4. locales: configuración regional
Aunque aparentemente nuestro teclado funcione correctamente, ya que podemos utilizar acentos, diéresis y otros
caracteres no ingleses, a medida que vayamos adaptando el sistema a nuestras necesidades, y especialmente cuando
instalemos el sistema gráfico y hagamos correr aplicaciones sobre él en el próximo taller, nos daremos cuenta de que ésto
no es así. Podemos pues, en este punto, proceder a configurar correctamente estos aspectos para no tenerlo que hacer más
tarde.
En primer lugar comprobaremos si el paquete locales está instalado:
brau:/# dpkg -l| grep locales
ii locales
2.2.5-11.2
GNU C Library: National Language (locale) da
Si no obtenemos la última línea, debemos proceder a instalar el paquete y configurarlo:
brau:/# apt-get install locales
Y si ya disponemos de él, teclearemos la siguiente línea para reconfigurarlo:
brau:/# dpkg-reconfigure locales
De las muchas opciones que se nos ofrecen escojamos [*] es_ES ISO-8859-1, es decir situémonos sobre dicha
opción y pulsemos la barra espaciadora. Mediante TABsituémonos sobre OK y pulsemos INTRO. En la próxima pantalla
selecionemos C.
De vuelta a la línea de comandos editemos el fichero /etc/environment para dejarlo de la forma siguiente:
LC_ALL=es_ES
LANGUAGE=en_US
LC_TYPE=es_ES
LC_MESSAGES=ISO8859-1
LANG=C
Para hacer efectivo el cambio basta con teclear el comando locale-gen, y saldremos de todas las sesiones que
tengamos abiertas para cargar la nueva configuración4.
9.5. Configuración de man y su pager
Puede que al intentar invocar man nos de un error del tipo:
Reformatting man(1), please wait...
sh: /usr/bin/pager: No such file or directory
sh: exec: /usr/bin/pager: cannot execute: No such file or directory
man: command exited with status 32256: /usr/bin/zsoelim /tmp/zmanZpjojO |
/usr/bin/tbl | /usr/bin/nroff -mandoc -Tlatin1 | exec /usr/bin/pager -s
En este caso no tenemos ningún paginador assignado a /usr/bin/pager para que man lo pueda utilizar para
mostrarnos los contenidos de ayuda. Es más, probablemente no tengamos ningun paginador instalado. En ambos casos lo
que haremos es intentar instalar less, seguramente el paginador más utilizado para man:
brau:/# apt-get install less
En el caso que el paquete no esté instalado se nos abrirá una pantalla de configuración, a la que en principio, contestaremos negativamente, opción por defecto. Con esto, ya habremos instalado less, y probablemente ya se haya asignado él
mismo como paguinador de man. Si no fuese así (lo podríamos probar ejecutando un man man, por ejemplo), o si less
ya estuviese instalado, utilizaríamos el comando siguiente para assignarlo como paginador (también se puede utilizar para
cambiar de paginador, por ejemplo para cambiar a more, jless, o cualquier otro paginador):
brau:/# update-alternatives --config pager
Lo que hace el comando anterior, en el caso del paginador, y en general con el resto de aspectos configurables mediante
él, es crear enlaces simbólicos. Para el caso del pagindor estos son:
/etc/alternatives/pager -> /usr/bin/less
/usr/bin/pager -> /etc/alternatives/pager
4 Para
saber más de locales ser recomineda visitar la página http://www.uni-ulm.de/ s_smasch/locale/
CAPÍTULO 9. TALLER DE CONFIGURACIONES BÁSICAS
86
9.6. El archivo principal de arranque, /etc/inittab
Aunque el proceso de arranque de un sistema GNU/Linux es complejo, en esta sección sólo se pretende trabajar sobre
uno de los ficheros principales de este proceso: /etc/inittab. Este archivo indica al proceso de arranque, entre otros,
a qué runlevel es al que se entrará, y en definitiva, esto definirá qué procesos se arrancarán de forma automática durante
el processo de arranque. Para saber en qué runlevel nos hallamos basta con teclear el comando runlevel. Para cambiar
de runlevel, como root, usaremos la instrucción init <runlevel_de_destino>.
Es interesante abrir este fichero e irse familiarizando con su contenido, ya que esto nos permitirá comprender mejor el
processo de arranque de un sistema GNU/Linux.
9.7. Montaje de dispositivos, /etc/fstab
/etc/fstab es el fichero que contiene la información acerca de las particiones y dispositivos que se montarán de
forma automática durante el proceso de arranque, y las que se pueden montar posteriormente, así como establece quién
puede hacerlo. A continuación se muestra el posible contenido de este fichero y se pasa a analizarlo:
# /etc/fstab: static file system information.
#
# <file system> <mount point>
<type> <options>
/dev/hdg1
/
ext3
errors=remount-ro
/dev/hdg2
none
swap
sw
proc
/proc
proc
defaults
/dev/fd0
/floppy
auto
user,noauto
/dev/hdg5
/usr
ext3
defaults
/dev/hdg6
/var
ext3
defaults
/dev/hdg7
/home
ext3
defaults
<dump>
0
0
0
0
0
0
0
<pass>
1
0
0
0
2
2
2
/dev/cdrom
0
0
/cdrom
iso9660 ro,user,noauto
/dev/hdc1
/dev/hde1
/dev/hde5
/mnt/hdc1 ntfs ro,user,noauto,gid=windows,umask=0007,utf8 0 0
/mnt/hde1 ntfs ro,user,noauto,gid=windows,umask=0007,utf8 0 0
/mnt/hde5 ntfs ro,user,noauto,gid=windows,umask=0007,utf8 0 0
/dev/hde6
/dev/hde7
/mnt/hde6 vfat utf8,user,noauto 0 0
/mnt/hde7 vfat utf8,user,noauto 0 0
Las primeras líneas las ha generado automáticamente el proceso de instalación y en ellas podemos ver óomo estàn
distribuidos los distintos directorios dentro de la estructura puramente GNU/Linux. Quizás la línea que más llame la
atención sea la proc /proc proc defaults 0 0; ésta es la encargada del montaje del directorio virtual proc, del
qual ya se habló en el primer taller.
Más interessantes son las líneas tipo /dev/hdc1 /mnt/hdc1 ntfs utf8,ro
,noauto,user,gid=windows,umask=0007,utf8 0 0. En ellas se especifica el punto de origen y el punto
de montaje de particiones pertenecientes al sistema operativo Windows2000 TM, es decir, de tipo ntfs. En estas particiones no se puede escribir desde GNU/Linux, aunque sí se puede leer su contenido, esto se ve reflejado en las opciones
ro,noauto,user,gid=windows,umask=0007,utf8 (es fundamental no dejar ningún espacio en blanco entre
opciones, ya que este carácter es el que se utiliza para separar los campos en este fichero). La primera indica que se trata de
una partición de solo lectura; la segunda, que no se monte automáticamente durante el proceso de arranque del sistema; la
tercera indica que esta partición la puede montar cualquier usuario; pero la cuarta opción indica que sólo podrán acceder a
ella los miembros pertenecientes al grupo windows (definido en el fichero /etc/group); la penúltima opción establece
la antimáscara de montaje y la última la tabla de códigos a utilizar.
Hay que tener presente que por defecto el kernel que hemos instalado no soporta el tipo ntfs. Por tanto hay que cargar
el módulo correspondiente mediante el comando modconf y seleccionar la opción kernel/fs/ntfs.
Las últimas líneas del fichero anterior van destinadas a montar particiones fat32, sobre las cuales sí que es possible
escribir desde GNU/Linux. Por esta razón es buena idea disponer siempre de una pequeña partición con este tipo de
formato ya que será accesible tanto desde GNU/Linux como desde Windows TM.
Si bien es cierto que es possible montar un sistema de ficheros desde la línea de comandos, como por ejemplo se haría
para montar el CDROM:
brau:/etc/apt# mount /dev/cdrom /cdrom -t iso9660 ro
9.8. CONFIGURACIÓN DE DISPOSITIVOS
87
Es mucho más cómodo tener la información introducida en el archivo /etc/fstab, ya que esto nos perimitirá hacer
lo mismo tecleando tan solo:
brau:/etc/apt# mount /cdrom
9.8. Configuración de dispositivos
Una vez sentadas las bases para la adminstración de paquetes, podemos abordar la tarea de empezar a configurar el
sistema a medida de nuestras necesidades. Este proceso consta, básicamente, de dos partes: configuración de los distintos
dispositivos de hardware que tengamos instalados en el ordenador, e instalación del software que vamos a utilizar.
La configuración del hardware del sistema suele ser la parte que cuesta más esfuerzo en general, ya que en cada ordenador encontraremos dispositivos distintos, y por tanto cada ordenador será un mundo. Por lo general, en los sistemas
GNU/Linux se puede configurar cualquier dispositivo, por raro que éste sea, aunque en función de su grado de estandarización, esto será más o menos complicado. Pero también es cierto que durante este proceso es cuando más se aprende, ya
que, por lo general, configurar un dispositivo implicará siempre ciertas tareas previas, como informarnos exactamente sobre qué tipo de dispositivo es el que disponemos, leer documentación acerca de cómo este tipo de dispositivos se integran
en los sistams GNU/Linux, cómo se hace esta integración para nuestro dispositivo en particular, etc.
Dado que no todos los fabricantes de hardware dan soporte a los sistemas GNU/Linux, y los hay que ni tan si quiera
facilitan la información necesaria para que los desarrolladores de la comunidad puedan escribir el código necesario para
poder integrar estos dispositivos al sistema operativo se recomienda siempre que a la hora de adquirir hardware nuevo,
previamente nos informemos sobre cúal es exactamente el producto que que deseamos adquirir (información, en general,
mucho más precisa de la que suelen facilitar los proveedores de hardware, y de la cual, a veces, ni disponen), si éste
está plenamente soportado, de qué infomación disponemos para integrar el nuevo producto en nuestro sistema, etc. Los
aspectos generales a considerar, a la hora de realizar una nueva adquisición, a grandes rasgos son dos: el grado de estandarización, y calidad del producto. Por lo que a la estandarización se refiere, cuanto más estándar sea el producto, seguro
que más usuarios disponen de él y, por tanto se hace mucho más probable que éste esté plenamente soportado. En cuanto
a calidad del producto se refiere, hace ya algunos años, que algunos fabricantes de hardware, para reducir costes, empezaron a sustituir funciones que inicialmente se implementaban via hardware por soluciones software (siendo el caso más
comúnmente conocido de esta práctica, quizás, los módems conocidos como winmódems). Esto se traduce, por una parte,
en una bajada de rendimiento del sistema, ya que presupone cargar a la CPU con nuevas tareas, para muchas de la cuales
ni tan siquiera ha sido diseñada y, por otra la necessidad de disponer del software que subplante al hardware eliminado, y
que, por lo general, sólo está desarrollado para cierto tipo de sistemas operativos; Por esta razón, se recomienda en general
rehuir de cualquier producto que se distinga por ser diseñado para un sistema operativo determinado.
A lo largo de cada subsección de configuración se irán comentando algunos aspectos sobre los distintos dispositivos
que nos podemos encontrar, y qué problemas lleban implícitos.
Antes de empezar a configurar los distintos dispositivos de nuestro sistema, recordaremos algunas estrategias que nos
pueden ser de utilidad para este fin. En primer lugar mediante el comando lspci podemos obtener mucha información
acerca de cómo estos dispositivos han sido reconocidos por el sistema durante el proceso de arranque. Si esta información
no nos es suficiente, siempre podemos recurrir al directorio virtual /proc/, donde queda registrada toda la información
acerca del hardware del sistema, entre otra información. También pueden ser de utilidad los ficheros de log, ubicados en
/var/log/ (una práctica interesante para ver cómo evoluciona temporalmente el contenido de estos ficheros es utilizar
el comando tail con el parámetro “-f” y redireccionar su salida a una tty que no estemos usando; a modo de ejemplo
“tail -f /var/log/messages >/dev/tty10”).
9.8.1. Configuración del ratón
Al igual que se ha hecho en el taller de KNOPPIX, el deamon que se en cargará de gestionar el ratón será gpm.
Procedamos pues a instalar el paquete:
brau:/etc/apt# apt-get install gpm
Al finalizar la instalación se arranca automáticamente un script para asistirnos en la configuración del ratón, los
parámetros que debemos pasarle son ecencialmente los mismos que le pasamos en su momento en el taller de KNOPPIX,
pero si algo fallase siempre podemos volver a lanzar el programa de configuración mediante el comando gpmconfig (por
lo general la configuración “-m /dev/psaux -t ps2” debería ser válida para la mayoría de mice de tres bottones
PS2). La configuración que utilizará gpm cada vez que arranque se guarda en /etc/gpm.conf.
Se recomienda que el ratón tenga tres botones, ya que se acostumbra a asignar funciones a los tres, en especial en
los entornos gráficos. Por esta razón, si disponemos de un ratón de tan solo dos botones, deberemos emular el tercero
pulsando los dos a la vez.
CAPÍTULO 9. TALLER DE CONFIGURACIONES BÁSICAS
88
Arranque y parada de gpm
Como ya se ha dicho, el programa encargado de gestionar el funcionamiento del ratón es un deamon. Por ello tanto
para lanzarlo como para detenerlo, precediremos de la misma forma que se hace con cualquier deamon. Esta subsección
servirá de ejemplo para mostrar cómo se arrancan y se paran los deamons.
Tanto el arranque como la parada de un deamon se hace mediante un script residente en /etc/init.d/. Por lo
general, si se invoca este script sin ningún parámetro él mismo nos mostrará una línea de ayuda para orientarnos en su
uso. Procedamos pues a parar el deamon gpm:
brau:/etc/init.d# ./gpm stop
Stopping mouse interface server: gpm
Mediante “ps aux” podemos comprobar que, efectivamente, no hay ningún processo llamado gpm corriendo, y
además podemos ver que si movemos el ratón no se muestra nada por pantalla. Ahora procedamos a arrancarlo:
brau:/etc/init.d# ./gpm start
Starting mouse interface server: gpm
Movamos el ratón y observemos como en pantalla aparece su puntero. Ahora procedamos a analizar si al arrancar el
ordenador este deamon se arrancará automáticamente. El fichero /etc/inittab nos indica en qué runlevel se arrancará
el sistema operativo: por defecto el 2; por lo tanto en dicho archivo deberíamos encontrar una línea como la que sigue:
# The default runlevel.
id:2:initdefault:
Comprobemos pues si en el directorio /etc/rc2.d/ existe un enlaces simbólico a /etc/init.d/gpm:
brau:/etc/init.d# ls -l ../rc2.d/ | grep gpm
lrwxrwxrwx
1 root
root
13 feb 21 13:03 S20gpm -> ../init.d/gpm
Si este enlace simbólico no existiera, y deseásemos que gpm se arrancase automáticamente durante el proceso de
arranque, deberíamos crearlo manualment mediante “ls -s”. Si por el contrario, el enlace existiera y no deseásemos
que gpm se arrancara durante el proceso de arranque bastaría con borrar este enlace simbólico; no obstante, no es recomendable borrar los scripts de /etc/init.d, ya que son muy útiles de cara a arrancar y detener deamons.
9.8.2. Configuración de módems
Al igual que el resto de hardware, los módems se pueden configurar de modo totalmente manual, pero esta práctica, en
general, ha pasado a formar parte del pasado, ya que con el tiempo se han ido desarrollando herramientas suficientemente
potentes y fiables que nos pueden ayudar a ahorrarnos la tediosa tarea de configurar un módem manualmente. Una de
estas herramientas es pppconfig, que es la que se propone en este texto para configurar nuestro módem.
Pero antes de empezar con la configuración de nuestro módem hay que poner de manifiesto que no son realmente módems todos los dispositivos que se anuncian o se venden como tales. Como ya se ha dicho, muchos fabricantes,
con el objetivo de reducir costes, han ido sustituyendo componentes físicos por software, siendo, probablemente los
módems los primeros dispositivos que históricamente fueron víctimas de estas prácticas 5 . Por esta razón muchos de
estos dispositivos se han visto reducidos a meros esclavos de su software (para más información acerca de estos dispositivos, y de su integración en GNU/Linux véase6 . Por ello, en general se recominenda utilizar, siempre que sea possible módems externos. Independientemente de que se disponga de un módem real o no se recomienda la lectura de
http://www.tldp.org/HOWTO/Modem-HOWTO.html.
Dado que vamos a utilizar pppconfig para configurar nuestro módem, si no lo instalamos durante el proceso de instalación del sistema (se puede probar intentando lanzar la aplicación directamente, es decir, tecleando pppconfig, o
mediante “dpkg -l | grep pppconfig”), lo primero que debemos hacerlo es instalar la aplicación:
brau:~# apt-get install ppp pppconfig
5 Hay que prestar especial atención a los módems internos, ya que en realidad son pocos los que incorporan todo el hardware propio de estos
dispositivos. Éstos son facilmente reconocibles por la diferencia de precio con respecto a los falsos módems.
6 http://www.tldp.org/HOWTO/Winmodems-and-Linux-HOWTO.html
http://www.tldp.org/HOWTO/Linmodem-HOWTO.html
http://www.idir.net/ gromitkc/winmodem.html
9.8. CONFIGURACIÓN DE DISPOSITIVOS
89
Una vez estemos en la pantalla principal de la interfaz de instalación, seleccionaremos la opción Create Create
a connection y en la pantalla siguiente introduciremos el nombre con el que nos referiremos a esta configuración ya
que es posible configurar y gestionar más de una conexión.
Después de asignar un nombre a la nueva configuración debemos configurar el accesso al DNS, podemos escoger la
opción por defecto, asignación estática de DNS, o por asignación dinámica de DNS, si sabemos certeramente que nuestro
ISP durante el processo de conexión nos facilita las direcciones de los DNS. Si escogemos la opción por defecto se nos
pedirá que entremos las IP de los DNS que queremos utilizar, y que se almacenarán en el fichero /etc/ppp/resolv/
nombredeconfiguracion).
En la pantalla seguiente debemos escoger el método de autenticación para establecer la configuración. En general, y
salvo casos excepcionales, escogeremos la primera opción, PAP. Seguidamente facilitaremos el nombre de usuario y el
password de conexión y seleccionaremos la velocidad de acceso; la que se propone por defecto, 115200, en la mayoría
de conexiones debería funcionar sin ningún problema. Tras especificar si nuestra línea telefónica va por pulsos o por tonos
(actualmente, la mayoría ya van por tonos) entraremos el número que se debe marcar y que nos tiene que haber facilitado
nuestro ISP.
Llegados a este punto pppconfig nos propone la ejecución de autodetección del módem. Con el módem en marcha
podemos dejar que sea el mismo programa el que detecte a qué puerto está conectado el módem, o lo podemos hacer
nosotros manualmente (recordando siempre la correspondencia: primer puerto serie, COM1, /dev/ttyS0, segundo
puerto serie, COM2, /dev/ttyS1, etc).
Una vez hayamos entrado la ttyS a la que está conectado el módem, entraremos en una pantalla de resumen de los
datos que hemos entrado, la cual también nos ofrece la posibilidad de establecer opciones avanzadas (por lo general
no necessarias). Si los datos son correctos podemos escoger la opción Finished Write files and return
to main menu, y tras confirmar la operación, de retorno al menú principal de la interficie, si no queremos configurar ninguna otra conexión escogeremos la opción Quit
Exit this utility para volver a la línea de
comandos. Una vez en la línia de comandos podemos comprobar que los datos se han guardado correctamente en
/etc/ppp/peers/nombredeconfiguración
Para los usuarios de conexiones PPP también puede ser interesante instalar el paquete pppstatus para monotorizar
el tráfico de la conexión, entre otros.
Establecimiento y finalización de conexión: pon, poff
Para establecer la conexión bastará con teclear la instrucción pon seguido del nombre de conexión que queramos
utilizar; si sólo hemos configurado una conexión no será necesario especificar su nombre. En principio, si no se restringe
el uso, pon puede ser ejecutado por cualquier usuario.
Para finalizar la conexión bastará con ejecutar el comando poff.
9.8.3. Configuración de módems DSL
De la misma manera que se ha hecho en la sección anterior para la configuración de módems tradicionales, utilizaremos una herramienta para configurar los módems DSL: pppoeconf. Pero antes de empezar se recomienda la lectura de
http://www.tldp.org/HOWTO/DSL-HOWTO/ y de http://www.tldp.org/HOWTO/
ADSL-Bandwidth-Management-HOWTO/.
9.8.4. Configuración de tarjetas de red
Si por el motivo que sea no hemos configurado la tarjeta de red durante el proceso de instalación, ahora es el momento
de hacerlo. Aunque prácticamente todas las tarjetas de red están soportadas en los sistemas GNU/Linux, ya que éstas
son una pieza clave para un sistema operativo orientado a redes, una vez más se recomienda el uso de hardware lo más
estándar posible para no tener complicaciones a la hora de configurarla. Puede que nuestra tarjeta venga soportada de dos
formas distintas: la primera es que su driver haya sido directamente compilado dentro del propio kernel, y la segunda, es
que el driver haya sido compilado en forma modular, para que se cargue posteriormente.
La forma más sencilla de saber si el driver de nuestra tarjeta de red ha sido compilado dentro del propio kernel, es
analizando el mensaje de retorno de dmesg7 .
Si después de analizarse detalladamente la salida del comand dmesg llegamos a la conclusión de que el driver para
nuestra tarjeta no ha sido cargado, podemos ejecutar el comando modconf, comando que sirve para cargar módulos al
kernel que han sido compilados junto a él, y comprobar si el driver para ésta aparece en la subsección kernel/drivers/net.
Si es así, bastará con seleccionarlo para cargarlo en el kernel.
7 La configuración completa del flavor bf24 se puede encontrar en ftp://ftp.debian.org/debian/dists/woody/main/disks-i386
/current/bf2.4/kernel-config entre otros
CAPÍTULO 9. TALLER DE CONFIGURACIONES BÁSICAS
90
Si nuestra tarjeta de red no está soportada por defecto, deberemos recurrir a la recompilación del kernel.
Una vez hecho esto, editaremos el fichero /etc/network/interfaces para pasar los parámetros correspondientes a nuestra red a la tarjeta. Una posible configuración sería:
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
# The loopback interface
auto lo
iface lo inet loopback
# The first network card - this entry was created during the Debian installation
# (network, broadcast and gateway are optional)
auto eth0
iface eth0 inet static
address 158.109.69.132
netmask 255.255.0.0
network 158.109.0.0
broadcast 158.109.255.255
gateway 158.109.0.3
Se recomienda la lectura de http://www.tldp.org/HOWTO/Networking-Overview-HOWTO.html8, y
el man de interfaces. Si no disponemos de tarjeta de red, y quisiéramos hacer pruebas, siempre podemos recurrir al
módulo dummy; en este caso, el dispositivo, en vez de llamarse eth0 se llamaría dummy0.
Si se quiere configurar más de una tarjeta de red en el mismo ordenador (práctica muy habitual en gateways, etre
otros) es necesario pasar los parámetros correspondientes al kernel durante el proceso de arranque (utilizando append
en LILO, por ejemplo) para evitar conflictos entre dispositivos.
Arranque y parada de servicios de red: ifup, ifdown
La reinicialización todos los servicios de red (los de /etc/network/interfaces) se puede hacer mediante el
script /etc/init.d/networking con el parámetro restart.
ifup se utiliza para arrancar los servicios de red de una interface determinada, y ifdown para pararlos. Así pues,
para la configuración anterior, si quisieramos detener y volver a arrancar los servicios de eth0, lo que haríamos es lo
siguiente (se utiliza el comando ifconfig para comprobar los resultados):
brau:~# ifconfig
eth0
Link encap:Ethernet HWaddr 00:01:02:B4:3A:61
inet addr:158.109.69.132 Bcast:158.109.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:36409683 errors:0 dropped:0 overruns:221 frame:0
TX packets:35938 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:1489273710 (1.3 GiB) TX bytes:20116974 (19.1 MiB)
Interrupt:5 Base address:0x9400
lo
Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:823 errors:0 dropped:0 overruns:0 frame:0
TX packets:823 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3169619 (3.0 MiB) TX bytes:3169619 (3.0 MiB)
brau:~# ifdown eth0
brau:~# ifconfig
lo
Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:823 errors:0 dropped:0 overruns:0 frame:0
TX packets:823 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3169619 (3.0 MiB) TX bytes:3169619 (3.0 MiB)
8 También
http://www.fokus.gmd.de/linux/HOWTO/Net-HOWTO/
9.8. CONFIGURACIÓN DE DISPOSITIVOS
91
brau:~# ifup eth0
brau:~# ifconfig
eth0
Link encap:Ethernet HWaddr 00:01:02:B4:3A:61
inet addr:158.109.69.132 Bcast:158.109.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:36420981 errors:0 dropped:0 overruns:221 frame:0
TX packets:35965 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:1490867554 (1.3 GiB) TX bytes:20118868 (19.1 MiB)
Interrupt:5 Base address:0x9400
lo
Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:823 errors:0 dropped:0 overruns:0 frame:0
TX packets:823 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3169619 (3.0 MiB) TX bytes:3169619 (3.0 MiB)
9.8.5. Configuración de impresoras
Tener configurada la impresora puede ser de gran utilidad, ya que, esto nos permitirá, entre otras cosas, imprimir los
ficheros de man, los de configuración, etc. para poderlos estudiar más detenidamente sobre formato papel.
Por lo que se refiere al tipo de impresora preferible, en un entorno doméstico sería una que usara el puerto paralelo
(/dev/lpX, normalmente /dev/lp0) con el objetivo de garantizar que se trata de una impresora no dependiente de
su software, ya que la mayoría de las nuevas que están apareciendo en el mercado, especialmente las de puerto USB,
son impresoras generalmente diseñadas para ser empleadas para un sistema operativo determinado. Estas impresoras son
popularmente conocidas como winprinters (y su génesis es parecida a la de los denominados winmodems). En un entorno
profesional, lo óptimo sería contar con una impresora que incorporara su propia interfaz de red y que, por lo tanto, fuera
un nodo más de ésta. Para más información acerca de impresoras y su integración en los sistemas operativos GNU/Linux,
se recomienda visitar la página http://www.linuxprinting.org, donde encontraremos un listado exahustivo de
las impresoras existentes en el mercado, y su grado de soporte.
La topología general del sistema de impresión bajo GNU/Linux es la de cliente-servidor. El servidor, lpd (en el
sistema BSD), es tipo daemon, y en consecuencia lo manipularemos como tal. El archivo de configuración del servidor es
/etc/printcap. En el podemos configurar tantas impresoras como deseemos 9 .
Como hemos visto, configurar correctamente una impresora puede ser un tanto difícil. Por esta razón han aparecido
diversos proyectos para desarrollar interficies para hacer más amena su configuración, algunos de los cuales aportan su
propio servidor de impresión y sus propias herramientas cliente.
Impresión de ficheros de texto
Los formatadores son programas que se utilizan, principalmente, para transcribir ficheros en formato texto a formato
PostScript10 . Estos programas nos pueden ser de utilidad ya que nos permiten pasar a formato papel la ayuda de los
comandos, ficheros de configuración, etc. para poderlos estudiar de una forma más cómoda. Entre estos encontramos
mpager (dentro del paquete con el mismo nombre), o enscrip (también empaquetado con este mismo nombre, y más
potente que el anterior). A continuación se detallan un par de líneas para ejemplificar su uso:
man man | mpage -2 -o |lpr
Mediante esta línea redireccionamos la salida de man de man a mpage, que le da formato a dos columnas por hoja,
sin márgenes y redireccionamos su salida al cliente de impresión lpr
endscript /etc/fstab -B -fTimes-Roman7 -r
Con esta línea haremos que se imprima el contenido del fichero /etc/fstab sin cabecera, utilizando el tipo de
carácter Times-Roman de tamaño 7 y de forma apaisada.
9 Ante la presencia de más de una impresora configurada, los clientes usan, normalmente el parámetro “-P” seguido del nombre de la impresora,
para referirse a ésta
10 El lenguaje PostScrip históricamente ha tenido más implementación en el campo de la impresión
92
CAPÍTULO 9. TALLER DE CONFIGURACIONES BÁSICAS
9.8.6. Configuración de tarjetas de sonido
Debido a la gran cantidad de tarjetas de sonido existentes en el mercado, se hace casi imposible dar una descripción
de cómo configurarlas todas. Se recomienda la lectura de http://www.tldp.org/HOWTO/Sound-HOWTO/ y la
visita a las páginas de los dos proyectos más destacados en cuanto a sonido bajo GNU/Linux se refiere: http://www.
opensound.com/ y http://www.alsa-project.org/.
A continuación se expondrá el modo de proceder para configurar una tarjeta de sonido bastante común: SoundBlasterPCI (chipset ES1371). Para este tipo de tarjeta, el comando lspci nos devolverá una línea como la siguiente:
00:0d.0 Multimedia audio controller: Ensoniq 5880 AudioPCI (rev 02)
En primer lugar cargaremos el módulo correspondiente a esta tarjeta de sonido mediante el comando modconf,
kernel/drivers/sound, es1371.
Seguidamente crearemos el grupo audio en /etc/group e incluiremos en él todos los usuarios que deseamos que
tengan acceso al dispositivo de sonido (si deseamos que todos los usuarios tengan acceso a él, podemos obviar este paso, y
dar todos los permisos a los ficheros /dev/dsp y /dev/mixer); a continuación asociaremos los ficheros /dev/dsp
y /dev/mixer al nuevo grupo creado.
Con esto ya tenemos configurada la tarjeta de sonido. Ahora podemos comprobarlo direccionando un fichero de audio
directamente a /dev/dsp, como suguiere http://www.tldp.org/HOWTO/Sound-HOWTO/ o esperar a tener el
entorno gráfico configurado para poder instalar aplicaciones de audio que corren sobre él.
9.9. Conclusión
En este taller hemos aprendido a trabajar con el sistema de paquetes de Debian, hecho fundamental, ya que esto nos
ha permitido aprender a instalar, desinstalar y a gestionar aplicaciones. También hemos aprendido a configurar distintos
dispositivos de hardware, y con ello, una cosa básica: que con GNU/Linux esto no es tan sencillo como en otros sistemas
operativos, ya que requiere, por lo general, tener un conocimiento más profundo tanto del propio dispositivo como del
sistema en sí. Pero en compensación podemos asegurar que, una vez configurado un dispositivo, éste funcionará perfectamente y no deberemos preocuparnos más de él. Y todo esto teniendo en mente que aún no hemos configurado el entorno
gráfico (probablemente una de las misiones más complicadas en un entorno GNU/Linux). No obstante, y para animar a
aquellos que a estas alturas puedan pensar que adentrarse en el mundo GNU/Linux ha sido una mala idea, una misión
fallida, y una pérdida de tiempo, nos gustaría citar un párrafo del libro Debian GNU/Linux 2.1 de Mario Camou, John
Goerzen y Aaron Van CouWenberghe, Part I, Chapter 1, Why Linux Is Better:
Windows NT, however, learned to speak the language of the Internet just a few years ago. It is not refined by any
stretch imagination, but plagued with bugs and inconsistences. Bussinesses need a solution that they can put online and
expect to remain available 100 % of the time, but Windows NT cannot meet this need. On the contrary, a Windows NT
administrator’s most common job is crash recovery; he wastes too much time doing busywork, such as booting servers
that have gone down.
Aaron Van CouWenberghe
Capítulo 10
Arquitectura X-Window
10.1. ¿Qué es X-Window?
X-window es una arquitectura de ventanas diseñada a mediados de los 80 para poder disponer de un entorno gráfico
en estaciones de trabajo. Una arquitectura de ventanas (o sistema de ventanas) es un entorno gráfico que nos proporciona
la posibilidad de tener diferentes aplicaciones localizadas en diferentes regiones de la pantalla, generalmente delimitadas
por algún tipo de ventana. Estos entornos suelen proporcionar mecanismos para el desplazamiento y manipulación de
estas ventanas de forma que el trabajo pueda ser más interactivo y ameno.
A diferencia de otros entornos de ventanas, la arquitectura X-Window se diseñó para ser independiente de plataforma,
de manera que se pudiera instalar en cualquier ordenador que corriera un sistema tipo UNIX. Aunque la arquitectura
de ventanas X-Window ha tenido una dilatada historia en la que se han utilizado diferentes tipos de licencias, varias
implementaciones y muchos equipos de desarrollo diferentes, actualmente se utiliza, mayoritariamente, la implementación
que ha desarrollado el proyecto XFree86 Inc, llamada XFree86. Esta implementación se ditribuye con licencia open
source, que aunque no es exactamente igual que la GPL o sus variantes, tiene características parecidas que permiten
acceder a su código fuente, su redistribución, etc. Es por este motivo que en la mayoría de distribuciones de GNU/Linux
(y cada vez más en otros sistemas operativos -como Mac OS X-) se incorpora esta implementación de X-Window.
X-Window está diseñado con un arquitectura cliente/servidor. Este tipo de arquitectura significa que el software está
estructurado en dos partes totalmente independientes (servidor y cliente) que se comunican a partir de un enlace de
comunicación. Aunque esto implica que el diseño y la codificación es un poco más compleja, esta arquitectura proporciona
un flexibilidad total en el sentido que cliente y servidor pueden estar ubicados en diferentes sitios y utilizando diferentes
plataformas y/o sistemas operativos. Además, podemos aprovechar muchísimo más un mismo servidor ya que éste podrá
dar servicio a más de un cliente a la vez. De esta forma, los ordenadores clientes pueden trabajar con un entorno gráfico y
los recursos del servidor. Naturalmente, esta arquitectura también nos permite trabajar con X-Window de forma local, en
la máquina donde está situado el servidor, aunque no es indispensable.
Los componentes de los que está compuesto X-Window son: servidor, cliente y enlace de comunicación. Servidor y
cliente están diseñados para ser independientes de plataforma y, en el caso del enlace de comunicación, para ser independiente del protocolo de red. De esta forma, podemos utilizar X-Window en cualquier tipo de escenario; por ejemplo,
podríamos tener el servidor instalado en un ordenador con Windows TM, conectándose a un cliente con GNU/Linux y utilizar como canal de comunicación Internet (protocolo IPv4). Aunque la configuración de cada uno de estos componentes
(sobretodo el cliente) sí que depende, en cierto modo, de la plataforma dónde está instalado, el enlace de comunicación
nos permite aislar los componentes, dándoles un lenguaje propio para su entendimiento. Este enlace utiliza un protocolo propio denominado XDMCP (X Display Manager Control Protocol), que está en un nivel superior al de la red de
comunicación utilizada (es por este motivo que es independiente de red).
SERVIDOR X
windows
SERVIDOR X
debian
Potato
SERVIDOR X
FreeBSD
ENLACES DE COMUNICACIÓN (XDMCP)
debian Woody
CLIENTE X
Figura 10.1: Arquitectura X-window.
93
CAPÍTULO 10. ARQUITECTURA X-WINDOW
94
En esta arquitectura (figura 10.1), el servidor está ideado para recoger los eventos que se producen por los dispositivos
de entrada como el teclado, el ratón, etc. y enviarlos al cliente. El cliente procesa estos eventos y responde al servidor,
que muestra los resultados en los dispositivos de salida (generalmente el monitor). Aunque la primera impresión que
puede sugerirnos este diseño es que el tiempo de respuesta debe ser muy lento, el protocolo XDMCP está especialmente
diseñado para proporcionar un enlace rápido entre servidor y cliente, de forma que se pueda trabajar realmente de forma
interactiva. En los únicos escenarios en que podemos notar este inconveniente es en conexiones remotas utilizando redes
de comunicaciones lentas.
En resumen, pues, las principales características y funciones de cada uno de los componentes de X-Window son las
siguientes:
CLIENTE
Control del display del usuario
Gestión de diferentes servidores simultáneamente
Dependiente de plataforma
SERVIDOR
Procesamiento de los dispositivos de entrada
Independiente de plataforma
ENLACE
Diseñado para poder trabajar interactivamente
Pensado para minimizar el tráfico en la red
Transparente (independiente de red)
A medida que las tarjetas gráficas han ido evolucionando, cada vez más aplicaciones y juegos necesitan de un procesamiento en 2D o 3D más rápido. Si bien la arquitectura de ventanas X-Window aporta muchas ventajas, cuando queremos
utilizar este tipo de aplicaciones el diseño servidor/cliente no es el más adecuado ya que no aprovechamos las funciones
de procesamiento 2D y 3D extremadamente rápido de las tarjetas gráficas instaladas en el cliente. Para solucionar este
problema, a partir del 1998 apareció una tecnología llamada DRI (Direct Rendering Infrastructure) que permite aprovechar los chips de procesamiento de las tarjetas para ahorrar faena al servidor X-Window. De esta forma, continuamos
teniendo todas las ventajas de X-Window aprovechando los elementos específicos de las tarjetas gráficas.
A diferencia de otros sistemas operativos dónde el entorno gráfico está íntimamente integrado con el resto de funciones, la arquitectura X-Window es totalmente independiente del operativo y no nos limita a ningún GUI (Grafic User
Interface) determinado. De hecho, la arquitectura sólo nos proporciona herramientas gráficas de bajo nivel para manipular
la salida del monitor. Estas herramientas estan incluídas en la librería Xlib y principalmente son funciones para crear y
manipular ventanas, operaciones con fuentes de caracteres, detección de eventos de usuario y operaciones gráficas. Con
estas funciones podemos dotar a nuestras aplicaciones del look and feel (diseño de botones, menús, . . . ) que queramos,
crear nuevos GUI, . . . De hecho, esto supuso un trabajo adicional para los primeros desarrolladores de aplicaciones en
X-Window ya que además de programar la aplicación tenían que desarrollar sus propias librerías para la creación de menús, iconos, etc. A medida que X-Window fue creciendo fueron apareciendo lo que llamamos toolkits, que son librerías
generalmente implementadas con Xlib y que proporcionan un GUI particular. De esta forma, al diseñar una aplicación
podemos utilizar alguno de estos toolkits que ya proporcionan las herramientas estándar para crear menús, botones, gestionar los cut and paste, . . . y centrarnos en programar la aplicación en sí. El no marcar ningún look and feel ha sido otra de
las claves del éxito de la arquitectura X-Window, ya que cada fabricante o desarrollador de software ha podido diseñarse
uno de propio, marcando la diferencia con los demás.
Aunque existen muchos toolkits diferentes, en la figura 10.2 podemos ver algunos de los más populares que se han
utilizado a lo largo de la historia de X-Window.
El window manager es un cliente especial de X-Window que se encarga de gestionar todas las ventanas, los escritorios, las pantallas virtuales, etc. Naturalmente, todas las aplicaciones pueden funcionar con cualquier window manager ya
que éste sólo se encarga de gestionar la ventana donde está ubicado el programa. Aunque la programación de un window
manager es muy diferente que la de una aplicación, también se suelen utilizar toolkits particulares que proporcionan un
look and feel determinado. Actualmente existen decenas de window managers diferentes (wmaker, sawmill, olvwm, . . . ),
siendo el mismo usuario quien puede elegir el que más le guste.
Otro tipo de software muy relacionado con X-Window es el que se encarga de proporcionar un entorno integrado
para las aplicaciones, el escritorio, las herramientas de administración del sistema, etc. Los más populares que hoy en día
existen son el KDE (the K Desktop Environment) y el GNOME (GNU Object Model Environment). Los dos proporcionan
un toolkit particular, un entorno de escritorio con muchísimas funcionalidades y configuraciones diferentes y una lista de
aplicaciones integradas que cada vez va creciendo más. La mayoría de distribuciones de GNU/Linux y UNIX proporcionan
alguno de estos dos entornos de escritorio por ser muy amigables y proporcionar herramientas y software propio de gran
calidad que ayudan en gran medida al usuario para configurar el sistema y el mismo escritorio. Los dos pueden funcionar
con cualquier window manager que cumpla con una serie de características básicas. En la figura 10.3 podemos ver el
aspecto de los dos.
10.1. ¿QUÉ ES X-WINDOW?
95
Figura 10.2: Algunos de los toolkits utilizados en X-window.
Figura 10.3: Entornos de escritorio.
Finalmente, otro tipo de aplicación que se utiliza en X-Window es el session manager, que son una serie de programas
que permiten guardar la configuración de una determinada sesión de usuario para que al arrancar de nuevo X-Window
se carguen las aplicaciones que tenga configuradas. Generalment, en los entornos integrados ya se incorporan estas herramientas de forma automática; si no podemos recurrir al que la misma infrestructura de X-Window proporciona: el
CAPÍTULO 10. ARQUITECTURA X-WINDOW
96
xsm.
ACTIVIDADES
1. Leer la historia de X-Window en el artículo:
http://www.linux-mag.com/2001-12/xfree86_01.html
2. Ver algunos de los window manager y entornos de escritorio existentes en:
http://www.xwinman.org
10.2. Configuración
Actualmente, las versiones de la implementación XFree86 que más se utilizan son las 4.X, la configuración de las
cuales veremos en esta sección. Si bien la mayoría de tarjetas gráficas del mercado ya están soportadas, es posible que
desde el momento de aparición en el mercado de una nueva tarjeta hasta que se dá soporte en X-Window pasen unas
semanas o unos pocos meses. De todas formas, cada vez más, los mismos fabricantes están dando soporte a GNU/Linux
y, en algunos casos, ya están proporcionando sus propios drivers para este sistema operativo. Aun así, antes de comprar
una nueva tarjeta gráfica siempre es recomendable comprobar si hay disponible algún tipo de driver para la distribución
que estemos utilizando.
Para instalar XFree86 en nuestro ordenador lo primero que deberemos hacer es bajarnos los paquetes que contienen
las herramientas básicas y el software para el cliente y el servidor. Generalmente, estos paquetes se suelen denominar
xfree86-common, xfree86- server, etc. y llevan implícitos varias dependencias de fuentes y algunas utilidades
básicas para el manejo de X-Window. Una vez instalados estos paquetes debemos configurar adecuadamente los dispositivos de los que disponemos para poder arrancar correctamente el cliente y servidor X-Window. Según la distribución
que utilicemos se utiliza un programa u otro o, en algunos casos, con la misma instalación de los paquetes ya se lanza una
pequeña aplicación de configuración. Algunos programas típicos de configuración de X-Window son el xf86config o
el XF86Setup. De todas formas, esta configuración siempre debe contener unos determinados pasos, que detallamos a
continuación clasificados según el dispositivo a configurar:
1. Tarjeta gráfica
Driver: las diferentes familias de tarjetas gráficas llevan unos microprocesadores específicos y utilizan unas
funciones determinadas para realizar sus operaciones. Es por este motivo que debemos indicar el driver adecuado para nuestra tarjeta. Si no lo sabemos, podemos instalar algún tipo de aplicación para la detección de
hardware automático; si utilizamos, por ejemplo, el discover, podemos saber qué driver necesita nuestra
tarjeta con el comando “discover -xdriver video”.
Identificador: el identificador de la tarjeta puede ser cualquier nombre con el que queremos referirnos a nuestra
tarjeta. Este identificador es utilizado internamente para poder referenciar adecuadamente las tarjetas que
tenemos instaladas en el sistema.
Cantidad de memoria: según la cantidad de memoria de la tarjeta, podremos inicializar los gráficos con más o
menos resolución y con profundidades de color más o menos elevadas. Aunque no es imprescindible indicar
esta cantidad (el sistema lo detecta automáticamente) sí es recomendable especificarla en la configuración.
Utilización del framebuffer del núcleo: el frambuffer del núcleo es un driver especial de Linux que permite
realizar algunas operaciones sobre X-Window. Aunque su utilización no es obligatoria, generalmente se utiliza para que el servidor de X-Window se pueda comunicar directamente con el núcleo del sistema. De todas
formas, si nos diera algún problema, siempre podemos desactivarla.
2. Teclado
Regla XKB: para que el servidor de X-Window pueda manejar correctamente el teclado, necesita saber qué
reglas aplicar sobre él. Para la mayoría de teclados estándar de los PC, se utiliza la regla “xfree86” y para
las estaciones de trabajo Sun, se suele utilizar la regla “sun”.
Modelo de teclado: el modelo de teclado generalmente se suele identificar a partir del número de teclas que
tiene. Los teclados de los PC estándar que tienen las teclas de menú y logo suelen tener 104 teclas (los
identificamos con el nombre “pc104”). Los teclados que no llevan estas teclas se identifican como de 101
teclas (“pc101”).
10.2. CONFIGURACIÓN
97
Keyboard layout: en esta sección debemos identificar el país del teclado con su referencia ISO 3166. En el
caso de España es “es”, para Francia “fr”, etc.
Keyboard options: opción para personalizar algunas de las teclas del teclado.
3. Ratón
Puerto: el puerto del ratón es la conexión que utiliza para comunicarse con el ordenador. Cuando compramos el ratón siempre se indica si es de tipo PS/2, serie, etc. En el caso de que sea de tipo PS/2, el puerto
será /dev/psaux, para los ratones serie el puerto será /dev/ttyS0 (COM1), /dev/ttyS1 (COM2) y
consecutivamente.
Tipo: para especificar el tipo del ratón se suelen proporcionar una lista de la que debemos escoger el que
más se ajuste a nuestro modelo y fabricante. Generalmente, sabiendo el model del ratón ya podremos escoger
adecuadamente la opción que le corresponde.
Emulación de 3 botones: en el caso que nuestro ratón solo tenga 2 botones, se propociona la posibilidad de
emular el tercero (el del medio) apretando los dos simultáneamente. Si nuestro ratón no tiene el botón del
centro, es recomendable activar esta opción porque algunos programas de X-Window necesitan que el ratón
tenga los 3 botones .
4. Monitor
Identificador: igual que en el caso de la tarjea gráfica, la identificación del monitor sirve para que el sistema
lo pueda referenciar internamente. Le podemos poner el nombre que queramos.
Monitor tipo LCD: en la mayoría de procesos de configuración se nos preguntará si nuestro monitor es de tipo
LCD (pantalla TFT). Es importante responder correctamente esta pregunta porque el manejo de un tipo u otro
de monitor varía considerablemte.
Características: en la configuración de características se preguntará las resoluciones máximas que puede obtener nuestro monitor, la frecuencia de refresco, etc. Aunque según el programa utilizado para configurar
X-Window se harán más o menos preguntas de este estilo, es importante tener a mano la información del
monitor y contestar adecuadamente para poder aprovechar al máximo las características del mismo.
Resoluciones disponibles: en este paso debemos señalar qué resoluciones queremos poder mostrar en nuestro
monitor cuando iniciemos X-Window. También es habitual que se nos pregunte la profundidad de color que
queremos utilizar por defecto; lo más recomendable es utilizar alguna de alta (16 o 24 bits) para poder ver
nítidamente todos los colores.
Una vez contestadas a estas preguntas, que pueden ser más o menos según el programa que utilicemos, toda la configuración se guarda en el fichero /etc/X11/XF86Config-4. Este fichero está organizado en las diferentes secciones
que hemos ido viendo y, recorriendo a su manual veremos que tenemos muchísimas más posibilidades que nos dan una
flexibilidad total para configurar de la forma como queramos nuestras X-Window. Para probar si realmente funcionan,
podemos ejecutar “X”, con lo cual debería aparecernos una pantalla con cuadros blancos y negros muy pequeños y el
puntero del ratón como una X (para salir de la misma podemos utilizar CTRL+ALT+BACKSPACE).
Si tenemos instalado algún window manager, lo más habitual para arrancar X-Window es utilizar alguno de los shell
scripts xinit o startx. Éstos se encargan de lanzar el window manager configurado y realizan algunas otras acciones
necesarias para inicializar correctamente X-Window. Una vez tenemos la pantalla en modo gráfico, podemos cambiar la resolución de la misma con las teclas CTRL+ALT++ y CTRL+ALT+-, o volver a las consolas de texto con CTRL+ALT+F1,
CTRL+ALT+F2, etc. (con CTRL+ALT+F7 volveríamos a la gráfica). Cuando utilizamos startx o xinit, al arrancar
X-window se ejecutan las instrucciones del fichero /etc/X11/Xsession. Si en el directorio home del usuario que
iniciara X-Window hubiera un fichero .xsession, se ejecutarían las instrucciones de éste en lugar del otro.
Otra característica importante en la configuración de X-Window es la de la configuración de los Xwrappers. Los
Xwrappers nos permiten controlar qué usuarios pueden iniciar una sesión con X-Window. En el fichero /etc/X11/
Xwrapper.config se encuentra la directiva “allowed_users”, con la cual especifcamos quién está autorizado
para arrancar X-Window con los valores:
“console”: cualquier usuario que esté en un consola local puede iniciar X-Window.
“rootonly”: sólo el root puede iniciar X-Window.
“anybody”: cualquier usuario del sistema puede iniciar X-Window (aunque no esté conectado localmente).
CAPÍTULO 10. ARQUITECTURA X-WINDOW
98
Esto es muy útil, sobretodo, al administrar un servidor en el que generalmente no se permite que los usuarios trabajen
con el entorno gráfico por el gasto de recursos que ello supone.
10.3. X display manager
En la sección anterior hemos visto como configurar X-Window de forma local. Tal y como hemos ido comentando a lo
largo del capítulo, la arquitectura de ventanas X-Window nos permite que cliente y servidor estén instalados en diferentes
ordenadores. Para configurar nuestro ordenador para que haga las funciones de un cliente X-Window debemos instalar
algún tipo de X display manager. Estos programas abren un puerto de comunicaciones con el cual los servidores se pueden
comunicar con el cliente y trabajar con X-Window de forma remota. Aunque existen muchos programas de este tipo, uno
de los primeros que apareció, y en el que se basan muchos otros, es el xdm.
Los X display manager pueden actuar tanto de forma local como remota. Entre otras funciones, lo que hacen es
mostrar una pantalla (en el entorno gráfico) para que el usuario se identifique con su login y contraseña. Funcionan
como cualquier otro daemon del sistema, de forma que su inicio y parada se puede configurar queramos (uilizando los
niveles de ejecución que el sistema proporciona). Debemos tener en cuenta que si lo configuramos para que funcione
de forma local, al arrancar el sistema nos encontraremos con la pantalla de identificación gráfica y no las consolas a las
que estábamos acostumbrados (aunque continúan estando disponibles). Con esta configuración ya no podremos utilizar
startx o xinit para inicializar X-Window, ya que por defecto ya estarán ejecutándose.
Cuando instalemos xdm, todos sus ficheros de configuración se dejarán en el directorio /etc/X11/xdm. Vamos a
repasar qué contiene cada uno de estos ficheros:
xdm-config
xdm.options
Xaccess
Xservers
Xresources
Xsetup
Xstartup
Xsession
Xreset
Localización de los archivos de configuración de xdm.
Opciones globales de configuración.
Definición de los equipos remotos a los que dejamos acceder.
Servidores locales de xdm.
Configuración de la pantalla de login: colores, fuentes,
tamaño, etc.
Script que se ejecutará cuando se arranque xdm.
Script que se ejecutará cuando un usuario entre en XWindow. Se suelen poner acciones relacionados con el
xdm.
Script que se ejecutará al entrar en una sesión de usuario. Se suelen poner acciones especiales para los usuarios,
aunque también se suele llamar a la ejecución del fichero
/etc/X11/Xsession.
Script que se ejecutará al acabar una sesión de usuario.
La configuración de los servidores locales la encontramos en el fichero Xservers. Si quisiéramos desactivar el
servidor local, podríamos comentar todas las líneas de este archivo. De esta forma, aunque tuviéramos instalado un
servidor de X-Window, por defecto no se iniciaría en la máquina local. Si, por el contrario, quisiéramos instalar más de
uno, podríamos editar el fichero y añadir directivas como las que siguen:
:0 local /usr/X11R6/bin/X :0 vt7
:1 local /usr/X11R6/bin/X :1 vt8
Estas dos directivas indican que queremos 2 instancias de X-Window, una en la consola 7 (“vt7”) y la otra en la 8
(“vt8”), accesibles con CTRL+ALT+F7 y CTRL+ALT+F8 respectivamente. Fijémonos como cada directiva incluye un
“:0” o “:1”, que hacen referencia a la instancia de X-Window que manejan. Por defecto, siempre se utiliza la 0, pero
al querer más de un servidor local debemos referenciarlo de esta forma. Al final de cada una de estas líneas podríamos
añadir parámetros especiales para cada servidor de X-Window (en “man X” encontramos todos los posibles), como la
profundidad de color que queremos para cada uno, la resolución de la pantalla, etc. De esta forma, podríamos trabajar con
diferentes sesiones de X-Window abiertas tal y como hacíamos con las consolas.
Si en el fichero de Xaccess hay una línea con el caracter “*”, indica que dejamos que cualquier servidor se conecte
al cliente X-Window del ordenador. Utilizar X-Window de forma remota sin ningún tipo de encriptación puede suponer
un fallo de seguridad, con lo que es muy recomendable informarse adecuadamente antes de utilizarlo.
Generalmente, la configuración por defecto de xdm no permite conexiones remotas por razones de seguridad. Si
quisiéramos activar estas conexiones podríamos editar el fichero Xaccess y, utilizando la sintaxi que se nos indica, añadir
los servidores a los que permitimos dar este servicio. También deberíamos comentar la línea “DisplayManager.
10.3. X DISPLAY MANAGER
99
requestPort: 0” del fichero xdm-config, que por defecto inutiliza todas las conexiones que se reciben. Una vez
realizados estos cambios, reiniciando el daemon de xdm, el ordenador ya estaría preparado para servir X-Window a
cualquier servidor que se lo pidiera.
Para las máquinas dónde solo queremos instalar el servidor de X-Window deberíamos instalar X-Window tal y como
veíamos en el apartado anterior y utilizar el comando “X -query IP” dónde la IP debería ser la del servidor. Al igual
que pasaba cuando teníamos más de un servidor X-Window en una máquina local, si en el ordenador ya tuviéramos otra
instancia de X-Window ejecutándose, deberíamos utilizar “X -query IP :1” para la segunda instancia, “:2” para
la tercera y consecutivamente. También existe Xnest, que es un servidor de X-Window que nos permite abrir en una
ventana otra instancia de X-window.
Capítulo 11
Taller de X-windows
11.1. Introducción
En el segundo taller se sentaron las bases para la correcta manipulación y gestión de paquetes, y aprendimos a configurar algunos dispositivos. No obstante, y debido a su complejidad, no se abordó el tema de la configuración de la
tarjeta gráfica, o mejor dicho, de la instalación del entorno gráfico X. Es precisamente debido a esta complejidad de su
estructura y configuración que se ha optado por dedicar un taller monográfico sobre el X Window System. En este taller
aprenderemos a instalar, configurar y personalizar este sistema. Pero no se pretende hacer un repaso exahustivo de todo el
sistema, pues esta tarea sería probablemente inabordable por muy distintas razones. Se pretende sentar las base para que
cada uno sea capaz de configurar su propio sistema en función de la tarjeta gráfica de la que disponga, de sus gustos y de
sus preferencias. Al final del taller deberíamos ser capaces de instalar un entorno X, y de saber sacar partido a su increíble
potencia.
ACTIVIDADES
1. Debido a la complejidad del sistema X, se recomienda la lectura de los siguientes documentos, para asentar conceptos antes de empezar a trabajar sobre el sistema. Además, estos nos aportarán conocimientos suplementarios, que
pueden ser puestos en práctica a lo largo del taller.
http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats
/html_single/XWindow-Overview-HOWTO.html
Se trata de un documento sencillo, que sirve para asimilar los conceptos básicos que conciernen al sistema.
http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats
/html_single/XWindow-User-HOWTO.html
Es un documento con contenidos más avanzados que el anterior, pero también recomendable.
11.2. Instalación del sistema básico
Como ya se ha dicho, el X Window System es un sistema muy complejo que integra muchísimas librerías y aplicaciones, algunas de las cuales son fundamentales para su funcionamiento, aunque la mayoría sólo deben ser instaladas si, por
nuestras necesidades, precisamos de ellas. Es ésta una de las razones por las que en Debian el sistema viene distribuido
en muchos paquetes distintos, de los que, sólo instalaremos aquellos que nos sean necesarios.
11.2.1. Distintas estrategias para la instalación de los paquetes
Debido a que la interdependencia entre los distintos paquetes es muy fuerte, podemos aprovechar este hecho para
que sea el mismo sistema de gestión de paquetes que instale todos aquellos que considere necesarios para el correcto
funcionamiento de una aplicación de alto nivel, entre los cuales se encontrarán, obviamente, todos los paquetes básicos
del sistema. Así pues podríamos utilizar dselect o apt-get para instalar una de estas aplicaciones. Pero esta no es una
buena estrategia, ya que implica la pérdida del control de los paquetes que estamos instalando y además puede implicar la
omisión de algunos paquetes esenciales, de los que, por el motivo que sea, no se haya hecho referencia durante el cálculo
de dependencias.
Por este motivo se recomienda la construcción del sistema paso a paso, para ir comprendiendo qué paquetes se están
instalando en cada momento, y el porqué.
100
11.2. INSTALACIÓN DEL SISTEMA BÁSICO
101
11.2.2. Instalación de paquetes básicos
Los paquetes básicos del sistema se pueden agrupar, de forma general en:
core: Paquetes esenciales e imprescindibles para el correcto funcionamiento del sistema (x-window-system-core).
system: Paquetes esenciales cuya presencia es altamente recomendable (x-window-system).
fonts. Paquetes de fuentes, algunos de ellos imprescindibles, para disponer, al menos, de un tipo de fuentes en el
entorno.
utils: Paquetes de programas que correran sobre el sistema gráfico. Son, en el fondo, los que dan la razón de
existencia del sistema.
libs: Paquetes de librerías del entorno gráfico, las cuales proporcionan funciones a otros programas.
Para instalar los paquetes básicos del sistema lo podemos hacer mediante la siguiente orden:
brau:~# apt-get install x-window-system
Con ello se calcularán las dependencias entre paquetes y se nos informará de que deben de instalarse alrededor de una
treintena de paquetes. Para proceder se nos pide la confirmación, a la cual contestaremos afirmativamente.
Nota: después de que se hayan desempaquetado los paquetes, se ejecutarán automáticamente los scripts de configuración de varios de ellos. Siempre es posible interrumpir la ejecución de estos scripts con la combinación de teclas Ctrl-C,
y reiniciar el proceso de nuevo volviendo a ejectuar el comando anterior.
Durante la ejecución del script de configuración del paquete X-server-common se nos preguntará si queremos que
sea debconf quien configure los wrappers. La opción más sencilla y práctica es permitir que la configuración se haga
de forma automática, y seguir adelante.
El script de configuración de Xserver-xfree86 nos situará en la interficie de configuración del servidor. Lo primero que se nos pregunta es si deseamos que se ejecute un test de autodetección del driver que debe cargarse para nuestra
tarjeta. Es buena opción contestar afirmativamente a esta pregunta, ya que si el test falla o detecta más de una possibilidad
nos dará accesso a la pantalla de selección de drivers. Si debemos seleccionar el driver manualmente lo que debemos hacer
es, en primer lugar, leer la documentación de la targeta gráfica; si no disponemos de ella, también podemos utilizar el comando lspci para informarnos de cómo ésta ha sido detectada por el kernel (generalemente la última línea de retorno).
Una vez dispongamos de esta información, nos dirigiremos a http://xfree86.org/current/Status.html
para informanos de cuál es el driver que debemos cargar. Con esto nos situamos a la pantalla siguiente. En ésta se nos
pedirá si deseamos que sea debconf quien nos guíe en la configuración del archivo /etc/X11/XF86Config-4, que
es el archivo fundamental de configuración del servidor. No es mala idea contestar afirmativamente, y, al final, comprobar
si la configuración resultante es válida o no. En primer lugar se nos pregunta si queremos usar el kernel framebuffer device interface, y se nos sugiere que lo hagamos; en principio contestaremos afirmativamente, pero teniendo muy presente
que esto es una fuente potencial de problemas, de manera que, una vez hayamos finalizado la configuración, si al intentar
arrancar el servidor, algo va mal, deberemos estar atentos al contenido la línea, y probar si con el valor “false” funciona:
#/etc/X11/XF86Config-4
Section "Device"
Identifier
Option
"Generic Video Card"
" UseFBDev"
"true"
Lo siguiente que configura el mismo script es el teclado. Por lo general, y en especial sobre la plataforma PC, la
sugerencia de utilizar el tipo xfree86 debe funcionar correctamente, aunque en las pantallas posteriores terminaremos
de ajustar su funcionamiento. En la siguiente pantalla contestaremos qué tipo de teclado es el que tenemos; por lo general
pc105 debe funcionar correctamente.
Ha llegado el momento de seleccionar el idioma del teclado. En este campo entraremos es; en cuanto al campo de
variación idiomática puede entrarse el mismo valor anterior, pero es recomendable dejarlo en blanco, ya que, si se entra
el valor es, esta directriva también se convierte en una funete potencial de errores. Si más a delante, y en el caso que
hayamos rellenado el campo de variación idiomática, al parar el servidor, se visualiza, entre otras líneas, las siguientes:
The XKEYBOARD keymap compiler (xkbcomp) reports:
> Error:
No Symbols named "es" in the include file "es"
>
Exiting
>
Abandoning symbols file "default"
Errors from xkbcomp are not fatal to the X server
CAPÍTULO 11. TALLER DE X-WINDOWS
102
o si no podemos utilizar ciertos caracteres como puede ser “|”, deberemos comentar la directiva de variante idiomática
en el archivo principal de configuración:
#/etc/X11/XF86Config-4
Section " InputDevice"
Identifier
"Generic Keyboard"
#
Option
"XkbVariant"
"es"
El campo siguiente, referente a la personalización del teclado, se deja en blanco si no se tiene ningún propósito al
respecto. Con esto habremos terminado con la configuración del teclado y pasaremos a la configuración del ratón. Para
ello, en primer lugar, se nos pide en qué puerto está ubicado (actualmente, la mayoría de ellos en /dev/psaux, la
primera opción). A continuación se nos pregunta de qué tipo de ratón disponemos (nuevamente, la primera opción, PS/2,
suele ser la más habitual). Terminada la configuración del ratón, entramos en la configuración de la pantalla. En primer
lugar se nos pregunta si disponemos de una pantalla tipo LCD. Acto seguido se nos pedirá en qué grado de dificultad
queremos entrar los parametros referentes a nuestro monitor. La forma más simple (Simple) sólo nos pedirá el tamaño
del monitor, mientras que en la más compleja (Advanced) se nos pedirá las frecuencias de refresco horizontales y
verticales del monitor, entre otros. Seguidamente se nos preguntará con qué resoluciones queremos trabajar, y en función
de los parámetros que hayamos entrado en el apartado anterior se nos harán distintas sugerencias. A continuación se nos
pedirá cúal será la resolución de color que se usará por defecto al arrancar el servidor (actualmente la mayoría de tarjetas
sorportan, sin ningún problema, resoluciones de 24 bits). Con esto habremos terminado la configuración del servidor.
Nota: una buena forma de conseguir un fichero /etc/X11/XF86Config-4, que funcione, es copiar el que genera
KNOPPIX cuando entramos en modo gráfico; así pues, podemos hacer una copia de este fichero, en un disquet, por
ejemplo, y compararlo con el que hemos generado mediante el script de configuración del servidor.
ACTIVIDADES
1. Una vez terminada la instalación, editar el fichero /etc/X11/XF86Config-4, e intentar asociar las distintas
directrices, a los parámetros que hemos entrado durante la ejecución del script de configuración del servidor.
11.2.3. Inicialización del servidor
Ha llegado el momento de comprobar si el fichero de configuración del servidor es correcto, y en consecuencia el
servidor arranca como es debido. para eso basta con ejecutar el comando startx.
Si todo funciona correctamente, al cabo de unos momentos nuestra pantalla adquirirá un fondo mallado de colores
grisáceos, y en el centro de la pantalla aparecerá una aspa. Hemos dado un gran paso adelante, pues configurar el servidor
para que arranque es lo más difíl del entorno X. Ahora sólo es cuestión de tiempo para terminar dando el aspecto que
nosotros queramos al entorno. Mediante el ratón podemos mover el aspa, y pulsando los botones del medio y izquierdo
podemos explorar un poco las posibilidades de este entorno gráfico un tanto rudimentario. Para salir de él y continuar con
la configuración del sistema hay que pulsar el botón izquierdo del ratón, situarnos sobre Exit opción Yes, really
quit, o simplemente pulsar la combinación de teclas CTRL-ALT-BackSpace.
Si por el contrario, al cabo de unos momentos retornamos a la consola alfanumérica, es que el servidor no ha podido
arrancar adecuadamente. Ha llegado el momento de estudiar detenidamente el fichero de log (/var/log/XFree86.0.log)
e intentar detectar las posibles fuentes de errores. Las más comunes suelen ser: mala elección del driver a cargar (si el
proceso de selección lo hemos dejado en manos del script, deberemos consultar la página antes mencionada para asegurarnos de que el driver que el script ha escogido es el correcto), poner la directiva UseFBDev a true, cuando debe estar
en false, usar resoluciones o frecuencias de refresco más altas de las que la tarjeta puede soportar, etc.
Otra posibilidad es que, aún estando soportada la tarjeta por el Xfree86 Project, puede que el paquete que estemos
usando no la soporte. Frente a esta situación se suguiere que se incorpore la siguiente línea en el fichero /etc/apt/
sources.list:
deb http://people.debian.org/~blade/woody/i386/ ./
y que, tras ejecutar el comando apt-get update, se vuelva ejecutar el comando de instalación del X-WindowSystem (apt-get install X-Window-System). Con esto acudiremos a una página no oficial para obtener los
paquetes de versiones más actualizadas del sistema X Window, y en ellos, probablemente, ya se dé soporte a nuestra
tarjeta.
11.3. WINDOW MANAGERS
103
Con todo esto, hay que destacar que la correcta configuración de una tarjeta de vídeo puede llegar ha ser una tarea
verdaderamente difícil. Para ello acudiremos a buscadores donde entraremos palabras clave referentes a nuestra tarjeta
junto con “X” o “Linux” para ver si encontramos documentación al respecto.
Llegados a este punto, mediante el comando siguiente evitaremos que cada vez que arranquemos el ordenador entremos en el modo gráfico:
brau:~# rm /etc/rc2.d/S99xdm
Esto nos será útil mientras no tengamos configurado totalmente este entorno. Una vez terminado, ya será cada usuario
el que decidirá si quiere o no que al arrancar el ordenador se entre en el modo gráfico. Para hacerlo, sólo habrá que volver
a crear el enlace simbólico que con el comando anterior hemos borrado:
brau:~# cd /etc/rc2.d
brau:/etc/rc2.d# ln -s ../init.d/xdm S99xdm
11.2.4. El fichero de log
Aunque el arranque del servidor haya resultado exitoso, no por esto debemos dejar de analizar el contendido del
fichero principal de log del sistema X, /var/log/XFree86.0.log, ya que esto nos ayudará a depurar fallos y errores
menores que no han interrumpido el arranque del servidor, pero sí que hacen bajar su rendimiento.
Algunos ejemplos típicos pueden ser: eliminar la línea del fichero de configuración que hace referencia a las fuentes
cicrílicas, si nunca las vamos a utilizar, ya que ni tan siquiera las hemos instalado; eliminar de este mismo fichero todo lo
que hace referencia al Generic Mouse, pues lo hace incompatible con el que hemos configurado nosotros, etc.
11.2.5. El servidor de fuentes
El sistema gráfico en si no lleva asociado ningún tipo de base de datos acerca de las fuentes disponibles, pues esto no
entra en el dominio de sus funciones. Ésta es la tarea del servidor de fuentes xfs (/usr/bin/X11/xfs), de esta forma
cualquier programa cliente puedrá usar cualquier las fuentes disponibles el qual se arranca automáticamente al lanzar el
servidor X en forma de deamon. Existen multitud de paquetes para agregar más fuentes al conjunto que hemos instalado
por defecto.
Una aplicación que puede ser útil para conocer qué fuentes tenemos instaladas y que aspecto tienen es xfontsel.
Se trata de una aplicación escrita mediante librerías de athena (como el resto de los xbase-clients, grupo al cual pertenece
xfontsel), en la cual, mediante menús desplegables se seleccionan las opciones disponibles de configuración de las
fuentes y nos muestra algunos caracteres de ejemplo. Para conocer todos los caracteres de una fuente se puede usar la
aplicación xfd.
Así pues, una vez sepamos que fuente queremos utilizar para un determinado programa podemos lanzarlo desde una
xterm con el argumento “-fn” segido de la descripción de la fuente 1 . Un exemplo puede ser:
xterm -fn -misc-fixed-medium-r-normal--20-140-100-100-c-100-iso8859-1 &
11.3. Window Managers
Los window managers son programas clientes (en realidad se los llama meta-clientes) encargados de gestionar las
distintas ventanas que corren sobre el entorno gráfico y de su presentación, así como de lanzar otros clientes (aplicaciones).
A estas alturas, ya tenemos un Window Manager instalado, el twm, ya que una instalación completa de un sistema X
requiere como mínimo de un window manager, aunque éste no forme parte del servidor, que corra sobre él. Como ya
hemos visto el twm es muy rudimentario, puede ser, pues, que nos interese instalar algunos más complejos, como puede
ser WindowMaker, BlackBox, qvwm, etc. Vamos pues a instalar algunos de ellos y a probarlos. El objetivo final, siguiendo
la filosofía GNU, es que cada usuario termine usando el software que prefiera. Así pues, se deja que, una vez conocidos
algunos window managers existentes, sea el propio lector que decida cuál va a usar. Obviamente, es posible tener más de
un window manager instaladado, aunque sólo se pueda hacer correr uno por sessión 2 .
En primer lugar instalaremos, a modo de ejemplo, el qvwm. Se trata, como veremos al lanzarlo, de un window manager
que simula un entorno que probablemente nos sea conocido. Para hacerlo basta con ejecutar la instrucción:
1 Otros
programas pueden usar nombres distiontos para este argumento.
podemos, pero, y como ejemplo de la flexibidad del sistema X, tener dos window manager corriendo en un mismo ordenador, cada uno en un
terminal distinto.
2 Si
CAPÍTULO 11. TALLER DE X-WINDOWS
104
brau:~# apt-get install qvwm
En este momento ya tenemos dos window managers instalados: el twm y el qvwm. Para hacer correr uno u otro bastará
con indicar la ruta completa de ubicación del window manager que deseemos utilizar después del comando startx
(Recordemos que el comando whereis nos puede ser muy útil a la hora de buscar la ubicación de un fichero). Así pues,
para hacer correr el window manager que acabamos de instalar bastará con ejecutar:
brau:~# startx /usr/bin/X11/qvwm
Para utilizar el twm habría que haber especificado su ruta completa de la forma siguiente:
brau:~# startx /usr/bin/X11/twm
Tener que especificar cada vez qué window manager deseamos utilizar, una vez nos hayamos decidido por uno en
concreto, puede ser un tanto pesado. Para especificar qué window manager debe usarse en caso de que después del
comando startx no se especifique ninguno en concreto crearemos el archivo .xsession en el directorio raíz del
usuario con el contenido siguiente, en el caso que quisíeramos que el window manager por defecto fuese el twm, por
ejemplo:
#~/.xsession
exec twm
Si quisíesemos que fuese qvwm el window manager por defecto, bastaría con cambiar twm por qvwm. La ejecución
de los distintos procesos que implican el arranque del entorno gráfico, así como los ficheros de configuración que se van
leyendo durante este proceso, están fuertemente determinados. Así pues, creando el fichero anterior, lo que hemos hecho
es editar uno de los últimos ficheros (los que residen en el directorio raíz del usuario) que se leen antes de entrar en el
entorno gráfico. Este fichero, por tanto, nos permite modificar algunos aspectos de los que se han determinado por defecto
dentro del sistema y que están definidos en los ficheros residentes en /etc/X11 y sus subdirectorios.
Para finalizar esta sección instalaremos un window manager muy utilizado en el mundo GNU/Linux, que se caracteriza
por su versatilidad y su escaso consumo de recursos: el WindowMaker:
brau:~# apt-get install wmaker
Animamos al lector a familiarizarse un poco con este window manager y a que visite su página para ampliar conocimientos: http://www.windowmaker.org/.
Hemos instalado, ya, tres window managers, y seguramente instalaremos más. A parte del método anteriormente descrito para preestablecer cuál queremos ejecutar por defecto, podemos utilizar el menú del comando update-alternatives
para establecerlo:
brau:~# update-alternatives --config x-window-manager
11.4. X Session Manager
Los session managers son programas que pueden hacerse correr sobre una sesión gráfica y que nos permitirám establecer y modificar parámetros de esta. xms es el session manager que viene por defecto con la instalación que hemos
hecho del servidor gráfico. Podemos lanzarlo desde un Terminal X 3 , mediante el comando xsm.
Una vez lanzado xsm mediante Checkpoint, podemos guardar la configuración de la sesión actual (esencialmente
referente a las aplicaciones que tengamos corriendo), gestionar los procesos que estan corriendo mediante Client List,
consultar el log de la sesión o cerrar la sesión guardando la configuración actual.
Aparte de xsm existen otros session managers. Éstos acostumbran a ser una parte más de los desktop managers, y
estan tan integrados en ellos que a veces resulta difícil reconocer sus acciones. Un ejemplo típico es la pregunta que se
nos formula acerca de si deseamos guardar la sesión al cerrar KDE.
3 Para
lanzar una xterm pulsaremos el botón del medio del ratón y seleccionaremos Programs/XShells/XTerm
11.5. X DISPLAY MANAGER
105
11.5. X Display Manager
Al finalizar la instalación del Xserver sugeríamos que se eliminara el enlace simbólico /etc/rc2.d/S99xdm para
evitar que al volver arrancar el sistema al entrar al runlevel 2 se ejecutase xdm, acrónimo de X Display Manager. Este
es el display manager que el paquete X-Window-System instala por defecto. Los display managers son los programas
encargados de gestionar quién, desde dónde, y cómo puede entrar un usuario al entorno gráfico. Para lanzarlo lo haremos
como con cualquier otro daemon:
brau:~# /etc/init.d/xdm start
Para pararlo también utilizaremos el mismo procedimiento que seguiríamos para detener cualquier otro daemon, con
la salvedad de que deberemos pulsar la combinación de teclas Ctrl+Alt+F1, para salir del entorno gráfico y situarnos en
la tty1, por ejemplo, en vez de utilizar la combinación que se usa para cambiar de ttys en entornos alfanuméricos:
brau:~# /etc/init.d/xdm stop
Como habremos comprobado, el display manager nos pide un login y un password, los mismos que utilizamos para
acceder al sistema por las ttys, si no es que hemos impuesto ninguna restricción. Tras validarnos, entramos en el modo gráfico de la misma forma que lo hacíamos mediante el comando startx. La diferencia radica en que, cuando terminemos
la sesión gráfica, el servidor no se parará, si no que sobre continua corriendo el xdm.
Uno de los inconvenientes de xdm es que no nos permite seleccionar con qué window manager queremos trabajar.
Pero existen otros display managers, como pueden ser wdm (de WindowMaker), gdm (del proyecto GNOME), o kdm (del
proyecto KDE), que sí lo permiten. Podemos instalar el wdm, para ver su aspecto, y para conocer otro display manager:
brau:~# apt-get install wdm
Al ejecutarse el script de postinstalación, se nos preguntará qué display manager queremos usar, xdm, que ya teníamos
instalado, o wdm. Seleccionaremos este último, para que se cree el enlace necessario para que se lanze wdm com display
manager durante el processo de arranque del sistema (si existe el fichero /etc/rc2.d/S99xdm es mejor borrarlo para
evitar mensajes de warning al arrancar el sistema). Si no queremos que se arranque automáticamente ningún display
mananager al arrancar el sistema, bastará con eliminar los enlaces necesarios, es decir el fichero /etc/rc2.d/wdm. El
archivo /etc/X11/default-display-manager marca el display manager que se usa por defecto.
Una vez arrancada una sesión X desde el display manager, es decir, una vez hayamos lanzado el pertinente window
maker, puede ser interesante ejecutar el comando pstree para ver las relaciones de dependencia entre los distintos
procesos que están corriendo en este momento, junto con la información que nos aprotará la línia ps aux.
11.6. Desktop Managers
La aparición de distintas toolkits, así como el desarrollo de diversos proyectos que desarrollaban o usaban librerías
del entorno gráfico, hizo aparecer proyectos que buscasen la unificación de todos estos esfuerzos. Fue entonces cuando
apareció un concepto nuevo en el entorno X: el de desktop manager. Los desktop managers son proyectos que pretenden
sentar las bases para la unificación y estandarización tanto de presentación como de políticas de programación y de
desarrollo de aplicaciones. Uno de los primeros en aparecer fue el CDE (Common Desktop Manager), aunque actualmente
los dos proyectos más destacados en este sentido son: GNOME y KDE, a los cuales, dado su alto grado de implementación
y de desarrollo dedicaremos una subsección respectivamente. Pero antes podemos nombrar otros desktop managers, como
pueden ser: GNUStep ,ROX, GTK+Xfce o UDE.
11.6.1. GNOME
GNOME es un proyecto que forma parte de GNU, que se caracteriza por no necesitar estrictamente de un window
manager en concreto, aunque se recomienda que se use alguno que garantice su correcto funcionamiento (a GNOMEcompliant window manager) como pueden ser: IceWM o Sawfish. Aun y así, para respetar las preferencias y la libertad
del usuario, GNOME, en su control panel siempre dispone de un window manager selector, que nos permite escoger
qué window manager queremos usar. GNOME está basado en Gtk toolkit las propias librerías desarrolladas dentro del
proyecto, conocidas como gnome-libs específiques.
Como todos los desktop managers, GNOME dispone de su propio panel, panel, de su gestor de archivos: Nautilus y
de su control panel: GNOME Control Panel.
Para hacer una instalación básica de GNOME, instalaremos el paquete siguiente, junto con todas sus dependencias:
106
CAPÍTULO 11. TALLER DE X-WINDOWS
brau:~# apt-get install gnome-session
Tal como se ha dicho, aunque GNOME no exija el uso de ningún window manager determinado, se recomienda que
éste sea GNOME-compliant window manager. Vamos pues a instalar Sawfish, que fue desarrollado estrictamente para
cumplir este requisito. Instalemos el paquete y todas sus dependencias:
brau:~# apt-get install sawfish-gnome
Tenemos, pues, otro window maker instalado. Detendremos el display manager y volveremos a lanzarlo para que este
nuevo window maker se integre en él (GNOME también tinene su propio display manager, gdm, que podemos instalar,
si lo deseamos). Ahora tenemos dos posiblidades para conseguir nuestro objetivo: hacer correr GNOME. La primera es
arrancar Sawfish, desde el display manager o mediante startx y, una vez dentro, lanzar gnome-session desde un
terminal X, o bien operar de modo inverso, es decir, arrancar GNOME, por los mismos procedimientos que Sawfish, y
luego lanzar sawfish desde un terminal X. Se recomienda proceder de la última forma si querremos que la próxima
vez que arranquemos GNOME se ejecute Swafish (será el propio sesión manager de GNOME el encargado de realizar y
registrar los cambios necesarios para que ésto ocurra).
Una vez familiarizados un poco con GNOME, lo que podemos hacer es instalar algunos paquetes que nos pueden ser
útiles, en concreto gnome-help y gnome-terminal, el primero nos ofrece una interfície donde podremos leer mans,
ficheros de texto, en un entorno grafico, y el segundo instala el xterm propio de GNOME.
Una aplicación que dará un aspecto mucho más amigable a GNOME, será Nautilus , concebido, en principio, como un
gestor de ficheros, pero que además nos permitirá configurar el desktop. Para su correcto funcionamiento, Nautilus necesita de Mozilla M18 y de GNOME Helix. Por tanto, los paquetes a instalar serán los siguientes: nautilus-suggested,
para hacer la instalación de Nautilus, mozilla, para hacer una instalación completa del navegador (en cuanto a su
configuración, podemos instalar las fuentes True Type, y podemos poner en auto el sound daemon’s dsp wrapper).
GNOME es un proyecto en constante desarrollo y que ofrece multitud de aplicaciones. Por eso, una vez instalado su
sistema básico, sugerimos al lector que vistite su página http://www.gnome.org y que sea él mismo el que explore,
descubra y decida cuál de ellas pueden ser de su interés para instalárselas. La sola ejecución de la línea siguiente nos
puede dar una idea de la magnitud del proyecto:
brau:~# apt-cache search gnome
Debian Woody integra la versión 1.4 de GNOME. Estando ya disponible la versión 2.2, proponemos modificar el
contenido de /etc/apt/sources.list añadiendo las líneas siguientes, para poder actualizar, o instalar de raíz los
paquetes de esta versión debianizados:
#GNOME2
deb http://ftp.acc.umu.se/mirror/mirrors.evilgeniuses.org.uk/debian/backports/woody gnome2.2/
deb-src http://ftp.acc.umu.se/mirror/mirrors.evilgeniuses.org.uk/debian/backports/woody gnome2.2/
Una vez hayamos hecho esto bastará con ejecutar los siguientes comandos para disponer de dichas actualizaciones:
apt-get update
apt-get install gnome
11.6.2. KDE
KDE, a diferencia de GNOME, sí que necesita de un window manager concreto, se trata de kwm, basado en Qt toolkit
y en las propias kdelibs. También dispone de su launcher panel: kpanel, de su propio gestor de archivos: Konqueror
y de su utilidad de configuración: Control Panel. Óbviamente, KDE puede estar instalado en el mismo sistema donde
hayamos instalado GNOME, e incluso hay apliaciones de pertenecientes a un desktop manager que pueden correr en el
otro. Además, KDE también tiene su propio display manager (kdm) junto con muchísimas más aplicaciones. Nuevamente
se recomienda al lector una visita a su página para conocer sus posibilidades: http://www.kde.org, i la página del
encargado de integrar KDE en Debian http://people.debian.org/ ccheney/. También podemos ejecutar la
línea siguiente para ver la integración de KDE en Debain:
brau:~# apt-cache search kde
Los paquetes básicos de KDE están en el paquete kdebase. Éste será, pues, el primero que instalaremos:
brau:~# apt-get install kdebase
11.7. PERSONALIZACIÓN DE ALGUNOS ASPECTOS
107
Nuevamente deberemos reinicializar nuestro window manager para tener acceso al desktop manager recién instalado. Una vez hecho esto podemos proceder a instalar el gestor de archivos, paquete konqueror. Mediante el paquete
kde-i18n-es podemos instalar los ficheros necesarios para que KDE trabaje en castellano.
A partir de este punto, ya serà cada usuario el que instalará los distintos paquetes del proyecto que le sean de interés.
Por lo que a versiones se refiere, Debian Woody integra la versión 2. Para disponer de versiones más recientes hay
que recurrir a paquetes no oficiales. Si se desea tener acceso a estos paquetes, podemos añadir la siguiente línea siguiente
a /etc/apt/sources.list y actualizar la base de datos mediante el comando apt-get update:
#KDE3
deb http://people.debian.org/~schoepf/kde3/woody ./
Tal y como ya haciamos para preestablecer el window maker por defecto, podemos utilizar el menú del comando
update-alternatives para seleccionar el session manager:
brau:~# update-alternatives --config x-session-manager
11.7. Personalización de algunos aspectos
El diseño del entorno gráfico X responde al ambicioso objetivo de sacar el máximo rendimiento del hardware disponible, usando el mínimo de sus recursos, y ofrecer la máxima flexibilidad posible. La estructura de servidor cliente en que se
basa este sistema hace posible que estos objetivos sean una realidad, y las aparentes dificultades con las que se encuentra
el usuario novel desaparecen rápidamente con un poco de práctica para permitir que afloren las múltiples ventajas que
ofrece este diseño. En esta sección sólo se pretende dar una somera idea de la potencia de este sistema, la cual se pone
plenamente de manifiesto cuando se trabaja en red, aunque queda un poco ensombrecida cuando se trabaja en un sistema
stand alone como sobre el cual se desarrolla todo este curso. De todas formas se introducen algunos conceptos que pueden
ser de utilidad cuando se entre a trabajar en red.
11.7.1. Personalización de aspectos locales
En general los archivos de configuración se hallan en el directorio /etc/X11/ o en algunos de sus subdirectorios. De
forma personalizada, cada usuario puede redefinir los parametros de configuración y añadir de nuevos creando o editando
en su directorio de home los ficheros que llevan el mismo nombre que los de configuración general pero precedidos de un
“.”. Se podrán redefinir o establecer todos aquellos parámetros que no requieran de permisos de superusuario, ya que los
archivos de home se procesan después de los de configuración general, y los parámetros siempre tomarán el último valor
que se les asigne.
Xsession
/etc/X11/Xsession es un script que se ejecuta al entrar en una sessión de ususario. Este script es el que gobierna todo el proceso de arranque de la sesión hasta que podemos empezar a trabajar, y también es el encargado
de gestionar los mensajes de posibles errores que se puedan producirdurante este proceso, los cuales se registran en
$HOME/.xsession-errors.
En $HOME/.xsession es donde personalizaremos el arranque para un usuario en particular. Así pues, si deseamos
que el window manager sea blackbox, y que se arranque automáticamente bbkeys en background al iniciar la sesión, este
contendrá las siguientes líneas:
bbkeys &
blackbox
Xresources
En el archivo $HOME/.Xresources personalizaremos el aspecto de las distintas aplicaciones. La sintaxis es
application*parameter: value. Asi pues, si quisiéramos invertir los colores de l’aplicación xterm, añadiriamos la línea siguiente en el fichero:
Xterm*reverseVideo: true
108
CAPÍTULO 11. TALLER DE X-WINDOWS
El comando xrdb es el encargado de gestionar la base de datos de Xresources. Mediante “xrdb -query” podemos
conecer todas las propiedades establecidas y su valor, y mediante el parámetro “-display” obtendremos un listado de
todos los parámetros que acepta el comando. Si a éste le pasamos como parámetro la ubicación de un fichero, leerá de él
todas las definiciones de parámetros.
Xmodmap
El servidor gráfico usa la tabla de códigos de caracteres para hacer la conversión de señales provinientes del teclado
(server-independent) a símbolos del sistema (server-dependent). La tabla de conversión a usar a sido seleccionada durante
el proceso de configuración del teclado, pero el comando xmodmap nos permite modificar su contenido. Un ejemplo de
su uso puede ser el siguiente4 :
brau:~# xmosmap -e "keycode 127 = Delete"
brau:~# xmosmap -e "keycode 22 = BackSpace"
Mediante los parámetro “-pk” xmodmap nos devolverá todo el contenido de la tabla de conversión que se está
usando.
11.7.2. Personalización de aspectos de red
Los aspectos aquí presentados también son de interés para un sistema stand alone, ya que, como todo el sistema
operativo, el sistema X usa siempre un diseño orientado a red.
$DISPLAY
La variable $DISPLAY sirve para indicar al cliente con qué servidor debe comunicarse. Su sintaxis es la siguiente:
hostname:display_number.screen_number. Así pues, si hubiésemos definido otro terminal gráfico al sistema
X, añadiendo la línea siguiente a /etc/X11/xdm/Xservers:
:1 local /usr/X11R6/bin/X vt8
Podríamos lanzar una aplicación gráfica desde un xterm de un terminal gráfico a otro definiendo la variable adecuadamente. Así pues, si quisiéramos lanzar xeyes desde el primer terminal gráfico, via xterm, y displayarlo en el segundo,
procediríamos de la forma siguiente:
brau:~$ set DISPLAY :0.1; export DISPLAY
brau:~$ xeyes &
Si entramos en una sesión gráfica, abrimos un xterm, cambiamos de usuario mediante el comando su y probamos
de lanzar una aplicación gráfica se nos devolverá un mensage de error indicándonos que se puede establecer conección
con el servidor. Una estrategia para evitar este problema es utilizar con el parámetro “-p” para que se exporte todo el
conjunto de variables de entorno, y evitar así, que el servidor rechace nuestra petición de conección. Esta práctica puede
ser muy útil para lanzar programas de configuració que necesitan permisos de root, ya que nos evitará tener que entrar en
el entorno gráfico como root (práctica no muy recomendable, y que, aunque por defecto se permita, en muchas ocasiones
se restringe manualmente).
xhost y xauth
El comando xhost permite establecer qué equipos pueden acceder al servidor gráfico de forma remota, es decir,
qué máquinas cliente pueden lanzar una aplicación para ser displayada en el servidor. Su sintaxis es la siguiente: xhost
+hostname. Si no se especifica ningún hostname, cualquier máquina podrá lanzar aplicaciones sobre el servidor 5 .
El comando xauth sirve para determinar qué usuarios pueden lanzar aplicaciones sobre el servidor gráfico. Así pues,
mediante la combinación de estos dos comandos podremos establecer una política de seguridad de acceso al servidor X
bastante razonable.
4 Estos comandos fueron utilizados durante mucho tiempo debido a la inversión de asignación de símbolos en las tablas de conversión; actualmente,
pero, este problema está resuelto.
5 Por defecto, no se permite la conección desde ningún equipo remoto.
11.8. CONFIGURACIÓN DE IMPRESORAS
109
11.8. Configuración de impresoras
La tarea de configurar impresoras se puede ver facilitada a partir del entorno gráfico. Existen mulitud de aplicaciones
para configurar el sistema de impresión nativo (basado en lpd como servidor y lpr como cliente), y otras que substituyen
este sistema por uno propio, comúnmente también basado en la estructura cliente servidor. En esta sección presentaremos
dos de estas herramientas: CUPS y LPRng, ambos con su sistema propio servidor de impresión.
Para la instalación de LPRng hay que instalar necesariamente el paquete lprng. El paquete que contiene la GUI es de
configuración del fichero /etc/printcap basado en LPRng es lprngtool. Óbviamente, para hacer modificaciones
en dicho fichero de configuración, habrá que ejecutar el comando lprngtool con privilegios de root. Adicionalmente se
recomienda instalar el paquete printop que aporta una interficie gráfica para todo el sistema de impresión, y el paquete
lprng-doc, el cual contiene toda la documentación de este sistema de impresión.
Para instalar CUPS (Common Linux Printing System) habrá que instalar el paquete del servidor de impresión,
cupsys; y se recomineda instalar, junto a este paquete el de clientes de impresión, paquete cupsys-client. También se puede instalar el paquete cupsys-bsd para disponer de los comandos habituales en el sistema de impresión
de BSD. Por lo que ser refiere a drivers, los paquetes cupsys-driver-gimpprint y cupsomatic-ppd, aportan
gran número de ellos junto con numerosos algoritmos de procesamiento de imagen, definición de tamaños de papel, etc.
11.9. OpenOffice
En esta sección, aunque se aparte un poco del objeto principal del curso, presentaremos una suite ofimática que puede
ser de extraordinaria utilidad para aquellos que estén acostumbrados a utilizar software de éste tipo. Se trata de OpenOffice6 , proyecto derivado de StarOffice, de Sun MicroSystems. Hay que destacar que este proyecto es multiplataforma, y
que por tanto puede ser implementado en otros sistemas operativos no tipo UNIX.
Si bien esta suite no está integrada en Debian, podemos recurrir, como ya hemos hecho con anterioridad, a fuentes no
oficiales para obtener sus paquetes:
#OpenOffice
deb http://ftp.freenet.de/pub/ftp.vpn-junkies.de/openoffice/ woody main contrib
Una vez hayamos añadido la línea anterior a /etc/apt/sources.list y hayamos actualizado la base de datos
mediante apt-get update, bastará con ejecutar la línea siguiente para proceder a la instalación:
brau:~# apt-get install openoffice.org openoffice.org-l10n-en
Sólo hay que tener presente, durante el proceso de instalación (el cual debe ejecutarse bajo un entorno gráfico) que
hay que hacer la instalación para red. Así sólo será necesario que en el directorio home de cada usuario exista un pequeño
directorio donde se guardarán sus configuraciones personales.
Una vez se haya instalado el programa la primera vez, cada usuario deberá ejecutar el programa siguiente, para que se
cree su directorio:
/usr/lib/openoffice/program/setup
Una vez hecho esto, y se hayan respuesto algunas preguntas, mediante el comando openoffice abriremos la suite.
11.10. Conclusión
Con este taller se termina el material didáctico del segundo módulo del máster. En él hemos aprendido a instalar
el entorno gráfico al sistema, el cual, como ya vimos en su momento, no es una parte fundamental dentro del sistema
operativo. Pero es óbvio que su utilidad en muchos casos, y no es llegado hasta este punto que muchos creen que el
sistema operativo que ha sido objeto de estudio en este módulo puede ser una alternativa seria a otros sistemas. Llegados
a este punto los autores querríamos manifestar nuestro absoluto convencimiento que GNU/Linux es un sistema operativo
extraordinario, no sólo debido a su entorno gráfico, que es lo que quizás sorprenda más a primera vista, sino por un sinfin
de argumentos, de entre los cuales podemos destacar su filosofía, su robustez, su adaptabilidad, su poténcia, por los niveles
de seguridad que se pueden conseguir, etc. Estamos convencidos de que este sistema operativo es una apuesta de futuro
para el cual, si bien ya ha demostrado que es capaz de abrirse un espacio en el mundo de los sistemas operativos, sólo
cabe esperar sorpresas positivas.
6 http://www.openoffice.org/
110
CAPÍTULO 11. TALLER DE X-WINDOWS
Deseamos haber sabido dar los conocimientos suficientes y transmitir el entusiasmo necesario para que el lector inicíe
aquí su propio camino en el mundo del software libre, y haber sabido abrir las puertas a una comunidad donde todo el
mundo es bienvenido y respetado.
APÉNDICES
Apéndice A
Tablas de comandos
A.1.
Sistema de ficheros
COMANDO
ls [pattern]
cd [ruta]
pwd
find [parámetros] [path]
ln ruta [nombreNuevoLink]
A.2.
SIGNIFICADO Y PARÁMETROS ÚTILES
Lista los contenidos de un directorio determinado.
⇒ “-a” muestra todos los contenidos, incluso los que empiezan por “.”
⇒ “-l” muestra la información completa relativa a los contenidos
⇒ “-h” acompañada de “-l” muestra el tamaño de los archivos en unidades de bytes,
KB, MB, GB
⇒ “-S” ordena el listado por tamaño
⇒ “-w” muestra el listado por columnas
⇒ “-R” muestra el listado de forma recursiva, pasando por todos los subdirectorios
⇒ “--color” colorea el texto del listado segun el tipo de archivo
Cambia al directorio especificado. Si no se especifica ninguno va al home del usuario
Muestra la ruta completa hasta el directorio actual
Busca un determinado fichero o directorio
⇒ “-iname pattern” busca recursiva del pattern a partir del directorio actual
⇒ “-ilname pattern” como “-iname” pero haciendo la búsqueda insensible a mayúsculas o minúsculas
⇒ “-maxdepth numLevels” realiza la búsqueda hasta el nivel de profundidad especificado
⇒ “-uid UID” fuerza la coincidencia de UID
⇒ “-gid GID” fuerza la coincidencia de GID
Crea un link a un fichero o directorio. Si no se trata de un link simbólico, se hace una
copia exacta y se modifica frente a cualquier actualización (hard link)
⇒ “-s” crea un enlace simbólico
Ayuda del sistema
COMANDO
man [numManual] comando
SIGNIFICADO Y PARÁMETROS ÚTILES
Muestra el contenido del manual del comando mediante un paginador.
info comando
Otra fuente de ayuda, que a veces complementa los contenidos del man, y en otras es
la única documentación que se mantiene.
Busca todos los comandos que contienen la palabra clave en la descripción de su
manual.
apropos palabraClave
113
APÉNDICE A. TABLAS DE COMANDOS
114
A.3.
Permisos de los ficheros
COMANDO
chmod modo fichero
chown
propietario[.grupo] fichero
chgrp grupo fichero
umask modo
A.4.
SIGNIFICADO Y PARÁMETROS ÚTILES
Establece los permisos de ficheros y/o directorios.
⇒ “-R” el cambio se realiza de forma recursiva, es decir, se realiza sobre todos los
ficheros y subdirectorios del directorio especificado
Establece el propietario y el grupo (si éste se especifica) de ficheros y/o directorios.
⇒ “-R” el comando actúa de forma recursiva
Establece el grupo al que pertenecen ficheros y/o directorios.
⇒ “-R” el comando actúa de forma recursiva
Inicializa los permisos de todos los ficheros creados a partir del momento en que se
ejecuta el comando.
Copia y borrado de ficheros
COMANDO
rm fichero
rmdir directori
cp ficheroOrigen ficheroDestino
mv ficheroOrigen ficheroDestino
SIGNIFICADO Y PARÁMETROS ÚTILES
Comando para borrar ficheros y/o directorios.
⇒ “-f” suprime los mensajes de confirmación
⇒ “-R” el comando actúa de forma recursiva
⇒ “-i” pregunta antes de proceder al borrado
Borra directorios vacíos.
Copia archivos del origen al destino especificados.
⇒ “-f” no pide confirmación
⇒ “-i” pide confirmación antes de copiar cada fichero
⇒ “-l” realiza enlaces en vez de copiar
⇒ “-R” actúa recursivamente copiando los contenidos de los subdirectorios
⇒ “-s” realiza enlaces simbólics en vez de copiar
Mueve archivos del origen al destino especificados.
⇒ “-f” no pide confirmación
⇒ “-i” pide confirmación antes de mover cada fichero
A.5.
Parada o reinicio
COMANDO
logout
halt
reboot
SIGNIFICADO Y PARÁMETROS ÚTILES
Sale de la shell y devuelve al login.
Inicia el proceso de paro del sistema (nunca debemos apagar el ordenador hasta que
no se displeye “Power Down”).
Reinicia el sistema, es decir, procede al paro de éste y luego resetea el ordenador.
A.6. OPERACIONES CON FICHEROS
A.6.
Operaciones con ficheros
COMANDO
cat [archivo]
less archivo
more archivo
grep [pattern] archivo
cut archivo
wc fichero
diff archivo1 archivo2
SIGNIFICADO Y PARÁMETROS ÚTILES
Muestra el contenido del archivo o, si este no se ha especificado, muestra por pantalla
todo lo que se entra por teclado.
⇒ “-n” enumera las líneas mostradas
Paginador para mostrar contenido de archivos. Las opciones que se especifican a continuación NO son parámetros del comando, sino teclas de acceso directo a utilitzar en
su uso.
⇒ “/pattern” dentro de “less” podemos realizar una búsqueda del pattern especificado
precedido de “/”; Para continuar la búsqueda hacia delante o hacia atrás, usaremos las
teclas “n” y “N” respectivamente
⇒ “FIN” va al final del archivo
⇒ “INICIO” va al principio del archivo
⇒ “AVPAG” avanza página
⇒ “REPAG” retrocede página
⇒ “RETURN” avanza una línea
⇒ “SPACE” avanza una páguina
Muestra el contenido del archivo de una forma similar a “less” pero más simple (no
permite, por ejemplo, la opción de retroceder).
Busca las líneas que cumplen con el pattern y las muestra por pantalla.
⇒ “-b” muestra el número de byte de cada línea encontrada
⇒ “-c” no muestra las líneas por pantalla, sino que las cuentas y devuelve el número
⇒ “-e pattern” útil cuando el pattern empieza por el carácter “-”
⇒ “-i” ignora la diferencia entre mayúsculas y minúsculas
⇒ “-n” muestra el número de línea
⇒ “-v” invierte el resultado de la búsqueda
⇒ “-w” selecciona sólo aquellas líneas donde el pattern es toda una palabra
Muestra los campos del achivo.
⇒ “-d carácter” indica qué carácter es el delimitador de campo
⇒ “-f numCampo” indica qué campo debe mostrado
⇒ “-b listaBytes” del campo seleccionado, sólo se quiere ver los bytes indicados,
separados por comas
Muestra el número de bytes, líneas y palabras del fichero.
⇒ “-c” sólo muestra los bytes
⇒ “-l” sólo muestra el número de líneas
⇒ “-w” sólo muestra el número de palabras
Muestra les diferencias entre archivo1 y archivo2.
⇒ “-B” ignora líneas en blanco
⇒ “-i” ignora la diferencia entre mayúsculas y minúsculas
⇒ “-w” ignora los espacios en blanco
115
APÉNDICE A. TABLAS DE COMANDOS
116
A.7.
Compresión de ficheros y copias de seguridad
COMANDO
tar opciones archivo [archivoOrigen]
cpio
gzip archivo
gunzip archivo
zip archivoFinal archivoOrigen
unzip archivo
SIGNIFICADO Y PARÁMETROS ÚTILES
Une distintos archivos y directorios en uno de solo (conocido como tarball, los cuales
se caracterizan por terminar con “.tar”).
⇒ “-cf” crea un archivo a partir de los archivos y directorios origen
⇒ “-cvf” como en el caso anterior, pero mostrando por pantalla el proceso
⇒ “-cvzf” como en el caso anterior, pero comprimiendo los archivos con gzip
⇒ “-x” para extraer el contenido de un tarball
⇒ “-xvzf” para extraer y descomprimir mostrando por pantalla los resultados del
proceso (los archivos comprimidos se caracterizan por terminar en “.tar.gz” o “.tgz”
Para hacer copias de seguridad.
comprime el archivo y le da la extensión “.gz”.
⇒ “-d” descomprime.
Descomprime el archivo.
Comprime todos los archivos origen en archivo final (el cual se caracteriza por terminar con “.zip”.
⇒ “-e” encripta el archivo mediante una palabra clave que se pide al ejecutar el comando
Descomprime el archivo.
A.8. OPERACIONES DE DISCO
A.8.
Operaciones de disco
COMANDO
df
du [archivo]
mkfs
dumpe2fs dispositivo
fsck dispositivo
sync
badblocks dispositivo
A.9.
SIGNIFICADO Y PARÁMETROS ÚTILES
Muestra el estado de las particiones montadas por lo que se refiere a espacio total,
ocupado y libre.
⇒ “-h” muestra la información en unidades de bytes, KB, MB, GB
⇒ “-m” muestra la información en unidades de MB
Muestra los bloques que ocupa archivo.
⇒ “--block-size=TAMAÑO” nos permite establecer el tamaño de bloque que deseemos
⇒ “-h” muestra la información en unidades de bytes, KB, MB, GB
Comando para crear un nuevo sistema de ficheros. Debido a la naturaleza del comando, se recomienda la lectura y la comprensión del manual del comando.
Muestra información del sistema de archivos indicado.
Hace un chequeo del sistema de archivos y repara sus possibles fallos. Es importante
tener en cuenta que el dispositivo no debe estar montado en el sistema durante el uso
del comando.
Sincroniza los archivos de cache y disco duro.
Busca errores en la partición especificada.
⇒ “-s” se displaya información del proceso
Usuarios y grupos
COMANDO
whoami
groups
who
w [nombreUsuario]
write
nombreUsuario
[consola]
talk
nombreUsuario
[consola]
mesg [y|n]
adduser [nombreUsurio]
userdel nombreUsuario
addgroup [nombreGrupo]
groupdel nombreGrupo
SIGNIFICADO Y PARÁMETROS ÚTILES
Muestra qué usuario somos.
Muestra el grupo al que pertenecemos.
Muestra los usuarios que estan en el sistema en el momento de la ejecución del comando.
⇒ “-T” indica, para cada usuario, si permite la recepción de mensajes
Muestra información extendida sobre los usuarios del sistema en el momento de la
ejecución. Si no se especifica un usuario en concreto nos la muestra para todos.
Para mandar un mensaje al usuario especificado. Para determinar la consola podemos
utilizar los comandos “who” o “w”.
Abre una sesión de chat con el usuario especificado si éste la acepta.
Sin pasar parámetros, muestra si está o no activa la recepción de mensajes. El parámetro “y” la activa y el parámetro “n” la desactiva.
Crea un nuevo usuario del sistema.
Elimina el usuario especificado del sistema.
Crea un nuevo grupo.
Elimina un grupo del sistema.
117
APÉNDICE A. TABLAS DE COMANDOS
118
A.10.
Gestión de procesos
COMANDO
ps
top
kill PID
killall nombreProceso
nice [comando]
renice prioritad PID
at tiempo
atq
atrm numComando
batch
SIGNIFICADO Y PARÁMETROS ÚTILES
Muestra los procesos del sistema.
⇒ “-A” muestra todos los procesos que están ejecutándose en el sistema (igual que
“-e”)
⇒ “-H” muestra los procesos ordenados por jerarquía
⇒ “-l” muestra información extendida sobre los procesos
Muestra los procesos en ejecución de forma interactiva.
Manda una señal de finalización al proceso.
⇒ “-9” envía la señal de matar el proceso
Manda la señal de fin de proceso a todos los procesos indicados.
⇒ “-9” envía la senyal de matar els procesos
Muestra el nivel de prioridad de ejecución que se utiliza por defecto, y si se le pasa
como parámetro un comando junto con la prioridad deseada, ajusta la prioridad del
comando a la especificada.
⇒ “-n nuevoNivel” ejecutará el comando con la prioridad especificada
Cambia la prioridad del PID especificado.
Ejecuta el comando a la hora especificada.
⇒ “-f comando” especifica el comando a ejecutar
Muestra la cola de espera de “at”.
Para eliminar un comando de la cola de espera. El número de comando es el que
devuelve “atq”.
Ejecuta los comandos o procesos cuando la carga del sistema es baja.
⇒ “-f comando” para especificar el comando
Apéndice B
El editor vi
B.1. Introducción
El saber utilizar un editor de textos es imprescindible para poder editar y modificar los ficheros del sistema. Aunque
existen centenares de editores diferentes, el vi siempre ha sido el editor por defecto de los sistemas like UNIX. Aunque
en un principio el vi pueda parecernos un editor muy simple, a medida que nos vayamos acostumbrando a sus comandos
veremos que tiene muchísimas utilidades que nos facilitan mucho la manipulación de los ficheros. Aunque para tareas
largas (como cuando programamos) existen otros editores más útiles, la gran mayoría de administradores de sistemas
utilizan el vi para muchas de las tareas de administración. El hecho que sea un editor en modo texto (que permite su
utilización en la consola del sistema) y el estar disponible en todos los sistemas hacen del vi el editor ideal en entornos los
UNIX. En GNU/Linux se suele utilizar más el vim (Vi IMproved), que es 99’9 % compatible con el vi pero añade unas
cuantas funcionalidades más.
Para llamar el vi podemos utilizar alguno de los métodos que vemos en la siguiente tabla:
“vi archivo”
“vi -r archivo”
“vi + archivo”
“vi +numLínea archivo”
“vi archivo1 ...archivoN”
“vi +/string archivo”
Edita el fichero en modo “full
screen”.
Recupera la última versión guardada del fichero (por los casos en que no salimos correctamente del editor y queda un fichero
de swap).
Edita el fichero y se sitúa en la última línea.
Edita el fichero y se sitúa en la línea indicada.
Va editando todos los archivos especificados. Para saltar de uno a otro debemos escribir en modo comando “:n”. Con “:n!”
no guardamos las modificaciones.
Edita el fichero y sitúa el cursor en la primera ocurrencia del “string”.
B.2. Modos del vi
El vi tiene dos modos de utilización: modo comando y modo inserción. En el modo comando todo lo que escribamos
será interpretado por el editor para realizar acciones concretas, mientras que el modo inserción se utiliza para modificar el
contenido del archivo. Cuando entramos en el vi, por defecto estamos en modo comando. Para cambiar a modo inserción
podemos utilizar cualquiera de las teclas de la siguiente tabla:
“a”
“i”
“A”
“I”
“R”
“o”
“O”
Inserta después del carácter al que estamos situados.
Inserta antes del carácter donde estemos situados.
Añade al final de la línea actual.
Añade al principio de la línea actual.
Entra en modo inserción reemplazando caracteres.
Añade una línea en blanco debajo la nuestra y pasa a modo inserción.
Añade una línea en blanco encima de la actual y pasa a
modo inserción.
119
APÉNDICE B. EL EDITOR VI
120
Para volver a modo comando podemos utilizar la tecla ESC. En modo inserción lo único que podemos hacer es
escribir texto, eliminarlo o desplazarnos con las teclas de AVPAG y REPAG. El modo comando nos permite muchísimas
más acciones. En las siguientes tablas especificamos algunas de las más comunes:
Moviéndonos por el fichero
“j”
Siguiente línea.
“k”
Línea anterior.
“l”
Siguiente caracter.
“h”
Caracter anterior.
“[[”
Incio del archivo.
“]]”
Final del archivo.
“nG”
Ir a la línea “n”.
“G”
Ir al final del archivo.
RETURN Siguiente línea.
CTRL+F Pantalla siguiente.
CTRL+B Pantalla anterior.
CTRL+D Media pantalla siguiente.
CTRL+U Media pantalla anterior.
“:w”
“:w nombreArchivo”
“:wq”
“:x”
“ZZ”
“:q”
“:q!”
“:e archivo”
“:e! archivo”
“:r archivo”
“:Nr archivo”
“:sh”
“:N,Mw!”
“:N,M>>archivo”
“:=”
CTRL+G
Operaciones con archivos
Guarda el fichero.
Guarda el fichero con el nombre indicado.
Guarda el fichero y sale del editor.
Guarda el fichero y sale del editor.
Guarda el fichero y sale del editor.
Sale si no ha habido cambios en el fichero.
Sale sin guardar los cambios.
Edita el archivo indicado si no hay cambios en el actual.
Edita el archivo indicado perdiendo los cambios en el actual, si hubiera.
Añade el archivo indicado después de la línea actual.
Añade el archivo indicado después de la línea “N”.
Ejecuta un shell sin salir del editor; para salir del shell
debemos escribir “exit”.
Guarda desde la línea “N” a la “M” descartando todas las
otras.
Añade, desde la línea “N” a la “M” el archivo indicado.
Muestra la línea actual.
Muestra el estado del fichero.
Copiar, borrar, pegar, buscar y reemplazar
“yy”
Copia la línea actual.
“Nyy”
Copia las “N” líneas a partir del cursor..
“p”
Pega las líneas copiadas debajo la actual.
“P”
Pega las líneas copiadas encima la actual.
“x”
Borra el caracter de debajo el cursor.
“dw”
Borra la palabra de debajo el cursor.
“dd”
Borra la línea actual.
“D”
Borra desde la posición del cursor hasta final de línea.
“/string”
Busca el “string” a partir de la posición actual. Para
continuar con la búsqueda se puede utilizar “n” y “N”
para ir hacia delante o atrás respectivamente.
“?string”
Como el comando anterior pero en modo invertido.
“:set ic”
Realiza
las
búsquedas
ignorando
mayúsculas/minúsculas.
“:set noic”
Realiza las búsquedas con mayúsculas/minúsculas.
“:g/HOLA/s//ADIOS” Substituye todos los “HOLA” por “ADIOS”.
En la línea inferior del editor veremos los comandos que vayamos escribiendo, que se ejecutarán al apretar el RETURN. Además, la mayoría de estos comandos permiten la repetición: tan solo debemos escribir el número de veces
B.2. MODOS DEL VI
121
que queremos que se ejecuten antes que el comando. Por ejemplo, con “dd” conseguimos que se borre la línea actual; si
escribiéramos “3dd” en lugar de la línea actual se borrarían las tres siguientes.
Apéndice C
Heramientas de administración
C.1.
Introducción
Cuando se administra un sistema GNU/Linux es necesario conocer una gran variedad de aplicaciones y programas
diferentes. Aunque antes de instalar cualquier aplicación es totalmente imprescindible leerse detenidamente la documentación que incorpora, en algunos casos las configuraciones pueden llegar a ser realmente complejas. Es por este motivo
que desde hace ya varios años han ido apareciendo herramientas de administración más intuitivas que permiten manejar
múltiples aplicaciones y servicios de forma más amena.
Al instalar alguna herramienta general de administración es muy importante que limitemos su uso y acceso a sólo el
root del sistema, sino cualquier usuario podría modificar cualquier aspecto del sistema. Además, también debemos estar
muy alerta de los agujeros de seguridad que pueden aparecer en ellas, ya que al tener que poder manejar los programas
instalados en el sistema, la mayoría de estas herramientas deben ejecutarse con los permisos de root, con el peligro que
esto conlleva.
Generalmente, estas herramientas globales de administración incorporan mecanismos para poder configurar y manejar
los aspectos básicos del sistema y los ficheros de configuración de las aplicaciones que utilizamos. Si bien es interesante
saber que existen estas herramientas, no es recomendable que basemos toda la configuración de un servidor en ellas por
varios motivos. En primer lugar debemos tener en cuenta que estos programas no siempre tienen en cuenta todas las
posibilidades que los servidores proporcionan. Esto puede provocar que dejemos sin una configuración adecuada alguna
opción importante para nuestras necesidades, que no tengamos en cuenta algún sistema de seguridad, etc. En segundo
lugar, tampoco podemos olbidar que aunque el entorno de configuración sea más ameno y, generalmente, más fácil de
utilizar y manejar, debemos conocer qué es lo que realmente se hace cuando activamos los opciones de los diferentes
programas y servicios que configuramos. Aunque el entorno sea muy intuitivo, esto no implica que no debamos saber qué
significa exactamente cada opción. Si no tenemos un conocimiento extenso del servicio que estamos manipulando es muy
fácil generar errores que pueden provocar un mal funcionamiento del sistema, agujeros de seguridad, etc. Finalmente, otro
motivo para no utilizar únicamente estas aplicaciones es que en algún momento el sistema puede tener fallos o errores que
no nos permitan utilizarlas o sencillamente que en otros sistemas que tengamos que administrar no estén instaladas. Si no
conocemos con un poco de detalle los ficheros de configuración de las aplicaciones que uitilizamos nos encontraremos
totalmente indefensos ante cualquier pequeño problema que pueda surgir.
Es por todos estos motivos que la utilización de estas herramientas debe realizarse con cuidado y sabiendo exactamente qué es lo que están modificando. En algunos casos pueden ser muy útiles para ver como realizar algún tipo de
configuración complicada o para detectar errores que hayamos generado. La forma como deberíamos utilizarlas es como
un complemento de nuestra administración, pero nunca basarnos totalmente en ellas.
Todas las distribuciones de GNU/Linux acostumbran a incorporar sus propias herramientas automáticas de administración. Esto es una característica claramente diferenciadora de las diferentes distribuciones de GNU/Linux. En SuSE, por
ejemplo se incorpora una aplicación denominada Yast2 que nos permite realizar casi cualquier operación de configuración del sistema; RedHat incorpora múltiples programas diferentes para configurar la red, los daemons, los servidores
de aplicación, etc.; al instalar un paquete en Debian ya se permite inicilizar una configuración a partir de las respuestas
que damos en varias pantallas de diálogo; algunas aplicaciones llevan sus propios scripts para permitir configuraciones
estándar más rápidas, etc. Aún así, si sabemos qué es lo que realmente hacen estas aplicaciones y en qué ficheros guardan
su configuración, al tener problemas con el sistema su arreglo será mucho más fácil. Además de estas herramientas únicas
para la distribución que utilicemos existen algunas otras de generales que podemos instalar en la mayoría de distribuciones
existentes. Aunque hay unas cuantas decenas y cada administrador debe escoger la que más le guste o se adapte a sus
necesidades, en este apéndice mostraremos un par de las más versátiles y populares: linuxconf y webmin.
122
C.2. LINUXCONF
C.2.
123
Linuxconf
La aplicación de administración general Linuxconf está basada en un entorno de menús de texto que podemos
utilizar desde cualquier consola del sistema.
Como podemos apreciar en la imagen, linuxconf divide sus operaciones en las siguientes secciones:
Configuración: esta es la sección principal de linuxconf, donde podemos configurar la mayoría de aspectos
del sistema como la red, los usuarios, los periféricos instalados, etc. En la figura C.1 podemos ver el diálogo de
configuración de la red y de usuarios.
Control: sección para realizar acciones concretas en el sistema tales como montar o desmontar unidades, cambiar la
hora del sistema, personalizar los menús, etc. En la figura C.2 podemos apreciar algunos de las acciones del menú
de panel de control.
Estado: cuando queramos ver los logs o el estado de algún aspecto del sistema podemos recorrer a los menús de esta
sección. En ellos se utilizan muchos de los comandos básicos del sistema para ver el estado del disco, la memoria
usada, etc.
Tareas: otros diálogos de configuración para inicializar correctamente un módem, la red, etc.
Figura C.1: Configuración de red y usuarios.
Figura C.2: Panel de control de Linuxconf.
Otra forma de utilizar este programa es a partir de un navegador web. Por defecto el acceso vía un navegador
está cerrado, por lo que antes de utilizarlo deberemos habilitarlo a partir del menú de Networking, Linuxconf
network access y activando la opción de Enable network access. Abriendo el navegador y accediendo a
http://localhost:98/ tendremos los mismos diálogos y opciones del menú de linuxconf en formato html.
Por defecto sólo se podrá acceder a este servicio desde la misma máquina, aunque es recomendable activarlo solamente
cuando lo queramos utilizar.
Finalmente, otro proyecto relacionado con linuxconf es el gnome-linuxconf, que tiene las mismas funciones
que veíamos anteriormente pero se puede utilizar en las X. En la figura C.3 podemos ver su aspecto.
C.3.
Webmin
Tal y como su nombre indica webmin es una herramienta de configuración vía web. Su diseño está muy bien conseguido y la mayoría de sus métodos de configuración están muy bien pensados. Bien utilizada, es una herramienta que
124
APÉNDICE C. HERAMIENTAS DE ADMINISTRACIÓN
Figura C.3: Aspecto de Linuxconf en gnome.
puede llegar a sernos muy útil. Por defecto, al instalarla abre el puerto 10000 para que podamos acceder a ella a partir
de un navegador cualquiera. Antes de entrar nos pedirá la contraseña del administrador del sistema, aunque también tiene
un sistema muy útil de administración de usuarios propios con el cual le podemos especificar qué acciones puede realizar
cada uno de ellos. Esta opción es muy interesante porque permitirá configurar más de un administrador de sistema cada
uno especializado en algunas tareas.
Para hacernos una idea de la aplicación mostramos una serie de capturas de diferentes secciones (figuras C.4, C.5,
C.6, C.7).
Figura C.4: Administración de usuarios del sistema.
Figura C.5: Configuración de arranque del sistema.
C.3. WEBMIN
125
Figura C.6: Información de disco.
Figura C.7: Navegador de archivos.
Apéndice D
GNU Free Documentation License
Front-Cover Texts or Back-Cover Texts, in the notice that says that the
Document is released under this License. A Front-Cover Text may be at
most 5 words, and a Back-Cover Text may be at most 25 words.
GNU Free Documentation License
Version 1.2, November 2002
Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 59
Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but
changing it is not allowed.
0. PREAMBLE
The purpose of this License is to make a manual, textbook, or other
functional and useful document "free"in the sense of freedom: to assure
everyone the effective freedom to copy and redistribute it, with or without
modifying it, either commercially or noncommercially. Secondarily, this
License preserves for the author and publisher a way to get credit for their
work, while not being considered responsible for modifications made by
others.
This License is a kind of çopyleft", which means that derivative works
of the document must themselves be free in the same sense. It complements
the GNU General Public License, which is a copyleft license designed for
free software.
We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free program
should come with manuals providing the same freedoms that the software
does. But this License is not limited to software manuals; it can be used for
any textual work, regardless of subject matter or whether it is published as
a printed book. We recommend this License principally for works whose
purpose is instruction or reference.
1. APPLICABILITY AND DEFINITIONS
This License applies to any manual or other work, in any medium,
that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide,
royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual
or work. Any member of the public is a licensee, and is addressed as ou".
You accept the license if you copy, modify or distribute the work in a way
requiring permission under copyright law.
2
A "Modified Version.of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with modifications
and/or translated into another language.
A "Secondary Section"is a named appendix or a front-matter section
of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to
related matters) and contains nothing that could fall directly within that
overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with
related matters, or of legal, commercial, philosophical, ethical or political
position regarding them.
Sections.a re
The "Invariant
certain Secondary Sections whose titles
are designated, as being those of Invariant Sections, in the notice that says
that the Document is released under this License. If a section does not fit
the above definition of Secondary then it is not allowed to be designated
as Invariant. The Document may contain zero Invariant Sections. If the
Document does not identify any Invariant Sections then there are none.
The Çover Texts.are certain short passages of text that are listed, as
A "Transparentçopy of the Document means a machine-readable
copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly
with generic text editors or (for images composed of pixels) generic paint
programs or (for drawings) some widely available drawing editor, and that
is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an
otherwise Transparent file format whose markup, or absence of markup,
has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for
any substantial amount of text. A copy that is not "Transparent"is called
.Opaque".
Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or
XML using a publicly available DTD, and standard-conforming simple
HTML, PostScript or PDF designed for human modification. Examples of
transparent image formats include PNG, XCF and JPG. Opaque formats
include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML,
PostScript or PDF produced by some word processors for output purposes
only.
The "Title Page"means, for a printed book, the title page itself, plus
such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do
not have any title page as such, "Title Page"means the text near the most
prominent appearance of the work’s title, preceding the beginning of the
body of the text.
A section "Entitled XYZ"means a named subunit of the Document
whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a
specific section name mentioned below, such as .Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title. of such a
section when you modify the Document means that it remains a section
"Entitled XYZ.according to this definition.
The Document may include Warranty Disclaimers next to the notice
which states that this License applies to the Document. These Warranty
Disclaimers are considered to be included by reference in this License, but
only as regards disclaiming warranties: any other implication that these
Warranty Disclaimers may have is void and has no effect on the meaning
of this License.
2. VERBATIM COPYING
You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions
whatsoever to those of this License. You may not use technical measures
to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for
copies. If you distribute a large enough number of copies you must also
follow the conditions in section 3.
126
127
You may also lend copies, under the same conditions stated above,
and you may publicly display copies.
3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have
printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies
in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover
Texts on the front cover, and Back-Cover Texts on the back cover. Both
covers must also clearly and legibly identify you as the publisher of these
copies. The front cover must present the full title with all words of the title
equally prominent and visible. You may add other material on the covers in
addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated
as verbatim copying in other respects.
title with any Invariant Section. O. Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied
from the Document, you may at your option designate some or all of these
sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct
from any other section titles.
You may add a section Entitled "Endorsements", provided it contains
nothing but endorsements of your Modified Version by various parties–for
example, statements of peer review or that the text has been approved by
an organization as the authoritative definition of a standard.
You may add a passage of up to five words as a Front-Cover Text, and
a passage of up to 25 words as a Back-Cover Text, to the end of the list
of Cover Texts in the Modified Version. Only one passage of Front-Cover
If the required texts for either cover are too voluminous to fit legibly, Text and one of Back-Cover Text may be added by (or through arrangeyou should put the first ones listed (as many as fit reasonably) on the actual ments made by) any one entity. If the Document already includes a cover
text for the same cover, previously added by you or by arrangement made
cover, and continue the rest onto adjacent pages.
by the same entity you are acting on behalf of, you may not add another;
If you publish or distribute Opaque copies of the Document numbe- but you may replace the old one, on explicit permission from the previous
ring more than 100, you must either include a machine-readable Transpa- publisher that added the old one.
rent copy along with each Opaque copy, or state in or with each Opaque
The author(s) and publisher(s) of the Document do not by this License
copy a computer-network location from which the general network-using
public has access to download using public-standard network protocols a give permission to use their names for publicity for or to assert or imply
complete Transparent copy of the Document, free of added material. If endorsement of any Modified Version.
you use the latter option, you must take reasonably prudent steps, when
5. COMBINING DOCUMENTS
you begin distribution of Opaque copies in quantity, to ensure that this
You may combine the Document with other documents released unTransparent copy will remain thus accessible at the stated location until at
least one year after the last time you distribute an Opaque copy (directly or der this License, under the terms defined in section 4 above for modified
versions, provided that you include in the combination all of the Invariant
through your agents or retailers) of that edition to the public.
Sections of all of the original documents, unmodified, and list them all as
It is requested, but not required, that you contact the authors of the Invariant Sections of your combined work in its license notice, and that
Document well before redistributing any large number of copies, to give you preserve all their Warranty Disclaimers.
them a chance to provide you with an updated version of the Document.
The combined work need only contain one copy of this License, and
4. MODIFICATIONS
multiple identical Invariant Sections may be replaced with a single copy.
You may copy and distribute a Modified Version of the Document un- If there are multiple Invariant Sections with the same name but different
der the conditions of sections 2 and 3 above, provided that you release the contents, make the title of each such section unique by adding at the end
Modified Version under precisely this License, with the Modified Version of it, in parentheses, the name of the original author or publisher of that
filling the role of the Document, thus licensing distribution and modifica- section if known, or else a unique number. Make the same adjustment to
tion of the Modified Version to whoever possesses a copy of it. In addition, the section titles in the list of Invariant Sections in the license notice of the
combined work.
you must do these things in the Modified Version:
A. Use in the Title Page (and on the covers, if any) a title distinct from
that of the Document, and from those of previous versions (which should,
if there were any, be listed in the History section of the Document). You
may use the same title as a previous version if the original publisher of that
version gives permission. B. List on the Title Page, as authors, one or more
persons or entities responsible for authorship of the modifications in the
Modified Version, together with at least five of the principal authors of the
Document (all of its principal authors, if it has fewer than five), unless they
release you from this requirement. C. State on the Title page the name of
the publisher of the Modified Version, as the publisher. D. Preserve all the
copyright notices of the Document. E. Add an appropriate copyright notice
for your modifications adjacent to the other copyright notices. F. Include,
immediately after the copyright notices, a license notice giving the public
permission to use the Modified Version under the terms of this License, in
the form shown in the Addendum below. G. Preserve in that license notice
the full lists of Invariant Sections and required Cover Texts given in the
Document’s license notice. H. Include an unaltered copy of this License.
I. Preserve the section Entitled "History", Preserve its Title, and add to it
an item stating at least the title, year, new authors, and publisher of the
Modified Version as given on the Title Page. If there is no section Entitled
"History"in the Document, create one stating the title, year, authors, and
publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve
the network location, if any, given in the Document for public access to a
Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be
placed in the "History"section. You may omit a network location for a work
that was published at least four years before the Document itself, or if the
original publisher of the version it refers to gives permission. K. For any
section Entitled .Acknowledgements.o r "Dedications", Preserve the Title of
the section, and preserve in the section all the substance and tone of each
of the contributor acknowledgements and/or dedications given therein. L.
Preserve all the Invariant Sections of the Document, unaltered in their text
and in their titles. Section numbers or the equivalent are not considered
part of the section titles. M. Delete any section Entitled "Endorsements".
Such a section may not be included in the Modified Version. N. Do not
retitle any existing section to be Entitled "Endorsements.or to conflict in
In the combination, you must combine any sections Entitled "History"in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled .Acknowledgements", and
any sections Entitled "Dedications". You must delete all sections Entitled
"Endorsements".
6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of
this License in the various documents with a single copy that is included
in the collection, provided that you follow the rules of this License for
verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all other
respects regarding verbatim copying of that document.
7. AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage
or distribution medium, is called an .aggregate"if the copyright resulting
from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document
is included in an aggregate, this License does not apply to the other works
in the aggregate which are not themselves derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the
entire aggregate, the Document’s Cover Texts may be placed on covers
that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must
appear on printed covers that bracket the whole aggregate.
8. TRANSLATION
Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing
Invariant Sections with translations requires special permission from their
128
APÉNDICE D. GNU FREE DOCUMENTATION LICENSE
copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license
notices in the Document, and any Warranty Disclaimers, provided that you
also include the original English version of this License and the original
versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or
disclaimer, the original version will prevail.
If a section in the Document is Entitled .Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title
(section 1) will typically require changing the actual title.
9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to
copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who
have received copies, or rights, from you under this License will not have
their licenses terminated so long as such parties remain in full compliance.
10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of
the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail
to address new problems or concerns. See http://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number.
If the Document specifies that a particular numbered version of this License .or any later version.applies to it, you have the option of following the
terms and conditions either of that specified version or of any later version
that has been published (not as a draft) by the Free Software Foundation. If
the Document does not specify a version number of this License, you may
choose any version ever published (not as a draft) by the Free Software
Foundation.
Autores (por orden alfabético):
Aulí Llinàs, Francesc ([email protected])
Baig Viñas, Roger ([email protected])