ServiceComputingOnCloud

实验一:安装配置一个私有云

17343101 苏祺达

实验目的


实验环境


  实验需要硬件虚拟化(AMD-V 或 Intel-VT)支持,部分旧笔记本不支持。

实验要求


实验过程


在 Virtual Box 上配置虚拟网卡,用于和虚拟机进行通信

  如图,在 Virtual Box 启动界面选择”工具“选项右边的的菜单按钮,选择”网络“,点击“创建“,Virtual Box 会生成一张虚拟网卡,取消“DHCP 服务器“的“启用”选项,以便过后静态配置虚拟机的 IP,并设置该虚拟网卡的的 IPv4 地址为 192.168.100.1/24,点击“应用”以应用该网卡设置。
虚拟网卡设置
  创建完网卡后,在宿主机上使用ipconfig命令,可以看见创建的虚拟网卡的配置信息 宿主机网卡

在 Virtual Box 上创建 CentOS 虚拟机

  在顶部菜单栏选择“控制”-“新建”选项,在弹出的界面中为虚拟机选择名字、存储位置,系统类型选择“Linux”,版本这里应该选择“Red Hat(64-bit)“的,因为 CentOS 相当于 Red Hat 的一个发行版,但是选择了“Other Linux(64-bit)“也没有什么问题。
虚拟机名字、存储位置、系统
  给虚拟机分配内存,这里内存的大小可以根据需要自行决定,因为电脑上常年有些吃内存的程序在运行,所以只分配了 2G 的内存给这台虚拟机。
虚拟机内存
  创建虚拟硬盘,并选择虚拟硬盘的类型、位置和容量,在类型选择这里理论上三种类型的虚拟硬盘都可以,但笔者曾经遇见过其他两种硬盘出错的状况,所以选择了第一种“VDI(Virtual Box 磁盘映像)“。至于磁盘空间分配方式,一般选择“动态分配”以节约宿主机空间。
选择虚拟磁盘类型
选择虚拟磁盘分配方式
选择虚拟磁盘大小和存储位置
  右键点击刚刚创建的虚拟机,选择“设置”-“网络”,为虚拟机创建网卡。第一张网卡连接方式为“网络地址转换(NAT)”,该模式下将会为虚拟机自动分配一个 IP 地址,外部对虚拟机的访问会通过宿主机的端口转发到该虚拟机上,但该模式下无法建立从宿主机到虚拟机的连接,也无法进行虚拟机与虚拟机之间的连接,因此要为虚拟机创建第二张虚拟网卡,用于宿主机与虚拟机之间的通信。选择该网卡的连接方式为”仅主机(Host-Only)网络“,界面名称为第一步中创建的宿主机网卡。
创建虚拟机网卡
创建虚拟机网卡
  在打开的设置界面中选择“存储”,继续为虚拟机选择磁盘映像,CentOS 的磁盘映像可以通过阿里云的镜像站下载,选择 Minimal 版本的光盘镜像下载就可以了。在存储界面选择“IDE 控制器”下的光盘图标,在右边的属性栏中有一个“分配光驱”选项,该选项的右边是一个光盘图标,点击该图标,选择“选择一个虚拟光盘文件”,选择刚刚下载的光盘镜像文件。
插入虚拟操作系统光盘
  点击右下方的“OK”以保存选项。双击创建的虚拟机启动虚拟机,等待片刻后出现安装菜单,选择“Install CentOS 7”。
安装菜单
  随后出现语言选择菜单,因为之前的操作系统版本选择错误的问题,这里会看不到鼠标,只能用 TAB 键切换到下面的搜索框搜索到“中文”,再使用 TAB 键切换“中文”选项,然后切换到“继续”按钮,按回车选择继续。
语言菜单
  接下去会出现“安装信息摘要“界面,一开始会有很多选项不可用,需静等片刻,直到只剩下一个选项为灰色的时候,再使用 TAB 键切换到“安装位置”,按回车进入,进去以后什么都不用做,按回车直接退出来就行了,接下去“开始安装”按钮就可以选中了,再使用 TAB 键(祺达大失败……)切换到这个按钮,就可以继续了。
安装信息摘要
安装位置
  接下去是安装的等待界面,在等待的过程中创建个人账户并给 root 账户设置密码。
等待界面
设置root密码
  安装完毕重启虚拟机,选择第一个选项进入系统。
系统选择菜单
  因为接下去要进行网络配置,很多地方要使用到 root 权限,因此使用 root 权限登录。
登录
  该系统可以使用 root 用户正常登录,至此,虚拟机安装完毕。

配置虚拟机网络,使虚拟机可以访问外网且主机与虚拟机之间可以相互通信

  使用nmcli con show命令,记下两张网卡的名字和 UUID,第一张网卡为连接外网用的网卡,第二张网卡为连接主机的网卡。
  使用ifconfig命令,记下两张网卡的 MAC 地址, MAC 地址为网卡名称对应的ETHER字段。
