1 Star 0 Fork 33

lizh / 龙蜥社区开发者文档

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
308-example-of-epao-nonfree-package.md 19.84 KB
一键复制 编辑 原始数据 按行查看 历史

闭源软件集成样例

1. 联系法务,走开源流程

acc 的软件维护者 程斌 同学,在准备好公开策略(公开的频率和方式)之后,联系法务同学,申请了二进制披露序和开源软件合规扫描。这里要注意一点,如果涉及版本更新,则该流程需要重新走一遍。

2. 获取法律允许

流程申请之后,获取法务许可,增加一个 Alibaba-Cloud-Compiler-End-User-Agreement.docx 文件,该文件表示用户安装此软件的同意许可。该文件和软件本身的 License 文件必须包含在 rpm 的 filelist 内。

3. 本地准备编译环境,制作可用 rpm,并进行本地测试。

  1. 需要定义软件的基本信息。

  2. 包括:name、version、summary、url、descriotion。

  3. 注意:version 代表软件版本,release 仅代表构建次数。如果同一个版本,不做源码变更(此处叫二进制变更),仅仅是 spec 的修改,需要保证 version 不变、递增 release;如果在正式发布之后版本发生变更,比如二进制更新了,此处应该变更 version,release 重新从 1 开始。

  4. 软件维护者准备编译环境。

  5. 发布的版本尽量和本地的构建环境保持一致,因为构建依赖的版本不同可能会导致 so 运行不起来。即:发布到 Anolis OS 23 的 rpm 尽量使用 Anolis OS 23 的环境编译,发布到 Anolis OS 8 的 rpm 尽量使用 Anolis OS 8 的环境进行编译。

  6. acc 这个包比较特殊,特殊在仅对 glibc 的 so 有依赖,且 an8 提供的 glibc.so 在 Anolis OS 23 上也能通用,所以仅构建一次,采用 Anolis OS 8 上构建出来的结果同步发布到 Anolis OS 23 版本。

  7. 新建 spec(参考 spec 模版),并在本地编译出闭源软件的 rpm。

  8. rpmbuild 过程出现问题,可以查看 构建指导手册

  9. 此处直接给出 rpm 样例:

    [root@localhost acc]# ls
    alibaba-cloud-compiler-13.0.1-2.fix.an8.aarch64.rpm
    alibaba-cloud-compiler-13.0.1-2.fix.an8.src.rpm
    alibaba-cloud-compiler-13.0.1-2.fix.an8.x86_64.rpm

