Недавно мы столкнулись с проблемой, из-за которой ipconfig больше не может подключиться к сети во время пост-инсталляционной части нашего файла кикстарта anaconda.
Это мешает нашим ящикам устанавливать марионетку, и их приходится вручную настраивать при загрузке ящика. Это огромная боль, которая уводит нас от полной автоматизации нашей инфраструктуры. Мы небольшая компания и не можем позволить себе выполнять такие задачи вручную.
Я пробовал использовать как новые ip package
и nmcli
чтобы получить информацию о сети.
ip
фактически собирает информацию во время процесса после установки, но в это время IP-адрес отсутствует. nmcli
вообще ничего не подбирает. Ниже приведен скриншот того, что тянет ip address
во время пост-установки (так как на этом этапе вы не видите IP-адрес).
Ниже представлена пошаговая игра за игрой того, чего я пытаюсь достичь.
Ниже приведен мой файл кикстарта с различными методами, которые я пробовал (извините, это немного беспорядочно, но я буквально бегал туда и сюда, пытаясь заставить работать разные вещи).
install
url --url http://repo1.example.com/centos/7/os/x86_64
lang en_US.UTF-8
keyboard us
timezone --utc America/Vancouver
network --noipv6 --onboot=yes --bootproto=dhcp --activate --device=eth0
authconfig --enableshadow --passalgo=sha512
rootpw --iscrypted ************************************
firewall --enabled --port 22:tcp
selinux --permissive
bootloader --location=mbr --driveorder=vda --append="crashkernel=auth rhgb"
# Disk Partitioning
zerombr
clearpart --all --drives=vda
part / --fstype=ext4 --grow --asprimary --size=200
part swap --size=4096
# END of Disk Partitioning
# Make sure we reboot into the new system when we are finished
reboot
repo --name=base --baseurl=http://repo1.example.com/centos/7/os/x86_64/
# Package Selection
%packages --nobase
@core
wget
NetworkManager
-rsyslog
%end
%pre
echo "------------------------- IP COMMANDS ---------------------"
ip address
ip route
echo "------------------------- IP COMMANDS ---------------------"
%end
%post --log=/root/install-post.log (
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
# PLACE YOUR POST DIRECTIVES HERE
echo "**************************************************"
echo "Converting DHCP scope to static IP address on eth0"
echo "**************************************************"
### NMCLI DOES NOT WORK IN KICKSTART
# IPADDR=`nmcli con show eth0 | grep IP4.ADDRESS | awk '{sub(/IP4.ADDRESS[1]:/,""); print $2}'`
# GATEWAY=`nmcli con show eth0 | grep IP4.GATEWAY | awk '{sub(/IP4.GATEWAY[1]:/,""); print $2}'`
# DNS1=`nmcli con show eth0 | grep "IP4.DNS\[1\]" | awk '{sub(/IP4.DNS[1]:/,""); print $2}'`
# DNS2=`nmcli con show eth0 | grep "IP4.DNS\[2\]" | awk '{sub(/IP4.DNS[2]:/,""); print $2}'`
## LETS TRY IP as IPCONFIG is EOL
IPADDR=`ip address | grep global | awk '{print $2}' | cut -d / -f1`
GATEWAY=`ip route | grep default | awk '{print $2}'`
echo "------------------------- IP COMMANDS ---------------------"
ip address
ip route
echo "------------------------- IP COMMANDS ---------------------"
echo "##### TEST NMCLI"
echo "IP ADDRES: " $IPADDR
echo "GATEWAY: " $GATEWAY
echo "DNS1: " $DNS1
echo "DNS2: " $DNS2
#nmcli con mod eth0 ipv4.dns $DNS1
#nmcli con mod eth0 +ipv4.dns $DNS2
#nmcli con mod eth0 ipv4.addresses $IPADDR
#nmcli con mod eth0 ipv4.dns-search example.com
#nmcli con mod eth0 ipv4.gateway $GATEWAY
#nmcli con mod eth0 ipv4.method manual
echo "************************************"
echo "Network test and to clear ARP caches"
echo "************************************"
ping -c 4 repo1.example.com
echo "************"
echo "Setup Puppet"
echo "************"
/usr/bin/wget "https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs-release-7-12.noarch.rpm"
/usr/bin/rpm -Uvh "puppetlabs-release-7-12.noarch.rpm"
/usr/bin/sed -i "s/yum.puppetlabs.com/repo1.example.com\/puppetlabs/g" /etc/yum.repos.d/puppetlabs.repo
/usr/bin/yum -y --nogpgcheck install puppet
/usr/bin/sed -i 's/\[main\]/\[main\]\nenvironment=infrastructure/g' /etc/puppet/puppet.conf
/usr/bin/echo "server = puppet1.example.com" >> /etc/puppet/puppet.conf
/usr/bin/echo "configtimeout = 30m" >> /etc/puppet/puppet.conf
puppet agent --test # this shouldn't fail
puppet agent --test # this shouldn't fail
puppet agent --test # this shouldn't fail
service puppet start
/usr/sbin/chkconfig puppet on
echo "START NETWORK *********************************"
DEVICE=`route -n | grep '^0.0.0.0' | awk '{print $8}'`
IPADDR=`ifconfig $DEVICE | grep 'inet ' | awk '{print $2}'`
NETMASK=`ifconfig $DEVICE | grep 'inet ' | awk '{print $4}'`
# NETWORK=`ipcalc $IPADDR -n $NETMASK| cut -d = -f2`
GATEWAY=`route -n|grep '^0.0.0.0'| awk '{print $2}'`
HWADDR=`ifconfig $DEVICE|grep 'ether'| awk '{print $2}'`
# UUID=`uuidgen $DEVICE`
cat <<EOF >/etc/sysconfig/network
NETWORKING=yes
HOSTNAME=$HOSTNAME
GATEWAY=$GATEWAY
EOF
cat <<EOF >/etc/sysconfig/network-scripts/ifcfg-$DEVICE
# NAME=$DEVICE
DEVICE=$DEVICE
BOOTPROTO=static
IPADDR=$IPADDR
NETMASK=$NETMASK
ONBOOT=yes
GATEWAY=$GATEWAY
HWADDR=$HWADDR
DNS1=10.1.1.23
DNS2=10.1.1.24
# UUID=$UUID
EOF
echo "END NETWORK *********************************"
)
%end