Ubuntu-server在執行kickstart安裝時的DHCP Timeout設定

Ubuntu在安裝過程中,會在%pre後如下圖的階段去設定網路:

而我們曾遇過幾次DHCP取不到的問題。本篇文章主要告訴你,如何去設定DHCP Timeout。

首先是確認Ubuntu使用什麼工具去透過DHCP取得IP,通常都是使用dhclient。檢查/var/log/syslog可以確定是dhclient:(以下的圖有將timeout改為40秒)

接著就是確認dhclient設定檔。通常dhclient設定檔會放在/etc/dhclient.conf或/etc/dhcp/dhclient.conf中,而在整個安裝過程中,你可能會找到三個dhclient設定檔:

  1. /mnt/etc/dhcp/dhclient.conf
  2. /target/etc/dhcp/dhclient.conf
  3. /etc/dhclient.conf

第一個是安裝來源(如光碟)所攜帶的;第二個是安裝完系統上的;第三個則是安裝環境使用的,必須kickstart中network使用dhcp才會出現。此外,檢查/etc/dhclient.conf可以發現預設的timeout為30秒。

使用preseed

首先在isolinux.cfg的append中加入preseed檔案路徑:(以檔名test.seed為例)

append file=/cdrom/test.seed  initrd=/install/initrd.gz ks=cdrom:/ks.cfg
而test.seed內要包含以下設定:
d-i netcfg/dhcp_timeout					string 	60
d-i netcfg/dhcpv6_timeout				string	60
在安裝過程中,可以去檢查/etc/dhclient.conf,會改成你所設定的值:

使用udhcpc

假如不想透過preseed的方式,可以透過udhcpc。udhcpc是BusyBox內建的DHCP client程式,你可以這樣去設定timeout:

udhcpc -i eno2 -T 90 -n
-T是timeout;-n則是代表發生錯誤後就離開。

使用dhclient

在經過installer的網路設定階段後,dhclient套件就會被放到安裝系統中。而如果要使用dhclient去偵測網路,必須注意執行的角色。我們來討論以下兩種情況:

  1. 無chroot: %post有宣告–nochroot。
  2. 有chroot: %port沒宣告–nochroot的預設值。

在第一種情況下,經過試驗且沒特別指定就是30秒,可以透過-cf參數指定dhclient.conf;而第二種情況下,會使用/target/etc/dhcp/dhclient.conf中的timeout,預設為300秒。