首页 > 解决方案 > 最小化 gcloud CLI 安装的磁盘空间

问题描述

我的服务器管理员将磁盘空间限制为大约 50 Mb。linux 上的默认 gcloud 安装(带有 alpha 版本)大约需要 150 Mb。我需要减小安装大小以适应我的驱动器空间。

我尝试在 上使用 pyinstaller ( https://www.pyinstaller.org/ ) lib/gcloud.py,因为bin/gcloud它是一个 bash 脚本。生成的可执行文件 (in lib/dist) 不起作用。

我还尝试压缩一些库(lib/surface和其他一些库)并将生成的 .zip 文件添加到sys.pathin lib/gcloud.py。这应该允许zipimport在节省磁盘空间的同时使用这些 zip。

虽然这种方法将大小减小到 50 Mb 以下,并且对于某些gcloud选项非常有效,但它不适用于cloud-shell.

.pyc我注意到文件中有很多.py文件。例如gcloud.pygcloud.pyc都存在于lib/. 现在这似乎很浪费,所以我python -m compileall .在根文件夹中运行,然后是find . -iname '*.py' -delete. 这也没有奏效。但它确实将磁盘空间减少到 40 Mb 以下。

我最感兴趣的是使用gcloud alpha cloud-shell,而不是其他 api。使用上述方法(附加到 .zip 文件sys.path)会出现此错误gcloud alpha cloud-shell ssh/scp

ERROR: gcloud crashed (IOError): [Errno 20] Not a directory

功能齐全的 gcloud 安装目录的 zip 文件小于 20 Mb。因此,必须有一种方法可以将其容纳在 50 Mb 中。有任何想法吗?

更新:

如果您对使用 oauth2 工作流程感到满意,请参阅下面的 joffre 答案。

个人觉得使用oauth2比较麻烦。事实上,gcloud CLI 对我来说的主要好处之一是一旦gcloud init完成,所有的身份验证问题都会得到解决。

在我之前尝试的字节编译方法中,__init__.py文件也被删除了。*.json文件似乎对功能也不是必需的(尽管它们可能有帮助字符串)

python -m compileall .
find .  iname '*.py' -not -iname '__init__.py' -delete
find . -iname '*.json' -delete

这将总安装大小降低到 40-45 Mb。

请注意,也可以执行相反的操作,即删除所有内容*.pyc同时保留所有内容*.py。这也会减少磁盘空间,但不会减少那么多(因为大多数*.pyc似乎比相应的*.py文件小)

标签: pythonpython-2.7google-cloud-platformgcloudgoogle-cloud-shell

解决方案


您不需要 gcloud CLI 即可连接到 Cloud Shell。

如果您运行gcloud alpha cloud-shell ssh --log-http,您将看到该工具实际在做什么,因此您可以手动复制它。

首先,确保您的 SSH 公钥在环境中,这可以通过 API完成(甚至不需要从您尝试连接的服务器完成)。

然后,你必须启动环境,这可以通过这个 API 端点来完成,你必须等到返回的操作完成,这可以通过这个其他 API 端点来完成。请注意,这可以在您的环境中完成(这将需要 oauth 身份验证),或者您可以从外部服务中执行此操作(例如,在调用特定端点时编写一个云函数以启动 Cloud Shell 环境)。

最后,一旦环境启动,您需要通过此 API 端点获取连接到 Cloud Shell 实例的信息(同样,甚至不需要从您连接的服务器完成),最后连接通过带有该信息的服务器的 SSH。

这会将您的服务器上所需的工具限制为一个简单的 SSH 客户端(可能已经预先安装)。

使用我提供的链接,您可以手动完成所有这些并检查它是否正常工作。但是,手动执行此操作很乏味,因此我可能会创建一个云函数来进行所有必需的 API 调用,并在请求正文中返回连接信息。我什至可能懒得让函数返回需要运行的显式 ssh 命令,所以一旦我连接到服务器,我只需要运行curl <my_function_URL>|sh,一切都会正常运行。

如果您尝试执行此类操作,请务必验证您的设置是否安全(因此,请确保不要在您的 Cloud Shell 环境中添加不需要的密钥),因为我只是从我的顶部编写此头部,并且拥有暴露的 Cloud Function 感觉有点不安全(任何调用 Cloud Function 的人至少会知道您的 Cloud Shell 环境的 IP)。但至少,这是一个你可以探索的想法。


推荐阅读