Linux【8】-软件管理-2-SRPM的使用(rpmbuild)

SRPM 为Source RPM

谈完了RPM类型的软体之后,再来我们谈一谈包含了Source code的SRPM该如何使用呢?假如今天我们由网路上面下载了一个SRPM的档案,该如何安装他?又,如果我想要修改这个SRPM里面原始码的相关设定值,又该如何订正与重新编译呢?此外,最需要注意的是,新版的rpm已经将RPM与SRPM的指令分开了,SRPM使用的是rpmbuild这个指令,而不是rpm喔!

一、利用预设值安装SRPM 档案(–rebuid/–recompile)

假设我下载了一个SRPM 的档案,又不想要修订这个档案内的原始码与相关的设定值, 那么我可以直接编译并安装吗?当然可以!利用rpmbuild 配合选项即可。选项主要有底下两个:

$ --rebuild $ 这个选项会将后面的SRPM进行『编译』与『打包』的动作,最后会产生RPM的档案,但是产生的RPM档案并没有安装到系统上。当你使用–rebuild的时候,最后通常会发现一行字体:Wrote: /root/rpmbuild/RPMS/x86_64/pkgname.x86_64.rpm这个就是编译完成的RPM档案啰!这个档案就可以用来安装啦!安装的时候请加绝对路径来安装即可!
$ --recompile $ 这个动作会直接的『编译』『打包』并且『安装』啰!请注意, rebuild 仅『编译并打包』而已,而recompile 不但进行编译跟打包,还同时进行『安装』了!

不过,要注意的是,这两个选项都没有修改过SRPM 内的设定值,仅是透过再次编译来产生RPM 可安装软体档案而已。一般来说,如果编译的动作顺利的话,那么编译过程所产生的中间暂存档都会被自动删除,如果发生任何错误, 则该中间档案会被保留在系统上,等待使用者的除错动作!

问: 请由http://vault.centos.org/下载正确的CentOS版本中,在updates软体库当中的ntp软体SRPM,请下载最新的那个版本即可,然后进行编译的行为。

答:

目前(2015/09) 最新的版本为:ntp-4.2.6p5-19.el7.centos.1.src.rpm 这一个,所以我是这样作的:

  1. 先下载软体:wget http://vault.centos.org/7.1.1503/updates/Source/SPackages/ntp-4.2.6p5-19.el7.centos.1.src.rpm
  2. 再尝试直接编译看看: rpmbuild –rebuild ntp-4.2.6p5-19.el7.centos.1.src.rpm
  3. 上面的动作会告诉我还有一堆相依软体没有安装~所以我得要安装起来才行: yum install libcap-devel openssl-devel libedit-devel pps-tools-devel autogen autogen-libopts-devel
  4. 再次尝试编译的行为: rpmbuild –rebuild ntp-4.2.6p5-19.el7.centos.1.src.rpm
  5. 最终的软体就会被放置到:/root/rpmbuild/RPMS/x86_64/ntp-4.2.6p5-19.el7.centos.1.x86_64.rpm

上面的测试案例是将一个SRPM 档案抓下来之后,依据你的系统重新进行编译。一般来说,因为该编译可能会依据你的系统硬体而最佳化, 所以可能效能会好一些些,但是…人类根本感受不到那种效能优化的效果~所以并不建议你这么作。此外, 这种情况也很能发生在你从不同的Linux distribution 所下载的SRPM 拿来想要安装在你的系统上,这样作才算是有点意义。

一般来说,如果你有需要用到SRPM 的档案,大部分的原因就是…你需要重新修改里面的某些设定,让软体加入某些特殊功能等等的。所以啰,此时就得要将SRPM 拆开,编辑一下编译设定档,然后再予以重新编译啦!下个小节我们来玩玩修改设定的方式!

二、SRPM 使用的路径与需要的软体

SRPM 既然含有source code ,那么其中必定有设定档啰,所以首先我们必需要知道,这个 SRPM 在进行编译的时候会使用到哪些目录呢?这样一来才能够来修改嘛!不过从CentOS 6.x 开始(当然包含我们的CentOS 7.x 啰),因为每个用户应该都有能力自己安装自己的软体,因此SRPM 安装、设定、编译、最终结果所使用的目录都与操作者的家目录有关~鸟哥假设你用root 的身份来进行SRPM 的操作, 那么你应该就会使用到下列的目录喔:

/root/rpmbuild/SPECS 这个目录当中放置的是该软体的设定档,例如这个软体的资讯参数、设定项目等等都放置在这里;
/root/rpmbuild/SOURCES 这个目录当中放置的是该软体的原始档(*.tar.gz 的档案) 以及config 这个设定档;
/root/rpmbuild/BUILD 在编译的过程中,有些暂存的资料都会放置在这个目录当中;
/root/rpmbuild/RPMS 经过编译之后,并且顺利的编译成功之后,将打包完成的档案放置在这个目录当中。里头有包含了 x86_64, noarch…. 等等的次目录。
/root/rpmbuild/SRPMS 与RPMS 内相似的,这里放置的就是SRPM 封装的档案啰!有时候你想要将你的软体用SRPM 的方式释出时, 你的SRPM 档案就会放置在这个目录中了。

早期要使用SRPM 时,必须是root 的身份才能够使用编译行为,同时原始码都会被放置到/usr/src/redhat/ 目录内喔!跟目前放置到/~username/rpmbuild/ 的情况不太一样!

此外,在编译的过程当中,可能会发生不明的错误,或者是设定的错误,这个时候就会在 /tmp 底下产生一个相对应的错误档,你可以根据该错误档进行除错的工作呢!等到所有的问题都解决之后,也编译成功了,那么刚刚解压缩之后的档案,就是在/root/rpmbild/{SPECS, SOURCES, BUILD} 等等的档案都会被杀掉,而只剩下放置在/root/rpmbuild/RPMS 底下的档案了!

由于SRPM需要重新编译,而编译的过程当中,我们至少需要有make与其相关的程式,及gcc, c, c++等其他的编译用的程式语言来进行编译,更多说明请参考第二十一章原始码所需基础软体吧。所以,如果你在安装的过程当中没有选取软体开发工具之类的软体,这时就得要使用上一小节介绍的yum来安装就是了!当然,那个"Development Tools"的软体群组请不要忘记安装了!

问:

尝试将上个练习下载的ntp 的SRPM 软体直接安装到系统中(不要编译),然后查阅一下所有用到的目录为何?

答:

# 1.鸟哥这里假设你用root的身份来进行安装的行为喔!
[root@study ~]# rpm -ivh ntp-4.2.6p5-19.el7.centos.1.src.rpm
Updating / installing...
   1:ntp-4.2.6p5-19.el7.centos.1 ################################# [100 %]
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
# 会有一堆warning 的问题,那个不要理它!可以忽略没问题的!

# 2.查阅一下/root/rpmbuild目录的内容!
[root@study ~]# ll -l /root/rpmbuild
drwxr-xr-x. 3 root root 39 Sep 8 16:16 BUILD
drwxr-xr-x. 2 root root 6 Sep 8 16:16 BUILDROOT
drwxr-xr-x. 4 root root 32 Sep 8 16:16 RPMS
drwxr-xr-x. 2 root root 4096 Sep 9 09:43 SOURCES
drwxr-xr-x. 2 root root 39 Sep 9 09:43 SPECS      #这个家伙最重要!
drwxr-xr-x. 2 root root 6 Sep 8 14:51 SRPMS

[root@study ~]# ll -l /root/rpmbuild/{SOURCES,SPECS}
/root/rpmbuild/SOURCES:
-rw-rw-r--. 1 root root 559 Jun 24 07:44 ntp-4.2.4p7-getprecision.patch
-rw-rw-r--. 1 root root 661 Jun 24 07:44 ntp-4.2.6p1-cmsgalign.patch
.....(中间省略).....
/root/rpmbuild/SPECS:
-rw-rw-r--. 1 root root 41422 Jun 24 07:44 ntp.spec    #这就是重点!

三、设定档的主要内容(*.spec)

如前一个小节的练习,我们知道在/root/rpmbuild/SOURCES 里面会放置原始档(tarball) 以及相关的修补档(patch file), 而我们也知道编译需要的步骤大抵就是./configure, make, make check, make install 等,那这些动作写入在哪里呢?就在SPECS 目录中啦!让我们来瞧一瞧SPECS 里面的档案说些什么吧!

