centos 编译 chrome 踩坑之旅

1.前言

看了http://blog.fatezero.org/2018/03/05/web-scanner-crawler-01/ 这个大牛的文章,发现还有神人修改chrome代码来解决chrome headless的弹窗问题。。不得不佩服8g多的代码人家可以找到代码位置,并修改和优化。

前人种树,后人乘凉,决定改一下代码,自己编译一波,不想编译chrome如此坑爹。mmp,貌似能踩到坑我给踩了,不能踩的我也给踩了。。

官方文档:https://chromium.googlesource.com/chromium/src/+/lkcr/docs/linux_build_instructions.md

官方建议用ubuntu来编译。。@dm牛用ubuntu在国外vps,分分钟搞定了。

我是国内centos....

2.代理解决

国内封了google chrome的站点,先搭建一个shadowsock吧。(127.0.0.1:9050)

给git 挂上代理

alias proxy_git="git config --global https.proxy socks5://127.0.0.1:9050&&git config --global http.proxy socks5://127.0.0.1:9050"
alias unproxy_git="git config --global --unset http.proxy&&git config --global --unset https.proxy"
proxy_git

3.依赖解决

安装上依赖,不安装会有缺库等蛋疼问题。

su -c 'yum install git python bzip2 tar pkgconfig atk-devel alsa-lib-devel \
bison binutils brlapi-devel bluez-libs-devel bzip2-devel cairo-devel \
cups-devel dbus-devel dbus-glib-devel expat-devel fontconfig-devel \
freetype-devel gcc-c++ glib2-devel glibc.i686 gperf glib2-devel gtk2-devel \
gtk3-devel java-1.*.0-openjdk-devel libatomic libcap-devel libffi-devel \
libgcc.i686 libgnome-keyring-devel libjpeg-devel libstdc++.i686 libX11-devel \
libXScrnSaver-devel libXtst-devel libxkbcommon-x11-devel ncurses-compat-libs \
nspr-devel nss-devel pam-devel pango-devel pciutils-devel \
pulseaudio-libs-devel zlib.i686 httpd mod_ssl php php-cli python-psutil wdiff \
xorg-x11-server-Xvfb'

4.下载depot_tools 和 代码

chrome的编译不是用gcc,它用了自己的一套系统(depot_tools)

 git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
 export PATH="$PATH:${HOME}/depot_tools"

