在Hyper-V中运行Ubuntu以及安装Hadoop(上)

Author Avatar
EmptinessBoy 10月 08, 2020
  • 在其它设备中阅读本文章

安装虚拟机

在 Windows 中运行 Linux 的方法有两种。传统的就是安装虚拟机了,当然这两年也逐渐流行使用 WSL(Windows下的 linux 子系统)。由于使用 Linux 是为了完成学校的大数据相关课程,故为了减少折腾,采用传统的虚拟机安装大法。

虚拟机软件

Windows 下常用的虚拟机软件有 Vmware-WorkStation,以及 Oracle 的 virtualBox。由于考虑我在学校使用的平板电脑的配置,以及那小的可怜的影片。为了不为难我的可怜的PC平板二合一,我决定使用 Windows 平台自带的 Hyper-V 来进行虚拟化系统的搭建。

vtsoftware.md.jpg

这里真的大力安利一下 Hyper-V。可能不少人会对这个 Bug 软家的产品嗤之以鼻。(Windows 都那么难用,这 Hyper-V 肯定不行)。不过你要这样想,这个虚拟化平台买 Windows 就送,免费使用,界面简洁,占空间少。就这样还要啥自行车?

相比 Vmware 以及 VirtualBox ,Hyper-v 固然失去了增强的交互体验,3D图形加速。但也额外带来了动态内存以及更好的高达万兆的虚拟机网络适配器。

hyper-v.png

听说有的大佬想上 ProxmoxBox 以及 VmwareExsi,在这里给土豪大佬们端茶。其实我之前有在蜗牛星际上装过 Proxmox,不过要拿它来跑 Ubuntu 虚拟机就算了吧。

启用 Hyper-V

不需要苦逼的下载安装,只需要在添加下 Windows功能,然后重启下电脑,Hyper-V 就安装好了。

2020-10-05-120345.png

重启后,可以在开始菜单的程序列表处找到 Hyper-V 管理器

-2020-10-05-205758.png

新建虚拟机

打开后,就来创建第一个虚拟机吧!

首先,需要准备需要安装的操作系统的镜像,Ubuntu 的可以从这里下载:

https://ubuntu.com/download/desktop

下载完成对应的 ISO 镜像文件后,就可以新建虚拟机,新建时我选择了 4 核心的虚拟 CPU 以及 1GB 的动态内存。然后为虚拟机添加虚拟磁盘和虚拟 DVD 驱动器。驱动器的镜像就选择刚才下载的 ISO。

65.png

关于虚拟机的代数问题:看到网上不少教程都说 HYper-V 下部署 Linux 虚拟机需要创建时设置为一代虚拟机,选择第二代就有可能无法启动。

这里就给大家辟谣下:其实不论是一代还是二代虚拟机都是支持 Linux 的,两者的区别为,一代虚拟机使用传统的 BIOS 进行引导,而二代虚拟机使用了最新的 UEFI 进行引导。从使用体验上来说区别并不大,初次安装时其实没必要纠结使用哪一种。

调整启动参数

如果你和我一样使用了二代的虚拟机,并且启动时看到了如下的界面:

66.png

不要慌,这只是卡在了 UEFI 的安全校验上。

简单粗暴应对这一问题的方法就是直接把 UEFI 的安全启动直接关闭就好。当然也可以和我一样,单纯把安全校验选项切换为开源VM,而无需关闭安全启动。

26.png

调整完毕后,点击启动虚拟机,就可以进入 Ubuntu 的安装界面啦。

安装 Ubuntu 系统

开机!

29.png

开启虚拟机后,等待一段时间的加载,我们能看到一个简约清爽的欢迎界面:

31.png

选择语言,其实这里更推荐设置英文,因为中文界面下的 bash 命令行终端输出的调试信息也会变成中文,因为 Linux 中文资料较少,遇到报错时搜索错误会比较困难。不过后期也可以对此进行调整。

或许把系统设置为英文,但保留 Gnome 桌面的中文是一个最佳选择

接下来就是愉(wu)快(nao)的下一步:

35.png

泡杯茶,耐心等待进度条跑完 ……

37.png

再一次虚拟机重启的时候就可以看到熟悉的欢迎界面啦!!

39.png

配置虚拟机网络

Hyper下支持三种模式的网络:

-2020-10-07-185017.png

其中如果虚拟机处在 内部网络 虚拟交换机,那么Windows将为虚拟机提供一个独立的 NAT 内网,此时 Windows 的宿主机可以通过这个虚拟的网络访问虚拟机,但虚拟机无法通过网络直接访问物理机。这种方式下,可以使用 NAT 端口映射将虚拟机内部的端口暴露在物理机上。

如果是使用 外部网络 ,那么相当于被大家熟知的网卡桥接,虚拟机的网卡会和物理机网卡处于同一局域网,并需要上级路由器为其分配一个 IP 地址。

如果是 专用网络,那么 Windows 宿主机无法直接访问虚拟机,虚拟机也不能直接访问 Windows 主机,但是同一台宿主机上的多个虚拟机之间可以通过内部 IP 地址进行互相访问。

考虑到我用于运行虚拟机的电脑是笔记本,会处于各种不同的网络环境。为了减少折腾,这里我选择最简单的内部交换机,使用一个固定的内部 IP 来访问虚拟机。

43.png

可以看到物理机已经可以 ping 通虚拟机了。

配置 NAT 网络

考虑到后续可能会需要将虚拟机的端口暴露在局域网中,这里为 NAT 端口映射做一些准备:

为了让 Windows 物理机可以以一个固定的 IP 来访问虚拟机,我在 Linux 中将随机分配 ip 地址改为静态地址。并且在 Hyper-V 设置中将虚拟网卡的 mac 地址设成静态

-2020-10-08-200707.png

操作的方法很简单,只需要到系统的控制面板,将现在正在使用的网络适配器共享给 Linux 虚拟机就可以了。

46.png

在这一步操作过后虚拟机的 IP 段就会从原来的 172.* 变成 192.168.137.0/24。所以这一步操作完成后,我们还需要到 Linux 中把 IP 地址修改成和现在一样的网段。

47.png

两侧都完成配置后,使用宿主机 ping 虚拟机,成功 ping 通!

48.png

此后如果需要进行端口映射,只需要到 Windows 网络适配器,网络共享,设置 里面添加端口就行。

启用 ssh

连不上 ssh 的排错

到这时以为大功告成的我,欢天喜地的拿出 Xhell 大法,尝试连接我的虚拟机,确意外的提示连接被拒绝。

66.png

明明刚才是可以 ping 通的呀?使用 telnet 查看 22 端口,发现 ssh 默认使用的 22 号端口似乎没有开放。

/托腮

一通思考后,我屏幕上输入了 ps -e | grep ssh

-2020-10-08-204159cadb8aaf89625405.png

似乎有一些异样?

确实,通过进程可以看到现在只有一个ssh-agent的客户端在运行,但似乎没有任何对外提供ssh的服务存在。

到这里就知道应该怎么办啦,我们只需要安装一下 openssh-server 就可以了。在命令行运行命令:

$ sudo apt-get upgrade
$ sudo apt-get install openssh-server

67.png

在终端输入 y 来确认安装,安装后,重新使用 ps 命令查看 ssh 相关的进程:

68.png

可以看到 sshd 服务已经成功启用了。

使用 xshell 尝试连接,成功!

69.png

使用 root 远程登录

到这里我已经可以使用普通用户身份 huxiaofan 远程登录我的虚拟机了,但还没法远程使用 root 账户登录。因此需要做下面的两个操作:

设置 root 用户密码

这一步非常简单,使用 passwd 命令就能轻松搞定:

$ sudo passwd root

设置成功后我们使用 su 命令尝试切换当前用户身份:

$ su root
#

70.png

可以看到已经成功切换到 root 身份。但此时还是无法用 root 账户远程登录。

允许 root 远程登录

这一步的关键需要修改 sshd 服务的配置文件。所以使用 vi 编辑器来修改 sshd_conf。