[root@study ~]# cd /root/rpmbuild/SPECS 
[root@study SPECS]# vim ntp.spec 
# 1.首先,这个部分在介绍整个软体的基本相关资讯!不论是版本还是释出次数等。
Summary: The NTP daemon and utilities            #简易的说明这个软体的功能 
Name: ntp                                        #软体的名称 
Version: 4.2.6p5                                 #软体的版本 
Release: 19%{?dist}.1                            #软体的释出版次 
# primary license (COPYRIGHT) : MIT              #底下有很多#的注解说明!
.....(中间省略).....
License: (MIT and BSD and BSD with advertising) and GPLv2
Group: System Environment/Daemons
Source0: http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-%{version}.tar.gz
Source1: ntp.conf                                #写SourceN的就是原始码!
Source2: ntp.keys                                #原始码可以有很多个!
.....(中间省略)..... 
Patch1: ntp-4.2.6p1-sleep.patch                  #接下来则是补丁档案,就是PatchN的目的!
Patch2: ntp-4.2.6p4-droproot.patch
.....(中间省略).....

# 2.这部分则是在设定相依属性需求的地方!
URL: http://www.ntp.org                          #底下则是说明这个软体的相依性, 
Requires(post): systemd-units                    #还有编译过程需要的软体有哪些等等!
Requires(preun): systemd-units
Requires(postun): systemd-units
Requires: ntpdate = %{version}-%{release}
BuildRequires: libcap-devel openssl-devel libedit-devel perl-HTML-Parser
BuildRequires: pps-tools-devel autogen autogen-libopts-devel systemd-units
.....(中间省略)..... 
%package -n ntpdate                              #其实这个软体包含有很多次软体喔!
Summary: Utility to set the date and time via NTP
Group: Applications/System
Requires(pre): shadow-utils
Requires(post): systemd-units
Requires(preun): systemd-units
Requires(postun): systemd-units
.....(中间省略).....

# 3. 编译前的预处理,以及编译过程当中所需要进行的指令,都写在这里
#尤其%build底下的资料,几乎就是makefile里面的资讯啊!
%prep                                            #这部份大多在处理补丁的动作!
%setup -q -a 5
%patch1 -p1 -b .sleep                            #这些patch当然与前面的PatchN有关!
%patch2 -p1 -b .droproot
.....(中间省略)..... 
%build                                           #其实就是./configure, make等动作!
sed -i 's|$CFLAGS -Wstrict-overflow|$CFLAGS|' configure sntp/configure
export CFLAGS="$RPM_OPT_FLAGS -fPIE -fno-strict-aliasing -fno-strict-overflow"
export LDFLAGS="-pie -Wl,-z,relro,-z,now"
%configure \                                     #不就是./configure的意思吗!
        --sysconfdir=%{_sysconfdir}/ntp/crypto \
        --with-openssl-libdir=%{_libdir} \
        --without-ntpsnmpd \
        --enable-all-clocks --enable-parse-clocks \
        --enable-ntp-signd=%{_localstatedir}/run/ntp_signd \
        --disable-local-libopts
echo '#define KEYFILE "%{_sysconfdir}/ntp/keys"' >> ntpdate/ntpdate.h
echo '#define NTP_VAR "%{_localstatedir}/log/ntpstats/"' >> config.h

make %{?_smp_mflags}                             #不就是make了吗!
.....(中间省略).....

%install                                         #就是安装过程所进行的各项动作了!
make DESTDIR=$RPM_BUILD_ROOT bindir=%{_sbindir} install

mkdir -p $RPM_BUILD_ROOT%{_mandir}/man{5,8}
sed -i 's/sntp\.1/sntp\.8/' $RPM_BUILD_ROOT%{_mandir}/man1/sntp.1
mv $RPM_BUILD_ROOT%{_mandir}/man{1/sntp.1,8/sntp.8}
rm -rf $RPM_BUILD_ROOT%{_mandir}/man1
.....(中间省略).....

# 4.这里列出,这个软体释出的档案有哪些的意思!
%files                                           #这软体所属的档案有哪些的意思!
%dir %{ntpdocdir}
%{ntpdocdir}/COPYRIGHT
%{ntpdocdir}/ChangeLog
.....(中间省略).....

# 5. 列出这个软体的更改历史纪录档!
%changelog
* Tue Jun 23 2015 CentOS Sources <bugs@centos.org> - 4.2.6p5-19.el7.centos.1
- rebrand vendorzone

* Thu Apr 23 2015 Miroslav Lichvar <mlichvar@redhat.com> 4.2.6p5-19.el7_1.1
- don't step clock for leap second with -x option (#1191122)
.....(后面省略).....

要注意到的是ntp.sepc 这个档案,这是主要的将SRPM 编译成RPM 的设定档,他的基本规则可以这样看:

  1. 整个档案的开头以Summary为开始,这部份的设定都是最基础的说明内容;
  2. 然后每个不同的段落之间,都以% 来做为开头,例如%prep 与%install 等;

