前言
公司的项目依赖都是以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,都有多个符号链接和实际链接,符号链接(大小比较小)会软链接至实际链接(大小比较大)
安装rpm后,一般是这样的
因此,改造成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 .
评论区