接着就是下载chrome代码,8.2g的代码 - -|

 mkdir ~/chromium && cd ~/chromium
 fetch --nohooks --no-history chromium # 要下载很久,这个断了你就gclient sync 一下
 (重要的是事情:记得根据http://blog.fatezero.org/2018/03/05/web-scanner-crawler-01/这个文章改一下代码,不然浪费了。)
 cd src
 gclient runhooks

而这个东西他不支持sock5的协议代理....要是用proxychains 你会发现下面的错误:

[P6968 16:12:19.200 remote.go:95 W] cipd: connectivity error......

找了一下google,被一个文章带到坑里了(https://www.jianshu.com/p/dc14c857a0b6),不知道这个文章的情况是啥,我设置没有作用。最后是发现这个工具做的是http协议,这是http_proxy变量就好了,所以shadowsock还需要转为http协议的代理。

安装polipo把sock5协议转为http协议:

git clone https://github.com/jech/polipo.gi
cd polipo && sudo make all && sudo make install
vim etc/polipo.conf
/usr/local/bin/polipo -c etc/polipo.conf

polipo.conf 内容:

daemonise = false
pidFile = /tmp/polipo.pid
proxyAddress="0.0.0.0"
proxyPort=8090
socksParentProxy = "127.0.0.1:9050"
socksProxyType = socks5
diskCacheRoot = ""

然后设置http_proxy:

export http_proxy=http://127.0.0.1:8090
export https_proxy=http://127.0.0.1:8090

设置完,runhook就没问题了,还有问题,自行google.....

5.编译

开始编译:

gn gen out/Default
ninja -C out/Default chrome

进过大概8小时的等待。。。呵呵。。。
编译中遇到如何问题记得google。

说一下我遇到的问题:

5.1.cannot allocate memory 和 clang++ kernel opps

15215368566694.jpg

我的vps电脑配置太低了,内存太小了,加了内存进行编译,结果发现:
15215370631989.jpg

swap区不够大的原因,导致 clang++ kernel opps。怒了。我把代码下载了,放到线上服务器去编译了。。

根据官方建议,机器配置为:
15215369225133.jpg

5.2.libatk-bridge-2.0.so.0 缺失

libatk-bridge-2.0.so.0: cannot open shared object file: No such file or directory

还是因为依赖没安装:https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md#chrome-headless-doesnt-launch

yum install:

pango.x86_64
libXcomposite.x86_64
libXcursor.x86_64
libXdamage.x86_64
libXext.x86_64
libXi.x86_64
libXtst.x86_64
cups-libs.x86_64
libXScrnSaver.x86_64
libXrandr.x86_64
GConf2.x86_64
alsa-lib.x86_64
atk.x86_64
gtk3.x86_64
ipa-gothic-fonts
xorg-x11-fonts-100dpi
xorg-x11-fonts-75dpi
xorg-x11-utils
xorg-x11-fonts-cyrillic
xorg-x11-fonts-Type1
xorg-x11-fonts-misc

6.打包

就像这个问题描述的:
https://groups.google.com/a/chromium.org/forum/#!searchin/chromium-dev/linux/chromium-dev/ZoJbiIxHf0o/bxjvlxjABwAJ

编译完 chrome 文件 25G,这么大?我咋分配到其他linux上运行呢?

根据他的提示。执行:

cd src
gn args out/Release

开启一个vim的终端。

is_component_build = false
is_debug = false
symbol_level = 0
enable_nacl = true
remove_webcore_debug_symbols = true
enable_linux_installer = true
ninja -C out/Release "chrome/installer/linux:stable_rpm"

我跑的时候又有遇到蛋疼问题,真心解决不了,跑到官方论坛去求助了。
Screen Shot 2018-03-21 at 11.53.43 AM.png

https://groups.google.com/a/chromium.org/forum/#!mydiscussions/chromium-dev/dDUc3Vnn1VE

人家提醒我/usr/lib/rpm/find-requires不存在,问了一下@lightless师傅。
用下面命令解决:

sudo yum install rpm-build*

好在ninja支持断点续编译,继续编译,发现:
Screen Shot 2018-03-21 at 10.54.09 AM.png

sudo yum install fakeroot

解决。。继续编译,又发现问题。。。。差最后两步居然还有问题,真是福(服)气。。

Screen Shot 2018-03-21 at 10.56.55 AM.png

google搜了一下没发现解决办法,不过发现 out/Release 多了一个rpm文件。强迫症虽然不能忍,但是还是硬着头皮,试试rpm能不能用。。

Screen Shot 2018-03-21 at 12.10.12 PM.png

7.安装

庆幸的是发这个rpm能用。。强迫症有点难受,不过还是用这个包吧。(有人知道咋解决麻烦和我说一下。。)

sudo yum localinstall chromium-browser-stable-67.0.3365.0-1.x86_64.rpm

如果你用非root去安装了,要改一下这个目录权限(我估计是最后一个未解决问题导致的):

chown -R username /opt/chromium.org/chromium/

启动一下:

chromium-browser --no-sandbox -remote-debugging-port=9223 --disable-xss-auditor --ignore-certificate-errors --headless

Screen Shot 2018-03-21 at 12.14.58 PM.png

试了一把,确实解决了新建tab页面的蛋疼问题,美滋滋呀。

8.结尾

踩坑之旅用了两周。。。
体会最深就是英语水平捉急,英语对计算机专业的同学还是很重要的,平时注意积累技术单词认识量。
rpm包我就不给了,要的自己编译一遍吧,感觉爽歪歪。

标签: admin

已有 2 条评论

  1. shinpachi8

    一毛一样的坑, 我也走一遍..

    1. wilson

      chrome 编译坑挺大的

添加新评论