4. 制作 rpm tree 需要的 source 文件。

  • 需要先创建一个目录(rpmname-version),并且在该目录下创建两个架构目录(x86_64,aarch64),如果是 noarch 的包,可以建立 noarch 目录或者选择不建立架构目录。
    [root@localhost acc]# mkdir alibaba-cloud-compiler-13.0.1
    [root@localhost acc]# cd  alibaba-cloud-compiler-13.0.1
    [root@localhost alibaba-cloud-compiler-13.0.1]# mkdir x86_64
    [root@localhost alibaba-cloud-compiler-13.0.1]# mkdir aarch64
    [root@localhost alibaba-cloud-compiler-13.0.1]# ls
    aarch64  x86_64
    [root@localhost acc]# tree alibaba-cloud-compiler-13.0.1
    alibaba-cloud-compiler-13.0.1
    ├── aarch64
    └── x86_64
    
    3 directories, 0 files
  • 使用 rpm2cpio 命令将 rpm 解压到刚才创建的带架构的目录下。(注意:路径全部保留)-D 选项可以指定解压的目标目录。
    [root@localhost acc]# rpm2cpio alibaba-cloud-compiler-13.0.1-2.fix.an8.x86_64.rpm | cpio -divm -D alibaba-cloud-compiler-13.0.1/x86_64
    [root@localhost acc]# ls alibaba-cloud-compiler-13.0.1
    aarch64  x86_64
    [root@localhost acc]# ls alibaba-cloud-compiler-13.0.1/x86_64/
    opt
    [root@localhost acc]# ls alibaba-cloud-compiler-13.0.1/x86_64/opt/
    alibaba-cloud-compiler
    [root@localhost acc]# ls alibaba-cloud-compiler-13.0.1/x86_64/opt/alibaba-cloud-compiler/
    bin  FLANG-LICENSE.TXT  include  JEMALLOC.COPYING  lib64  libexec  LICENSE.TXT  README  share
  • 将另一个架构的 rpm 按照同样方式解压拷贝进去。
    [root@localhost acc]# tar -xvf 20221117-161007-543-#75-anolis8.6.aarch64.release.rpm-13-rpm.tar.gz
    alibaba-cloud-compiler-13.0.1-2.fix.an8.aarch64.rpm
    alibaba-cloud-compiler-13.0.1-2.fix.an8.src.rpm
    summary_message.txt
    [root@localhost acc]# rpm2cpio alibaba-cloud-compiler-13.0.1-2.fix.an8.aarch64.rpm | cpio -divm -D alibaba-cloud-compiler-13.0.1/aarch64/
    [root@localhost acc]# ls alibaba-cloud-compiler-13.0.1/aarch64/opt/alibaba-cloud-compiler/
    bin  FLANG-LICENSE.TXT  include  JEMALLOC.COPYING  lib64  libexec  LICENSE.TXT  README  share
  • 对整个目录进行压缩,压缩成一个 tar.gz
    [root@localhost acc]# tar -cvf alibaba-cloud-compiler-13.0.1.tar.gz alibaba-cloud-compiler-13.0.1
    [root@localhost acc]# ls | grep tar.gz
    20221117-161007-047-#75-anolis8.6.x86_64.release.rpm-13-rpm.tar.gz
    20221117-161007-543-#75-anolis8.6.aarch64.release.rpm-13-rpm.tar.gz
    alibaba-cloud-compiler-13.0.1.tar.gz

5. 走软件引入流程,ospkg-list 进行申请

  • 软件维护者创建 issue,按照模版填写需求背景、收益、维护者和目标。写清楚闭源软件的引入背景和原因、闭源的 License 信息等。

  • 由橘悦审核 issue 并通过之后,进行建立仓库。仓库地址:https://gitee.com/src-anolis-nonfree/<package name> , a8 分支对应 Anolis OS 8,a23 分支对应 Anolis OS 23。

  • 软件维护者在 ospkg-list 仓库中提交代码,参照指导,提交软件信息

6. 将制作好的 source.tar.gz 和 spec 提交到已经建立的仓库

  • 打开 gitee 的仓库地址:https://gitee.com/src-anolis-nonfree/<package name> 

  • 将软件仓库 fork 到个人仓库

  • 将准备好的 source.tar.gz 和 spec 文件提交到个人仓库的版本分支(a8或a23)

  • 发起 pr,等待门禁通过,如果门禁失败,则需要查看错误原因,并进行解决,重新提交代码后,门禁会重新触发

  • 提交者下载门禁构建的 rpm 包,并自行进行功能测试

  • 等待 maintainer 或者发行版同学审核通过,合入代码,由发行版同学触发正式构建

  • 发行版同学将 rpm 发布到 epao-nonfree 仓库,维护者安装 anolis-epao-nonfree-release 包之后,即可通过 yum install 的方式进行安装对应闭源组件。

7. 软件和代码样例

软件样例:

alibaba-cloud-compiler

代码样例:

门禁 CI 的检测内容样例:

