跳到主要內容

Linux 操作不求人系列 - 參章之貳 - 系統管理(II) - 新增網路卡與顯示卡

#新增網路卡 @ Driving Ethernet Network Card
    現代人若一刻沒網路使用,可能會有焦慮並開始失去人生方向的感覺,故筆者先來說明如何讓CenOS6_x64可以使用網路。開始之前,我們先假設網路為固定式網路,非家用利用PPPoE(https://en.wikipedia.org/wiki/Point-to-point_protocol_over_Ethernet)的ADSL撥接方式,故只要我們確認網路卡驅動正常設定網路上網參數(如DHCP(https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol),或是須設定 IP、Netmask、Gateway、DNS ),皆符合網路提供者的規定,通常這樣就可以連上網際網路,且網卡為 Intel系列(GT、MT、PT、iXXX等...)的網卡,在驅動程式更是省事,在CentOS6_x64下,通常皆可直接使用驅動成功,但系統預設是不啟動網路。在配合 GNOME 搭配的 NetworkManager 軟體,直接點選Gnome桌面右上 NetworkManager 圖示內的 Connect ( 因筆者的網路已經連線了,故僅顯示Disconnect )即可上網(圖3-14上),若要使用命令列,啟動第一塊網卡路之網路功能,可以輸入指令 ifup eth0,若要暫停網路功能,請輸入指令 ifdown eth0,其中 eth 為乙太網路硬體代號,0為安裝的網路卡硬體裝置順序,如多張網卡,為 eth0、eth1、eth2... 之排序,若想知道網卡對應的排序,可利用指令 dmesg | grep 'eth',如圖3-14下,因筆者只有一張虛擬出來的網路卡,故僅為 eth0
































(圖3-14)

      因筆者在 VirtualBox 虛擬裝置執行,故其網路卡裝置已經被虛擬成 Intel PRO MT(圖3-15),所以直接利用DHCP方式即上網,但筆者接著還是要介紹無法順利驅動的網路卡,要如何來驅動,如常見在 PC 主機板上的,RealTek RTL8111B 乙太網路卡,便需先至 REALTEK 網站 ( http://www.realtek.com.tw/downloads/downloadsView.aspx?Langid=1&PNid=13&PFid=5&Level=5&Conn=4&DownTypeID=3&GetDown=false ),而 INTEL 網路卡的驅動程式,亦可從 INTEL 網站來下載( https://downloadcenter.intel.com/download/15817/Intel-Network-Adapter-Driver-for-PCI-E-Gigabit-Network-Connections-under-Linux- ),下載網頁通常都會分類 Linux 系統的核心版本與位元版本,那我們要怎麼知道核心版本多少呢?可以用指令 uname -a (圖3-16)
  






































(圖3-15)











(圖3-16)

    從圖3-16,可以看出我們現在使用的 Linux 核心版本為 2.6.32-573,且系統位元為64位元,並為多核心系統( SMP ,https://en.wikipedia.org/wiki/Symmetric_multiprocessing ),故我們就下載適用 Kernel 2.6 的網路卡驅動程式。記得安裝時,皆需使用 root 權限執行。因筆者使用帳號 newuser 在GNOME的環境下,使用 Firefox 下載,故預設下載資料夾為 /home/newuser/Download。且在模擬器並無 REALTEK 網路卡晶片,故筆者會另找主機來展示最後結果,在此先敘明。
    首先,先解開下載後的驅動程式壓縮檔,如圖3-17,為了提醒各位讀者建立良好操作習慣,請記得往後遇到不熟悉的安裝程式資料夾,請記得要熟讀隨附之 README 檔內容( 圖3-18-1,圖3-18-2 ),這些都是程式作者千辛萬苦花數時間寫出來的教學文件,所以一定要珍惜,畢竟〝羊毛出在羊身上〞,不是嗎?一般主機板常內建的 realtek rtl8169 網路卡晶片,在 CentOS6_x64 使用預設驅動程式,皆無法自動驅動成功,故我們從 REALTEK 網站下載後,除使用 autorun.sh 外,亦可以手動自行編譯。編譯並安裝前,請先使用 lsmod | grep r8169 查詢,並用指令 rmmod r8169 來移除系統內建的驅動模組。再進入rtl8169 已經下載驅動的資料夾內使用 make clean modules && make install,再  depmod -a 來對模組的 library 產生關聯,再 接著執行 modprobe r8169,來將模組執行。以上驅動後,接著就可以用 ifup eth0 (看第幾張網卡,此為第一張 )啟用,利用指令 ifconfig eth0 192.168.100.200 來設定IP,或可手動設定更改 HWADDR值。有興趣的讀者,可以利用 man ifconfig 來查詢詳細的設定網路卡參數方式。























(圖3-17)







































(圖3-18-1)







































(圖3-18-2)

     一般來說,執行完3-18-1的第13與第20行,就可以驅動 RealTek RTL8111B 的網路卡晶片並啟動之,但只適用於 DHCP 網路環境之下,若是在一些需要固定 IP 的環境內上網呢?那就需參考圖3-18-1第32至44行的說明。假設我們僅一張網卡,且需用固定IP上網,則可利用 vim 編輯 /etc/sysconfig/network-script/ifcfg-eth0 內容,加入以下參數:

DEVICE=eth0                                       # 指定為第一張網路卡設定
BOOTPROTO=static                            # 指定網路卡為靜態IP的設定
ONBOOT=yes                                      #  開機同時啟用網路卡
TYPE=ethernet                                      #  指定類型為乙太網路卡
NETMASK=255.255.255.0          /*  通常為您單位給定的值,其作用可參考 https://en.wikipedia.org/wiki/Subnetwork   */

IPADDR=140.168.100.100                   #  您的單位規定給您的機器使用的 IP位址
GATEWAY=140.168.100.254              #  您的單位規定的 GATEWAY 位址
BROADCAST=140.168.100.255         #  通常IPADDR最後一碼改為255,不輸入也行

/* 以上網路參數,關於TCP/IP的專有名詞含意,請參考 wikipedia:https://en.wikipedia.org/wiki/Internet_protocol_suite,參數的順序不影響功能   */
-----------------------------------------

     接著,再利用 vim 編輯 /etc/resolve.conf 來建立 DNS 位址(其作用可參考 wikipedia:https://en.wikipedia.org/wiki/Domain_Name_System),以便可以連上網際網路,如圖3-18-1,第26至第29行。

nameserver   140.168.2.2                    #  您的單位規定的 DNS IP
nameserver   140.168.1.1                    #   建議輸入兩台DNS IP,當作備用
--------------------------------
     編輯完上述兩個檔案,儲存離開後,可以利用指令 ifdown eth0與 ifup eth0 來重啟網路卡,亦可利用指令
$  service network restart   /* service 為 CentOS 內特有的 Script,主要為調用/etc/init.d  內的 Script */


$  /etc/init.d/network restart
-------------------------------------------------
啟動後,可以利用指令 ethtool eth0 來查看網卡的工作參數,若有多張網卡,亦可使用設定 /etc/sysconfig/network-script/ifcfg-ethX (X代表0、1...) 參數檔方式,逐一設定其他網卡。
    那如果我們有多張網卡,想要都綁成同一個 IP ,來幫忙分擔網路的封包負載呢(如同網頁,https://en.wikipedia.org/wiki/Link_aggregation#Linux_bonding_driver)?來就需要來設定 Linux ethernet bonding 的連線。先假設我們有兩張網卡,在 CentOS6_x64 下,方別設定檔為 /etc/sysconfig/network-script/ifcfg-eth0 (圖3-19左)與  /etc/sysconfig/network-script/ifcfg-eth1(圖3-19右),則我們要自行產生一個虛擬的 bond0 網卡,其設定檔為 /etc/sysconfig/network-script/ifcfg-bond0(圖3-19中),用來將 eth0eth1結合。






















(圖3-19)

     圖3-19的設定,與上方僅一張網卡設定的差異,在於以下,筆者取其中一張網卡設定來說明:
HWADDR=08:00:27:d4:08:38     /* 設定好由指令 dmesg | grep 'eth' 所抓取到的 MAC addr.(https://en.wikipedia.org/wiki/MAC_address,不是蘋果(潮)牌的 MAC),以防硬體抓取錯誤  */
USERCTL=no                       # 不允許一般使用者控制這張網卡
NM_CONTROLLED=no     # 不允許 NetworkManager 這軟體控制這張網卡,很重要
MASTER=bond0                  /*  主要依附在 bond0 虛擬網卡,故網路參數 IPADDR、NETMASK、GATEWAY、BROADCAST皆要設定在 /etc/sysconfig/network-script/ifcfg-bond0 */
SLAVE=yes                            #  此網卡為 Linux bonding 虛擬網卡之附屬網路卡之一
---------------------------------------------------

而 bond0 的設定 /etc/sysconfig/network-script/ifcfg-bond0 內容,亦如普通網卡一般:
DEVICE=bond0      # 對應 ifcfg-bond0 檔名
BOOTPROTO=static
ONBOOT=yes
TYPE=bond
IPADDR=140.168.100.254
NETMASK=255.255.255.0
GATEWAY=140.168.100.254
BROADCAST=140.168.100.255
---------------------------------------------------















(圖3-20)

    除此之外,我們還要產生bonding模組設定檔 bonding.conf 放入 /etc/modprobe.d/ 內,設定 bonding 模式的對應,如圖3-20,說明如下:
mode:為設定要做負載平衡的模式,建議選擇 6 亦可寫成 balance-alb,詳細可參考Kernel網站https://www.kernel.org/doc/Documentation/networking/bonding.txt。
miimon:MII 的監控時間,通常以100 (ms)為最佳值。有關 MII 可參考 Wikipedia 說明https://en.wikipedia.org/wiki/Media-independent_interface。
--------------------------------------------------------------------------------------------
若讀者上述 /etc/modprobe.d/bonding.conf 的檔案內容太麻煩,亦可於 /etc/sysconfig/network-script/ifcfg-bond0 內,加上以下參數,亦可達到同樣功能:
BONDING_OPTS="mode=6 miimon=100"

     以上網路卡參數設定完成後,請記得要用指令 service network restart 重新啟動網路,才會產生作用。架設 Linux Ethernet Bonding 後,會如圖3-21所示。圖3-21為利用指令 ifconfig bond0 等裝置,列印出筆者自身管理的機器的網路卡設定,此網路伺服器使用 eth1 與 eth2 做 bonding,成為 bond0,圖內為了筆者隱私,已隱藏相關機器資料,如 HWaddr,inet addr(IP),Bcast,inet6 addr:,讀者可以看到 eth1 與 eth2 為 RUNNING SLAVE,bond0 為 RUNNING MASTER。
   圖中還有一個很重要,就是MTU (https://en.wikipedia.org/wiki/Maximum_transmission_unit),一般的區域網路 MTU 皆預設為1500,若有特殊傳輸需求的管理者,若亦有支援 Jumbo Frame 的網路交換器( Network Switch,https://en.wikipedia.org/wiki/Network_switch),便可將此值提高至 4096(4KB) 或 9216(9KB)等值。如在設定檔 /etc/sysconfig/network-script/ifcfg-bond0 內加入一參數,如以下:
MTU=4096

在 MS Windows系統內,亦可從
裝置管理員->網路介面卡->對其一網路卡按右鍵->內容->進階->巨大訊框(Jumbo Frame)來調整,如圖3-22






















(圖3-21)

設定完 bonding 參數後,起記得要 service network restart,來重啟網路。重啟後,利用 ifconfig -a ,可以看到出現 bond0 的虛擬網卡。若要確認設定的 bond0是否有啟用,可利用cat指令來觀看硬體紀錄:
$ cat /proc/net/bonding/bond0



























(圖3-22)

--------------------------------------------------------------------------------------------

    另一方面來說,對於小型辦公室來說,經費可能比較沒有那麼充裕,故想要一次使用多個IP,卻只有一張網路卡。這時,Linux 就可以幫上這個節省成本的做法,就是可以設定同一張網路卡上,使用多個IP,假如我們有兩個IP:140.168.100.100 與 140.168.100.101,想設定在網卡 eth0 上使用,此時我們要先產生兩個設定檔  /etc/sysconfig/network-script/ifcfg-eth0:0   /etc/sysconfig/network-script/ifcfg-eth0:1,可由設定檔
/etc/sysconfig/network-script/ifcfg-eth0 複製後,需將設定檔 /etc/sysconfig/network-script/ifcfg-eth0 備份至其他位置後刪去。此時我們將設定檔 /etc/sysconfig/network-script/ifcfg-eth0:0,設為以下:
DEVICE=eth0:0                                  # 指定為使用第一個 IP
BOOTPROTO=static                          # 指定網路卡為靜態IP的設定
ONBOOT=yes                                      #  開機同時啟用網路卡
TYPE=ethernet                                    #  指定類型為乙太網路卡
USERCTL=no                                      # 不允許一般使用者控制這張網卡
NM_CONTROLLED=no                    # 不允許 NetworkManager 這軟體控制這張網卡
NETMASK=255.255.255.0                  #  如前述
IPADDR=140.168.100.100                   #  您想使用的第一個 IP位址
GATEWAY=140.168.100.254              #  您的單位規定的 GATEWAY 位址
BROADCAST=140.168.100.255         #  通常IPADDR最後一碼改為255,不輸入也行

-------------------------------------------------------------------------------------------
另一個設定檔 /etc/sysconfig/network-script/ifcfg-eth0:1,設為以下:
DEVICE=eth0:1                                  # 指定為使用第二個 IP
BOOTPROTO=static                          # 如前述
ONBOOT=yes                                      #  如前述
TYPE=ethernet                                    #  如前述
USERCTL=no                                      #  如前述
NM_CONTROLLED=no                    #  如前述
NETMASK=255.255.255.0                  #  如前述
IPADDR=140.168.100.101                   #  您想使用的第二個 IP位址
GATEWAY=140.168.100.254              #  如前述
BROADCAST=140.168.100.255         #  如前述
-----------------------------------------------------------------------------------------
    如先前所示,當網路卡參數設定完成後,請記得要用指令 service network restart 重新啟動網路,才會產生作用。


#新增顯示卡 @ Driving VGA Graphic Card

     一般來說,現今顯卡約分三大品牌 Nvidia,AMD ATI,Intel,且若是較早前的顯示卡,通常CentOS6_x64皆可以直接認得裝置並驅動成功,若無法順利驅動成功,則需要去各廠牌公司網站下載 Linux 驅動程式,並於 CentOS 開機時,選擇進入單人管理者除錯模式(圖3-23-1 至 圖3-23-3),來可順利安裝驅動並使用指令 startx,來啟動 X Window。下載版本查詢如網路卡說明,位址如下連結:
Nvidia Graphics Driver: http://www.nvidia.com/object/unix.html
AMD Graphics Driver: http://support.amd.com/en-us/download/linux
Intel Graphics Driver: https://01.org/zh/linuxgraphics/downloads?langredirect=1






























(圖3-23-1)

     圖3-23-1為 GRUB開機選單畫面,在此時如同圖內下方說明,選擇鍵盤鍵,進入編輯畫面,然後可看到如圖3-23-2。此時如圖3-23-2,將反光選項,利用鍵盤上下鍵移動至 Kernel /boot/vmlinuz-...,再按下鍵盤鍵,就進入另一個編輯模式,如圖3-23-3。





























(圖3-23-2)

     如圖3-23-3,在此模式下,加入最後一個參數 -s (single user),然後按下鍵盤 Enter鍵,此時會再回到如圖3-23-2的選單,接著對著剛剛編輯過的選項,按下鍵盤 b 鍵(boot),就會進入單人模式,如圖3-24。這時,便直接無需輸入root密碼,就可使用root權限下指令,這在忘記 root 時密碼也是很有用的方法。另一方面來說,這對資訊安全觀點,也是很可怕的方法,筆者在此不詳加討論,再讓讀者自行體會。
















(圖3-23-3)























(圖3-24)

     進入圖3-24的模式後,便可以如前面所介紹的網路卡安裝一般,把下載下來的驅動程式解開。再閱讀裡面的 README 檔案,根據驅動程式作者提供的步驟,來執行安裝,有些直接執行 .sh 的安裝檔案即可。有時可能會用到軟體安裝指令〝三兄弟〞:configuremakemake install。筆者會在後面章節會再詳加說明。一般來說,到 CentOS6_x64 已經不需再編輯 X server 的設定檔 xorg.conf (https://www.x.org/archive/X11R7.7/doc/man/man5/xorg.conf.5.xhtml),而可自動偵測設定值,便可正確使用 X Window GUI,故此處不再贅述 xorg 設定檔的作用。安裝驅動程式完成後,可以利用指令 telinit 5startx,試著是否可進入X Windows 介面模式。
   安裝 NVIDIA 顯示卡驅動程式時,若編譯時,出現 nouveau module 的問題,請記得先在 init 3 的文字模式下於 /etc/grub.conf 檔案內,開機所使用的 title 群組下,kernel 參數後方,多加上 rdblacklist=nouveau,與/etc/modprobe.d/內加入blacklist名單,才可以真正不載入 nouveau 模組。進入文字介面後,再次執行所下載原廠 NVIDIA Linux driver 即可正常安裝。執行前,請記得先把檔案權限改為可執行喔。
     最後,筆者怕一開始就將此硬體篇介紹的太〝硬〞與冗長,故還是暫將網路卡與顯示卡、內外接磁碟與其他硬體分開來說明,以利讀者可以慢慢操作體驗。筆者將於下節,會詳細說明若常於 MS Windows 與 Linux兩種作業系統之間的檔案交換,除了利用 Email 或 網路傳輸外,有時還是需直接插入外接裝置存取,若此時碰到外接隨身碟,或外接硬碟格式無法讀取時,要如何處理呢?就讓我們繼續看下去。



If you have any feedback or question, please go to my forum to discuss.

這個網誌中的熱門文章

Linux 操作不求人系列 - 貳章之貳 - Shell Script 程式設計(II) - BASH 與 TCSH / CSH

     在上章,我們介紹很多bash shell指令的應用方式,並讓它們變成 script,在這章此節,我們要承襲上節,繼續討論 bash shell script 的其它程式設計概念,與讓程式可重複使用的方法,就是利用函式(function)。      首先,我們來創作一個判斷是否為閏年的函數,script的名稱就取為 check_year.sh ,請自行將其設為可執行。程式碼如圖2-6,為了解說方便,筆者利用指令 nl check_year.sh 將程式碼包含行數印出(圖2-7),其他除顏色外,都與圖2-6同。以下 export 宣告環境變數,自訂變數無需加宣告保留字。(2021.10.07更正export說明,以下自訂變數宣告請直接去除export開頭) (圖2-6) (圖2-7)        圖2-7第2-6行,與之前的範例相似,皆有防堵參數個數輸入錯誤的判斷。第7-11行為接著判斷輸入的年分,是否為真的正整數,也就是大於零的數字。其中第7行可解釋為,利用正規表示式搜尋 $2 字串值得頭至尾部的字元,皆由 0-9 組成,若有,則為真(True)會進入 if 內的陳述執行, 但我們想要的,應該是僅要字串其中一字元為非正整數,便進入if 內的警告並跳出 。故,筆者在判斷式前多加一個 ! ,代表著當字元完全是正整數時,就不要執行  if  內陳述,而直接往第12行執行,但若其中有一個字元為非正整數,則會進入 if 內印出錯誤訊息並跳出 Script 。在此例使用者輸入非正整數等字串(如:12ab、cde、1a1b),便會出現錯誤訊息"Error Value",並跳出 Script 。而第8行的判斷式,效果跟第7行相同,但只能在BASH 3.0才能支援,故筆者故意保留,讓讀者可以學到另一種表示方式。         第12-28行,為宣告一個函式 leapyr () ,在 BASH Script內若要使用含式,必須在使用之前先建立函式的功能,如函式建立在第12-28行,則若要呼叫使用(Call)函式,則必須在第29行之後才能呼叫,並且可重複呼叫。第13行為定義函式呼叫時,一定會有一個外部參數, 此外部參數非該 Script 的外部參數 ,而是由程式撰寫者給入,故在此無設定防呆判斷。第14-

Linux操作不求人- 肆章之壹 - 伺服器架設(I) - SSH(SFTP、SCP)、FTP伺服器與遠端連線

@ ssh, sftp      通常安裝好 CentOS6_x64 作業系統後,sshd, ssh daemon 的服務功能是預設開啟的,如筆者的前面篇章所述,預設的 iptables 防火牆設定,亦是開啟讓 ssh 的連線是可通過的,不僅可以連出,也可以被連入。若要確認是否有安裝 sshd 套件以及在啟動時的 runlevel 2 3 5 是否有被載入,可以使用以下指令搜尋: $   rpm  -qa  |   grep  openssh     #  ssh 與 sshd 連線服務皆由 openssh 應用軟體提供。 或使用以下 $   rpm  -qa  |   grep  ssh         #  比用關鍵字 openssh 搜尋更模糊,故符合的條件更多。      如圖4-1可以查詢到有關於 openssh-client 與 openssh-server 的套件, openssh-server 便是提供連入服務的軟體,openssh-client 為提供可以連出的工具。若無以上套件,則使用 yum install openssh ,則可下載安裝。 (圖4-1) 再接著輸入以下指令查詢到 sshd 這個服務,是否有再開機程序內載入,如圖4-2 $ chkconfig | grep ssh   # 查詢 sshd 是否有於 開機 runlevel 啟動 再利用以下指令,來查詢是否防火牆有允許連線 $ iptables  -L  |  grep ssh   # 出現如圖4-2 允許通過之條件 (圖4-2)      接下來,我們要先來調整 sshd 的設定檔,利用 vim  /etc/sshd/sshd_conf ,如圖4-3-1與4-3-2。因為設定檔參數很多,筆者為方便說明,將 /etc/sshd/sshd_conf 檔案內容分成兩張圖。 (圖4-3-1)

Linux操作不求人 - 伍章之陸 - Intel PXE 與利用 tftp + anaconda kickstart來自動部署系統

     現代的個人電腦與筆電爲了節能省碳,往往皆省略了光碟機的設置。雖然說 USB隨身碟亦可應用於安裝作業系統,但若遇到機房的大量機器需安裝之問題,亦不適合此種用光碟片或隨身碟逐臺安裝的方式,或是需準備多片光碟或隨身碟。故爲了大量安裝與部屬 Linux作業系統的機器,我們便可透過具有PXE功能之網路卡(https://en.wikipedia.org/wiki/Preboot_Execution_Environment),其所具備的網路開機的能力,來作透過網路方式來安裝與大量部署 CentOS Linux作業系統。其原理 wikipedia  的PXE說明,都解釋得很清楚,筆者不需要再 " 掉書包 ",在開發者大神面前班門弄斧,我們就直接來做做看。      首先,我們一樣透過 yum來安裝所需的 tftp伺服器軟體(http://www.jounin.net/tftpd32.html),利用PXE支援 tftp 透過 udp 埠號 69連線,來提供檔案的能力,給利用 PXE開機後安裝作業系統的機器,圖5-60   (圖5-60) 接著修改 tftp 設定檔 /etc/xinetd.d/tftp,如圖5-61,請記得 disable  要改為 no (圖5-61)      若要修改 server_args 參數為自訂的 tftp root 路徑,記得要變更 SELinux 的權限設定,如要改為/tftpboot,則使用指令 chcon  來調整,如以下: $ mkdir /tftpboot $ chcon  --reference /var/lib/tftpboot  /tftpboot 接著將 xinetd 與 tftp 加入開機啟動,並重啟動 xinetd,如下: $ chkconfig  --level  235  xinetd on $ chkconfig  --level  235  tftp  on $ service xinetd restart 開放防火牆通行 $ iptables -A INPUT -p udp --dport 69 -j ACCEPT $ service iptables re