$ vi /etc/sshd/sshd_conf

找到下面这一行 PermitRootLogin yes 然后将其取消注释即可。对了,不要忘记重新启动 ssh 服务。

$ service sshd restart

71.png

尝试使用 root 用户远程登录成功!

72.png

Tips 去除烦人的提示

如果和我一样,每次在连上 ssh 的时候就有如下的错误信息:

Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection

这个错误可能发生在某次失败的 apt 命令操作后。而想要解决也很简单:

  1. 移除 : /var/lib/ubuntu-release-upgrader/release-upgrade-available
  2. 运行 : /usr/lib/ubuntu-release-upgrader/release-upgrade-motd
# rm /var/lib/ubuntu-release-upgrader/release-upgrade-available

# cd /usr/lib/ubuntu-release-upgrader
# ./release-upgrade-motd

73_LI.jpg

运行后,重新使用 ssh 登录就不会看到那条错误信息啦。

Tips 启用增强会话(妙啊!)

2020-10-19 更新 启用增强会话

注意!需要在 Hyper-V 中使用二代虚拟机!

用剪贴板直接同步文字,虚拟机直接访问物理机磁盘。谁说这样的功能非得是 VMware 才有的呢?

用了几天的 Hyper-V 自带的连接虚拟机图形界面功能,这画面简直(掉帧,高时延,分辨率低……),而且不能在虚拟机和宿主机之间传文件,但其实,Hyper-V 也是可以和其他虚拟机软件一样为我们提供更加流畅好用的图形界面的。

不同于 VMware 的通过安装驱动 VMwareTools 的方法。Hyper-V 使用的是 XORG 下 XRDP 远程桌面的形式,(间接)实现了增强交互的目的。(这不同于 Hyper-V 默认连接到虚拟机的类似于 IPMI 虚拟显示器的形式。

启用的过程很简单,只需要直接运行下面的脚本(需要先安装 GIT):

# 脚本来自微软官方的 GitHub
# 使用时根据自己系统版本选择

git clone https://github.com/microsoft/linux-vm-tools.git
cd ./linux-vm-tools/ubuntu/20.04/
sudo chmod +x ./install.sh
sudo ./install.sh

ubuntu-xrdp_1.png

等待运行完,会提示重启虚拟机,同样不要忘记需要手动重启。

ubuntu-xrdp_3.png

重启后,进入该目录再次运行一次 install.sh。

sudo bash /linux-vm-tools/ubuntu/20.04/install.sh

ubuntu-xrdp_4.png

此时我们已经使用脚本自动化的安装,配置完了 XRDP。然后我们回到 Hyper-V 配置,来确认下是不是已经再 Hyper-V 中启用了增强会话。

ubuntu-xrdp_2.png

这时候,可能心急的小伙伴就试着去开虚拟机了,结果发现,哎呀,为啥虚拟机连接上面增强会话的按钮还是灰色的呢?别急,下面是很关键的一步:

Set-VM -VMName 你的虚拟机名字 -EnhancedSessionTransportType HvSocket
# Set-VM -VMName Ubuntu2020 -EnhancedSessionTransportType HvSocket

ubuntu-xrdp_5.png

这时候赶紧打开虚拟机体验一波吧!(由于是登录前对增强会话进行设置,所以需要关闭Linux的自动登录)

ubuntu-xrdp_6.png

可以看到增强会话的设置项已经出现了。可以配置虚拟机访问物理机磁盘和剪贴板了!

ubuntu-xrdp_7.png

使用 Xorg 的 Xrdp 可以获得更好的画质和更低的延时:

ubuntu-xrdp_8.png

下一篇继续更新

This blog is under a CC BY-NC-ND 4.0 Unported License
本文链接:https://coding.emptinessboy.com/2020/10/%E5%9C%A8Hyper-V%E4%B8%AD%E8%BF%90%E8%A1%8CUbuntu%E4%BB%A5%E5%8F%8A%E5%AE%89%E8%A3%85Hadoop%EF%BC%88%E4%B8%8A%EF%BC%89/