Linux 基礎學習訓練教材 - CentOS 7.x

課前課程管理-學生篇

教學環境還是一樣比較好,所以,這幾年來,鳥哥都是用虛擬機器教學。既然如此,那就大家一起來建立好所需要的環境吧!

最近更新時間: 2017/09/28

訓練課程與自學的環境不太一樣,訓練課程的 Linux 作業系統環境中,主要是由鳥哥預先幫大家規劃好的環境來讓大家做許多的練習, 等到第 15 章的時候,再讓大家自己搭建一個環境,期待在期末的時候大家都具有自己建立好屬於自己的 Linux 作業系統的環境。不過,在訓練過程中, 還是期望大家先取得已經預先安裝好的虛擬化系統,這樣在學習上面比較不會有太大的問題。 所以,如果老師/同學們沒有辦法取得 gocloud 環境時,可以使用底下的 virtualbox 的虛擬化軟體來搭建你的 Linux 虛擬機器線上環境喔!

0.1:前言

訓練課程的主要內容大致上是透過一個名為 Gocloud 的商業軟體來達成的,該軟體在教學與實機線上作業上面相當有幫助! 不過考量到許多大專院校或者經費較不足的教育者來說,要達成這樣的環境確實有點難度。因此,鳥哥也使用 VirtualBox 的環境來讓大家建立訓練環境。 只是這個訓練環境與實際操作比較不同,因此硬碟的檔名是 /dev/sda 而不是虛擬加速的 /dev/vda,因此在許多的偵測腳本上面, 結果會有些許問題~這部份得要請大家多多見諒。

鳥哥這裡都假設大家已經有操作 windows 作業系統的經驗,因此底下主要是以 windows 作業系統的基礎環境來說明如何建置一個虛擬化的訓練系統。 如果你已經具有 Linux 虛擬化的技術,請直接使用 Linux 底下的 qemu-img 指令,將光碟所附的作業系統磁碟檔案 (img) 直接轉成 qcow2 後, 就可以透過 Linux 的 KVM 搭配 libvirt 與 qemu 軟體,直接掛載該硬碟就能開始作業。如果你只有 windows 或者是 MAC 作業系統, 那就使用底下介紹的 virtual box 來處理我們的上課環境吧。

如果您是計算機中心的管理夥伴,而且需要替老師們建置好這個 Linux 作業系統的教學環境時,無須進行多重作業系統的規劃, 只要將 virtualbox 安裝妥當,並且將硬碟 img 放置好,同時依據底下的流程建置好整個 virtual box 啟動虛擬機器的流程, 那就可以直接將你的 windows 系統做完還原硬碟,那同學們就可以在開機後直接使用了。當然,你的 images 就得要放置在沒有被還原的其他分割槽才行呢!

另外,本文最新版本可以到底下的連結查閱喔:

0.2:VirtualBox 的安裝與設定

VirtualBox 是甲骨文公司依據 GPL 授權所發布的虛擬化軟體,所以你可以自由的從網路上面下載最新的軟體來安裝。 VirtualBox 的官網在底下的連結:

請依據你的作業系統環境來選擇要下載的軟體。在這裡先針對虛擬化系統的專有名詞做個簡單的解釋:

  • Hypervisor: 虛擬機器監督器,就是上面的 KVM, Xen...軟體的意思
  • Host: 運作 hypervisor 的母系統,就是實體機器的系統的意思。
  • Virtual Machine: 虛擬機器 (注意!是虛擬『機器』不是虛擬『主機』),由 hypervisor 所模擬出來的『假硬體』,簡稱為 VM
  • Guest: 在 VM 上面運作的作業系統

以我們這個訓練教材的目的來說,我們是想在 windows 系統上面虛擬化 Linux 系統,因此 host 就是 windows 作業系統, VM 內的 guest OS 才是 Linux 作業系統之意。所以,當你要下載 Virtualbox 時,務必請選擇正確的 host 版本 (在這個案例中,就是下載 host 為 windows 的版本之意。)

0.2.1:安裝前準備動作

目前的 CentOS 7 已經不支援 32 位元的硬體環境,但是許多的虛擬化系統還是僅支援 32 位元而已~好在 Virtualbox 是有支援 64 位元的, 只是,你的硬體主機 BIOS 就得要啟動許多支援虛擬化的功能才行!設定好 BIOS 的虛擬化支援也很簡單,重新開機,進入 BIOS 之後, 記得進入進階模式,然後選擇 CPU 有關的設定,選擇有『虛擬化』支援的項目即可~底下是鳥哥所擁有的電腦中的一個 BIOS 設定示意圖:

圖0.2-1、BIOS 的虛擬化功能支援示意圖
圖0.2-1、BIOS 的虛擬化功能支援示意圖

附帶一提,如果未來你的這部主機想要支援硬體的 PCI passthrough 功能,那麼那個 VT-d 的功能也來放行一下! 不過,在我們這個訓練教材中,底下的設定為非必備就是了。

圖0.2-2、BIOS 的虛擬化功能支援示意圖-針對 Intel VT-d 功能
圖0.2-2、BIOS 的虛擬化功能支援示意圖-針對 Intel VT-d 功能

在 BIOS 的設定結束之後,請拿出書籍附上的 DVD ,將裡面的檔案暫時通通複製到你的 D 槽 (假設你的 D 槽容量夠大), 基本上,該 DVD 應該會有底下的軟體才對:

  • linux_os_train_class.vdi:就是主要的硬碟環境
  • VirtualBox-5.1.28-117968-Win.exe: VirtualBox 於 2017/09 下載的版本
  • readme.pdf:就是本文件
  • linux_os_train_class.xml:啟動 KVM 的 XML 設定(尚須修改)

這樣事前準備工作就完成了!

0.2.2:開始安裝與設定

雙擊兩下 VirtualBox 軟體檔案,就可以進入安裝畫面,其實近期以來的軟體都做得很棒,只要一直下一步即可! 唯一要注意的是,因為 Virtualbox 會有安裝一塊虛擬網卡到你的 windows 系統上,在實做出該虛擬網卡時, 你的網路很可能會被暫時的中斷,因此記得在處理安裝時,這點需要特別留意!也就是說,不要有類似 ssh 的軟體同時在運作, 否則斷線很困擾的!

  • 軟體安裝

底下為依序的流程截圖,沒啥大不了,就一直下一步就對了!

VirtualBox 安裝與設定的完整流程
VirtualBox 安裝與設定的完整流程
VirtualBox 安裝與設定的完整流程
VirtualBox 安裝與設定的完整流程
VirtualBox 安裝與設定的完整流程
VirtualBox 安裝與設定的完整流程
VirtualBox 安裝與設定的完整流程

上面的圖示當然要按『是』才能安裝妥當!不要按錯了!

VirtualBox 安裝與設定的完整流程
VirtualBox 安裝與設定的完整流程
VirtualBox 安裝與設定的完整流程
VirtualBox 安裝與設定的完整流程

安裝完畢之後,啟動 virtualbox 就有點像底下的圖示:

VirtualBox 安裝與設定的完整流程
VirtualBox 安裝與設定的完整流程
  • 虛擬機器的硬體設定及優化

安裝完畢後,再來按下『新增』,我們來建立一部虛擬機器囉!

虛擬機器的硬體設定及優化
因為我們的系統是 CentOS 也是來自於 Red Hat 系列,所以選這個項目!
虛擬機器的硬體設定及優化
訓練機大約 2G 到 3G 的記憶體就很夠用了!如果你的 host 只有 4G 的話,這裡使用 1.5G 也還 OK !
虛擬機器的硬體設定及優化
虛擬機器的硬體設定及優化

上面這個步驟很重要,請選擇正確的虛擬機器硬碟檔~說穿了,就是從 DVD 複製過來的檔案就是了。如果你未來想要重複操作這個訓練系統, 請自行將檔案複製多份,出錯就將硬碟換掉或者將硬碟複製即可。全部做完後,就像底下這樣了:

虛擬機器的硬體設定及優化
虛擬機器的硬體設定及優化

然後按下設定值,先來優化一下 CPU 的設定如下:

進行 VM 的 CPU 優化喔!很重要! 進行 VM 的 CPU 優化喔!很重要! 進行 VM 的 CPU 優化喔!很重要!
進行 VM 的 CPU 優化喔!很重要!

預設只用一顆 CPU,那你的系統會跑得慢吞吞~所以,這個 CPU 的優化也是很重要的!再來調整一下其他的設定值吧! 包括顯示功能,如下所示:

進行 VM 的顯示卡優化
進行 VM 的顯示卡優化

最終也得要注意一下網路,因為我們的練習環境在最後可能會跟其他用戶及 server 互相溝通,因此最好能夠使用橋接界面。 整個網路設定有點像底下這樣:

進行 VM 的網路卡設定
進行 VM 的網路卡設定

