33
systemd: repensando a inicializa¸c˜ ao Lucas De Marchi ProFUSION 6 de agosto de 2011 Lucas De Marchi (ProFUSION) systemd: repensando a inicializa¸c˜ ao 6 de agosto de 2011 1 / 25

Systemd Repensando a Inicializacao SemLinuxEmb2011

Embed Size (px)

Citation preview

Page 1: Systemd Repensando a Inicializacao SemLinuxEmb2011

systemd: repensando a inicializacao

Lucas De Marchi

ProFUSION

6 de agosto de 2011

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 1 / 25

Page 2: Systemd Repensando a Inicializacao SemLinuxEmb2011

Quem sou eu?

Engenheiro de software na ProFUSION embedded systems;

Participante de alguns grande projetos open source: Linux Kernel, BlueZ,oFono, ConnMan, WebKit, EFL;

Criador de outros poucos: dietsplash, codespell, trissa 3D;

http://www.politreco.com/

IRC: demarchi

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 2 / 25

Page 3: Systemd Repensando a Inicializacao SemLinuxEmb2011

Introducao - O que e systemd?

systemd e um sistema de init para o sistema operacional Linux.

O que exatamente e um “sistema de init”?

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 3 / 25

Page 4: Systemd Repensando a Inicializacao SemLinuxEmb2011

Introducao - O que e systemd um sistema de init?

systemd e um sistema de init para o sistema operacional Linux.

O que exatamente e um “sistema de init”?

1 Primeiro processo executado pelo kernel

2 Montar particoes

3 Processo responsavel por trazer todos os servicos durante o boot

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 4 / 25

Page 5: Systemd Repensando a Inicializacao SemLinuxEmb2011

Introducao - O que e systemd um sistema de init?

Um pouco mais que isso:

1 Configurar hostname / domainname

2 Conferir se particoes contem erros

3 Carregar modulos do kernel necessarios

4 Gerenciar logins

5 Configurar console / mapa de teclado / locale

6 Configurar relogio do sistema / timezone

7 Desligamento: ultimo processo a morrer

8 Universal child reaper

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 5 / 25

Page 6: Systemd Repensando a Inicializacao SemLinuxEmb2011

Introducao - O que e systemd?

systemd, um pouco mais que isso?

“systemd is a system and session manager for Linux,

compatible withSysV and LSB init scripts. systemd provides aggressive parallelization

capabilities, uses socket and D-Bus activation for starting services, offerson-demand starting of daemons, keeps track of processes using Linux

cgroups, supports snapshotting and restoring of the system state,maintains mount and automount points and implements an elaboratetransactional dependency-based service control logic. It can work as a

drop-in replacement for sysvinit.”

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 6 / 25

Page 7: Systemd Repensando a Inicializacao SemLinuxEmb2011

Introducao - O que e systemd?

systemd, um pouco mais que isso?

“systemd is a system and session manager for Linux, compatible withSysV and LSB init scripts.

systemd provides aggressive parallelizationcapabilities, uses socket and D-Bus activation for starting services, offers

on-demand starting of daemons, keeps track of processes using Linuxcgroups, supports snapshotting and restoring of the system state,

maintains mount and automount points and implements an elaboratetransactional dependency-based service control logic. It can work as a

drop-in replacement for sysvinit.”

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 6 / 25

Page 8: Systemd Repensando a Inicializacao SemLinuxEmb2011

Introducao - O que e systemd?

systemd, um pouco mais que isso?

“systemd is a system and session manager for Linux, compatible withSysV and LSB init scripts. systemd provides aggressive parallelization

capabilities,

uses socket and D-Bus activation for starting services, offerson-demand starting of daemons, keeps track of processes using Linux

cgroups, supports snapshotting and restoring of the system state,maintains mount and automount points and implements an elaboratetransactional dependency-based service control logic. It can work as a

drop-in replacement for sysvinit.”

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 6 / 25

Page 9: Systemd Repensando a Inicializacao SemLinuxEmb2011