我们来谈一谈几个常见的SRPM 设定段落:

系统整体资讯方面:

刚刚你看到的就有底下这些重要的咚咚啰:

参数 参数意义
Summary 本软体的主要说明,例如上表中说明了本软体是针对NTP 的软体功能与工具等啦!
Name 本软体的软体名称(最终会是RPM 档案的档名构成之一)
Version 本软体的版本(也会是RPM 档名的构成之一)
Release 这个是该版本打包的次数说明(也会是RPM档名的构成之一)。由于我们想要动点手脚,所以请将『 19%{?dist}.1 』 修改为『 20.vbird 』看看
License 这个软体的授权模式,看起来涵盖了所有知名的Open source 授权啊!!
Group 这个软体在安装的时候,主要是放置于哪一个软体群组当中(yum grouplist 的特点!);
URL 这个原始码的主要官方网站;
SourceN 这个软体的来源,如果是网路上下载的软体,通常一定会有这个资讯来告诉大家这个原始档的来源!此外,如果有多个软体来源,就会以Source0, Source1… 来处理原始码喔!
PatchN 就是作为补丁的patch file 啰!也是可以有好多个!
BuildRoot 设定作为编译时,该使用哪个目录来暂存中间档案(如编译过程的目标档案/连结档案等档)。

上述为必须要存在的项目,底下为可使用的额外设定值

Requires 如果你这个软体还需要其他的软体的支援,那么这里就必需写上来,则当你制作成RPM 之后,系统就会自动的去检查啦!这就是『相依属性』的主要来源啰!
BuildRequires 编译过程中所需要的软体。Requires 指的是『安装时需要检查』的,因为与实际运作有关,这个BuildRequires 指的是『编译时』所需要的软体,只有在SRPM 编译成为RPM 时才会检查的项目。

上面几个资料通常都必需要写啦!但是如果你的软体没有相依属性的关系时,那么就可以不需要那个Requires 啰!根据上面的设定,最终的档名就会是『{Name}-{Version}-{Release}.{Arch}.rpm』的样式, 以我们上面的设定来说,档名应该会是『ntp- 4.2.6p5-20.vbird.x86_64.rpm』的样子啰!

description

将你的软体做一个简短的说明!这个也是必需要的。还记得使用『 rpm -qi 软体名称』会出现一些基础的说明吗?上面这些东西包括Description 就是在显示这些重要资讯的啦!所以,这里记得要详加解释喔!

prep

pre这个关键字原本就有『在…之前』的意思,因此这个项目在这里指的就是『尚未进行设定或安装之前,你要编译完成的RPM帮你事先做的事情』,就是prepare的简写啰!那么他的工作事项主要有:

  1. 进行软体的补丁(patch) 等相关工作;
  2. 寻找软体所需要的目录是否已经存在?确认用的!
  3. 事先建立你的软体所需要的目录,或者事先需要进行的任务;
  4. 如果待安装的Linux系统内已经有安装的时候可能会被覆盖掉的档案时,那么就必需要进行备份(backup)的工作了!

在本案例中,你会发现程式会使用patch 去进行补丁的动作啦!所以程式的原始码才会更新到最新啊!

build

build就是建立啊!所以当然啰,这个段落就是在谈怎么make编译成为可执行的程式啰!你会发现在此部分的程式码方面,就是./configure, make等项目哩!一般来说,如果你会使用SRPM来进行重新编译的行为, 通常就是要重新./configure并给予新的参数设定!于是这部份就可能会修改到!

install:

编译完成(build) 之后,就是要安装啦!安装就是写在这里,也就是类似Tarball 里面的make install 的意思啰!

files:

这个软体安装的档案都需要写到这里来,当然包括了『目录』喔!所以连同目录请一起写到这个段落当中!以备查验呢!^_^ !此外,你也可以指定每个档案的类型,包括文件档(%doc 后面接的) 与设定档(%config 后面接的) 等等。

changelog

这个项目主要则是在记录这个软体曾经的更新纪录啰!星号(*) 后面应该要以时间,修改者, email 与软体版本来作为说明, 减号(-) 后面则是你要作的详细说明啰!在这部份鸟哥就新增了两行,内容如下:

%changelog
 * Wed Sep 09 2015 VBird Tsai <vbird@mail.vbird.idv.tw>- 4.2.6p5-20.vbird
- only rebuild this SRPM to RPM

