Problem
Ubuntu在安裝過程中,會在%pre後如下圖的階段去設定網路:
而我們曾遇過幾次DHCP取不到的問題。本篇文章主要告訴你,如何去設定DHCP Timeout。
Diagnostic Result
首先是確認Ubuntu使用什麼工具去透過DHCP取得IP,通常都是使用dhclient。檢查/var/log/syslog可以確定是dhclient:(以下的圖有將timeout改為40秒)
接著就是確認dhclient設定檔。通常dhclient設定檔會放在/etc/dhclient.conf或/etc/dhcp/dhclient.conf中,而在整個安裝過程中,你可能會找到三個dhclient設定檔:
- /mnt/etc/dhcp/dhclient.conf
- /target/etc/dhcp/dhclient.conf
- /etc/dhclient.conf
第一個是安裝來源(如光碟)所攜帶的;第二個是安裝完系統上的;第三個則是安裝環境使用的,必須kickstart中network使用dhcp才會出現。此外,檢查/etc/dhclient.conf可以發現預設的timeout為30秒。
How to resolve?
使用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去偵測網路,必須注意執行的角色。我們來討論以下兩種情況:
- 無chroot: %post有宣告–nochroot。
- 有chroot: %port沒宣告–nochroot的預設值。
在第一種情況下,經過試驗且沒特別指定就是30秒,可以透過-cf參數指定dhclient.conf;而第二種情況下,會使用/target/etc/dhcp/dhclient.conf中的timeout,預設為300秒。
留言
張貼留言