1. 将 rpm 解压到本地
[root@localhost acc]# ls
20221117-161007-047-#75-anolis8.6.x86_64.release.rpm-13-rpm.tar.gz   summary_message.txt
20221117-161007-543-#75-anolis8.6.aarch64.release.rpm-13-rpm.tar.gz
[root@localhost acc]# tar -xvf 20221117-161007-047-#75-anolis8.6.x86_64.release.rpm-13-rpm.tar.gz
alibaba-cloud-compiler-13.0.1-2.fix.an8.src.rpm
alibaba-cloud-compiler-13.0.1-2.fix.an8.x86_64.rpm
2. 测试基本安装和卸载
  • 安装测试:如果采用 rpm 安装显示缺少运行依赖时,可以采用 yum localinstall 方式进行验证。
    [root@localhost acc]# ls
    20221117-161007-047-#75-anolis8.6.x86_64.release.rpm-13-rpm.tar.gz   alibaba-cloud-compiler-13.0.1-2.fix.an8.x86_64.rpm
    20221117-161007-543-#75-anolis8.6.aarch64.release.rpm-13-rpm.tar.gz  summary_message.txt
    alibaba-cloud-compiler-13.0.1-2.fix.an8.src.rpm
    [root@localhost acc]# rpm -ivh alibaba-cloud-compiler-13.0.1-2.fix.an8.x86_64.rpm
    error: Failed dependencies:
    	perl(File::Copy) is needed by alibaba-cloud-compiler-13.0.1-2.fix.an8.x86_64
    	perl(FindBin) is needed by alibaba-cloud-compiler-13.0.1-2.fix.an8.x86_64
    	perl(Hash::Util) is needed by alibaba-cloud-compiler-13.0.1-2.fix.an8.x86_64
    	perl(Sys::Hostname) is needed by alibaba-cloud-compiler-13.0.1-2.fix.an8.x86_64
    [root@localhost acc]# yum localinstall alibaba-cloud-compiler-13.0.1-2.fix.an8.x86_64.rpm
    Last metadata expiration check: 0:42:27 ago on Thu 03 Aug 2023 01:18:16 PM CST.
    Dependencies resolved.
    =====================================================================================================================================
     Package                                  Architecture           Version                          Repository                    Size
    =====================================================================================================================================
    Upgrading:
     perl-Errno                               x86_64                 1.36-11.an23                     os                            14 k
     perl-interpreter                         x86_64                 4:5.36.1-11.an23                 os                            70 k
     perl-libs                                x86_64                 4:5.36.1-11.an23                 os                           2.1 M
    Installing dependencies:
     perl-File-Copy                           noarch                 2.39-11.an23                     os                            19 k
     perl-FindBin                             noarch                 1.53-11.an23                     os                            13 k
     perl-Hash-Util                           x86_64                 0.28-11.an23                     os                            33 k
     perl-Hash-Util-FieldHash                 x86_64                 1.26-11.an23                     os                            37 k
     perl-Sys-Hostname                        x86_64                 1.24-11.an23                     os                            16 k
    Downgrading:
     alibaba-cloud-compiler                   x86_64                 13.0.1-2.fix.an8                 @commandline                 651 M
    
    Transaction Summary
    =====================================================================================================================================
    Install    5 Packages
    Upgrade    3 Packages
    Downgrade  1 Package
    
    Total size: 653 M
    Total download size: 2.3 M
    Is this ok [y/N]: y
    Downloading Packages:
    (1/8): perl-FindBin-1.53-11.an23.noarch.rpm                                                           60 kB/s |  13 kB     00:00
    (2/8): perl-Hash-Util-0.28-11.an23.x86_64.rpm                                                        127 kB/s |  33 kB     00:00
    (3/8): perl-File-Copy-2.39-11.an23.noarch.rpm                                                         69 kB/s |  19 kB     00:00
    (4/8): perl-Hash-Util-FieldHash-1.26-11.an23.x86_64.rpm                                              260 kB/s |  37 kB     00:00
    (5/8): perl-Sys-Hostname-1.24-11.an23.x86_64.rpm                                                     105 kB/s |  16 kB     00:00
    (6/8): perl-Errno-1.36-11.an23.x86_64.rpm                                                             82 kB/s |  14 kB     00:00
    (7/8): perl-interpreter-5.36.1-11.an23.x86_64.rpm                                                    551 kB/s |  70 kB     00:00
    (8/8): perl-libs-5.36.1-11.an23.x86_64.rpm                                                           4.3 MB/s | 2.1 MB     00:00
    -------------------------------------------------------------------------------------------------------------------------------------
    Total                                                                                                2.6 MB/s | 2.3 MB     00:00
    Running transaction check
    Transaction check succeeded.
    Running transaction test
    Transaction test succeeded.
    Running 
      Preparing        :                                                                                                             1/1
      Upgrading        : perl-libs-4:5.36.1-11.an23.x86_64                                                                          1/13
      Installing       : perl-File-Copy-2.39-11.an23.noarch                                                                         2/13
      Installing       : perl-FindBin-1.53-11.an23.noarch                                                                           3/13
      Installing       : perl-Hash-Util-FieldHash-1.26-11.an23.x86_64                                                               4/13
      Installing       : perl-Hash-Util-0.28-11.an23.x86_64                                                                         5/13
      Installing       : perl-Sys-Hostname-1.24-11.an23.x86_64                                                                      6/13
      Upgrading        : perl-interpreter-4:5.36.1-11.an23.x86_64                                                                   7/13
      Downgrading      : alibaba-cloud-compiler-13.0.1-2.fix.an8.x86_64                                                             8/13
      Upgrading        : perl-Errno-1.36-11.an23.x86_64                                                                             9/13
      Cleanup          : perl-Errno-1.36-10.an23.x86_64                                                                            10/13
      Cleanup          : perl-interpreter-4:5.36.0-10.an23.x86_64                                                                  11/13
      Cleanup          : perl-libs-4:5.36.0-10.an23.x86_64                                                                         12/13
      Cleanup          : alibaba-cloud-compiler-13.0.1.3-1.an23.x86_64                                                             13/13
      Running scriptlet: alibaba-cloud-compiler-13.0.1.3-1.an23.x86_64                                                             13/13
      Verifying        : alibaba-cloud-compiler-13.0.1-2.fix.an8.x86_64                                                             1/13
      Verifying        : alibaba-cloud-compiler-13.0.1.3-1.an23.x86_64                                                              2/13
      Verifying        : perl-File-Copy-2.39-11.an23.noarch                                                                         3/13
      Verifying        : perl-FindBin-1.53-11.an23.noarch                                                                           4/13
      Verifying        : perl-Hash-Util-0.28-11.an23.x86_64                                                                         5/13
      Verifying        : perl-Hash-Util-FieldHash-1.26-11.an23.x86_64                                                               6/13
      Verifying        : perl-Sys-Hostname-1.24-11.an23.x86_64                                                                      7/13
      Verifying        : perl-Errno-1.36-11.an23.x86_64                                                                             8/13
      Verifying        : perl-Errno-1.36-10.an23.x86_64                                                                             9/13
      Verifying        : perl-interpreter-4:5.36.1-11.an23.x86_64                                                                  10/13
      Verifying        : perl-interpreter-4:5.36.0-10.an23.x86_64                                                                  11/13
      Verifying        : perl-libs-4:5.36.1-11.an23.x86_64                                                                         12/13
      Verifying        : perl-libs-4:5.36.0-10.an23.x86_64                                                                         13/13
    
    Upgraded:
      perl-Errno-1.36-11.an23.x86_64         perl-interpreter-4:5.36.1-11.an23.x86_64         perl-libs-4:5.36.1-11.an23.x86_64
    Downgraded:
      alibaba-cloud-compiler-13.0.1-2.fix.an8.x86_64
    Installed:
      perl-File-Copy-2.39-11.an23.noarch               perl-FindBin-1.53-11.an23.noarch          perl-Hash-Util-0.28-11.an23.x86_64
      perl-Hash-Util-FieldHash-1.26-11.an23.x86_64     perl-Sys-Hostname-1.24-11.an23.x86_64
    
    Complete!
  • 卸载测试:

    • 卸载时不仅要测试包有没有卸载掉,更需要确认安装的文件或者路径是否被清除。

    • 这个版本的 acc 在卸载时文件虽然被清除干净,但是路径没清除,该问题需要解决。解决方案:在 %files 中增加对路径的定义:

