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
Esse pacote é conhecido por construir e
funcionar adequadamente usando-se uma plataforma LFS 13.0.
Informação do Pacote
Dependências do "systemd"
Recomendadas
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.
Linux-PAM-1.7.2 e Polkit-127 (tempo
de execução)
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
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
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
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
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
|