Miúdos de clonagens manuais de partições (III)

Em Miúdos de clonagens manuais de partições (II), sugeri, para regerar o machine-id, deletar /etc/machine-id e reiniciar. O systemd recriaria-o com o conteúdo de /var/lib/dbus/machine-id. Este método funciona no openSUSE 12.3, mas não no Fedora 18. Nele, existem alguns problemas.

1) /var/lib/dbus/machine-id não existe mais. D-Bus e demais códigos que dependem do machine-id foram atualizados para usarem o arquivo presente em /etc.

2) /etc é somente leitura quando o código que regera-o durante o boot é executado (machine_id_setup()), ou seja, a criação automática não funcionará.

3) Ao deletar /etc/machine-id e recriá-lo no ambiente do SystemRescueCd, o label do SELinux ficará errado e o arquivo ficará inacessível para os daemons quando o sistema for carregado.

O sintoma de /etc/machine-id inacessível se manifestará (dentre outras formas) assim:

# systemctl status systemd-journald.service
systemd-journald.service - Journal Service
   Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static)
   Active: failed (Result: start-limit) since Sex 2013-06-21 15:03:26 BRT; 1min 3s ago
     Docs: man:systemd-journald.service(8)
           man:journald.conf(5)
  Process: 236 ExecStart=/usr/lib/systemd/systemd-journald (code=exited, status=1/FAILURE)
   Status: "Shutting down..."

# grep avc /var/log/audit/audit.log
[    4.052971] type=1400 audit(1371838098.883:4): avc:  denied  { read } for  pid=219 comm="systemd-journal" name="machine-id" dev="sda1" ino=19136653 scontext=system_u:system_r:syslogd_t:s0 tcontext=system_u:object_r:file_t:s0 tclass=file

Resolução:

- Apenas substituir o conteúdo de /var/lib/dbus/machine-id se o arquivo existir (é considerado obsoleto) e não for um link simbólico (instalações novas usam um link apontando para /etc/machine-id).

- Não recriar /etc/machine-id dentro do SystemRescueCd. Ao invés disso, apenas apagar seu conteúdo, mantendo o arquivo original e consequentemente o rótulo do SELinux (system_u:object_r:etc_t:s0).

- O erro da instalação do openSUSE 12.3 não é mais consertado preventivamente (recriar /etc/machine-id quando não alteramos o machine-id). Faça manualmente antes de clonar a imagem.

- Rodar systemd-machine-id-setup via chroot executa o mesmo código que seria executado pelo init (machine_id_setup()) e importa o machine-id de /var/lib/dbus/machine-id quando este existir.

Comandos:

# [[ -e /mnt/fedora/var/lib/dbus/machine-id && ! -L /mnt/fedora/var/lib/dbus/machine-id ]] && dbus-uuidgen >/mnt/fedora/var/lib/dbus/machine-id
# >/mnt/fedora/etc/machine-id
# chroot /mnt/fedora systemd-machine-id-setup

Comentários