%files

%dir /opt

%dir /opt/alibaba-cloud-compiler
    # 
    [root@localhost acc]# rpm -ql alibaba-cloud-compiler | grep txt
    /opt/alibaba-cloud-compiler/lib64/clang/13.0.1/share/asan_ignorelist.txt
    /opt/alibaba-cloud-compiler/lib64/clang/13.0.1/share/cfi_ignorelist.txt
    /opt/alibaba-cloud-compiler/lib64/clang/13.0.1/share/dfsan_abilist.txt
    /opt/alibaba-cloud-compiler/lib64/clang/13.0.1/share/hwasan_ignorelist.txt
    /opt/alibaba-cloud-compiler/lib64/clang/13.0.1/share/msan_ignorelist.txt
    [root@localhost acc]# rpm -qa alibaba-cloud-compiler
    alibaba-cloud-compiler-13.0.1-2.fix.an8.x86_64
    [root@localhost acc]# rpm -e alibaba-cloud-compiler
    [root@localhost acc]# rpm -qa alibaba-cloud-compiler
    [root@localhost acc]# ls ///opt/alibaba-cloud-compiler/lib64/
    #### 注意 !!!!这里有问题!!!!
    [root@localhost acc]# ls /opt/alibaba-cloud-compiler
    bin  include  lib64  libexec  share
