红联Linux门户
Linux帮助

yum和rpm详解(2楼更新make工作过程和软件包后缀解释)

发布时间:2007-04-30 19:10:31来源:红联作者:karon_fedora
本人水平不高,很多地方写的可能不对,希望大家多提意见。
blog:http://karon.cublog.cn/


本文的目的是仅仅是简单的介绍如何在Fedora下安装运行软件。
基础知识:需要有一点编程知识,至少要了解c语言的编译过程。
所遇到的问题:fedora当中很有软件通常不是安装一个RPM包就可以解决的;很多软件包需要编译,这时软件包所对应的kernel和你c语言lib库版本,甚至你的gcc编译器都有可能影响软件安装。
准备工作:了解所装 fedora内核版本gcc版本
uname -r
2.6.15-1.2054_FC5
gcc -v
gcc 4.1.0 20060304 (Red Hat 4.1.0-3)

A:获取和安装软件包
专门在Fedora和RHEL上运行的软件通常是用RPM格式存储的。大部分的Fedora和RHEL本身就是RPM格式的,那么,如何获得RPM格式的软件包呢?
1:安装CD和DVD--这个方法比较简单,插入CD,进入所在软家包的目录,使用RPM安装就可以,你可以看看CD中的内容
2:Fedora和FHEL官方的软件库--这里是包含了经过Fedora项目认可的软件库,你可以在网络上找到。
下面是Fedora5的官方软件库
http://download.fedora.redhat.com/pub/fedora/linux/core/5/
提供了大量的官方认可的软件包,通常这些都是光盘中已经包含的。
http://download.fedora.redhat.com/pub/fedora/linux/extras/5/
官方提供的额外软件包,他不提供其他任何支持。
3:第三方的Fedora软件库。这些软件由于受到版权或者其他问题,官方软件库并没有提供。但是很有用,譬如你要播放MP3,但是使用他们的时候要注意,因为很可能不够安全。
4:软件项目站点。
有些应用程序本身就是持续开发的项目,他们有自己的站点,这些站点一般都会提供RPM包
下面是WINE项目的站点
http://www.winehq.com/
B:使用yum下载和安装应用程序
Yellow Dog Updater,Modified(yum)可以帮助你从已经配置好的软件库中下载和安装软件包,甚至会考虑到软件包之间的依赖关系。这个是安装软件包最好的方法。
1,配置yum
也就是配置/etc/yum.conf
[main]
cachedir=/var/cache/yum 缓存目录
keepcache=0 确定缓存文件是否要保存
debuglevel=2 调试级别
logfile=/var/log/yum.log 日志文件的位置
pkgpolicy=newest 尝试请求软件包的最新版本
distroverpkg=redhat-release 确定yum所下载的linux发布版本信息
tolerant=1 这个选项表示yum在编译的过程中是否“宽容”,为1的话,yum会忽略很多错误
exactarch=1 这选项在yum更新的时候有用,他用来确定是否在i386上更新i686的软件包,选1的话是不更新(需要设定的功能太多有的时候也很麻烦)
obsoletes=1 这个选项在yum(8)中有详细的介绍,他是一个命令行参数,我们以后可以去看看
gpgcheck=1 是否检查gpg GNU Privacy Guard可以用于加密
plugins=1 是否显示插件,有必要设成1,这选项在默认的时候是0。
metadata_expire=1800

# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
这里所谓的repos其实就是软件库,你可以打开/etc/yum.repos.d看看


C:添加yum软件库
打开/etc/yum.repos.d可以看到软件库 默认的是fedora官方的软件库
[root@localhost documents]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
fedora-core.repo fedora-extras-development.repo fedora-legacy.repo fedora-updates-testing.repo
fedora-development.repo fedora-extras.repo fedora-updates.repo
添加一个软件库的准备工作是要明确你需要添加的软件库的确切位置 GPG密钥,(GNU Private Guard ,一种密钥方法,实现RFC2440 中定义的OpenGPG标准,自由软件,GPG提供命令行形式的应用,可以轻松集成到其它应用程序中)
打开其中一个repo看看
内容解释下
[core]
name=Fedora Core $releasever - $basearch 名字。$releasever其实就是你fedora的版本号,$basearch这个对于我来说就是i386
#baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/$releasever/$basearch/os/ 基本地址
mirrorlist=http://fedora.redhat.com/download/mirrors/fedora-core-$releasever 镜像列表
enabled=1 本repo是否激活
gpgcheck=1 是否启用gpg检查
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora file:///etc/pki/rpm-gpg/RPM-GPG-KEY 这个是GPG密钥的地址

