Justificativa para mudar do iniciante para o systemd?

28

A maior mudança que vem com o Ubuntu 15.04 é a mudança do iniciante para o systemd como o padrão para gerenciar a inicialização dos serviços de sistema e inicialização.

Alguém poderia explicar adequadamente a um usuário não técnico como e se isso nos afeta? E porque é importante?

Nikos Grigoriadis
fonte

Respostas:

29

Usuários leigos não devem notar nenhuma alteração, por padrão. É um sistema init, não algo com o qual os usuários interagem tradicionalmente. Ele deve substituir completamente a funcionalidade fornecida pelo Upstart - e fazer algumas coisas extras - mas a única vez que um usuário não técnico verá isso é quando ocorrer um erro.

Usuários, administradores de sistemas e desenvolvedores que estão usando e desenvolvendo ativamente o Upstart são as pessoas que precisam resolver os problemas. Há um documento de migração no Ubuntu Wiki para ajudar os desenvolvedores a converter seus scripts init, mas usuários e sistemas podem continuar usando o Upstart usando a versão 14.04 (que é suportada até 2019).

A razão e a justificativa da mudança realmente não eram do lado do Ubuntu. A Canonical estava feliz o suficiente com o Upstart (seu projeto), mas muitos usuários do Debian queriam mudar para um mecanismo init moderno para obter melhor simultaneidade na inicialização e melhor funcionalidade de monitoramento em todos os serviços.

Isso significou uma briga entre várias opções (as lógicas) e o systemd eventualmente venceu.

A Canonical concordou com o Debian porque é mais fácil e provavelmente o melhor. Eles abandonam um projeto e não estão lutando contra a corrente. Ele também nos alinha a outras distribuições (Red Hat, Fedora, etc) que também estão migrando para o systemd. Mais foco e menos duplicação de esforços.

tl; dr Para uma pessoa não técnica, isso não deve afetá-lo em tudo. Para o Ubuntu, isso significa menos trabalho e um melhor sistema de inicialização.

Oli
fonte
18

Alguém poderia explicar adequadamente a um usuário não técnico como e se isso nos afeta?

Em teoria, isso não deve afetar o usuário final não técnico que não se envolve no âmago da questão de como o sistema realmente funciona. Na prática, há muitas coisas que você verá.

Aqui está uma lista incompleta:

  • Se você tivesse softwares complementares que usavam arquivos de definição de tarefa iniciados para iniciar programas, eles deixarão de funcionar. Você terá que instalar (e possivelmente gravar, mas mais comumente, apenas apagar alguém que já tenha gravado) os arquivos da unidade de serviço systemd . Exemplo: https://askubuntu.com/questions/613785
  • Várias suposições de design por desenvolvedores de sistemas sobre coisas como gerenciamento de energia resultam em padrões que estão em desacordo com o que você pode estar acostumado. Os desenvolvedores de sistemas têm idéias bem definidas sobre o que deve acontecer em resposta às opções de tampa nos laptops , por exemplo.
  • Se você estiver usando o driver de vídeo proprietário da nvidia, existem várias decisões de design no systemd que afetam você. Exemplo: https://askubuntu.com/questions/613773
  • Não é realmente relevante quando se trata de iniciantes, pois os usuários do Ubuntu têm uma página de manual informando isso há alguns anos, mas eu mencionei isso para os usuários não-Ubuntu que podem ler isso: Outros usuários de sistemas operacionais Linux provenientes do System 5 init+ rcsão mordidos pelo fato de que systemd é compatível apenas com versões anteriores do Sistema 5 rc. Como o iniciante e, na verdade, a maioria dos outros sistemas, ele professa e fornece, sem compatibilidade com o System 5 inite seu arquivo de configuração /etc/inittab.

    Então, as pessoas que seguiram o conselho dos 30 anos de aconselhamento "Bem, você pode simplesmente editar isso em /etc/inittab...", ou as pessoas que usam softwares que seguiram esse conselho agora têm softwares que não iniciam no bootstrap. Exemplo: https://unix.stackexchange.com/a/196197/5132

  • Você não pode entrar no modo de usuário único através do shutdowncomando systemd , como poderia com os shutdowncomandos anteriores . Além do fato de ser chamado de modo de recuperação no jargão do systemd, o modo de recuperação não é considerado um estado de desligamento na visão de mundo do systemd. É considerado como um estado em execução . shutdown nowdesligará a máquina. É systemctl rescuealcançar o modo de usuário único no mundo systemd. Leitura adicional: https://unix.stackexchange.com/a/196471/5132
  • Além desse último assunto: se você ainda não jogou fora a idéia de níveis de corrida , agora é a hora de fazê-lo. Leitura adicional: https://unix.stackexchange.com/a/196014/5132
  • Você terá que ter cuidado ao seguir os conselhos gerais do sistema encontrados pela navegação aleatória na WWW, porque "sabe" que "agora tudo está sistemado". Você verá pessoas falando sobre a execução de comandos com a --useropção systemctl. Isso não se aplica ao Ubuntu (ainda). upstart e systemd diferem significativamente nessa área, e a versão 15 do Ubuntu ainda usa o init upstart por sessão em vez de uma instância systemd por usuário . Portanto, https://superuser.com/a/860598/38062 não se aplicará, por exemplo. ☺
