Systemd-259.1

Introdução ao "systemd"

Enquanto o systemd foi instalado quando da construção do LFS, existem muitos recursos fornecidos pelo pacote que não foram incluídos na instalação inicial porque o Linux-PAM ainda não estava instalado. O pacote systemd precisa ser reconstruído para fornecer um serviço systemd-logind funcional, o qual fornece muitos recursos adicionais para pacotes dependentes.

[Nota]

Nota

Esse pacote é conhecido por construir e funcionar adequadamente usando-se uma plataforma LFS 13.0.

Informação do Pacote

  • Transferência (HTTP): https://github.com/systemd/systemd/archive/v259.1/systemd-259.1.tar.gz

  • Transferência (FTP):

  • Soma de verificação MD5 da transferência: 623f73826e7702ac08c57febb9d20431

  • Tamanho da transferência: 16 MB

  • Espaço em disco estimado exigido: 424 MB (com testes)

  • Tempo de construção estimado: 1,7 UPC (com testes usando quatro núcleos)

Dependências do "systemd"

Recomendadas

[Nota]

Nota

Linux-PAM-1.7.2 não é estritamente exigido para construir o systemd, mas o principal motivo para reconstruir o systemd no BLFS (ele já está construído no LFS de qualquer maneira) é para o processo de segundo plano systemd-logind e o módulo PAM pam_systemd.so. Linux-PAM-1.7.2 é exigido para eles. Todos os pacotes no livro BLFS com dependência do systemd esperam que ele tenha sido reconstruído com Linux-PAM-1.7.2.

Opcionais

btrfs-progs-6.17.1, cURL-8.18.0, cryptsetup-2.8.4, git-2.53.0, iptables-1.8.12, libarchive-3.8.5, libidn2-2.3.8, libpwquality-1.4.5, libseccomp-2.6.0, libxkbcommon-1.13.1, make-ca-1.16.1, p11-kit-0.26.2, qemu-10.2.1, libqrencode-4.1.1, rsync-3.4.1, sphinx-9.1.0, Valgrind-3.26.0, zsh-5.9 (para as completações do zsh), AppArmor, audit-userspace, bash-completion, jekyll, kexec-tools, libbpf, libdw, libfido2, libmicrohttpd, pefile, pyelftools, quota-tools, rpm, SELinux, systemtap, tpm2-tss e Xen

Opcional (para reconstruir as páginas de manual)

docbook-xml-4.5, docbook-xsl-nons-1.79.2, libxslt-1.1.45 e lxml-6.0.2 (para construir o índice das páginas de manual do "systemd")

Observações de Editor(a): https://wiki.linuxfromscratch.org/blfs/wiki/Logind

Instalação do "systemd"

[Atenção]

Atenção

Se uma versão anterior do systemd tiver sido instalada, remova um serviço que gerará erros nas inicializações seguintes. Como o(a) usuário(a) root:

rm -fv /usr/lib/systemd/system/systemd-update-utmp-runlevel.service

Remova dois grupos desnecessários, render e sgx, das regras padrão do "udev":

sed -i -e 's/GROUP="render"/GROUP="video"/' \
      -e 's/GROUP="sgx", //' rules.d/50-udev-default.rules.in

Reconstrua o systemd executando os seguintes comandos:

mkdir build &&
cd    build &&

meson setup ..                 \
      --prefix=/usr            \
      --buildtype=release      \
      -D default-dnssec=no     \
      -D firstboot=false       \
      -D install-tests=false   \
      -D ldconfig=false        \
      -D man=auto              \
      -D sysusers=false        \
      -D rpmmacrosdir=no       \
      -D homed=disabled        \
      -D mode=release          \
      -D pam=enabled           \
      -D pamconfdir=/etc/pam.d \
      -D dev-kvm-mode=0660     \
      -D nobody-group=nogroup  \
      -D sysupdate=disabled    \
      -D ukify=disabled        \
      -D docdir=/usr/share/doc/systemd-259.1 &&

ninja
[Nota]

Nota

Para os melhores resultados de teste, certifique-se de executar a suíte de testes a partir de um sistema que seja inicializado pela mesma versão do systemd que você estiver reconstruindo.

Para testar os resultados, emita: ninja test. O teste chamado test-stat-util é conhecido por falhar se alguns recursos do núcleo não estiverem habilitados. Se a suíte de teste for executada como o(a) usuário(a) root, alguns outros testes possivelmente falhem, porque dependem de várias opções de configuração do núcleo.

Agora, como o(a) usuário(a) root:

ninja install

Explicações do Comando

--buildtype=release: Especifique um tipo de construção adequado para lançamentos estáveis do pacote, pois o padrão possivelmente produza binários não otimizados.

-D pamconfdir=/etc/pam.d: Força os arquivos do PAM serem instalados em /etc/pam.d em vez de /usr/lib/pam.d.

-D homed=disabled: Remove um processo de segundo plano que não oferece qualquer uso sob uma configuração tradicional do BLFS, especialmente usando contas criadas com useradd. Para habilitar o systemd-homed, primeiro certifique-se de que você tenha cryptsetup-2.8.4 e libpwquality-1.4.5 instalados e, em seguida, mude disabled para enabled no comando meson setup acima.

-D ukify=disabled: Remove um conjunto de comandos sequenciais para combinar um núcleo, um initramfs e uma linha de comando do núcleo, etc., em um aplicativo UEFI que pode ser carregado pelo firmware UEFI para iniciar o núcleo incorporado Linux. Ele não é necessário para inicializar um sistema BLFS com UEFI se seguir-se Usando o GRUB para Configurar o Processo de Inicialização com UEFI. E ele exige o módulo pefile do Python em tempo de execução, de forma que, se estiver habilitado, mas pefile não estiver instalado, um teste para ele falhará na suíte de teste. Para habilitar o systemd-ukify, instale o módulo pefile e, então, mude disabled para enabled no comando meson setup acima.

