金沙澳门官网7817网址RPM包rpmbuild SPEC文件深度表达

spec脚本包括很多关键字,以及安装、卸载前后执行的脚本,spec脚本包括很多关键字,一、编写spec脚本 ,也可以通过rpmbuild命令创建,软件包的内容概要

引用%files
%defattr(-,root,root)
%{_bindir}
%{_libdir}
%{_datadir}
%exclude %{_libdir}/debug
如果把

Vendor: 发行商或卷入协会的新闻,比如RedFlag Co,Ltd

以下为完整的SPEC文件:

%description
Just a test rpm suite.

引用%files 
%defattr(-,root,root) 
%{_bindir} 
写成

  • yum -y install rpm-build

%setup -n %{name}-%{version} 把源码包解压并放好
平日是从/usr/src/asianux/SOURCES里的包解压到/usr/src/asianux/BUILD/%{name}-%{version}中。
一般用%setup
-c就足以了,但有二种情景:一正是同期编写翻译四个源码包,二正是源码的tar包的称谓与解压出来的目录不雷同,此时,就需求使用-n参数钦命一下了。

%post rpm安装后实行的脚本

Requires:
该rpm包所信赖的软件包名称,能够用>=或<=表示大于或小于某一一定版本,举例:libpng-devel
>= 1.0.20 zlib
※“>=”号两边需用空格隔断,而各异软件名称也用空格分开,还恐怕有诸如PreReq、Requires(pre)、Requires(post)、Requires(preun)、Requires(postun)、BuildRequires等都是本着分裂等第的借助钦命

echo ‘%debug_package %{nil}’ >> ~/.rpmmacros
假如rpm包已经办好,但在设置的时候想修改暗中认可路线,则足以:

Requires:
该rpm包所正视的软件包名称,能够用>=或<=表示大于或低于某一特定版本,举个例子:
libpng-devel >= 1.0.20 zlib 
※“>=”号两边需用空格隔开分离,而各异软件名称也用空格分开
还只怕有诸如PreReq、Requires(pre)、Requires(post)、Requires(preun)、Requires(postun)、BuildRequires等都以针对性区别品级的借助内定

要生成rpm相关目录,能够手动创立,也得以透过rpmbuild命令创立。如:

援用0代表卸载、1意味安装、2表示进级
可这么使用:

引用%files 
%defattr(-,root,root) 
/usr/bin 
则打包的会是根目录下的/usr/bin中持有的公文。
2、一些rpm相关消息 
rpm软件包系统的正经分组:/usr/share/doc/rpm-4.3.3/GROUPS
各样宏定义: /usr/lib/rpm/macros
业已安装的rpm包数据库: /var/lib/rpm
假如要幸免生成debuginfo包:这些是暗中认可会生成的rpm包。则能够使用上面包车型地铁一声令下:

  • %setup 不加任何取舍,仅将软件包展开。 
  • %setup -n newdir 将软件包解压在newdir目录。 
  • %setup -c 解压缩在此以前先爆发目录。 
  • %setup -b num 将第num个source文件解压缩。 
  • %setup -T 不利用default的解压缩操作。 
  • %setup -T -b 0 将第0个源代码文件解压缩。 
  • %setup -c -n newdir 钦定目录名称newdir,并在此目录爆发rpm套件。 
  • %patch 最简便的补丁格局,自动钦命patch level。 
  • %patch 0 使用第0个补丁文件,也正是%patch ?p 0。 
  • %patch -s 不出示打补丁时的新闻。 
  • %patch -T 将持有打补丁时发出的输出文件删除。

%files 定义那个文件或目录会放入rpm中
这里会在编造根目录下举办,千万不要写相对路线,而应用宏或变量表示相对路线。
假如描述为目录,表示目录中除%exclude外的兼具文件。
%defattr (-,root,root)
钦定包装文件的性格,分别是(mode,owner,group),-表示暗中同意值,对文本文件是0644,可施行文件是0755

%files 定义那多少个文件或目录会放入rpm中
这里会在虚构根目录下实行,千万不要写相对路线,而应用宏或变量表示相对路线。
借使描述为目录,表示目录中除%exclude外的全体文件。
%defattr (-,root,root)
内定包装文件的属性,分别是(mode,owner,group),-表示暗中同意值,对文件文件是0644,可施行文件是0755

Prefix: %{_prefix}
这些重中之重是为了解决今后安装rpm包时,并不一定把软件安装到rpm中封装的目录的情事。那样,必须在此地定义该标识,并在编写%install脚本的时候引用,工夫兑现rpm安装时再也钦赐地方的功能

