标签搜索

目 录CONTENT

文章目录

改造rpm成conan模块

陈铭
2021-08-19 / 0 评论 / 0 点赞 / 171 阅读 / 617 字 / 正在检测是否收录...

前言

公司的项目依赖都是以rpm包进行安装,规范化工作需要改造rpm包,以conan的形式安装依赖

rpm安装时做了什么?

以公司某个rpm包为例,我们需要层层解压至文件夹状态,最终层级如下:


  • etc
    • cron.d
    • logrotate.d
    • pki
  • usr
    • bin
    • lib64
  • var
    • log

一级目录下etc、usr、var对应linux根目录。因此rpm包安装本质上就是复制这些层级到linux根目录,接着做:
(1) 对/usr/bin新增的文件赋执行权
(2) 对/usr/lib64新增的文件赋执行权,并建立软链接
基本上一个库有多个so,都有多个符号链接和实际链接,符号链接(大小比较小)会软链接至实际链接(大小比较大)
image

安装rpm后,一般是这样的
image

因此,改造成conan包我们需要安装conan时也做如上这些步骤

打包conan

首先层层解压rpm,进入上述层级目录(etc、usr、var),执行:

# 生成打包二进制文件的打包脚本
conan new <model_name>/<version> --bare

# 打包,最终打包的东西会出现在~/.conan/data/<model_name>/<version>/<company>/<channel> 下
conan export-pkg . <model_name>/<version>@<company>/<channel>  -s os=Linux -s compiler=gcc -s compiler.version=4.8

# 设置私库
conan remote add <repo_name> <repo_url> false

# 上传至制品库
# --all:全部上传
conan upload <model_name>/<version>@<company>/<channel> --all -r=<repo_name>

安装conan模块

rpm包安装时所做的文件复制操作和各种软链接赋权也应该在安装conan模块时定义。在项目根目录下编写conanfile.py,如下:

from conans import ConanFile, tools

class RcosEstServerConan(ConanFile):
    # 所需依赖
    def requirements(self):
        self.requires("<model_name>/<version>/<company>/<channel>")
		
    # 执行复制及其赋权和软链接
    def imports(self):
        # def copy(pattern, dst, src)
        # 如下语句:"."路径下(conan包根路径)的所有文件,复制到机器"/"根路径下
        self.copy("*", "/", ".")
        # 执行shell
        self.run("chmod 777 xxx")
        self.run("ln -s xx xx")

接着执行安装

# "."指的是当前项目根目录,也就是有conanfile.py的路径
conan install .
0

评论区