如何对程序进行rpm打包发布

来源:互联网 发布:jackson json 编辑:程序博客网 时间:2024/05/20 12:48

正如之前提到的,一般项目(程序)的目录包含pkg文件夹这个中应该编写与打包对应的例程,


例如我目录下结构为

[clouduser@blog /home/clouduser/ZK_Serviced]$ ls 

AUTHORS  bin  data  include  libs  logs  Makefile  pkg  README  scripts  src

pkg目录下包含两个文件:

ls pkg/
Makefile  ZK_Serviced.spec

这个Makefile其实就是遍历目录然后分别执行Makefile

cat Makefile
SUBDIRS := src

all:
    @for d in $(SUBDIRS); do \
                $(MAKE) -C $$d all; \
                done

clean:
    @for d in $(SUBDIRS); do \
                $(MAKE) -C $$d clean; \
                done


编写rpm打包程序关键在于写*.spec文件(如ZK_Serviced.spec),这个结构其实比较固定,例如我自己使用的结构内容如下示:

红色为描述性说明

绿色为生成目录与文件拷贝(打的包包含的内容)

蓝色为安装前,卸载前需要执行的脚本

cat ZK_Serviced.spec
%define debug_package %{nil}
%define __os_install_post %{nil}
%define _prefix /home/package/rpm/ZK_Serviced
%define srcname ZK_Serviced

summary: ZK_Serviced-daemon
name: ZK_Serviced
version: 1.0.0.1
release: 1%{?dist}
url: hao.360.cn
license: GPL
vendor: CloudUser<http://clouduser.cn>
group: Application/Internet
source: %{srcname}.tar.gz
#provides:
#requires:
#buildrequires:
buildroot: %{_tmppath}/%{name}-%{version}-%{release}-%(%{__id_u} -n)

%description
ZK_Serviced aim at supply a service which update sysinfo into zookeeper
if any question contact at clouduser@163.com

%prep
%setup -q -n %{srcname}

%build
# your package build steps
make

%install
rm -rf %{buildroot}
# your package install steps
# the compiled files dir: %{_builddir}/<package_source_dir> or $RPM_BUILD_DIR/<package_source_dir>
# the dest root dir: %{buildroot} or $RPM_BUILD_ROOT
mkdir -p %{buildroot}/%{_prefix}/
mkdir -p %{buildroot}/%{_prefix}/bin/
mkdir -p %{buildroot}/%{_prefix}/libs/
mkdir -p %{buildroot}/%{_prefix}/logs/
mkdir -p %{buildroot}/%{_sysconfdir}/
mkdir -p %{buildroot}/%{_sysconfdir}/cron.d/

pushd %{_builddir}/%{srcname}/
cp -rf bin %{buildroot}/%{_prefix}/
cp -rf libs %{buildroot}/%{_prefix}/
cp -rf scripts/ZK_Serviced_clean_crontab %{buildroot}/%{_sysconfdir}/cron.d/
popd

%files
#%defattr(-,search,search)
%defattr(-,root,root)
# list your package files here
# the list of the macros:
#   _prefix           /usr
#   _exec_prefix      %{_prefix}
#   _bindir           %{_exec_prefix}/bin
#   _libdir           %{_exec_prefix}/%{_lib}
#   _libexecdir       %{_exec_prefix}/libexec
#   _sbindir          %{_exec_prefix}/sbin
#   _includedir       %{_prefix}/include
#   _datadir          %{_prefix}/share
#   _sharedstatedir   %{_prefix}/com
#   _sysconfdir       /etc
#   _initrddir        %{_sysconfdir}/rc.d/init.d
#   _var              /var
%{_prefix}/bin
%{_prefix}/libs
%{_prefix}/logs

%defattr(-,root,root)
%{_sysconfdir}/cron.d/ZK_Serviced_clean_crontab

%pre
# pre-install scripts

%post
# post-install scripts

%preun
# pre-uninstall scripts
%{_prefix}/bin/stop.sh ZK_Serviced

%postun
# post-uninstall scripts


%clean
rm -rf %{buildroot}
# your package build clean up steps here

%changelog
# list your change log here


下面为百度百科对其的简单介绍,想具体了解学习的可以上网查一下各个字段是什么含义,如果只是使用的话,上面粘出来的这段完全够你小的应该测试使用


RPM
编辑

RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用,可以算是公认的行业标准了。

目录

1管理器

简介
一些相关操作应用命令
RPM主要功能(linux操作系统)
硬件描述

1管理器

RPM软件包管理器
英文原义:Redhat Package Manager
中文释义:RPM软件包管理器
注解:一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。与Dpkg类似。

简介

RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用,可以算是公认的行业标准了。
RPM文件在Linux系统中的安装最为简便。以著名的图像处理软件XV为例,其RPM包xv-3.10a-13.i386.rpm可以在该程序的主页中下载取得。

一些相关操作应用命令

在Terminal中,基本的安装指令如下:
rpm -i xv-3.10a-13.i386.rpm
如果你的连网速度足够快,也可以直接从网络上安装应用软件,只需要在软件的文件名前加上适当的URL路径。
作为一个软件包管理工具,RPM管理着系统已安装的所有RPM程序组件的资料。我们也可以使用RPM来卸载相关的应用程序。
rpm -e xv
RPM的常用参数还包括:
-vh:显示安装进度;
-U:升级软件包;
-qpl:列出RPM软件包内的文件信息;
-qpi:列出RPM软件包的描述信息;
-qf:查找指定文件属于哪个RPM软件包;
-Va:校验所有的RPM软件包,查找丢失的文件;
-qa: 查找相应文件,如 rpm -qa mysql

RPM主要功能(linux操作系统)

安装、卸载、升级和管理软件
组件查询功能
验证功能
软件包GPG和MD5数字签名的导入、验证和发布
软件包依赖处理
选择安装
网络远程安装功能
资源电源管理(Resource Power Manager)
RPM是高通专用的硬件引擎,用于管理共享的SoC(系统级芯片)相关资源,其中包括总线,时钟,电源轨等。RPM的目标是满足SoC的操作和性能要求的同时实现最大的功率节省。RPM接受多个RPM主控的资源请求。仲裁和聚合请求,并配置共享资源。RPM的主控方有应用处理器,调制解调处理器,以及一些硬件加速器。
RPM驱动提供了一个同RPM交互的API。内核代码调用RPM驱动来请求RPM管理和共享资源。内核代码也可以为RPM通知注册驱动,RPM通知在共享资源状态发生变化时发送。

硬件描述

RPM给每个RPM的主控方提供了一个单独的寄存器区域。一般情况下,每个寄存器代表了一些共享资源。通常情况下,主控方通过写寄存器来请求资源,然后产生一个中断给RPM。RPM处理请求,向寄存器中写确认信息,然后产生中断给主控方。
除了主控方特定区域,RPM也提供了一个共享区域,其中包含了共享资源的状态。只有RPM可以写状态区域,主控方只能够读取状态。
RPM包含内部逻辑,用来聚合和仲裁不同RPM主控方的请求。它同PMIC,总线仲裁模块,以及始终控制模块都有接口,以便配置共享资源。

软件描述

RPM驱动封装了低级RPM交互,就是依赖于读/写寄存器和产生/处理中断的交互;同时也提供了高级同步的set/clear/get接口。
大部分功能使用一个“ID值匹配队列”,ID表明了对应于某些RPM资源的RPM寄存器,这些值表明了新的资源值。
RPM驱动同步访问RPM,主要是为了保护多个任务,SMP内核,任务上下文和原子上下文同时访问。

原创粉丝点击