%files
%defattr(-,root,root)
%{userpath}
下载: 下载文件点击这里下载文件
※特别要求留神的是:%install部分应用的是相对路线,而%file部分选择则是相对路径,即使其陈述的是同二个地方。千万不要写错。
五、其余
1、扩展
固然如此上面的楷模很简陋,而且缺少%build部分,但实际上如若记住两点:
a)就是%build和%install的经过中,都必须把编译和装置的文书定义到“虚构根目录”
中。
引用%build
make -f admin/Makefile.common cvs
./configure –prefix=%{_prefix} –enable-final –disable-debug \
–with-extra-includes=%{_includedir}/freetype2
–includedir=%{_includedir}
make
%install
rm -fr $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install
cp -r $RPM_BUILD_ROOT%{_datadir}/apps/kolourpaint/icons/hicolor/*
$RPM_BUILD_ROOT%{_datadir}/icons/crystalsvg/
b)正是%file中必须通晓,用的是相持目录

Version: 软件的实际版本号,比方:1.0.1等,前面可使用%{version}援用

[root@yang data]# rpmbuild zabbix_agentd_ops.spec 
error: File /root/rpmbuild/SOURCES/zabbix-3.0.3.tar.gz: No such file or directory

有报错,无需理会,可以看到rpmbuild目录已经创建完成

[root@yang ~]# tree rpmbuild/
rpmbuild/
├── BUILD
├── BUILDROOT
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS

Summary: 软件包的原委大约

Build Arch:
指编写翻译的靶子计算机架构,noarch标记不钦点,但通常都以以/usr/lib/rpm/marcros中的内容为暗许值

Vendor: 发行商或包装组织的音信,举例RedFlag Co,Ltd

Prefix: %{_sysconfdir}
那个缘故和下边包车型地铁大同小异,但由于%{_prefix}指/usr,而对此别的的文书,举例/etc下的布署文件,则要求用%{_sysconfdir}标识

Group: 软件分组,提议利用正式分组

%install 起初把软件设置到虚构的根目录中.在/usr/src/asianux/BUILD/%{name}-%{version}目录中开始展览make
install的操作。这么些十分重大,因为只要这里的门道不对的话,则上面%file中找找文件的时候就能够倒闭。 常见内容有:

License: 软件授权方式,平时正是GPL

Summary: 软件包的剧情大致

变迁相关目录

Requires:
该rpm包所依赖的软件包名称,能够用>=或<=表示大于或低于某一特定版本,比方:
libpng-devel >= 1.0.20 zlib
※“>=”号两边需用空格隔开分离,而差别软件名称也用空格分开
再有诸如PreReq、Requires(pre)、Requires(post)、Requires(preun)、Requires(postun)、BuildRequires等都以对准分化阶段的重视钦点

%preun rpm卸载前执行的脚本

Name: 软件包的称谓,前边可使用%{name}的不二等秘书技援引

%postun rpm卸载后奉行的剧本

%prep
%setup -c
%install
install -d $RPM_BUILD_ROOT%{userpath}
cp -a %{name}* $RPM_BUILD_ROOT%{userpath}

若果想为zabbix扩展运行调控脚本或一些任何的安插文件,能够将其位于SOURCE下,然后复制过去

%clean
rm -rf $RPM_BUILD_ROOT
rm -rf $RPM_BUILD_DIR/%{name}-%{version}

%install 初步把软件设置到设想的根目录中
在/home/litao/rpmbuild/build/%{name}-%{version}目录中张开make
install的操作。这一个很入眼,因为就算这里的路线不对的话,则上边%file中搜索文件的时候就能停业。
常见内容有:
%makeinstall 那不是重中之重字,而是rpm定义的正规化宏命令。也可以使用非标准写法:
引用make DESTDIR=$RPM_BUILD_ROOT install

引用make prefix=$RPM_BUILD_ROOT install
亟待表达的是,这里的%install首要正是为着前边的%file服务的。所以,还足以行使正规的系统命令:
引用install -d $RPM_BUILD_ROOT/
cp -a * $RPM_BUILD_ROOT/
%clean 清理有时文件
经常内容为:
引用[ “$RPM_BUILD_ROOT” != “/” ] && rm -rf “$RPM_BUILD_ROOT”
rm -rf $RPM_BUILD_DIR/%{name}-%{version}
※注意区分$RPM_BUILD_ROOT和$RPM_BUILD_DIR:
$RPM_BUILD_ROOT是指起初定义的BuildRoot,而$RPM_BUILD_DILAND经常便是指/home/litao/rpmbuild/build,个中,前边的才是%file须求的。

%post rpm安装后施行的本子

./configrue –prefix=/usr/local/xxx
make
make DESTDIR=/usr/local/xxx install

make prefix=/usr/local/xxx install
这么,整个套件的开始和结果就能被放置/usr/local/xxx中,可依据气象编写%file和%exclude段。
※当然,那几个只可以对源码按GNU方式编写,并接纳GNU
autotool成立的包有效,若自定义Makefile则不能够并重。
5、关于rpm中的试行脚本
倘诺正在制作的rpm包是希图作为放到系统设置光盘中的话,则供给思量rpm中定义的脚本是还是不是有标题。由于系统在装置的时候只是借助于二个小境遇进行,而该景况与实际安装完的境况有十分大的分裂,所以,大多数的台本在该装置意况中都以力所不比生效,以至会带来麻烦的。
由此,对于那样的,供给安放安装光盘中的套件,不参与实行脚本是较佳的主意。
除此以外,为提供操作中可参看的新闻,rpm还提供了一种实信号机制:分歧的操作会重返差别的新闻,并内置暗许变量$第11中学。

Provides: 指明本软件部分特定的效应,以便其余rpm识别

BuildRoot:
那一个是设置或编译时采纳的“设想目录”,思量到多用户的处境,一般定义为:%{tmppath}/{name}-%{version}-%{release}-root或%{tmppath}/%{name}-%{version}-%{release}-buildroot-%%__id_u}
-n}.该参数特别关键,因为在生成rpm的经过中,实践make
install时就能把软件设置到上述的路线中,在包装的时候,一样依据“设想目录”为“根目录”进行操作。前边可使用$RPM_BUILD_ROOT
形式援引。

ULANDL: 软件的主页

Prefix: %{_prefix} 那一个重大是为着消除将来安装rpm包时,并不一定把软件设置到rpm中封装的目录的景况。那样,必须在这边定义该标识,并在编写%install脚本的时候援引,手艺促成rpm安装时再也钦赐地点的效劳

%files 定义那几个文件或目录会放入rpm中

rpm xxx.rpm –relocate=/usr=/opt/usr –relocate=/etc=/usr/etc
3、制作补丁
详细看仿照效法: [原]使用diff同patch工具 
http://www.linuxidc.com/Linux/2014-02/96812.htm

三、spec脚本核心 
spec脚本的主脑中也囊括了累累第一字和描述,下边会相继列举。小编会把一部分特意供给专注的地方标记出来。
%prep 预管理脚本

%prep 预管理脚本

引用%postun
if [ “$1” = “0” ]; then
/sbin/ldconfig
fi

%files
%defattr(-,root,root)
%{userpath}
下载: 下载文件点击这里下载文件 
※非常供给注意的是:%install部分使用的是相对路线,而%file部分应用则是相对路线,即使其描述的是同三个地点。千万不要写错。

Source:
源代码包,能够带八个用Source1、Source2等源,前边也得以用%{source1}、%{source2}援用

◎补充一下
援引%setup 不加任何选用,仅将软件包展开。
%setup -n newdir 将软件包解压在newdir目录。
%setup -c 解压缩在此之前头阵生目录。
%setup -b num 将第num个source文件解压缩。
金沙澳门官网7817网址,%setup -T 不选取default的解压缩操作。
%setup -T -b 0 将第0个源代码文件解压缩。
%setup -c -n newdir 钦命目录名称newdir,并在此目录产生rpm套件。
%patch 最简便的补丁方式,自动钦命patch level。
%patch 0 使用第0个补丁文件,相当于%patch ?p 0。
%patch -s 不出示打补丁时的音信。
%patch -T 将装有打补丁时发出的输出文件删除。

UWranglerL: 软件的主页

%configure 这些不是首要字,而是rpm定义的专门的学问宏命令。意思是施行源代码的configure配置,在/usr/src/asianux/BUILD/%{name}-%{version}目录中张开 ,使用标准写法,会引用/usr/lib/rpm/marcros中定义的参数。另一种不正规的写法是,可参照源码中的参数自定义,比方:

%install 初叶把软件设置到设想的根目录中
在/usr/src/asianux/BUILD/%{name}-%{version}目录中开始展览make
install的操作。那个很首要,因为只要这里的不二秘诀不对的话,则上面%file中追寻文件的时候就能够停业。
常见内容有:
%makeinstall
那不是入眼字,而是rpm定义的标准宏命令。也足以动用非规范写法:
引用make DESTDIR=$RPM_BUILD_ROOT install

引用make prefix=$RPM_BUILD_ROOT install
须求证实的是,这里的%install主要就是为着后边的%file服务的。所以,还足以采纳正规的系统命令:
引用install -d $RPM_BUILD_ROOT/
cp -a * $RPM_BUILD_ROOT/
%clean 清理有的时候文件
常备内容为:
引用[ “$RPM_BUILD_ROOT” != “/” ] && rm -rf “$RPM_BUILD_ROOT”
rm -rf $RPM_BUILD_DIR/%{name}-%{version}
※注意区分$RPM_BUILD_ROOT和$RPM_BUILD_DIR:
$RPM_BUILD_ROOT是指发轫定义的BuildRoot,而$RPM_BUILD_DI昂科雷经常就是指/usr/src/asianux/BUILD,其中,后边的才是%file必要的。

引用%files 
%defattr(-,root,root) 
%{_bindir} 
%{_libdir} 
%{_datadir} 
%exclude %{_libdir}/debug
如果把

Summary: 软件包的剧情大概