差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
osprovision:kickstart:rhel_centos:apply_driverdisk_on_centos6 [2016/10/21 14:37]
tony [Problem]
osprovision:kickstart:rhel_centos:apply_driverdisk_on_centos6 [2023/06/25 09:48] (目前版本)
行 1: 行 1:
 {{tag>​RHEL CentOS kickstart Os_Provision driverdisk}} {{tag>​RHEL CentOS kickstart Os_Provision driverdisk}}
-====== Apply DriverDisk on RHEL/​CentOS6(Working) ​======+====== Apply DriverDisk on RHEL/​CentOS6 ======
 ===== Problem ===== ===== Problem =====
-在系統自動安裝部屬時,可能有以下原因需要更新驅動:​+在系統自動安裝部屬時,可能有以下原因需要更新驅動:​
   - 安裝光碟搭載的kernel版本不支援新硬體。   - 安裝光碟搭載的kernel版本不支援新硬體。
   - 安裝光碟搭載的kernel版本過舊。   - 安裝光碟搭載的kernel版本過舊。
-最常遇到的問題,莫過於在更新網卡或磁碟陣列驅動了。如下圖:​\\+最常遇到的問題,莫過於在更新網卡或磁碟陣列驅動了。如果使用kickstart自動部屬,在發生硬體找不到時,應會出現如下圖錯誤:\\
 {{:​osprovision:​kickstart:​rhel_centos:​no_driver_found.png|}}\\ {{:​osprovision:​kickstart:​rhel_centos:​no_driver_found.png|}}\\
-本篇主要分享我使用的方法,有以下幾個步驟:​+本篇主要分享我解決此問題的方法,有以下幾個步驟:​
   - 準備driver rpm。   - 準備driver rpm。
   - 製作driverdisk。   - 製作driverdisk。
行 68: 行 68:
   - 重新打包iso。   - 重新打包iso。
 你也可以選擇將mkdriverdisk.sh產生的iso解開後,丟到安裝光碟的iso中。至於解開iso與打包iso,要自行去網路上找方法,非本篇重點。 你也可以選擇將mkdriverdisk.sh產生的iso解開後,丟到安裝光碟的iso中。至於解開iso與打包iso,要自行去網路上找方法,非本篇重點。
-===== 修改isolinux.cfg或grub.cfg ​=====+===== 指定driverdisk ​=====
 從driverdisk程式碼中可以得知,可以使用nfs、ftp、http存取driverdisk。但如果你需要的是載入網卡驅動呢?​ 因此我是在boot參數中,加入dd或driverdisk:​ 從driverdisk程式碼中可以得知,可以使用nfs、ftp、http存取driverdisk。但如果你需要的是載入網卡驅動呢?​ 因此我是在boot參數中,加入dd或driverdisk:​
 <code bash> <code bash>
行 74: 行 74:
 </​code>​ </​code>​
 如果你在有兩台光碟機以上的機器,必須明確知道是使用sr0或sr1;也許你會問,那怎不用dd=cdrom呢?​ 這我也試過,會出現以下訊息等待確認:​\\ 如果你在有兩台光碟機以上的機器,必須明確知道是使用sr0或sr1;也許你會問,那怎不用dd=cdrom呢?​ 這我也試過,會出現以下訊息等待確認:​\\
-{{:​osprovision:​kickstart:​rhel_centos:​driver_disk_cofirmation.png|}}+{{:​osprovision:​kickstart:​rhel_centos:​driver_disk_cofirmation.png|}}\\ 
 +\\ 
 +還有另外一個方式是在kickstart answer file中設定driverdisk位置:​ 
 +<code bash> 
 +driverdisk --source=path:/​dev/​sr0 
 +</​code>​ 
 +比起修改boot config內容,使用answer file的方式比較有彈性。
  
 ===== 調整kickstart檔案 ===== ===== 調整kickstart檔案 =====
行 100: 行 106:
 fi fi
 </​code>​ </​code>​
-而在安裝完成重新啟動後,你可能就會遇到更新後的驅動沒被載入的問題。我採用以下方式:+而在安裝完成重新啟動後,你可能就會遇到更新後的驅動沒被載入的問題。針對載入網卡驅動的問題,網路上有些做法;首先是編輯modprobe conf,在你知道有幾張網卡的提下,你可以在/​etc/​modprobe.d/​anaconda.conf中加入類似以下內容:
 <code bash> <code bash>
-cat /​etc/​sysconfig/​modules/​kickstart.modules+alias eth0 ixgbe 
 +alias eth1 ixgbe
 </​code>​ </​code>​
 +假如你不管網卡名稱或數量,你也不曉得更新的模組是不是網卡,另外一個選擇是新增/​etc/​sysconfig/​modules/​anaconda.modules檔案,在裡面載入那些ko檔:​
 <code bash> <code bash>
 #!/bin/sh #!/bin/sh
 /​sbin/​modprobe ixgbe /​sbin/​modprobe ixgbe
 </​code>​ </​code>​
 +然而在使用第二個方法時,我又想到一些問題:​
 +  - 不同版本驅動可能會不同位置,我要去覆蓋掉原本的嗎?​
 +  - 假如新的驅動在原本的系統就不存在,使用modprobe不會有問題嗎?​
 +我認為應交由kernel本身自行去判別驅動狀態,包含驅動相依性;因此我透過了depmod指令,讓系統自行去判別目前kernel modules狀態。我在answer file中,加入一個post區塊,並讓它在chroot下去執行depmod:​
 +<code bash>
 +%post
 +DD=/root/DD
 +if [ -e "​${DD}"​ ]; then
 + logger "setup update drivers"​
 + cp -r ${DD}/lib/* /lib
 + /​sbin/​depmod -r
 +fi
 +%end
 +</​code>​
 +按照以上流程,就能夠更新驅動並安裝完成系統。這部分試驗過ko來源與原本相同與不同兩種案例,都可以正常使用到最新版本驅動。
 ===== 其它 ===== ===== 其它 =====
 我的測試環境是在CentOS6.6上。為了方便建置測試環境,撰寫了以下腳本。 我的測試環境是在CentOS6.6上。為了方便建置測試環境,撰寫了以下腳本。
行 131: 行 154:
 yum -y install rpm-build gcc createrepo mkisofs yum -y install rpm-build gcc createrepo mkisofs
 </​code>​ </​code>​
 +
 ===== Reference ===== ===== Reference =====
   * [[http://​www.emeneker.com/​modx/​index.php?​id=26|Creating a RHEL6 driverdisk for kickstarts]]   * [[http://​www.emeneker.com/​modx/​index.php?​id=26|Creating a RHEL6 driverdisk for kickstarts]]
行 139: 行 163:
   * [[http://​serverfault.com/​questions/​374870/​how-to-build-a-driver-disk-for-an-anaconda-install-centos-6|How to build a driver disk for an anaconda install (CentOS 6)]]   * [[http://​serverfault.com/​questions/​374870/​how-to-build-a-driver-disk-for-an-anaconda-install-centos-6|How to build a driver disk for an anaconda install (CentOS 6)]]
   * [[https://​www.ndchost.com/​wiki/​load-modules-on-boot-centos6|Load kernel modules on boot CentOS6]]   * [[https://​www.ndchost.com/​wiki/​load-modules-on-boot-centos6|Load kernel modules on boot CentOS6]]
 +  * [[http://​stackoverflow.com/​questions/​225845/​how-do-i-configure-modprobe-to-find-my-module|How do I configure modprobe to find my module?]]
  
 =====    ===== =====    =====