我的服务器管理员将磁盘空间限制在50Mb左右。linux上的默认gcloud安装(使用alpha)大约需要150Mb。我需要减小安装大小以适应我的驱动器空间。
我尝试在lib/gcloud.py上使用pyinstaller (https://www.pyinstaller.org/ ),因为bin/gcloud是一个bash脚本。生成的可执行文件(在lib/dist中)不起作用。
我还尝试压缩一些库(lib/surface和其他库),并将生成的.zip文件添加到lib/gcloud.py中的sys.path中。这应该允许zipimport在节省磁盘空间的同时使用这些zips。
虽然这种方法将大小减少到50 Mb以下,并且非常适合某些gcloud选项,但它不适用于cloud-shell。
我注意到除了.py文件,还有很多.pyc文件。例如,lib/中同时存在gcloud.py和gcloud.pyc。现在这看起来有点浪费,所以我在根文件夹中运行了python -m compileall .,然后运行了find . -iname '*.py' -delete。这也不起作用。但它确实将磁盘空间减少到40Mb以下。
我最感兴趣的是使用gcloud alpha cloud-shell,而不是其他apis。使用上面的方法(附加到sys.path的.zip文件)会在gcloud alpha cloud-shell ssh/scp中出现此错误
ERROR: gcloud crashed (IOError): [Errno 20] Not a directory一个功能齐全的gcloud安装目录的zipfile不到20Mb。因此,必须有一种方法来适应它的50Mb。有什么想法吗?
更新:
如果您对使用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文件小)
发布于 2019-02-12 19:31:23
您不需要使用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环境)。
最后,启动环境后,您需要通过this API endpoint获取连接到Cloud Shell实例的信息(同样,这甚至不需要从您连接的服务器进行连接),最后使用该信息从服务器通过SSH进行连接。
这将把您的服务器上所需的工具限制为一个简单的SSH客户机(可能已经预先安装)。
使用我提供的链接,您可以手动完成所有这些操作,并检查是否正常工作。但是,手动完成这项工作很繁琐,因此我可能会创建一个云函数,该函数执行所有必需的API调用,并在请求正文中返回连接信息。我甚至可能懒得让函数返回需要运行的显式ssh命令,所以一旦我连接到服务器,我只需要运行curl <my_function_URL>|sh,一切都会正常工作。
如果您尝试这样做,一定要确保这在您的设置上是安全的(因此,请确保不要在您的Cloud Shell环境中添加不需要的密钥),因为我只是凭空编写这篇文章,而且公开一个Cloud函数感觉有点不安全(任何调用该Cloud函数的人至少都会知道您的Cloud Shell环境的IP )。但至少,这是一个你可以探索的想法。
https://stackoverflow.com/questions/54646937
复制相似问题