如何从UbuntuISO格式映像创建DigitalOceanDroplet
介绍
DigitalOcean 的 Custom Images 功能允许您将虚拟磁盘映像从本地环境或其他云平台带到 DigitalOcean,并使用它们来启动 DigitalOcean Droplets。
如 自定义图像文档 中所述,自定义图像上传工具原生支持以下图像类型:
ISO 是另一种流行的图像格式,您可能希望将其与自定义图像一起使用。 Linux 发行版经常提供 ISO 映像作为安装 Linux 的便捷方法。 不幸的是,上传工具目前不支持 ISO 映像,但计划在 2018 年底提供支持。
在本教程中,我们将演示如何使用免费和开源的 VirtualBox 虚拟化工具从 Ubuntu 18.04 ISO 创建与 DigitalOcean 兼容的 VDI 映像(VirtualBox 磁盘映像)。 本指南中的步骤可适用于您首选发行版的 ISO 映像。
先决条件
在开始之前,您需要以下内容:
- 您将在其上安装和使用 VirtualBox 的本地计算机或远程服务器(具有 GUI 访问权限)。 在本教程中,我们将使用 Mac OS X 本地计算机,但您可以使用 VirtualBox 支持的任何系统。 要了解有关支持系统的更多信息,请参阅 VirtualBox 手册。 GUI 菜单选项在不同的操作系统中应该是相似的,但可能并不相同。
- ISO 格式 Ubuntu 18.04 服务器操作系统映像 。
ubuntu-18.04.1-live-server-amd64.iso
图像满足自定义图像图像要求中列出的两个要求:- 您的映像必须支持 ext3 或 ext4 文件系统
- 您的映像必须安装
cloud-init
0.7.7、cloudbase-init
、coreos-cloudinit
、iginition
或bsd-cloudinit
(Ubuntu 18.04 服务器附带 [ X126X] 已安装)
如果您正在为其他发行版的 ISO 调整这些步骤,并且您的映像没有安装和配置 cloud-init
,则必须在安装操作系统后手动安装和配置它。
一旦您具备了这些先决条件,您就可以开始阅读本指南了。
第 1 步 — 安装 VirtualBox 并创建虚拟机
我们将在本指南中用于转换 ISO 格式映像的工具是 VirtualBox,这是一个免费的开源 x86 硬件虚拟化器。 默认情况下,VirtualBox 使用 GUI,我们将在本指南中使用它来创建 VDI 映像。
首先,从 下载 页面下载并安装 VirtualBox。 根据您的主机操作系统,点击 VirtualBox 5.2.20 平台包 部分中的相应链接。 在本指南中,我们将使用 OSX 系统,因此我们将使用提供的 DMG 下载并安装 VirtualBox。
安装 VirtualBox 后,打开应用程序。
您应该看到以下欢迎屏幕:
点击 New 开始创建你的 Ubuntu 虚拟机。
应弹出以下窗口,允许您命名虚拟机 (VM) 并选择其操作系统:
在本教程中,我们将 VM 命名为 Ubuntu 18.04
,但请随意给 VM 起一个更具描述性的名称。
对于 Type,选择 Linux,对于 Version,选择 Ubuntu (64-bit)。 然后,点击 继续 。
应出现以下屏幕,允许您指定要分配给虚拟机的内存量:
除非您有更复杂的用例,否则 1024 MB 的内存应该足够您的虚拟机使用。 如果需要调整内存大小,请输入要分配给 VM 的内存量,然后点击 继续 。
您应该看到以下屏幕:
此窗口允许您为 VM 创建虚拟硬盘。 此虚拟硬盘是您将在后续步骤中上传到 DigitalOcean 的图像。 Ubuntu 操作系统将从您下载到此虚拟硬盘的 ISO 安装。 确保选择Create a virtual hard disk now,然后点击Create。
应出现以下 硬盘文件类型 窗口,允许您选择要用于图像的格式:
DigitalOcean 自定义映像支持所有三种类型,因此除非您有强烈的偏好,否则请选择 VDI (VirtualBox 磁盘映像)。 点击 继续 。
然后您应该看到以下窗口:
此窗口允许您在 动态分配 或 固定大小 硬盘文件之间进行选择。 我们将使用默认的 动态分配的 选项,并允许文件在我们安装 Ubuntu 操作系统和软件包时增长。 点击 继续 。
下一个窗口允许您命名硬盘文件(以及选择将保存的路径),并指定其最大大小:
请务必为自己提供足够的磁盘空间来安装操作系统以及您可能需要的其他软件包。 默认的 10 GB 对于大多数用途来说应该没问题,但是如果您预计安装大量软件包或在映像中存储大量数据,您应该将其提高到您预期的磁盘使用量。
一旦你选择了虚拟硬盘的大小,点击Create。
此时,您将返回到初始欢迎屏幕,您将在其中看到刚刚创建的虚拟机:
我们现在可以开始将 Ubuntu 安装到虚拟机上。
第 2 步 — 将 Ubuntu 18.04 安装到虚拟机上
在这一步中,我们将在我们的虚拟机上安装和配置 Ubuntu 操作系统。
首先,从 VirtualBox 欢迎屏幕中,选择您的虚拟机,然后点击工具栏中的 Start 按钮。
您应该看到以下虚拟机窗口,提示您选择启动系统的 ISO 文件:
选择您下载的 Ubuntu 18.04 服务器 ISO,然后点击 Start。
在 VM 中,Ubuntu 安装程序将从 ISO 启动,您应该会进入以下菜单:
使用箭头键选择您喜欢的语言,然后点击 ENTER
继续。
然后您应该会看到以下 键盘配置 屏幕:
选择您喜欢的键盘配置,选择 Done,然后点击 ENTER
。
接下来,您将进入以下安装程序选择屏幕:
选择 Install Ubuntu,然后点击 ENTER
。
应出现以下 网络连接 屏幕:
此屏幕允许您为 Ubuntu 服务器配置网络接口。 由于我们是在虚拟机上执行安装,我们将只使用默认选项,因为当我们在 DigitalOcean 平台上启动映像时,配置的界面将被覆盖。
选择 Done 并点击 ENTER
。
然后您将被带到以下 配置代理 屏幕:
如果您需要代理,请在此处输入。 然后,选择 Done,然后点击 ENTER
。
下一个屏幕将允许您选择一个 Ubuntu 存档镜像:
除非您需要特定的镜像,否则这里的默认值应该没问题。 选择 Done 并点击 ENTER
。
接下来,系统会提示您对虚拟磁盘进行分区:
除非您想设置 Logical Volume Manager (LVM) 或手动对虚拟磁盘进行分区,否则选择 Use An Entire Disk 以使用整个附加的虚拟磁盘,然后点击 [X190X ]。
以下屏幕允许您选择要分区的虚拟磁盘:
如提示文字所述,安装程序将为引导加载程序创建一个分区,并使用剩余的虚拟磁盘空间创建一个 ext4
分区,用于安装 Ubuntu 操作系统。
选择附加的虚拟磁盘并点击 ENTER
。
以下屏幕显示分区前文件系统安装程序选项的摘要:
ext4
分区将挂载到 /
,并且将为 GRUB 引导加载程序 创建第二个分区 (1 MB)。 完成并确认虚拟磁盘的分区方案后,选择 Done 并点击 ENTER
。
在出现的确认屏幕中,选择 Continue 并点击 ENTER
。
下一个屏幕将允许您配置系统主机名以及 Ubuntu 用户:
请注意,当您填写此屏幕时,安装程序将继续在后台将文件复制到虚拟磁盘。
在本教程中,我们将创建一个名为 sammy 的用户并调用我们的服务器 ubuntu。 当此映像在 DigitalOcean 平台上运行时,服务器名称可能会被覆盖,因此请随意在此处给它一个临时名称。
您可以将您的 SSH 密钥上传到 DigitalOcean 并自动将它们嵌入到创建的 Droplet 中,所以现在我们不会导入 SSH 身份。 要了解如何将 SSH 密钥上传到 DigitalOcean,请参阅 Droplet 产品文档。
填写完所有必填字段后,提示应如下所示:
选择 Done 并点击 ENTER
。
下一个屏幕将提示您为您的 Ubuntu 服务器选择流行的快照。 Snap 是预先打包的软件捆绑包,其中包含应用程序、其依赖项和配置。 要了解有关 snap 的更多信息,请参阅 Snap 文档。
在本指南中,我们不会安装任何 snap 包,并将在后面的步骤中手动安装包。 如果您想安装 snap,请使用 SPACE
选择或取消选择它,然后向下滚动到 Done。 然后,点击 ENTER
。
无论您在快照屏幕中进行何种选择,您都会进入安装进度和摘要屏幕:
安装完成后,选择 Reboot Now 并点击 ENTER
。
安装程序将关闭并提示您删除安装介质(在这种情况下,这是我们之前选择的 ISO 映像)。 在大多数情况下,ISO 会在重新启动时自动分离,因此您只需点击 ENTER
。
要仔细检查,在 VirtualBox GUI 菜单中,导航到 Devices,然后是 Optical Drives。 如果您可以使用 Remove disk from virtual drive 选项,请单击它以从虚拟机中分离 ISO。 然后,回到虚拟机窗口,点击 ENTER
。
系统将在虚拟机中重新启动,这次是从我们安装 Ubuntu 的虚拟磁盘重新启动。
由于 cloud-init
默认安装在 Ubuntu 18.04 服务器上,因此在 Ubuntu 首次启动时,cloud-init
将运行并自行配置。 在虚拟机窗口中,您应该会看到一些 cloud-init
日志项,并有可用的提示。 点击 ENTER
。
然后,您可以使用您在安装程序中创建的用户登录到您的 Ubuntu 服务器。
输入您的用户名并点击 ENTER
,然后输入您的密码并点击 ENTER
。
您现在应该可以访问命令提示符,表明您已成功完成 Ubuntu 18.04 安装,并且现在以您之前创建的用户身份登录。
在本指南的下一步中,我们将重新配置 cloud-init
并将其设置为在 Ubuntu 映像在 DigitalOcean 平台上作为 Droplet 启动时运行。
第 3 步 — 重新配置 cloud-init
现在我们已将 Ubuntu 18.04 安装到虚拟磁盘并启动并运行系统,我们需要重新配置 cloud-init
以使用适用于 DigitalOcean 平台的数据源。 cloud-init
数据源是 cloud-init
的配置数据源,通常由用户数据(如 shell 脚本)或服务器元数据(如主机名、实例 ID 等)组成。 要了解有关 cloud-init
数据源的更多信息,请参阅 官方 cloud-init 文档 。
默认情况下,在 Ubuntu 18.04 上,cloud-init
将自身配置为使用 DataSourceNoCloud
数据源。 这会在 DigitalOcean 上运行图像时出现问题,因此我们需要重新配置 cloud-init
以使用 ConfigDrive
数据源,并确保在 DigitalOcean 上启动图像时 cloud-init
重新运行。
首先,确保您已启动 Ubuntu 18.04 虚拟机并以您之前创建的用户身份登录。
从命令行导航到 /etc/cloud/cloud.cfg.d
目录:
cd /etc/cloud/cloud.cfg.d
使用 ls
命令列出目录中存在的 cloud-init
配置文件:
ls
Output05_logging.cfg 50-curtin-networking.cfg 90_dpkg.cfg curtin-preserve-sources.cfg README
首先,删除 50-curtin-networking.cfg
文件,该文件为您的 Ubuntu 服务器配置网络接口。 当图像在 DigitalOcean 上启动时,cloud-init
将自动运行并重新配置这些接口。 如果不删除此文件,则从此 Ubuntu 映像创建的 DigitalOcean Droplet 的接口配置错误,无法从 Internet 访问。
sudo rm 50-curtin-networking.cfg
接下来,我们将运行 dpkg-reconfigure cloud-init
以删除 NoCloud
数据源,确保 cloud-init
搜索并找到 DigitalOcean 上使用的 ConfigDrive
数据源:
sudo dpkg-reconfigure cloud-init
您应该看到以下图形菜单:
NoCloud
数据源最初被突出显示。 按 SPACE
取消选择它,然后按 ENTER
。
最后,导航到 /etc/netplan
:
cd /etc/netplan
删除 50-cloud-init.yaml
文件(这是从我们之前删除的 cloud-init
网络文件生成的):
sudo rm 50-cloud-init.yaml
最后一步是确保我们从初始 cloud-init
运行中清理配置,以便在 DigitalOcean 上启动映像时重新运行。
为此,请运行 cloud-init clean
:
sudo cloud-init clean
此时,您的图像已准备好在 DigitalOcean 平台上启动。 您可以将其他软件包和软件安装到您的映像中。 完成后,关闭虚拟机:
sudo shutdown -h now
我们现在可以继续在 DigitalOcean 平台上上传和启动此自定义图像。
第 4 步 — 上传自定义图像并创建 Droplet
现在我们已经创建了一个 Ubuntu 18.04 VDI 映像并将其配置为在 DigitalOcean 上使用,我们可以使用自定义映像 上传工具 上传它。
在 macOS 上,我们创建和配置的 Ubuntu 虚拟磁盘映像默认位于 ~/VirtualBox VMs/your_VM_name/your_virtual_disk_name.vdi
。 此路径可能会略有不同,具体取决于您使用 VirtualBox 的操作系统。
在我们上传图像之前,我们将对其进行压缩以加快文件传输到 DigitalOcean 的速度。
在您的主机操作系统(不在虚拟机内)上,导航到包含您的 VDI 映像文件的目录:
cd ~/VirtualBox\ VMs/Ubuntu\ 18.04/
现在,使用 gzip
压缩文件:
gzip < Ubuntu\ 18.04.vdi > Ubuntu\ 18.04.gz
在此命令中,我们将源 Ubuntu 18.04.vdi
文件通过管道传输到 gzip
,指定 Ubuntu 18.04.gz
压缩文件作为输出。
gzip
完成文件压缩后,按照 自定义图像快速入门 中的说明将 .gz
文件上传到 DigitalOcean。
您现在应该能够从您的自定义 Ubuntu 18.04 服务器映像创建和使用 Droplets。
结论
在本教程中,我们学习了如何使用 VirtualBox 虚拟化工具从普通 Ubuntu 18.04 ISO 创建自定义 VDI 映像。 我们调整了cloud-init
,使其可以在DigitalOcean上正确配置Droplet网络,最后使用自定义图片上传工具压缩上传图片。
您可以调整本教程中的步骤以使用您首选的 Linux 发行版的 ISO 映像。 确保您已安装 SSH 服务器并将其配置为在引导时启动,并且已安装 cloud-init
并正确配置为使用 ConfigDrive
数据源。 最后,确保已清除所有陈旧的网络配置文件。
您可能还希望使用 Packer 之类的工具来自动创建机器映像。