在按官方文档使用 gclient sync
命令同步谷歌v8或Chromium项目时,最后总是会出现文件下载失败的报错:
Failed to fetch file gs://chromium-gn/a68b194afb05d6a6357cf2e2464136ed7723c305 for src/buildtools/mac/gn. ... Error: Command 'download_from_google_storage --no_resume --platform=darwin --no_auth --bucket chromium-gn -s src/buildtools/mac/gn.sha1' returned non-zero exit status ...
搜索了一下午才找到解决方案,是翻墙代理的问题, gclient sync
里的某些子命令似乎在代理环境下无法正确连接谷歌服务器,但是不上代理压根连谷歌都连接不上。这个问题如果你上谷歌官方issue和论坛里去找几乎找不到正确解决方案,因为他们大部分人不需要翻墙,在天朝写个代码真不容易。
这个问题不知道谷歌会不会修好,如果一直没修自己手动也可以解决。本质上只是谷歌自己的命令行工具无法下载,但是你通过浏览器或者其他命令行工具是能下载文件的。以上面的报错为例,命令行需要把这个文件:
gs://chromium-gn/a68b194afb05d6a6357cf2e2464136ed7723c305
下载到这里并命名为 gn
:
src/buildtools/mac/gn
我们只需要 gs://
替换为 https://storage.googleapis.com/
就可以直接在浏览器下载了。前提当然是你还开着翻墙代理。所以任务就变成了下载下面这个地址的文件到刚刚那个目录。
https://storage.googleapis.com/chromium-gn/a68b194afb05d6a6357cf2e2464136ed7723c305
你可以一个个用浏览器下载,也可以用命令行工具如 wget
去下载:
wget --no-check-certificate https://storage.googleapis.com/chromium-gn/a68b194afb05d6a6357cf2e2464136ed7723c305 -O src/buildtools/mac/gn
可以写个工具脚本,一旦遇到 download_from_google_storage
错误的时候就执行一次手动下载,直到再次执行 gclient sync
不再报错为止,问题就解决了。