Introducao - O que e systemd?

systemd, um pouco mais que isso?

“systemd is a system and session manager for Linux, compatible withSysV and LSB init scripts. systemd provides aggressive parallelization

capabilities, uses socket and D-Bus activation for starting services,

offerson-demand starting of daemons, keeps track of processes using Linux

cgroups, supports snapshotting and restoring of the system state,maintains mount and automount points and implements an elaboratetransactional dependency-based service control logic. It can work as a

drop-in replacement for sysvinit.”

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 6 / 25

Page 10: Systemd Repensando a Inicializacao SemLinuxEmb2011

Introducao - O que e systemd?

systemd, um pouco mais que isso?

“systemd is a system and session manager for Linux, compatible withSysV and LSB init scripts. systemd provides aggressive parallelization

capabilities, uses socket and D-Bus activation for starting services, offerson-demand starting of daemons,

keeps track of processes using Linuxcgroups, supports snapshotting and restoring of the system state,

maintains mount and automount points and implements an elaboratetransactional dependency-based service control logic. It can work as a

drop-in replacement for sysvinit.”

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 6 / 25

Page 11: Systemd Repensando a Inicializacao SemLinuxEmb2011

Introducao - O que e systemd?

systemd, um pouco mais que isso?

“systemd is a system and session manager for Linux, compatible withSysV and LSB init scripts. systemd provides aggressive parallelization

capabilities, uses socket and D-Bus activation for starting services, offerson-demand starting of daemons, keeps track of processes using Linux

cgroups,

supports snapshotting and restoring of the system state,maintains mount and automount points and implements an elaboratetransactional dependency-based service control logic. It can work as a

drop-in replacement for sysvinit.”

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 6 / 25

Page 12: Systemd Repensando a Inicializacao SemLinuxEmb2011

Introducao - O que e systemd?

systemd, um pouco mais que isso?

“systemd is a system and session manager for Linux, compatible withSysV and LSB init scripts. systemd provides aggressive parallelization

capabilities, uses socket and D-Bus activation for starting services, offerson-demand starting of daemons, keeps track of processes using Linux

cgroups, supports snapshotting and restoring of the system state,

maintains mount and automount points and implements an elaboratetransactional dependency-based service control logic. It can work as a

drop-in replacement for sysvinit.”

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 6 / 25

Page 13: Systemd Repensando a Inicializacao SemLinuxEmb2011

Introducao - O que e systemd?

systemd, um pouco mais que isso?

“systemd is a system and session manager for Linux, compatible withSysV and LSB init scripts. systemd provides aggressive parallelization

capabilities, uses socket and D-Bus activation for starting services, offerson-demand starting of daemons, keeps track of processes using Linux

cgroups, supports snapshotting and restoring of the system state,maintains mount and automount points and implements an elaboratetransactional dependency-based service control logic.

It can work as adrop-in replacement for sysvinit.”

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 6 / 25

Page 14: Systemd Repensando a Inicializacao SemLinuxEmb2011

Introducao - O que e systemd?

systemd, um pouco mais que isso?

“systemd is a system and session manager for Linux, compatible withSysV and LSB init scripts. systemd provides aggressive parallelization

capabilities, uses socket and D-Bus activation for starting services, offerson-demand starting of daemons, keeps track of processes using Linux

cgroups, supports snapshotting and restoring of the system state,maintains mount and automount points and implements an elaboratetransactional dependency-based service control logic. It can work as a

drop-in replacement for sysvinit.”

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 6 / 25

Page 15: Systemd Repensando a Inicializacao SemLinuxEmb2011

Inicializacao do SO

→ First-stage bootloader (X-loader)↪→ Second-stage bootloader (u-boot)

↪→ Kernel (Linux)↪→ Init (systemd)

ou

→ First-stage bootloader (X-loader)↪→ Second-stage bootloader (u-boot)

↪→ Kernel (Linux)↪→ Initram (dracut)

↪→ Init (systemd)

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 7 / 25

Page 16: Systemd Repensando a Inicializacao SemLinuxEmb2011

Outros sistemas de init

SysV init:I Mais famoso sistema de init em sistemas *nix;I RunlevelsI Configuracao: /etc/inittab, /etc/rc.d/*I Ordem determinada pelo nome do arquivoI Alta dependencia de shell scripts: um sistema geralmente boota por

completo usando 3000+ processosI Projeto antigo, bem estavel

BSD: um pouco diferente do SysV - nao tem o conceito de runlevels,ordem e determinada por tags em cada script de init

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 8 / 25

Page 17: Systemd Repensando a Inicializacao SemLinuxEmb2011

Outros sistemas de init

SysV init:I Mais famoso sistema de init em sistemas *nix;I RunlevelsI Configuracao: /etc/inittab, /etc/rc.d/*I Ordem determinada pelo nome do arquivoI Alta dependencia de shell scripts: um sistema geralmente boota por

completo usando 3000+ processosI Projeto antigo, bem estavel

Algum problema com esse sistema?

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 9 / 25

Page 18: Systemd Repensando a Inicializacao SemLinuxEmb2011

Outros sistemas de init

upstart:I Idealizado por Scott J. Remnant para o Ubuntu (circa 2007)I Le arquivos de configuracao em /etc/init/*I Baseado em eventos: “start on”, “stop on”, “initctl emit”I Diminui dependencia de shell scripts, mas continua sendo bastante

usado

Algum problema com esse sistema?

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 10 / 25

Page 19: Systemd Repensando a Inicializacao SemLinuxEmb2011

Outros sistemas de init

Sistemas menos conhecidos/usados:

OpenRC: sistema usado no Gentoo

initng: Gentoo init wanna be

runit

Sistemas embarcados:

ltib

upstart

AndroidI Design similar ao do upstartI Baseado em eventosI Eventos sao lidos de /init.rc e /init.plataforma.rc

home made

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 11 / 25

Page 20: Systemd Repensando a Inicializacao SemLinuxEmb2011

Systemd - sobreRepensando o init: systemd

Criado no final de 2009, comeco de 2010

Autores e mantenedores: Lennart Poettering e Kay Sievers

Utiliza recursos exclusivos do Linux: cgroups, devtmpfs, signalfd,epoll, notificacao de swap/mount point, etc. Nao ha preocupacao emser portavel para outros sistemas.

Utilizacao excessiva de scripts e prejudicial: lentidao na execucao ebaixa padronizacao

Execucao sequencial e a mais simples e burra possıvel

Atualmente a criacao de servicos (daemons) e difıcil, sujeita a erros enao-consistente.

Configuracao: cada distribuicao faz como quiser (Exemplos:hostname, relogio, mapa de teclas etc)

Preocupa-se em como iniciar o servico da forma mais simples, masnao como mante-lo rodando

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 12 / 25

Page 21: Systemd Repensando a Inicializacao SemLinuxEmb2011

Systemd - caracterısticas

Dependencias implıcitas/explicitas

Alta paralelizacao do boot

Diversas formas de iniciar um servico

Inicializacao sob demanda de servico

Baixa utilizacao de shell scripts

Facilita a criacao de servicos: parte da tarefa que era executada nelepassa a ser executada pelo proprio systemd

Fortemente dependente de algumas caracterısticas/programas do Linux:cgroups, udev, d-bus, dracut (quando ha initram)

Bootsplash? Nao! Plymouth (desktop) ou dietsplash (sistemasembarcados)

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 13 / 25

Page 22: Systemd Repensando a Inicializacao SemLinuxEmb2011

Systemd - comparacao com outros inits

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 14 / 25

Page 23: Systemd Repensando a Inicializacao SemLinuxEmb2011

Systemd - Objetivos maiores

Padronizacao

Velocidade de boot: em alguns casos ja e possıvel bootar em < 1s

Utilizar toda a “largura de banda” disponıvel

Boot sem shell scriptsI Tarefas de sistemaI Arquivos de configuracao de inicializacao de servicos

Integracao

Modularizacao

Paralelizacao

Manutencao do estado dos servicos

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 15 / 25

Page 24: Systemd Repensando a Inicializacao SemLinuxEmb2011

Systemd - sistemas embarcados?

Mas esse sistema de init se adequa a sistemas embarcados?Depende! Quer um sistema

Padronizado,

utilizando toda a banda disponıvel,

veloz,

sem shell scripts e suas gambiarras,

bem integrado,

modular,

com servicos inicializados em paralelo,

tendo uma baby-sitter pra monitorar os servicos

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 16 / 25

Page 25: Systemd Repensando a Inicializacao SemLinuxEmb2011

Systemd - sistemas embarcados?

Mais seriamente: sim! Com excecao de alguns servicos desnecessarios namaior parte dos cenarios de sistemas embarcados:

hostnamed

logind / pam systemd

localed

timedated

Suporte atual para Angstrom, Yocto e Gentoo.

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 17 / 25

Page 26: Systemd Repensando a Inicializacao SemLinuxEmb2011

Systemd - ativacao por socket

Kernel ordena e bufferiza requisicoes

Dependencia implıcita

Necessita suporte por parte do daemon

Vantagem: servicos que utilizam um outro podem ser iniciadoantes. Exemplo: syslog

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 18 / 25

Page 27: Systemd Repensando a Inicializacao SemLinuxEmb2011

Systemd - ativacao por D-Bus

systemd registra determinado nome barramento

Servico e iniciado quando alguma conexao e realizada

Necessita suporte por parte do daemon

Vantagem: servicos que utilizam um outro podem ser iniciadosantes. Exemplo: Bluetooth

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 19 / 25

Page 28: Systemd Repensando a Inicializacao SemLinuxEmb2011

Systemd - ativacao por caminho (path)

systemd monitora determinado arquivo

Servico e iniciado quando evento acontece nesse arquivo

Vantagem: servico pode ser iniciado somente quando necessario.Exemplo: cups

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 20 / 25

Page 29: Systemd Repensando a Inicializacao SemLinuxEmb2011

Systemd - ativacao sob demanda

socket

D-Bus

path

Vantagem: servicos que utilizam um outro podem ser iniciadosantes e somente quando necessarios.

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 21 / 25

Page 30: Systemd Repensando a Inicializacao SemLinuxEmb2011

Systemd - babysitter

Systemd monitora qual a polıtica de (re)-inicializacao:

nunca

sempre

so quando termina com sucesso

so quando termina com falha

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 22 / 25

Page 31: Systemd Repensando a Inicializacao SemLinuxEmb2011

Systemd - babysitter

Diversas outras polıticas podem ser setadas para um determinado servico:

Environment, resource limits, working directory, chroot(), umask, OOMadjustment, nice level, IO priority and class, CPU scheduler priority andpolicy/reset-on-fork, CPU affinity, timer slack, stdio tosyslog/tty/null/kmsg, uid, gid, supplementary groups, file systemnamespacing (r/o file systems, inaccessible systems, mount propagation,private /tmp), capabilities (inherited set, bounding set, secure bits), ...

Veja: man systemd.service

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 23 / 25

Page 32: Systemd Repensando a Inicializacao SemLinuxEmb2011

Systemd - configuracao

Arquivos de configuracao do systemd do sistema:

/lib/systemd

Arquivos de configuracao do systemd do usuario e/ouativados/desativados: /etc/systemd

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 24 / 25

Page 33: Systemd Repensando a Inicializacao SemLinuxEmb2011

Systemd - comandos uteis

systemctl: inicia, termina, habilita servicos

systemd-analyze: analisa o tempo de boot para poder ser otimizado

systemd-cgls: saıda do tipo pstree mas com as verdadeiras relacoesde pai e filho dos processos

systemd: emite comandos diretamente para o PID 1

Lucas De Marchi (ProFUSION) systemd: repensando a inicializacao 6 de agosto de 2011 25 / 25