Linux的程序安装和包管理

一、源代码安装

早期,Linux下的程序安装是一件非常讲究技巧和耐心的事情,因为大多数软件仅仅提供编译源码。安装软件需要编译下载到的源代码,并且安装的时候,要解决很多的依赖关系。因为Linux的设计原则就是由众多单一功能软件组成,所以很多软件,需要依赖系统或者其他第三方软件提供的功能(库)。软件依赖关系简单的还好对付,当软件依赖关系复杂甚至循环依赖等,就会给系统管理人员带来巨大的管理维护难度。

(一)源码安装的优缺点

提供源代码安装虽然困难,但是它也有优点,而这些优点是非源码编译方法不具备的。

源代码编译安装的优点:

  • 一份源码,四处编译

开发者只需要提供一份源代码,就可以在任何具备条件的编译环境下,本地编译安装,完全根据本机自身CPU特性度身定做的。这样编译出来的二进制程序,能最大发挥CPU的指令能力,使程序运行具有更高的效率。

  • 定制化安装

安装过程中,可以按照需求,设定选项参数进行安装

源代码编译安装的缺点:

  • 优点其实也就是缺点,源代码编译需要安装者有很多的知识、有很强的技能,甚至很好的耐心才能安装好一个软件。
  • 而且软件升级后,有可能导致依赖库的版本过低,或者依赖库升级,导致软件不能使用较新的库而运行失败。
  • 卸载时,如何能将安装时产生的文件删除干净,同时也要解决依赖关系,不能把其它软件正在使用的库卸载。
  • 运维时,对于批量安装,源代码编译方法就显得效率低下。

(二)举例

以安装nginx为例。nginx依赖pcre(Perl Compatible Regular Expressions),它是包括 perl 兼容的正则表达式库。

1、下载pcre-8.35.tar.bz2源代码并安装
 
[[email protected] pcre-8.35]# ./configure    
[[email protected] pcre-8.35]# make     
[[email protected] pcre-8.35]# make install     
Libraries have been installed in:     
   /usr/local/lib
 
2、去官网下载nginx-1.6.0.tar.gz,目前这个版本是稳定版。解压缩后,运行configure。
 
[[email protected] media]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf    
失败,提示没有安装zlib,这里需要安装的是zlib的开发库。编译安装需要安装库的开发包,一般分包名上会包含devel。安装的时候可能会提示需要公钥没有安装成功,可以使用--nogpgcheck选项。安装使用yum。
 
[[email protected] nginx-1.6.0]# yum install zlib-devel --nogpgcheck
 
3、开始nginx的安装
 
[[email protected] nginx-1.6.0]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf    
[[email protected] nginx-1.6.0]# make     
[[email protected] nginx-1.6.0]# make install
 
4、安装完成,开始测试一下,找到/usr/local/nginx/sbin/nginx,运行后报错了。
 
[[email protected] ~]# /usr/local/nginx/sbin/nginx    
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
 
5、提示很简单,就是找不到库了,库在/usr/local/lib/libpcre.so.1。
 
解决办法有两个:
 
1)符号链接
 
32位:[[email protected] pcre]# ln -s /usr/local/lib/libpcre.so.1 /lib    
64位:[[email protected] pcre]# ln -s /usr/local/lib/libpcre.so.1 /lib64
 
2)导出lib
 
[[email protected] ~]# cd /etc/ld.so.conf.d/
 
[[email protected] ld.so.conf.d]# vim nginx-x86_64.conf
 
建立一个文件nginx-x86_64.conf,在其中添加一行,/usr/local/lib,保存退出。    
[[email protected] ld.so.conf.d]# ldconfig –v
 
使用ldconfig命令重新读取配置文件

二、RPM安装

为了解决源代码安装带来的问题,在生产环境中提高工作效率,就亟需一种方法或者工具来改善现状。

首先出现的是早期Slackware中的打包文件,就是把文件简单打包压缩,解压时会放置在目标位置,优点类似Windows绿色软件安装。这种安装本质上基于压缩解压缩的简单管理方式,不能解决软件安装中的依赖关系问题,软件卸载也是问题。

