自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳細介紹網絡安裝 Linux

運維 系統(tǒng)運維
網絡安裝 Linux 并不是一個新鮮的話題,其過程也不是一個輕松的體驗。為了讓機器能通過網絡來安裝 Linux,如果還需要配合 kickstart 來自動化網絡來安裝 Linux過程的話,用戶需要做大量的配置工作。

Linux經過長時間的發(fā)展,很多用戶對網絡安裝 Linux概念,我發(fā)表一下個人理解出來和大家深入簡述一下。但在現實環(huán)境下,很多原因會導致我們無法選擇安裝一個新的 Linux 發(fā)行版本文通過將網卡驅動加入到 initrd.img 中,使 Linux 內核在啟動的過程中能識別并加載網卡驅動,從而使網絡安裝得以進行。如果熟悉 Linux 的啟動過程和驅動程序,那么要解決本文的問題,基本上有兩條路可走。

網絡安裝 Linux 并不是一個新鮮的話題,其過程也不是一個輕松的體驗。為了讓機器能通過網絡來安裝 Linux,如果還需要配合 kickstart 來自動化網絡來安裝 Linux過程的話,用戶需要做大量的配置工作。眾所周知,用戶需要挑選一臺機器作為服務器,然后在這臺機器上配置 DHCP, TFTP, NFS/Http/Ftp, pxelinux, kickstart 等一系列的東西。

學習網絡安裝 Linux時,你可能會遇到XX問題,這里將介紹XX問題的解決方法,在這里拿出來和大家分享一下。但是所有的這一切能成功運作都至少有一個前提條件:我們所網絡安裝 Linux 能正確的識別并驅動所有客戶機的網卡。如果網卡驅動不了,客戶機根本無法通過網絡從服務器取到所需要的東西,網絡安裝 Linux 就無從談起了。

本文通過將網卡驅動加入到 initrd.img 中,使 網絡安裝 Linux 內核在啟動的過程中能正確識別并加載網卡驅動,從而使網絡安裝得以進行。本文并不講述網絡安裝 Linux 的背景知識(如為什么需要網絡安裝,網絡安裝的好處等)、具體配置和操作步驟(也就是配置 DHCP,TFTP,pxelinux 等內容)。此外,本文需要讀者有熟練的 網絡安裝 Linux 操作經驗和 Shell 編程的基本知識,而且對 Linux 啟動過程和驅動程序有基本的了解。
注:所有被安裝的機器我們稱之為客戶機,提供網絡安裝服務的機器我們稱之為服務器

開始之前的建議

建議:如果您碰到了前言中所描述的問題的話,***的解決方法是 – 找一個能驅動客戶機網卡的 Linux Distribution,這樣能省卻很多麻煩。
但在現實環(huán)境下,很多原因會導致我們無法選擇安裝一個新的 Linux 發(fā)行版。原因有很多,比如:
客戶不同意我們選用其他的 網絡安裝 Linux 版本,因為客戶有大量的應用程序已經在某個Linux 版本上編譯,運行良好了,更換 Linux 發(fā)行版會帶來應用的移植問題
客戶擁有一些特殊的硬件,而這些硬件只有基于某個 Linux 發(fā)行版的驅動。更換 Linux 發(fā)行版,會導致這些硬件無法正常工作
沒有一個 Linux 發(fā)行版能驅動客戶機的網卡。網卡廠商只給我們提供了某個 Linux 發(fā)行版上的驅動,一切都要 DIY
您有著強烈的DIY情感,面對問題不是尋求別人的解決方案而是一切都要自己克服 – 毫無疑問,您就是本文最適合的讀者

解決思路

如果熟悉 Linux 的啟動過程和驅動程序,那么要解決本文的問題,基本上有兩條路可走。***就是將網卡驅動編譯進內核(靜態(tài)鏈接進內核),第二種方法就是將網卡驅動做成模塊,然后想辦法在網絡安裝 Linux 啟動的時候讓 Linux 內核能找到并掛載該驅動。面對這兩種方案,第二種方法有更好的可行性和擴展性。因為首先有些網卡驅動本身就不能被靜態(tài)鏈接進入內核,而只能被編譯成一個模塊,例如下文要舉的例子 - e1000 網卡驅動;其次,驅動做成模塊的方式,可以適應多個內核版本,用方法 1,更換一個內核版本就要重新編譯一次內核;***,等會會看到,相比編譯內核,方法 2 更簡單和可操作。

方法 2 的實現手段就是定制 initrd.img,將我們的網卡驅動加進去。initrd.img 是一個小型的根文件系統(tǒng),在 Linux 內核沒有掛載硬盤上的根分區(qū)的時候,initrd.img 將在內存中展開。一般情況下,initrd.img 中將包含一些必需的命令和驅動,如 insmod 命令和磁盤驅動。有了 insmod,才能將磁盤驅動掛載進內核,有了磁盤驅動,內核才能掛載位于磁盤上的根文件系統(tǒng)。