最終完成的圖示會有點像底下這樣,然後按下『啟動』,就可以取得你的 Linux 訓練教材的環境了!接下來就請前往 unit01 開始用功吧!

進行 VM 優化完畢的結果
進行 VM 優化完畢的結果

0.3:利用 KVM host 處理訓練教材

假設你已經具有 Linux Server,並且你的 BIOS 也已經設定好了虛擬化的支援,此時你只需要安裝 libvirtd 這個服務, 同時加上 qemu-kvm 這個軟體,以及 qemu-img 這個軟體,就可以開始進行你的訓練機器的設置了,並不需要動到實體機器! 這樣操作系統會跟訓練教材書籍內容一模一樣,跟著教材做也會比較順暢。

如果你手邊有一部支援虛擬化的主機沒有在使用,那就直接從網路上下載 CentOS 7 的 DVD,然後跟著鳥站的文章教學, 使用支援 GUI 的伺服器安裝方式,安裝完畢之後,也立刻就能夠使用 Linux KVM 的虛擬化軟體了!

如果你還是不知道怎麼啟動虛擬化,那麼請到實體機器上面去觀察下列的資料,有的話那就表示可以進行虛擬化作業了!

# 檢查一下 CPU 有沒有支援虛擬化的功能!如果找不到 vmx 的話,請到 BIOS 進行調整。
[root@study ~]# cat /proc/cpuinfo | grep vmx
flags           : fpu vme de pse tsc msr pae ... vmx smx ... cqm_occup_llc

# 要確認 libvirtd 是有啟動的狀態才行!
[root@study ~]# systemctl status libvirtd
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2017-09-28 12:09:04 CST; 1h 42min ago
     Docs: man:libvirtd(8)
           http://libvirt.org
 Main PID: 2250 (libvirtd)
   CGroup: /system.slice/libvirtd.service
           └─2250 /usr/sbin/libvirtd

# 確認 virsh list 程式是可行的
[root@study ~]# virsh list
 Id    Name                           State
----------------------------------------------------

# 檢查已經安裝了 qemu-img 以及 qemu-kvm 等軟體!
[root@study ~]# rpm -q qemu-img qemu-kvm
qemu-img-1.5.3-105.el7_2.7.x86_64
qemu-kvm-1.5.3-105.el7_2.7.x86_64
  • 轉換硬碟格式

假設書籍的 DVD 附上的硬碟檔案你已經放置到 /home/vbirdlinux 目錄下,接下來你得要先轉換硬碟格式才行。因為 DVD 裡面的資料主要是給 VirtualBox 使用的, 因此你得要先將該格式轉成 KVM 可以讀取的 qcow2 才行。處理的方式其實非常簡單!

[root@study ~]# cd /home/vbirdlinux
[root@study vbirdlinux]# ll
-rw-rw-r-- 1 root root 3984753152 Sep 28 13:44 linux_os_train_class.vdi

[root@study vbirdlinux]# qemu-img convert -O qcow2 linux_os_train_class.vdi linux_os_train_class.qcow2 -p
    (100.00/100%)

[root@study vbirdlinux]# ll
-rw-r--r-- 1 root root 3964010496 Sep 28 14:02 linux_os_train_class.qcow2
-rw-rw-r-- 1 root root 3984753152 Sep 28 13:44 linux_os_train_class.vdi

[root@study vbirdlinux]# qemu-img info linux_os_train_class.qcow2
image: linux_os_train_class.qcow2
file format: qcow2
virtual size: 40G (42949672960 bytes)
disk size: 7.0G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

上面的 linux_os_train_class.qcow2 就是課程提供的上課用硬碟,這個硬碟最好不要更動到!如果硬碟出錯的話,就可以透過這個硬碟來重新處理。 而為了加快硬碟處理的速度,其實我們可以透過 qemu-img 提供的 backing_file 功能進行處理。假設讓這顆硬碟檔名變成 linux_os_train_class.qcow2.raw 之後, 我們可以增加一個快照 (backing_file) 的檔案,兩個檔案的內容會一摸一樣,但是容量差很多!

[root@study vbirdlinux]# linux_os_train_class.qcow2 linux_os_train_class.qcow2.raw
[root@study vbirdlinux]# qemu-img create -f qcow2 -o backing_file=linux_os_train_class.qcow2.raw \
>  linux_os_train_class.qcow2
Formatting 'linux_os_train_class.qcow2', fmt=qcow2 size=42949672960 backing_file='linux_os_train_class.qcow2.raw' 
encryption=off cluster_size=65536 lazy_refcounts=off