JdeBP
fonte
6

Como outros já observaram aqui, em teoria, isso não deve afetar o usuário final não técnico - e, em teoria, não há diferença entre teoria e prática, mas na prática existe.

Esclarecimento

Acho que poucas coisas postadas aqui precisam de alguns esclarecimentos:

É um sistema init, não algo com o qual os usuários interagem tradicionalmente.

Foi o caso do SysV init e do Upstart, mas não é mais o caso do systemd. Ele faz muitas coisas com as quais os usuários tradicionalmente interagem:


Ele deve substituir completamente a funcionalidade fornecida pelo Upstart - e fazer algumas coisas extras

Duas coisas a esclarecer - primeiro sobre a substituição completa do Upstart:

Nenhum script de inicialização do SysV

Um dos problemas que as pessoas têm com o systemd é que ele não executa scripts de inicialização do SysV. Portanto, há um exemplo de que ele não substitui completamente a funcionalidade fornecida pelo Upstart.

Isso é algo em que podemos confiar há mais de 30 anos e, tradicionalmente, você escrevia scripts init do SysV para portabilidade máxima sem se repetir (escrevendo várias versões dos mesmos scripts), o que não é mais o caso.

Isso não deve ser um problema ao usar apenas pacotes de repositórios oficiais, porque presumivelmente todos os pacotes que costumavam ter scripts SysV init ou Upstart precisariam ter seus scripts reescritos antes de serem empacotados.

Será apenas um problema para as pessoas que usam qualquer software personalizado ou de terceiros que tenha seus scripts init escritos para o SysV init ou para o Upstart e esses precisarão dos scripts init reescritos antes de atualizar para um sistema com systemd (ou obter o iniciante instalado, que também é uma opção , ou migra para um sistema que não usa systemd).

Há systemd-sysv-generator que deve converter automaticamente scripts de inicialização do SysV em scripts de systemd, mas existem alguns erros e uma longa lista de incompatibilidades explícitas .

Agora, o segundo esclarecimento - sobre essas poucas coisas extras:

Poucas coisas extras

Essas "poucas coisas extras" que o systemd abordará - de acordo com A Perspective para systemd - O que foi alcançado e o que está por vir apresentado por Lennart Poettering em 2014 no GNOME.asia - são as seguintes:

  • sistema init
  • registro de diário
  • gerenciamento de login
  • gerenciamento de dispositivo
  • gerenciamento de arquivos temporário e volátil
  • registro de formato binário
  • salvar / restaurar luz de fundo
  • salvar / restaurar rfkill
  • gráfico de inicialização
  • Leia adiante
  • configuração de armazenamento criptografado
  • Descoberta de partição EFI / GPT
  • registro de máquina virtual / contêiner
  • gerenciamento de contêineres
  • gerenciamento de nome de host
  • gerenciamento de localidade
  • gerenciamento de tempo
  • manejo aleatório de sementes
  • gerenciamento de variáveis ​​sysctl
  • gerenciamento de console
  • introspecção
  • descoberta automática
  • plug and play
  • Gerenciamento de rede
  • systemd-networkd
  • Cache DNS
  • respondedor mDNS
  • Respondente LLMNR
  • Verificação DNSSEC
  • IPC no kernel
  • kdbus
  • sd-bus
  • sincronização de horário com NTP
  • systemd-timesyncd
  • integração com contêineres
  • sandboxing de serviços
  • sandbox de aplicativos
  • Formato de imagem do SO
  • Formato de imagem do contêiner
  • Formato de imagem da aplicação
  • GPT com descoberta automática
  • Sistemas sem estado
  • sistemas instanciados
  • restauração de fábrica
  • inicialização e atualizações de nós
  • integração com a nuvem
  • gerenciamento de serviço entre nós
  • imagens verificáveis ​​do sistema operacional até o firmware
  • Carregamento de inicialização
  • Construindo o sistema operacional de próxima geração da Internet Unificando diferenças sem sentido entre distribuições

