Ubuntu 11.10 dhclient-enter-hook.d scripts não invocados

1

Eu tenho uma caixa com o Ubuntu 11.10 instalado. E a caixa foi configurada para obter o IP e o nome do host do dhcp.

Nós configuramos os scripts na pasta /etc/dhcp/dhclient-enter-hooks.d/. Mas esses scripts não foram chamados / executados. Eu tenho scripts semelhantes em outra caixa, que tem o Ubuntu 10.04 instalado e scripts de gancho são executados sem problemas. Uma diferença é que na caixa 11.10 o NetworkManager está instalado.

# ps -ef | grep dhclient
root       746   695  0 03:52 ?        00:00:00 /sbin/dhclient -d -4 -sf /usr/lib/NetworkManager/nm-dhcp-client.action -pf /var/run/dhclient-eth0.pid -lf /var/lib/dhcp/dhclient-559273da-a027-458e-b124-bdbb4976ee17-eth0.lease -cf /var/run/nm-dhclient-eth0.conf eth0

Como testei que o script em /etc/dhcp/dhclient-enter-hooks.d não estava sendo executado? Eu coloquei um script simples "mytest" que tem código abaixo em /etc/dhcp/dhclient-enter-hooks.d. O arquivo /tmp/enter-hook.out nunca foi gerado.

#!/bin/sh
echo "this is test file to test dhclient-enter-hook" > /tmp/enter-hook.out

Snip do meu / etc / network / interfaces

# cat /etc/network/interfaces 
auto lo
iface lo inet loopback

auto eth0 inet dhcp
    
por rouserajesh 17.05.2012 / 14:54

2 respostas

2

Como esta questão não é realmente uma questão, vou assumir que a pergunta é "como posso fazer com que o dhclient- {enter, exit} -hooks seja executado?" A resposta curta é que você não pode sem algum trabalho. Veja este bug para uma boa discussão sobre o assunto e algumas soluções.

Como sugerido pelo OP, o gerenciador de rede (NM) é o problema. Aqui está um exemplo de uma invocação de dhclient por NM:

/sbin/dhclient -d -4 -sf /usr/lib/NetworkManager/nm-dhcp-client.action \
    -pf /var/run/dhclient-wlan1.pid -lf <lease file> \
    -cf /var/run/nm-dhclient-wlan1.conf wlan1

Observe o "-sf /usr/lib/NetworkManager/nm-dhcp-client.action". Este é um programa especial fornecido pelo NM, que substitui o script padrão do dhclient, que está em / sbin / dhclient-script. O script padrão se comporta como você esperaria e está documentado em "man dhclient-script".

O nm-dhcp-client.action é um programa em C, então você precisará da fonte para descobrir o que está fazendo. Mas, olhando na fonte, você notará que não executa nenhum dos scripts de entrada / saída diretamente por padrão.

Provavelmente a melhor solução (menos hacky) é escrever um script /etc/NetworkManager/dispatcher.d que execute os scripts de entrada / saída quando a interface aparecer e se as variáveis de ambiente DHCP * existe (veja man NetworkManager). Como você só pode passar variáveis que o NM fornece ao script dispatcher, isso pode não ser uma solução totalmente transparente.

Uma alternativa não testada, hacky, mas mais fácil seria renomear /usr/lib/NetworkManager/nm-dhcp-client.action e colocar um script em seu lugar que fosse exec incondicionalmente no recém-nomeado nm-dhcp-client.action . Você pode copiar uma grande parte do / sbin / dhclient-script que executa os ganchos enter / exits, então deve ser bem simples criar o script. Isso deve funcionar com scripts de gancho preexistentes, enquanto a solução anterior pode não (devido à indisponibilidade das variáveis esperadas).

O NM realmente já deveria estar rodando os hooks porque parece que alguns pacotes não funcionam como esperado sem ele.

    
por crass 08.08.2012 / 11:41
0

acabou de se deparar com uma resolução que parece não relacionada ao problema - ter a interface não declarada corretamente em /etc/network/interfaces fez a diferença. Nenhum dos scripts hook foi chamado e eu estava prestes a prosseguir com a solução envolvendo o NetworkManager: Certifique-se de ter algo assim em /etc/network/interfaces

# interfaces(5) file used by ifup(8) and ifdown(8)
# these two lines are here by default
auto lo
iface lo inet loopback

# this was missing in my case and while the address was retrieved via DHCP, additional 
# options like ntp-servers were never retrieved:
auto eth0
iface eth0 inet dhcp
    
por andyh 04.05.2014 / 23:17