自定义GCE Ubuntu VM映像

时间:2015-08-18 20:13:24

标签: google-compute-engine sudo google-cloud-platform

我有一个可从VirtualBox VM访问的Google Cloud Platform帐户。我正在使用Google Compute Engine进行我正在处理的项目,我必须根据可用的Ubuntu 14.04图像创建自定义图像。

我通过ssh进入Ubuntu 14.04实例(来自我的Vbox VM终端)安装Matlab编译器运行时,并下载了我需要的其他文件,对Ubuntu映像进行了更改。我按照文档中的步骤创建了自定义图像。

但是,现在我所做的更改仅在我从Vbox VM终端进行SSH时才可用。我需要能够通过启动脚本运行某个matlab程序,我该如何才能使用这个图像的所有用户都可以访问我所做的自定义?有没有办法我可以做到这一点,而无需通过ssh从开发人员控制台进行编辑并重做所有更改?

编辑:我不认为我很清楚,所以我会举一些例子。我的Google帐户是alexanderlang。当我从开发人员控制台中搜索从我的自定义映像创建的实例时,bash提示符如下所示:

alexanderlang@myinstance $

我的Vbox用户名是alex,当我从我的vbox终端进入同一个实例时,bash提示符如下:

alex@myinstance $

alex@myinstance可以运行matlab程序,但alexanderlang@myinstance不能。我正在谈论从同一图像创建的同一个实例。我认为这可能与我的自定义图片的ssh密钥有关,但我不知道如何更改或删除这些密钥。

2 个答案:

答案 0 :(得分:1)

当您使用开发人员控制台或gcloud通过ssh连接到VM实例时,通过在VM上设置元数据来动态创建用户帐户(如果它尚不存在)。问题是:每个工具如何选择您的用户名?

当您使用Google Developers Console时,它所知道的唯一信息就是您的Google帐户名称,因此它会使用该信息,例如<first-name>_<last-name>或类似信息。

当您通过gcloud连接到您的实例时,它知道$USER的值,因此它会使用它。

请注意,在任何一种情况下,您的帐户都具有无密码sudo访问权限,因此如果您想从一个帐户切换到另一个帐户,则可以运行:

sudo su alex

alexanderlang身份登录,然后您就可以访问alex所有的所有程序。

同样,您可以运行:

sudo su alexanderlang

以[{1}}身份登录以执行相反操作。

启动脚本以alex运行。要以其他用户身份运行命令,您需要做两件事:

  • 更改为该用户名
  • 以该用户身份运行命令

root将创建一个新shell,因此忽略脚本的其余部分(直到您手动退出用户shell,这不是您想要的)。

您可以使用sudo su alex但由于您要运行的是一个复杂的脚本,您需要先将脚本保存到文件中,然后再运行它。

您的选择是:

  1. 预先创建要运行的shell脚本
  2. 从启动脚本
  3. 动态生成它

    如果脚本永远不会改变,那么做(1)很容易。对于频繁更改的脚本(听起来像许多动态创建的VM),您需要使用选项(2)。

    以下是在启动脚本中执行此操作的方法:

    sudo su alex -c 'command to run'

答案 1 :(得分:0)

您可以使用Packer从库存GCE VM映像创建派生图像。 Packer将让您轻松完成以下任务:

  • 使用您指定的图像启动GCE VM
  • 运行一些自定义步骤,例如shell脚本或Chef / Puppet /等。
  • 将生成的图像保存在您的Google Cloud Platform项目中

然后,您可以使用新创建的映像启动任意数量的新VM。

请注意,由于您的VM映像将存储在Google云端存储中,因此您需要为其使用的空间付费。 Google云端存储标准类Current pricing为0.026美元/ GB /月。典型的VM映像应小于1GB。

您可以通过my GitHub repo查看我使用Packer如何构建VM并在其上预安装Ambari的完整示例。