之后,著名的Linux发行版Debian上率先出现了一种软件包管理器dpkg(Debian Package Management)和其前端工具APT,它很好的解决了二进制包的安装问题。

随后,在Red Hat上也出现了类似的软件包管理器,叫做rpm(Redhat Package Management)。rpm使用了一个以.rmp为扩展名的特殊文件,即软件包文件。rpm提供了叫做rmp的管理程序和其它相关的工具程序,以实现查询、安装、升级、更新和删除rpm软件包文件。 rpm将安装过的软件信息,例如软件的版本号码、作者、发行单位、内容、文件路径等信息,保存在数据库中。数据库使用Berkeley DB,在RHEL中这个数据库放在/var/lib/rpm目录下。 rpm软件包文件,里面封装了软件的二进制程序、配合文件、说明文件、链接库以及源代码等。二进制程序是编译好的文件,它必须与安装目标机器的CPU架构相兼容。

(一)rpm软件包文件的命名规则:

PACKAGE_NAME-VERSION-RELEASE.ARCH.rpm

PACKAGE_NAME 软件包名称
VERSION 软件版本号
RELEASE 软件包的发行号
ARCH 适用硬件平台,常见i386、x86_64、alpha、noarch

(二)rpm的常用命令

命令 说明
rpm -i PACKAGE_FILE ... 安装指定的包文件
rpm -U PACKAGE_FILE ... 用指定的包文件升级同名包

rpm -e [--nodeps] [--noscripts]            
            [--test] PACKAGE_NAME ...

删除指定的软件包
rpm –q PACKAGE_NAME 查询指定包名的包是否安装
rpm -qa 查看系统中安装的所有包
rpm –qf /path/to/file 查看指定文件所属的软件包
rpm –qi PACKAGE_NAME 查看已安装包的描述信息
rpm –ql PACKAGE_NAME 查看已安装包里所包含的文件
rpm –qc PACKAGE_NAME 产看已安装包的配置文件位置
rpm –qd PACKAGE_NAME 查看已安装包的文档安装位置
rpm –q --scripts PACKAGE_NAME 查看已安装包的脚本安装位置
rpm –qpi PACKAGE_FILE 查看未安装包文件的描述信息
rpm –qpl PACKAGE_FILE 查看未安装包文件里所包含的文件
rpm –qpc PACKAGE_FILE 产看未安装包文件的配置文件位置
rpm –qpd PACKAGE_FILE 查看未安装包文件的文档安装位置
rpm –V PACKAGE_NAME 校验指定的软件包
rpm –V /path/to/file 校验包含指定文件的软件包
rpm --initdb 当/var/lib/rpm下无数据库时执行创建数据库
rpm --rebuilddb 重建/var/lib/rpm下数据库
rpm --import /path/to/pubkeyfile 导入指定的公钥文件
rpm -K PACKAGE_FILE 检查指定包文件的GNUPG签名

(三)举例

1、查看是否安装zlib开发库
 
[[email protected] ~]# rpm -q zlib    
zlib-1.2.3-29.el6.x86_64     
[[email protected] ~]# rpm -q zlib-devel     
package zlib-devel is not installed
 
2、把CentOS的光盘挂载后,安装zlib-devel
 
[[email protected] ~]# ls /mnt/cdrom/Packages/ | grep zlib     
zlib-1.2.3-29.el6.i686.rpm     
zlib-1.2.3-29.el6.x86_64.rpm     
zlib-devel-1.2.3-29.el6.i686.rpm     
zlib-devel-1.2.3-29.el6.x86_64.rpm     
[[email protected] ~]# rpm -i /mnt/cdrom/Packages/zlib-devel-1.2.3-29.el6.x86_64.rpm     
 
3、查看安装后的信息
 
