日志包含每个更改的作者、内容和时间等信息
控件包含包的名称、维护者和构建依赖项等信息
补丁目录包含包作者对上游代码所做的更改
在规则中是包的生成脚本
这些文件基本上是
DEB包,它们是我们将来要进行更改的包的主要部分。
首次成立
在浏览完包的整体结构后,我们可以尝试改进包,但在此之前,我们首先需要安装它需要的各种依赖dpkg源码编译,使用以下命令:
sudo apt build-dep node-pretty-ms
apt 会根据包控制文件中描述的依赖手动帮我们安装所需的依赖,下载安装完成后dpkg源码编译,使用 debuild 命令进行改进:
debuild -b -uc -us
命令运行后,可以在父目录中找到编译好的 deb 包。
修改源代码
当然,我们这次的目标不是按原样重新编译 deb 包,毕竟为什么不直接从服务器下载呢?我们要做的是对源代码进行更改并重新编译:
cd node-pretty-ms-7.0.1
vim index.js
拿其中之一
throw new TypeError('Expected a finite number');
修改为
throw new TypeError('Expected a finite number!');
保存并退出,并使用以下命令编译日志
dch -i -Dunstable
这里的不稳定是指软件分发渠道,由于我们不是官方维护者,我们所做的更改会增加 * 默认为非维护者上传
编写更新日志后,您可以使用以下命令退出编辑器并生成补丁:
dpkg-source -b . --commit
输入补丁名称并确认此命令也会将我们之前的更改保存到 debian/patches 目录,并在编译源代码时手动应用它们。
进行上述更改后,使用以下命令重新生成 DSC 源代码
:
dpkg-source -b .
返回
父目录再次,你可以看到新生成的 .DSC 和 debian.tar.xz 文件,这些是带有我们之前更改的新 deb 包,要重新编译,只需返回源子目录并重新输入:
debuild -b -uc -us
让我们坐下来等待收拾袋子!
高级方法
直接使用前面的形式编译其实很方便,但是当我们大规模打包的时候,就会出现问题:不同的 pack 有不同的依赖,重复安装不仅特别麻烦,有时还可能导致依赖估计错误——明显不需要依赖的包变成了必要的依赖, 这样你打的包可以在本地机器上正常工作,但可以放在别人的机器上,但不能正常编译和安装。这给 pbuilder 和 sbuild 带来了:这些工具可以帮助我们构建一个隔离的环境,比如 chroot 或 docker,但对打包进行了更具体的优化,如下面的 pbuilder 所示。
要安装 pbuilder,只需在终端中输入以下命令:
sudo apt install pbuilder
安装完成后,使用以下命令创建编译环境
:
sudo pbuilder create
这一步会为我们配置一个完整的环境,供我们以后编译,等待创建完成,运行以下命令完成编译
pbuilder build node-pretty-ms_7.0.1-1.dsc
这是一个关于 deb 打包的简短教程,pbuilder 的更高级用法正在等待读者进一步挖掘。
参考文章:
背景
看看ElasticSearch的源代码,
我下载了 ElasticSearch 的 6.3 和 6.8 版本,使用了三个版本的 gradle,但没有成功编译。
ElasticSearch 和 Gradle 之间的版本对应关系到底是什么?我在 ElasticSearch 源代码包的文档中找到了答案。
确定分级版本
如何确定 ElasticSearch 和 gradle 的版本?查看源文档,我发现有一个命令。
在提交您的更改之前,运行测试套件以确保
Nothingisbroken,with:sh./gradlewcheck
我把它敲掉了,找到了版本之间的对应关系。
下载相应版本的 Gradle
Gradle 的双补包,直接解压并将 bin 目录设置为环境变量。要编译 ElasticSearch 6.3 的实现,需要 gradle 4.5。
进入源代码对应的目录,执行命令 gradleidea:
编译失败,由于JDK版本不一致,重新下载JDK 1.10并重新编译。
总结
在执行 gradleidea 命令时,如果网络不好,在解决单个依赖包时会出现编译因请求超时而导致编译失败的问题,解决方案是多次执行命令才能成功。
下载JDK时需要注册Oracle账号,但账号登录在Edge浏览器下存在表单不兼容问题,导致下载操作无响应,建议下载前使用Microsoft浏览器登录Oracle账号。
启示
明天我听了一本书《弹性思维》,我想了一会儿,找到gradle和ES版本对应关系的过程,是大脑弹性思维的结果。我以为 ES 源代码和 gradle 之间的对应关系可以在互联网上找到,但不幸的是,我找不到它。
和格拉德尔
而且ES版本改得太快了,三级下一一试还是行不通,不是一个好办法。所以从 ES 源代码中的文档开始elasticsearch源码编译,找到有 DISTISTRIBUTION.md 文档,在文档中找到与 gradle 相关的命令,参见 gradlecheck 并尝试,宾果游戏,解决问题!编译过程失败时,一眼看异常
消息就是读取超时等网络超时,当我认为编译Tomcat时maven依赖包下载也失败时,我再执行一次。
最后,我想感叹,异常信息确实是一件好事elasticsearch源码编译,好的日志可以让人反思如何解决问题,所以在项目开发中使用好的日志非常重要!