Preciso descobrir dinamicamente o primeiro endereço IP não utilizado em 192.168.0.0/24. Isso ocorre em uma rede pequena com um único switch, sem host executando nenhum serviço DNS ou DHCP. Basicamente, todo host atribui um IP estático. Eu preciso de uma maneira (em uma %post
seção de arquivo de kickstart do RHEL) para descobrir qual é um endereço IP estático disponível e, em seguida, atribuí-lo a mim mesmo.
Isto é o que eu descobri até agora:
#!/bin/bash
USED_ADDRESSES_ARRAY=()
for address in `nmap -sT 192.168.0.0/24 | grep -B1 "Host is up" | grep 192 | awk '{print $5;}' | awk -F "." '{print $4;}'`
do
USED_ADDRESSES_ARRAY+=($address)
done
ip_address_to_assign=0
for target_address in {1..253}
do
if [ $target_address -ne ${USED_ADDRESSES_ARRAY[$target_address - 1]} ]
then
ip_address_to_assign=$target_address
break
fi
done
echo $ip_address_to_assign
cat > /tmp/output.txt << EOF3
DEVICE="eth0"
`grep HWADDR /etc/sysconfig/network-scripts/ifcfg-em1`
IPV6INIT="no"
NM_CONTROLLED="yes"
ONBOOT="yes"
IPADDR=192.168.0.$ip_address_to_assign
NETMASK=255.255.255.0
GATEWAY=192.168.0.254"
EOF3
cat /tmp/output.txt
Quando gosto do que tenho, mudo as /tmp/output.txt
referências para apontar ifcfg-eth0
e coloco na %post
seção do ks.cfg.
Responder1
Você poderia simplificar com algo assim:
for i in {1..253}; do
ping -c 1 192.168.0.$i >/dev/null;
if [ $? -ne 0 ]; then
echo "192.168.0.$i is unused";
break;
fi;
done