Use systemd para gerenciar serviços Linux com WSL

O Subsistema do Windows para Linux (WSL) agora dá suporte ao systemd, um sistema init e gerenciador de serviços usado por muitas distribuições Linux populares, como Ubuntu, Debian e muito mais. (O que é o systemd?).

O padrão de sistema init mudou recentemente de SystemV, com systemd agora é o padrão para a versão atual do Ubuntu, que será instalado usando o comandowsl --install padrão. Distribuições Linux diferentes da versão atual do Ubuntu ainda podem usar o init WSL, semelhante ao init SystemV. Para alterar para systemd, consulte Como habilitar o systemd.

O que é o systemd no Linux?

De acordo com systemd.io: "systemd é um conjunto de blocos de construção básicos para um sistema Linux. Ele fornece um sistema e um gerenciador de serviços que é executado como PID 1 e inicia o resto do sistema."

Sendo primordialmente um sistema init e gerenciador de serviços, o systemd inclui recursos como início sob demanda de daemons, montagem e manutenção automática de ponto de montagem, suporte a snapshots e rastreamento de processos usando grupos de controle Linux.

A maioria das principais distribuições Linux agora executam o systemd, então habilitá-lo no WSL aproxima ainda mais a experiência de uso do Linux nativo. Veja o anúncio em vídeo com demonstrações do systemd ou exemplos de uso do systemd abaixo para saber mais sobre o que o systemd tem a oferecer.

Como ativar o systemd?

O systemd agora é o padrão para a versão atual do Ubuntu que será instalado usando o comando wsl --install padrão.

Para habilitar o systemd para quaisquer outras distribuições Linux em execução no WSL 2 (alterando o padrão init systemv):

  1. Certifique-se de que sua versão WSL seja 0.67.6 ou mais recente. (Para verificar, execute wsl --version. Para atualizar, execute wsl --update ou baixe a versão mais recente da Microsoft Store.)

  2. Abra uma linha de comando para sua distribuição Linux e digite cd / para acessar o diretório raiz e, em seguida ls para listar os arquivos. Você verá um diretório chamado "etc" que contém o arquivo de configuração WSL para a distribuição. Abra este arquivo para que você possa fazer uma atualização com o editor de texto Nano digitando: nano /etc/wsl.conf.

  3. Adicione estas linhas no arquivo wsl.conf que agora você tem aberto para alterar o init usado para systemd:

    [boot]
    systemd=true
    
  4. Saia do editor de texto Nano (Ctrl + X, selecione Y para salvar sua alteração). Em seguida, você precisará fechar a distribuição do Linux. Você pode usar o comando wsl.exe --shutdown no PowerShell para reiniciar todas as instâncias do WSL.

Enable systemd on WSL 2

Depois que a distribuição for reiniciada, o systemd estará em execução. Você pode confirmar usando o comando systemctl list-unit-files --type=service, que mostrará o status de todos os serviços associados à distribuição do Linux.

Saiba mais sobre as Definições de configuração avançadas no WSL, incluindo a diferença entre os arquivos de configuração wsl.conf (específicos da distribuição) e .wslconfig (globais), como atualizar as configurações de montagem automática, etc.

Vídeo de demonstração do systemd

A Microsoft fez uma parceria com a Canonical para trazer ao systemd suporte para o WSL. Veja Craig Loewen (gerente de produto para WSL na Microsoft) e Oliver Smith (gerente de produto para Ubuntu no WSL na Canonical) anunciarem o suporte ao systemd e fazerem algumas demonstrações do que ele possibilita.

Exemplos de Systemd

Alguns exemplos de aplicativos Linux que dependem do systemd são:

  • snap: um sistema de empacotamento e implantação de software desenvolvido pela Canonical para sistemas operacionais que usam o kernel Linux e o sistema de init systemd. Os pacotes são chamados de "snaps", a ferramenta de linha de comando para a criação de snaps é chamada de "Snapcraft", o repositório central onde os snaps podem ser baixados/instalados é chamado de "Snap Store", e o daemon necessário para executar snaps (baixar da loja, montar, confinar e executar aplicativos neles) é chamado de "snapd". O sistema inteiro às vezes é chamado de "snappy". Tente executar o comando: snap install spotify ou snap install postman.

  • microk8s: um Kubernetes de produção mínima, de baixo nível de operações e de código aberto que automatiza a implantação, o dimensionamento e o gerenciamento de aplicativos em contêineres. Siga as instruções para instalar o MicroK8s no WSL2, confira o Tutorial de introdução ou assista ao vídeo sobre o Kubernetes no Windows com MicroK8s e WSL 2.

  • systemctl: um utilitário de linha de comando usado para controlar e inspecionar systemd e para ajudá-lo a interagir com serviços em sua distribuição Linux. Experimente o comando systemctl list-units --type=service para ver quais serviços estão disponíveis e seu status.

Alguns tutoriais relacionados demonstrando maneiras de usar o systemd:

Como a ativação do systemd afeta a arquitetura WSL?

Habilitando o suporte para as mudanças necessárias do systemd na arquitetura WSL. Como o systemd requer o PID 1, o processo init do WSL iniciado dentro da distribuição Linux torna-se um processo filho do systemd. Como o processo init do WSL é responsável por fornecer a infraestrutura para a comunicação entre os componentes do Linux e do Windows, alterar essa hierarquia exigiu repensar algumas das suposições feitas com o processo initi do WSL. Modificações adicionais tiveram que ser feitas para garantir um desligamento limpo (já que esse desligamento é controlado pelo systemd agora) e para ter compatibilidade com o WSLg, o componente do WSL que executa as GUIs (Interfaces Gráficas do Usuário) do Linux, ou os aplicativos Linux que são exibidos no Windows em vez da linha de comando.

Também é importante notar que, com essas mudanças, os serviços systemd NÃO manterão sua instância do WSL ativa. Sua instância do WSL permanecerá ativa da mesma forma que acontecia antes desta atualização, sobre a qual você pode ler mais nesta postagem do blog de Suporte a tarefas em segundo plano de 2017.