RPM打包教程

一、rpm是什么
  rpm是一种安装包的格式。就像在Windows系统上我们常见的安装包格式是exe和msi一样,在linux上常见的安装包格式是deb和rpm。一般在红帽系列的系统上,不支持deb,所以我们需要将程序打包成rpm安装。
 
二、rpm的打包工具
  rpm的打包,我们需要用到:rpmbuild 和 rpmdevtools
  有的系统预装的 rpmbuild,这样我们就不需要安装这个了,可以用使用命令检查系统是否有安装 rpmbuild
# 检查是否有 rpmbuild
rpmbuild --version

# 安装 rpmbuild
yum install rpm-build
 
# 安装 rpmdevtools
yum install rpmdevtools

 

三、创建打包文件夹
  创建打包文件夹有两种方法:
    方法一:使用命令 rpmdev-setuptree 来创建,但是创建的文件夹是在用户主目录(home),我们可以将rpmbuild整个文件夹拷贝到项目文件夹,这样可以方便我们项目管理。
    方法二:手动的去创建文件夹,具体文件夹结构可以参考下面的目录树
# 方法一:使用命令创建
rpmdev-setuptree

# 目录树
rpmbuild
    - BUILD           // 编译时用到的暂存目录
    - RPMS            // 打包后生成的 rpm 包会放在这里
    - SOURCES         // 源码压缩包
    - SPECS           // 放 xx.spec 文件
    - SRPMS           // 打包后生成的 srpm 包会放在这里

 

四、创建 spec 文件
*:spec文件这个文件非常重要,控制整个rpm包安装卸载等全部过程
# 使用命令可以创建中 x.spec 文件模板
rpmdev-newspec eloam.spec

 

五、spec 文件详解
Name:           名称
Version:        版本号
Release:        release版本
Summary:        对包的描述

License:        开源协议
URL:            项目主页
Source0:        源码包

# 没有用到,所以注释掉了
#BuildRequires:  
#Requires:       

%description
# 详细描述,多行,每行小于等于80个字符,否则算新的一段

%prep
# 静默模式解压,并进入解压后的目录,常用:%setup -q

%build
# 编译过程

%install
# 安装过程

%files
# 要打包的文件

 

六、打包

rpmbuild -bb  SPECS/elaom.spec --define="_topdir `pwd`"

 

七、RPM 的安装 & 卸载

# rpm 安装     sudo rpm -ivh 包名 --nodeps
# rpm 卸载     sudo rpm -e --nodeps 包名
# rpm 生成 rpmbuild -bb SPECS/elaom.spec --define="_topdir `pwd`"

 

 

八、 ** 特别重要 ·  核心 **

2. 所有文件尽量不要使用记事本打开,可以使用 vi 来操作
3.我们的打包方法是将需要打包的文件,先打包成 tar.gz ,然后在使用 rpm 的打包工具对压缩包解压,解压后再次打成 rpm 包
4.压缩包的名称一定要和 spec 文件中名称(Source0)一致
5.rpm的打包过程中会遇到各种各样的问题,要看报错,慢慢分析,一步一个坑,习惯了就好,可以有效抑制头发生长
 
打压缩包 & 压缩包结构
# 打压缩包命令
tar -czvf eloamwss-1.0.tar.gz   eloamwss-1.0

# 压缩包结构
eloamwss-1.0.tar.gz
    - eloamwss-1.0
        - eloamwss.conf
        - eloamwss
            - doc
            - lib
            - eloamwss

 

eloam.spec 模板示例
Name:           eloamwss
Version:        1.0
Release:        1
Summary:        web rpm package

License:        GPL
URL:            http://sdk.eloam.net
Source0:        %{name}-%{version}.tar.gz
BuildRoot:      %{mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXX}

%description
THIS IS A WEB ELOAM PACKAGE

%prep
#%setup -n %{name}
%setup -q

%build

%install
mkdir -p %{buildroot}/usr/local/lib
mkdir -p %{buildroot}/etc/ld.so.conf.d/
mkdir -p %{buildroot}/etc/udev
mkdir -p %{buildroot}/opt/eloamwss
mkdir -p %{buildroot}/opt/eloamwss/lib
mkdir -p %{buildroot}/opt/eloamwss/doc
mkdir -p %{buildroot}/opt/eloamwss/Image
mkdir -p %{buildroot}/opt/eloamwss/icon

install eloamwss.conf %{buildroot}/etc/ld.so.conf.d/
install eloamwss/eloam.rules %{buildroot}/etc/udev
install -m 0755 eloamwss/*.sh %{buildroot}/opt/eloamwss
install -m 0755 eloamwss/eloamwss %{buildroot}/opt/eloamwss
install eloamwss/lib/* %{buildroot}/opt/eloamwss/lib
install eloamwss/doc/* %{buildroot}/opt/eloamwss/doc
install eloamwss/icon/* %{buildroot}/opt/eloamwss/icon



%define _unpackaged_files_terminate_build 0

%clean
rm -rf $RPM_BUILD_ROOT


%files
%defattr(-,root,root,-)
/opt/eloamwss/*
/etc/ld.so.conf.d/eloamwss.conf
/etc/udev/eloam.rules


%post
chmod 755 /opt/eloamwss/*.sh
chmod 755 /opt/eloamwss/eloamwss
ldconfig

%preun
/opt/eloamwss/shutdown.sh

%define __debug_install_post \
%{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\
%{nil}

 

 

 

 

 

posted @ 2022-11-22 17:07  十一的杂文录  阅读(4164)  评论(0编辑  收藏  举报