【问题标题】:How to run nvm command from bash file in GCP Cloud Shell (global install)?如何从 GCP Cloud Shell(全局安装)中的 bash 文件运行 nvm 命令?
【发布时间】:2021-02-05 00:24:57
【问题描述】:

我们正在尝试做的事情

我们在 GCP 上使用 Cloud Shell Editor (IDE)。
根据documentation for Environment customization script

Cloud Shell 自动运行脚本, $HOME/.customize_environment,当您的实例启动时。不像 .profile.bashrc,此脚本在 Cloud Shell 启动时运行一次 (而不是每次 shell 登录一次)。

此脚本以 root 身份运行,您可以安装任何您需要的软件包 希望存在于使用 Debian 软件包的每个 Cloud Shell 会话中 管理命令。

例如,如果您想在 Cloud Shell 上安装 erlang, 您的 .customize_environment 文件将如下所示:

#!/bin/sh
apt-get update
apt-get -y install erlang

我们正在尝试使用 nvm 为我们的开发人员预安装节点版本并自动配置。


我们有问题的地方

我们查看了几篇关于在 bash 脚本文件(.customize_environment 文件)中使nvm可调用的文章:

这些答案似乎都不能解决我们的问题。

GCP nvm 详情

Cloud Shell 预安装 nvm(全球);它位于/usr/local/nvm/nvm.sh
没有~/.nvm 文件夹。

我可以直接从 Cloud Shell(命令行)运行 nvm 而不会出现问题。
我无法从 bash 文件运行 nvm(也不能使用 for 路径)。

最近的尝试

运行以下命令很接近,但由于 Cloud Shell 限制,我受限于您不能 sudo 的权限:

. /usr/local/nvm/nvm.sh
nvm install 14

结果:

Downloading and installing node v14.15.4...
mkdir: cannot create directory ‘/usr/local/nvm/.cache/bin/node-v14.15.4-linux-x64’: Permission denied
creating directory /usr/local/nvm/.cache/bin/node-v14.15.4-linux-x64/files failed
Downloading https://nodejs.org/dist/v14.15.4/node-v14.15.4-linux-x64.tar.xz...
Warning: Failed to create the file
Warning: /usr/local/nvm/.cache/bin/node-v14.15.4-linux-x64/node-v14.15.4-linux-
Warning: x64.tar.xz: No such file or directory

curl: (23) Failed writing body (0 != 966)
Binary download from https://nodejs.org/dist/v14.15.4/node-v14.15.4-linux-x64.tar.xz failed, trying source.
grep: /usr/local/nvm/.cache/bin/node-v14.15.4-linux-x64/node-v14.15.4-linux-x64.tar.xz: No such file or directory
Provided file to checksum does not exist.
Binary download failed, trying source.
Detected that you have 4 CPU core(s)
Running with 3 threads to speed up the build
mkdir: cannot create directory ‘/usr/local/nvm/.cache/src’: Permission denied
creating directory /usr/local/nvm/.cache/src/node-v14.15.4/files failed
Downloading https://nodejs.org/dist/v14.15.4/node-v14.15.4.tar.xz...
Warning: Failed to create the file
Warning: /usr/local/nvm/.cache/src/node-v14.15.4/node-v14.15.4.tar.xz: No such
Warning: file or directory

curl: (23) Failed writing body (0 != 965)
Binary download from https://nodejs.org/dist/v14.15.4/node-v14.15.4.tar.xz failed, trying source.
grep: /usr/local/nvm/.cache/src/node-v14.15.4/node-v14.15.4.tar.xz: No such file or directory
Provided file to checksum does not exist.

重要行:mkdir: cannot create directory ‘...’: Permission denied

我不能sudo 绕过它,运行usermod(例如usermod -a -G staff $(whoami)),即使Google's documentation says I should be able to

当您设置 Cloud Shell 会话时,您会获得一个常规 Unix 用户帐户,其用户名基于您的电子邮件地址。通过此访问权限,您在分配的 VM 上拥有完全的 root 权限,甚至可以在需要时运行 sudo 命令。


问题

我们如何在 GCP 的 Cloud Shell 的 bash 脚本文件中使用 nvm

【问题讨论】:

  • 我想我听说你不能在你的 cloud shell 环境中使用 sudo?当我尝试时,它有效。当我运行“sudo whoami”时,它会显示 root。你说什么?如果您运行“id”命令,您是否在响应中看到 27(sudo)?
  • sudo su你可以在cloud shell中运行并将用户更改为root。
  • @Kolban 谢谢,这绝对帮助我找到了解决方案!我的东西返回正确,只是在考虑解决方案。你给了我一个正确的方向。
  • @HarshManvar 谢谢你,使用sudo su 确实有效,我会发布我的解决方案并给你信用,因为我使用了你的建议。

标签: bash nvm google-cloud-shell google-cloud-shell-editor


【解决方案1】:

@Kolban@HarshManvar 的cmets 的帮助下,我设法解决了这个问题。

我认为此解决方案也适用于任何其他无法处理来自.customize_environment 的直接调用的脚本。

下面的示例受answer found here 的影响。代码安装特定的节点版本。

注意:nvm 默认全局安装在 Cloud Shell 中。

#!/usr/bin/bash
sudo su -c '. /usr/local/nvm/nvm.sh && nvm install 14'

【讨论】:

  • 很高兴听到您找到了解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-09
相关资源
最近更新 更多