language lab, college, university

Linux – 打造輕巧 Linux 練習 Lab

輕量級的 Linux 練習環境,並虛擬化多台機器,俾利 Lab 練習。

1. 練習環境介紹

  1. 主控端虛擬化 bastion Server
  2. 4 台巢狀式虛擬式機器 (練習區)
  3. 所有均為無圖形化伺服器,減少無用資源消耗及硬碟空間
  4. 可以透過主控端隨時快速還原 4 台虛擬式機器 (練習區) 為初始設定
  5. 非常羽量化 (所有加起來機器空間僅使用硬碟 9G)
  6. 已經配置好 Ansible 環境可以直接使用

2. 環境需求

  1. 需具備 VMware player 16.x (含)以上 或 VirtualBox 虛擬軟體 (建議使用 VMware)

  2. 建議執行所需資源(含以上):

    CPU Memory Disk
    4 Cores 8G 40G
  3. 極限最小執行資源(效能極差且可能導致虛擬機停機):

    CPU Memory Disk
    2 Cores 4G 20G

執行速度會依據各電腦 CPU 時脈不同及硬碟 IO 速度有差別

3. 練習環境下載點

  • 載點為 Google Drive ,下載連結請點我

檔案壓縮後約 6.95 GB

Google Drive 雲端硬碟下載速度較其它空間來的快速,下載後解壓縮後,請依下方安裝步驟執行。
建議將檔案放置 SSD 硬碟分區內,執行速度會比較快。

Google Drive 下載圖例

4. 環境安裝方式

4.1 VMware 安裝方式

  1. 開啟 VMware 並選擇開啟虛擬機器

  1. 選擇下載後解壓縮的 howhow8-mini-base.vmx 檔

  2. 點擊編輯編輯該虛擬機器

  3. 確保下圖紅框(巢狀式虛擬化功能有開啟),另可以依實際狀況調整 CPU 或是 Memory

  1. 儲存後即可開啟機器

  2. 開啟後請選擇 "I Copied It" , VMware 將會自動產生新的 Mac Address

  1. 機器開啟後,登入帳號及密碼使用 ip addr show 查看你的電腦所分配的到浮動IP (此為 Bastion 控制機器IP)
    • 帳號 : student
    • 密碼 : student

預設使用橋接式網路,可以直接從宿主機器 SSH 訪問 bastion 虛擬機。

建議登入 Bastion 使用任何可以支援 SSH 連線工具 (Putty 、 GitBash 、 Terminal、Xshell ) 等登入練習,比較方便使用複製貼上等功能。


4.1 VirtuallBox 安裝方式

  1. 開啟 VirtuallBox 並點擊新增

    • 名稱 : howhow8-mini-base
    • 機器資料夾 : 預設或是可以自訂定義
    • 類型 : Linux
    • 版本 : Red Hat (64-bit)
  2. 選擇使用現有虛擬硬碟檔案

  1. 點擊加入虛擬硬碟檔案

  2. 選取練習環境下載解壓縮後的 howhow8-mini-base.vmdk

  3. 選取上一步加入的硬碟

  4. 建立後請勿開機,請先點擊設定選項

  5. 查看 系統-處理器下方紅框 "啟用 Nested VT-x/AMD-v" 選項是否呈現不可點選狀態

  1. 如出現上一步狀態,需切換至 VirtuallBox 資料夾(VirtuallBox檔案安裝路徑)後透過命令列方式啟動巢狀式虛擬化,指令如下
.\VBoxManage.exe modifyvm  "howhow8-mini-base"  --nested-hw-virt on
  1. 輸入完上一步指令後即可點選啟用巢狀式虛擬,並依需求調整 CPU 及 Memory

  1. 修改虛擬機網路介面卡,將介面卡1 NAT 改為橋接介面卡

  1. 儲存後即可開啟機器

  2. 機器開啟後,登入帳號及密碼使用 ip addr show 查看你的電腦所分配的到浮動IP (此為 Bastion 控制機器IP)

    • 帳號 : student
    • 密碼 : student

建議登入 Bastion 使用任何可以支援 SSH 連線工具 (Putty 、 GitBash 、 Terminal、Xshell ) 等登入練習,比較方便使用複製貼上功能。


5. 練習環境操作

5.1 Bastion 主控機

5.1.1 rht-vmctl 管理工具介紹

Bastion 主控機主要為啟停四台虛擬機或還原四台虛擬機初始設定

Bastion 主控機主要做為跳板機及控制虛擬機功能,裡面很多套件都被移除,請勿在此機器上執行其它操作,該機器無法自動還原 ..

透過 HowHow 的工具可以快速協助使用者可以簡單操作,使用 student 帳號,並透過 rht-vmctl 腳本進行相關作業

[student@bastion ~]$ rht-vmctl 

This utility manages  supplied VMs on the local hypervisor.

Usage: rht-vmctl VMCMD VMNAME 

  where VMCMD is one of:
    start      - start up VMNAME
    status     - get all status
    stop       - if running, force stop VMNAME
    reset      - force poweroff, return to saved or original state, start VMNAME
    display    - show VMNAME vnc information
    VMNAME of "all" processes all VMs available in the workstation、server[a-c]
	
    powered by HowHowWen
  • start – 啟動虛擬機 ( VMname / all )
  • status – 查看虛擬機狀態 ( VMname / all )
  • stop – 停止虛擬機 ( VMname / all )
  • reset – 還原虛擬機至初始狀態 ( VMname / all )
  • display – 顯示虛擬機 VNC 連線方式及訊息 ( VMname )

此用工具只在 Basetion 機器上面執行,建議可以開多個終端機,讓其中一個終端機停留在 Bastion 操作畫面,方便隨時停啟或是重置機器。


5.1.1 啟動虛擬機

5.1.1.1 啟動全部虛擬機器
  1. 透過工具開啟全部機器
rht-vmctl start all
[student@bastion ~]$ rht-vmctl start all
 Id   Name          State
-----------------------------
 1    workstation   running
 2    servera       running
 3    serverb       running
 4    serverc       running

[INFO]: 請先嘗試 ping workstation 直到機器完全開機 .. 
[INFO]: 開機完畢後請使用 ssh student@workstation 登入機器並開始練習 LAB  
[INFO]: /home/student/example 目錄下有範例主機及範例 Ansbile Playbook ~~ 
  1. 持續 ping 直到 workstation 機器開機
[student@bastion ~]$ ping workstation
PING workstation.lab.example.com (172.25.250.9) 56(84) bytes of data.
From bastion.com (172.25.250.1) icmp_seq=1 Destination Host Unreachable
From bastion.com (172.25.250.1) icmp_seq=2 Destination Host Unreachable
From bastion.com (172.25.250.1) icmp_seq=3 Destination Host Unreachable
64 bytes from workstation.lab.example.com (172.25.250.9): icmp_seq=4 ttl=64 time=0.385 ms
64 bytes from workstation.lab.example.com (172.25.250.9): icmp_seq=5 ttl=64 time=0.374 ms
...
  1. 登入 workstation 機器
ssh student@workstation
  • 帳號: student
  • 密碼: student

上述步驟如果都順利,表示環境已經正常啟用了。

5.1.1.2 啟動指定虛擬機器
  1. 透過工具開啟指定機器
rht-vmctl start servera
  1. 持續 ping 直到 servera 機器開機
[student@bastion ~]$ ping servera
PING servera.lab.example.com (172.25.250.10) 56(84) bytes of data.
64 bytes from servera.lab.example.com (172.25.250.10): icmp_seq=5 ttl=64 time=0.765 ms
64 bytes from servera.lab.example.com (172.25.250.10): icmp_seq=6 ttl=64 time=0.480 ms
64 bytes from servera.lab.example.com (172.25.250.10): icmp_seq=7 ttl=64 time=0.446 ms
  1. 登入 servera 機器
ssh student@servera
  • 帳號: student
  • 密碼: student

5.1.2 查看虛擬機狀態

5.1.2.1 查看全部虛擬機器
  • 透過工具查看全部機器
rhel-vmctl status all
[student@bastion ~]$ rht-vmctl status all
 Id   Name          State
-----------------------------
 1    workstation   running
 2    serverb       running
 3    serverc       running
 4    servera       running

5.1.3 停止虛擬機

5.1.3.1 停止全部虛擬機器
  • 透過工具停止全部機器
rht-vmctl stop all
[student@bastion ~]$ rht-vmctl stop all
[INFO]: 正常停止 workstation ... 請耐心等待 
[INFO]: 正常停止 servera ... 請耐心等待 
[INFO]: 正常停止 serverb ... 請耐心等待 
[INFO]: 正常停止 serverc ... 請耐心等待 
[INFO]: 請再次檢查所有機器是否均停止 ... 
...
5.1.3.2 啟動指定虛擬機器
  • 透過工具停止指定機器
rhel-vmctl stop servera
[student@bastion ~]$ rht-vmctl stop servera
[INFO]: 正常停止 servera ... 請耐心等待 

5.1.4 重置虛擬機

5.1.4.1 重置全部虛擬機器
  • 透過工具重置全部機器
rht-vmctl reset all
[student@bastion ~]$ rht-vmctl reset all
[INFO]: workstation 重置完畢... 
[INFO]: workstation 重新開機中... 請耐心等待 
[INFO]: servera 重置完畢... 
[INFO]: servera 重新開機中... 請耐心等待 
[INFO]: serverb 重置完畢... 
[INFO]: serverb 重新開機中... 請耐心等待 
[INFO]: serverc 重置完畢... 
[INFO]: serverc 重新開機中... 請耐心等待 
...
5.1.4.2 重置指定虛擬機器
  • 透過工具重置指定機器
rhel-vmctl reset servera
[student@bastion ~]$ rht-vmctl reset servera
[INFO]: servera 重置完畢... 
[INFO]: servera 重新開機中... 請耐心等待

5.1.5 顯示虛擬機 VNC 連線方式及訊息

  1. 需求

    • 使用 VNC Viewer Client 端軟體並安裝,載點請點我
  2. 透過工具顯示指定機器

