rpm 打包相关
rpm 打包相关
RPM打包原理、示例、详解及备查:
https://blog.csdn.net/get_set/article/details/53453320 https://www.cnblogs.com/postgres/p/5726339.html
jgcloud rpm build fpm -s dir -t rpm -n jgcloud-patch-com-centos-el7 --description "jgcloud add boot from image(new volume)" -a native --verbose --license GPLv2 --no-depends -v 2.0.0 -f ./usr rpmbuild命令打包较为复杂,这里我们使用简单的打包工具FPM
fpm github: https://github.com/jordansissel/fpm/ fpm 功能简单说就是将一种类型的包转换为另一种类型
支持的源类型包
- dir 将目录打包成所需要的类型,可以用于源码编译安装的软件包 主要了解
- rpm 对rpm进行转换
- gem 对rubygem包进行转换
python 将python模块打包成相应的类型
支持的目标类型包
- rpm 转换为rpm包 主要了解
- deb 转换为deb包
- solaris 转换为solaris包
- puppet 转换为puppet模块
安装ruby 环境和fpm工具
fpm是ruby 写的,因此系统环境需要安装ruby ,且ruby的版本号大于1.8.5, 安装Ruby模块
yum -y install ruby rubygems ruby-devel rpm-build 查看ruby源有哪些
gem source list 添加阿里云的Rubygems 仓库,外国的源慢
gem sources -a https://mirrors.aliyun.com/rubygems/ 移除原生的Ruby仓库
gem sources --remove https://rubygems.org/ 安装fpm
gem install fpm fpm使用方法
rpm -qpl *.rpm 查看包内容 s 指定源类型 t 指定目标类型,即想要制作为什么包 n 指定包的名字 -v 指定包的版本号 -iteration Release值,发布的序列号 -epoch Epoch值 -vendor 厂商 -maintainer 维护者 -description 描述 -url 软件主页 -workdir Fpm工作目录 directories 递归指定的目录标记为属于这个包 C 指定打包的相对路径,切换到指定的目录 d 指定依赖于哪些包 f 第二次打包时目录下如果有同名安装包存在,则覆盖它 p 输出的安装包的目录,不想放在当前目录下就需要指定 -category 分组‘Development/App’ License BSD -pre-install 软件包安装完成前所要运行的脚本 -post-install 软件包安装完成之后所要运行的脚本 -Post-uninstall 软件包卸载完成之后所要运行的脚本 -pre-uninstall 软件包卸载完成之前所要运行的脚本 -after-upgrade 包升级后执行的脚本 -before-upgrade 包升级前执行的脚本 f :强制覆盖[覆盖同名rpm包] n :指定的rpm包名 p :指定的rpm包文件放置位置 -v :指定的rpm包版本 d :指定依赖的软件 ( [-d 'name'] or [-d 'name > version'] 例子: -d 'libstdc++ >= 4.4.3') a :指定系统架构,如果是noarch则为'-a all' 或者 '-a native' [x86_64] 当软件不区分64位或32位的时候可以 noarch s :指定INPUT的数据类型 (["-s dir"] 省略数据类型) m :指定打包人员[Packager] ([ -m 'user']) C :指定打包的相对路径,类似于buildroot. 譬如-C /tmp/apr/ 而打包机器的数据包路径是/tmp/apr/{opt,usr,etc} 那安装这个rpm包后,在本地的数据就是/opt/,/usr/,/etc/ t :指定需要制作成什么包,可选项有(deb,rpm,solaris,etc) 支持的源类型:: "dir" "rpm" "gem" "python" "empty" "tar" "deb" "cpan" "npm" "osxpkg" "pear" "pkgin" "virtualenv" "zip" 支持的目标类型: "rpm" "deb" "solaris" "puppet" "dir" "osxpkg" "p5p" "puppet" "sh" "solaris" "tar" "zip" -description :软件包描述 -conflicts :指定冲突软件 -url :指定站点[惯例都是添加软件的官网 例如: --url "http://www.cnblog.com/roach57" ] -verbose :安装过程详细打印 -after-install :包安装之后执行的脚本 也可写作 --post-install FILE -before-install :包安装之前执行的脚本 -after-remove :包卸载之后执行的脚本 -before-remove :包卸载之前执行的脚本 -after-upgrade :包更新之后执行的脚本[仅支持 deb 和 rpm 这两种包] -before-upgrade :包更新之前执行的脚本 -iteration :发布序号[就是rpm包里面的release] -epoch :纪元 [不知道干嘛用的] -no-rpm-sign :不使用rpm签名 Signature -license :证书许可 [可选项有 'BSD(开源软件)' 'GPLv2(自由软件)' 'MIT' 'Public Domain(公共域)' 'Distributable(贡献)' 'commercial(商业)' 'Share(共享)等',一般的开发都写'BSD'或'GPL'] -vendor :供应商名称 [ --vendor 'your.email@example.com'] -no-depends :代表没有任何依赖包,和-d是对立的,不能共用 -config-files :指定配置文件,可以指定目录[递归] -directories :指定包目录 -category :软件所属的类别[这是个什么软件]下面有个对应的表格: [参考这个文件 /usr/share/doc/rpm-x.x.x/GROUPS ] Amusements/Games [娱乐/游戏] Amusements/Graphics [娱乐/图形] Applications/Archiving [应用/文档] Applications/Communications [应用/通讯] Applications/Databases [应用/数据库] Applications/Editors [应用/编辑器] Applications/Emulators [应用/仿真器] Applications/Engineering [应用/工程] Applications/File [应用/文件] Applications/Internet [应用/因特网] Applications/Multimedia [应用/多媒体] Applications/Productivity [应用/产品] Applications/Publishing [应用/印刷] Applications/System [应用/系统] Applications/Text [应用/文本] Development/Debuggers [开发/调试器] Development/Languages [开发/语言] Development/Libraries [开发/函数库] Development/System [开发/系统] Development/Tools [开发/工具] Documentation [文档] System Environment/Base [系统环境/基础] System Environment/Daemons [系统环境/守护] System Environment/Kernel [系统环境/内核] System Environment/Libraries [系统环境/函数库] System Environment/Shells [系统环境/接口] User Interface/Desktops [用户界面/桌面] User Interface/X [用户界面/X窗口] User Interface/X Hardware Support [用户界面/X硬件支持] roach-1.0.1-57.el6.x86_64.rpm | | | | | 软件名称| | | | 版本号 | | | 发布号 | | 硬件平台 | 扩展名 例子备注: roach :软件名称 1. 0.1 :软件版本号 57. el6 :发布号主要是对软件存在的bug或漏洞进行修补,在软件功能上并没有变化,el6指的是rhel6系统中发布 x86_64 :指64位的PC架构,另外还有'i386' 'i686' 等32位的PC架构,noarch是指不区分硬件架构 rpm :扩展名 例一:编写一个脚本
# nginx_rpm.sh # !/bin/bash useradd nginx -M -s /sbin/nologin ln -s /application/nginx-1.6.3/ /application/nginx 打包
- fpm -s dir -t rpm -n nginx -v 1.6.3 -d ‘pcre-devel,openssl-devel’ –post-install /server/nginx_rpm.sh -f /application/nginx-1.6.3/
说明:
-s dir 指定源的类型为目录
-t rpm 指定需要打成包的类型
-n 包的名称
-v 包的版本
-d 依赖,多个用,号隔开
–post-install /server/nginx_rpm.sh 脚本的绝对路径
-f /application/nginx-1.6.3/ 强制覆盖,包存放的位置
例二:不能使用相对路径打包
fpm -s dir -t rpm -n nginx -v 1.6.3 -f . # . 为相对路径打包,不能使用这种方式,不然打包出来的内容都被安装到根目录中,如果非要使用相对路径打包可以用下边的目录结构
├── rpmbuild │ ├── ceph_exporter-2.0.0-1.x86_64.rpm │ └── usr │ ├── bin │ │ └── ceph_exporter │ └── lib │ └── systemd │ └── system │ └── ceph_exporter.service 进入到rpmbuild目录中,执行命令
fpm -s dir -t rpm -n ceph_exporter -v 2.0.0 -f ./usr 本文由作者按照 CC BY 4.0 进行授权