Execute apenas o /etc/network/if-up.d-script específico para interfaces específicas

2

Eu gostaria de executar um script de rede ao criar uma interface específica (por exemplo, eth0) invocando

ifup eth0

O script só deve ser executado ao exibir eth0. Minha abordagem foi escrever o script (chamado script.sh ) colocá-lo em algum lugar como executável e, em seguida, escrever em /etc/network/interfaces :

auto eth0
iface eth0 inet manual
up /path/to/script.sh

Existe uma maneira mais elegante de fazer isso? Posso usar o ambiente de script /etc/network/if-up.d de alguma forma? Tanto quanto eu sei que todos scripts nesta pasta serão executados não importando qual interface foi criada.

    
por fragwürdig 04.09.2015 / 18:24

1 resposta

4

Quando os scripts em ifup.d são chamados, uma enorme seleção de variáveis de ambiente é passada para ele, relacionada à configuração da interface específica. Então, por exemplo, se a configuração da sua interface parecesse assim.

iface eth0 inet manual
  dofoo on

Em seguida, seu script receberia uma variável como $IF_DOFOO com um valor de on .

Sabendo que você poderia colocar algo no início do seu script como

#!/bin/bash

if [ -z "$IF_DOFOO" ] ; then
    # this script only applies to interface flagged as dofoo
    exit 0
fi
... Doing the foo.

Com isso, esse script pode ser facilmente colocado em if-up.d.

É claro que você também pode simplesmente olhar para o valor $IFACE e codificar seu script para executar somente uma interface específica ou combiná-lo com alguma outra fonte externa de configuração. Veja os outros scripts em if-up.d para alguns exemplos do que você pode fazer.

    
por 04.09.2015 / 18:57