rht-vmctl display servera
[student@bastion ~]$ rht-vmctl display servera
[INFO]:  servera VNC 此次連線地址: <Your Bastion IP>:5902
  1. 開啟 VNC Viewer Client , 並工具提示的連線地址進行連接
  • 輸入連線地址後即可操作機器

  • 也可以透過 VNC 進行 reboot重新開機,並請查看開機進度或是至 GRUB 設定

執行 reboot 都可以保持 VNC 畫面連線,但是執行 poweroff 指令等同把虛擬機關機,VNC連線會自動中斷。
每一次連線的 Port 都是隨機的,不一定是上一次的 Port,使用前請先檢查。


5.1.6 建立代理,查看虛擬機網路服務

  • 囿於 4台虛擬機是透過 NAT 網路方式連線,本身宿主機的瀏覽器是無法直接訪問的,必須要透過建立代理方式

  • 假設 Servera 啟動 httpd 服務在 80 port,且防火牆已經開放規則或是停用,如下圖

  • 使用瀏覽器嘗試訪問 servera ip (172.25.250.10) ,是無法正常顯示

5.1.6.1 建立代理步驟:
  1. 選擇任意可以支援 ssh 工具 ( 以GitBash為例 )建立 ssh 動態傳輸隧道

    ssh -vND 127.0.0.1:9453 root@<Your Bastion IP> 
    

    • 密碼 : redhat

此 SSH 步驟登入後,如要繼續使用網路代理請不要中斷該連線,會中止傳輸隧道。

  1. 選擇任意瀏覽器配置 Proxy ( 以 Firefox 為例 ),並保存使生效

  2. 重新嘗試訪問 servera ip (172.25.250.10),即可順利顯示

建議使用 Firefox 為瀏覽工具,設定方式相對容易。

5.2 登入 4 台練習虛擬機

  1. 登入 bastion 主控機後,並完成其內部虛擬機開機,即可使用 ssh 登入

    1. 一般使用者

      • 帳號: student
      • 密碼: student
    2. 管理者

      • 帳號: root
      • 密碼: redhat

workstation、servera、serverb、serverc 都可以任選登入。
練習 Ansible 請使用 workstaion機器,已經配置指定使用者免密碼認證機制。

  1. 如要重置該虛擬機,需至 bastion 主控機執行 rht-vmctl reset 指令

  2. 四台虛擬機只有 workstation 已經配置好 yum 倉庫來源,其餘三台需自行配置(設計用來練習),如急需使用可以透過下方指令操作

    sudo cp /etc/yum.repos.d/back_repo/rhel8.repo /etc/yum.repos.d/
    

    執行範例:

    [root@servera ~]# yum repolist all
    No repositories available
    [root@servera ~]# cp /etc/yum.repos.d/back_repo/rhel8.repo /etc/yum.repos.d/
    [root@servera ~]# yum repolist all
    repo id                                                        repo name                                                      status
    AppStream                                                      AppStream                                                      enabled
    BaseOS                                                         BaseOS                                                         enabled
    

  1. 如果要練習硬碟分割槽建立、格式化及 LVM ,可以透過 serverc ,已經掛載額外三顆硬碟 如下

    [root@serverc ~]# lsblk 
    NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0                      11:0    1 1024M  0 rom  
    vda                     252:0    0   10G  0 disk 
    ├─vda1                  252:1    0    1G  0 part /boot
    └─vda2                  252:2    0    9G  0 part 
      ├─rl_workstation-root 253:0    0    8G  0 lvm  /
      └─rl_workstation-swap 253:1    0    1G  0 lvm  [SWAP]
    vdb                     252:16   0  200M  0 disk 
    vdc                     252:32   0  300M  0 disk 
    vdd                     252:48   0  500M  0 disk 
    

額外掛載的硬碟空間都很小,主要設計用來切割 Partition、 LVM 等練習喔 ~~


  • Ansible 練習環境已經打造好了,透過 workstation 當作控制端,即可測試 Ansible 功能 如下圖

    [student@workstation example]$ ansible-playbook example-playbook.yaml 
    
    PLAY [exmaple] **********************************************************************************************************************
    
    TASK [Print Hello Ansible] **********************************************************************************************************
    ok: [servera] => {
        "msg": "Hello Ansible ~~"
    }
    ok: [serverb] => {
        "msg": "Hello Ansible ~~"
    }
    ok: [serverc] => {
        "msg": "Hello Ansible ~~"
    }
    ...
    

Ansible 測試目錄在 workstation /home/student/example 底下。


6. 使用練習環境小技巧

如果因練習不小心誤刪重要檔案,或是機器當機無法啟動的話,直接執行 rht-vm reset all ,重置所有機器或是指定單台機器,可以快速恢復初始的練習環境喔。

Bastion 那一台虛擬機請勿隨意更改配置,此機器無法透過指令還原,可能會導致整個環境不可用!!
如果不幸發生 Bastion 無法正常啟用,請在 VMware / VirtuallBox 將機器刪除,重新至 Google 雲端硬碟上下載再從新安裝匯入。


7. 小結

後續 HowHow 會持續更新 Linux 練習及 Ansible 練習題目,讓大家可以使用這個環境來進行練習。


如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!

Similar Posts