Voltando a: "É um sistema init, não algo com o qual os usuários interagem tradicionalmente". - é preciso salientar que o sistema init é apenas um item dessa lista.


E, finalmente, a última coisa que gostaria de comentar:

[A] única vez em que um usuário não técnico verá isso é quando algo der errado.

Oh, que alívio! :)

Alterar

As alterações mais notáveis ​​para usuários finais (que não sejam os próprios scripts) estão iniciando e parando serviços e usando comandos como:

que não funcionam mais como o esperado. Por exemplo, nohupé um comando POSIX para garantir que o processo continue em execução após o logout da sessão. Já não funciona no systemd. Também programas como screene tmuxprecisam ser invocados de uma maneira especial ou, caso contrário, os processos que você executa com eles serão mortos (apesar de não serem mortos nesses processos, geralmente é o principal motivo da execução do screen ou tmux em primeiro lugar).

Isso não é um bug, é uma escolha de design, portanto, não é provável que seja corrigido no futuro. Foi o que Lennart Poettering disse sobre esse assunto:

Na minha opinião, era realmente muito estranho no UNIX que, por padrão, deixasse o código arbitrário do usuário ficar irrestrito após o logout. Foi discutido há muito tempo entre muitas pessoas do sistema operacional, que isso deve ser possível, mas certamente não é o padrão, mas ninguém se atreveu até o momento a acionar o comutador para passar de um padrão para uma opção. Não limpar as sessões do usuário após o logout não é apenas feio e um tanto burro, mas também um problema de segurança. O systemd 230 agora finalmente apertou o botão e finalmente, por padrão, limpa tudo corretamente quando o usuário efetua logout.

Para mais informações, consulte:

Corrida screen

  • iniciante: screen
  • systemd: systemd-run --user --scope screen

(Nota: o comportamento do "iniciante" acima é realmente qualquer coisa, exceto systemd, isso não é específico do inicio)

Iniciando o trabalho foo:

  • iniciante: start foo
  • systemd: systemctl start foo

Parando o trabalho foo:

  • iniciante: stop foo
  • systemd: systemctl stop foo

Reiniciando o trabalho foo:

  • iniciante: restart foo
  • systemd: systemctl restart foo

Listando trabalhos com seu status:

  • iniciante: initctl list
  • systemd: systemctl status

(Veja minha resposta em Quais são os prós / contras do Upstart e do systemd? Para obter mais detalhes que estão fora do escopo desta pergunta.)

Logs

Há também uma grande diferença no manuseio dos logs, porque, contrariamente à tradição do Unix, os logs do systemd são armazenados em arquivos binários em um formato personalizado; portanto, em vez de:

cat /var/log/upstart/foo.log
tail -f /var/log/upstart/foo.log

você precisa usar comandos especiais para acessar seus logs:

sudo journalctl -u foo
sudo journalctl -u foo -f

Controvérsias

A introdução do systemd primeiro no Debian e depois no Ubuntu não foi isenta de controvérsias e vasta oposição, como é conhecido por quem escreveu um dos seguintes artigos:

A posição oficial do Debian no systemd e a controvérsia resultante levaram à declaração do Êxodo em 2014 e terminaram com a renúncia de Ian Jackson .

O Freedom Init , Without-Systemd.org e Systemd-Free.org iniciativas nasceram, com um monte de discussão sobre Hacker News .

Leitura adicional

rsp
fonte
Você está puxando minha resposta para um contexto diferente. O Systemd é mais do que um sistema init, mas esta pergunta era sobre o iniciante → systemd e essa decisão ... Não "Quais são todas as coisas que o systemd substitui?"
Oli