Download Clase 3 - WordPress.com

Document related concepts

Init wikipedia , lookup

Proceso de arranque en Linux wikipedia , lookup

Nivel de ejecución wikipedia , lookup

Systemd wikipedia , lookup

GoboLinux wikipedia , lookup

Transcript
Curso de Administración
GNU/Linux
Nivel I
Facultad de Ciencia y Tecnología
– Oro Verde - 2009
Curso de Administración
GNU/Linux
Nivel I
Facultad de Ciencia y Tecnología
– Oro Verde - 2009 1
El Curso de Administración de GNU/Linux en su nivel I pretende formar profesionales en el ámbito del Software Libre.
Capítulo 2: Inicio del Sistema
Arranque de la Computadora
Inicio de GNU/Linux
Niveles de Ejecución
2
En esta clase veremos como arranca mucho equipo desde el encendido hasta llegar a dar con nuestro interprete de comandos. En la primer parte de la clase revisaremos el arranque desde el encendido hasta que termina su tarea el BIOS (Basic Input/Output System). En la segunda parte de la clase explicaremos el arranque de GNU/Linux hasta que aparezca el prompt del interprete de comandos, que para nuestro caso particular es Bash.
Terminando con la clase veremos los distintos niveles de ejecución que posee un GNU/Linux pero particularmente veremos los niveles de Debian.
Clase 1: Arranque de la Computadora
El inicio se divide en varias etapas:
1. Encendido del Equipo
2. Lectura del contenido de la memoria ROM
3. Testeo de dispositivos del sistema (POST)
4. Se muestra una pantalla de estado
5. Testeo de la memoria y de los recursos faltantes de la computadora
6. Búsqueda del primer dispositivo para cargar un Sistema Operativo
3
Cuando encendemos nuestra computadora se realizan diversas tareas antes de pasar al control al sistema operativo para que este comience a ejecutarse.
Luego del encendido de la PC se lee el contenido de la memoria ROM (Memoria de sólo lectura) y se ejecuta un programa denominado POST (Power On Self Test – Autotesteo de Arranque). Este programa se encarga de realizar testeos en los distintos periféricos, y checkear una área de la memoria.
Si en algún momento de estos test ocurre un error, la BIOS emite una serie beeps con los cuales se informa el tipo de error que se ha producido (normalmente podemos encontrar información sobre esto en el manual de la placa madre de nuestra computadora).
Luego de esto, la BIOS toma control del video de nuestro equipo, se muestra una pantalla de información y se procede a examinar el área restante de la memoria y a testear los dispositivos faltantes.
Una vez hecho esto se procede a buscar un sistema operativo para poder iniciar, para hacer ésto todas las BIOS cuentan con una tabla de dispositivos u orden de booteo, en la cual podemos especificar el orden en que queremos que se comience a buscar una unidad para cargar un sistema operativo. En caso de no encontrarse ninguna simplemente la BIOS nos pide que insertemos un disquete o disco de arranque y detiene su ejecución en ese punto.
Clase 1: Pasos del Proceso de Arranque
Antes de cargar un Sistema Operativo:
Se busca un medio para iniciar el mismo (cdrom, disquete, usb, red)
Se leen los primeros 512 bytes de ese dispositivo (Sector 0) para buscar un programa cargador del Sistema Operativo (MBR – Master Boot Record)
Se selecciona un SO y se procede a la carga del mismo
4
Al momento de verificar si un dispositivo es booteable, se checkean los primeros 512 bytes del mismo, o el primer sector de ese dispositivo (sector 0), con el objetivo de encontrar un programa ubicado en él, este lugar se denomina MBR (Master Boot Record – Registro Maestro de Arranque). Este programa se MBR
encarga de presentarnos una lista de los distintos sistemas operativos instalados y nos permite ejecutar alguno de ellos (en caso de que tengamos más de uno instalado).
Con respecto al programa instalado en el MBR, en GNU/Linux al momento existen dos de ellos mayormente usados: LILO y GNU/GRUB:
LILO (Linux Loader): Es el cargador de arranque por defecto en varias distribuciones, soporta varios LILO (Linux Loader):
sistemas operativos y se instala íntegramente en el sector 0 de un dispositivo, como desventaja podemos nombrar que cada vez que necesitamos editar o modificar su configuración, debemos sobreescribir el registro maestro de arranque.
GNU/GRUB (GRand Unified Boot Loader): Este es un cargador de arranque nuevo, que cumple y GNU/GRUB (GRand Unified Boot Loader):
cumplimenta a Lilo y agrega nuevas funcionalidades, nos permite editar su configuración “en caliente” (es decir cuando el programa está corriendo) y si realizamos un cambio en su configuración no debemos sobreescribir el MBR, ya que en ese lugar no se escribe el programa entero, sino que se utiliza un archivo de configuración ubicado en /boot.
Detallaremos estos conceptos más adelante en el curso.
Clase 1: Inicio de GNU/Linux
Ahora es el turno del Sistema Operativo:
El núcleo se descomprime y se carga en memoria para ser ejecutado
Se inicializan diversos dispositivos de hardware.
Se monta la partición raíz (/)
Se ejecuta el proceso /sbin/init
5
El inicio de GNU/Linux es similar al de cualquier Unix, el núcleo debe ser cargado en memoria para poder ser ejecutado. Para hacer ésto primero debe ser descomprimido.
Una vez que el núcleo se descomprime y se carga en memoria, comienza a inicializar los dispositivos de hardware; luego procede a montar la partición raíz o root (“/”) y ejecuta el proceso /sbin/init, el cual se encarga de realizar el resto del trabajo.
El demonio init es el primero en ejecutarse y es el “padre” de todos los demás procesos (veremos esto init
con más detalle luego), sus principales funciones son las de ejecutar diversos scripts de inicio que son los encargados de configurar dispositivos del sistema (configuración de red, montado de los demás sistemas de archivos, ejecutar tareas de mantenimiento en el sistema, entre otros) y la de poner en funcionamiento los distintos servicios que tenemos instalados en nuestro sistema (servidor web, bases de datos, ftp, impresión, entre otros), seguidamente veremos como realiza esta tarea. Clase 1: Niveles de Ejecución
Niveles de Ejecución o RunLevels
RunLevels:
Son modos de ejecución de los sistemas operativos basados en Unix.
Determinan formas en las que podemos iniciar nuestro sistema operativo y los servicios que podemos arrancar en cada uno de ellos.
En la actualidad existen 9 de ellos, pero normalmente se utilizan son 6:
0: Apagado del equipo.
1: Inicio en modo mono­usuario.
2­5: Inicio en modo multi­usuario y personalizables.
6: Reinicio del equipo.
El demonio init
init es el encargado de llevar a cabo esta tarea.
6
Los niveles de ejecución (RunLevels) son un estado o modo, en el que entra el sistema en el proceso de arranque y que define los servicios que serán iniciados por la máquina. En la actualidad, existen seis niveles de ejecución:
●Nivel de ejecución 0: Apagado.
●Nivel de ejecución 1: Monousuario (sólo usuario root; no es necesaria la contraseña). Se suele usar para analizar y reparar problemas.
●Nivel de ejecución 2: Multiusuario sin soporte de red.
●Nivel de ejecución 3: Multiusuario con soporte de red.
●Nivel de ejecución 4: Como el runlevel 3, pero no se suele usar
●Nivel de ejecución 5: Multiusuario en modo gráfico (X Windows).
●Nivel de ejecución 6: Reinicio.
Cada uno de los niveles de ejecución están definidos en subdirectorios bajo /etc/rcX (donde X es el número de runlevel). En estos subdirectorios encontraremos enlaces a los scripts que nos permitirán ejecutar los servicios en los niveles de ejecución respectivos.
Todos los scripts de arranque se encuentran en el directorio /etc/init.d/, cualquiera de los niveles de ejecución pueden utilizar estos scripts por medio de un enlace como se explico en el párrafo anterior.
Los scripts cuyos nombres comienzan con K se ejecutan con el argumento stop. Los scripts que comienzan con S se ejecutan con el argumento start. Los scripts se ejecutan de acuerdo al orden alfabético de sus nombres; de esta manera los scripts "stop" se ejecutan antes que los scripts "start" y los dos dígitos a continuación de K o S determinan el orden en que se ejecutan los scripts.
Cada script también acepta como argumento "restart" y "force­reload"; estos métodos se pueden utilizar para reiniciar los servicios una vez que haya sido arrancado el sistema o forzarlos para que vuelvan a cargar sus archivos de configuración.
Clase 1: Niveles de Ejecución
Niveles de Ejecución o RunLevels
RunLevels:
Cada uno de ellos contiene un directorio ubicado en /etc.
7
En cada uno de estos directorios encontramos los scripts de inicio de los distintos servicios
El archivo de configuración de init (que es el /etc/inittab) indica que el primer script que se debe ejecutar es el /etc/init.d/rcS.
El archivo /etc/init.d/rcS del paquete sysv­rc ejecuta todos los scripts situados en /etc/rcS.d/ para realizar inicializaciones tales como la comprobación y montaje de los sistemas de archivos, la carga de módulos, la inicialización de los servicios de red, la configuración del reloj, etc. Luego, y por compatibilidad, también ejecuta todos los archivos (excepto aquellos con un `.' en su nombre) situados en /etc/rc.boot/. Este último directorio está reservado para el administrador del sistema y su utilización ha caído en desuso.
El script rc.local es un archivo que se ejecuta al finalizar la cargar de GNU/Linux y en donde podremos agregar comandos o llamadas a otros scripts; este archivo funciona de forma similar al autoexec.bat de los MS­DOS.
Clase 1: Niveles de Ejecución
Niveles de Ejecución o RunLevels
RunLevels:
Cada nivel de ejecución contiene scripts que usan para inciar, detener y reiniciar los distintos demonios del sistema.
¿Qué es un script
script?
Un script es un guión o conjunto de instrucciones. Permiten la automatización de tareas creando pequeñas utilidades.
¿Qué es un demonio
demonio?
Un demonio, daemon o dæmon (de sus siglas en inglés Disk And Execution Monitor), es un tipo especial de proceso informático que se ejecuta en segundo plano en vez de ser controlado directamente por el usuario (es un proceso no interactivo).
8
El término runlevel o nivel de ejecución se refiere al modo de operación en los sistemas operativos que implementan el estilo de sistema de arranque de iniciación tipo UNIX System V.
En términos prácticos, cuando el computador entra al runlevel 0, está apagado, y cuando entra al runlevel 6, se reinicia. Los runlevels intermedios (1 a 5) difieren en relación a qué unidades de disco se montan, y qué servicios de red son iniciados. Los niveles más bajos se utilizan para el mantenimiento o la recuperación de emergencia, ya que por lo general no ofrecen ningún servicio de red. Los detalles particulares de configuración del runlevel varía bastante entre sistemas operativos, y ligeramente entre los administradores de sistema.
El sistema de runlevel reemplazó al script tradicional /etc/rc en UNIX, versión 7.
un script es un guión o conjunto de instrucciones. Permiten la automatización de tareas creando pequeñas utilidades. Es muy utilizado para la administración de sistemas UNIX. Son ejecutados por un intérprete de línea de órdenes y usualmente son archivos de texto. También Script Puede considerarse una alteración o acción a una determinada plataforma, Muy parecido a los trucos que se usan para alterar juegos y conseguir cosas extras...
Un demonio, daemon o dæmon (de sus siglas en inglés Disk And Execution Monitor), es un tipo especial de proceso informático que se ejecuta en segundo plano en vez de ser controlado directamente por el usuario (es un proceso no interactivo). Este tipo de programas se ejecutan de forma continua (infinita), vale decir, que aunque se intente cerrar o matar el proceso, este continuará en ejecución o se reiniciará automáticamente. Todo esto sin intervención de terceros y sin dependencia de consola alguna.
El origen de la palabra daemon (demonio), se encuentra en la antigua Grecia, y la figura del daimon, un espíritu interior, equivalente a un "ángel protector" que guiaba y protegía a los hombres.
Los programas demonios reciben este nombre en los sistemas UNIX. En otros sistemas existen procesos similares como los TSRs de MS­DOS o los servicios de Windows.
Los demonios suelen tener las siguientes características:
* No disponen de una interfaz directa con el usuario, ya sea gráfica o textual.
* No hacen uso de la entradas y salidas estándar para comunicar errores o registrar su funcionamiento, sino que usan archivos del sistema en zonas especiales (/var/log/ en los UNIX más modernos) o utilizan otros demonios especializados en dicho registro como el syslogd.
Clase 1: Niveles de Ejecución
Enlaces de tipo S:
(inician un servicio)
S16ssh
S19mysql
ssh
S30gdm
S99rc.local
/etc/rcX.d
mysql
/etc/init.d
Enlaces de tipo K:
(detienen un servicio)
K01gdm
gdm
K42ssh
K21mysql
9
Cada nivel de ejecución tiene su correspondiente directorio en /etc/rcX.d (donde X representa el número de nivel de ejecución). Dentro de ese directorio se encuentran archivos que indican las acciones que se van a ejecutar cuando se entre en ese nivel de ejecución en particular.
Dentro de cada directorio encontraremos en realidad enlaces simbólicos, que apuntan a scripts ejecutables ubicados dentro del directorio /etc/init.d. Estos enlaces se dividen en 2 tipos, enlaces de tipo S y de tipo K. Los primeros inician un servicio (S = start) mientras que los segundos se encargan de detenerlo (K = kill). Además de ésto, vemos que los enlaces se encuentran numerados y ésto se da porque utilizan esa numeración para ejecutarse en un orden determinado.
Además de eso vemos que existen 2 enlaces que apuntan al mismo script, uno del tipo S y otro del tipo K, ésto se da porque los scripts van a iniciar o detener un servicio en base a como sean llamados, veremos ésto en niveles posteriores del curso.
Clase 1: Niveles de Ejecución
El comando init nos permite pasar a un nivel de ejecución determinado
trinity:~# init 0
=
trinity:~# poweroff
Apaga el equipo
trinity:~# init 1
Inicio en modo single
trinity:~# init 2
Inicio por defecto
trinity:~# init 6
=
trinity:~# reboot
Reinicia el equipo
10
A la hora de cambiar a un nivel de ejecución determinado, podemos utilizar el comando init, seguido del número del nivel de ejecución al cual queremos cambiar. Esto quiere decir que si hacemos un init 0 por ejemplo, pasaremos al nivel 0 el cual apaga el equipo. Para ésta tarea igualmente tenemos el comando poweroff que realiza la misma tarea.
Si queremos pasar a modo single user, podemos utilizar init 1 para cambiar a éste modo, de esa forma se deshabilitarán los servicios de red y nos quedaremos con una terminal en modo texto para realizar las tareas convenientes para el mantenimiento y/o la corrección de errores o anomalías en nuestro sistema.
Además podemos cambiar a estado 6, el cual es en el encargado de reiniciar el equipo ejecutando de forma análoga init 6, para ésto además contamos con un comando reboot que realiza la misma tarea.
Clase 1: Niveles de Ejecución
Archivo de configuración del proceso /sbin/init
/sbin/init
/etc/inittab es el encargado de manejar su configuración
/etc/inittab
Este archivo básicamente:
●
Define cual es el nivel de ejecución por defecto (rc2
rc2 en Debian GNU/Linux)
●
Indica que script se ejecutará siempre en cualquier nivel de ejecución (rcS
rcS)
●
Indica en que lugar se van a encontrar los scripts para cada nivel de ejecución
●
Establece la configuración de terminales virtuales (como ya vimos)
●
Permite configurar puertos series para discado y logueo por modems.
11
inittab es un archivo de configuración ubicado en /etc/inittab y contiene información e información de configuración sobre el nivel de ejecución predeterminado y una lista de todos los niveles de ejecución (se incluye una ubicación de otro script para ser ejecutado cada vez que se ingresa a un nivel de ejecución ).
Contiene además información considerando que comando/s se tiene/n que ejecutar en el arranque inmediato, y si tienen que regenerarse (esto es usual para algunos programas al estilo getty que permiten que alguien inicie una sesión).
Una entrada del fichero inittab tiene el siguiente formato:
id:niveles_ejecución:acción:proceso
Las líneas que comienzan con `#' se ignoran.
id: es una secuencia única de 1 a 4 caracteres que identifican una entrada de inittab (para las versiones de sysvinit compiladas con bibliotecas < 5.2.18 o bibliotecas a.out el límite es de 2 caracteres).
niveles_ejecución: es la lista de niveles de ejecución para lo cuales se llevarán a cabo las acciones especificadas.
acción: describe qué acción se debería llevar a cabo. proceso: especifica el proceso a ejecutar. Si el campo proceso comienza con un carácter `+', init no registrará utmp y wtmp para ese proceso. Esto es necesario para gettys que insisten en hacer sus propias labores de utmp/wtmp. Esto es también un fallo histórico. El campo niveles_ejecución tiene que contener múltiples caracteres para diferente niveles de ejecución. Por ejemplo, 123 especifica que el proceso se debería iniciar en los niveles de ejecución 1, 2 y 3. Las entrada de niveles de ejecución bajo demanda pueden contener una A, B, o C. Las entradas de campos de nivel_ejecución de sysinit, boot y bootwait se ignoran.
Cuando se cambia un nivel de ejecución, cualesquiera procesos en ejecución que no estén especificados en el nuevo nivel de ejecución se matan, primero con SIGTERM y después con SIGKILL.
Algunas acciones válidas para el campo acción son:
respawn: El proceso se reiniciará cuando termine (v.g. getty). wait: El proceso se iniciará una vez cuando se entre en el nivel de ejecución específico e init esperará a su terminación.
once: El proceso se ejecutará una vez cuando se entre en el nivel de ejecución especificado. boot: El proceso se ejecutará durante el arranque del sistema. El campo The niveles_ejecución se ignora. Clase 1: Niveles de Ejecución
/etc/inittab
Runlevel por defecto
id:2:initdefault:
.......
.......
.......
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
.......
.......
.......
ca:12345:ctrlaltdel:/sbin/shutdown ­t1 ­a ­r now
Archivos de los Niveles de Ejecución
Acción a realizar
12
Vemos un ejemplo del archivo inittab en donde se especifica el nivel de ejecución 2 por defecto, además se establece en que directorio se van a encontrar los archivos correspondientes para cada nivel de ejecución y finalmente vemos que se define que acción se va a realizar cuando se presionan las teclas CRTL + ALT + SUPR, las cuales en este caso y por analogía con otros sistemas operativos, reinician el equipo.
Este archivo además define otras cosas, como la cantidad de terminales virtuales que tenemos en nuestro equipo y nos brinda la posiblidad de configurar lineas seriales para conectarnos por modem.
Clase 1: Niveles de Ejecución
Finalmente en todo sistema GNU/Linux se ejecutan 2 procesos más:
getty: abre un puerto tty (o terminal virtual), en el cual se puede ejecutar un proceso. En la getty
mayoría se las terminales se ejecuta el proceso login.
login: ofrece un prompt para que el usuario se loguee al sistema y abre una shell para que login
el mismo interactúe.
Init
Getty
Login
Shell
13
El término getty es probablemente una abreviatura de “get tty” (conseguir tty). Un programa getty abre un dispositivo serie, lo configura apropiadamente, configura opcionalmente un módem, y espera a que se realice una conexión. Una conexión activa en un dispositivo serie se indica normalmente mediante la patilla Data Carrier Detect (DCD) en el dispositivo serie que ha sido activado. Cuando se produce esta detección, el programa getty llama a un programa que muestra el punto indicativo login:, y es el que maneja realmente el ingreso al sistema. Cada uno de los terminales virtuales (por ejemplo, /dev/tty1) en GNU/Linux tiene un getty ejecutándose para él.
El inicio de sesiones desde terminales (a través de líneas serie) y la consola (cuando no se está ejecutando X­Windows) es suministrado por el programa getty. init inicia una instancia independiente de getty por cada terminal en el que está permitido iniciar sesiones. Getty lee el nombre de usuario y ejecuta el programa login, el cual se encarga de leer la password. Si el nombre de usuario y la password son correctas, login ejecuta el intérprete de comandos. Al finalizar el intérprete de comandos (en el caso en que, por ejemplo, el usuario finaliza su sesión; o cuando login finaliza debido a que no concuerdan el nombre de usuario y la password), init se entera de este suceso e inicia una nueva instancia de getty. El núcleo no tiene noción sobre los inicios de sesiones, esto es gestionado totalmente por los programas del sistema.
Clase 1: Niveles de Ejecución
Podemos resumir lo visto de la siguiente manera:
1) Se enciende la Computadora.
2) Se ejecuta el POST.
3) Se busca un dispositivo de booteo.
4) Se lee el primer sector del disco en memoria (los primeros 512 bytes ­ MBR).
5) Se selecciona un Sistema Operativo y se procede a la carga del mismo.
En el caso de GNU/Linux
1)
2)
3)
4)
5)
6)
7)
Se descomprime el núcleo y se carga en memoria.
Se inicializan los dispositivos de hardware
Se monta el sistema de archivos raíz (“/”)
Se ejecuta el demonio /sbin/init como proceso padre de todos los demás
Este se encarga de realizar configuraciones e iniciar servicios
Se inicia el proceso getty
Se ejecuta el proceso login
14
Reseña del arranque de un sistema Linux: 1. Power­on: El BIOS, un programa incorporado en el hardware de la computadora, es lo primero que se inicia cuando se enciende la computadora.Comprueba el tamaño de la memoria, ofrece cambiar su configuración, y entonces... intenta arrancar, o "butear" un sistema operativo. La mayoría de las computadoras buscan en una serie de dispositivos en una secuencia preestablecida, y ajustable por el usuario, y selecciona el primer dispositivo que se puede usar. 2. El registro principal de arranque (MBR): Lo que está haciendo realmente el BIOS es buscar un "registro de arranque principal", que es un registro especial de 512 bytes que contiene un programa muy pequeño. Este programa ubica e inicia el "cargador de arranque (boot loader)", el cual será responsable para cargar y arrancar algún sistema operativo. 3. El cargador de arranque: Hay dos cargadores de arranque disponible en Linux... LILO y GRUB. 4. El núcleo Linux se carga, y arranca: El cargador de arranque levanta una versión comprimida del núcleo Linux, la cual rápidamente descomprime e instala a sí misma en la parte superior de la memoria del sistema, donde permanecerá. 5. El INITRD. El problema que enfrentan quienes hacen distribuciones de Linux es que es imposible predecir exactamente qué dispositivos puede o no puede tener una computadora, y que soporte es necesario dentro del kernel para hacer que esos dispositivos arranquen. Los INITRDs proporcionan una solución: un pequeño grupo de programas que se ejecutarán cuando el kernel está "desnudo" en el arranque, con la oportunidad de hacer cosas tales como examinar el hardware del sistema y decidir exactamente que soporte del kernel se necesita. 6. Se inicia el programa init: Cuando el kernel está completamente inicializado, comienza y ejecuta solamente un programa: init. Este es el proceso nº 1, el único proceso que nunca morirá; que no se permite que muera. Este proceso hará alusión a /etc/inittab para decirle que hacer, y lo que hace inicialmente es ejecutar una serie de otros programas. 7. Los initscripts se ejecutan, de acuerdo al nivel de ejecución elegido: Si se examina /etc/inittab, se verá que consiste en su mayoría de especificaciones para ejecutar ciertos programas, al arranque del sistema, y en niveles de ejecución específicos. Los scripts encontrados en /etc/rc.d o /etc/rc.d/init.d serán ejecutados de acuerdo el nivel de ejecución. 8. Para iniciar sesiones gráficas, el subsistema que se inicia es el display manager. 9. Cuando un usuario se "loguea" en el sistema: lo que realmente pasa es que un proceso de shell de alguna clase se inicia, y todos los programas que ejecutan los usuarios durante sus sesiones son llevados a cabo o por la shell o bien por algún otro programa que los lanzan. Cuando los usuarios se "desloguean" e todas las shell y todos sus descendientes son finalizados. init se levanta e inicia un nuevo prompt para iniciar una sesión.
Clase 1: ¿Dudas? ¿Consultas?
Información de contacto
Vía Web:
http://www.gugler.com.ar
http://cursos.gugler.com.ar
Vía Mail:
[email protected]
[email protected]
[email protected]
[email protected]
15
Versión 1.0
No duden en comunicaste con nosotros por cualquier duda, consulta o sugerencia que deseen realizar. A la brevedad estaremos subiendo los contenidos de la próxima clase.
Administración GNU/Linux Nivel I
Currícula 1.0
Copyright® Gugler 2009