Linux – 打造輕巧 Linux 練習 Lab
輕量級的 Linux 練習環境,並虛擬化多台機器,俾利 Lab 練習。
1. 練習環境介紹
- 主控端虛擬化 bastion Server
- 4 台巢狀式虛擬式機器 (練習區)
- 所有均為無圖形化伺服器,減少無用資源消耗及硬碟空間
- 可以透過主控端隨時快速還原 4 台虛擬式機器 (練習區) 為初始設定
- 非常羽量化 (所有加起來機器空間僅使用硬碟 9G)
- 已經配置好 Ansible 環境可以直接使用
2. 環境需求
-
需具備 VMware player 16.x (含)以上 或 VirtualBox 虛擬軟體 (建議使用 VMware)
-
建議執行所需資源(含以上):
CPU Memory Disk 4 Cores 8G 40G -
極限最小執行資源(效能極差且可能導致虛擬機停機):
CPU Memory Disk 2 Cores 4G 20G
執行速度會依據各電腦 CPU 時脈不同及硬碟 IO 速度有差別
3. 練習環境下載點
- 載點為 Google Drive ,下載連結請點我
檔案壓縮後約 6.95 GB
Google Drive 雲端硬碟下載速度較其它空間來的快速,下載後解壓縮後,請依下方安裝步驟執行。
建議將檔案放置 SSD 硬碟分區內,執行速度會比較快。
Google Drive 下載圖例
4. 環境安裝方式
4.1 VMware 安裝方式
- 開啟 VMware 並選擇開啟虛擬機器
-
選擇下載後解壓縮的 howhow8-mini-base.vmx 檔
-
點擊編輯編輯該虛擬機器
-
確保下圖紅框(巢狀式虛擬化功能有開啟),另可以依實際狀況調整 CPU 或是 Memory
-
儲存後即可開啟機器
-
開啟後請選擇 "I Copied It" , VMware 將會自動產生新的 Mac Address
- 機器開啟後,登入帳號及密碼使用
ip addr show
查看你的電腦所分配的到浮動IP (此為 Bastion 控制機器IP)- 帳號 : student
- 密碼 : student
預設使用橋接式網路,可以直接從宿主機器 SSH 訪問 bastion 虛擬機。
建議登入 Bastion 使用任何可以支援 SSH 連線工具 (Putty 、 GitBash 、 Terminal、Xshell ) 等登入練習,比較方便使用複製貼上等功能。
4.1 VirtuallBox 安裝方式
-
開啟 VirtuallBox 並點擊新增
- 名稱 : howhow8-mini-base
- 機器資料夾 : 預設或是可以自訂定義
- 類型 : Linux
- 版本 : Red Hat (64-bit)
-
選擇使用現有虛擬硬碟檔案
-
點擊加入虛擬硬碟檔案
-
選取練習環境下載解壓縮後的 howhow8-mini-base.vmdk
-
選取上一步加入的硬碟
-
建立後請勿開機,請先點擊設定選項
-
查看 系統-處理器下方紅框 "啟用 Nested VT-x/AMD-v" 選項是否呈現不可點選狀態
- 如出現上一步狀態,需切換至 VirtuallBox 資料夾(VirtuallBox檔案安裝路徑)後透過命令列方式啟動巢狀式虛擬化,指令如下
.\VBoxManage.exe modifyvm "howhow8-mini-base" --nested-hw-virt on
- 輸入完上一步指令後即可點選啟用巢狀式虛擬,並依需求調整 CPU 及 Memory
- 修改虛擬機網路介面卡,將介面卡1 NAT 改為橋接介面卡
-
儲存後即可開啟機器
-
機器開啟後,登入帳號及密碼使用
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 啟動全部虛擬機器
- 透過工具開啟全部機器
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 ~~
- 持續 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
...
- 登入 workstation 機器
ssh student@workstation
- 帳號: student
- 密碼: student
上述步驟如果都順利,表示環境已經正常啟用了。
5.1.1.2 啟動指定虛擬機器
- 透過工具開啟指定機器
rht-vmctl start servera
- 持續 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
- 登入 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 連線方式及訊息
-
需求
- 使用 VNC Viewer Client 端軟體並安裝,載點請點我
-
透過工具顯示指定機器
rht-vmctl display servera
[student@bastion ~]$ rht-vmctl display servera
[INFO]: servera VNC 此次連線地址: <Your Bastion IP>:5902
- 開啟 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 建立代理步驟:
-
選擇任意可以支援 ssh 工具 ( 以GitBash為例 )建立 ssh 動態傳輸隧道
ssh -vND 127.0.0.1:9453 root@<Your Bastion IP>
- 密碼 : redhat
此 SSH 步驟登入後,如要繼續使用網路代理請不要中斷該連線,會中止傳輸隧道。
-
選擇任意瀏覽器配置 Proxy ( 以 Firefox 為例 ),並保存使生效
-
重新嘗試訪問 servera ip (172.25.250.10),即可順利顯示
建議使用 Firefox 為瀏覽工具,設定方式相對容易。
5.2 登入 4 台練習虛擬機
-
登入 bastion 主控機後,並完成其內部虛擬機開機,即可使用 ssh 登入
-
一般使用者
- 帳號: student
- 密碼: student
-
管理者
- 帳號: root
- 密碼: redhat
-
workstation、servera、serverb、serverc 都可以任選登入。
練習 Ansible 請使用 workstaion機器,已經配置指定使用者免密碼認證機制。
-
如要重置該虛擬機,需至 bastion 主控機執行 rht-vmctl reset 指令
-
四台虛擬機只有 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
-
如果要練習硬碟分割槽建立、格式化及 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 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!