[[email protected] ~]# rpm -q zlib-devel     
zlib-devel-1.2.3-29.el6.x86_64     
[[email protected] ~]# rpm -qi zlib-devel     
Name        : zlib-devel                   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: Thu 24 Jul 2014 07:54:10 AM CST      Build Host: c6b9.bsys.dev.centos.org     
Group       : Development/Libraries         Source RPM: zlib-1.2.3-29.el6.src.rpm     
Size        : 117496                           License: zlib and Boost     
Signature   : RSA/SHA1, Sun 24 Feb 2013 01:40:28 AM CST, Key ID 0946fca2c105b9de     
Packager    : CentOS BuildSystem <;http://bugs.centos.org>     
URL         : http://www.gzip.org/zlib/     
Summary     : Header files and libraries for Zlib development     
Description :     
The zlib-devel package contains the header files and libraries needed     
to develop programs that use the zlib compression and decompression     
library.     
[[email protected] ~]# rpm -ql zlib-devel     
/usr/include/zconf.h     
/usr/include/zlib.h     
/usr/lib64/libz.so     
/usr/lib64/pkgconfig/zlib.pc     
/usr/share/doc/zlib-devel-1.2.3     
/usr/share/doc/zlib-devel-1.2.3/README     
/usr/share/doc/zlib-devel-1.2.3/algorithm.txt     
/usr/share/doc/zlib-devel-1.2.3/example.c     
/usr/share/doc/zlib-devel-1.2.3/minigzip.c     
/usr/share/man/man3/zlib.3.gz     
[[email protected] ~]# rpm -qd zlib-devel     
/usr/share/doc/zlib-devel-1.2.3/README     
/usr/share/doc/zlib-devel-1.2.3/algorithm.txt     
/usr/share/doc/zlib-devel-1.2.3/example.c     
/usr/share/doc/zlib-devel-1.2.3/minigzip.c     
/usr/share/man/man3/zlib.3.gz     
[[email protected] ~]# rpm -q --scripts zlib-devel     
[[email protected] ~]# rpm -q --scripts zlib     
postinstall program: /sbin/ldconfig     
postuninstall program: /sbin/ldconfig     
[[email protected] ~]# rpm -qc --scripts zlib     
postinstall program: /sbin/ldconfig     
postuninstall program: /sbin/ldconfig     
[[email protected] ~]# rpm -e zlib-devel     
[[email protected] ~]# rpm -q zlib-devel     
package zlib-devel is not installed

三、YUM安装

虽然RPM很好的解决了包的安装、卸载、查询、校验,但是它的管理是对已经安装的软件信息收集的管理,它没有解决软件包安装中最头痛的问题——依赖关系。

Yellow Dog的YUM(Yellow Dog Updater,Modified)就是设计被用来解决依赖问题的,Redhat / Fedora / CentOS上默认都采用它。

YUM是建立在RPM之上,它收集rpm包相关信息,检查依赖性,并将众多的信息保存在repo数据库中,数据库采用轻量级关系型数据库Sqlite,早期使用xml文件。

YUM按照目录组织软件rpm包,形成仓库repository,并检查仓库中的软件,收集、分析信息后建立repo数据库。

YUM采用了CS(Client/Server)架构。Server端就是一个文件服务器,可以采用HTTP、FTP、File、NFS协议,但是这些协议的URL路径下必须有repo库文件;客户端通过这些协议,连接到repo Server,获取配置文件中指向的URL路径下的repo库信息,并缓冲至本地,CentOS通常是在/var/cache/yum。

用户使用YUM客户端,查找所有YUM仓库,下载、安装、升级、卸载软件包或者包组。

(一)常用命令

命令 说明
yum repolist [all|enabled|disabled] 列出所有仓库,所有、启用、未启用
yum list [all|installed|available] [regex] 列出仓库中所有、已安装的、可以安装的包或者和和正则表达式匹配的包
yum info PACKAGE_NAME 查看包信息
yum install PACKAGE_NAME 安装软件包
yum reinstall PACKAGE_NAME 重新安装软件包
yum update PACKAGE_NAME 升级软件包
yum remove PACKAGE_NAME 卸载指定软件包
yum check-update 检查可更新的所有软件包
yum clean [all|packages|metadata|expire-cache|rpmdb|plugins] 清除缓存中指定的文件
yum grouplist 查看系统中已安装和可用的包组
yum groupinstall GROUP_NAME 安装指定包组的软件包
yum groupremove GROUP_NAME 卸载指定包组的软件包
yum groupinfo GROUP_NAME 显示包组的信息