[root@study vbirdlinux]# ll
-rw-r--r-- 1 root root     197632 Sep 28 14:08 linux_os_train_class.qcow2
-rw-r--r-- 1 root root 3964010496 Sep 28 14:02 linux_os_train_class.qcow2.raw
-rw-rw-r-- 1 root root 3984753152 Sep 28 13:44 linux_os_train_class.vdi

[root@study vbirdlinux]# qemu-img info linux_os_train_class.qcow2
image: linux_os_train_class.qcow2
file format: qcow2
virtual size: 40G (42949672960 bytes)
disk size: 196K
cluster_size: 65536
backing file: linux_os_train_class.qcow2.raw
Format specific information:
    compat: 1.1
    lazy refcounts: false
  • 編輯 VM 硬體設定檔

接下來請打開 "linux_os_train_class.xml" 這個檔案,因為我們放置檔案的位置與相關的設定與鳥哥當初的設定並不相同, 所以這裡得要修改一下才可以!

[root@study vbirdlinux]# ll
-rw-rw-r-- 1 root root       2577 Sep 28 14:11 linux_os_train_class.xml

[root@study vbirdlinux]# vim linux_os_train_class.xml
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>vm_linux</name>
  <memory>2097152</memory>
  <currentMemory>2097152</currentMemory>
  <vcpu>4</vcpu>
    <cpu mode='host-passthrough'>
      <arch>x86_64</arch>
      <model>SandyBridge</model>
      <vendor>Intel</vendor>
      <topology sockets='1' cores='4' threads='2'/>
    </cpu>
  <os>
    <type arch='x86_64'>hvm</type>
    <boot dev='cdrom'/>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='none' io='native' copy_on_read='off' />
      <source file="/home/vbirdlinux/linux_os_train_class.qcow2"/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <source file=''/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
    </disk>
    <interface type='bridge'>
      <mac address='52:54:00:11:11:33'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target port='0'/>
    </console>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <graphics type='spice' port='5701' autoport='no' listen='0.0.0.0'>
       <image compression='auto_glz' />
       <jpeg compression='auto' />
       <zlib compression='auto' />
       <playback compression='on' />
       <streaming mode='all' />
    </graphics>
    <graphics type='vnc' port='5901' autoport='no' listen='0.0.0.0'>
       <image compression='auto_glz' />
       <jpeg compression='auto' />
       <zlib compression='auto' />
       <playback compression='on' />
       <streaming mode='all' />
    </graphics>
    <video>
      <model type='qxl' vram='32768' heads='1'/>
        <acceleration accel3d='yes' accel2d='yes'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <sound model='ich6'/>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </memballoon>
  </devices>
</domain>

我這裡假設你的 KVM host 已經安裝好了橋接設備,亦即是 br0 這一個橋接界面,如果你輸入 ifconfig 發現到僅有 virbr0 的時候, 請將上述的橋接器改成 virbr0 即可!再來就是鳥哥同時啟動 spice 與 vnc 兩個界面,預設埠口如上所示, 如果你不想要使用上述的埠口,那就請自行改掉該埠口即可。 此外,如果想要在外頭連線到這個系統,那麼最好加上密碼才好! 我這邊預設是沒有加密碼的,如果要加密碼,那請修改這一行:

[root@study vbirdlinux]# vim linux_os_train_class.xml
    <graphics type='spice' port='5701' autoport='no' listen='0.0.0.0' passwd="your_passwd">

如果一切都準備妥當,這時請啟動虛擬機器:

[root@study vbirdlinux]# virsh create linux_os_train_class.xml
Domain vm_linux created from linux_os_train_class.xml

[root@study vbirdlinux]# virsh list
 Id    Name                           State
----------------------------------------------------
 2     vm_linux                       running

[root@study vbirdlinux]# netstat -tlunp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address   Foreign Address  State   PID/Program name
tcp        0      0 0.0.0.0:5901    0.0.0.0:*        LISTEN  7134/qemu-kvm
tcp        0      0 0.0.0.0:5701    0.0.0.0:*        LISTEN  7134/qemu-kvm

此時,只要在 Linux 的圖形界面上面啟動 remove-viewer ,然後輸入『 spice://localhost:5701 』即可取得圖形畫面。 如果你是使用外部的 IP 時,那請放行防火牆,之後在 remove viewer 軟體輸入『 spice://your_kvm_host_ip:5701 』即可取得上課用的環境教材!

伺服器篇文件
各版本彙整說明
CentOS 6.x