58
1 Inicio Linux Ubuntu Kepa Bengoetxea

1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

Embed Size (px)

Citation preview

Page 1: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

1

Inicio Linux

Ubuntu

Kepa Bengoetxea

Page 2: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

Page 3: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

1

Booting• El arranque se puede

dividir en 3 pasos:• BIOS• kernel boot• System initialization

Page 4: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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.

Page 5: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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,...)

Page 6: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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 menutitle 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 splashinitrd /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 cadenaboot

Page 7: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

1

Booting: kernel boot. Ubuntu 8.04less /boot/grub/menu.lst (2ª parte)title Windows 95/98/NT/2000 root (hd0,0) #hace activa la partición donde estamos situadosmakeactive

#carga el primer sector de la partición activachainloader +1

Page 8: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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/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}

Page 9: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

1

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"

Page 10: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

1

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

Page 11: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

1

Proceso de Inicio de Linux

Page 12: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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 /etc/event.d ( a partir de Ubuntu 10.04 en /etc/init)

Page 13: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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:

# 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 ....

# 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

Page 14: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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)

Page 15: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

Page 16: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

–...

Page 17: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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:

# 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 ....

# 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

Page 18: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

5 X

6 Reinicio

id:5:initdefault:

Page 19: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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:

Page 20: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

Page 21: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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:

# 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 ....

# 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

Page 22: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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...

Page 23: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

...

Page 24: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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 / 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

Page 25: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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:

# 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 ....

# 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

Page 26: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

Page 27: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

/etc/init.d/apache2 stop

Page 28: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

1

Booting:System Initialization:System V Init

less /etc/init.d/cupscase "$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

Page 29: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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:

# 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 ....

# 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

Page 30: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

4:23:respawn:/sbin/getty tty4 VC linux

....

Page 31: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

1

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

Page 32: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

Page 33: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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 ;; stop) ;; *) echo "Usage: $0 start|stop" >&2 exit 3;;esac

Page 34: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

1

Booting:System Initialization:System V Init

Secuencia de procesos que lanza el kernel.Terminal:

Init->getty->login->shellGráfico:

Init->kdm,gdm,xdm->login->X11,KDE o GNOME

Page 35: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

Page 36: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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 funcionalidades basados en los scripts de System V Init.

Page 37: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

1

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.

Page 38: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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....

Page 39: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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.

Page 40: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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 ...)

Page 41: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

Page 42: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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 default-

route esta activo o up si el router por defecto esta

encendido.

Page 43: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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.

Page 44: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

Page 45: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

Page 46: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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 ...

Page 47: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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)

Page 48: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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...

Page 49: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

Page 50: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

Page 51: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

exec udevd --daemon

Page 52: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

[...rest of script]

Page 53: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

Page 54: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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

Page 55: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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.

Page 56: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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*)

Page 57: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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.dcron -> /lib/init/upstart-jobhostname -> /lib/init/upstart-jobhwclock -> /lib/init/upstart-job...• Y si ejecutas dicho script lo ejecuta bien pero te muestra un

mensaje de aviso:sudo /etc/init.d/cron restartRather than invoking init scripts through /etc/init.d, use the

service(8) utility, e.g. service cron restart. Since the script you are attempting to invoke has been converted to an

Upstart job, you may also use the restart(8) utility, e.g. restart cron

cron start/running, process 4186

Page 58: 1 Inicio Linux Ubuntu Kepa Bengoetxea. 1 Referencia: Ref:Replacing init with Upstart By Scott James Remnant:

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)