(二)服务器端repository库生成

配置文件服务器,可以使用FTP、HTTP、NFS服务搭建。
 
安装createrepo程序。
 
[[email protected] ~]# yum list | grep createrepo   
createrepo.noarch                          0.9.9-18.el6                localdvd     
[[email protected] ~]# yum install createrepo     
[[email protected] ~]# rpm -q createrepo     
createrepo-0.9.9-18.el6.noarch
 
为指定目录生成repo库
 
createrepo /path/to/rpms_repo

(三)客户端配置文件

主配置文件位于/etc/yum.conf,一个或多个相关仓库的配置信息可保存一个文件,文件名都已.repo结尾,并放在/etc/yum.repos.d目录中,该目录下的文件格式如下:

[repositoryid]     name=Some name for this repository     baseurl=url://server1/path/to/repository/             url://server2/path/to/repository/             url://server3/path/to/repository/

enabled=1     gpgcheck=1     gpgkey=URL     mirrorlist=URLcost=1000
参数 说明
repositoryid 仓库的唯一标识
name 仓库的描述
baseurl 指向yum仓库的repodata目录的上一级目录。可以一个baseurl指向多个URL,但不能出现多个baseurl=url
enabled 0或者1,分别表示停用或者启用此yum源
gpgcheck 0或者1,分别表示停用或者启用GPG签名验证
gpgkey 指向GPGKey文件的URL
mirrorlist 指向包含baseurl列表的文件的URL,可以替代baseurl选项
cost 默认1000,越小优先级越高。

内置变量

$releasever 版本号
$arch cpu架构,如i686,athlon等
$basearch 系统的基本架构,如i686和athlon同属i386,alpha和alphae v6同属alpha。

(四)举例

安装开发包组Development tools和Server Platform Development
 
[[email protected] ~]# yum grouplist *Development*   
Loaded plugins: fastestmirror, refresh-packagekit, security     
Setting up Group Process     
Loading mirror speeds from cached hostfile     
* localdvd:     
Installed Groups:     
   Additional Development     
   Development tools     
Available Groups:     
   Desktop Platform Development     
   Server Platform Development     
Done     
[[email protected] ~]# yum groupinstall "Server Platform Development"
 
列出指定类型指定名称的包
 
[[email protected] ~]# yum list installed createrepo   
Loaded plugins: fastestmirror, refresh-packagekit, security     
Loading mirror speeds from cached hostfile     
* localdvd:     
Installed Packages     
createrepo.noarch      0.9.9-18.el6     @localdvd # @符号表示已经安装

四、总结

从以上源代码安装、RPM、YUM的演化可以看出,新的工具的产生是为了解决生产中的难题,提高生产效率。各种方法都有其适用性,在生成环境中合理的使用,才能发挥各种方法的优势。

参考资料

Debian软件包

http://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics

推荐文章,博客园,xiaoluo501395377

http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/21/3089970.html

http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/20/3089554.html

时间: 2024-08-02 06:29:43

Linux的程序安装和包管理的相关文章

Linux服务器中安装python包管理工具pip

pip是python的包管理工具,python的强大之处除了在于语法的简练,还有就是对众多的库支持了. 1.下载pip包管理工具 链接地址:https://pypi.python.org/pypi/pip/#downloads 2.winscp上传至服务器, 3.解压到服务器的某个目录: 4.安装完成: 接下来可以进行的安装python的各种第三方模块包了.

Linux 之RPM和YUM包管理

在Linux的日常维护管理中,管理员要不停的和Linux的程序安装,升级,卸载打交道,这里面用到最多的两个命令就是rpm和yum,甚至有时候我们还涉及源程序的编译安装,用来更高效利用我们的设备,本次博客的主题就是关于rpm和yum命令的介绍和使用. 一:包程序管理简介 过去,许多 Linux 程序以源代码的形式发行,用户把源代码构建为所需的程序或程序集:源代码还附带必需的手册页.配置文件等等,但对于很多系统管理员原来说源代码要想安装上,必须要经过编译才行,但是编译过程又是一个复杂繁琐的过程,对于