* Tue Jun 23 2015 CentOS Sources <bugs@centos.org> - 4.2.6p5-19.el7.centos.1
- rebrand vendorzone
....(底下省略)....

修改到这里也差不多了,您也应该要了解到这个ntp.spec 有多么重要!我们用rpm -q 去查询一堆资讯时, 其实都是在这里写入的!这样了解否?接下来,就让我们来了解一下如何将SRPM 给他编译出RPM 来吧!

四、SRPM 的编译指令(-ba/-bb)

要将在/root/rpmbuild 底下的资料编译或者是单纯的打包成为RPM 或SRPM 时,就需要rpmbuild 指令与相关选项的帮忙了!我们只介绍两个常用的选项给您了解一下:

[root@study ~]# rpmbuild -ba ntp.spec   <==编译并同时产生RPM与SRPM档案 
[root@study ~]# rpmbuild -bb ntp.spec   <==仅编译成RPM档案

这个时候系统就会这样做:

  1. 先进入到BUILD 这个目录中,亦即是: /root/rpmbuild/BUILD 这个目录;

  2. 依照*.spec 档案内的Name 与Version 定义出工作的目录名称,以我们上面的例子为例,那么系统就会在BUILD 目录中先删除ntp-4.2.6p5 的目录,再重新建立一个ntp-4.2 .6p5 的目录,并进入该目录;

  3. 在新建的目录里面,针对SOURCES 目录下的来源档案,也就是*.spec 里面的Source 设定的那个档案,以tar 进行解压缩,以我们这个例子来说,则会在/root/rpmbuild/BUILD/ ntp-4.2.6p5 当中,将/root/rpmbuild/SOURCES/ntp-* 等等多个原始码档案进行解压缩啦!

  4. 再来开始%build 及%install 的设定与编译!

  5. 最后将完成打包的档案给他放置到该放置的地方去,如果你的系统是x86_64 的话,那么最后编译成功的*.x86_64.rpm档案就会被放置在/root/rpmbuild/RPMS/x86_64 里面啰!如果是noarch 那么自然就是 /root/rpmbuild/RPMS/noarch 目录下啰!

整个步骤大概就是这样子!最后的结果资料会放置在RPMS 那个目录底下就对啦!我们这个案例中想要同时打包RPM 与SRPM , 因此请您自行处理一下『 rpmbuild -ba ntp.spec 』吧!

[root@study ~]# cd /root/rpmbuild/SPECS 
[root@study SPECS]# rpmbuild -ba ntp.spec 
.....(前面省略)..... 
Wrote: /root/rpmbuild/SRPMS/ ntp-4.2.6p5-20.vbird.src.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/ntp-4.2.6p5-20.vbird.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/noarch/ntp-perl-4.2.6p5-20.vbird.noarch.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/ntpdate-4.2.6p5-20.vbird.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/sntp-4.2.6p5-20.vbird.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/noarch/ntp-doc-4.2.6p5-20.vbird.noarch.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/ntp-debuginfo-4.2.6p5-20.vbird.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.xZh6yz
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd ntp-4.2.6p5
+ /usr/bin/rm -rf /root/rpmbuild/BUILDROOT/ntp-4.2.6p5-20.vbird.x86_64
+ exit 0

[root@study SPECS]# find /root/rpmbuild -name 'ntp*rpm'
/root/rpmbuild/RPMS/x86_64/ntp-4.2.6p5-20.vbird.x86_64.rpm
/root/rpmbuild/RPMS/x86_64/ntpdate-4.2.6p5-20.vbird.x86_64.rpm
/root/rpmbuild/RPMS/x86_64/ntp-debuginfo-4.2.6p5-20.vbird.x86_64.rpm
/root/rpmbuild/RPMS/noarch/ntp-perl-4.2.6p5-20.vbird.noarch.rpm
/root/rpmbuild/RPMS/noarch/ntp-doc-4.2.6p5-20.vbird.noarch.rpm
/root/rpmbuild/SRPMS/ntp-4.2.6p5-20.vbird.src.rpm
# 上面分别是RPM 与SRPM 的档案档名!

您瞧!嘿嘿~有vbird 的软体出现了!相当有趣吧!另外,有些文件软体是与硬体等级无关的(因为单纯的文件啊!),所以如上表所示, 你会发现ntp-doc-4.2.6p5-20.vbird.noarch.rpm 是noarch 喔!有趣吧

五、一个打包自己软体的范例