[core-debuginfo]
name=Fedora Core $releasever - $basearch - Debug
baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/$releasever/$basearch/debug/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora file:///etc/pki/rpm-gpg/RPM-GPG-KEY

[core-source]
name=Fedora Core $releasever - Source
baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/$releasever/source/SRPMS/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora file:///etc/pki/rpm-gpg/RPM-GPG-KEY

现在说一下我所知道的yum的方法,还不一定准确,yum会检查baseurl/repodata/repomd.xml,这个索引文件,找不到的会失败的。所以添加软件库的时候要注意一下,特别是第3方软件库

我们现添加一个软件库,就把传说中的rpm.livna.org软件库加进来,嘿嘿O^O
按照上面的格式来写
[livna]
name=livna $releasever - $basearch
baseurl=http://rpm.livna.org/fedora/5/i386/ 当然这里你还可以用http://rpm.livna.org/fedora/$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://rpm.livna.org/RPM-LIVNA-GPG-KEY-i386
保存为livna.repo就可以了。
现在yum install mplayer
下载个mplayer看看 (mplayer对偶这样的家伙很合适,不过就是操作性太差劲了)
注意:1,看看你的所选择的基础地址下面 有灭有/repodata/repomd.xml.
2,gpgkey这个要找对位置,也可以下载到本地文件中。一般是放在file:///etc/pki/rpm-gpg/目录下
现在介绍yum的命令参数
安装
yum install 软件名
列表
yum list I less
查找
yum provides 软件名
单个软件升级
yum update 软件名
全部升级
yum update (这个命令的时间会很长,对于我来说恐怕要一个星期的时间)
删除安装后的软件包
yum clean packages (这个命令会把你存放在/var目录下的包全部删掉)
D:使用yum自动更新。
首先yum是一个服务
[root@localhost ~]# chkconfig --list yum
yum 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
然后我们让他在3和5模式下自动运行
[root@localhost ~]# chkconfig --level 35 yum on
[root@localhost ~]# chkconfig --list yum
yum 0:关闭 1:关闭 2:关闭 3:启用 4:关闭 5:启用 6:关闭
这样你就可以在开机的时候自动运行yum了。(太久没有进行过更新的话不要用这种方法)
E:其他YUM的用法
可以用YUM从安装CD中安装软件
添加一个cd.repo文件,内容如下:
[cd]
name=livna $releasever - $basearch
baseurl=file:///mnt/cdrom 这个是你挂载光驱的目录
enabled=1
gpgcheck=1
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY 这个是GPG密钥。
完成,其实这样做不是很有必要

