源码编译docker-ce v18.09.2(简单易懂100%成功)

1 概述:

1.1 环境

版本信息如下:
a、操作系统: centos 7.6,amd64
b、服务器docker版本: v18.06.0
c、服务器git版本: 1.8.3.1
d、目标编译的docker版本: v18.09.2


2 前置准备

2.1 宿主机安装docker

编译环境是一个容器,因此需要在宿主机安装容器引擎,在后续的步骤中运行出一个容器来编译目标软件docker-ce v18.09.2。

yum install yum-utils -y
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates
yum install -y docker-ce-18.06.0.ce-3.el7 

mkdir -p /etc/docker
cat > /etc/docker/daemon.json << EOF
{
      "registry-mirrors": ["https://bxsfpjcb.mirror.aliyuncs.com", "https://registry.docker-cn.com"],
      "max-concurrent-downloads": 10,
      "log-driver": "json-file",
      "log-level": "warn",
      "log-opts": {
          "max-size": "100m",
          "max-file": "3"
      },
       "live-restore": true,
      "exec-opts": ["native.cgroupdriver=systemd"],
      "graph": "/var/lib/docker"
}

EOF
systemctl daemon-reload
systemctl enable docker
systemctl restart docker

2.2 构建编译环境镜像

将docker-ce/components/engine目录下的Dockerfile拿到阿里云镜像服务进行构建,得出的镜像为:

registry.cn-shenzhen.aliyuncs.com/gzlj/docker-build:v18.09.2

3 编译过程:

3.1 下载docker-ce源码

mkdir -p /opt
cd /opt
git clone -b v18.09.2 https://gitee.com/zjuhunter/docker-ce.git
cd docker-ce/components/engine

在这里插入图片描述

3.2 启动编译环境容器并执行编译脚本

当前位于宿主机的/opt/docker-ce/components/engine目录中,启动编译环境的容器,挂载源码目录进容器,执行docker-ce中的hack/make.sh脚本,稍等数分钟即可完成编译,最终在源码目录下的bundles/binary-daemon/目录中出现一堆二进制文件。

docker run \
--rm \
-it \
--privileged \
-v $PWD:/go/src/github.com/docker/docker \
registry.cn-shenzhen.aliyuncs.com/gzlj/docker-build:v18.09.2 \
bash

# 现在已进入容器内部,执行编译脚本
export DOCKER_GITCOMMIT=v18.09.2
# 想调试dockerd,则应该执行: export DOCKER_DEBUG=true
# 当环境变量DOCKER_DEBUG=true时,脚本编译源码过程会删除ldflags中的-w参数
# go编译参数带-w,则使用dlv命令调试时,出现could not get .debug_frame section: could not find .debug_frame section
hack/make.sh binary

在这里插入图片描述
在这里插入图片描述

4 总结:

docker-ce项目并不是使用go module的方式进行管理依赖,进入编译环境后,不需要执行任何与依赖相关的指令(例如go get等)。如果强制将docker-ce项目变成go module项目,执行编译脚本会出现依赖相关的错误和代码中出现未定义字段错误。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
cheat engine 7.3 源码 CE7.3源码 添加暗模式支持(更改设置时重新启动 CE) 所有保存的结果现在显示在发现列表中(可以关闭) 组现在可以支持指点通配符。(只有当字段是适当的指点时才有效) 如果重复定时器尚未完成,可以通过释放密钥和抑制来重复热键 结构解剖添加到地址列表使用地址弦而不是数字,因此符号将被保留 结构解剖现在有一个选项来保存列的先前状态,并显示更易于更改 中鼠标单击现在将结构元素的值复制到剪贴板中 添加 [$LUACODE] 块用于内联 Lua 编码 向 CE 添加了 c 编译器 在自动装配器中添加 [$C] 块。所有 [$C] 方块在执行前合并成一个脚本 添加 [$CCODE] 内联 C 编码的方块 (检查论坛、维基、CE 帕特里翁不和谐或 CE 的 youtube) 添加了 C#编译器(编译器) 添加例程以进行。NET(和单体)方法绕道而行。.NET 信息有一个新的上下文, 您可以在那里为自动组装器创建一个绕行模板 将调用方法添加到 .NET 信息窗口 [禁用] 部分现在可以参考标签、定义、AOBScan 结果和在 [ENABLE] 部分创建的分配 用户定义的符号列表具有 CCode 符号的次要列表 更改地址窗口现在也支持相对偏移 DBVM 速度改进 DBVM 具有额外的安全级别,并添加了dbvm_setKeys,以便轻松更改访问代码 DBVM 现在有一些嵌套 VM 的基本支持 (只有这样你才能运行它们, 还没有修改) 新的调试界面:DBVM 级调试器 改进"查找此地址的访问/写入"性能 解剖代码现在允许您指定自定义范围 如果记录是字符串类型,则地址列表值排序现在按字母顺序对值进行排序 多个条目的下拉列表现在可以同时更改 独立注册窗口现在也显示标志值 如果第一个值大于第二个值,则扫描之间的值现在自动摇号顺序 修复: 修复一些游戏冻结 CE 时,符号访问 Lua 调试现在显示循环变量 几个窗口现在保存他们的位置, 不会被损坏, 如果你不显示他们第一次运行 Ce 使用超时时固定创建阅读和停止 固定拆解 vcvtsi2s 固定比较第一次扫描, 如果它是一个大块, 并使它更有效 切共享:注销已修复 固定组装模组 固定的 ultimap ret 过滤器 固定卢阿管从不呼叫奥纳罗尔 64 位 CE 中的固定 vehdebug 在 32 位目标中将 FPU 寄存器归零 固定 DBVM 查找 AMD 上的访问/写入点 使用单行编辑器时不处理内存记录的固定撤消 加载表时固定隐藏儿童组选项 在中断和跟踪窗口中修复了一些字体问题 固定粘贴六角视图中的其他类型 修复符号加载器完全崩溃在未知 pdb 符号数据 卢亚: 保存表不再要求在表上签名 如果省略按钮列表,消息对话将有效。(然后默认到 mbok) 添加更多自定义按钮 注册系统不再错误出整个脚本的失败。它现在覆盖现有符号 还有很多其他的事情。 新功能: 形式. 保存到流编译 () 编译 () 签名扩展签名表符号列表. 获取模态列表符号列表. 获取模拟列表 memscan. 获取保存的执行处理器 memscan. 获取保存的签名列表保存的处理器类

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值