大部分的 Linux 發(fā)行版都提供了用于網絡安裝 Linux 的 initrd.img,一般位于***張安裝光盤的 images/pxeboot 目錄下。在一臺已經裝好 Linux 的機器中,在 /boot 目錄下我們也能找到 initrd.img,比較一下這兩個 initrd.img,會發(fā)現 pxeboot 目錄下的 initrd.img 會比 /boot 下的大很多,這是因為在網絡安裝的情況下,Linux 不會嘗試去掛載位于磁盤上的根分區(qū)(事實上,在沒有安裝Linux的機器上,此時磁盤中可能什么數據都沒有),所以此時的 initrd.img 需要包含大量的驅動,使網絡安裝 Linux 能識別大量的硬件。位于 /boot 下的 initrd.img,基本上唯一需要的東西就是磁盤驅動,只要內核能訪問磁盤,那么其余所需的東西都可以從磁盤取得而不需要依賴 initrd.img。

具體操作和實例

從安裝光盤中取得 initrd.img 之后,就可以開始對其進行定制。這里要感謝 Jeremy Mates,他寫的 initrd-util.sh 能很好的解開和生成一個 initrd.img。腳本可以在http://sial.org/howto/linux/initrd/initrd-util下載到。
下面我們以RedHat Enterprise Linux Advance Server 4 Update 2 x86_64,Intel e1000網卡驅動為例,講述具體的操作過程(在本例中,服務器和客戶機擁有相同的Intel e1000網卡,而且我們已經手動在服務器上安裝完成了正確的e1000驅動):
首先從光盤取到initrd.img,登錄到服務器,然后用initrd-util.sh解開:

命令輸出 1. 解開initrd.img
[root@ericvm ~]# cd `./initrd-util.sh unpack initrd.img |tail -1`
info: initrd unpack expanded into: /var/tmp/initrd-util.workdir.DA29317
[root@ericvm initrd-util.workdir.DA29317]# pwd
/var/tmp/initrd-util.workdir.DA29317
[root@ericvm initrd-util.workdir.DA29317]# ls
2.6.9-22.EL  bin  dev  etc  linuxrc  lost+found  modules
proc  sbin  selinux  sys  tmp  var

initrd-util.sh很簡單,利用gunzip, mount和cpio這些工具將initrd.img解開,其中驅動包位于modules目錄下,名為modules.cgz,將這個文件解開后,生成了2.6.9-22.EL目錄,進入該目錄,就能找到包含在initrd.img中的驅動。本例中,RedHat已經包含了一個e1000的驅動,但是這個驅動不能驅動我們新的Intel e1000網卡。為此,我們在e1000網站下載新版的驅動,然后在服務器上編譯完成,生成ko模塊文件,然后拷貝到2.6.9-22.EL目錄下,覆蓋原文件即可。

驅動更新完畢后,現在我們需要將2.6.9-22.EL這個目錄重新制作成modules.cgz,這個功能initrd-util.sh不能為我們完成,所以我們手動操作:

命令輸出 2. 加入驅動并重新打包
[root@ericvm initrd-util.workdir.DA29317]# find 2.6.9-22.EL | cpio -o -H crc > newmodules
16582 blocks
[root@ericvm initrd-util.workdir.DA29317]# gzip -n -9 newmodules
[root@ericvm initrd-util.workdir.DA29317]# mv newmodules.gz modules
[root@ericvm initrd-util.workdir.DA29317]# cd modules
[root@ericvm modules]# rm -f modules.cgz
[root@ericvm modules]# mv newmodules.gz modules.cgz
[root@ericvm modules]# pwd
/var/tmp/initrd-util.workdir.DA29317/modules

驅動包重新生成了并不意味著Linux就可以識別網卡了,因為網絡安裝 Linux必須依靠一種邏輯,將硬件設備和驅動模塊文件對應起來。這個邏輯就被定義在modules目錄下的除modules.cgz之外的文件中:

命令輸出 3. 設備驅動識別信息文件
               
[root@ericvm modules]# ls
module-info  modules.cgz  modules.dep  modules.pcimap  modules.usbmap  pci.ids  pcitable

如上所示,pcitable, modules.pcimap中定義了PCI設備和驅動模塊之間的對應關系,modules.dep中定義了模塊和模塊之間的依賴關系(比如,各種SCSI設備都會依賴一個基礎的SCSI驅動模塊),module-info中定義了驅動的靜態(tài)描述信息......

要填寫這些文本文件,也很簡單,首先我們必須要知道這塊e1000網卡的PCI設備信息,由于在服務器上e1000這塊網卡已經安裝完成了,所以我們可以在服務器上取到我們想要的信息:

命令輸出 4. 查看網卡硬件信息
[root@ericvm ~]# lspci
............  ignore some outputs
04:00.0 Ethernet controller: Intel Corporation Enterprise Southbridge DPT LAN Copper
04:00.1 Ethernet controller: Intel Corporation Enterprise Southbridge DPT LAN Copper
............  ignore some outputs
lspci列出了服務器上兩塊網卡的設備信息,根據網卡設備的ID號碼(04:00.0, 04:00.1),我們就可以在lspci –n的輸出中找到設備的vendor code和device code(請參考lspci的manual了解lspci):

命令輸出 5. 查看網卡code
[root@ericvm ~]# lspci –n
............  ignore some outputs
04:00.0 Class 0200: 8086:1096 (rev 01)
04:00.1 Class 0200: 8086:1096 (rev 01)
............  ignore some outputs

在lspci –n的輸出中,我們找到了兩塊網卡的vendor code和device code – 8086和1096。得到了vendor code和device code之后,就可以更新initrd.img中modules目錄下的pcitable, modules.pcimap等這些文件了。舉例來說,在pcitable中查找e1000,能發(fā)現很多設備和e1000這個驅動關聯,但是唯獨沒有8086:1096的組合,這就是為什么Linux無法驅動這塊e1000網卡的原因了,我們需要手動將8086, 1096這兩個code加入到pcitable中,并將這個設備對應到e1000驅動上。照此方法,更新其余的文件,如module-info, modules.pcimap等。

這樣我們就完成了對initrd.img的完全修改,用initrd-util.sh重新將目錄打包,生成一個新的initrd.img:

命令輸出 6. 重新生成initrd.img
[root@ericvm ~]# ./initrd-util.sh pack /var/tmp/initrd-util.workdir.DA29317/
notice: new initrd size: 6144K
6144+0 records in
6144+0 records out
mke2fs 1.35 (28-Feb-2004)
info: initrd packed into: /var/tmp/initrd-util.initrd-new.IV29439.gz
/var/tmp/initrd-util.initrd-new.IV29439.gz
[root@ericvm ~]# ls -lh /var/tmp
total 3.7M
-rw-r--r--   1 root root 3.7M Jun 20 17:10 initrd-util.initrd-new.IV29439.gz
drwxr-xr-x  12 root root 4.0K Jun 20 17:10 initrd-util.workdir.DA29317
drwxr-xr-x  13 root root 4.0K Jun 20 15:53 initrd-util.workdir.ID29288

initrd-util.sh首先創(chuàng)建一個“空洞文件”,然后在這個文件中建立ext2 文件系統(tǒng),然后將這個文件mount到一個目錄中,***用rsync這種方式將我們更新過的文件“拷貝”到了mount的目錄下,這樣“空洞”文件中就有了內容,***對文件進行壓縮,生成最終的img文件。

將/var/tmp/initrd-util.initrd-new.IV29439.gz改名成initrd.img,放到tftp配置的目錄下,就可以讓客戶機在網絡啟動的時候取到新的initrd.img了,從而識別網卡開始網絡安裝 Linux。

【編輯推薦】

  1. 三大***Linux發(fā)行版 今天你用了嗎?
  2. 對Linux操作系統(tǒng)的內核系統(tǒng)概述
  3. 介紹Linux硬盤系統(tǒng)建立分區(qū)步驟掛載
  4. 講述Linux系統(tǒng)掛載分區(qū)的使用
  5. 闡述Linux操作系統(tǒng)特權帳號與普通帳號的區(qū)別
責任編輯:佚名 來源: CSDN
相關推薦

2010-03-02 15:29:11

Linux圖形軟件安裝

2010-03-02 14:35:58

linux文本環(huán)境安裝

2009-12-30 17:25:34

Linux Ubunt

2010-06-21 16:57:11

Linux Arch

2009-12-21 13:37:00

Linux系統(tǒng)安裝

2010-03-04 15:37:17

Linux優(yōu)盤引導安裝

2009-12-24 16:47:22

Linux安裝Perl

2010-03-03 09:57:37

Linux虛擬機

2010-06-18 17:35:16

Linux Anacr

2010-06-22 09:28:31

Linux at命令

2010-06-23 15:36:23

Linux Bug B

2010-01-05 16:56:28

2009-12-11 15:59:00

Linux grep指

2009-12-25 14:24:59

Linux指令od

2010-03-04 15:20:30

Linux優(yōu)盤引導安裝

2010-03-11 09:20:54

Ubuntu網絡配置

2010-03-09 11:21:41

Linux etcgroup

2010-06-17 17:03:31

Linux流量控制

2010-03-09 09:55:14

Linux mount

2009-12-24 10:04:38

Linux進行C編譯
點贊
收藏

51CTO技術棧公眾號