linux RPM manager
rpm manage:
rpm2cpio package_name | cpio -id #将一个rpm包解压至当前目录
rpm -qi package_name #查看一个已安装的rpm包信息
rpm -qpi package_name #查看一个文件系统上的制定rpm包信息
rpm -uvh package_name #升级一个rpm包
rpm -e package_name #卸载rpm包 -ivh 显示详细信息 --nodpes 忽略依赖
rpm -i package_name #安装rpm包 -ivh 显示详细信息
rpm -qd package_name #查看rpm包生成的文档路径
rpm -qc package_name #查看rpm包生成的配置文件路径
rpm -q --scripts package_name #查看安装rpm包前运行的脚本
rpm build:
构建rpm需要创建指定的文件夹:
build buildroot rpms sources specs srpms
可以手动创建,也可以在任何目录下直接运行rpmbuild test.spec
error: failed to stat /root/test.spec: 没有那个文件或目录
虽然会报错,但是这时已经自动在当前目录下生成了rpmbuild目录结构了:
rpmbuild
├── build #当我们rpmbuild -ba 构建rpm时会自动在这个目录下进行编译
├── buildroot #会当成临时根,会将编译好的软件包生成在这个目录下
├── rpms #编译好的rpm包会存放在这个文件夹
├── sources #放源码包,一般为tar.gz格式
├── specs #.sepc 文件
└── srpms #存放src.rpm包【rpm格式的源码包,可以在不同平台上进行build】
rpmbuild --showrc #显示系统定义的macros
rpmbuild --showrc | grep _topdir #显示系统默认的rpmbuild工作路径
note: 在macros中 ‘__’表示命令别名(不同的os命令路径可能不一样,所以需要使用命令别名),'_'表示环境变量。
spec file:
macros:
#开头为注释,注释中不能使用%等宏关键字,如要使用#,可以写成##
%define nginx_user nginx #define macros
%{nginx_user} #use macro
spec文件必须字段:
name:
不能包含“-”
version:
不能包含“-”
release:
发行号
group:
所属组,/usr/share/doc/rpm-version/groups 中任意一个
定义能力:
provides: webserver
#如果定义了能力,别人如果安装软件需要依赖的话可以依赖我们自己定义的能力,如果没有定义默认就是软件包的名字。
所有步骤:
1.准备阶段:
%prep:
1.切换工作目录,解压软件包
2.设置权限,设置环境变量等
#可以用%setup 控制默认prep的动作
2.编译阶段:
%build:
#如果不需要编译可以留空。
3.安装阶段:
%install:
#安装
4.清理阶段:
%clean
#删除build中的文件
%file
#包含哪些文件,如果未完全包含编译生成的所有文件,那么构建rpm包时会报错
额外选项:
%pre
#安装前运行的脚本
%post
#安装后运行的脚本
%preun
#卸载前运行的脚本
%postun
#卸载后运行的脚本
子包:将一个程序拆分为多个子包
签名:防止程序传播过程中被别人篡改
上一篇: 到底要砍几刀!拼多多的套路曾让你中招吗?
下一篇: 要是家里面没猪怎么办