文章目录
- 1.安装rpmbuild
- 2.rpm包制作
- 打包rpm包
- 3.rpm包安装
- 4.rpm包卸载
1.安装rpmbuild
yum install rpmbuild
yum install rpmdevtools
创建rpm包管理路径,生成rpm相关目录
RPM打包的时候需要编译源码,还需要把编译好的配置文件,二进制命令文件之类的东西按照安装好的样子放到合适的位置,还要根据需要对RPM的包进行测试,这些都需要先有一个“工作空间”。rpmbuild命令使用一套标准化的“工作空间”:
[root@ ~]# rpmdev-setuptree
[root@ ~]# ls
rpmbuild
[root@iZbp1gjp1hwnsngz9ayrlnZ ~]# cd rpmbuild/
[root@iZbp1gjp1hwnsngz9ayrlnZ rpmbuild]# ls
BUILD RPMS SOURCES SPECS SRPMS
rpmdev-setuptree这个命令就是安装rpmdevtools带来的。
手动创建
如果没有安装rpmdevtools的话,其实用mkdir命令创建这些文件夹也是可以的。
#使用下面的目录手动目录
mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
2.rpm包制作
下载源码
这里直接下载官方例子的源码,是个压缩包
wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
mv hello-2.10.tar.gz /root/rpmbuild/SOURCES/
编辑SPEC文件
vim soft.spec
模板如下
Name: hello
Version: 2.1
Release: 1%{?dist}
Summary: The "Hello World" program from GNU
Summary(zh_CN): GNU "Hello World" 程序
License: GPLv3+
URL: http://ftp.gnu.org/gnu/hello
Source0: http://ftp.gnu.org/gnu/hello/%{name}-%{version}.tar.gz
%description
The "Hello World" program, done with all bells and whistles of a proper FOSS
project, including configuration, build, internationalization, help files, etc.
%description -l zh_CN
"Hello World" 程序, 包含 FOSS 项目所需的所有部分, 包括配置, 构建, 国际化, 帮助文件等.
%prep
%setup -q
%build
%configure
make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot}
%files
%doc
%changelog
* Sun Dec 4 2016 Your Name <youremail@xxx.xxx> - 2.10-1
- Update to 2.10
* Sat Dec 3 2016 Your Name <youremail@xxx.xxx> - 2.9-1
- Update to 2.9
本示例最终的完整SPEC
Name: hello
Version: 2.10
Release: 1%{?dist}
Summary: The "Hello World" program from GNU
Summary(zh_CN): GNU "Hello World" 程序
License: GPLv3+
URL: http://ftp.gnu.org/gnu/hello
Source0: http://ftp.gnu.org/gnu/hello/%{name}-%{version}.tar.gz
BuildRequires: gettext
Requires(post): info
Requires(preun): info
%description
The "Hello World" program, done with all bells and whistles of a proper FOSS
project, including configuration, build, internationalization, help files, etc.
%description -l zh_CN
"Hello World" 程序, 包含 FOSS 项目所需的所有部分, 包括配置, 构建, 国际化, 帮助文件等.
%prep
%setup -q
%build
%configure
make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot}
%find_lang %{name}
rm -f %{buildroot}/%{_infodir}/dir
%post
/sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || :
%preun
if [ $1 = 0 ] ; then
/sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || :
fi
%files -f %{name}.lang
%doc AUTHORS ChangeLog NEWS README THANKS TODO
%license COPYING
%{_mandir}/man1/hello.1.*
%{_infodir}/hello.info.*
%{_bindir}/hello
%changelog
* Sun Dec 4 2016 Your Name <youremail@xxx.xxx> - 2.10-1
- Update to 2.10
* Sat Dec 3 2016 Your Name <youremail@xxx.xxx> - 2.9-1
- Update to 2.9
打包rpm包
rpmbuild -ba soft.spec
看一下打包好的rpm包
tree /root/rpmbuild/*RPMS
/root/rpmbuild/RPMS
└── x86_64
├── hello-2.10-1.el7.x86_64.rpm
└── hello-debuginfo-2.10-1.el7.x86_64.rpm
/root/rpmbuild/SRPMS
└── hello-2.10-1.el7.src.rpm
3.rpm包安装
rpm -ivh xxx.rpm --nodeps --force
– nodeps 👉 有些时候我们的包会有别的依赖如果依赖没有安装就会导致我们这个包安装失败。所以可以使用这个参数
– force 👉有的时候我们的操作系统已经安装了这个软件并且版本高于我们要安装的,使用这个参数可以强行安装我们指定的这个
加上后面两句,可以覆盖当前版本,老换新也可以。
rpm -ivh /root/rpmbuild/RPMS/x86_64/hello-2.10-1.el7.x86_64.rpm
运行
[root@iZbp1gjp1hwnsngz9ayrlnZ rpmbuild]# rpm -ivh /root/rpmbuild/RPMS/x86_64/hello-2.10-1.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:hello-2.10-1.el7 ################################# [100%]
[root@iZbp1gjp1hwnsngz9ayrlnZ rpmbuild]# hello
Hello, world!
4.rpm包卸载
查看程序对应的rpm包名
rpm -q 'xxx'
rpm -qf 'xxx/bin/xxxx.xx'
rpm -qf mediaHttpServer
卸载rpm包安装的程序
rpm -e 'xxxxxx'
rpm -e nvr-2.0-8913_zfs.el7.aarch64
注: 也可使用--erase代替-e,效果相同
删除的不是rpm包,是卸载rpm包安装的程序,包名不带.rpm后缀
参考:https://blog.csdn.net/YangzaiLeHeHe/article/details/109188096
https://blog.csdn.net/arv002/article/details/123546081?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-9-123546081-blog-109188096.pc_relevant_3mothn_strategy_recovery&spm=1001.2101.3001.4242.6&utm_relevant_index=12