F:关于RPM的工作方法问题
软件包管理器,其实按照我自己的理解,他就是个类似rarlinux的归档管理器,只不过用有自己特定的释放方式。现在我们找一个例子来实验一下
rpm -Uvv alsaplayer-0.99.76-2.2.fc4.i386.rpm
这个软件包是我随便找的,不必在乎他是是么 -U表示安装,v表示显示信息,vv就表示显示更详细的信息
把显示内容当中对我们有用的挑出来
D: opening db environment /var/lib/rpm/Packages joinenv
D: opening db index /var/lib/rpm/Packages rdonly mode=0x0
D: locked db index /var/lib/rpm/Packages
D: opening db index /var/lib/rpm/Pubkeys rdonly mode=0x0
warning: alsaplayer-0.99.76-2.2.fc4.i386.rpm: Header V3 DSA signature: NOKEY, ke y ID e42d547b
D: opening db index /var/lib/rpm/Providename rdonly mode=0x0
以上应该是打开一个数据库,恩恩恩 就是RPM数据库
D: added binary package [0] 增加一个软件包
D: found 0 source and 1 binary packages 没有源文件,有一个2进制的软件包1
D: opening db index /var/lib/rpm/Depends create mode=0x0
D: opening db index /var/lib/rpm/Basenames rdonly mode=0x0
D: read h# 1166 Header sanity check: OK 读取h# ,貌似是头文件 ,检查h#的需求
D: read h# 161 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: Requires: /bin/sh YES (db files)
D: Requires: /bin/sh YES (cached)
D: read h# 88 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: Requires: libFLAC.so.7 YES (db provides)
D: read h# 95 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: Requires: libGL.so.1 YES (db provides)
D: Requires: libOggFLAC.so.3 YES (db provides)
D: read h# 48 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: Requires: libX11.so.6 YES (db provides)
D: read h# 49 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: Requires: libXext.so.6 YES (db provides)
D: read h# 54 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: Requires: libXi.so.6 YES (db provides)
D: read h# 398 Header V3 DSA signature: OK, key ID 4f2a6fd2
D: Requires: libasound.so.2 YES (db provides)
.
.
.
.
看来h#的要求没有办法被满足,那么输出错误的依赖关系
error: Failed dependencies:
libid3tag.so.0 is needed by alsaplayer-0.99.76-2.2.fc4.i386
libmad.so.0 is needed by alsaplayer-0.99.76-2.2.fc4.i386
libsndfile.so.1 is needed by alsaplayer-0.99.76-2.2.fc4.i386
libsndfile.so.1(libsndfile.so.1.0) is needed by alsaplayer-0.99.76-2.2.f c4.i386
libxosd.so.2 is needed by alsaplayer-0.99.76-2.2.fc4.i386
下面是关闭数据库
D: closed db index /var/lib/rpm/Pubkeys
D: closed db index /var/lib/rpm/Conflictname
D: closed db index /var/lib/rpm/Providename
D: closed db index /var/lib/rpm/Basenames
D: closed db index /var/lib/rpm/Packages
D: closed db environment /var/lib/rpm/Packages
D: May free Score board((nil))
由此我可以粗略的知道RPM的工作方式:
1,打开rpm数据库
2,从.软件包中提取h#,并且检查h#的需要是否被满足?(这里的依赖关系,有的是软件包自己给出的,有的是你系统自带,当然还可能有你没有的。)
是:转第4步 不是:转第3步
3,显示失败的依赖关系
4,安装软件,解压缩软件包,并且放到合适的位置,这里应该是有一定的规则。
5,关闭rpm数据库
显然,我这个软件包不满足依赖关系,如果强制用-force安装的话可能出错误。
如果你失败了,那就少什么补什么...这个么 ?具体的东西么 T^T 以后研究吧
G:使用RPM安装和管理软件包软件包
介绍一下参数.
-U 升级,也包括安装
-F 刷新,就是全体升级,不包括安装
-v 显示详细信息, -vv显示更加详细的信息
-h 显示文件释放的进度
--force 嘿嘿 强制安装,这里强制安装不是忽略依赖关系,而是强制安装老版本或者是旧的软件包
--nodeps 忽略依赖关系,这个不可靠的
--ignorearch 这个连主机构架都可以忽略.真的有用么?
-e 删除软件包
-q 查询软件包
-qa 列出所有已经安装的软件包
-qf file 列出该文件属于那个软件包
-qi 列出软件包的详细信息
-qR 列出所有软件包的倚赖关系
-ql 列出软件包的所有文件
-qd 列出软件包所有的文档
-qc列出软件包所有的配置文件
-qd列出未安装软件包的信息

[ 本帖最后由 karon_fedora 于 2007-5-5 11:16 编辑 ]
文章评论

