我的服务器管理员将磁盘空间限制为大约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.py
和gcloud.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
文件小)
答案 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)。至少,这是您可以探索的想法。