# Kylin Linux Advanced Server V10 离线部署 KVM + Web 可视化管理

## 整体方案

<table id="bkmrk-%E7%BB%84%E4%BB%B6-%E8%BD%AF%E4%BB%B6%E5%8C%85-%E8%AF%B4%E6%98%8E-%E8%99%9A%E6%8B%9F%E5%8C%96%E5%86%85%E6%A0%B8-qemu"><thead><tr><th>组件</th><th>软件包</th><th>说明</th></tr></thead><tbody><tr><td>虚拟化内核</td><td>qemu-kvm、qemu-img</td><td>KVM 核心</td></tr><tr><td>虚拟化管理</td><td>libvirt、libvirt-client、virt-install</td><td>虚拟机生命周期管理</td></tr><tr><td>桥接网络</td><td>bridge-utils、iproute</td><td>虚拟机网络</td></tr><tr><td>**Web 可视化**</td><td>**cockpit + cockpit-machines**</td><td>浏览器管理界面（推荐）</td></tr><tr><td>本地图形（可选）</td><td>virt-manager</td><td>有桌面环境时使用</td></tr></tbody></table>

---

## 一、离线包准备（在同版本有网机器上操作）

找一台**相同 Kylin V10 版本**的联网机器（或虚拟机），下载全部依赖包：

```
# 创建包存放目录
mkdir -p /opt/kvm-offline

# 下载 KVM + Cockpit 全部依赖（不安装）
yum install --downloadonly --downloaddir=/opt/kvm-offline \
  qemu-kvm \
  qemu-kvm-tools \
  qemu-img \
  libvirt \
  libvirt-client \
  libvirt-python \
  virt-install \
  bridge-utils \
  iproute \
  cockpit \
  cockpit-machines \
  cockpit-networkmanager \
  cockpit-storaged \
  cockpit-packagekit \
  virt-viewer

```

> 如果 `--downloadonly` 报错（缺少插件），先执行：
> 
> ```
> yum install yum-plugin-downloadonly
> 
> ```

下载完成后，将整个 `/opt/kvm-offline` 目录打包拷到目标离线服务器：

```
tar czf kvm-offline.tar.gz -C /opt kvm-offline
# 拷贝到目标机器后解压
tar xzf kvm-offline.tar.gz -C /opt

```

---

## 二、目标服务器环境检查

```
# 1. 检查 CPU 是否支持虚拟化（vmx 或 svm 必须有输出）
egrep -c '(vmx|svm)' /proc/cpuinfo

# 2. 检查 KVM 模块是否加载（BIOS 需开启 VT-x/AMD-V）
lsmod | grep kvm

# 3. 查看系统版本
cat /etc/kylin-build
# 或
cat /etc/os-release

```

如果 `egrep` 返回 0，需要进 BIOS 开启虚拟化（Intel VT-x / AMD-V）。

---

## 三、配置本地离线 YUM 源

```
# 1. 挂载 Kylin V10 安装 ISO（如果有）
mkdir -p /mnt/kylin-iso
mount -o loop Kylin-Server-10.iso /mnt/kylin-iso

# 2. 备份原有源
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/

# 3. 创建本地 ISO 源
cat > /etc/yum.repos.d/local-iso.repo << 'EOF'
[local-iso]
name=Kylin V10 Local ISO
baseurl=file:///mnt/kylin-iso
enabled=1
gpgcheck=0
EOF

# 4. 创建离线 KVM 包源
cat > /etc/yum.repos.d/kvm-offline.repo << 'EOF'
[kvm-offline]
name=KVM Offline Packages
baseurl=file:///opt/kvm-offline
enabled=1
gpgcheck=0
EOF

# 5. 清理缓存并重建
yum clean all
yum makecache

```

> 如果没有 ISO，仅靠 `/opt/kvm-offline` 目录即可，`createrepo` 生成元数据：
> 
> ```
> yum install createrepo
> cd /opt/kvm-offline && createrepo .
> 
> ```

---

## 四、安装 KVM 核心组件

```
# 安装 KVM 和管理工具
yum install -y qemu-kvm qemu-img libvirt libvirt-client virt-install bridge-utils

# 启动 libvirtd 并设置开机自启
systemctl start libvirtd
systemctl enable libvirtd

# 验证安装
virsh --version
virsh list --all

```

---

## 五、安装 Cockpit Web 可视化管理界面

```
# 安装 Cockpit 及虚拟机管理插件
yum install -y cockpit cockpit-machines cockpit-networkmanager cockpit-storaged

# 启动 Cockpit
systemctl start cockpit.socket
systemctl enable cockpit.socket

# 防火墙开放 9090 端口
firewall-cmd --permanent --add-port=9090/tcp
firewall-cmd --reload

```

Cockpit 默认监听 **9090** 端口，浏览器访问：

```
https://服务器IP:9090

```

使用 **root 或本地系统用户** 登录即可。左侧菜单点 **"虚拟机"（Virtual Machines）** 即可：

- 创建/启动/停止/删除虚拟机
- 查看 VNC 控制台
- 分配 CPU、内存、磁盘、网卡
- 配置虚拟网络和存储池

---

## 六、配置桥接网络（让虚拟机和物理机同网段）

如果需要虚拟机和局域网其他机器互通，配置桥接网卡：

```
# 编辑物理网卡配置（假设网卡名为 eth0，用 ip addr 确认）
nmcli connection show

# 创建桥接接口
nmcli connection add type bridge con-name br0 ifname br0

# 将物理网卡加入桥接
nmcli connection add type bridge-slave con-name br0-port1 ifname eth0 master br0

# 配置 br0 的 IP（根据实际网络修改）
nmcli connection modify br0 ipv4.method manual \
  ipv4.addresses 192.168.1.10/24 \
  ipv4.gateway 192.168.1.1 \
  ipv4.dns 192.168.1.1

# 关闭原物理网卡的自动连接，激活桥接
nmcli connection down eth0
nmcli connection up br0

```

> 如果服务器是远程管理，**操作 NetworkManager 时务必小心**，建议带外管理口操作，避免网络中断。

---

## 七、创建虚拟机（两种方式）

### 方式一：Cockpit Web 界面（推荐）

1. 浏览器打开 `https://服务器IP:9090`
2. 左侧点 **虚拟机 → 创建虚拟机**
3. 选择安装介质（上传 ISO 或指定路径）
4. 分配 CPU、内存、磁盘
5. 网络选择 br0（桥接）或默认 NAT 网络
6. 点击创建，在 Web 控制台中安装系统

### 方式二：命令行创建

```
# 上传操作系统 ISO 到服务器 /var/lib/libvirt/images/

# 创建虚拟机示例（2核/4G/40G 磁盘）
virt-install \
  --name kylin-vm01 \
  --ram 4096 \
  --vcpus 2 \
  --disk path=/var/lib/libvirt/images/kylin-vm01.qcow2,size=40,format=qcow2 \
  --cdrom /var/lib/libvirt/images/Kylin-Server-10.iso \
  --network bridge=br0 \
  --graphics vnc,listen=0.0.0.0,port=5901 \
  --os-type linux \
  --os-variant kylin10

```

---

## 八、验证清单

```
# KVM 模块
lsmod | grep kvm

# libvirt 状态
systemctl status libvirtd

# Cockpit 状态
systemctl status cockpit.socket

# 虚拟网络
virsh net-list --all

# 存储池
virsh pool-list --all

# 查看现有虚拟机
virsh list --all

```

---

## 常见问题

<table id="bkmrk-%E9%97%AE%E9%A2%98-%E8%A7%A3%E5%86%B3-virsh-list-%E6%8A%A5-p"><thead><tr><th>问题</th><th>解决</th></tr></thead><tbody><tr><td>`virsh list` 报 `permission denied`</td><td>当前用户加入 libvirt 组：`usermod -aG libvirt root`，重新登录</td></tr><tr><td>Cockpit 打开后无"虚拟机"菜单</td><td>`yum install cockpit-machines`，确认已安装</td></tr><tr><td>Web 控制台黑屏</td><td>确认 `qemu-kvm-common` 已装，且 `--graphics vnc` 配置正确</td></tr><tr><td>离线包缺依赖</td><td>在有网机器上 `yum deplist 包名` 查看完整依赖链，或直接同步整个 base 源</td></tr><tr><td>虚拟机无法上网</td><td>NAT 模式检查 `virsh net-start default`；桥接模式检查 br0 配置</td></tr></tbody></table>

需要我补充某个具体环节（比如 ISO 源完整同步脚本、Cockpit 权限配置、或批量虚拟机创建）随时说。