Я пытаюсь создать кикстарт для автоматизации процедуры установки, но когда установка завершается, я проверяю результат, но ничего не произошло. Я пытаюсь отладить его, помещая операторы чтения в разные места, чтобы увидеть, все ли работает. Кажется, что все переменные есть, но когда функция setMask выполняется, она перезапускается. Любая помощь будет принята с благодарностью.
%pre
#!/bin/sh
curTTY=`tty`
exec < $curTTY > $curTTY 2> $curTTY
echo 'Specify the hostname to assign: '; read hostname
echo -n "Enter ip of ips (separated by spaces): "; read ip
echo -n "Enter ipv6 address: "; read ipv6
#Saving data
echo $hostname > /tmp/hostname
echo $ip > /tmp/ip
echo $ipv6 > /tmp/ipv6
%end
%post --nochroot
#!/bin/sh
curTTY=`tty`
exec < $curTTY > $curTTY 2> $curTTY
#Transfering data to be used in the post phase
ip=$(cat /tmp/ip)
ipv6=$(cat /tmp/ipv6)
hostname=$(cat /tmp/hostname)
numips=$(echo $ip | wc -w)
numberOfIpAddresses () {
if [ numips > 1 ]; then
ips=$(echo $ip | awk '{$1=""; print}' | cut -c 2-)
ip=$(echo $ip | awk '{print $1}')
fi
}
ipv6GW () {
echo $ipv6 | awk -F":" '{$(NF--); print}' | while read $output
do
do
gwv6="$gwv6:$output"
done
gwv6="$gwv6:1"
}
numberOfIpAddresses
ipv6GW
setGateway () {
case prefix in
22|23|24)
gateway=$(echo $ip | cut -d. -f1-3)".1"
;;
25)
if [ firstOcted -ne 65 ] || [ thirdOcted -eq 161 ]; then
gateway=$(echo $ip | cut -d. -f1-3)".129"
elif [ thirdOcted -eq 162 ]; then
gateway=$(echo $ip | cut -d. -f1-3)".129"
elif [ thirdOcted -eq 162 ]; then
gateway=$(echo $ip | cut -d. -f1-3)".1"
fi
;;
26)
if [ firstOcted -ne 64 ]; then
gateway=$(echo $ip | cut -d. -f1-3)".65"
elif [ firstOcted -ne 69 ]; then
gateway=$(echo $ip | cut -d. -f1-3)".129"
fi
;;
esac
}
setMask () {
#Extracting necesery octeds
firstOcted=$(echo $ip | cut -d. -f1)
thirdOcted=$(echo $ip | cut -d. -f3)
case firstOcted in
8)
prefix=24
setGateway
64)
echo "Aqui en setMask opcion 64"
read algo
if [ thirdOcted -ne 7 ] && [ thirdOcted -ne 19 ] && [ thirdOcted -ne 26 ] && [ thirdOcted -ne 30 ] && [ thirdOcted -ne 31 ]; then
prefix=24
setGateway
elif [ thirdOcted -ne 7 ] || [ thirdOcted -ne 19 ]; then
prefix=25
setGateway
elif [ thirdOcted -ne 30 ] || [ thirdOcted -ne 31 ]; then
prefix=26
setGateway
fi
setGateway
fi
;;
65)
if [ thirdOcted -ge 164 ] && [ thirdOcted -le 175 ]; then
prefix=22
setGateway
elif [ thirdOcted -ge 176 ] && [ thirdOcted -le 185 ]; then
prefix=23
setGateway
elif [ thirdOcted -ge 161 ] && [ thirdOcted -le 162 ]; then
prefix=25
setGateway
elif [ thirdOcted -ge 187 ] && [ thirdOcted -le 190 ]; then
prefix=24
setGateway
fi
;;
69)
if [ thirdOcted -ge 116 ] && [ thirdOcted -le 123 ]; then
prefix=22
setGateway
elif [ thirdOcted -ge 110 ] && [ thirdOcted -le 115 ]; then
prefix=24
setGateway
elif [ thirdOcted -ge 98 ] && [ thirdOcted -le 109 ]; then
prefix=24
setGateway
fi
;;
*)
echo "The ip was wrongly typed" read ip
echo -n "Type the prefix to use: "
read prefix
echo -n "Type the gateway: "
read gateway
numberOfIpAddresses
ipv6GW
;;
esac
}
setMask
counter=0
ls /sys/class/net/ | grep ^e | while read output;
do
echo 'SUBSYSTEM=="net", ACTION=="add", KERNEL=="'$output'", NAME="eth'$counter'"' \
>> /etc/udev/rules.d/70-persistent-net.rules;
((counter++));
done
if [ -f /etc/debian_version ]; then
else
echo DEVICE=eth0 >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo BOOTPROTO=none >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo ONBOOT=yes >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo PREFIX=$prefix >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo IPADDR=$ip >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo GATEWAY=$gateway >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo DNS1=69.60.123.201 >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo DNS2=69.60.125.254 >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo #IPv6 Conf >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo IPV6INIT=yes >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo IPV6ADDR=$ipv6 >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo IPV6_DEFAULTGW=$gwv6 >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo IPV6ADDR=$ipv6 >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo IPV6_DEFAULTGW=$gwv6 >> /etc/sysconfig/network-scripts/ifcfg-eth0
if [ -n ips ]; then
counter=0
for subip in ips; do
cat ifcfg-eth0 | sed 's/DEVICE=eth0/DEVICE=eth0:$counter/' | sed 's/IPADDR=$ip/IPADDR=$subip/' >> ifcfg-eth0:$counter
done
%end
Судя по функциям, кажется, что --no-chroot
вариант может вызвать проблему в этом случае. В качестве альтернативы путь, по которому находится корневой образ, может потребоваться добавить к некоторым путям, по которым перенаправляются данные, обычно что-то вроде /mnt/sysimage/root
с CentOS. Таким образом, можно было бы установить такую переменную и добавить ее при необходимости
rootfs=/mnt/sysimage/root
...
echo DEVICE=eth0 >> $rootfs/etc/sysconfig/network-scripts/ifcfg-eth0
...
Помимо удаления --no-chroot
опция добавления опции журнала может помочь получить больше информации об ошибке.
%post --log=/path/to/post/install/log.log
В дополнение к журналированию, если необходимы chrooted и non-chrooted части сообщения, можно иметь несколько %post
разделы как из Redhat здесь. В случаях со сложными %post
Разделы, разделяющие задачи на несколько почтовых сценариев с отдельными журналами, могут быть полезны для определения основной причины проблемы с файлами кикстарта.
Помимо расщепления %post
если у вас есть доступ к файловому серверу или общему хранилищу какого-либо типа, вы можете писать сценарии, содержащие функции, используемые в публикации, затем монтировать / копировать их во время раздела публикации и вызывать соответствующие функции. Это даст вам возможность протестировать некоторые скрипты без необходимости постоянно перестраивать / переустанавливать с файлом кикстарта во время отладки, что может сэкономить много времени.