差異處

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

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
osprovision:kickstart:rhel_centos:apply_driverdisk_on_centos6 [2016/10/16 14:21]
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檔案 =====
行 95: 行 101:
 IPV6INIT="​yes"​ IPV6INIT="​yes"​
 IPV6_AUTOCONF="​yes"​ IPV6_AUTOCONF="​yes"​
-ONBOOT=No+ONBOOT="​yes"​
 EOF EOF
  fi  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>​
  
行 117: 行 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~~