这个就有趣了!我们自己来编辑一下自己制作的RPM怎么样?会很难吗?完全不会!我们这里就举个例子来玩玩吧!还记得我们在前一章谈到Tarball与make时,曾经谈到的main这个程式吗?现在我们将这个程式加上Makefile后,将他制作成为main-0.1-1.x86_64.rpm好吗?那该如何进行呢?底下就让我们来处理处理吧!

制作原始码档案tarball 产生:

因为鸟哥的网站并没有直接释出main-0.2,所以假设官网提供的是main-0.l 版本之外,同时提供了一个patch 档案~ 那我们就得要这样作:

  • main-0.1.tar.gz 放在/root/rpmbuild/SOURCES/
  • main_0.1_to_0.2_patch 放在/root/rpmbuild/SOURCES/
  • main.spec 自行撰写放在/root/rpmbuild/SPECS/

1.先来处理原始码的部份,假设你的/root/rpmbuild/SOURCES已经存在了喔!

[root@study ~]# cd /root/rpmbuild/SOURCES 
[root@study SOURCES]# wget http://linux.vbird.org/linux_basic/0520source/main-0.1.tgz 
[root@study SOURCES]# wget http ://linux.vbird.org/linux_basic/0520source/main_0.1_to_0.2.patch 
[root@study SOURCES]# ll main*
-rw-r--r--. 1 root root 703 Sep 4 14:47 main-0.1.tgz
-rw-r--r--. 1 root root 1538 Sep 4 14:51 main_0.1_to_0.2.patch

接下来就是spec 档案的建立啰!

建立*.spec 的设定档:

这个档案的建置是所有RPM 制作里面最重要的课题!你必须要仔细的设定他,不要随便处理!仔细看看吧!有趣的是,CentOS 7.x 会主动的将必要的设定参数列出来喔!相当有趣!^_^

[root@study ~]# cd /root/rpmbuild/SPECS 
[root@study SPECS]# vim main.spec 
Name: main
Version: 0.1
Release: 1%{?dist}
Summary: Shows sin and cos value.
Group: Scientific Support
License: GPLv2
URL: http://linux.vbird.org/
Source0: main-0.1.tgz              #这两个档名要正确喔!
Patch0: main_0.1_to_0.2.patch

%description
This package will let you input your name and calculate sin cos value.

%prep
%setup -q
%patch0 -p1                               #要用来作为patch的动作!

%build
make clean main                           #编译就好!不要安装!

%install
mkdir -p %{buildroot}/usr/local/bin
install -m 755 main %{buildroot}/usr/local/bin #这才是顺利的安装行为!

%files
/usr/local/bin/main

%changelog
* Wed Sep 09 2015 VBird Tsai <vbird@mail.vbird.idv.tw> 0.2
- build the program

编译成为RPM 与SRPM

老实说,那个spec 档案建置妥当后,后续的动作就简单的要命了!开始来编译吧!

[root@study SPECS]# rpmbuild -ba main.spec 
.....(前面省略).....
Wrote: /root/rpmbuild/SRPMS/main-0.1-1.el7.centos.src.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/main-0.1-1.el7.centos.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/main-debuginfo-0.1-1.el7.centos.x86_64.rpm

很快的,我们就已经建立了几个RPM 档案啰!接下来让我们好好测试一下打包起来的成果吧!

安装/测试/实际查询

[root@study ~]# yum install /root/rpmbuild/RPMS/x86_64/main-0.1-1.el7.centos.x86_64.rpm 
[root@study ~]# rpm -ql main 
/usr/local/bin/main    <==自己尝试执行main看看!

[root@study ~]# rpm -qi main
Name : main
Version : 0.1
Release : 1.el7.centos
Architecture: x86_64
Install Date: Wed 09 Sep 2015 04:29:08 PM CST
Group : Scientific Support
Size : 7200
License : GPLv2
Signature : (none)
Source RPM : main-0.1-1.el7.centos.src.rpm
Build Date : Wed 09 Sep 2015 04:27:29 PM CST
Build Host : study.centos.vbird
Relocations : (not relocatable)
URL : http://linux.vbird.org/
Summary : Shows sin and cos value.
Description :
This package will let you input your name and calculate sin cos value.
# 看到没?属于你自己的软体喔!真是很愉快的啦!

用很简单的方式,就可以将自己的软体或者程式给他修改与设定妥当!以后你就可以自行设定你的RPM 啰!当然,也可以手动修改你的SRPM 的来源档内容啰!

参考资料

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn