为了编译一个chromium,弄了快一个月,直到今天总算是看到一丝丝希望了。
虽然现在还没有完全编译成功,但是一路上也遇到不少问题了。
就暂且先把已经解决掉的问题记录下来,仅供像我一样的小白学习参考。
首先你得知道你需要做什么,网上有很多讲怎么编译Chromium的文章,大致的步骤都是差不多的,不一定要严格参照某一篇,根据自身情况来选择就好了。建议就是多看几篇,CSDN 博客园 知乎 GitHub Chromium官网都可以去看看。
然后是前期的准备工作,这个也是根据个人情况而定,这里不多说明。
要注意的是前期准备里最重要的一部分就是网络环境,如果你的网络不稳定的话,那么你接下来碰到的一系列问题大概率都是网络原因导致的。本人就是因为公司网络不稳定导致下载经常出错,并且试过网上很多解决方法都不奏效,最后最后是使用libcurl4-openssl-dev替换gnutls对git进行编译解决了问题。所以,如果你的情况跟我一样,特别是下载失败后报错解密失败之类的,请试试这个方法。
参考链接:
报错:gnutls_handshake() failed: Decryption has failed.
git报错 failed: The TLS connection was non-properly terminated
接下来就按照步骤一步一步来就好了,下面是我遇到的一些问题:
# 如果是下载源码请用 'fetch android --nohooks [--no-history]'
# 出现下载不成功多半是网络问题,只能重试到成功为止咯
zsm@ubuntu:~/vivaldi-source$ gclient sync --nohooks --no-history
________ running 'git -c core.deltaBaseCacheLimit=2g clone --no-checkout --progress https://chromium.googlesource.com/chromium/src.git --depth=1 /home/zsm/vivaldi-source/_gclient_src_0boehkur' in '/home/zsm/vivaldi-source'
Cloning into '/home/zsm/vivaldi-source/_gclient_src_0boehkur'...
remote: Counting objects: 342704, done
remote: Finding sources: 100% (342704/342704)
error: RPC failed; curl 56 OpenSSL SSL_read: error:1408F119:SSL routines:ssl3_get_record:decryption failed or bad record mac, errno 0
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
1>WARNING: subprocess '"git" "-c" "core.deltaBaseCacheLimit=2g" "clone" "--no-checkout" "--progress" "https://chromium.googlesource.com/chromium/src.git" "--depth=1" "/home/zsm/vivaldi-source/_gclient_src_0boehkur"' in /home/zsm/vivaldi-source failed; will retry after a short nap...
________ running 'git -c core.deltaBaseCacheLimit=2g clone --no-checkout --progress https://chromium.googlesource.com/chromium/src.git --depth=1 /home/zsm/vivaldi-source/_gclient_src_0boehkur' in '/home/zsm/vivaldi-source' attempt 2 / 4
Cloning into '/home/zsm/vivaldi-source/_gclient_src_0boehkur'...
remote: Counting objects: 342704, done
remote: Finding sources: 100% (342704/342704)
error: RPC failed; curl 56 OpenSSL SSL_read: error:1408F119:SSL routines:ssl3_get_record:decryption failed or bad record mac, errno 0
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
1>WARNING: subprocess '"git" "-c" "core.deltaBaseCacheLimit=2g" "clone" "--no-checkout" "--progress" "https://chromium.googlesource.com/chromium/src.git" "--depth=1" "/home/zsm/vivaldi-source/_gclient_src_0boehkur"' in /home/zsm/vivaldi-source failed; will retry after a short nap...
________ running 'git -c core.deltaBaseCacheLimit=2g clone --no-checkout --progress https://chromium.googlesource.com/chromium/src.git --depth=1 /home/zsm/vivaldi-source/_gclient_src_0boehkur' in '/home/zsm/vivaldi-source' attempt 3 / 4
Cloning into '/home/zsm/vivaldi-source/_gclient_src_0boehkur'...
fatal: unable to access 'https://chromium.googlesource.com/chromium/src.git/': OpenSSL SSL_read: error:1408F119:SSL routines:ssl3_get_record:decryption failed or bad record mac, errno 0
1>WARNING: subprocess '"git" "-c" "core.deltaBaseCacheLimit=2g" "clone" "--no-checkout" "--progress" "https://chromium.googlesource.com/chromium/src.git" "--depth=1" "/home/zsm/vivaldi-source/_gclient_src_0boehkur"' in /home/zsm/vivaldi-source failed; will retry after a short nap...
________ running 'git -c core.deltaBaseCacheLimit=2g clone --no-checkout --progress https://chromium.googlesource.com/chromium/src.git --depth=1 /home/zsm/vivaldi-source/_gclient_src_0boehkur' in '/home/zsm/vivaldi-source' attempt 4 / 4
Cloning into '/home/zsm/vivaldi-source/_gclient_src_0boehkur'...
remote: Counting objects: 342704, done
remote: Finding sources: 100% (342704/342704)
remote: Total 342704 (delta 76098), reused 224376 (delta 76098)
Receiving objects: 100% (342704/342704), 1.08 GiB | 2.81 MiB/s, done.
Resolving deltas: 100% (76098/76098), done.
Syncing projects: 100% (397/397), done.
________ running 'cipd ensure -log-level error -root /home/zsm/vivaldi-source -ensure-file /tmp/tmp9wmcrr1a.ensure' in '.'
[P76426 19:14:44.681 client.go:439 E] Response body limit 181 exceeded. {"host":"chrome-infra-packages.appspot.com", "method":"ResolveVersion", "service":"cipd.Repository"}
[P76426 19:14:58.841 client.go:439 E] Response body limit 197 exceeded. {"host":"chrome-infra-packages.appspot.com", "method":"ResolveVersion", "service":"cipd.Repository"}
[P76426 19:14:58.841 client.go:439 E] Response body limit 186 exceeded. {"host":"chrome-infra-packages.appspot.com", "method":"ResolveVersion", "service":"cipd.Repository"}
[P76426 19:14:58.842 client.go:439 E] Response body limit 182 exceeded. {"host":"chrome-infra-packages.appspot.com", "method":"ResolveVersion", "service":"cipd.Repository"}
Errors:
failed to resolve chromium/third_party/android_deps/libs/androidx_legacy_legacy_support_v4@version:1.0.0-cr0 (line 127): prpc: response too big
failed to resolve chromium/third_party/android_deps/libs/androidx_lifecycle_lifecycle_livedata@version:2.0.0-cr0 (line 136): prpc: response too big
failed to resolve chromium/third_party/android_deps/libs/androidx_vectordrawable_vectordrawable_animated@version:1.1.0-cr0 (line 235): prpc: response too big
failed to resolve chromium/third_party/android_deps/libs/com_android_support_preference_v7@version:28.0.0-cr0 (line 322): prpc: response too big
Error: Command 'cipd ensure -log-level error -root /home/zsm/vivaldi-source -ensure-file /tmp/tmp9wmcrr1a.ensure' returned non-zero exit status 1
解决方法
export DEPOT_TOOLS_UPDATE=0
执行完后继续 gclient sync --nohooks --no-history
又遇到如下问题
Syncing projects: 99% (356/357) src/third_party/perfetto
src/third_party/requests/src (ERROR)
----------------------------------------
[0:00:40] Started.
[0:00:40] Finished running: git config remote.origin.url
[0:00:40] Finished running: git rev-list -n 1 HEAD
[0:00:40] Finished running: git rev-parse --abbrev-ref=strict HEAD
----------------------------------------
Error: Command 'git remote update' returned non-zero exit status 1 in /home/zsm/vivaldi-source/src/third_party/requests/src
Fetching origin
fatal: unable to access 'https://chromium.googlesource.com/external/github.com/kennethreitz/requests.git/': error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
error: Could not fetch origin
查了一下是协议版本不支持,换成tlsv1.2就好了
(注意:使用这个方法需要上文提到的为git配置openssl)
具体解决方法参考这篇文章:Git 遇到 GnuTLS handshake error 解法
之后再同步一下,终于完成。
zsm@ubuntu:~/vivaldi-source$ gclient sync --nohooks --no-history
342>Syncing projects: 90% (359/397)
Syncing projects: 100% (397/397), done.
然后继续按照步骤来,就没什么问题了,如果遇到网络抽风导致中断,那就再重试。
这样看下来,好像也没有什么问题,有也多半是网络问题,所以网络稳定真的真的很重要。