RPM包的安装:
rpm -ivh xxxxx.rpm
选项与参数:-i :install 的意思-v :察看更细部的安装资讯画面-h :以安装资讯列显示安装进度
RPM源码包下载:
yum install yum-utils
yumdownloader --source 包名
RPM包的卸载与重建数据库
rpm -e xxxx
由於 RPM 文件常常会安装/移除/升级等,某些动作或许可能会导致 RPM 数据库 /var/lib/rpm/ 内的文件破损。
需要重建数据库:
rpm --rebuilddb <==重建数据库
RPM查找:
rpm -qa <==已安装软件
rpm -q[licdR] 已安装的软件名称 <==已安装软件
rpm -qf 存在於系统上面的某个档名 <==已安装软件
rpm -qp[licdR] 未安装的某个文件名称 <==查阅RPM文件
选项与参数:查询已安装软件的资讯:
-q :仅查询,后面接的软件名称是否有安装;
-qa :列出所有的,已经安装在本机 Linux 系统上面的所有软件名称;
-qi :列出该软件的详细资讯 (information),包含开发商、版本与说明等;
-ql :列出该软件所有的文件与目录所在完整档名 (list);
-qc :列出该软件的所有配置档 (找出在 /etc/ 底下的档名而已);
-qd :列出该软件的所有说明档 (找出与 man 有关的文件而已);
-qR :列出与该软件有关的相依软件所含的文件 (Required 的意思)-;
qf :由后面接的文件名称,找出该文件属於哪一个已安装的软件;
查询某个 RPM 文件内含有的资讯:-qp[icdlR]:注意 -qp 后面接的所有参数以上面的说明一致。但用途仅在於找出 某个 RPM 文件内的资讯,而非已安装的软件资讯!注意!
SRPM包管理:rpmbuild
rpmbuild --rebuild xxxx 这个选项会将后面的 SRPM 进行『编译』并且『打包』的动作,最后会产生 RPM 的文件。
rpmbuild --recompile xxxx 这个动作会直接的『编译』『打包』并且『安装』。
SRPM包编译的目录:
/root/rpmbuild/SPECS: 这个目录当中放置的是该软件的配置档,例如这个软件的资讯参数、配置项目等等都放置在这里; /root/rpmbuild/SOURCES :这个目录当中放置的是该软件的原始档 (*.tar.gz 的文件) 以及 config 这个配置档; /root/rpmbuild/BUILD :在编译的过程中,有些缓存的数据都会放置在这个目录当中; /root/rpmbuild/RPMS: 经过编译之后,并且顺利的编译成功之后,将打包完成的文件放置在这个目录当中。里头有包含了 i386, i586, i686, noarch.... 等等的次目录。 /root/rpmbuild/SRPMS :与 RPMS 内相似的,这里放置的就是 SRPM 封装的文件罗!有时候你想要将你的软件用 SRPM 的方式释出时, 你的 SRPM 文件就会放置在这个目录中了。
SRPM 自定义编译:除了使用 SRPM 内默认的参数来进行编译之外,我们还可以修改这些参数后再重新编译。
1. 首先我们必须要将 SRPM 内的文件安装到 /root/rpmbuild/ 内的相关目录,
rpm -ivh rp-pppoe-3.5-32.1-src.rpm
2. 然后修改配置文件,也就是 /usr/src/redhat/SPECS 内的 *.spec 文件!
例:在httpd.spec的 %build段:添加
./configure CFLAGS= -DBIG_SECURITY_HOLE - ->让httpd支持以root 权限运行
[root@www SPECS]# vi rp-pppoe.spec
# 1. 首先,这个部分在介绍整个软件的基本相关资讯!不论是版本还是释出次数等。
Summary: A PPP over Ethernet client (for xDSL support).
Name: rp-pppoe
Version: 3.5
Release: 32.1
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. 这部分则是在配置相依属性需求的地方!
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
Prereq: /sbin/chkconfig <==需要的前驱程序有哪些!
Prereq: /sbin/service
Prereq: fileutils
Requires: ppp >= 2.4.2 <==需要的软件又有哪些!
Requires: initscripts >= 5.92
Requires: iproute >= 2.6
BuildRequires: libtool <==还需要哪些工具软件?
BuildRequires: autoconf
BuildRequires: automake
%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 <==这部份在预先 (pre) 进行处理,大致就是 patch 软件啊!
%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 %{buildroot}
mkdir -p %{buildroot}/sbin
make -C src install RPM_INSTALL_ROOT=%{buildroot}
....(中间省略)....
# 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
* Wed Jul 12 2006 Jesse Keating - 3.5-32.1
- rebuild
....(中间省略)....
* Wed May 31 2000 Than Ngo
- adopted for Winston.
要注意到的是 rp-pppoe.spec 这个文件,这是主要的将 SRPM 编译成 RPM 的配置档,他的基本守则可以这样看:
参数 | 参数意义 |
Summary | 本软件的主要说明,例如上表中说明了本软件是针对 xDSL 的拨接用途啦! |
Name | 本软件的软件名称 (最终会是 RPM 文件的档名构成之一) |
Version | 本软件的版本 (也会是 RPM 档名的构成之一) |
Release | 这个是该版本打包的次数说明 (也会是 RPM 档名的构成之一)。由於我们想要动点手脚,所以上头的文件中,这个部分请修改为 32.2.vbird 看看 |
License | 这个软件的授权模式,我们是使用 GPL 啦! |
Group | 这个软件的发展团体名称; |
Url | 这个原始码的主要官方网站; |
Source | 这个软件的来源,如果是网络上下载的软件,通常一定会有这个资讯来告诉大家这个原始档的来源! 此外,还有来自开发商自己提供的原始档数据喔!例如上面的 adsl-start 等程序。 |
Patch | 就是作为补丁的 patch file 罗! |
BuildRoot | 配置作为编译时,该使用哪个目录来缓存中间文件 (如编译过程的目标文件/连结文件等档)。 |
ExclusiveArch | 这个是说明这个软件的适合安装的硬件,通常默认为 i386,当然,你也可以调整为 i586 啦等等的! 由於我们的系统是新的 CPU 架构,这里我们修改内容成为『ExclusiveArch: i686』来玩玩看。 |
上述为必须要存在的项目,底下为可使用的额外配置值 | |
Requires | 如果你这个软件还需要其他的软件的支持,那么这里就必需写上来,则当你制作成 RPM 之后,系统就会自动的去检查啦!这就是『相依属性』的主要来源罗! |
Prereq | 这个软件需要的前驱程序为何!这里指的是『程序』而 Requires 指的是『软件』! |
BuildRequires | 编译过程中所需要的软件。Requires 指的是『安装时需要检查』的,因为与实际运行有关,这个 BuildRequires 指的是『编译时』所需要的软件,只有在 SRPM 编译成为 RPM 时才会检查的项目。 |
Packager | 这个软件是经由谁来打包的呢? |
Vender | 发展的厂商哪; |
配置文件 ****.spec的常用段落:
将你的软件做一个简短的说明!这个也是必需要的。还记得使用『 rpm -qi 软件名称 』会出现一些基础的说明吗? 上面这些东西包括 Description 就是在显示这些重要资讯的啦!所以,这里记得要详加解释喔!
pre 这个关键字原本就有『在...之前』的意思,因此这个项目在这里指的就是『尚未进行配置或安装之前,你要编译完成的 RPM 帮你事先做的事情』,就是 prepare 的简写罗!那么他的工作事项主要有:
在本案例中,你会发现程序会使用 patch 去进行补丁的动作啦!
这个项目就是在进行类似解压缩之类的工作!这个项目一定要写喔!不然你的 tarball 原始码是无法被解压缩的哩!切记切记!
build 就是创建啊!所以当然罗,这个段落就是在谈怎么 make 编译成为可运行的程序罗! 你会发现在此部分的程序码方面,就是 ./configure, make 等项目哩!
编译完成 (build) 之后,就是要安装啦!安装就是写在这里,也就是类似 Tarball 里面的 make install 的意思罗!
编译与安装完毕后,必须要将一些缓存在 BuildRoot 内的数据删除才好, 因此这个时候这个 clean 的项目就重要啦!这有点像是 make clean 的感觉~保持系统的干爽嘛!
这个软件安装的文件都需要写到这里来,当然包括了『目录』喔!所以连同目录请一起写到这个段落当中!以备查验呢!^_^ !此外,你也可以指定每个文件的类型,包括文件档 (%doc 后面接的) 与配置档 (%config 后面接的) 等等。
这个项目主要则是在记录这个软件曾经的升级纪录罗!星号 (*) 后面应该要以时间,修改者, email 与软件版本来作为说明, 减号 (-) 后面则是你要作的详细说明罗!
自定义编译:
修改到这里也差不多了,您也应该要了解到这个 ******.spec 有多么重要!我们用 rpm -q 去查询一堆资讯时, 其实都是在这里写入的!
要将在 /root/rpmbuild 底下的数据编译或者是单纯的打包成为 RPM 或 SRPM 时,就需要 rpmbuild 命令与相关选项的帮忙了!介绍两个常用的选项给您了解一下:
[root@www ~]# rpmbuild -ba rp-pppoe.spec <==编译并同时产生 RPM 与 SRPM 文件
[root@www ~]# rpmbuild -bb rp-pppoe.spec <==仅编译成 RPM 文件
这个时候系统就会这样做:
二:例子:把自己的程序制作成一个rpm包。
1,把自己的程 序打包 放在/root/rpmbuild/SOURCES目录下;
tar -zcvf main-0.1.tar.gz main-0.1 //此包中应该有源码及Makefile
cp main-0.1.tar.gz /root/rpmbuild/SOURCES
2,在/root/rpmbuild/SPECS下创建配置文件;
[root@www SPECS]# vim main.spec
Summary: calculate sin and cos value.
Name: main
Version: 0.1
Release: 1
License: GPL
Group: VBird's Home
Source: main-0.1.tar.gz <==记得要写正确的 Tarball 档名喔!
Url: http://linux.vbird.org
Packager: VBird
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
%description
This package will let you input your name and calculate sin cos value.
%prep
%setup -q
%build
make
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/usr/local/bin
make install RPM_INSTALL_ROOT=%{buildroot} <==这项目也很重要!
%files
/usr/local/bin/main
%changelog
* Wed Jul 01 2009 VBird Tsai 0.1
- build the program
3,编译生成RPM包
rpmbuild -ba main.spec