nextcloudpi

虚拟盒子上的NextCloudPi VM:易于设置和克隆

本文最初发布于 fanilicious.me.

本文针对您,避免使用Docker或Vagrant之类的词(但请考虑尽快解决)…),并且您不需要了解更多有关NextCloudPi和VM的配置的知识,并且您还可以’买不起台式计算机。朋友,您也有现成的解决方案。

在下面,您可以找到一个自动化脚本,该脚本可以提示您回答一些简单的问题,为您完成NextCloudPi VM的所有工作–不用担心,还提供了详细信息,您可以’t get messed up.

此外,它提供了轻松克隆已创建的VM的选项,因此您可以拥有多台计算机(用于什么目的?请查看我的上一篇文章 使您的NextCloudPi高度可用 找出ðŸ〜‰)。这样,您可以跳过NCP的安装,从而更快地设置NCP VM。– sometimes –甚至避免了时间上的导入框(大)开销。

唯一的要求是安装 虚拟盒子流浪汉.

让’将其分解并进入此脚本’的逻辑,看看它提供了哪些选项。

让’s face the truth. 虚拟盒子 是最受欢迎的软件虚拟化软件包之一–尤其是初学者。即使桌面虚拟化缺乏其他优势(例如docker等操作系统级别的虚拟化,其移植性和速度也更高,并且虚拟机监控程序类型为1)– bare metal –是高度安全的),VirtualBox之所以成为重要的原因有几个:’超级简单易用,免费且跨平台兼容。

所以,即使我是集装箱人–Docker现在到永远– I’我深入研究了VirtualBox机器的配置,’m为您提供了VBox上NCP的所有可用设置。

当然,我不会’如果Vagrant作为提供者不支持VirtualBox,那么您走得太远了。

流浪汉 是与虚拟环境配合使用的出色工具,通常意味着虚拟机。它提供了一个通用的命令行客户端来配置和管理它支持的任何虚拟环境。的“recipe”如何执行此操作位于一个名为Vagrantfile的模板文件中。借助Vagrantfile,您可以在代码中定义整个环境,从而使其易于重用,并且易于修改和共享。

您可能会猜到,我使用了Vagrantfile来设置NextCloudPi。 NCP的官方Github存储库提供了一个Vagrantfile,我以此为基础,并通过更具体的说明对其进行了充实,专门针对VirtualBox。

我将VirtualBox和Vagrant结合在一起,创建了一个自动化脚本,该脚本提示用户提供有关VM资源和首选网络的一些输入,并提供有关它们各自的详细信息。然后,该脚本根据用户创建一个新的VM或克隆一个现有的VM’的输入。这使初学者的生活更加轻松,因为他要做的就是与脚本进行一些交互并回答一些问题。

新虚拟机

让’s执行脚本并通过示例检查每个步骤。

脚本需要知道的第一件事是用户是要创建新的VM还是克隆现有的VM。

然后,它要求提供VM的名称。如果您按回车,则会获得默认名称‘NextCloudPi’. Don’不用担心名字是否被使用。 VBoxManage将用于为您检查此内容,并且会通知您。很好,到目前为止。

好的,这可能是初学者最难回答的,所以让’s talk about it.

虚拟盒子 VM具有多种联网方式可供选择。其中两个是您在上面看到的。它们是设置NextCloudPi的最方便的网络选项。这两个将为您提供一个IP地址以直接引用您的NCP– it’最好避免使用端口转发选项,以方便设置…

  • 公共网络或VirtualBox称为此选项的桥接网络为虚拟机提供了IP,该IP可被同一LAN中的任何计算机访问。这意味着,正在使用另一台计算机,物理机或VM并有权访问您的NCP的任何人都可以使用它。负责此类网络的Vagrantfile命令如下(将为桥赋予主机值’s interface):
config.vm.network "public_network", bridge: "wlp4s0", ip: "192.168.1.2"
  • 专用网络或仅主机网络也提供了IP,但是该IP来自专用网络,因此它’只能由主机或主机上的其他VM访问。 LAN上使用远程物理机的其他任何人都不能使用您的NCP。另外,此选项不会浪费您局域网的IP地址。自动化脚本将在VBox(vboxnet0)上使用DHCP的默认范围。如果要修改它,请检查pick_ip函数。至于Vagrantfile中负责的命令:
config.vm.network "private_network", ip: "172.28.128.3"

因此,您应该根据NextCloudPi的可访问性进行选择。如果你’仅通过您的主机重新访问它,则专用网络将为您工作。如果您希望能够从各种主机访问它,请使用公共网络。如果你仍然不’不知道,只是去公开场合,确保你不’交出您的NCP密码。

设置虚拟机IP地址的时间。如果您有喜欢的号码或其他任何东西,请尝试一下,自动化脚本将告诉您指定的IP是否有效(检查功能valid_ip)而不保留(检查功能reserved_ip)。关于后者,它将尝试ping您指定的IP,并检查是否’回答,但是这个招胜了’t work if it’分配给防火墙设备。

如果让脚本选择IP(选项‘any’), it will use host’s IP 和 host’的接口进入您局域网的范围,并选择第一个可用的IP。

您可以在VM上配置的最后一件事是它的资源。这仅取决于您的主机以及可以提供给NCP VM的资源。只需指定内存和cpu,即可轻松实现。如果您按Enter键,那么将提供默认值作为输入。 流浪汉file中用于此配置的命令如下:

  config.vm.provider "virtualbox" do |v|
    # Resources
    v.memory = 2048
    v.cpus = 1
    # VM name
    v.name = "MyNextCloudPi"
  end

那’是的!您已经创建了NCP VM。您可以通过VirtualBox GUI(如果只是想使用Web面板,无头启动就可以完成工作)或使用指定的命令( VBoxManage startvm MyNextCloudPi–type headless ) –如果已安装VBoxManage软件包’s not the script won’甚至不告诉您有关命令。

在输出消息中,您可以看到最终分配给您的VM的IP。

克隆虚拟机

现在你 ’创建了您的第一个NCP VM,’s了解如何轻松克隆它。

我们将跳过之前说明的问题,而将重点放在要求您为此选项回答的其他问题上。

脚本会向您询问有关克隆的第一件事是在两个选项之间进行选择:

  • 父母的绝对路径’■VM 流浪汉file:如果您使用自动化脚本创建了父VM,则该VM下有一个Vagrantfile’您创建的目录。在这种情况下,脚本将解析Vagrantfile以获得有关父VM的一些信息(IP和名称),以便克隆的VM将不会使用相同的信息并引起任何冲突。
    您可能没有使用自动化脚本,但是使用自己的Vagrantfile创建了VM。那也应该起作用。但是,如果在Vagrantfile中找不到所需的详细信息,则该脚本将需要启动父VM(以防它’尚未运行),可以单独使用VBoxManage或在您的手动帮助下
  • 父虚拟机’■VirtualBox名称:如果您记得要克隆的VM的名称,请选择此选项。该选项不需要解析任何Vagrantfile,它只会启动父VM,以便将其分配的IP从可用IP集中排除。 VBoxManage将再次用于检查父VM是否存在,如果不存在,则会通知您。

小费: VBoxManage是VirtualBox的命令行界面,自动化脚本使用的命令如下:
VBoxManage列表虚拟机 :列出所有现有的VirtualBox VM
VBoxManage startvm $ {VBox_name}–type headless :以无头模式启动来启动VirtualBox VM

1. 流浪汉file’s path

如果你’如果选择了此选项,那么显然应该提示您指定此路径:

The automation script will check the path for 任何 existing packaged boxes 和 if there is 任何, you will be asked if you want to use it:

如果你 do choose to use it (使用现有的盒子), 任何 metadata of boxes with the name of this path will be removed. 让’s explain this part.

流浪汉具有将VM打包到盒子中的命令: 流浪汉包
该命令将创建文件‘包装盒‘.
如果Vagrantfile使用此框创建VM,则它将自动导入到Vagrant中’的元数据,以便可以与路径名重复使用(框:‘路径/到/框/package.box’).
但是,如果未在Vagrantfile中使用package.box或从未使用package.box创建VM,则可能不会将其添加到元数据中。
因此,目录中存在的package.box可能是VM的最新版本,而不是Vagrant中存在的同一个名称’的元数据(想像某人使用无家可归的软件包但从未使用过该package.box创建新VM的场景)。

如果你’不知道它引用的是父NCP VM的哪个版本,然后坚持使用 建立新方块 选项。

此选项将使用 流浪汉包 我们前面提到的命令,将创建一个package.box文件,该文件将导入到新的Vagrantfile中。

如果没有父VM的现有package.box,但是有一个与父VM相关的框名,会发生什么’游民之路’的元数据?自动化脚本将搜索它,并询问您类似的问题:

在这种情况下,这些选项与我们在package.box存在时提到的选项相同。

2.父母’s VBox Name

这个选项很简单。您只需指定父虚拟机’的名称,VBoxManage将使其运行,以排除其IP,该脚本将仅使用 流浪汉包–base parents_name 打包。

在此选项中不考虑元数据,因为特定的命名元数据会变得非常复杂。一个名称可以轻松地在不同的盒子中使用两次。路径也可以,但是它’顾名思义,可能性不大。因此,我们只删除父级的任何元数据’的名称,我们再次打包虚拟机。

无论您选择哪个选项(Vagrantfile路径或VirtualBox名称),使用现有的package.box或现有的元数据或从头开始创建一个软件包,您都将得到一个新的Vagrantfile,自动化脚本将使用该文件来 无所事事 您将获得克隆的VM。只需确保克隆所需的VM版本,而不克隆您忘记删除的旧软件包即可。

流浪汉file解释

You may be wondering what is this secret 食谱 that the produced 流浪汉file contains.

新的虚拟机 该选项有一个Vagrantfile,与您可以在 nextcloudpi的官方存储库。它使用一个debian框(您可以指定发行版),定义框名和主机名并在其上安装NextCloudPi。自动化脚本将仅添加我们上面提到的有关VirtualBox的特定命令,有关虚拟机的资源,网络和名称。

至于 克隆的虚拟机‘s 流浪汉file,它将把框名称从debian更改为程序包的路径。创建框,定义主机名和VirtualBox配置,并且外壳脚本不需要对NCP做任何事情,因为它已经安装了(克隆还记得吗?)。

尽管我们还没有提到一件事,但这对于克隆VM至关重要。

流浪汉使用ssh访问虚拟机。为此,它需要一个ssh密钥。那么自从我们首次启动以来’t provided 任何thing?

流浪汉提供了一个公开共享的ssh密钥对,名为vagrant不安全密钥(很明显,它是’s不安全,因为每个人都可以拥有此权限)。 流浪汉使用此密钥进行首次启动,然后生成新的密钥对。

但是,由于我们实际上是在创建一个新的基本框,因此我们希望每个NextCloudPi VM都能随时克隆。因此,在每个Vagrant文​​件中,我们都下载了公共无业游民的不安全密钥,并将其添加到VM的authorized_keys文件中。另外,Vagrant需要对ssh文件具有某些特定的权限(/home/vagrant/.ssh需要0700模式,/ home / vagrant / .ssh / authorized_keys需要0600模式),因此我们执行适当的chmod命令。这构成了可克隆的VM。

由于由脚本创建的NCP VM在authorized_keys中具有公共无业游民的不安全密钥,因此我们需要通过在每个Vagrantfile上添加以下命令来向Vagrant展示首次启动时要使用的私钥:

  # First boot use vagrant insecure key
  config.ssh.private_key_path = '~/.vagrant.d/insecure_private_key'
  config.ssh.insert_key = false

这样,避免了无所事事的软件包后不响应ssh的已知问题。

自动化脚本

聊够了。自己检查一下,如果觉得有用,请给我反馈。

自动化脚本可以在这里找到: //github.com/eellak/gsoc2019-NextCloudPi/blob/gsoc2019-vagrant/Vagrant/create_vm.sh

作者: 范尼

FaniD是居住在雅典的一名软件工程师。 Fani是一位云计算爱好者,对Linux怀有虔诚的信念,是开源支持者,系统人员。编写人类可读的代码。喜欢自动化的东西。喜欢学习和分享知识。

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *