所讲内容:
rpm软件包管理
yum安装软件包
源码编译安装软件包
安装srpm软件包
一、 rpm软件包管理
1、什么是rpm
rpm是RPM Package Manager(RPM软件包管理器)的缩写,一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中,它生成具有.RPM扩展名的文件,现在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用。
2、rpm的主要功能
安装、卸载、升级和管理软件
组件查询功能
验证功能
软件包GPG和MD5数字签名的导入、验证和发布
软件包依赖处理
选择安装
网络远程安装功能
3、rpm命令参数介绍
-e 卸载rpm包
-q 查询已安装的软件信息
-i 安装rpm包
-u 升级rpm包
--replacepkgs 重新安装rpm包
--justdb 升级数据库,不修改文件系统
--percent 在软件包安装时输出百分比
--help 帮助
--version 显示版本信息
-c 显示所有配置文件
-d 显示所有文档文件
-h 显示安装进度
-l 列出软件包中的文件
-a 显示出文件状态
-p 查询/校验一个软件包文件
-v 显示详细的处理信息
--dump 显示基本文件信息
--nomd5 不验证文件的md5支持
--nofiles 不验证软件包中的文件
--nodeps 不验证软件包的依赖关系
--whatrequires 查询/验证需要一个依赖性的软件包
--whatprovides 查询/验证提供一个依赖性的软件包
一般在日常使用时,以上参数都是配合使用,以下为一些常用参数
-ivh:安装显示安装进度
-Uvh:升级软件包-
-qpl:列出RPM软件包内的文件信息
-qpi:列出RPM软件包的描述信息
-qf:查找指定文件属于哪个RPM软件包
-Va:校验所有的RPM软件包,查找丢失的文件
-e:删除包
4、rpm使用
4.1初始化rpm数据库
在安装和查询某个包时,是需要通过查询rpm数据库来完成的,下面两个为rpm数据库初始化命令
[root@localhost ~]# rpm �Cinitdb ##rpm数据库初始化 [root@localhost ~# rpm �Crebuilddb ##重新构建rpm数据库。这个操作需要时间较长
如果rpm无法正常使用,可以通过这两个命令来解决
4.2rpm查询功能
命令格式
rpm {-q|--query} [select-options] [query-options]
4.2.1查询系统已经安装的软件
语法:rpm -q 软件名
例:
[root@localhost ~]# rpm -q lrzsz lrzsz-0.12.20-27.1.el6.x86_64
如果输出软件包名称,则软件包已安装,输出lrzsz没有安装,说明软件包没有安装
4.2.2查询系统所有已经安装的包
语法:rpm �Cqa
例:
[root@localhost~]# rpm �Cqa
此命令会把系统所有安装的包都列出来,可以配合管道命令过滤出某个软件
4.2.3查询一个已经安装的文件属于哪个软件包
语法:rpm -qf 文件名 ###文件名需要写绝对路径
例:
[root@localhost ~]# rpm -qf /usr/bin/which which-2.19-6.el6.x86_64
4.2.4查询已安装软件包都安装到何处
语法:rpm -ql 软件名 或 rpm rpmquery -ql 软件名
例:
[root@localhost ~]# rpm -ql which /etc/profile.d/which2.sh /usr/bin/which /usr/share/doc/which-2.19 /usr/share/doc/which-2.19/AUTHORS /usr/share/doc/which-2.19/COPYING /usr/share/doc/which-2.19/EXAMPLES /usr/share/doc/which-2.19/NEWS /usr/share/doc/which-2.19/README /usr/share/info/which.info.gz /usr/share/man/man1/which.1.gz 或 [root@localhost ~]# rpmquery -ql which /etc/profile.d/which2.sh /usr/bin/which /usr/share/doc/which-2.19 /usr/share/doc/which-2.19/AUTHORS /usr/share/doc/which-2.19/COPYING /usr/share/doc/which-2.19/EXAMPLES /usr/share/doc/which-2.19/NEWS /usr/share/doc/which-2.19/README /usr/share/info/which.info.gz /usr/share/man/man1/which.1.gz
4.2.5查询一个已安装软件包的信息
语法:rpm -qi 软件名
例:
[root@localhost ~]# rpm -qi which Name : which Relocations: (not relocatable) Version : 2.19 Vendor: CentOS Release : 6.el6 Build Date: Fri 23 Sep 2011 06:47:56 PM CST Install Date: Wed 13 May 2015 11:23:39 AM CST Build Host: c6b18n1.dev.centos.org Group : Applications/System Source RPM: which-2.19-6.el6.src.rpm Size : 73004 License: GPLv3 Signature : RSA/SHA1, Mon 26 Sep 2011 12:26:13 PM CST, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://www.xs4all.nl/~carlo17/which/ Summary : Displays where a particular program in your path is located Description : The which command shows the full pathname of a specified program, if the specified program is in your PATH.
4.2.6查看一下已安装软件的配置文件
语法:rpm -qc 软件名
例:
[root@localhost ~]# rpm -qc ntp /etc/ntp.conf /etc/ntp/crypto/pw /etc/sysconfig/ntpd
4.2.7查看一个已经安装软件的文档安装位置
语法:rpm -qd 软件名
例:
[root@localhost ~]# rpm -qd ntp /usr/share/doc/ntp-4.2.6p5/COPYRIGHT /usr/share/doc/ntp-4.2.6p5/ChangeLog /usr/share/doc/ntp-4.2.6p5/NEWS /usr/share/man/man5/ntp.conf.5.gz /usr/share/man/man5/ntp_acc.5.gz /usr/share/man/man5/ntp_auth.5.gz /usr/share/man/man5/ntp_clock.5.gz /usr/share/man/man5/ntp_decode.5.gz /usr/share/man/man5/ntp_misc.5.gz /usr/share/man/man5/ntp_mon.5.gz /usr/share/man/man8/ntp-keygen.8.gz /usr/share/man/man8/ntpd.8.gz /usr/share/man/man8/ntpdc.8.gz /usr/share/man/man8/ntpq.8.gz /usr/share/man/man8/ntpstat.8.gz /usr/share/man/man8/ntptime.8.gz /usr/share/man/man8/tickadj.8.gz
4.2.8查看一下已安装软件所依赖的软件包及文件
语法:rpm -qR 软件名
例:
[root@localhost ~]# rpm -qR ntp /bin/bash /bin/sh /bin/sh /bin/sh /sbin/chkconfig /sbin/chkconfig /sbin/service /sbin/service config(ntp) = 4.2.6p5-1.el6.centos libc.so.6()(64bit) libc.so.6(GLIBC_2.11)(64bit) libc.so.6(GLIBC_2.12)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit) libc.so.6(GLIBC_2.7)(64bit) libcap.so.2()(64bit) libcrypto.so.10()(64bit) libcrypto.so.10(OPENSSL_1.0.1)(64bit) libcrypto.so.10(libcrypto.so.10)(64bit) libedit.so.0()(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) librt.so.1()(64bit) librt.so.1(GLIBC_2.2.5)(64bit) ntpdate = 4.2.6p5-1.el6.centos rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rtld(GNU_HASH) rpmlib(PayloadIsXz) <= 5.2-1
以上是对已安装软件的查询,下面介绍对未安装软件包的查询
4.2.9查看一个软件包的用途、版本等信息
语法:rpm -qpi file.rpm
例:
[root@localhost Packages]# rpm -qpi zlib-1.2.3-29.el6.x86_64.rpm Name : zlib Relocations: (not relocatable) Version : 1.2.3 Vendor: CentOS Release : 29.el6 Build Date: Fri 22 Feb 2013 07:02:17 AM CST Install Date: (not installed) Build Host: c6b9.bsys.dev.centos.org Group : System Environment/Libraries Source RPM: zlib-1.2.3-29.el6.src.rpm Size : 152305 License: zlib and Boost Signature : RSA/SHA1, Sun 24 Feb 2013 01:41:52 AM CST, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://www.gzip.org/zlib/ Summary : The zlib compression and decompression library Description : Zlib is a general-purpose, patent-free, lossless data compression library which is used by many different programs.
4.2.10查看一件软件包所包含的文件
语法:rpm -qpl file.rpm
例:
[root@localhost Packages]# rpm -qpl zlib-1.2.3-29.el6.x86_64.rpm /lib64/libz.so.1 /lib64/libz.so.1.2.3 /usr/share/doc/zlib-1.2.3 /usr/share/doc/zlib-1.2.3/ChangeLog /usr/share/doc/zlib-1.2.3/FAQ /usr/share/doc/zlib-1.2.3/README
4.2.11查看软件包的文档所在的位置
语法:rpm -qpd file.rpm
例:
[root@localhost Packages]# rpm -qpd zlib-1.2.3-29.el6.x86_64.rpm /usr/share/doc/zlib-1.2.3/ChangeLog /usr/share/doc/zlib-1.2.3/FAQ /usr/share/doc/zlib-1.2.3/README
4.2.12查看一个软件包的配置文件
语法:rpm -qpc file.rpm
例:
[root@localhost Packages]# rpm -qpc httpd-2.2.15-29.el6.centos.x86_64.rpm /etc/httpd/conf.d/welcome.conf /etc/httpd/conf/httpd.conf /etc/httpd/conf/magic /etc/logrotate.d/httpd /etc/sysconfig/htcacheclean /etc/sysconfig/httpd /var/www/error/HTTP_BAD_GATEWAY.html.var /var/www/error/HTTP_BAD_REQUEST.html.var /var/www/error/HTTP_FORBIDDEN.html.var /var/www/error/HTTP_GONE.html.var /var/www/error/HTTP_INTERNAL_SERVER_ERROR.html.var /var/www/error/HTTP_LENGTH_REQUIRED.html.var /var/www/error/HTTP_METHOD_NOT_ALLOWED.html.var /var/www/error/HTTP_NOT_FOUND.html.var /var/www/error/HTTP_NOT_IMPLEMENTED.html.var /var/www/error/HTTP_PRECONDITION_FAILED.html.var /var/www/error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var /var/www/error/HTTP_REQUEST_TIME_OUT.html.var /var/www/error/HTTP_REQUEST_URI_TOO_LARGE.html.var /var/www/error/HTTP_SERVICE_UNAVAILABLE.html.var /var/www/error/HTTP_UNAUTHORIZED.html.var /var/www/error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var /var/www/error/HTTP_VARIANT_ALSO_VARIES.html.var /var/www/error/contact.html.var /var/www/error/include/bottom.html /var/www/error/include/spacer.html /var/www/error/include/top.html
4.2.13查看一个软件包的依赖关系
语法:rpm -qpR file.rpm
例:
[root@localhost Packages]# rpm -qpR httpd-2.2.15-29.el6.centos.x86_64.rpm /bin/bash /bin/sh /bin/sh /bin/sh /bin/sh /bin/sh /etc/mime.types /usr/sbin/useradd apr-util-ldap chkconfig config(httpd) = 2.2.15-29.el6.centos httpd-tools = 2.2.15-29.el6.centos initscripts >= 8.36 libapr-1.so.0()(64bit) libaprutil-1.so.0()(64bit) libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit) libcrypt.so.1()(64bit) libdb-4.7.so()(64bit) libexpat.so.1()(64bit) liblber-2.4.so.2()(64bit) libldap-2.4.so.2()(64bit) libm.so.6()(64bit) libpcre.so.0()(64bit) libpthread.so.0()(64bit) libpthread.so.0(GLIBC_2.2.5)(64bit) libselinux.so.1()(64bit) libz.so.1()(64bit) rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(VersionedDependencies) <= 3.0.3-1 rtld(GNU_HASH) system-logos >= 7.92.1-1 rpmlib(PayloadIsXz) <= 5.2-1
5、软件包的安装、升级、删除等
5.1安装一个rpm 包
语法:rpm -vih file.rpm ##安装过程中,如果有依赖包,则会提示需要先安装依赖包
例:
[root@localhost Packages]# rpm -ivh httpd-2.2.15-29.el6.centos.x86_64.rpm error: Failed dependencies: apr-util-ldap is needed by httpd-2.2.15-29.el6.centos.x86_64 httpd-tools = 2.2.15-29.el6.centos is needed by httpd-2.2.15-29.el6.centos.x86_64
如果想强制安装http包不考虑依赖关系,则可以使用以下方式
[root@localhost Packages]# rpm -ivh httpd-2.2.15-29.el6.centos.x86_64.rpm --nodeps --force Preparing... ########################################### [100%] 1:httpd ########################################### [100%] 这样安装的软件有可能不可用或出现其他问题,不建议加―nodeps(不检查依赖关系)和―force(强制)参数
5.2升级一个rpm包
语法:rpm -Uvh file.rpm ##升级时有些软件也需要依赖包
例:
[root@localhost Packages]# rpm -Uvh httpd-2.2.15-29.el6.centos.x86_64.rpm error: Failed dependencies: apr-util-ldap is needed by httpd-2.2.15-29.el6.centos.x86_64 httpd-tools = 2.2.15-29.el6.centos is needed by httpd-2.2.15-29.el6.centos.x86_64
5.3删除一个rpm 包
语法:rpm �Ce软件包名 ##卸载某些软件时会提示先卸载依赖包,这时可以增加―force参数来强制卸载
例:
[root@localhost Packages]# rpm -e httpd
5.4下面介绍一些在安装中不常使用的参数,仅供参考,在实际中用到比较少
--replacepkgs 参数是以已安装的软件再安装一次
--test 参数用来检查依赖关系,并不是真正的安装
--oldpackage 参数由新版本降级为旧版本
-relocate 参数为软件包指定安装目录
6、导入签名
有些安装包在安装时会出现nokey提示,这时因为安装包没有签名导致
语法:rpm --import 签名文件
例:
[root@localhost ~]# rpm --import RPM-GPG-KEY [root@localhost ~]# rpm --import RPM-GPG-KEY-fedora
还有其他的一些参数介绍,请详见man rpm
二、 yum管理软件包
1、 什么是yum
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
2、 yum源分类
本地yum源:使用光盘或光盘镜像,速度快,稳定,推荐使用
网络yum源:软件包全,较本地源软件包版本新,速度比较慢
3、 配置本地yum源
[root@xuegod63 Packages]# cd /etc/yum.repos.d/ [root@xuegod63 yum.repos.d]# cp rhel-source.repo rhel-source.repo.back ##备份源文件 [root@xuegod63 yum.repos.d]# mount /dev/cdrom /mnt/ ##挂载光盘 [root@xuegod63 yum.repos.d]# cat rhel-source.repo [rhel-source] ##用于区分不同的软件包库,此项唯一 name=Red Hat Enterprise Linux $releasever - $basearch �C Source ##关于此软件包库的描述 baseurl=file:///mnt/ ##源存放目录 enabled=1 ##是否开启,1为开启,0为关闭 gpgcheck=0 ##是否检查签名 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release ##签名地址
4、 配置网络yum源
新安装的操作系统,在/etc/yum.repos.d/目录下已经配置好了yum源,在服务器联网的情况下,可用直接使用yum安装常用软件,不需要另外设置。
但是,某些特殊的软件包不在网络yum源的目录下,使用服务器自带的yum源无法安装,同时,考虑到下载速度等原因,这时就需要安装其他yum源。
这里我们用163的yum源来举例:
[root@xuegod63 Packages]# cd /etc/yum.repos.d/ [root@xuegod63 yum.repos.d]# cp rhel-source.repo rhel-source.repo.back [root@xuegod63 yum.repos.d]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo [root@xuegod63 yum.repos.d]#yum makecache ##更新缓存中的yum配置,使新加入进来的yum源生效
5、 yum使用
5.1安装单个或多个包
语法:yum install软件名1 软件名2 …. [-y] ##安装时可以加上-y参数,下载后直接安装,如果没有-y参数,则会先把软件包下载下来,根据输入结果判断是否安装
例:
[root@xuegod63 ~]#yum install httpd �Cy ##安装单个包 或 [root@xuegod63 ~]#yum install httpd vsftpd �Cy ##安装多个包
5.2安装一组软件包
语法:yum groupinstall 组名 [-y]
例:
[root@xuegod63 ~]#yum groupinstall "Development tools" �Cy
5.3 删除软件
语法:yum remove 软件名 [-y]
例:
[root@xuegod63 ~]#yum remove httpd -y
5.4其他参数介绍
yum clean all #清除yum缓存 yum list #显示所有已经安装和可以安装的程序包 yum list httpd #通过list中查找httpd yum search zsh #通过zsh关键字查找 yum provides httpd #查看httpd包详细信息 yum makecache #更新缓存中的yum配置
5.5将缓存中下载的安装包,保存到本地
使用yum安装的软件包,下载的软件包只会存在缓存中,在安装成功后将会删除缓存中的软件包,那么如何将下载的软件包也在本地上保存一份呢?
[root@xuegod63 ~]#vim /etc/yum.conf ##编辑yum的配置文件 keepcache=1 ##把这个选项的值设成1
这样,下载时缓存中的软件包就会默认保存到/var/cache/yum目录下,当服务器没有网络连接时,也可以使用缓存模式的yum安装软件,只需要在yum后加入-c参数。
例如:
[root@xuegod63 ~]#yum �Cc install httpd ###在缓存yum模式安装httpd软件
三、源码编译安装软件包
前提:系统必须安装:开发工具、开发库。
步骤:
1 获得源码包
2 解压
3 配置,检测安装环境
#./configure #检查安装环境是否符合需求 ,如果没有问题,生成:Makefile文件
4 编译
#make (编译时会读取Makefile文件)
5 安装
#make install
【例】安装软件包extundelete-0.2.4.tar.bz2
[root@xuegod63 ~]# tar jxvf extundelete-0.2.4.tar.bz2 ##解压 [root@xuegod63 extundelete-0.2.4]# ./configure ##配置 Configuring extundelete 0.2.4 configure: error: Can't find ext2fs library ##报错,缺少ext2fs库文件 [root@xuegod63 ~]# rpm -ivh /mnt/Packages/e2fsprogs-devel-1.41.12-11.el6.x86_64.rpm ##安装这个软件包就会安装缺少的库文件 [root@xuegod63 extundelete-0.2.4]# ./configure ##重新配置 [root@xuegod63 extundelete-0.2.4]#make ##编译,make clean 清除make后产生的文件 [root@xuegod63 extundelete-0.2.4]#make install ##安装
6 删除已安装的软件
[root@xuegod63 extundelete-0.2.4]# pwd /root/extundelete-0.2.4 [root@xuegod63 extundelete-0.2.4]# make uninstall ##删除已安装的软件包
说明:不过多有时删除不干净,所以建议大家安装时,在configure步骤添加一个: --prefix 参数。这样删除或备份时,直接对删除这个目录操作就可以了。
指定安装路径:
[root@xuegod63 extundelete-0.2.4]# ./configure --prefix=/usr/local/extundelete [root@xuegod63 extundelete-0.2.4]# make && make install ##编译成功后安装 cd /usr/local/extundelete/
软件安装方法特点:
rpm+yum:方便,软件版本低。稳定性好、管理方便。性能稍差。
手动:麻烦,软件版本新。稳定性稍差、管理稍差。性能好。
四、安装src源码包
1、查看操作系统版本
[root@xuegod63 ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.2 (Santiago) [root@xuegod63 ~]# uname -m x86_64
2、编译src源码包
[root@xuegod63 ~]#rpmbuild --rebuild lrzsz-0.12.20-27.1.el6.src.rpm #根据将src.rpm中源码文件编译成可执行的二进制文件。若顺利执行成功则会在root用户家目录下生成一个 rpmbuild目录。
在/root/rpmbuild/RPMS/x86_64/目录下生成lrzsz-0.12.20-27.1.el6.x86_64.rpm这个rpm文件。
3、安装
接下来就是rpm的安装过程。
[root@xuegod63 ~]#rpm -ivh rpmbuild/RPMS/x86_64/lrzsz-0.12.20-27.1.el6.x86_64.rpm
学神-IT-教育51cto技术交流群:468845589 快来上我们公开课吧!
学神MK老师:1273815479
学神ZY老师:3054384936
学神IT-1508-立伟提供