差異處
這裏顯示兩個版本的差異處。
Both sides previous revision 前次修改 下次修改 | 前次修改 | ||
osprovision:kickstart:rhel_centos:apply_driverdisk_on_centos6 [2016/10/16 14:19] 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檔案 ===== | ||
行 81: | 行 87: | ||
雖然透過ifconfig可以看到網卡已找到,但檢查syslog會發現找不到網卡設定檔:\\ | 雖然透過ifconfig可以看到網卡已找到,但檢查syslog會發現找不到網卡設定檔:\\ | ||
{{:osprovision:kickstart:rhel_centos:network_config_not_exist.png|}}\\ | {{:osprovision:kickstart:rhel_centos:network_config_not_exist.png|}}\\ | ||
+ | 這錯誤會在執行kickstart安裝動作前,因此你可以在%pre區塊中,去產生預設的設定檔: | ||
<code bash> | <code bash> | ||
network_devices=($(ls -I lo /sys/class/net)); | network_devices=($(ls -I lo /sys/class/net)); | ||
行 94: | 行 101: | ||
IPV6INIT="yes" | IPV6INIT="yes" | ||
IPV6_AUTOCONF="yes" | IPV6_AUTOCONF="yes" | ||
- | ONBOOT=No | + | ONBOOT="yes" |
EOF | EOF | ||
fi | 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> | ||
+ | 然而在使用第二個方法時,我又想到一些問題: | ||
+ | - 不同版本驅動可能會不同位置,我要去覆蓋掉原本的嗎? | ||
+ | - 假如新的驅動在原本的系統就不存在,使用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上。為了方便建置測試環境,撰寫了以下腳本。 | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | REPO_URL=http://archive.kernel.org/centos-vault/6.6/os/x86_64/Packages/ | ||
+ | KERNEL_DEVEL=kernel-devel-2.6.32-504.el6.x86_64.rpm | ||
+ | KERNEL_HEADERS=kernel-headers-2.6.32-504.el6.x86_64.rpm | ||
+ | |||
+ | mkdir /opt/rpms | ||
+ | cd /opt/rpms | ||
+ | |||
+ | yes | yum -y install wget | ||
+ | |||
+ | wget ${REPO_URL}${KERNEL_DEVEL} | ||
+ | wget ${REPO_URL}${KERNEL_HEADERS} | ||
+ | |||
+ | #yum -y remove kernel-devel | ||
+ | #yum -y remove kernel-headers | ||
+ | |||
+ | rpm -ivh *.rpm | ||
+ | |||
+ | yum -y install rpm-build gcc createrepo mkisofs | ||
</code> | </code> | ||
行 115: | 行 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?]] | ||
+ | |||
+ | ===== ===== | ||
+ | ---- | ||
+ | \\ | ||
+ | ~~DISQUS~~ |