Obtenha endereços IP / endereços locais no Arch Linux

1

Até agora, meus scripts de rede usavam hostname -i , mas depois de uma atualização recente, o comando começou a gerar um erro: hostname: gethostbyname: Unknown host .

Agora eu não sei ... devo procurar um novo comando como ip ? Ou isso é um problema comum? Eu não consigo achar isso mencionado em nenhum lugar. Eu usaria ip , mas não consigo descobrir uma maneira de exibir dois IPs ao mesmo tempo. Por exemplo, quando ambas as minhas interfaces estão conectadas (eth e wlp).

Alguma sugestão?

    
por Areuz 12.12.2016 / 19:34

1 resposta

1

A mesma coisa aconteceu comigo hoje. Eu verifiquei / checksummed que o arquivo / usr / bin / hostname não mudou recentemente.

Eu usei a saída de strace para arquivos abertos (excluindo "No Such Files" em arquivos de $ PATH):

$ strace hostname -i |& grep open | grep -v "No such file"
open("/usr/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/etc/host.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 3
open("/usr/lib/libnss_mymachines.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/libcap.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/librt.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/libnss_resolve.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = 4

A inspeção e comparação um por um com os backups incrementais dos últimos dias mostrou que o /etc/nsswitch.conf mudou de sua versão anterior em 30 de setembro de 2015 em 10 de dezembro de 2016.

Um diff lado-a-lado mostra as diferenças (lado esquerdo anterior e restaurado, lado direito mais recente e backup):

$ diff -y /etc/nsswitch.conf /etc/nsswitch.conf.bck | grep \|
passwd: files                                                 | passwd: compat mymachines systemd
group: files                                                  | group: compat mymachines systemd
shadow: files                                                 | shadow: compat
hosts: files dns myhostname                                   | hosts: files mymachines resolve [!UNAVAIL=return] dns myhostn

Restaurar o /etc/nsswitch.conf anterior resolve o problema e "hostname -i" retorna os IPs dados pelas interfaces como de costume. Você deve fazer o backup da última, apenas no caso.

Atualização: Após o bug que eu arquivei ( link ), o mantenedor do pacote systemd Dave Reisner apontou que o problema só ocorre quando o sistema resolvido daemon não funciona. Eu verifiquei e está correto. Para que o novo /etc/nsswitch.conf funcione:

systemctl enable systemd-resolved

é necessário.

De acordo com a saída "top", isso adiciona um tamanho de residência de cerca de 4m. Alternativamente, pode-se continuar com a linha anterior sem o systemd-resolvido.

    
por 12.12.2016 / 22:37