用預定義的靜態 IP 和主機名 (%pre) 啟動 CentOS 7 並在 KS 中使用,可能嗎?
我不知道這是否可能,但無論如何都會問。
我正在嘗試使用 CentOS 7 啟動我們更新的伺服器。到目前為止,我的大部分工作都在工作,但是由於某種原因,如果我在我的 Kickstart 腳本的 %pre 部分中使用變數,那麼它根本不會被解析到配置中. 因此,我開始認為這甚至不可能?
這是我在 Kickstart 的 %pre 部分中的內容:
%pre --log /tmp/pre-install.log hostname=serverA120 ip=100.110.120.130 IFS=. read ip1 ip2 ip3 ip4 <<< "$ip"
比在 Kickstart 期間它應該使用上面填寫的資訊:
network --bootproto=static --device=eth0 --gateway=100.110.$ip3.1 --ip=$ip --nameserver=1.1.1.1 --netmask=255.255.255.0 network --hostname=$hostname.example.com
在 %post 部分,我還嘗試使用 %pre 中的變數:
sed -i'' -e '/HOSTNAME=/d' /etc/sysconfig/network echo HOSTNAME=$hostname.example.com >> /etc/sysconfig/network echo GATEWAY=100.110.$ip3.1 >> /etc/sysconfig/network echo BOOTPROTO=static >> /etc/sysconfig/network-scripts/ifcfg-eth0 echo IPADDR=$ip >> /etc/sysconfig/network-scripts/ifcfg-eth0 echo NETMASK=255.255.255.0 >> /etc/sysconfig/network-scripts/ifcfg-eth0 echo BROADCAST=100.110.$ip3.255 >> /etc/sysconfig/network-scripts/ifcfg-eth0 echo NETWORK=100.110.$ip3.0 >> /etc/sysconfig/network-scripts/ifcfg-eth0 echo GATEWAY=100.110.$ip3.1 >> /etc/sysconfig/network-scripts/ifcfg-eth0 echo $hostname.example.com >> /etc/hostname sudo hostnamectl set-hostname $hostname.example.com
在我無法再訪問伺服器後,我物理檢查了 ifcfg-eth0,它顯示以下內容:
IPADDR= BROADCAST=100.110..255 NETWORK=100.110..0 GATEWAY=100.110..1
我還檢查了 /etc/hostname:
$hostname.example.com
所以變數不會被解析到 Kickstart 中。我做錯了什麼還是根本不可能?可能有替代解決方案嗎?
當然,我可以在前後手動調整所有行,但我想讓這盡可能簡單,而無需手動編輯所有內容。換句話說,我只想填寫 2 行,其餘的將根據需要進行配置。從長遠來看,這將使啟動多台伺服器的事情變得更容易。
我不知道我做錯了什麼,但是檢查 ifcfg-eth0 和主機名,它清楚地表明預先輸入的變數沒有被使用?但就像我上面說的,也許這根本不可能,或者我使用不正確。
不,我不想使用 DHCP 或類似的。因為之後我仍然需要手動更改它。我只想在 %pre(主機名和 ip)中填寫前兩行,並在完整安裝期間自動使用它(以及在 %post 中)。
您不能將一個塊中的變數與另一個塊一起使用,因為它們是在不同時間點執行的單獨腳本;這些程式碼部分將被拆分並放入單個單獨的文件中,然後按照您編寫它們的順序執行(甚至不是),這意味著如果您有 3 %pre 部分,它們不一定會按順序執行,所以請保持考慮到。此外,您不能將這些變數用於 kickstart 的任何其他部分。
一個想法是使用衛星文件來保存你的數據(就像你
/tmp/file
在你的文件中寫一個%pre
然後把它放回你的%post
……你可以做的那樣)我走了一條不同的路,我真的為 anaconda 創建了一個完整的誘餌和開關,它允許我在磁碟上放置一個假的 kickstart,然後執行一個腳本來替換變數,比如 sed
%%IP%%
或%%HOSTNAME%%
使用 sed。無論如何,你不需要做任何這些,你可以把設置
ip1 ip2 ip3 ip4
放在你的塊的頂部%post
,這樣你就可以設置變數了。然後您可以像之前在您的文章塊中所做的那樣簡單地編寫您的文件。
跳過 kickstart 中的“network”行並直接使用
network --activate [--device=DEVICENAME]
(如果您有多個並且只想使用 1,則添加 –device)以下僅供參考:
使用 %pre %post 時,您無法訪問 BASH,它只是 Bourne shell。
kickstart 允許您在 %pre/%post 行中使用“–interpreter=/bin/bash”,但在過去的大量測試之後,我發現它很不穩定並且不能一直工作,所以通常我會添加shebang就在街區的第一行。
%post --log=/root/post.log #!/bin/bash ## [... code ...] %end
這應該允許您使用 BASH 而不是 Bourne shell。