Configurando o "systemd"

O arquivo /etc/pam.d/system-session precisa ser modificado e um novo arquivo precisa ser criado para a finalidade de que o systemd-logind funcione corretamente. Execute os seguintes comandos como o(a) usuário(a) root:

grep 'pam_systemd' /etc/pam.d/system-session ||
cat >> /etc/pam.d/system-session << "EOF"
# Inicia adições do Systemd

session  required    pam_loginuid.so
session  optional    pam_systemd.so

# Termina adições do Systemd
EOF

cat > /etc/pam.d/systemd-user << "EOF"
# Inicia /etc/pam.d/systemd-user

account  required    pam_access.so
account  include     system-account

session  required    pam_env.so
session  required    pam_limits.so
session  required    pam_loginuid.so
session  optional    pam_keyinit.so force revoke
session  optional    pam_systemd.so

auth     required    pam_deny.so
password required    pam_deny.so

# Termina /etc/pam.d/systemd-user
EOF

Como o(a) usuário(a) root, substitua o gerenciador systemd em execução (o processo init) pelo executável systemd recém-construído e instalado:

systemctl daemon-reexec

Um ambiente de área de trabalho frequentemente executa como um grupo de serviços de usuário(a) do systemd. Esses serviços são gerados pela instância por usuário(a) do systemd, em vez do shell de login. Para garantir que esses serviços obtenham as variáveis de ambiente que nós configuramos via /etc/profile.d; como o(a) usuário(a) root, instale um gerador de ambiente do systemd para despejar todas as variáveis de ambiente exportadas relevantes na instância por usuário(a) do systemd quando a instância iniciar para executar:

install -vdm755 /etc/systemd/user-environment-generators &&
cat > /etc/systemd/user-environment-generators/50-profile.sh << "EOF" &&
#!/usr/bin/env -S -i /usr/bin/bash
# SPDX-License-Identifier: MIT

. /etc/profile

# Systemd should have already set a better value for them.
unset XDG_RUNTIME_DIR
for i in $(locale); do
  unset ${i%=*}
done

# Some shell magic that we don't want to expose.
unset SHLVL

# Systemd does not want to pass functions to the environment
for i in $(declare -pF | awk '{print $3}'); do
  unset -f $i
done

python3 << _EOF
import os
for var in os.environ:
  # Simply unsetting them in shell does not work.
  if var in ['LC_CTYPE', '_']:
    continue

  print(var + '=' + os.environ[var])
_EOF
EOF

chmod -v 755 /etc/systemd/user-environment-generators/50-profile.sh

Leia-se systemd.environment-generator(7) para detalhes acerca dos geradores de ambiente do systemd. Observe que se tiver editado o conteúdo de /etc/profile.d quando um ambiente de área de trabalho estiver executando, você precisará sincronizar a mudança na instância systemd por usuário(a):

systemctl --user unset-environment \
  $(/etc/systemd/user-environment-generators/50-profile.sh | sed 's/=.*//')
systemctl --user daemon-reload

E, em seguida, deslogar-se e logar-se novamente para sincronizar a mudança no ambiente de área de trabalho. O comando systemctl --user unset-environment é necessário em alguns ambientes de área de trabalho que escrevam as variáveis de ambiente no bloco de variáveis de ambiente em tempo de execução da instância systemd por usuário(a), porque o conteúdo desse bloco de variáveis substituiria a configuração proveniente do gerador.

[Importante]

Importante

Agora certifique-se de que Shadow-4.19.3 já tenha sido reconstruído com suporte Linux-PAM-1.7.2 primeiro, depois deslogue-se e logue-se novamente. Isso garantirá que a sessão de login em execução seja registrada com systemd-logind e que uma instância do systemd por usuário(a) esteja executando para cada usuário(a) titularizando uma sessão de login. Muitos pacotes do BLFS que listam o systemd como uma dependência precisam da integração do systemd-logind e (ou) de uma instância do systemd em execução por usuário(a) em tempo de execução.

[Atenção]

Atenção

Se estiver atualizando a partir de uma versão anterior do systemd e um initrd for usado para inicialização do sistema, você deveria gerar um novo initrd antes de reinicializar o sistema.

Conteúdo

Uma lista dos arquivos instalados, juntamente com as descrições curtas deles, pode ser encontrada em ../../../../lfs/view/13.0-systemd/chapter08/systemd.html#contents-systemd.

Listados abaixo estão os programas recém-instalados, juntamente com descrições curtas.

Aplicativos Instalados: homectl (opcional), systemd-cryptenroll (se cryptsetup-2.8.4 estiver instalado) e systemd-cryptsetup (se cryptsetup-2.8.4 estiver instalado),

Descrições Curtas

homectl

é uma ferramenta para criar, remover, mudar ou inspecionar um diretório "home" gerenciado por systemd-homed; observe que é inútil para os(as) usuários(as) clássicos(as) do "UNIX" e diretórios "home" que estamos usando no livro LFS/BLFS

systemd-cryptenroll

É usado para registrar ou remover um sistema da criptografia completa do disco, bem como configurar e consultar chaves privadas e chaves de recuperação

systemd-cryptsetup

Anexa ou remove um dispositivo de bloco criptografado

pam_systemd.so

é um módulo "PAM" usado para registrar sessões de usuário(a) com o gerenciador de "login" do systemd, systemd-logind