共有 20 条评论

  1. wl0123abc 于 2009-10-15 22:36:14发表:

    学习!

  2. slayerzlvc 于 2009-10-09 18:34:41发表:

    支持楼主,继续

  3. slayerzlvc 于 2009-10-09 18:34:27发表:

    我觉得像这样的论坛 就要贴这样的帖子。
    像什么桌面图片的帖子实在太多了,不实用

  4. zhangzeg 于 2009-10-08 22:30:20发表:

    学习了

  5. zhangzeg 于 2009-09-19 17:54:50发表:

    学习

  6. ly_chaojilong 于 2009-09-08 15:03:06发表:

    是不错

  7. 神经刀 于 2009-05-05 17:42:54发表:

    顶:0wmjh(1

  8. 泥巴 于 2009-03-27 21:04:20发表:

    关注 !!!!

  9. apple_love 于 2009-03-21 14:35:58发表:

    好贴!干干的!

  10. gxx544041683 于 2008-12-07 16:49:35发表:

    好贴,帮你顶上去!!!

  11. 原子蛋 于 2008-12-06 14:58:25发表:

    (5ty( 我怎么现在才发现!!精!!!

  12. maozhx 于 2008-12-04 11:07:22发表:

    不错啊,应该顶上去:0)1

  13. 藤真 于 2008-06-05 11:11:32发表:

    为什么我现在才看到这个精华呢。。。一直在找没有找到叫经!!大哥你真强!

  14. zhangqi0342 于 2008-05-30 13:21:49发表:

    好贴,帮你顶上去!!!

  15. michaelc21 于 2008-05-30 12:32:28发表:

    学习, 尊敬。

    谢谢。

  16. hongling1122 于 2007-07-23 10:32:07发表:

    很多人在看啊……我也在关注哦!

  17. 唐军 于 2007-07-20 09:35:50发表:

    好贴:0L :0L

  18. Subbo 于 2007-05-05 13:26:51发表:

    不错不错,定一个。加精华。

  19. karon_fedora 于 2007-05-05 11:13:59发表:

    终于有人看了

    继续呈上,软件编译make过程,软件包编译必备工具和软件包复杂后缀解释方法

    关于make运作方式
    我们通常用make来安装软件,那么make都作了什么呢?进入一个源代码目录名为rar
    make > info.txt
    看看我们的make都干了些什么?
    cat info.txt
    mkdir -p /usr/local/bin -p表示需要时创建上级目录,目录存在的时候不做错误处理。
    mkdir -p /usr/local/lib
    cp rar unrar /usr/local/bin
    cp rarfiles.lst /etc
    cp default.sfx /usr/local/lib
    再看看,rar文件夹中makfile文件中都有些什么?
    cat Makefile
    PREFIX=/usr/local 这是shell变量.

    install:
    mkdir -p $(PREFIX)/bin
    mkdir -p $(PREFIX)/lib
    cp rar unrar $(PREFIX)/bin
    cp rarfiles.lst /etc
    cp default.sfx $(PREFIX)/lib
    很像吧,没错,因为make是按照一定的规则去完成配置文件中的内容。这个配置文件默认的名字是makefile,当然也可以变。这个配置文件对于我来说不需要会写,但是总要读的懂。
    了解下make命令的基本参数:偶不是编程的,捡有用的说。
    -c dir 这个是make工作的路径,默认是当然路径。
    -f filename 这个用指定的文件作为配置文件,默认是makefile。
    -d 打印debug信息
    在这个例子中我们可以知道make的工作方式,这对于从源代码运行程序是很有用的。

    介绍一下可以用来搞定安装的全部工具。
    gcc-这个是编译器
    make-包含从makefiles产生二进制文件的make命令,当然还有其他的一些功能。
    glibc-重要的共享库,c库和基本的数学库。没有这个连系统都没有办法运行。
    glibc-devel-包含了创建可执行文件所需要的标准头文件。
    binutils-包含编译程序需要的使用工具,主要是汇编和链接程序。
    kernel-source-包含内核源代码
    libc-包含libc5,而上面我们提到的glibc是linc6
    .
    关于软件包。
    linux下你可以发现的软件包,会有不同的格式,这很讨厌,但是他可以让你知道,这些开源项目是在什么环境开发和编译出来的,支持什么。
    搜集一下
    filename-4.2.3.i386.rpm 这个表示可以用rpm来安装,我们最喜欢的方式。
    filename-4.2.3.tar.gz 这个表示用gz压缩,用tar归档,至于是什么,那就不知道了
    filename-4.2.3.src.tar.gz 这个表示用gz压缩,用tar归档,内容是源代码
    filename-4.2.3.bin.SPARC.tar.gz 这个是表示用gz压缩,用tar归档,可以在SPARC工作站上运行,的2进制代码。
    filename-4.2.3.bin.ELF.static.tar.gz 这个表示用gz压缩,用tar归档,由静态连接的FLF的可执行文件组成的2进制文件。
    4.2.3 表示第4版,第2个补丁,第3次修改。
    全面的说一下。
    rpm.有这个后缀表示是fedora使用的2进制文件,这个不是说里面的内容2进制的,而是说他可以被fedora的软件管理器使用。可以用归档文件管理器把他打开。
    tar.这个是用tar归档,使用tar 命令打开
    gz.和z.这个是说用gzip压缩的,用gzip命令打开
    tgz.这个扩展名和以上的结合,容易搞定
    bz2.用bzip2压缩的,可以用bip2命令打开
    taz.和tz.这个表示用tar压缩,也用tar命令打开
    lsm.这个通常是介绍归档内容的文本,可以和软件包一起下载。
    deb.这个同rpm但是用于Debian
    如果你不能肯定格式的话,可以用file命令来确定.
    好了,现在你可以把源文件从任何软包中掏出来

  20. lazyhaha 于 2007-05-05 11:01:02发表:

    :0L

    这样的好帖一定要顶!