windows安装python包管理工具pip

windows安装python包管理工具pip     pip 是一个Python包管理工具,主要是用于安装 PyPI 上的软件包,可以替代 easy_install 工具. 一.前期准备 首先确认windows机器上面是否已经安装好了python.在cmd中输入python --version和python看看是否有反应 如上面所示,表示已经在windows平台上面搭建好了python环境. 二.下载安装 1.到官网去https://pypi.python.org/pypi/pip#downl

CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法

之前有的朋友问我,CentOS版本怎么安装python的pip,我之前给出的Ubuntu下apt-get的方法 ubuntu 需要先安装下pip吧, apt-get install python-pip 安装requests, pip install requests 但是有的朋友由于是centos的,直接 yum install pip  或者 yum install python-pip都是不行的. 其实不能yum那就直接下载编译安装呗... CentOS 6.4安装pip,CentOS安装

转: CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法

from: http://www.linuxde.net/2014/05/15576.html CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法 2014/05/12 centos, pip, Python 运维管理经验与工具 2 70,955 之前有的朋友问我,CentOS版本怎么安装python的pip,我之前给出的Ubuntu下apt-get的方法 ubuntu 需要先安装下pip吧, apt-get install python-pip 安装requ

解析Linux应用程序安装及管理

一.Linux应用程序基础1.应用程序与系统命的关系(1)文件位置?系统命令:一般在/bin和/sbin目录中,或为 Shell内部指令?应用程序:通常在/usr/bin和/usr/sbin目录中(2)主要用途?系统命令:完成对系统的基本管理工作,例如P配置工具?应用程序:完成相对独立的其他辅助任务,例如网页浏览器(3)适用环境?系统命令:一般只在字符操作界面中运行?应用程序:根据实际需要,有些程序可在图形界面中运行(4)运行格式?系统命令:一般包括命令字.命令选项和命令参数?应用程序:通常没有

linux系统程序安装(三)源码包安装程序

源码包安装是日常使用过程中最经常的安装方式,比如nagios套件.apche等重要软件都是源码包方式安装,源码包编译安装技术是运维技术中比较重要的部分. 一.源码包安装位置 运维时,最好把要跑的业务包放到/usr/local/src下,方便其他管理员管理代码. 转载一篇博客中的解析:(转载至https://itony.me/769.html) 二.源码安装方法 源码安装分为三个步骤:(1)./configure 定制程序的某些参数.检测系统是否具备程序运行的某些库.配置完成后,会生成mskefi

【Linux相识相知】rpm包管理

我们日常在使用Windows的时候,如果要安装某个软件,最简单的方法就是在程序包的官网直接下载软件包到本地,一般是以.exe或者.msi格式的文件,然后一直下一步下一步就能安装成功了,但是在使用linux的操作系统的时候也许不是这么的友好,即使现在有的linux发行版也可以通过简单的搜索点击安装来实现软件包的安装,但这并不一种很好的安装方法,因为你必须安装桌面环境,消耗和占用一定的内存资源,除非只是你日常使用.本次博客就如何使用rpm命令来实现centos上的软件包的安装与管理,rpm也许不是最

Linux下程序安装:rpm工具

在CentOS系统中linux下的程序管理主要会用到rpm,yum,与源码编译这几种手段,这篇文章主要对于rpm工具的使用做简要介绍. 软件安装到计算机上,能够正常运行并使用,是要进行一系列复杂的操作的,平常我们安装软件基本上不需要几个步骤,是因为软件厂商对软件进行了特殊的处理,能够让我们非常方便的使用,编译安装好的rpm包就是其中一种手段.由于rpm是通过预编译并打包成为rpm包的形式,再加以安装的一种方式,并且还能够进行数据库的记载,所以rpm有以下的优点: 1.rpm内含已经编译好的程序与