利用 RPM 来管理整个 Linux 的套件,同时以一个简单的范例来操纵 SRPM 的创建
本文数据主要针对 Fedora Core 4 的系统进行说明, Fedora Core 1 主要是由 Red Hat Linux 9 改版而来, 这个 Red Hat Linux 9 并不是当前大家听到的 RHEL 喔!那是在 RHEL 出现之前的产品,基本上是在 2003 年以前的作品了!Fedora Core 4 则是在 2005 年 6 月份发布,使用的内核是 2.6.11 版,当时是很红的一个作品!只是生命周期太短,所以用这个 Fedora 系列来介绍 Server, 当时的决定确实有点莫名其妙了...
建议您前往本站查找最新版本的 Linux distribution 文章来阅读,比较不会浪费时间。那为何还需要编辑 Fedora Core 4 的数据呢? 鸟哥只想要做个自己曾经撰写过的文档内容保存而已啰! ^_^!最新文章请前往鸟站首页查阅啰!
在上一章当中,我们介绍了以 Tarball 的方式来安装我们的套件,同时也说明了 Source code 与运行档之间的关系。不过,如果每次安装套件都需要进行编译的动作,那么实在很没效率!这个时候,由 Red Hat 公司所开发出来的套件管理程序( Red Hat Package Manager, RPM )可就帮了大忙了!RPM 除了可以用来安装套件之外,还可以进行查找、升级、反安装、以及其他验证等等的功能, 这些功能让我们在管理系统的套件上,更显的方便呢!此外,我们也可以利用 RPM 的原理来『自行创造自己的 RPM 文件』呢!
由于 RPM 实在是太好用了,目前主要的 Linux distributions 都是使用 RPM 来管理他们的套件,例如 Red Hat 系统 (含 Fedora ), SuSE 与改版后的 Mandriva ,所以,您不能不知道 RPM 是什么东西?该如何利用他,以及熟悉相关的功能!赶紧来参详参详!
xxxxxxxxx.rpm <==RPM 的格式,已经经过编译且包装完成的 rpm 文件;
xxxxx.src.rpm <==SRPM的格式,包含未编译的原代码信息。
那么我们怎么知道这个套件的版本、适用的平台、打包的次数呢?呵呵!只要通过文件名就可以知道了!例如
rp-pppoe-3.1-5.i386.rpm
这的文件的意义为:
rp-pppoe - 3.1 - 5 .i386 .rpm
套件名称 套件的版本信息 发布的次数 适合的硬件平台 扩展名
除了后面适合的硬件平台与扩展名外,主要是以『-』来隔开各个部分,
这样子可以很清楚的发现该套件的名称、版本信息、打包次数与操作的硬件平台!
好了,来谈一谈每个不同的地方吧:平台名称 | 适合平台说明 |
i386 | 几乎适用于所有的 x86 平台,不论是旧的 pentum 或者是新的 pentum-IV 与 K7 系列的 CPU等等,都可以正常的工作!那个 i 指的是 Intel 兼容的 CPU 的意思,至于 386 不用说,就是 CPU 的等级啦! |
i586 | 就是 586 等级的电脑,那是哪些呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU ( socket 7 插脚 ) 等等的 CPU 都算是这个等级; |
i686 | 在 pentun II 以后的 Intel 系列 CPU ,及 K7 以后等级的 CPU 都属于这个 686 等级! |
noarch | 就是没有任何硬件等级上的限制。一般来说,这种类型的 RPM 文件,里面应该没有 binary file 存在。 |
/etc | 一些设置档放置的目录,例如 /etc/crontab |
/usr/bin | 一些可运行文件 |
/usr/lib | 一些程序使用的动态函数库 |
/usr/share/doc | 一些基本的软件使用手册与说明档 |
/usr/share/man | 一些 man page 文件 |
[root@linux ~]# rpm -i rp-pppoe-3.1-5.i386.rpm
不过,这样的参数其实无法显示安装的进度,所以,通常我们会这样下达安装指令:[root@linux ~]# rpm -ivh package_name 参数: -i :install 的意思 -v :察看更细部的安装信息画面 -h :以安装信息列显示安装进度 范例: 范例一:安装 rp-pppoe-3.1-5.i386.rpm [root@linux ~]# rpm -ivh rp-pppoe-3.1-5.i386.rpm Preparing... ####################################### [100%] 1:rp-pppoe ####################################### [100%] 范例二、一口气安装两个以上的套件时: [root@linux ~]# rpm -ivh a.i386.rpm b.i386.rpm *.rpm # 后面直接接上许多的套件文件! 范例三、直接由网络上面的某个文件安装,以网址来安装: [root@linux ~]# rpm -ivh http://website.name/path/pkgname.rpm另外,如果我们在安装的过程当中发现问题,或者已经知道会发生的问题, 而还是『执意』要安装这个套件时,可以使用如下的参数『强制』安装上去:
可下达的参数 | 代表意义 |
--nodeps | 使用时机:
如果您在安装某个套件时,老是发现 rpm 告诉你『有属性相依的套件尚未安装』,
而您又想要直接强制安装这个套件时,可以加上 --nodeps 告知 RPM 不要去检查套件的相依性。 危险性: 套件会有相依性的原因是因为彼此会使用到对方的机制或功能,如果强制安装而不考虑套件的属性相依, 则可能会造成该套件的无法正常使用! |
--nomd5 | 使用时机:
不想检查 RPM 文件所含的 MD5 信息时。 说明: 还记得我们在前一章有提到的 MD5 这个指纹辨识吧?!没错,这里指的就是不要检查 RPM 套件的 MD5 信息。但除非您很清楚这个套件的来源,否则不建议使用这个参数。 |
--noscripts | 使用时机:
不想让该套件自行激活或者自行运行某些系统指令。 说明: RPM 的优点除了可以将文件放置到定位之外,还可以自动运行一些前置作业的指令,例如数据库的初始化。 如果您不想要让 RPM 帮您自动运行这一类型的指令,就加上他吧! |
--replacefiles | 使用时机:
如果在安装的过程当中出现了『某个文件已经被安装在您的系统上面』的信息,
又或许出现版本不合的消息( confilcting files )时,可以使用这个参数来直接覆盖文件。 危险性: 覆盖的动作是无法复原的!所以,您必须要很清楚的知道被覆盖的文件是真的不重要喔!否则会欲哭无泪! |
--replacepkgs | 使用时机: 重新安装某个已经安装过的套件! |
--force | 使用时机: 这个参数其实就是 --replacefiles 与 --replacepkgs 的综合体! |
--test | 使用时机:
想要测试一下该套件是否可以被安装到用户的 Linux 环境当中。范例为: rpm -ivh pkgname.i386.rpm --test |
-Uvh | 后面接的套件即使没有安装过,则系统将予以直接安装; 若后面接的套件有安装过旧版,则系统自动更新至新版; |
-Fvh | 如果后面接的套件并未安装到您的 Linux 系统上,则该套件不会被安装;亦即只有安装至您 Linux 系统内的套件会被『升级』! |
[root@linux ~]# rpm -qa [root@linux ~]# rpm -q[licdR] 已安装的套件名称 [root@linux ~]# rpm -qf 存在于系统上面的某个文件 [root@linux ~]# rpm -qp[licdR] 未安装的某个文件名称 参数: 在查找的部分,所有的参数之前都需要加上 -q 才是所谓的查找! 查找主要分为两部分,一个是查已安装,另一个则是查某个 rpm 文件内容。 查找已安装套件的信息: -q :仅查找,后面接的套件名称是否有安装; -qa :列出所有的,已经安装在本机 Linux 系统上面的所有套件名称; -qi :列出该套件的详细信息 (information),包含开发商、版本与说明等; -ql :列出该套件所有的文件与目录所在完整文件名 (list); -qc :列出该套件的所有设置档 (找出在 /etc/ 底下的文件名而已) -qd :列出该套件的所有说明档 (找出与 man 有关的文件而已) -qR :列出与该套件有关的相依套件所含的文件 (Required 的意思) -qf :由后面接的文件名称,找出该文件属于哪一个已安装的套件; 查找某个 RPM 文件内含有的信息: -qp[icdlR]:注意 -qp 后面接的所有参数以上面的说明一致。但用途仅在于找出 某个 RPM 文件内的信息,而非已安装的套件信息!注意! 范例: 范例一:找出你的 Linux 是否有安装 logrotate 这个套件? [root@linux ~]# rpm -q logrotate logrotate-3.7.1-10 [root@linux ~]# rpm -q logrotating package logrotating is not installed # 注意到,系统会去找是否有安装后面接的套件名称。注意, # 不必要加上版本喔!至于显示的结果,一看就知道有没有安装啦! 范例二:列出上题当中,该套件的所有目录与文件: [root@linux ~]# rpm -ql logrotate /etc/cron.daily/logrotate /etc/logrotate.conf ......以下省略...... # 可以看出该套件到底提供了多少的文件与目录。 范例三:列出 logrotate 这个套件的相关说明数据: [root@linux ~]# rpm -qi logrotate Name : logrotate Relocations: (not relocatable) Version : 3.7.1 Vendor: Red Hat, Inc. Release : 10 Build Date: Fri Apr 1 03:54:42 2005 Install Date: Sat Jun 25 08:28:26 2005 Build Host: tweety.build.redhat.com Group : 系统环境/基础 Source RPM: logrotate-3.7.1-10.src.rpm Size : 47825 License: GPL Signature : DSA/SHA1, Sat May 21 01:34:11 2005, Key ID b44269d04f2a6fd2 Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla> Summary : 循环、压缩、移除以及邮寄系统纪录文件。 Description : The logrotate utility is designed to simplify the administration of log files on a system which generates a lot of log files. Logrotate allows for the automatic rotation, compression, removal, and mailing of log files. Logrotate can be set to handle a log file daily, weekly, monthly, or when the log file gets to a certain size. Normally, logrotate runs as a daily cron job. # 列出该套件的 information (信息),里面的信息可多着呢,包括了套件名称、 # 版本、开发商、SRPM文件名称、打包次数、简单说明信息、套件打包者、 # 安装日期等等!如果想要详细的知道该套件的数据,用这个参数来了解一下 范例四:分别仅找出 logrotate 的设置档与说明档 [root@linux ~]# rpm -qc logrotate [root@linux ~]# rpm -qd logrotate 范例五:若要成功安装 logrotate ,他还需要什么文件的帮忙? [root@linux ~]# rpm -qR logrotate /bin/sh config(logrotate) = 3.7.1-10 libc.so.6 ....以下省略.... # 由这里看起来,呵呵~还需要很多文件的支持才行喔! 范例六:由上面的范例五,找出 /bin/sh 是那个套件提供的? [root@linux ~]# rpm -qf /bin/sh bash-3.0-31 # 这个参数后面接的可是『文件』呐!不像前面都是接套件喔! # 这个功能在查找系统的某个文件属于哪一个套件所有的。 范例七:假设我有下载一个 RPM 文件,想要知道该文件的需求文件,该如何? [root@linux ~]# rpm -qpR filename.i386.rpm # 加上 -qpR ,找出该文件需求的数据!常见的查找就是这些了!要特别说明的是,在查找本机上面的 RPM 套件相关信息时, 不需要加上版本的名称,只要加上套件名称即可!因为他会由 /var/lib/rpm 这个数据库里面去查找, 所以我们可以不需要加上版本名称。但是查找某个 RPM 文件就不同了, 我们必须要列出整个文件的完整文件名才行~ 这一点朋友们常常会搞错。底下我们就来做几个简单的练习吧!
例题: 我想要知道我的系统当中,以 c 开头的套件有几个,如何实做?
http://web.site.name/path/httpd-x.x.xx.i386.rpm 则我可以这样做: rpm -ivh http://web.site.name/path/httpd-x.x.xx.i386.rpm --replacepkgs
rpm -qf /etc/crontab 就可以知道是那个套件啰!重新安装一次该套件即可! |
[root@linux ~]# rpm -Va [root@linux ~]# rpm -V 已安装的套件名称 [root@linux ~]# rpm -Vp 某个 RPM 文件的文件名 [root@linux ~]# rpm -Vf 在系统上面的某个文件 参数: -V :后面加的是套件名称,若该套件所含的文件被更动过,才会列出来; -Va :列出目前系统上面所有可能被更动过的文件; -Vp :后面加的是文件名称,列出该套件内可能被更动过的文件; -Vf :列出某个文件是否被更动过~ 范例: 范例一:列出你的 Linux 内的 logrotate 这个套件是否被更动过? [root@linux ~]# rpm -V logrotate # 如果没有出现任何消息,恭喜你,该套件没有被更动过。 # 如果有出现任何消息,才是有出现状况啊! 范例二:查找一下,你的 /etc/crontab 是否有被更动过? [root@linux ~]# rpm -Vf /etc/crontab S.5....T c /etc/crontab # 瞧!因为有被更动过,所以会列出被更动过的信息!好了,那么我怎么知道到底我的文件被更动过的内容是什么?呵呵!简单的说明一下吧! 例如,我们检查一下 logrotate 这个套件:
[root@linux ~]# rpm -ql logrotate /etc/cron.daily/logrotate /etc/logrotate.conf /etc/logrotate.d /usr/sbin/logrotate /usr/share/doc/logrotate-3.7.1 /usr/share/doc/logrotate-3.7.1/CHANGES /usr/share/man/man8/logrotate.8.gz /var/lib/logrotate.status # 呵呵!共有八个文件啊! [root@linux ~]# rpm -V logrotate ..5....T c /etc/logrotate.conf # 上面的信息是这样的: S :file Size differs 文件的容量大小是否被改变 M :Mode differs (includes permissions and file type) 文件的类型或文件的属性,如是否可运行等参数已被改变 5 :MD5 sum differs MD5 这一种加密防骇的属性已被改变 D :Device major/minor number mis-match 设备名称已被改变 L :readLink(2) path mis-match Link 属性已被改变 U :User ownership differs 文件的所属人已被改变 G :Group ownership differs 文件的所属群组已被改变 T :mTime differs 文件的创建时间已被改变所以,如果当一个文件所有的信息都被更动过,那么他的显示就会是:
SM5DLUGT c filename至于那个 c 代表的是『 Config file 』的意思,也就是文件的类型,文件类型有底下这几类:
[root@linux ~]# rpm --import /usr/share/rhn/RPM-GPG-KEY
一般来说,您的 Linux distributions 都会发布自己的 GPG Key 的,如果是 Red Hat 系统的话,
可以使用:
[root@linux ~]# locate GPG-KEY
来进行搜索文件的工作,至于这些密钥的内容,我们可以这样查找喔:[root@linux ~]# rpm -qa | grep gpg libgpg-error-1.0-2 gpg-pubkey-4f2a6fd2-3f9d9d3b [root@linux ~]# rpm -qi gpg-pubkey-4f2a6fd2-3f9d9d3b Name : gpg-pubkey Relocations: (not relocatable) Version : 4f2a6fd2 Vendor: (none) Release : 3f9d9d3b Build Date: Sat Jun 25 22:13:00 2005 Install Date: Sat Jun 25 22:13:00 2005 Build Host: localhost Group : Public Keys Source RPM: (none) Size : 0 License: pubkey Signature : (none) Summary : gpg(Fedora Project <fedora@redhat.com>) Description : -----BEGIN PGP PUBLIC KEY BLOCK----- Version: rpm-4.4.1 (beecrypt-3.0.0) mQGiBD+dnTsRBACwnlz4AhctOLlVBAsq+RaU82nb5P3bD1YJJpsAce1Ckd2sBUOJD11NUCqH .....中间省略..... =mJAx -----END PGP PUBLIC KEY BLOCK-----这样就能看到相关的信息啰! ^_^
[root@linux ~]# rpm -e logrotate <==解安装 logrotate 套件 [root@linux ~]# rpm --rebuilddb <==重建数据库
--rebuild | 这个参数会将后面的 SRPM 进行『编译』与『打包』的动作,最后会产生
RPM 的文件,但是产生的 RPM 文件并没有安装到系统上。当您使用 --rebuild 的时候,最后通常会发现一行字体: Wrote: /usr/src/RPM/RPMS/i386/pkgname.i386.rpm 这个就是编译完成的 RPM 文件啰!那么这个文件就可以用来安装啦!安装的时候请加绝对路径来安装即可! |
--recompile | 这个动作会直接的『编译』『打包』并且『安装』啰!请注意, rebuild 仅『编译并打包』而已,而 recompile 不但进行编译跟打包,还同时进行『安装』了! |
/usr/src/redhat/SPEC | 这个目录当中放置的是该套件的设置档,例如这个套件的信息参数、设置项目等等都放置在这里; |
/usr/src/redhat/SOURCE | 这个目录当中放置的是该套件的源文件(*.tar.gz的文件)以及 config 这个设置档; |
/usr/src/redhat/BUILD | 在编译的过程中,有些暂存的数据都会放置在这个目录当中; |
/usr/src/redhat/RPMS | 经过编译之后,并且顺利的编译成功之后,将打包完成的文件放置在这个目录当中。里头有包含了 i386, i586, i686, noarch.... 等等的次目录。 |
[root@linux ~]# rpm -i /root/rp-pppoe-3.5-30.src.rpm # 这个过程不会显示任何东西,他只会将 SRPM 的文件解开后,放置到 # /usr/src/redhat 下! [root@linux ~]# find /usr/src/redhat/ -type f /usr/src/redhat/SOURCES/rp-pppoe-3.5-buildroot.patch /usr/src/redhat/SOURCES/adsl-stop /usr/src/redhat/SOURCES/adsl-start /usr/src/redhat/SOURCES/adsl-setup /usr/src/redhat/SOURCES/rp-pppoe-3.4-redhat.patch /usr/src/redhat/SOURCES/adsl-status /usr/src/redhat/SOURCES/rp-pppoe-3.5-firewall.patch /usr/src/redhat/SOURCES/adsl-connect /usr/src/redhat/SOURCES/rp-pppoe-3.5.tar.gz /usr/src/redhat/SPECS/rp-pppoe.spec # 主要含有原代码与一个重要的设置档啊! rp-pppoe.spec !好了,来看看我们的设置参数档,亦即是在 /usr/src/redhat/SPECS 内的 *.spec 文件啰!
[root@linux ~]# cd /usr/src/redhat/SPECS [root@linux SPECS]# vi rp-pppoe.spec # 1. 首先,这个部分在介绍整个套件的基本相关信息!不论是版本还是发布次数等。 Summary: A PPP over Ethernet client (for xDSL support). Name: rp-pppoe Version: 3.5 Release: 30 License: GPL Group: System Environment/Daemons Url: http://www.roaringpenguin.com/pppoe/ Source: http://www.roaringpenguin.com/rp-pppoe-%{version}.tar.gz Source1: adsl-connect Source2: adsl-setup .....中间省略..... # 2. 这部分则是在设置相依属性需求的地方! Prereq: /sbin/chkconfig Prereq: /sbin/service Prereq: fileutils Requires: ppp >= 2.4.2 Requires: initscripts >= 5.92 Requires: iproute >= 2.6 ExcludeArch: s390 s390x %description PPPoE (Point-to-Point Protocol over Ethernet) is a protocol used by many ADSL Internet Service Providers. This package contains the Roaring Penguin PPPoE client, a user-mode program that does not require any kernel modifications. It is fully compliant with RFC 2516, the official PPPoE specification. # 3. 编译前的预处理,以及编译过程当中所需要进行的指令,都写在这里 # 尤其 %build 底下的数据,几乎就是 makefile 里面的信息啊! %prep %setup -q %patch0 -p1 -b .config %patch1 -p1 -b .buildroot %patch2 -p1 -b .ipchains %build cd src autoconf CFLAGS="-D_GNU_SOURCE" %configure make install -m 0755 %{SOURCE1} scripts install -m 0755 %{SOURCE2} scripts install -m 0755 %{SOURCE3} scripts install -m 0755 %{SOURCE4} scripts install -m 0755 %{SOURCE5} scripts %install rm -rf $RPM_BUILD_ROOT .....中间省略..... # 4. 这里列出,这个套件发布的文件有哪些的意思! %files %defattr(-,root,root) %doc doc/LICENSE scripts/adsl-connect scripts/adsl-setup scripts/adsl-init %doc scripts/adsl-start scripts/adsl-status scripts/adsl-stop %doc configs %config(noreplace) %{_sysconfdir}/ppp/pppoe-server-options %config(noreplace) %{_sysconfdir}/ppp/firewall* /sbin/* %{_sbindir}/* %{_mandir}/man?/* # 5. 列出这个套件的更改历史纪录档! %changelog * Mon Aug 15 2005 Than Ngo <than@redhat.com> 3.5-30 - defaultroute should not overridden #152014 .....中间省略..... * Wed May 31 2000 Than Ngo <than@redhat.de> - adopted for Winston.注意到的是rp-pppoe.sepc这个文件,这是主要的将SRPM编译成RPM的设置档,他的基本规则可以这样看:
Summary | 主要的套件说明,例如上表中,我们说明了他是 ppp 的拨接用途啦! |
Name | 这个就是套件的名称; |
Version | 这个是套件的版本信息; |
Release | 这个是该版本打包的次数说明; |
License | 这个套件的授权模式,我们是使用 GPL 啦! |
Group | 这个套件的发展团体名称; |
Source | 这个套件的来源,如果是网络上下载的套件,通常一定会有这个信息来告诉大家这个源文件的来源! |
Url | 这个原代码的主要官方网站; |
Packager | 这个套件是经由谁来打包的呢? |
Vender | 发展的厂商哪; |
ExclusiveArch | 这个是说明这个套件的适合安装的硬件,通常缺省为 i386,当然,你也可以调整为 i586 啦等等的! |
Requires | 如果你这个套件还需要其他的套件的支持,那么这里就必需写上来,则当你制作成 RPM 之后,系统就会自动的去检查啦!这就是『相依属性』的主要来源啰! |
[root@linux ~]# rpmbuild -bb rp-pppoe.spec <==编译成RPM文件 [root@linux ~]# rpmbuild -ba rp-pppoe.spec <==打包成SRPM文件这个时候系统就会这样做:
[root@linux ~]# cd /usr/src/redhat/SOURCES [root@linux SOURCES]# vi showvbird.sh #!/bin/bash # This file is just used to demo the RPM packaging. # the only thing is showing the hostname. HOST=`/bin/hostname` /bin/echo $HOST # 先随便创建一个 shell script ,这个是自己的套件的意思啦! [root@linux SOURCES]# chmod 755 showvbird.sh [root@linux SOURCES]# tar -zcvf showvbird.tar.gz showvbird.sh # 注意喔!务必打包才行啊!上面的动作中,我们编辑了一个 shell script 文件,文件名为 showvbird.sh,并且将他打包成为具有 gzip 压缩的 tarball 文件,也就是 showvbird.tar.gz 这样的文件才行!请注意,这个 showvbird.tar.gz 文件『必需』放置在 SOURCES 目录之下!
[root@linux SOURCE]# cd /usr/src/redhat/SPECS [root@linux SPECS]# vi showvbird.spec Summary: This is a demo RPM package. Name: showvbird Version: 1.0 Release: 1 License: GPL Group: VBird's Home Source: showvbird.tar.gz <==记得喔!这里写的是刚刚创建的 tarball Url: http://vbird.org.cn Packager: VBird %description This package is just a demo RPM. %prep %setup -c %install install -m 755 showvbird.sh /usr/local/bin/showvbird.sh %files /usr/local/bin/showvbird.sh好了!开始给他编译并打包成为 RPM 文件啦!
[root@linux SPECS]# rpmbuild -bb showvbird.spec .....中间省略...... Requires: /bin/bash Checking for unpackaged file(s): /usr/lib/rpm/check-files %{buildroot} Wrote: /usr/src/redhat/RPMS/i386/showvbird-1.0-1.i386.rpm最后这个被打包成功的文件就被放置在 /usr/src/redhat/RPMS/i386/showvbird-1.0-1.i386.rpm 啰!然后给他安装一下:
[root@linux SPECS]# rpm -ivh ../RPMS/i386/showvbird-1.0-1.i386.rpm Preparing... ########################################### [100%] 1:showvbird ########################################### [100%] [root@linux SPECS]# rpm -qi showvbird Name : showvbird Relocations: (not relocatable) Version : 1.0 Vendor: (none) Release : 1 Build Date: Mon Oct 3 11:08:30 2005 Install Date: Mon Oct 3 11:11:30 2005 Build Host: linux.site.tw Group : VBird's Home Source RPM: showvbird-1.0-1.src.rpm Size : 143 License: GPL Signature : (none) Packager : VBird URL : http://vbird.org.cn Summary : This is a demo RPM package. Description : This package is just a demo RPM. [root@linux SPECS]# which showvbird.sh /usr/local/bin/showvbird.sh [root@linux SPECS]# rpm -ql showvbird /usr/local/bin/showvbird.sh <==果然记录起来了!自己的软件呢!用很简单的方式,就可以将自己的软件或者程序给他修改与设置妥当!很不错吧! 以后您就可以自行设置你的 RPM 啰!当然,也可以手动修改您的 SRPM 的来源档内容啰!