1 / 58

Inicio Linux

Inicio Linux. Ubuntu Kepa Bengoetxea. Referencia:. Ref:Replacing init with Upstart By Scott James Remnant: http://www.linux.com/articles/57213 Ref: http://upstart.ubuntu.com/ http://upstart.ubuntu.com/getting-started.html

kaoru
Télécharger la présentation

Inicio Linux

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Inicio Linux Ubuntu Kepa Bengoetxea

  2. Referencia: • Ref:Replacing init with Upstart By Scott James Remnant: http://www.linux.com/articles/57213 • Ref:http://upstart.ubuntu.com/ • http://upstart.ubuntu.com/getting-started.html • http://www-128.ibm.com/developerworks/library/l-boot-faster/index.html • http://www.europe.redhat.com/documentation/rhl9/rhl-rg-es-9/ • https://wiki.ubuntu.com/ReplacementInit # Modificando Upstart para elegir un nivel. http://www.xinug.org/drupal/upstart-runlevel-boot-time # Runlevel on Wikipedia. http://en.wikipedia.org/wiki/Runlevel

  3. Booting • El arranque se puede dividir en 3 pasos: • BIOS • kernel boot • System initialization

  4. Booting:Bios • Cuando encendemos el ordenador, se ejecuta la BIOS (Basic Input/Output System) que se almacena un 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 del 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.

  5. Booting:kernel 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,...)‏

  6. Booting: kernel boot. Ubuntu 8.04 less /boot/grub/menu.lst (1ª parte)‏ Default=0 #Por defecto arranca el linux timeout=10 #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 #root=UUID=dda38e2b-9a90-4085-88ea-6cbxxx7e9fx #guarda la última entrada como entrada por defecto savedefault #arranca el SO de cadena boot

  7. Booting: kernel boot. Ubuntu 8.04 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

  8. Booting: kernel boot. Ubuntu 10.04 less /boot/grub/grub.cfg (grub2) #DO NOT EDIT THIS FILE It is automatically generated by /usr/sbin/grub-mkconfig using templates from /etc/grub.d and settings from /etc/default/grub ### BEGIN /etc/grub.d/10_linux ### menuentry 'Ubuntu, con Linux 2.6.32-25-generic' --class ubuntu --class gnu-linux --class gnu --class os { recordfail insmod ext2 set root='(hd0,2)' search --no-floppy --fs-uuid --set fc66f417-5e19-44e5-95b9-910726faee37 linux /boot/vmlinuz-2.6.32-25-generic root=UUID=fc66f417-5e19-44e5-95b9-910726faee37 ro quiet splash initrd /boot/initrd.img-2.6.32-25-generic }

  9. Booting: kernel boot. Ubuntu 10.04 $sudo gedit /etc/default/grub y una vez modificado “sudo update-grub2”, para actualizar la configuración del GRUB y generar un nuevo /boot/grub/grub.cfg. #GRUB_DEFAULT= 0/saved/1/n (primera entrada/última entrada seleccionada/segunda entrada/entrada n+1) GRUB_DEFAULT=0 #tiempo de espera del grub GRUB_TIMEOUT=10 #Descomenta para ocultar el grub #GRUB_HIDDEN_TIMEOUT=0 #si está a "true" oculta la cuenta atrás, mientras que si está a "false" muestra la cuenta atrás. GRUB_HIDDEN_TIMEOUT_QUIET=true #determina el nombre de la entrada del menú. GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` #quiet sirve para agrupar las entradas iguales, mientras que splash sirve para que nos muestre la imagen de carga en vez de los mensajes del kernel, y text arrancar en modo texto GRUB_CMDLINE_LINUX_DEFAULT="quiet splash text" GRUB_CMDLINE_LINUX="" # Uncomment to disable graphical terminal (grub-pc only) #GRUB_TERMINAL=console # The resolution used on graphical terminal #GRUB_GFXMODE=640x480 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux #GRUB_DISABLE_LINUX_UUID=true # Uncomment to disable generation of recovery mode menu entries #GRUB_DISABLE_LINUX_RECOVERY="true" # Uncomment to get a beep at grub start #GRUB_INIT_TUNE="480 440 1"

  10. Booting:System 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 ejecutar el resto de los procesos del espacio de usuario e iniciar el sistema al resto de procesos. • El proceso init y sus scripts por ejemplo: -cargan módulos del kernel -montan el sistema de ficheros -configuran la red -ejecutan los servicios o servidores ... -ejecutan el programa de login en modo gráfico

  11. Proceso de Inicio de Linux

  12. Booting:System Initialization • 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. • 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 ( a partir de Ubuntu 10.04 en /etc/init)

  13. Booting:System Initialization:System V Init # Level to run in id:2:initdefault: # Boot-time system configuration/initialization si::sysinit:/etc/init.d/rcS # /etc/init.d executes the S and K scripts upon change of runlevel. Runlevel 0 is halt. Runlevel 1 is single-user. Runlevels 2-5 are multi-user. Runlevel 6 is reboot. 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 # What to do at the "3 finger salute". ca::ctrlaltdel:/sbin/shutdown -t1 -h now # Runlevel 2,3: getty on virtual consoles # Runlevel 3: getty on terminal (ttyS0) and modem (ttyS1) 1:23:respawn:/sbin/getty tty1 VC linux 2:23:respawn:/sbin/getty tty2 VC linux 3:23:respawn:/sbin/getty tty3 VC linux 4:23:respawn:/sbin/getty tty4 VC linux .... • El kernel transfiere el control del proceso de arranque al programa /sbin/init. El programa /sbin/init ejecuta el script /etc/inittab, que contiene:

  14. Booting:System Initialization:System V Init El formato /etc/inittab es: id:runlevels:acción:proceso id:secuencia única de 1 a 4 caracteres runlevels en: • fedora: 0 a 6 (0 halt,1 single,2 multiuser without NFS,3 full multiuser,4 unused, 5 X11 y 6 reboot)‏ • Ubuntu: 0 a 6 (0 halt,1 single,2 a 5 multiuser y 6 reboot)‏

  15. Booting:System Initialization:System V Init Formato /etc/inittab:id:runlevels:acción:proceso • acción:proceso(Comando)‏ • Respawn :reinicia el proceso cada vez que sea finalizado • Wait: inicia proceso 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. • Powerfail:Idem, pero no espera a finalizar el proceso

  16. Booting:System Initialization:System V Init Formato /etc/inittab: id:runlevels:acción:proceso • acción:proceso • 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 CTRL+ALT+DEL • ...

  17. Booting:System Initialization:System V Init # Level to run in id:2:initdefault: # Boot-time system configuration/initialization si::sysinit:/etc/init.d/rcS # /etc/init.d executes the S and K scripts upon change of runlevel. Runlevel 0 is halt. Runlevel 1 is single-user. Runlevels 2-5 are multi-user. Runlevel 6 is reboot. 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 # What to do at the "3 finger salute". ca::ctrlaltdel:/sbin/shutdown -t1 -h now # Runlevel 2,3: getty on virtual consoles # Runlevel 3: getty on terminal (ttyS0) and modem (ttyS1) 1:23:respawn:/sbin/getty tty1 VC linux 2:23:respawn:/sbin/getty tty2 VC linux 3:23:respawn:/sbin/getty tty3 VC linux 4:23:respawn:/sbin/getty tty4 VC linux .... • El kernel transfiere el control del proceso de arranque al programa /sbin/init. El programa /sbin/init ejecuta el script /etc/inittab, que contiene:

  18. Booting:System Initialization:System V Init Formato /etc/inittab: • Runlevels:Modo 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 id:5:initdefault:

  19. Booting:System Initialization:System V Init Formato /etc/inittab: • Runlevels:Modo 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 id:2:initdefault:

  20. Booting:System Initialization:System V Init ¿Como cambiar de modo de arranque? • /etc/inittab -> id:5:initdefault: • /sbin/init [0123456] • /sbin/telinit [0123456] • Lilo Booting: boot: linux single • Grub Booting: • Elegir Ubuntu Linux • Pulsar [e] (de edit)‏ • Escribir single o 1 • Pulsar [b] (de boot)‏ • Disquete de arranque: linux 1

  21. Booting:System Initialization:System V Init # Level to run in id:2:initdefault: # Boot-time system configuration/initialization si::sysinit:/etc/init.d/rcS # /etc/init.d executes the S and K scripts upon change of runlevel. Runlevel 0 is halt. Runlevel 1 is single-user. Runlevels 2-5 are multi-user. Runlevel 6 is reboot. 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 # What to do at the "3 finger salute". ca::ctrlaltdel:/sbin/shutdown -t1 -h now # Runlevel 2,3: getty on virtual consoles # Runlevel 3: getty on terminal (ttyS0) and modem (ttyS1) 1:23:respawn:/sbin/getty tty1 VC linux 2:23:respawn:/sbin/getty tty2 VC linux 3:23:respawn:/sbin/getty tty3 VC linux 4:23:respawn:/sbin/getty tty4 VC linux .... • El kernel transfiere el control del proceso de arranque al programa /sbin/init. El programa /sbin/init ejecuta el script /etc/inittab, que contiene:

  22. Booting:System Initialization:System 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 de sistema (linux) según el reloj hardware interno del ordenador. • se habilita el intercambio de espacios (swap) • se ajusta el nombre del host • establece la ruta a otros programas • etc...

  23. Booting:System Initialization:System V Init Para ver cuales son los procesos del nivel S (ls /etc/rcS.d)‏ README S50hwclock.sh S01mountkernfs.sh S35mountall.sh S02hostname.sh ...

  24. Booting:System Initialization:System 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 archivo:punto de montaje:tipo del sistema de #archivos:opciones:volcado:orden de chequeo /dev/hda3 / ext3 defaults 1 1 /dev/hda10 swap swap defaults 0 0 /dev/hda5 /dos vfat defaults,users,umask=0 0 0 /dev/hda7 /media/dell vfat defaults,utf8,umask=007,uid=1000,gid=1000 0 0

  25. Booting:System Initialization:System V Init # Level to run in id:2:initdefault: # Boot-time system configuration/initialization si::sysinit:/etc/init.d/rcS # /etc/init.d executes the S and K scripts upon change of runlevel. Runlevel 0 is halt. Runlevel 1 is single-user. Runlevels 2-5 are multi-user. Runlevel 6 is reboot. 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 # What to do at the "3 finger salute". ca::ctrlaltdel:/sbin/shutdown -t1 -h now # Runlevel 2,3: getty on virtual consoles # Runlevel 3: getty on terminal (ttyS0) and modem (ttyS1) 1:23:respawn:/sbin/getty tty1 VC linux 2:23:respawn:/sbin/getty tty2 VC linux 3:23:respawn:/sbin/getty tty3 VC linux 4:23:respawn:/sbin/getty tty4 VC linux .... • El kernel transfiere el control del proceso de arranque al programa /sbin/init. El programa /sbin/init ejecuta el script /etc/inittab, que contiene:

  26. Booting:System Initialization:System V Init En función del nivel de ejecución (runlevel) especificado por parámetro al script “/etc/init.d/rc” se pararán los servicios que empiezan por K en la carpeta /etc/rc$runlevel.d/K* y se arrancarán los servicios que empiezan por S en la carpeta /etc/rc$runlevel.d/S* l0:0:wait:/etc/init.d/rc 0 l1:1:wait:/etc/init.d/rc 1 l2:2:wait:/etc/init.d/rc 2 ... l6:6:wait:/etc/init.d/rc 6

  27. Booting:System Initialization:System V Init Por ejemplo si le paso el parámetro de runlevel 2 al script /etc/init.d/rc: for i in `ls /etc/rc$runlevel.d/K$level*` ;do $i stop done for i in `ls /etc/rc$runlevel.d/S$level*` ;do $i start done Si hacemos un ls -lias /etc/rc2.d S50cups -> /etc/init.d/cups K15apache2 -> /etc/init.d/apache2 /etc/init.d/cups start /etc/init.d/apache2 stop

  28. Booting:System Initialization:System V Init less /etc/init.d/cups case "$1" in start) start-stop-daemon --start --quiet --oknodo --pidfile "$PIDFILE" --exec /usr/sbin/cupsd;; stop) start-stop-daemon --stop --quiet --retry 5 --oknodo --pidfile $PIDFILE --name $NAME && success=1;; restart) start-stop-daemon --stop --quiet --retry 5 --oknodo --pidfile $PIDFILE --name $NAME && success=1 start-stop-daemon --start --quiet --oknodo --pidfile "$PIDFILE" --exec /usr/sbin/cupsd;; status) echo -n "Status of $DESC: " if [ ! -r "$PIDFILE" ]; then echo "$NAME is not running." ; exit 3 fi if read pid < "$PIDFILE" && ps -p "$pid" > /dev/null 2>&1; then echo "$NAME is running." ; exit 0 else echo "$NAME is not running but $PIDFILE exists." ; exit 1 fi ;; *) N=/etc/init.d/${0##*/} echo "Usage: $N {start|stop|restart|force-reload|status}" >&2 exit 1 ;; esac

  29. Booting:System Initialization:System V Init # Level to run in id:2:initdefault: # Boot-time system configuration/initialization si::sysinit:/etc/init.d/rcS # /etc/init.d executes the S and K scripts upon change of runlevel. Runlevel 0 is halt. Runlevel 1 is single-user. Runlevels 2-5 are multi-user. Runlevel 6 is reboot. 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 # What to do at the "3 finger salute". ca::ctrlaltdel:/sbin/shutdown -t1 -h now # Runlevel 2,3: getty on virtual consoles # Runlevel 3: getty on terminal (ttyS0) and modem (ttyS1) 1:23:respawn:/sbin/getty tty1 VC linux 2:23:respawn:/sbin/getty tty2 VC linux 3:23:respawn:/sbin/getty tty3 VC linux 4:23:respawn:/sbin/getty tty4 VC linux .... • El kernel transfiere el control del proceso de arranque al programa /sbin/init. El programa /sbin/init ejecuta el script /etc/inittab, que contiene:

  30. Booting:System Initialization:System V Init‏ • # bifurca los procesos /sbin/getty para cada consola virtual. Los niveles de ejecución del 2 y 3 obtienen todas las siguientes consolas virtuales: 1:23:respawn:/sbin/getty tty1 VC linux 2:23:respawn:/sbin/getty tty2 VC linux 3:23:respawn:/sbin/getty tty3 VC linux 4:23:respawn:/sbin/getty tty4 VC linux ....

  31. Booting:System Initialization:System V Init‏ En el nivel de ejecución 2 debe arrancar el nivel gráfico, gdm es administrador de vistas en GNOME que será ejecutado por defecto en los niveles 2,3,4 y 5 en Ubuntu. El script es: /etc/rc2.d/S30gdm(Ubuntu 8.04).Para ver cuales son los procesos del nivel 2 (ls /etc/rc2.d)‏ ... S30gdm … S99rc.local

  32. Booting:System Initialization:System V Init‏ El script /etc/rc2.d/S99rc.local ejecuta el archivo /etc/rc.local‏ en tiempo de arranque, o cuando se cambie de nivel 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 en /etc/rc.local $CATALINA_HOME/bin/startup.sh

  33. Booting:System Initialization:System V Init‏ $less /etc/rc2.d/S99rc.local do_start() { if [ -x /etc/rc.local ]; then log_begin_msg "Running local boot scripts (/etc/rc.local)" /etc/rc.local log_end_msg $? fi} case "$1" in start) do_start ;; restart|reload|force-reload) echo "Error: argument '$1' not supported" >&2 exit 3 ;; stop) ;; *) echo "Usage: $0 start|stop" >&2 exit 3;; esac

  34. Booting:System Initialization:System V Init‏ Secuencia de procesos que lanza el kernel. Terminal: Init->getty->login->shell Gráfico: Init->kdm,gdm,xdm->login->X11,KDE o GNOME

  35. Booting:System Initialization:System 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

  36. Booting:System Initialization:De Sysvinit a Upstart • El arranque SysV es un proceso síncrono, donde cada servicio se arranca de manera secuencial en el tiempo (modo batch) • El número de servicios que se arranca al inicio en segundo plano ha crecido a lo largo de los años y esto ha hecho que el proceso init ralentice el arranque del sistema. Además el uso de Linux en PC de escritorio demanda una configuración dinámica del sistema. • El sistema Upstart llegó en el 2006 de la mano de Ubuntu, se ha implantado parcialmente desde Ubuntu 6.10 y Fedora 9. Aunque no ha cogido un rol importante hasta Fedora 12 o Ubuntu 10.04. Sino que todavía mantienen un montón de funcionalidades basados en los scripts de System V Init.

  37. Booting:System Initialization:De Sysvinit a Upstart. Razones para el cambio: • 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. • No queremos que S.O intente montar los discos USB de /etc/fstab , en caso de no estar presentes. • Hay servicios que se caen, y queremos que se arranquen automáticamente, para evitar la pérdida de servicio. • Cuando enchufo la iPod, tengo que arrancar manualmente el software, y cuando lo desconecto pararlo manualmente.

  38. Booting:System Initialization:De Sysvinit a Upstart.Razones para el cambio: • Con sysvinit no podemos saber que servicios han fallado en el arranque, y cuales están corriendo actualmente. • 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....

  39. Booting:System Initialization:Upstart • 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.

  40. Booting:System Initialization:¿Có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 ...)‏

  41. Booting:System Initialization:Upstart 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

  42. Booting:System Initialization:Upstart • Eventos de Nivel: • Son eventos 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.

  43. Booting:System Initialization:Upstart • Eventos Temporales: • Son utilizados para llevar a cabo tareas cada cierto tiempo. • Ejm: "15 minutes after startup", "daily", "at half past two", etc.

  44. Booting:System Initialization:Upstart Todos los trabajos (jobs) están esperando a un evento en particular, que normalmente es el mismo para muchos de ellos (Ejm:startup ó shutdown). Esto puede no ser deseable en todos los casos, especialmente, en la secuencia de arranque de ciertas operaciones (red->apache2). 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 rcS:start on startup rc-default:start on stopped rcS

  45. Booting:System Initialization:Upstart • Sintácticamente: Acción + Evento • Acción: Start , Stop (job)‏ • Evento:"on event", "when event is value" or "while event is value" donde event:default-route, startup, shutdown, ... y donde value: up, down Ejm: start on startup stop when default-route is down start while default-route is up

  46. Booting:System Initialization:¿Có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 ...

  47. Booting:System Initialization:¿Có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)‏

  48. Booting:System Initialization:¿Cómo funciona?Upstart • Cada fichero en /etc/event.d (/etc/init/*.conf en ubuntu 10.04) describe un “job” que debería ser gestionado. • Incluye los binarios o scripts que 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...

  49. Booting:System Initialization:Upstart. Job Files • En el ejemplo, el job hostname se ejecuta cuando upstart detecta el evento “startup”: • $cat /etc/init/hostname.conf (Ubuntu en 10.04) # hostname - set system hostname # This task is run on startup to set the system hostname from /etc/hostname, # falling back to "localhost" if that file is not readable or is empty and # no hostname has yet been set. description "set system hostname" start on startup task exec hostname -b -F /etc/hostname

  50. Booting:System Initialization:Upstart. Job Files • Upstart también puede trabajar con runlevels. • $cat /etc/event.d/rc2 (/etc/init/rc.conf en 10.04) # rc2 - runlevel 2 compatibility. This task runs the old sysv-rc runlevel 2 ("multi-user") scripts. It # is usually started by the telinit compatibility wrapper. start on runlevel 2 stop on runlevel [!2] console output script set $(runlevel --set 2 || true) if [ "$1" != "unknown" ]; then PREVLEVEL=$1 RUNLEVEL=$2 export PREVLEVEL RUNLEVEL fi exec /etc/init.d/rc 2 end script

More Related