您的位置:首页 > 产品设计 > 产品经理

YUM ,RPM ,SRPM 包使用

2013-10-15 17:27 239 查看
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 <jkeating@redhat.com> - 3.5-32.1
- rebuild
....(中间省略)....
* Wed May 31 2000 Than Ngo <than@redhat.de>
- adopted for Winston.


要注意到的是 rp-pppoe.spec 这个文件,这是主要的将 SRPM 编译成 RPM 的配置档,他的基本守则可以这样看:


整个文件的开头以Summary为开始,这部份的配置都是最基础的说明内容;
然后每个不同的段落之间,都以%来做为开头,例如%prep与%install等; 
配置文件 ***.spec 内的参数:

参数参数意义
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的常用段落:

%description:

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

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

进行软件的补丁 (patch) 等相关工作;
寻找软件所需要的目录是否已经存在?确认用的!
事先创建你的软件所需要的目录,或者事先需要进行的任务;
如果待安装的Linux系统内已经有安装的时候可能会被覆盖掉的文件时,那么就必需要进行备份(backup)的工作了!
在本案例中,你会发现程序会使用 patch 去进行补丁的动作啦!

%setup:
这个项目就是在进行类似解压缩之类的工作!这个项目一定要写喔!不然你的 tarball 原始码是无法被解压缩的哩!切记切记!

%build:
build 就是创建啊!所以当然罗,这个段落就是在谈怎么 make 编译成为可运行的程序罗! 你会发现在此部分的程序码方面,就是 ./configure, make 等项目哩!

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

%clean:
编译与安装完毕后,必须要将一些缓存在 BuildRoot 内的数据删除才好, 因此这个时候这个 clean 的项目就重要啦!这有点像是 make clean 的感觉~保持系统的干爽嘛!

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

%changelog:
这个项目主要则是在记录这个软件曾经的升级纪录罗!星号 (*) 后面应该要以时间,修改者, 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 文件


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

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

依照 *.spec 文件内的 Name 与 Version 定义出工作的目录名称,以我们上面的例子为例,那么系统就会在 BUILD 目录中先删除 rp-pppoe-3.5 的目录,再重新创建一个 rp-pppoe-3.5 的目录,并进入该目录;

在新建的目录里面,针对 SOURCES 目录下的来源文件,也就是 *.spec 里面的 Source 配置的那个文件,以 tar 进行解压缩,以我们这个例子来说,则会在 /root/rpmbuild/BUILD/rp-pppoe-3.5 当中,将 /root/rpmbuild/SOURCES/rp-pppoe-3.5.tar.gz 进行解压缩啦!

再来开始 %build 及 %install 的配置与编译!

最后将完成打包的文件给他放置到该放置的地方去,如果你的规定的硬件是在 i386 的系统,那么最后编译成功的 *.i386.rpm文件就会被放置在 /root/rpmbuild/RPMS/i386 里面罗!如果是 i686 那么自然就是 /root/rpmbuild/RPMS/i686 目录下罗! 

二:例子:把自己的程序制作成一个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 <vbird@mail.vbird.idv.tw> 0.1
- build the program


3,编译生成RPM包

rpmbuild  -ba  main.spec
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: