Назад | Перейти на главную страницу

Конфигурация сети во время кикстарта

Недавно мы столкнулись с проблемой, из-за которой ipconfig больше не может подключиться к сети во время пост-инсталляционной части нашего файла кикстарта anaconda.

Это мешает нашим ящикам устанавливать марионетку, и их приходится вручную настраивать при загрузке ящика. Это огромная боль, которая уводит нас от полной автоматизации нашей инфраструктуры. Мы небольшая компания и не можем позволить себе выполнять такие задачи вручную.

Я пробовал использовать как новые ip package и nmcli чтобы получить информацию о сети.

ip фактически собирает информацию во время процесса после установки, но в это время IP-адрес отсутствует. nmcli вообще ничего не подбирает. Ниже приведен скриншот того, что тянет ip address во время пост-установки (так как на этом этапе вы не видите IP-адрес).

Ниже представлена ​​пошаговая игра за игрой того, чего я пытаюсь достичь.

  1. Настройте сеть для поиска аренды DHCP (возможен только один вариант)
  2. Используйте какой-либо сетевой пакет, чтобы указать IP-адрес, шлюз и т. Д.
  3. Проанализируйте данные в bash, а затем переместите их в мой интерфейсный файл eth0.
  4. Установите марионетку до завершения кикстарта, чтобы ее можно было запустить самостоятельно после перезагрузки.

Ниже приведен мой файл кикстарта с различными методами, которые я пробовал (извините, это немного беспорядочно, но я буквально бегал туда и сюда, пытаясь заставить работать разные вещи).

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