跳到主要內容

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操作不求人 - 伍章之伍 - make 巨集式編譯器

make是Linux下安裝軟體與程式一個相當重要的工具,如前章節所提的安裝軟體三劍客。 configure, make , make install。當我們完成自己所撰寫的C 或 fortran程式,通常會使用編譯器指令 gcc -cgfortran -c 來編譯成連結檔或物件檔函式庫(Library),如 .a (https://en.wikipedia.org/wiki/Static_library) .o .so等附檔名,而此函式庫又可以讓其他程式利用其中的函式與類別。何時要用到動態或靜態函式庫,stackoverflow有專業的回答(https://stackoverflow.com/questions/140061/when-to-use-dynamic-vs-static-libraries)。

假設我們要寫一個簡單的 C 程式,檔名為 hellomake.c,用 make 來編譯我們的程式,程式如下:
#include<stdio.h>
void main ( void )
{
   print ("This is my first c file."\n);
}

---------------------------------------------------
儲存離開後,利用autoscan 指令,便會產生如圖5-70的兩個檔 autoscan.log 與 configure.scan,而 configure.scan 便是需要產生標準的 GNU makefile 的關鍵檔。我們可以把他改成 configure.in 或 configure.ac,並利用 vim configure 來修改參數,如圖5-71,改為圖5-71右邊的參數











(圖5-70)





(圖5-71)


修改完 configure.in 內的參數後,再執行 aclocal 與 autoconf ,就會產生 autom4te.cache 的資料夾與 configure 的執行檔,此執行檔就是先前章節所要編譯原始碼前,會執行的 ./configure ,並會產生適合您的機器環境之 GNU Makefile,如圖5-72


(圖5-72)
接著編輯 Makefile.am 檔的內容,加入如下內容
AUTOMAKE_OPTION=foreign b…

Linux操作不求人 - 肆章之貳 - 伺服器架設(II) - 郵件伺服器 - postfix 與 dovecot

CentOS6_x64 在預設狀態下,通常已經有開啟發 email 的伺服器軟體 postfix,但僅限制在本機(localhost / 127.0.0.1 ) 使用,且僅是讓系統可以傳送錯誤訊息給 root。故我們要經由設定,讓電腦主機內的使用者帳號,皆可以收發 email,而我們用的送信軟體為 postfix,負責 smtp 的部分( https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol ) ,收信軟體則為 dovecot,負責 pop 或 imap ( https://en.wikipedia.org/wiki/Post_Office_Protocol,https://en.wikipedia.org/wiki/Internet_Message_Access_Protocol )的部分,收發信機制的運作機制,可參考wikipedia,https://en.wikipedia.org/wiki/Email,筆者不再贅述,直接說明架設伺服器軟體的操作。先利用 rpm -qa | grep postfix 與 rpm -qa | grep dovecot 來查詢是否已經有安裝,若無,則利用 yum install postfix 與 yum install dovecot 來安裝。除此之外,再利用 chkconfig | grep postfix 與  chkconfig | grep dovecot 來確認是否有在開機時啟動,若想自動化開機啟動,再請設定 chkconfig --level 235 postfix on 與  chkconfig  --level 235 dovecot on 來載入。 如圖4-10與圖4-11:
































(圖4-10)
















(圖4-11)

     接著我們利用 vim 來修改 postfix 設定檔  /etc/postfix/main.cf 。相同地,我們先閱讀設定檔內容前面的說明,postfix 的作者相當細心,每個設定前的說明很詳細,故設定檔很長,請讀者要有耐心閱讀,如圖4-12-1 至 圖4-12-7。往後篇章若設定檔內容太長,筆者便不再列出,會直接說明新增與修改處,在此先說明。




























































































(圖4-12-1)




























































































(圖4-12-2)





























































































(圖4-12-3)





























































































(圖4-12-4…

Linux 操作不求人系列 - 貳章之壹 - Shell Script 程式設計(I) - BASH

本章開始進入Shell Scripts的程式設計,因為Linux Shell的種類相當多,故筆者僅挑選預設的Bash Shell 及 學術界常會使用的 C Shell (/bin/tcsh )來說明與對照,在此先說明。至於 Scripts 的概念,在前章就已經說明過,可視為前壹章的各項指令之組合,在令其在執行檔案裡,依序執行,如前章所看到的 /etc/profile 檔案,在其他軟體上,有點類似巨集(macro)的執行檔,或是MS Windows的批次檔(Batch)。先建立此概念後,我們可以先在Terminal的命令提示字元,使用 for 指令,如圖2-1,在 shell scripts 內為了重複做一件事,而僅修改某些變數值,我們會利用所謂的迴圈(loop)方式來完成,而 bash shell 內常用的是 for 或是 tcsh/csh shell 內的 foreach



























(圖2-1)


     圖 2-1第一個指令輸入 for 的宣告,後面接著 seq 為變數名稱,為了逐次接收 in 後面之陣列值(http://www.gnu.org/software/bash/manual/html_node/Arrays.html)(註:若加了 ; 則 do 便可寫在同一行),接著 > 的提示字元的等待輸入,便是還沒遇到 done 指令來結束 do 的動作,控制此提示字元的環境變數為 PS2。,此例的 seq 值,依序為第一次讀入 first 字串並存入變數 seq 當其值,接著second、third,從 echo $seq 可以看出,接著設定一個變數 file 其值為 my開頭字串,緊接變數值 $seq(first、second、third),再接固定的 script.sh 字串,接著利用echo指令,印出變數值$file,檢查是不是我們預期的字串值(註:如果想要暫停,讓使用者可以看清楚再繼續,可以加上指令sleep 3,表示畫面停止三秒鐘),接著利用 touch 指令產生 $file 字串值的檔案,再將其利用 chmod 指令,u+x 參數為令僅創立此檔的使用者帳號可執行(若要改為同群組可執行,參數需改為 g+x)。故可看到第二個指令輸入 ls,便列出自動批次產生的shell執行檔了。
     以上其實就是 Shell Script 的程式設計之…