差異處
這裏顯示兩個版本的差異處。
Both sides previous revision 前次修改 下次修改 | 前次修改 | ||
osprovision:kickstart:rhel_centos:apply_driverdisk_on_centos6 [2016/10/17 09:52] tony [調整kickstart檔案] |
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。 | ||
- | - 修改isolinux.cfg或grub.cfg。 | + | - 指定driverdisk。 |
- 調整kickstart檔案。 | - 調整kickstart檔案。 | ||
行 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?]] | ||
===== ===== | ===== ===== |