docker-engine 套件實例

  1. docker-engine 支援 CentOS 6 的版本只到 1.7.1,oraclelinux 提供 docker-engine 更高的版本,但安裝時相依套件 kernel-uek >= 4.1,如果核心版本大於 4.1,不用安裝 kernel-uek 也應該要可以安裝,所以下載 SRPM 套件,重新 build RPM 檔。
    [dywang@dyw219 ~]$ cd rpmbuild/
    [dywang@dyw219 rpmbuild]$ wget https://yum.dockerproject.org/repo/main/oraclelinux/6/Packages/docker-engine-17.05.0.ce-1.el6.src.rpm
    

  2. 安裝 SRPM 套件
    [dywang@dyw219 rpmbuild]$ rpm -ivh docker-engine-17.05.0.ce-1.el6.src.rpm 
       1:docker-engine         ########################################### [100%]
    
  3. 解打包壓縮
    [dywang@dyw219 rpmbuild]$ cd SOURCES/
    [dywang@dyw219 SOURCES]$ tar zxvf docker-engine.tar.gz
    
  4. 版本名稱 17.05.0-ce,但版本名稱不允許減號 '-',實際名稱為 17.05.0.ce。
    [dywang@dyw219 SOURCES]$ diff -uN ../tmp/docker-engine/VERSION docker-engine/VERSION 
    --- ../tmp/docker-engine/VERSION	2017-05-05 05:36:17.000000000 +0800
    +++ docker-engine/VERSION	2019-08-19 10:56:26.627394532 +0800
    @@ -1 +1 @@
    -17.05.0-ce
    +17.05.0.ce
    
  5. 重新打包壓縮 docker-engine.tar.gz。
    [dywang@dyw219 SOURCES]$ tar zcvf docker-engine.tar.gz containerd docker-engine proxy runc tini
    
  6. 修改 docker-engin.spec 檔,由於版本變數無法取得版本,所以直接在 spec 檔開頭定義,Release 加 dyw,核心要求用 or 增加 kernel 及 kernel-ml,docker 實際安裝的執行檔在 /usr/bin,所以 /usr/local/bin 必須改成 /usr/bin。
    [dywang@dyw219 SOURCES]$ diff -uN ../tmp/docker-engine.spec ../SPECS/docker-engine.spec 
    --- ../tmp/docker-engine.spec	2017-05-05 06:09:41.000000000 +0800
    +++ ../SPECS/docker-engine.spec	2019-08-19 12:01:32.234691761 +0800
    @@ -1,6 +1,10 @@
    +%define _version 17.05.0.ce
    +%define _origversion 17.05.0.ce
    +%define _release 1
    +
     Name: docker-engine
     Version: %{_version}
    -Release: %{_release}%{?dist}
    +Release: %{_release}%{?dist}.dyw
     Summary: The open-source application container engine
     Group: Tools/Docker
     
    @@ -57,7 +61,7 @@
     %endif
     %if 0%{?oraclelinux} >= 6
     # Require Oracle Unbreakable Enterprise Kernel R4 and newer device-mapper
    -Requires: kernel-uek >= 4.1
    +Requires: (kernel >=4.1 or kernel-uek >= 4.1 or kernel-ml >= 4.1)
     Requires: device-mapper >= 1.02.90-2
     %endif
     
    @@ -137,18 +141,18 @@
     install -p -m 755 bundles/%{_origversion}/dynbinary-daemon/dockerd-%{_origversion} $RPM_BUILD_ROOT/%{_bindir}/dockerd
     
     # install proxy
    -install -p -m 755 /usr/local/bin/docker-proxy $RPM_BUILD_ROOT/%{_bindir}/docker-proxy
    +install -p -m 755 /usr/bin/docker-proxy $RPM_BUILD_ROOT/%{_bindir}/docker-proxy
     
     # install containerd
    -install -p -m 755 /usr/local/bin/docker-containerd $RPM_BUILD_ROOT/%{_bindir}/docker-containerd
    -install -p -m 755 /usr/local/bin/docker-containerd-shim $RPM_BUILD_ROOT/%{_bindir}/docker-containerd-shim
    -install -p -m 755 /usr/local/bin/docker-containerd-ctr $RPM_BUILD_ROOT/%{_bindir}/docker-containerd-ctr
    +install -p -m 755 /usr/bin/docker-containerd $RPM_BUILD_ROOT/%{_bindir}/docker-containerd
    +install -p -m 755 /usr/bin/docker-containerd-shim $RPM_BUILD_ROOT/%{_bindir}/docker-containerd-shim
    +install -p -m 755 /usr/bin/docker-containerd-ctr $RPM_BUILD_ROOT/%{_bindir}/docker-containerd-ctr
     
     # install runc
    -install -p -m 755 /usr/local/bin/docker-runc $RPM_BUILD_ROOT/%{_bindir}/docker-runc
    +install -p -m 755 /usr/bin/docker-runc $RPM_BUILD_ROOT/%{_bindir}/docker-runc
     
     # install tini
    -install -p -m 755 /usr/local/bin/docker-init $RPM_BUILD_ROOT/%{_bindir}/docker-init
    +install -p -m 755 /usr/bin/docker-init $RPM_BUILD_ROOT/%{_bindir}/docker-init
     
     # install udev rules
     install -d $RPM_BUILD_ROOT/%{_sysconfdir}/udev/rules.d
    

  7. 安裝 build docker-engine RPM 需要的套件
    [dywang@dyw219 SOURCES]$ sudo yum install go btrfs-progs \
    btrfs-progs-devel device-mapper-devel
    

  8. 重建 docker-engine RPM 及 SRPM 二進位檔,GOPATH 變數不存在,設定 AUTO_GOPATH=1。
    [dywang@dyw219 SOURCES]$ AUTO_GOPATH=1 rpmbuild -ba --clean \
    --target=$(uname -m) ../SPECS/docker-engine.spec