之前整理过一篇《直接检出chromium某tag的完整可构建源码。》的文章。

这个方法中,在git fetch这个步骤需要花费大量的时间。
经过对git命令的研究之后,终于再总结出一个最快速的从零开始,直接check出指定的tag代码的方法。旧的方法完全可以淘汰了。

首先,还是先创建代码存放目前。不同的是,这里不需要创建src目录。

mkdir chromium
cd chromium

然后还是创建.gclient文件:

solutions = [
  {
    "name": "src",
    "url": "https://chromium.googlesource.com/chromium/src.git",
    "managed": False,
    "custom_deps": {},
    "custom_vars": {"checkout_pgo_profiles": True,},
  },
]

如果是要构建android平台的浏览器,就在这个文件最后添加一行内容:

target_os = ["android"]

到这里,还跟之前的方法相差不多。但是接下来就不一样了。以当前最新的官方正式版本112.0.5615.50为例。
直接克隆这个tag的代码:

git clone --depth 2 -b 112.0.5615.50 https://chromium.googlesource.com/chromium/src.git

这里要注意,其中--depth必须为2,原因后面会说到。
这个步骤,代替了原来的git fetch。并且深度只有2,所以原本需要同步的30+G的数据,变成只有区区1+G。这样就节省下了大量的时间和流量。

接下来,还是同步第三方工程和工具链。

gclient sync -D --with_branch_heads --with_tags

这里就要提一下为什么上面--depth必须为2。因为gclient在runhook的时候,是会根据git的提交日志来创建当前的版本信息。而深度为1的时候,就失去了需要的日志内容。会导致下面两个文件内的信息为空。当然,这样也会不导致编译失败,但是在浏览器内就无法看到构建的版本信息了。

src/build/util/LASTCHANGE
src/gpu/config/gpu_lists_version.h

这时,这份源码就已经可以编译出一份完整的chromium浏览器了。
同时,在这份源码的基础上,同样可以继续更新后续的代码。比如需要更新到112.0.5615.67这个tag。

cd src
git fetch origin tag 112.0.5615.67
git checkout -b local_112.0.5615.67 112.0.5615.67
cd ..
gclient sync -D --with_branch_heads --with_tags

而这个更新过程,同步的数据也非常小,非常快捷。因此这个方法应该是最终的chromium代码同步方法了。

ubuntu在内核的更新上,还是非常勤快的。如果每个更新都即时跟进的话,很快就是积累下很多旧内核。
旧内核不仅占用空间,而且看着难受……

使用sudo apt autoremove可以移除旧内核文件,但是在dpkg --get-selections中还会出现,并被标记为deinstall状态。同样看着难受……

并且如果是系统大版本更新,那旧内核也不能通过上面那个命令来移除。这时候就需要用别的方法来干净的删除内核。

首先列出已安装的内核包:

dpkg --get-selections | grep linux-

通过sudo apt-get purge来指定要删除的内核包。比如我要删除5.13的所有内核包:

sudo apt-get purge linux-image-5.13.* linux-modules-5.13.* linux-headers-5.13.* linux-oracle-5.13*

如果已经通过sudo apt autoremove移除,并留下deinstall状态的内核。那可以用下面的命令删除所有deinstall状态的包。

sudo dpkg --purge `dpkg --get-selections | grep deinstall | cut -f1`

如果按前面文章中描述的openwrt编译中,加添的feed源:

src-git kenzo https://github.com/kenzok8/openwrt-packages
src-git passwall https://github.com/xiaorouji/openwrt-passwall

那么默认集成的是普通的geodata文件。
而事实上有一份科学爱好者制作的加强版文件,可以更方便的制定各种策略。

我们可以通过修改Makefile来让编译出来的固件直接集成加强版文件。
对应的Makefile的路径为:

package/feeds/packages/v2ray-geodata/Makefile

编辑这个文件,找到Download/geoipDownload/geosite两个节点分别替换为以下内容:
geoip

GEOIP_VER:=202212042209
GEOIP_FILE:=geoip.dat.$(GEOIP_VER)
define Download/geoip
  URL:=https://github.com/Loyalsoldier/v2ray-rules-dat/releases/download/$(GEOIP_VER)/
  URL_FILE:=geoip.dat
  FILE:=$(GEOIP_FILE)
  HASH:=8c58d22cb94bf98a42b1b2dff8ac9c39f42f1e83f52dc1ab016c72e8a22c5fcb
endef

geosite

GEOSITE_VER:=202212042209
GEOSITE_FILE:=geosite.dat.$(GEOSITE_VER)
define Download/geosite
  URL:=https://github.com/Loyalsoldier/v2ray-rules-dat/releases/download/$(GEOSITE_VER)/
  URL_FILE:=geosite.dat
  FILE:=$(GEOSITE_FILE)
  HASH:=f9d475afa5f2f5bacef596a49fda433224fb8da30d9d7966a3bb1e8a7309472a
endef

然后开始正常编译就可以直接集成加强版的文件了。

因为加强版文件更新非常活跃,基本上每日更新。所以想自己集成最新的文件,只需要修改VER对应的版本号,和文件HASH的哈希值。至于哈希值从哪里来?那就要到他的发布页上去查看了。

一般情况下,直接在git个新建一个分支,那新分支会继承之前分支的所有历史节点。
但是,有时候需要创建一个干净的分支。比如当前项目要开始一个全新的大版本。

这时候在创建分支的时候,就可以加上--orphan参数,这将创建一个干净的,没有历史节点的分支。
比如:

git checkout --orphan dev_109

这个时候,之前分支下的文件都会被标记为删除。添加需要保留的文件,提交后就可以把这个新分支推送到服务端。

git commit -am "new branch for chromium 109"

前阵子,谷歌不知道抽什么风。对ipv6的归属地判断出现严重的问题。我明明是东京的vps上的ipv6给判定到了美国去了。导致我油管的会员直接失效。测试了同一台机器的ipv4就没有这个问题。

目前打算临时关闭ipv6,先用ipv4。等哪天谷歌修复了这个问题后,再启用ipv6。
最简单的方法就是直接运行以下命令。

sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1

想恢复的时候,重启一下网络服务就可以。