在前一章中,我们冒险进入了 Linux 和 Bash 的精彩世界的一些背景。由于这是一本实用的、以练习为导向的书,我们将使用这一章来设置一台机器,你可以跟随例子并在每章结束时进行练习。这可以是虚拟机,也可以是物理安装;这取决于你。我们将在本章的第一部分讨论这一点,然后继续安装 VirtualBox,最后创建一个 Ubuntu 虚拟机。
本章将介绍以下命令:ssh
和exit
。
本章将涵盖以下主题:
- 在虚拟机和物理安装之间进行选择
- 设置 VirtualBox
- 创建 Ubuntu 虚拟机
要完成本章(以及后续章节)中的练习,您将需要一台至少具有 2 GHz CPU 功率、10 GB 硬盘空间和大约 1 GB 备用 RAM 的 PC 或笔记本电脑。几乎所有过去 5 年中创建的硬件都应该足够了。
虚拟机是物理机的模拟。这意味着它在物理机器内部运行*,而不是直接在硬件*上运行**。物理机器可以直接访问所有硬件,如中央处理器、随机存取存储器和其他设备,如鼠标、键盘和显示器。然而,在多台物理机器之间共享中央处理器或内存是不可能的。虚拟机不直接访问硬件,而是通过仿真层,这意味着资源可以在多个虚拟机之间共享。**
*因为我们一般讨论的是 Bash shell 脚本,所以理论上来说,执行什么样的安装并不重要。只要该安装运行的是与 Bash 4.4 或更高版本兼容的 Linux 操作系统,所有练习都应该可以。但是,与物理安装相比,使用虚拟机有许多优势:
- 不需要删除当前首选的操作系统,也不需要设置复杂的双引导配置
- 虚拟机可以创建快照,这允许从严重故障中恢复
- 您可以在一台机器上运行(许多)不同的操作系统
不幸的是,使用虚拟机也有一些缺点:
- 因为您在已经运行的操作系统中运行虚拟操作系统,所以虚拟化会带来一些开销(与运行裸机安装相比)
- 由于您同时运行多个操作系统,因此您将需要比裸机安装更多的资源
在我们看来,现代计算机足够快,可以让缺点变得几乎微不足道,而在虚拟机中运行 Linux 提供的优势非常有帮助。因此,我们将只在本章的剩余部分解释虚拟机设置。如果你有足够的信心将 Linux 作为一个物理安装来运行(或者你可能已经在某个地方运行了 Linux!),请随意用那台机器探索本书的其余部分。
You might have a Raspberry Pi or another single-board computer running Linux in your house from a previous project. While these machines are indeed running a Linux distribution (Raspbian), they are probably running it on a different architecture: ARM instead of x86. Because this can cause unexpected results, we recommend only using x86 devices for this book.
如果您想确保所有示例和练习都像本书中看到的那样工作,请在 VirtualBox 中运行 Ubuntu 18.04 LTS 虚拟机,建议规格为 1 个 CPU、1 GB RAM 和 10 GB 硬盘:本章其余部分将介绍该设置。即使许多其他类型的部署应该可以工作,您也不希望在发现某个练习是由您的设置导致的之前,您的头撞在墙上几个小时。
要使用虚拟机,我们需要名为虚拟机管理程序的软件。虚拟机管理程序管理主机和虚拟机之间的资源,提供对磁盘的访问,并具有管理所有资源的界面。有两种不同类型的虚拟机管理程序:类型 1 和类型 2。类型 1 虚拟机管理程序是所谓的裸机虚拟机管理程序。这些是直接安装在硬件上的,而不是常规的操作系统,如 Linux、macOS 或 Windows。这些类型的虚拟机管理程序用于公司服务器、云服务等。在本书中,我们将使用类型 2 虚拟机管理程序(也称为托管虚拟机管理程序):这些虚拟机管理程序安装在另一个操作系统中,作为一个软件,与浏览器没有太大区别。
有许多类型 2 虚拟机管理程序。在撰写本文时,最受欢迎的选择是 VirtualBox、VMware 工作站播放器或特定于操作系统的变体,如 Linux 上的 QEMU/KVM、macOS 上的 Parallels Desktop 和 Windows 上的 Hyper-V。因为我们将在这本书中使用虚拟机,所以我们不假设任何关于主机的事情:您应该舒适地使用您喜欢的任何操作系统。正因为如此,我们选择使用 VirtualBox 作为我们的虚拟机管理程序,因为它运行在 Linux、macOS 和 Windows(甚至其他平台!).此外,VirtualBox 是免费的开源软件,这意味着您可以下载并使用它。
目前,VirtualBox 归甲骨文所有。可以从https://www.virtualbox.org/下载 VirtualBox 的安装程序。安装时不要用力;按照安装人员的说明进行操作。
After installing a type-2 hypervisor such as VirtualBox, be sure to restart your computer. Hypervisors often need some kernel modules loaded, which is easiest to achieve by rebooting.
在本书中,我们使用 Bash 编写脚本,这意味着我们的 Linux 安装不需要图形用户界面。我们选择使用 Ubuntu Server 18.04 LTS 作为虚拟机操作系统,原因有很多:
- Ubuntu 被认为是一个初学者友好的 Linux 发行版
- 18.04 是长期支持 ( LTS )版本,这意味着它将在 2023 年 4 月之前收到更新
- 因为 Ubuntu 服务器只提供命令行界面安装,所以它很容易占用系统资源,是现实服务器的代表
在撰写本文时,Ubuntu 由 Canonical 维护。可以从https://www.ubuntu.com/download/server下载 ISO 图片。现在下载该文件,并记住您保存该文件的位置,因为您很快就会需要它。
Should the preceding download link no longer work, you can go to your favorite search engine and search for Ubuntu Server 18.04 ISO download
. You should find a reference to the Ubuntu archives, which will have the required ISO.
首先,我们将从创建虚拟机来托管我们的 Ubuntu 安装开始:
- 打开 VirtualBox,在菜单工具栏中选择“机器|新建”。
- 作为参考,我们在下面截图中给出的菜单工具栏中圈出了机器条目。为虚拟机选择一个名称(这可以是与服务器名称不同的名称,但为了简单起见,我们希望保持不变),将类型设置为 Linux,将版本设置为 Ubuntu (64 位)。单击下一步:
- 在此屏幕上,我们确定内存设置。对于大多数服务器来说,1024 兆内存是一个很好的开始(VirtualBox 也推荐虚拟机使用)。如果你有强大的硬件,这可以设置为 2048 兆字节,但 1024 兆字节应该没问题。做出选择,然后按下一步:
- 同样,VirtualBox 推荐的值非常适合我们的需求。按“创建”开始创建虚拟硬盘:
- 虚拟硬盘可以是许多不同的类型。VirtualBox 默认使用自己的格式 VDI ,而不是 VMDK ,这是 VMware(另一个流行的虚拟化提供商)使用的格式。最后一个选项是 VHD(虚拟硬盘),这是一种更通用的格式,可供多个虚拟化提供商使用。由于我们将在本书中专门使用 VirtualBox,请将选择保留在 VDI **(VirtualBox 磁盘映像)**上,然后按下一步:
- 我们在这个屏幕上有两个选项:我们可以立即在物理硬盘上分配完整的虚拟硬盘,或者我们可以使用动态分配,它不保留虚拟磁盘的完整大小,而只保留已使用的大小。
这些选项之间的差异通常与许多虚拟机运行在单个主机上的情况最为相关。创建大于物理可用容量的磁盘总数,但假设并非所有磁盘都将被完全使用,这允许我们在一台机器上放置更多虚拟机。这被称为过度调配,只有在并非所有磁盘都已填满的情况下才会起作用(因为我们可以永远不会拥有比物理磁盘空间更多的虚拟磁盘空间)。对我们来说,这种区别并不重要,因为我们将运行一台虚拟机;我们保留默认的“动态分配”并进入下一个屏幕:
- 在这个屏幕上,我们可以做三件事:命名虚拟磁盘文件,选择位置,并指定大小。如果你关心位置(默认在你的
home
/user
目录的某个地方),可以按下下面截图中带圆圈的图标。对于名称,我们希望它与虚拟机名称保持一致。最后,对于本书中的练习,10 GB 的大小就足够了。设置完这三个值后,请按“创建”。祝贺您,您刚刚创建了第一台虚拟机,如下图所示:
- 然而,在我们开始在虚拟机上安装 Ubuntu 之前,我们还需要做两件事:将虚拟机指向安装 ISO,并设置网络。选择新创建的虚拟机,然后单击设置。导航到存储部分:
您应该会看到一个带有单词“空”的磁盘图标(在前面截图中的左侧圆圈位置)。选择它并通过单击选择磁盘图标(在右侧画圈)挂载一个 ISO 文件,选择虚拟光盘文件,然后选择您之前下载的 Ubuntu ISO。如果您这样做是正确的,您的屏幕应该类似于前面的截图:您不再看到磁盘图标旁边的空字,并且应该填写信息部分。
- 一旦您验证了这一点,请转到网络部分。
- 配置应该默认为 NAT 类型。如果没有,现在就设置为 NAT。 NAT 代表网络地址转换。在这种模式下,主机充当虚拟机的路由器。最后,我们将设置一些端口转发,以便以后可以使用 SSH 工具。单击端口转发按钮:
- 正如我们所做的,设置 SSH 规则。这意味着来宾(即虚拟机)上的端口
22
暴露为主机(令人惊讶的是,主机)上的端口2222
。我们选择端口2222
有两个原因:低于 1024 的端口需要 root/管理员权限,而我们可能没有。其次,SSH 进程有可能已经在主机上侦听,这意味着 VirtualBox 将无法使用该端口:
至此,我们已经完成了虚拟机的设置!
现在,您可以从 VirtualBox 主屏幕启动您的虚拟机。右键点击机器,选择 S 挞,然后选择正常启动。如果一切顺利,将弹出一个新窗口,向您显示虚拟机控制台。过了一会儿,您应该会在该窗口中看到 Ubuntu 服务器安装屏幕:
- 在如下截图所示的屏幕上,使用箭头键选择您喜欢的语言(我们使用的是英语,所以如果您不确定,英语是一个不错的选择)并按进入:
- 选择您正在使用的键盘布局。如果您不确定,可以使用交互式“识别键盘”选项来确定哪种布局最适合您。设置好合适的布局后,将焦点移到完成,按进入:
- 我们现在选择安装类型。因为我们使用的是服务器 ISO,所以看不到任何与 GUI 相关的选项。在前面的截图中,选择安装 Ubuntu(其他两个选项都使用 Canonical 的金属即服务器 ( MAAS )云产品,与我们无关)并按进入:
- 您将看到网络连接屏幕。安装程序应该默认在虚拟机创建的默认网络接口上使用 DHCP。确认该接口已经分配了一个 IP,按进入:
- “配置代理”屏幕与我们无关(除非您运行的是代理设置,但在这种情况下,您很可能不需要我们的安装帮助!).将代理地址留空,然后按进入:
- 有时手动对 Linux 磁盘进行分区以适应特定的需求是有帮助的。在我们的例子中,使用整个磁盘的默认值非常合适,所以按进入:
- 选择要使用整个磁盘后,我们需要指定要使用哪个磁盘。由于我们在配置虚拟机时只创建了一个磁盘,所以选择它并按进入。
- 现在,您将会遇到一个关于执行破坏性操作的警告。因为我们使用的是整个(虚拟的!)磁盘,该磁盘上的所有信息都将被擦除。我们在创建虚拟机时创建了这个磁盘,因此它不包含任何数据。我们可以安全地执行此操作,因此选择继续并按进入:
- 对于文件系统设置,默认值再次完美地满足了我们的需求。验证我们至少有 10 GB 的硬盘空间(可能会少一点,如下例中的 9.997 GB:这样就可以了)并按进入:
- Ubuntu 服务器现在应该开始安装到虚拟磁盘。在这一步中,我们将设置服务器名称并创建一个管理用户。我们选择了服务器名
ubuntu
,用户名reader
,密码password
。请注意,这是一个非常弱的密码,为了简单起见,我们将只在此服务器上使用。这是可以接受的,因为服务器只能从我们的主机上访问。配置接受来自互联网的传入流量的服务器时,切勿使用如此弱的密码!选择你喜欢的任何东西,只要你能记住它。如果您不确定,我们建议使用相同的ubuntu
、reader
和password
值:
现在您已经选择了服务器名称并配置了管理用户,请按进入以完成安装。
- 根据完成前一个屏幕所需的时间以及主机的速度,Ubuntu 要么仍在安装,要么已经完成。如果您仍然看到文本在屏幕上移动,则安装仍在运行。安装完成后,您将看到“立即重新启动”按钮出现。按进入:
- 几秒钟后,应会出现一条消息,说明
Please remove the installation medium, then press Enter
。按照说明操作,如果一切顺利,您应该会收到终端登录提示:
Normally, VirtualBox is intelligent enough to try a second boot from the hard disk instead of the ISO. If, after the previous steps, a reboot sends you back to the installation menu, power down the virtual machine from the VirtualBox main screen. Right-click on the machine, select Close followed by Power Off. After it's fully powered down, edit the machine and remove the ISO. This should force VirtualBox to boot from the disk, which contains your Ubuntu Server 18.04 LTS installation.
- 现在是关键时刻:尝试使用您创建的用户名和密码登录。如果成功,您应该会看到类似以下内容的屏幕:
拍拍自己的背:你刚刚创建了一个虚拟机,安装了 Ubuntu Server 18.04 LTS,并通过终端控制台登录。干得好!退出时,输入exit
或logout
,按进入。
我们已经成功连接到 VirtualBox 提供给我们的终端控制台。但是,这个 Terminal 连接真的很基础:比如我们不能向上滚动,不能粘贴复制的文本,没有彩色语法高亮。幸运的是,我们有一个不错的选择:安全 Shell 协议。SSH 用于连接到虚拟机上运行的 shell。通常,这将通过网络完成:这是企业维护其 Linux 服务器的方式。在我们的设置中,我们实际上可以在我们的主机中使用 SSH,使用我们之前设置的电源转发。
如果您遵循安装指南,主机上的端口2222
应该重定向到虚拟机上的端口22
,也就是运行 SSH 进程的端口。从 Linux 或 macOS 主机上,我们可以使用以下命令进行连接(如有必要,请替换用户名或端口号):
$ ssh reader@localhost -p 2222
但是,您很有可能正在运行 Windows。在这种情况下,您可能无法在命令提示符下访问本机 SSH 客户端应用。幸运的是,有很多好的(而且是免费的!)SSH 客户端。最简单最知名的客户端是 PuTTY 。PuTTY 创建于 1999 年,虽然它绝对是一个非常稳定的客户,但它的时代已经开始显现。我们会推荐一些更新的 SSH 客户端软件,比如 MobaXterm 。这为您提供了更多的会话管理、更好的图形用户界面,甚至是本地命令提示符!
无论您选择哪种软件,请确保使用以下值(同样,如果您偏离了安装指南,请更改端口或用户名):
- 主机名:
localhost
- 港口:
2222
- 用户名:
reader
If you're using SSH to connect to your virtual machine, you can start it headless. When you do this, VirtualBox will not create a new window with the Terminal console for you, but instead runs the virtual machine in the background where you can still connect via SSH (just like what happens on actual Linux servers). This option, Headless Start, is found right below the earlier Normal Start, when right clicking on the machine and selecting Start.
在本章中,我们已经开始为本书的其余部分准备本地机器。我们现在知道了虚拟机和物理机之间的区别,以及为什么我们更喜欢在本书的剩余部分使用虚拟机。我们已经了解了两种不同类型的虚拟机管理程序。我们已经用虚拟机安装并配置了 VirtualBox,在虚拟机上我们已经安装了 Ubuntu 18.04 操作系统。最后,我们已经使用 SSH 而不是 VirtualBox 终端连接到我们正在运行的虚拟机,这提供了更好的可用性和选项。
本章介绍了以下命令:ssh
和exit
。
在下一章中,我们将通过查看一些不同的工具来完成本地机器的设置,这些工具可以帮助我们在图形用户界面和虚拟机命令行界面上使用 bash 脚本。
- 运行虚拟机比裸机安装更可取的一些原因是什么?
- 与裸机安装相比,运行虚拟机有哪些缺点?
- 类型 1 和类型 2 虚拟机管理程序之间有什么区别?
- 我们可以通过哪两种方式在 VirtualBox 上启动虚拟机?
- Ubuntu LTS 版有什么特别之处?
- 如果在 Ubuntu 安装后,虚拟机再次引导到 Ubuntu 安装屏幕,我们该怎么办?
- 如果我们在安装过程中不小心重启,并且我们从未在 Ubuntu 安装中结束(而是看到一个错误),我们该怎么办?
- 我们为什么要为虚拟机设置 NAT 转发?
如果您想深入了解本章的主题,以下资源可能会很有意思:
- *通过 Pradyumna Dash、Packt: 开始使用 Oracle VM VirtualBox*https://www . packtpub . com/虚拟化与云/入门-oracle-vm-virtualbox
- 精通 Ubuntu 服务器-第二版作者:Jay LaCroix,Packt:https://www . packtpub . com/networking-and-servers/Mastering-Ubuntu-Server-第二版*