差異處
這裏顯示兩個版本的差異處。
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}} | ||
- | ====== Apply DriverDisk on RHEL/CentOS6(Working) ====== | ||
- | ===== Problem ===== | ||
- | 在系統自動安裝部屬時,可能會有以下原因需要更新驅動: | ||
- | - 安裝光碟搭載的kernel版本不支援新硬體。 | ||
- | - 安裝光碟搭載的kernel版本過舊。 | ||
- | 最常遇到的問題,莫過於在更新網卡或磁碟陣列驅動了。如下圖:\\ | ||
- | {{:osprovision:kickstart:rhel_centos:no_driver_found.png|}}\\ | ||
- | 本篇主要分享我使用的方法,有以下幾個步驟: | ||
- | - 準備driver rpm。 | ||
- | - 製作driverdisk。 | ||
- | - 修改isolinux.cfg或grub.cfg。 | ||
- | - 調整kickstart檔案。 | ||
- | ===== 準備driver rpm ===== | ||
- | 準備rpm目前我試了兩種方法: | ||
- | - 直接透過rpmbuild打包Intel下載的驅動包,可參考[[cpp:linux_kernel:build_driver:build_nic_on_centos6.7|link]]。 | ||
- | - 參考此[[http://www.emeneker.com/modx/index.php?id=26|link]],自行撰寫rpm spec檔案去產生rpm檔。 | ||
- | ==== 透過Intel驅動包產生rpm ==== | ||
- | 最初使用這方法產生的rpm包裝driverdisk,卻發現一直無法正常載入:\\ | ||
- | {{:osprovision:kickstart:rhel_centos:cant_install_drivers.png|}}\\ | ||
- | 在使用方法二與檢查driverdisk程式碼後,發現原因主要有二: | ||
- | * kernel-modules版本的判別: .spec的Providers宣告不滿足需求,參考程式碼[[https://github.com/abiquo/anaconda-ee-el6/blob/6542236e597473e7a06df6b234802f13f5982ca4/anaconda-ee-13.21.195/loader/rpmextract.c#L91|link]]與[[https://github.com/abiquo/anaconda-ee-el6/blob/6542236e597473e7a06df6b234802f13f5982ca4/anaconda-ee-13.21.195/loader/driverdisk.c#L80|link]]。 | ||
- | * kernel-modules檔案的副檔名: 檔名需為.ko,參考程式碼[[https://github.com/abiquo/anaconda-ee-el6/blob/6542236e597473e7a06df6b234802f13f5982ca4/anaconda-ee-13.21.195/loader/driverdisk.c#L167|link]]。 | ||
- | 因此針對Intel驅動包內的.sepc,我做了以下修改(以ixgbe驅動為例): | ||
- | <code bash> | ||
- | # 原本為Provides: %{name},修改為以下 | ||
- | Provides: kernel-modules >= 2.6.32-220 | ||
- | |||
- | # 原本為將ixgbe.ko改名為ixgbe.ko.new,我改為複製並放入檔案清單中 | ||
- | find lib -name "ixgbe.*o" -exec cp {} {}.new \; \ | ||
- | -fprintf %{_builddir}/%{name}-%{version}/file.list "/%p.new\n/%p\n" | ||
- | </code> | ||
- | 修改後再重新產生的rpm與driverdisk就能夠正常載入驅動。 | ||
- | ==== 自行撰寫rpm spec去產生rpm ==== | ||
- | 一開始使用方法一失敗後,並沒足夠時間追究原因;因此參考此[[http://www.emeneker.com/modx/index.php?id=26|連結]]方式,去產生rpm。為了簡單,我將.spec簡化,並撰寫script快速產生,可自行參考此 | ||
- | {{ :osprovision:kickstart:rhel_centos:makerpm_driverdisk.zip|link}}內檔案。 | ||
- | ===== 製作driverdisk ===== | ||
- | 我所產生的driverdisk,以iso為主;driverdisk的內容,會長這樣: | ||
- | <code bash> | ||
- | rhdd3 | ||
- | rpms/ | ||
- | rpms/x86_64 | ||
- | rpms/x86_64/ixgbe-4.3.15-1.el6.x86_64.rpm | ||
- | rpms/x86_64/repodata | ||
- | rpms/x86_64/repodata/0521246c6369e8276fa1f75fa71187e6e81d1009551529a7f0ca97846e2ec278-primary.xml.gz | ||
- | rpms/x86_64/repodata/32927a3988d99cbfaa3f710208c326b544154adab3a01510e90649b03e6b2a88-other.sqlite.bz2 | ||
- | rpms/x86_64/repodata/8222113261bc634eb8373e6c036e7f3ff2081607836c9818372dd43be048dbc6-other.xml.gz | ||
- | rpms/x86_64/repodata/a81432fe5d910a52559ed3f66b0b89a8b21b45fd1cf6d80a227fe77f0932c29e-filelists.sqlite.bz2 | ||
- | rpms/x86_64/repodata/b94224988823cc79f0a28e8d2ace4fe6f7d58c2d2f86e138b69858632825421e-primary.sqlite.bz2 | ||
- | rpms/x86_64/repodata/caee3a920c6960f597ebb405912500080b18c83b804f2e00f81f6a2e661537f8-filelists.xml.gz | ||
- | rpms/x86_64/repodata/repomd.xml | ||
- | </code> | ||
- | 在使用上有兩個種類 | ||
- | - 讀立的driverdisk。 | ||
- | - 與安裝光碟包一起。 | ||
- | ==== 讀立的driverdisk ==== | ||
- | 假如你是獨立的driverdisk,可以透過此[[https://gist.github.com/h2onda/9c73da8ddaa0f8dacc41|連結]]所提供的腳本,輸入rpm並產生iso: | ||
- | <code bash> | ||
- | ./mkdriverdisk.sh ixgbe-4.3.15-1.el6.x86_64.rpm | ||
- | </code> | ||
- | ==== 與安裝光碟包一起 ==== | ||
- | 假如你想要與安裝光碟包一起,有幾個步驟要做: | ||
- | - 解開iso。 | ||
- | - 在光碟根目錄產生rhdd3檔案,內容隨便給。 | ||
- | - 在光碟根目錄產生rpms/x86_64資料夾,並將rpm給丟進去。 | ||
- | - 到rpms/x86_64目錄中,執行createrepo -p -d ./,就會產生repodata。 | ||
- | - 重新打包iso。 | ||
- | 你也可以選擇將mkdriverdisk.sh產生的iso解開後,丟到安裝光碟的iso中。至於解開iso與打包iso,要自行去網路上找方法,非本篇重點。 | ||
- | ===== 修改isolinux.cfg或grub.cfg ===== | ||
- | 從driverdisk程式碼中可以得知,可以使用nfs、ftp、http存取driverdisk。但如果你需要的是載入網卡驅動呢? 因此我是在boot參數中,加入dd或driverdisk: | ||
- | <code bash> | ||
- | default linux ksdevice=link ip=dhcp loglevel=debug ks=cdrom:/ks.cfg dd=path:/dev/sr0 | ||
- | </code> | ||
- | 如果你在有兩台光碟機以上的機器,必須明確知道是使用sr0或sr1;也許你會問,那怎不用dd=cdrom呢? 這我也試過,會出現以下訊息等待確認:\\ | ||
- | {{:osprovision:kickstart:rhel_centos:driver_disk_cofirmation.png|}} | ||
- | |||
- | ===== 調整kickstart檔案 ===== | ||
- | 在通過no driver found後,接著很可能會出現以下錯誤:\\ | ||
- | {{:osprovision:kickstart:rhel_centos:error_parsing_kickstart_eth0_not_exist.png|}}\\ | ||
- | 雖然透過ifconfig可以看到網卡已找到,但檢查syslog會發現找不到網卡設定檔:\\ | ||
- | {{:osprovision:kickstart:rhel_centos:network_config_not_exist.png|}}\\ | ||
- | 這錯誤會在執行kickstart安裝動作前,因此你可以在%pre區塊中,去產生預設的設定檔: | ||
- | <code bash> | ||
- | network_devices=($(ls -I lo /sys/class/net)); | ||
- | for device in ${network_devices[@]}; | ||
- | do | ||
- | config=/etc/sysconfig/network-scripts/ifcfg-$device | ||
- | if [ ! -e "$config" ]; | ||
- | then | ||
- | logger "$device config doesn't exist! Setup $device config." | ||
- | cat << EOF > "$config" | ||
- | BOOTPROTO="dhcp" | ||
- | DEVICE="${device}" | ||
- | IPV6INIT="yes" | ||
- | IPV6_AUTOCONF="yes" | ||
- | ONBOOT=No | ||
- | EOF | ||
- | fi | ||
- | fi | ||
- | </code> | ||
- | 而在安裝完成重新啟動後,你可能就會遇到更新後的驅動沒被載入的問題。 | ||
- | <code bash> | ||
- | cat /etc/sysconfig/modules/kickstart.modules | ||
- | </code> | ||
- | <code bash> | ||
- | #!/bin/sh | ||
- | /sbin/modprobe ixgbe | ||
- | </code> | ||
- | |||
- | ===== Reference ===== | ||
- | * [[http://www.emeneker.com/modx/index.php?id=26|Creating a RHEL6 driverdisk for kickstarts]] | ||
- | * [[https://github.com/abiquo/anaconda-ee-el6/blob/6542236e597473e7a06df6b234802f13f5982ca4/anaconda-ee-13.21.195/loader/driverdisk.c|anaconda source code - driverdisk.c]] | ||
- | * [[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/sect-Driver_updates-Use_a_boot_option_to_specify_a_driver_update_disk-x86.html|RHEL6 User Guide - Use a Boot Option to Specify a Driver Update Disk]] | ||
- | * [[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/sect-Preparing_a_driver_update_disk-x86.html|RHEL6 User Guide - Creating a driver update disc on CD or DVD]] | ||
- | * [[https://gist.github.com/h2onda/9c73da8ddaa0f8dacc41|mkdriverdisk.sh]] | ||
- | * [[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]] |