Inicio Linux
Ubuntu
Kepa Bengoetxea
1
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
1
Booting
•
•
•
•
El arranque se puede
dividir en 3 pasos:
BIOS
kernel boot
System initialization
1
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.
1
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,...)
–
–
1
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
1
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
1
Booting: kernel boot. Ubuntu
10.04
less /boot/grub/grub.cfg (grub2)
#DO NOT EDIT THIS FILE It is automatically generated by /usr/sbin/grubmkconfig 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-44e595b9-910726faee37 ro quiet splash
initrd /boot/initrd.img-2.6.32-25-generic
}
1
Booting: kernel boot. Ubuntu
$sudo gedit /etc/default/grub y una10.04
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`
1
#quiet sirve para agrupar las entradas iguales, mientras que splash sirve para
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
...
1
Proceso de Inicio de Linux
1
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
1
/etc/event.d ( a partir de Ubuntu 10.04 en /etc/init)
Booting:System Initialization:System V
Init
•
El kernel transfiere el control del proceso de arranque al programa
/sbin/init. El programa /sbin/init ejecuta el script /etc/inittab, que contiene:
# 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
# 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
....
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
1
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)
1
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
1
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
...
–
–
–
–
1
Booting:System Initialization:System V
Init
•
El kernel transfiere el control del proceso de arranque al programa
/sbin/init. El programa /sbin/init ejecuta el script /etc/inittab, que contiene:
# 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
# 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
....
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
1
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
5X
6 Reinicio
id:5:initdefault:
•
1
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:
•
1
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
•
1
Booting:System Initialization:System V
Init
•
El kernel transfiere el control del proceso de arranque al programa
/sbin/init. El programa /sbin/init ejecuta el script /etc/inittab, que contiene:
# 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
# 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
....
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
1
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...
1
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
...
1
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
/
/dev/hda10
swap
/dev/hda5
/dos
ext3
defaults
swap
vfat
11
defaults
00
defaults,users,umask=0
00
/dev/hda7 /media/dell vfat defaults,utf8,umask=007,uid=1000,gid=1000 0 0
1
Booting:System Initialization:System V
Init
•
El kernel transfiere el control del proceso de arranque al programa
/sbin/init. El programa /sbin/init ejecuta el script /etc/inittab, que contiene:
# 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
# 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
....
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
1
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
1
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
1
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
1
Booting:System Initialization:System V
Init
•
El kernel transfiere el control del proceso de arranque al programa
/sbin/init. El programa /sbin/init ejecuta el script /etc/inittab, que contiene:
# 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
# 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
....
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
1
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
1
4:23:respawn:/sbin/getty tty4 VC linux
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
1
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
1
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 ;;
1
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
1
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
1
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 1
funcionalidades basados en los scripts de System V Init.
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.
1
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....
1
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.
1
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 ...)
1
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
1
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 defaultroute esta activo o up si el router por defecto esta
encendido.
1
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.
1
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
1
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
•
1
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 ...
1
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)
1
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...
1
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
1
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
1
Booting:System Initialization:Upstart. Job
Files
•
El job udev.conf se ejecuta cuando se produce el evento
virtual-filesystems que indica que los sistemas de ficheros
virtuales /proc y /dev han sido montados. Este evento es
enviado por el job mountall.conf.
$cat /etc/init/udev.conf (Ubuntu en 10.04)
# udev - device node and kernel event manager. The udev daemon receives events
# from the kernel about changes in the /sys filesystem and manages the /dev filesystem.
description
"device node and kernel event manager"
start on virtual-filesystems
stop on runlevel [06]
expect fork
respawn
1
Booting:System Initialization:Upstart. Job
Files
$cat /etc/init/mountall.conf (en Ubuntu 10.04)
description
"Mount filesystems on boot"
start on startup
stop on starting rcS
expect daemon
task
emits virtual-filesystems
emits local-filesystems
emits remote-filesystems
emits all-swaps
emits filesystem
emits mounting
emits mounted
1
Booting:System Initialization:Upstart. Job
Files
•
Un job puede depender de más de un evento.
$cat /etc/init/console-setup.conf (en Ubuntu 10.04)
# console-setup - set console keymap
# Establece el mapa del teclado español, inglés ...
description
"set console keymap and font"
start on (virtual-filesystems or starting rcS or starting mountall-shell)
task
exec loadkeys /etc/console-setup/cached.kmap.gz
1
Booting: System Initialization: Upstart.
Starting, stopping and listing jobs
•
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
#para arrancar/parar/rearrancar/ver el estado de un job
initctl start/stop/restart/status job_name
Ejm:sudo initctl stop ssh
#para averiguar que job esta en que estado
initctl list [PATTERN]
#para arrancar o parar jobs que están esperando un evento
initctl emit EVENT
1
Booting:System Initialization:Ventajas
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. Ejm:Cuando 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 jobs operan de manera autónoma basado en eventos
asíncronos, acelerando el arranque del sistema.
1
Booting:System Initialization:Directorios
•
Por compatibilidad o porque existen algunos scripts de
servicios que aún no han sido migrados al nuevo sistema
Upstart:
- Se mantiene los script /etc/init.d/*
- También se mantienen los runlevels, pudiendo usar el
comando init 3 (telinit 3) que generará el evento
adecuado para la ejecución de /etc/init.d/rc 3 (donde
arrancaremos /etc/rc3.d/S*)
1
Booting:System Initialization:Directorios
Pero también podemos encontrar procesos que han sido
migrados y mantienen un link de la carpeta /etc/init.d a la
carpeta /lib/init/upstart-job.
Ejm:ls -lias /etc/init.d
cron -> /lib/init/upstart-job
hostname -> /lib/init/upstart-job
hwclock -> /lib/init/upstart-job
...
•
Y si ejecutas dicho script lo ejecuta bien pero te muestra un
mensaje de aviso:
sudo /etc/init.d/cron restart
Rather than invoking init scripts through /etc/init.d, use the
service(8) utility, e.g. service cron restart. Since the script
•
1
Booting:System Initialization:Directorios
•
En ubuntu 10.04 se ha cambiado la carpeta /etc/event.d por
/etc/init. En caso de un upgrade de una versión anterior de
ubuntu, y en caso de que tuvieras al no-estandar en
/etc/event.d tendrás que migrarlo a mano, ya que el upgrade
no lo hace por ti. (bug 402759)
1
Descargar

02InicioLinux