nmcli
  使用cp /etc/sysconfig/network-scripts/ifcfg-enp0s3 /etc/sysconfig/network-scripts/ifcfg-enp0s8命令,复制第一张网卡的配置文件,这里的enp0s3enp0s8分别为第一张网卡和第二张网卡的名称。
  使用vi /etc/sysconfig/network-scripts/ifcfg-enp0s8命令,配置第二张网卡,修改其中的5个字段:

  1. BOOTPROTO字段,修改为static
  2. NAME字段,修改为enp0s8
  3. DEVICE字段,修改为enp0s8
  4. ONBOOT字段,修改为yes
  5. UUID字段,修改为前一步记录下的第二张网卡的 UUID。

  并添加4个字段:

  1. IPADDR字段,其值为192.168.100.3(即这台虚拟机的地址,不可设置为192.168.100.2,会引发地址冲突);
  2. NETMASK字段,其值为255.255.255.0
  3. GATEWAY字段,其值为192.168.100.1(即地址是第一步中宿主机虚拟网卡的地址,此时这张网卡起到了网关的作用);
  4. HWADDR字段,其值为前一步记录下的第二张网卡的 MAC 地址。

  如图:
enp0s8
  使用vi /etc/sysconfig/network-scripts/ifcfg-enp0s3命令,配置第一张网卡,修改里面的ONBOOT字段为yes,并添加HWADDR字段,其值为前部记录下的第一张网卡的 MAC 地址。
  如图:
enp0s8
  使用shutdown -r 0命令,立刻重启虚拟机。继续使用 root 用户登录。
  使用vi /etc/resolv.conf命令,配置全局 DNS 服务器。第一个 DNS 服务器的地址是第一步中宿主机虚拟网卡的地址。
resolv.conf
  经过这几步配置,该虚拟机可以连接外网并正确解析域名了,ping 一下mirror.centos.org试试:
pingout
  于是使用yum update升级内核,并使用yum install安装 wget、vim、gcc、gcc-c++、gdb 等常用的工具。
install-wget
  由于这个系统内部已经安装了openssh-server,于是可以直接使用systemctl start sshd启动 ssh 服务,并使用ss -antp | grep sshd查看服务是否正在监听 22 端口。
start-sshd
  此时就可以通过宿主机 ssh 连接到虚拟机了,第一次连接会显示一个警告,询问是否接受来自该地址的公钥:
host-ssh
  至此,网络配置已经全部完成。

配置并连接虚拟桌面

  使用yum group install "GNOME Desktop"指令安装桌面,再使用startx指令启动桌面,就可以看到久违的 GUI 了:
desktop
  选择顶部的“Applications“-“Favorites“-”Terminal“,打开命令行界面,执行yum install epel*安装 EPEL 源,然后执行yum --enablerepo=epel install xrdp安装远程桌面服务器,但安装过程中遇到了如下问题:
error
  在xrdp的仓库下找到了相关issue,是因为 xorg 针对 CentOS 的版本更新总是延后一段时间造成的,该 issue 中也提到了解决方案,于是到https://apps.fedoraproject.org/packages/xorgxrdp/builds找到依赖 xorg-x11-server-Xorg(x86-64) 的版本低于 1.20.1-5.6 的最新的 xorgxrdp 版本为 xorgxrdp-0.2.7-3.fc29,于是执行wget https://kojipkgs.fedoraproject.org/packages/xorgxrdp/0.2.7/3.fc29/x86_64/xorgxrdp-0.2.7-3.fc29.x86_64.rpm下载该版本安装包,并使用yum install xorgxrdp-0.2.7-3.fc29.x86_64.rpm进行手动安装,安装完毕后再执行yum install --enablerepo=epel xrdp就可以继续安装了。
  安装完毕后使用systemctl start xrdp启动 xrdp 服务,并使用ss -antp | grep xrdp查看该服务正在监听的端口。
start-xrdp
  在宿主机上使用远程桌面连接虚拟机,但连接失败了:
rdp
rdp-error
  到虚拟机上使用vi /var/log/messsages查看错误信息,看到文件最后几行有如下信息:
messages
  猜想是因为防火墙没有放通3389端口导致的,于是执行如下指令放通3389端口和3350端口:

firewall-cmd --zone=public --add-port=3389/tcp --permanent
firewall-cmd --zone=public --add-port=3350/tcp --permanent
firewall-cmd --reload
systemctl restart firewalld

set-firewall
  然后就可以在宿主机上通过远程桌面访问虚拟机了。
rdp-warn
rdp-login rdp-success   要使用远程主机访问该虚拟机的远程桌面,只需要在虚拟机的第一张网卡界面,选择“高级”-“端口转发”,将主机上的空闲端口转发到虚拟机上的3389端口就行了。