---
# System prepended metadata

title: Linux HW5 - KVM
tags: [Linux]

---

# Linux HW5 - KVM

###### tags: `Linux`

## 參考文獻

* jaywcjlove on [GitHub](https://github.com/jaywcjlove/handbook/blob/master/CentOS/CentOS7%E5%AE%89%E8%A3%85KVM%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%AF%A6%E8%A7%A3.md)
* [傲笑紅塵路](https://www.lijyyh.com/2015/12/linux-kvm-set-up-linux-kvm.html)
* virt-install的man文件 on [linux.die.net](https://linux.die.net/man/1/virt-install)

---
## 前置作業
### 檢查 SELinux 的狀態 

CentOS 預設有啟用 SELinux，所以結果是 Enforcing，表示 SELinux 正在執行

```
getenforce
```

### 關閉 SELinux

```
vi /etc/sysconfig/selinux
```

`SELinux=enforcing` 修改成 `SELinux=disabled`

```
reboot
```

### 再次檢查 SELinux 的狀態

結果是 Disabled，表示 SELinux 已經關閉

```
getenforce
```

### 檢測是否支援 KVM

```
cat /proc/cpuinfo | egrep 'vmx|svm'
```

![](https://i.imgur.com/gdPhCLY.png)

### 準備 CentOS ISO
如何下載不用再提了吧?

### 安裝套件
```
yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer
```

### 確認 KVM 核心模組有載入
```
lsmod | grep kvm
```

![](https://i.imgur.com/iwFu1fN.png)

### 開啟 KVM 服務

```
systemctl start libvirtd
```

### 設置開機時自動啟動

```
systemctl enable libvirtd
```

### 查看狀態操作結果，確認其運行情況良好

```
systemctl status libvirtd
```

![](https://i.imgur.com/6K1HKqU.png)

---

### 關閉 NetworkManager

#### 前提概要：上一次我們已經固定 IP 了

看到綠色的 active (running), 那便表示 Network Manager 正在執行。

```
systemctl status NetworkManager.service
```

![](https://i.imgur.com/QOyVLGH.png)

```
systemctl stop NetworkManager
systemctl disable NetworkManager
```

---

### 設置橋接網路

#### 新增一個Bridge介面卡
於`/etc/sysconfig/network-scripts`新增`ifcfg-介面卡名稱`
內容加入
```
DEVICE=介面卡名稱
TYPE=Bridge
```
Bridge的B要一定要大寫，其他字母一定要小寫

#### 原固定ip的設定至該Bridge中
```
BOOTPROTO=none
IPADDR=
NETMASK=
GATEWAY=
DNS1=
DNS2=
```

#### 讓原本的Ethernet介面卡變成Bridge的slave
修改`/etc/sysconfig/network-scripts/ifcfg-當slave的介面卡`
內容加入
```
BRIDGE=br1
```

#### 啟動介面卡
```
ifup ifcfg-介面卡名稱
```

#### 用`ifconfig`確認正常運作

![](https://i.imgur.com/RadwJr5.png)



libvirt會像一個交換器一樣管理後續的分配

---

## 建立虛擬機

### 指令說明
### `virt-install` 基於libvirt服務的虛擬機器建立命令
`--virt-type` 指定使用的虛擬化方式，如`kvm`
`--name` 設定虛擬機名稱
`--vcpus` 設定虛擬機所需要用到的CPU核心數量
`--memory` 設定虛擬機所需要的空間，這邊設置為2GB
`--location` 指定iso檔的位置讓虛擬機可以去抓取(iso檔必須放到`/home/`下面，不然會因為許可權報錯，無法建立虛擬機器)
`--disk` 設置guest的儲存設備。以下為一些子參數: 格式為:`--disk para1=a,para2=b,...`
`path=`指定虛擬機要掛載的檔案(硬碟或光碟映像)位置，如果不存在，會自動嘗試建立新的虛擬硬碟
`size=`硬碟大小(GB)
`format=`指定格式

`--network` 網路設置，本次設置為橋接`bridge`
`--graphics` 圖形模式，本次規定使用文字模式，所以設成`none`
`--extra-args` 更多設置，只有在`--location`有設置時能使用。本次會用到`console=ttyS0`以將guest的輸出輸至ttys0。


範例:
```
virt-install \
--virt-type=kvm \
--name=1063003 \
--vcpus=1 \
--memory=2048 \
--location=/home/CentOS-8-x86_64-1905-dvd1.iso \
--disk path=/home/vms/1063003.qcow2,size=30,format=qcow2 \
--network bridge=br0 \
--graphics none \
--extra-args='console=ttyS0'
```
---
## `virsh` 管理虛擬機

這裡只列出一些常用的指令

在shell執行`virsh`後會進入virsh的指令介面
```
Welcome to virsh, the virtualization interactive terminal.

Type:  'help' for help with commands
       'quit' to quit

virsh #
```

`start {vm名稱}` 啟動指定的vm
`destory {vm名稱}` 關閉指定的vm
`console {vm名稱}` 以文字介面進入指定的vm
`undefine {vm名稱}` 刪除指定的vm
`edit {vm名稱}` 編輯指定vm的設定
`exit` 離開 virsh

---
## 虛擬機內安裝 CentOS

接下來我們需要配置系統基礎設置，帶`[!]`基本都是要配置的，按照順序往下配置，按對用的數字進行進行設置。

![](https://i.imgur.com/Jspytri.png)

1.選擇語言
2.選擇時區
3.iso檔掛載
4.選擇最小安裝
5.安裝目的地
6.不需要進行調整
7.網路設置(可安裝完後再設置)
8.設定root的密碼
9.建立使用者帳號密碼

當`[!]`都變成`[X]`的时候就可以開始安裝了，安裝完畢後，可以用`virsh console (虛擬機名稱)`指令來進入虛擬機。

---

## 更改網路設置

`su` 進入root
`cd /etc/sysconfig/network-scripts/` 進到這個檔案位置下
`ls` 查詢network-scripts內的檔案
`vi ifcfg-XXX` XXX部分為網卡名稱

```
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static //由dhcp改為static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens3
UUID= //每個人都不一樣，根據系統設置即可
DEVICE=ens3
ONBOOT=yes //由no更改為yes

//增加下列四行
IPADDR=10.2.200.X //設定個人的IP位置，X在本次作業中本組為182~185，根據每個人分配的而定
NETMASK=255.255.255.128 //設定網路遮罩
GATEWAY=10.2.200.239 //設定通訊閘
DNS1=140.130.81.11 //設定DNS
```
用 `ifdown` 關閉網路介面卡後再用 `ifup` 重新啟動以生效新的設定

---

## 測試網路是否會通

 `ping www.google.com` 看有沒有成功

![](https://i.imgur.com/Zw1CcuI.png)

---

## 作業檢查項目

### 1062998 林冠廷

![](https://i.imgur.com/vncQyfT.png)

### 1063003 許哲愷

![](https://i.imgur.com/4pInOQ5.png)

### 1063031 洪嘉銓

![](https://i.imgur.com/OJ3zwlJ.png)

### 1053008 盧柏瑜

![](https://i.imgur.com/pTc8xkH.png)
