Title: Inicio Linux
1Inicio Linux
2Referencia
- RefReplacing init with Upstart By Scott James
Remnant http//www.linux.com/articles/57213 - Refhttp//upstart.ubuntu.com/
- http//upstart.ubuntu.com/getting-started.html
- http//www-128.ibm.com/developerworks/library/l-bo
ot-faster/index.html - http//www.europe.redhat.com/documentation/rhl9/rh
l-rg-es-9/ - https//wiki.ubuntu.com/ReplacementInit
3Booting
- El arranque se puede dividir en 3 pasos
- BIOS
- kernel boot
- System initialization
4BootingBios
- Cuando encendemos el ordenador, se ejecuta la
BIOS (Basic Input/output System) que se almacena
dispositivo flash en la placa madre - realiza el chequeo de los componentes
- localiza el dispositivo por el que arrancar el
sistema(Orden se cambia en la BIOS)? - carga en memoria la primera etapa de gestor de
arranque(GRUB, GRand Unified Bootloader) que esta
en el primer sector, llamado MBR (Master Boot
Record). - La primera etapa del GRUB localiza la segunda
etapa usando la tabla de particiones buscando la
partición activa y lo carga en memoria.
5Bootingkernel boot
- La segunda etapa de GRUB nos muestra los
diferentes S.O, una vez elegido en caso de linux
- Localiza el binario del kernel en la carpeta
/boot. - Carga la imagen comprimida del kernel en memoria
y monta la partición root como solo lectura - Carga en memoria la imagen de initrd (initial
ramdisk) que es usado por el kernel para cargar
los controladores que necesita para arrancar el
sistema (ext3,scsi,...)?
6Bootingkernel boot ?
- less /boot/grub/menu.lst (1ª parte)?
- Default0 Por defecto arranca el linux
- timeout10 Tiempo de espera antes de arrancar
- Hiddenmenu Esconde el menu
- title Ubuntu, kernel 2.6.10-5-386
- nos colocamos en la partición 1º disco 7º
partición, montándola(boot)? - root (hd0,6)?
- kernel /boot/vmlinuz-2.6.10-5-386
root/dev/hda13 ro quiet splash - initrd /boot/initrd.img-2.6.10-5-386
- guarda la última entrada como entrada por
defecto - savedefault
- arranca el SO de cadena
- boot
7Bootingkernel boot ?
- less /boot/grub/menu.lst (2ª parte)?
- title Windows 95/98/NT/2000
- root (hd0,0)?
- hace activa la partición donde estamos
situados - makeactive
- carga el primer sector de la partición activa
- chainloader 1
8BootingSystem Initialization
- El kernel transfiere el control del proceso de
arranque al proceso init. - Init es el padre de todos los procesos del
sistema y es el responsable de iniciar a el resto
de procesos. - Los procesos gestionados por init se llaman
jobs .Hay dos tipos Aquellos que son
supervisados y rearrancados en caso de que el
servicio se caiga y los que no se levantan ni
supervisan.
9BootingSystem Initialization
- Existen diferentes mecanismos de arranque/parada
de servicios y cómo el init los gestiona - a)El Sistema V Init (sysvinit) donde
/sbin/init lee de fichero de configuración
/etc/inittab, y arranca los servicios en modo
batch. - b)Upstart donde el init gestiona los servicios
basándose en eventos, el init maneja los
servicios definidos en la carpeta /etc/event.d
10BootingSystem InitializationSystem V Init
- El kernel transfiere el control del proceso de
arranque al programa /sbin/init - El programa /sbin/init
- Ejecuta el script /etc/inittab
- Ejecuta el script /etc/init.d/rcS
- Ejecuta el script /etc/rc (guión de
inicialización del sistema)? - Ejecuta las consolas virtualesgettys o
mingettys? - Ejecuta el script /etc/X11/prefdm (carga gestor
de pantalla preferido para X)?
11BootingSystem InitializationSystem V Init
- El formato /etc/inittab es idrunlevelsacciónpr
oceso - idsecuencia única de 1 a 4 caracteres
- Runlevels fedora 0 a 6 (0 halt,1 single,2
multiuser without NFS,3 full multiuser,4 unused,
5 X11 y 6 reboot)? - Runlevels ubuntu 0 a 6 (0 halt,1 single,2 a 5
multiuser y 6 reboot)?
12BootingSystem InitializationSystem V Init
- Formato /etc/inittab
- idrunlevelsacciónproceso
- AcciónProceso(Comando)?
- Respawn se reinicia cada vez que sea finalizado
- Wait se inicia y espera a su finalización
- Initdefault especifica el runlevel por defecto
- Powerwait se ejecuta cuando se va la
corriente(UPS), init espera la finalización del
proceso. - PowerfailIdem,pero no espera a finalizar
13BootingSystem InitializationSystem V Init
- Formato /etc/inittab
- AcciónProceso
- Powerokwait Se ejecuta cuando se detecta que la
corriente ha vuelto - Powerfailnow Se ejecuta cuando init es
notificado de que la batería UPS(Uninterrupted
Power System) esta agotada - Ctraltdel Se ejecuta al presionar CTRLALTDEL
- ...
14BootingSystem InitializationSystem V Init
- Formato /etc/inittab
- RunlevelsModo de inicio por defecto Fedora
- 0 Halt
- 1 Modo Monousuario
- 2 Modo Multiusuario sin NFS(Igual que 3,sin Red)?
- 3 Modo Multiusuario completo sin X
- 4 Sin uso
- 5 X
- 6 Reinicio
- id5initdefault
15BootingSystem InitializationSystem V Init
- Formato /etc/inittab
- RunlevelsModo de inicio por defecto Ubuntu
- 0 Halt (detiene la ejecución del equipo)?
- 1 Modo Monousuario (tareas administrativas)?
- 2-5 Modo Multiusuario( 2 por defecto)?
- 6 Reinicio
- id2initdefault
16BootingSystem InitializationSystem V Init
- Como cambiar de modo de arranque?
- /etc/inittab -gt id5initdefault
- /sbin/init 0123456
- /sbin/telinit 0123456
- Lilo Booting boot linux single
- Grub Booting
- Elegir Redhat Linux
- Pulsar e (de edit)?
- Escribir single o 1
- Pulsar b (de boot)?
- Disquete de arranque linux 1
17BootingSystem InitializationSystem V Init
- Durante un arranque normal init ejecutará primero
los procesos del nivel S(/etc/init.d/rcS)? - Aquí es donde se comprueban y montan los sistemas
de ficheros - se ajusta el reloj según la CMOS
- se habilita el intercambio de espacios
- se ajusta el nombre del host
- establece la ruta a otros programa
- etc...
18BootingSystem InitializationSystem V Init
- Para ver cuales son los procesos del nivel S (ls
/etc/rcS.d)? - README
- S50hwclock.sh
- S01mountkernfs.sh
- S35mountall.sh
- S02hostname.sh
- ...
19BootingSystem InitializationSystem V Init
- Durante un arranque normal init ejecutará primero
los procesos del nivel S(/etc/init.d/rcS) y más
concretamente S35mountall.sh encontramos el
comando mount -a que se encarga de montar todas
la líneas de /etc/fstab con auto o defaults en la
columna 4 - sistema de archivopunto de montajetipo del
sistema de archivosopcionesvolcadoorden de
chequeo - /dev/hda3 / ext3 defaults 1 1
- /dev/hda10 swap
swap defaults 0 0 - /dev/hda5 /dos
vfat defaults,users,umask0 0 0 - /dev/hda7 /media/dell vfat defaults,utf8,umask00
7,uid1000,gid1000 0 0
20BootingSystem InitializationSystem V Init
- En función del nivel de ejecución especificado se
arrancan los servicios /etc/rcrunlevel.d/S
l00wait/etc/init.d/rc 0 l11wait/etc/init.d/r
c 1 l22wait/etc/init.d/rc 2 ... l66wait/etc/
init.d/rc 6
21BootingSystem InitializationSystem V Init
- En rc si rc 2
- /etc/rc2.d/S Carga todos los servicios definidos
para el nivel de ejecución 2 - Ejm
- init para (stop) todos los sercicios cuyo
enlace simbólico - empiece por K y a continuación start todos
los enlaces - simbólicos S.
- S55sshd -gt /etc/init.d/sshd
- K15apache2 -gt /etc/init.d/apache2
- /etc/init.d/apache2 stop
- /etc/init.d/apache2 start
22BootingSystem InitializationSystem V Init
- arranca por defecto en runlevel 2 en modo
multiusuario sin/con X - id2initdefault
- arranca servicios básicos /etc/rcS.d/S??
- sisysinit/etc/init.d/rcS
- arranca los servicios /etc/rcrunlevel.d/S
- l00wait/etc/rc.d/rc 0
- l11wait/etc/rc.d/rc 1
- l22wait/etc/rc.d/rc 2
- ...
- l66wait/etc/rc.d/rc 6
23BootingSystem InitializationSystem V Init?
- bifurca los procesos /sbin/getty para cada
consola virtual. Los niveles de ejecución del 2
al 5 obtienen todas las seis consolas virtuales, - 12345respawn/sbin/getty 38400 tty1
- 223respawn/sbin/getty 38400 tty2
- 323respawn/sbin/getty 38400 tty3
- 423respawn/sbin/getty 38400 tty4
- 523respawn/sbin/getty 38400 tty5
- 623respawn/sbin/getty 38400 tty6
24BootingSystem InitializationSystem V Init?
- En el nivel de ejecución 2 debe arrancar el nivel
gráfico, gdm es administrador de vistas que será
ejecutado por defecto en los niveles 2,3,4 y 5 en
GNOME. El script es /etc/rc2.d/S13gdm .Para ver
cuales son los procesos del nivel 2 (ls
/etc/rc2.d)? - ...
- S13gdm
- ...
25BootingSystem InitializationSystem V Init?
- El programa init también ejecuta es el archivo
/etc/rc.local? - El script /etc/rc.local lo ejecuta el comando
init en tiempo de arranque, o cuando se cambie de
niveles de ejecución. El agregar comandos a este
script es una forma fácil de realizar tareas
necesarias como arrancar servicios especiales o
inicializar dispositivos sin tener que escribir
scripts complejos de inicialización en el
directorio /etc/init.d/ y creando los enlaces
simbólicos. (personalización del sistema)? - Ejm Incluir el arranque de Tomcat
- CATALINA_HOME/bin/startup.sh
26BootingSystem InitializationSystem V Init?
- Secuencia de procesos que lanza el kernel.
- Terminal
- Init-gtgetty-gtlogin-gtshell
- Gráfico
- Init-gtkdm,gdm,xdm-gtlogin-gtX11,KDE o GNOME
27BootingSystem InitializationSystem V Init?
- Una sesión iniciada desde una consola virtual o
desde una conexión remota (via telnet, rsh o ssh)
es atendida inicialmente por el programa getty - Cuando un usuario teclea su login, getty pasa el
control al programa login que verifica el usuario
y passwd, y si todo es correcto inicializa
algunas variables de ambiente y arranca el
inteprete de comandos que esta en el /etc/passwd
que normalmente es el bash
28BootingSystem InitializationDe Sysvinit a
Upstart
- Ubuntu 6.10 and later
- Fedora 9 and later
- Debian experimental
29BootingSystem InitializationDe Sysvinit a
Upstart
- El kernel soporta la conexión y desconexión de
hardware, el incremento de hardware movible hace
imposible garantizar qué dispositivos van estar
disponibles en el momento de arranque del
sistema. - Ejm No queremos que s.o intente montar los
discos USB de /etc/fstab , en caso de no estar
presentes. - Ejm Hay servicios que se caen, y queremos que se
arranquen automáticamente, para evitar la pérdida
de servicio. - Ejm Cuando enchufo la iPod, tengo que arrancar
manualmente el software, y cuando lo desconecto
pararlo manualmente. -
30BootingSystem InitializationDe Sysvinit a
Upstart
- Ejm Con sysvinit no podemos saber que servicios
han fallado en el arranque, y cuales están
corriendo actualmente. - Ejm En caso de necesitar rearrancar
frecuentemente la máquina, necesitamos que
arranque lo más rápido posible. La ejecución
lineal falla, ya que necesita dormir y esperar
durante el proceso, a que el hardware este
disponible y el modelo basado en dependencias
falla porque intenta arrancar un servicio y
posteriormente sus dependencias, sin arrancar
primero las dependencias y en función de si se
arrancan estas, arrancar el principal. - Etc....
-
31BootingSystem InitializationUpstart
- Upstart es un nuevo init basado en evento, donde
los servicios son arrancados o parados porque
ocurre un evento para el cual están preparados o
escuchando. Ejm El evento que causa que se monte
una partición (/) puede ser la detección de un
dispositivo de bloque (/dev/hda3)? - Este nuevo sustituto de sysvinit, esta siendo
desarrollado dentro de Ubuntu por Scott James
Remnant, pero esta pensado para cualquier
distribución. - Requiere que cambies los scripts de
inicialización para soportar el modo basado en
evento.
32BootingSystem InitializationCómo
funciona?Upstart
- Los eventos serán generados por
- a) Arraque o parada del sistema startup o
shutdown - b) Cuando un job cambia de estado (job ha
terminado, ...)? - c) Otros eventos que serán recibidos de otras
partes del sistema (HW de red, dispositivos de
bloque ...)?
33BootingSystem InitializationUpstart
- Upstart tiene su propio init, que trabaja con
diferentes tipos de eventos eventos frontera,
eventos de nivel y eventos temporales - Eventos Frontera o Simple
- -Cuando se enciende la máquina el init emite
la señal startup - -Cuando se apaga la máquina el init emite la
señal shutdown - -También existen otros eventos
ctraltdel,...? - Ejm less /etc/event.d/rcS
- start on startup
34BootingSystem InitializationUpstart
- Eventos de Nivel
- Son eventos frontera, excepto que tienen asociado
un valor cadena del tipo up , down. - Ejm start when default-route is up, stop when
default-route is down, while default-route is
up donde default-route esta activo o up si el
router por defecto esta encendido.
35BootingSystem InitializationUpstart
- Eventos Temporales
- Son utilizados para llevar a cabo tareas cada
cierto tiempo. - Ejm "15 minutes after startup", "daily", "at
half past two", etc.
36BootingSystem InitializationUpstart
- Todos los trabajos (jobs) están esperando a un
evento en particular, que normalmente es el
mismo para muchos de ellos (Ejmstartup ó
shutdown). Esto puede no ser deseable en todos
los casos, especialmente, en la secuencia de
arranque de ciertas operaciones (red-gtapache2).
Este orden se puede establecer si un trabajo
provoca a su vez eventos de cuando empieza o
termina. - Ejemplos de ficheros que actuan en orden según
los eventos - rcSstart on startup
- rc-defaultstart on stopped rcS
37BootingSystem InitializationUpstart
- Sintácticamente Acción Evento
- Acción Start , Stop (job)?
- Evento"on event", "when event is value" or
"while event is value" donde event startup,
shutdown, ... y donde value up, down - Ejm
- start on startup
- stop when default-route is down
- start while default-route is up
38BootingSystem InitializationCómo
funciona?Upstart
- El demonio init comienza con un simple evento
startup y todo lo demás se arranca como una
secuencia de eventos. No necesita de objetivos o
runlevels, ya que el sistema arrancará tan lejos
como el HW disponible se lo permita. - Ejm La Red siempre se arrancará, si el HW de
red(modem, router ...) esta disponible, asumiendo
que la configuración por defecto será DHCP. Si
después de arrancar conectamos la red, en pocos
minutos tendremos conexión,y se irán arrancando
automáticamente otros servicios como apache,
sendmail ...
39BootingSystem InitializationCómo
funciona?Upstart
- Ejm Los sistemas de ficheros que están en
/etc/fstab serán chequeados y montados cuando el
kernel detecte los dispositivos de bloque. Y
cuando detecta el HW de red y obtiene una IP,
intenta montar los sistemas de ficheros remotos. - Con este sistema los scripts pueden generar por
si mismos otros eventos, que a su vez arrancan a
otros scripts o demonios, pudiendo ejecutarse en
paralelo (modo asíncrono)?
40BootingSystem InitializationCómo
funciona?Upstart
- Cada fichero en /etc/event.d describe un job
que debería ser gestionado. - Incluye que binarios o scripts deben de ser
ejecutados para que el job este ejecutándose. - Incluye los eventos que causan que el job sea
arrancado o parado. - El objetivo de este proyecto es obtener un
sistema configurable de manera sencilla. Cada uno
tiene que configurar los jobs que serán
arrancados al iniciar el sistema, cada hora,
cuando la red se active, cuando AC se active, al
apagar el sistema, etc...
41BootingSystem InitializationUpstart
- Los scripts para upstart trabajan parecido a los
tradicionales ficheros rc. Exceptuando que ahora
operan de manera autónoma basado en eventos
asíncronos. El script sysvinit rc 2 quedaría
start on runlevel 2 stop on runlevel !2 console
output script set (runlevel --set 2
true)? if "1" ! "unknown" then
PREVLEVEL1 RUNLEVEL2 export
PREVLEVEL RUNLEVEL fi exec /etc/init.d/rc 2 end
script
42BootingSystem InitializationUpstart
- La utilidad initctl ofrece una funcionalidad
similar a telinit o init, es decir, es la
utilidad que controla al demonio init, pero con
características adicionales, como
man initctl initctl start job_name(tty1)? initctl
stop job_name(tty1)? initctl status
job_name(tty1)? initctl list PATTERN initctl
emit EVENT
43BootingSystem InitializationVentajas Upstart
- El arranque irá lo lejos que el HW disponible se
lo permita, el HW no disponible no activa los
jobs que necesitaría. - Soporta hot-plugging. EjmCuando conectas una
tarjeta de red después de que el sistema ha
arrancado, se generaría el evento
network-interface-added. Y automáticamente se
activarán otros jobs que dependen de este.
(Apache o sendmail). - Los scripts operan de manera autónoma basado en
eventos asíncronos, acelerando el arranque del
sistema.
44BootingSystem InitializationVentajas Upstart
- Por compatibilidad
- Se mantienen los scripts /etc/init.d/rc
- También se mantienen los runlevels, pudiendo usar
el comando init 3 que generará el evento adecuado
para la ejecución de /etc/init.d/rc 3