最小化gcloud CLI安装的磁盘空间

时间:2019-02-12 09:38:49

标签: python python-2.7 google-cloud-platform gcloud google-cloud-shell

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

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

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

虽然这种方法将大小减小到50 Mb以下,并且对于某些zipimport选项效果很好,但不适用于gcloud

我注意到有cloud-shell个文件和.pyc个文件。例如,.py中同时存在gcloud.pygcloud.pyc。现在看来这很浪费,因此我在根文件夹中先后运行lib/python -m compileall .。这也没有用。但这确实将磁盘空间减少到40 Mb以下。

我最喜欢使用find . -iname '*.py' -delete,而不是其他api。使用上述方法(将.zip文件附加到gcloud alpha cloud-shell之后),sys.path就会出现此错误

gcloud alpha cloud-shell ssh/scp

功能齐全的gcloud安装目录的zip文件不到20 Mb。因此,必须有一种适合50 Mb的方法。有什么想法吗?

更新:

如果您喜欢使用oauth2工作流程,请参见下面的joffre答案。

就个人而言,我发现使用oauth2非常麻烦。对我而言,gcloud CLI的主要好处之一是一旦完成ERROR: gcloud crashed (IOError): [Errno 20] Not a directory ,所有身份验证问题都将得到解决。

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

*.json

这会将总安装大小减小到40-45 Mb。

请注意,也可以执行相反的操作,即删除所有python -m compileall . find . iname '*.py' -not -iname '__init__.py' -delete find . -iname '*.json' -delete 而保留所有*.pyc。这也会减少磁盘空间,但不会减少那么多(因为大多数*.py似乎比相应的*.pyc文件小)

1 个答案:

答案 0 :(得分:0)

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

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

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

然后,您必须启动环境,这可以通过this API endpoint完成,并且必须等待直到返回的操作完成,可以通过this other API endpoint完成。请注意,这可以在您的环境中完成(这需要oauth身份验证),也可以从外部服务(例如,编程Cloud Function以便在调用特定端点时启动Cloud Shell环境)。 / p>

最后,启动环境后,您需要通过this API endpoint获取有关连接到Cloud Shell实例的信息(同样,甚至不需要从连接的服务器上完成此操作) ),最后从服务器通过SSH连接该信息。

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

使用我提供的链接,您可以手动执行所有操作,并检查其是否正常运行。但是,手动执行此操作很繁琐,因此我可能会创建一个Cloud Function,该Cloud Function进行所有必需的API调用,并在请求的主体上返回连接信息。我什至可能会很懒惰,以使该函数返回需要运行的显式ssh命令,因此,一旦我连接到服务器,我只需要运行curl <my_function_URL>|sh,一切都会正常。

如果您尝试执行此类操作,请务必确保在您的设置中确保此操作是安全的(因此,请确保不要在您的Cloud Shell环境中添加不需要的密钥),因为我只是从暴露在外的Cloud Function感觉有些不安全(任何打电话给Cloud Function的人都会知道您Cloud Shell环境的IP)。至少,这是您可以探索的想法。