3. 测试该软件对外提供的能力是否产生冲突
  • 通过 rpm -qP 查看对外提供的能力,需要对每一个 Provides 的能力进行检测现有源上会不会存在同等功能,尤其是 so,一旦查出来存在相同能力即为有问题的 rpm,需要去除对应能力提供。这里可以用 libflang.so()(64bit) 举例。
    [root@localhost acc]# ls alibaba-cloud-compiler-13.0.1-2.fix.an8.x86_64.rpm
    alibaba-cloud-compiler-13.0.1-2.fix.an8.x86_64.rpm
    [root@localhost acc]# rpm -qP alibaba-cloud-compiler-13.0.1-2.fix.an8.x86_64.rpm
    alibaba-cloud-compiler = 13.0.1-2.fix.an8
    alibaba-cloud-compiler(x86-64) = 13.0.1-2.fix.an8
    lib64/LLVMgold.so(LLVM_13)(64bit)
    libRemarks.so.13()(64bit)
    libRemarks.so.13(LLVM_13)(64bit)
    libclang_rt.asan-x86_64.so()(64bit)
    libclang_rt.dyndd-x86_64.so()(64bit)
    libclang_rt.hwasan-x86_64.so()(64bit)
    libclang_rt.hwasan_aliases-x86_64.so()(64bit)
    libclang_rt.memprof-x86_64.so()(64bit)
    libclang_rt.scudo-x86_64.so()(64bit)
    libclang_rt.scudo_minimal-x86_64.so()(64bit)
    libclang_rt.scudo_standalone-x86_64.so()(64bit)
    libclang_rt.ubsan_minimal-x86_64.so()(64bit)
    libclang_rt.ubsan_standalone-x86_64.so()(64bit)
    libflang.so()(64bit)
    libflangrti.so()(64bit)
    libpgmath.so()(64bit)
    pkgconfig(jemalloc) = 5.3.0_0
    
    # 应该对每个能力进行检测,这里使用 libflang.so()(64bit) 给个样例.这里没有查到,结果正确。
    [root@localhost acc]# yum repoquery --whatprovides 'libflang.so()(64bit)'
    Last metadata expiration check: 1:46:37 ago on Thu 03 Aug 2023 01:18:16 PM CST.
    [root@localhost acc]#
  • 发现上述存在问题,去除相同能力提供方式。

  • 如果存在包名相同,该问题需要重新定义软件名称

  • 如果存在提供相同的 bin ,则需要在构建时,重新创建绝对路径,将二进制存放对应目录,或者在源码中更改生成的 bin 名称,避免产生相同的 bin

  • 如果存在相同的 so,不仅需要生成到不同目录,也需要去除 so 的对外提供。

spec 中添加如下代码,将其去除:

    %global _privatelibs (libclang.*|libflang.*|libLTO|libomp.*|libc++.*|libRemarks.*|libpgmath)[.]so.*|(.*jemalloc.*)
    %global __provides_exclude ^(%{_privatelibs})$
4. 准备测试文档,将上述测试都输出到测试文档中。

该测试文档可以添加到 pr 的评论中同步提交。

1
https://gitee.com/oss_enterprise_git/docs.git
git@gitee.com:oss_enterprise_git/docs.git
oss_enterprise_git
docs
龙蜥社区开发者文档
main

搜索帮助