Linux的程序安装和包管理
2014-07-26 13:23
309 查看
一、源代码安装
早期,Linux下的程序安装是一件非常讲究技巧和耐心的事情,因为大多数软件仅仅提供编译源码。安装软件需要编译下载到的源代码,并且安装的时候,要解决很多的依赖关系。因为Linux的设计原则就是由众多单一功能软件组成,所以很多软件,需要依赖系统或者其他第三方软件提供的功能(库)。软件依赖关系简单的还好对付,当软件依赖关系复杂甚至循环依赖等,就会给系统管理人员带来巨大的管理维护难度。
(一)源码安装的优缺点
提供源代码安装虽然困难,但是它也有优点,而这些优点是非源码编译方法不具备的。
源代码编译安装的优点:
一份源码,四处编译
开发者只需要提供一份源代码,就可以在任何具备条件的编译环境下,本地编译安装,完全根据本机自身CPU特性度身定做的。这样编译出来的二进制程序,能最大发挥CPU的指令能力,使程序运行具有更高的效率。
定制化安装
安装过程中,可以按照需求,设定选项参数进行安装
源代码编译安装的缺点:
优点其实也就是缺点,源代码编译需要安装者有很多的知识、有很强的技能,甚至很好的耐心才能安装好一个软件。
而且软件升级后,有可能导致依赖库的版本过低,或者依赖库升级,导致软件不能使用较新的库而运行失败。
卸载时,如何能将安装时产生的文件删除干净,同时也要解决依赖关系,不能把其它软件正在使用的库卸载。
运维时,对于批量安装,源代码编译方法就显得效率低下。
(二)举例
以安装nginx为例。nginx依赖pcre(PerlCompatibleRegularExpressions),它是包括perl兼容的正则表达式库。
二、RPM安装
为了解决源代码安装带来的问题,在生产环境中提高工作效率,就亟需一种方法或者工具来改善现状。
首先出现的是早期Slackware中的打包文件,就是把文件简单打包压缩,解压时会放置在目标位置,优点类似Windows绿色软件安装。这种安装本质上基于压缩解压缩的简单管理方式,不能解决软件安装中的依赖关系问题,软件卸载也是问题。
之后,著名的Linux发行版Debian上率先出现了一种软件包管理器dpkg(DebianPackageManagement)和其前端工具APT,它很好的解决了二进制包的安装问题。
随后,在RedHat上也出现了类似的软件包管理器,叫做rpm(RedhatPackageManagement)。rpm使用了一个以.rmp为扩展名的特殊文件,即软件包文件。rpm提供了叫做rmp的管理程序和其它相关的工具程序,以实现查询、安装、升级、更新和删除rpm软件包文件。rpm将安装过的软件信息,例如软件的版本号码、作者、发行单位、内容、文件路径等信息,保存在数据库中。数据库使用BerkeleyDB,在RHEL中这个数据库放在/var/lib/rpm目录下。rpm软件包文件,里面封装了软件的二进制程序、配合文件、说明文件、链接库以及源代码等。二进制程序是编译好的文件,它必须与安装目标机器的CPU架构相兼容。
(一)rpm软件包文件的命名规则:
PACKAGE_NAME-VERSION-RELEASE.ARCH.rpm
(二)rpm的常用命令
(三)举例
三、YUM安装
虽然RPM很好的解决了包的安装、卸载、查询、校验,但是它的管理是对已经安装的软件信息收集的管理,它没有解决软件包安装中最头痛的问题——依赖关系。
YellowDog的YUM(YellowDogUpdater,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库文件;客户端通过这些协议,连接到repoServer,获取配置文件中指向的URL路径下的repo库信息,并缓冲至本地,CentOS通常是在/var/cache/yum。
用户使用YUM客户端,查找所有YUM仓库,下载、安装、升级、卸载软件包或者包组。
(一)常用命令
(二)服务器端repository库生成
(三)客户端配置文件
主配置文件位于/etc/yum.conf,一个或多个相关仓库的配置信息可保存一个文件,文件名都已.repo结尾,并放在/etc/yum.repos.d目录中,该目录下的文件格式如下:
内置变量
(四)举例
四、总结
从以上源代码安装、RPM、YUM的演化可以看出,新的工具的产生是为了解决生产中的难题,提高生产效率。各种方法都有其适用性,在生成环境中合理的使用,才能发挥各种方法的优势。
参考资料
Debian软件包
http://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics
推荐文章,博客园,xiaoluo501395377
/article/4842693.html
/article/4842692.html
本文出自“终南山下”博客,请务必保留此出处http://me2xp.blog.51cto.com/6716920/1530425
早期,Linux下的程序安装是一件非常讲究技巧和耐心的事情,因为大多数软件仅仅提供编译源码。安装软件需要编译下载到的源代码,并且安装的时候,要解决很多的依赖关系。因为Linux的设计原则就是由众多单一功能软件组成,所以很多软件,需要依赖系统或者其他第三方软件提供的功能(库)。软件依赖关系简单的还好对付,当软件依赖关系复杂甚至循环依赖等,就会给系统管理人员带来巨大的管理维护难度。
(一)源码安装的优缺点
提供源代码安装虽然困难,但是它也有优点,而这些优点是非源码编译方法不具备的。
源代码编译安装的优点:
一份源码,四处编译
开发者只需要提供一份源代码,就可以在任何具备条件的编译环境下,本地编译安装,完全根据本机自身CPU特性度身定做的。这样编译出来的二进制程序,能最大发挥CPU的指令能力,使程序运行具有更高的效率。
定制化安装
安装过程中,可以按照需求,设定选项参数进行安装
源代码编译安装的缺点:
优点其实也就是缺点,源代码编译需要安装者有很多的知识、有很强的技能,甚至很好的耐心才能安装好一个软件。
而且软件升级后,有可能导致依赖库的版本过低,或者依赖库升级,导致软件不能使用较新的库而运行失败。
卸载时,如何能将安装时产生的文件删除干净,同时也要解决依赖关系,不能把其它软件正在使用的库卸载。
运维时,对于批量安装,源代码编译方法就显得效率低下。
(二)举例
以安装nginx为例。nginx依赖pcre(PerlCompatibleRegularExpressions),它是包括perl兼容的正则表达式库。
1、下载pcre-8.35.tar.bz2源代码并安装
[root@localhostpcre-8.35]#./configure
[root@localhostpcre-8.35]#make
[root@localhostpcre-8.35]#makeinstall
Librarieshavebeeninstalledin:
/usr/local/lib
2、去官网下载nginx-1.6.0.tar.gz,目前这个版本是稳定版。解压缩后,运行configure。
[root@localhostmedia]#./configure--prefix=/usr/local/nginx--conf-path=/etc/nginx/nginx.conf
失败,提示没有安装zlib,这里需要安装的是zlib的开发库。编译安装需要安装库的开发包,一般分包名上会包含devel。安装的时候可能会提示需要公钥没有安装成功,可以使用--nogpgcheck选项。安装使用yum。
[root@localhostnginx-1.6.0]#yuminstallzlib-devel--nogpgcheck
3、开始nginx的安装
[root@localhostnginx-1.6.0]#./configure--prefix=/usr/local/nginx--conf-path=/etc/nginx/nginx.conf
[root@localhostnginx-1.6.0]#make
[root@localhostnginx-1.6.0]#makeinstall
4、安装完成,开始测试一下,找到/usr/local/nginx/sbin/nginx,运行后报错了。
[root@localhost~]#/usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx:errorwhileloadingsharedlibraries:libpcre.so.1:cannotopensharedobjectfile:Nosuchfileordirectory
5、提示很简单,就是找不到库了,库在/usr/local/lib/libpcre.so.1。
解决办法有两个:
1)符号链接
32位:[root@localhostpcre]#ln-s/usr/local/lib/libpcre.so.1/lib
64位:[root@localhostpcre]#ln-s/usr/local/lib/libpcre.so.1/lib64
2)导出lib
[root@localhost~]#cd/etc/ld.so.conf.d/
[root@localhostld.so.conf.d]#vimnginx-x86_64.conf
建立一个文件nginx-x86_64.conf,在其中添加一行,/usr/local/lib,保存退出。
[root@localhostld.so.conf.d]#ldconfig–v
使用ldconfig命令重新读取配置文件
二、RPM安装
为了解决源代码安装带来的问题,在生产环境中提高工作效率,就亟需一种方法或者工具来改善现状。
首先出现的是早期Slackware中的打包文件,就是把文件简单打包压缩,解压时会放置在目标位置,优点类似Windows绿色软件安装。这种安装本质上基于压缩解压缩的简单管理方式,不能解决软件安装中的依赖关系问题,软件卸载也是问题。
之后,著名的Linux发行版Debian上率先出现了一种软件包管理器dpkg(DebianPackageManagement)和其前端工具APT,它很好的解决了二进制包的安装问题。
随后,在RedHat上也出现了类似的软件包管理器,叫做rpm(RedhatPackageManagement)。rpm使用了一个以.rmp为扩展名的特殊文件,即软件包文件。rpm提供了叫做rmp的管理程序和其它相关的工具程序,以实现查询、安装、升级、更新和删除rpm软件包文件。rpm将安装过的软件信息,例如软件的版本号码、作者、发行单位、内容、文件路径等信息,保存在数据库中。数据库使用BerkeleyDB,在RHEL中这个数据库放在/var/lib/rpm目录下。rpm软件包文件,里面封装了软件的二进制程序、配合文件、说明文件、链接库以及源代码等。二进制程序是编译好的文件,它必须与安装目标机器的CPU架构相兼容。
(一)rpm软件包文件的命名规则:
PACKAGE_NAME-VERSION-RELEASE.ARCH.rpm
PACKAGE_NAME | 软件包名称 |
VERSION | 软件版本号 |
RELEASE | 软件包的发行号 |
ARCH | 适用硬件平台,常见i386、x86_64、alpha、noarch |
命令 | 说明 |
rpm-iPACKAGE_FILE... | 安装指定的包文件 |
rpm-UPACKAGE_FILE... | 用指定的包文件升级同名包 |
rpm-e[--nodeps][--noscripts] [--test]PACKAGE_NAME... | 删除指定的软件包 |
rpm–qPACKAGE_NAME | 查询指定包名的包是否安装 |
rpm-qa | 查看系统中安装的所有包 |
rpm–qf/path/to/file | 查看指定文件所属的软件包 |
rpm–qiPACKAGE_NAME | 查看已安装包的描述信息 |
rpm–qlPACKAGE_NAME | 查看已安装包里所包含的文件 |
rpm–qcPACKAGE_NAME | 产看已安装包的配置文件位置 |
rpm–qdPACKAGE_NAME | 查看已安装包的文档安装位置 |
rpm–q--scriptsPACKAGE_NAME | 查看已安装包的脚本安装位置 |
rpm–qpiPACKAGE_FILE | 查看未安装包文件的描述信息 |
rpm–qplPACKAGE_FILE | 查看未安装包文件里所包含的文件 |
rpm–qpcPACKAGE_FILE | 产看未安装包文件的配置文件位置 |
rpm–qpdPACKAGE_FILE | 查看未安装包文件的文档安装位置 |
rpm–VPACKAGE_NAME | 校验指定的软件包 |
rpm–V/path/to/file | 校验包含指定文件的软件包 |
rpm--initdb | 当/var/lib/rpm下无数据库时执行创建数据库 |
rpm--rebuilddb | 重建/var/lib/rpm下数据库 |
rpm--import/path/to/pubkeyfile | 导入指定的公钥文件 |
rpm-KPACKAGE_FILE | 检查指定包文件的GNUPG签名 |
1、查看是否安装zlib开发库
[root@localhost~]#rpm-qzlib
zlib-1.2.3-29.el6.x86_64
[root@localhost~]#rpm-qzlib-devel
packagezlib-develisnotinstalled
2、把CentOS的光盘挂载后,安装zlib-devel
[root@localhost~]#ls/mnt/cdrom/Packages/|grepzlib
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
[root@localhost~]#rpm-i/mnt/cdrom/Packages/zlib-devel-1.2.3-29.el6.x86_64.rpm
3、查看安装后的信息
[root@localhost~]#rpm-qzlib-devel
zlib-devel-1.2.3-29.el6.x86_64
[root@localhost~]#rpm-qizlib-devel
Name:zlib-develRelocations:(notrelocatable)
Version:1.2.3Vendor:CentOS
Release:29.el6BuildDate:Fri22Feb201307:02:17AMCST
InstallDate:Thu24Jul201407:54:10AMCSTBuildHost:c6b9.bsys.dev.centos.org
Group:Development/LibrariesSourceRPM:zlib-1.2.3-29.el6.src.rpm
Size:117496License:zlibandBoost
Signature:RSA/SHA1,Sun24Feb201301:40:28AMCST,KeyID0946fca2c105b9de
Packager:CentOSBuildSystem<;http://bugs.centos.org>
URL:http://www.gzip.org/zlib/
Summary:HeaderfilesandlibrariesforZlibdevelopment
Description:
Thezlib-develpackagecontainstheheaderfilesandlibrariesneeded
todevelopprogramsthatusethezlibcompressionanddecompression
library.
[root@localhost~]#rpm-qlzlib-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
[root@localhost~]#rpm-qdzlib-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
[root@localhost~]#rpm-q--scriptszlib-devel
[root@localhost~]#rpm-q--scriptszlib
postinstallprogram:/sbin/ldconfig
postuninstallprogram:/sbin/ldconfig
[root@localhost~]#rpm-qc--scriptszlib
postinstallprogram:/sbin/ldconfig
postuninstallprogram:/sbin/ldconfig
[root@localhost~]#rpm-ezlib-devel
[root@localhost~]#rpm-qzlib-devel
packagezlib-develisnotinstalled
三、YUM安装
虽然RPM很好的解决了包的安装、卸载、查询、校验,但是它的管理是对已经安装的软件信息收集的管理,它没有解决软件包安装中最头痛的问题——依赖关系。
YellowDog的YUM(YellowDogUpdater,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库文件;客户端通过这些协议,连接到repoServer,获取配置文件中指向的URL路径下的repo库信息,并缓冲至本地,CentOS通常是在/var/cache/yum。
用户使用YUM客户端,查找所有YUM仓库,下载、安装、升级、卸载软件包或者包组。
(一)常用命令
命令 | 说明 |
yumrepolist[all|enabled|disabled] | 列出所有仓库,所有、启用、未启用 |
yumlist[all|installed|available][regex] | 列出仓库中所有、已安装的、可以安装的包或者和和正则表达式匹配的包 |
yuminfoPACKAGE_NAME | 查看包信息 |
yuminstallPACKAGE_NAME | 安装软件包 |
yumreinstallPACKAGE_NAME | 重新安装软件包 |
yumupdatePACKAGE_NAME | 升级软件包 |
yumremovePACKAGE_NAME | 卸载指定软件包 |
yumcheck-update | 检查可更新的所有软件包 |
yumclean[all|packages|metadata|expire-cache|rpmdb|plugins] | 清除缓存中指定的文件 |
yumgrouplist | 查看系统中已安装和可用的包组 |
yumgroupinstallGROUP_NAME | 安装指定包组的软件包 |
yumgroupremoveGROUP_NAME | 卸载指定包组的软件包 |
yumgroupinfoGROUP_NAME | 显示包组的信息 |
配置文件服务器,可以使用FTP、HTTP、NFS服务搭建。
安装createrepo程序。
[root@localhost~]#yumlist|grepcreaterepo
createrepo.noarch0.9.9-18.el6localdvd
[root@localhost~]#yuminstallcreaterepo
[root@localhost~]#rpm-qcreaterepo
createrepo-0.9.9-18.el6.noarch
为指定目录生成repo库
createrepo/path/to/rpms_repo
(三)客户端配置文件
主配置文件位于/etc/yum.conf,一个或多个相关仓库的配置信息可保存一个文件,文件名都已.repo结尾,并放在/etc/yum.repos.d目录中,该目录下的文件格式如下:
[repositoryid]
name=Somenameforthisrepository
baseurl=url://server1/path/to/repository/
url://server2/path/to/repository/
url://server3/path/to/repository/
enabled=1
gpgcheck=1
gpgkey=URL
mirrorlist=URL
cost=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和alphaev6同属alpha。 |
安装开发包组Developmenttools和ServerPlatformDevelopment
[root@localhost~]#yumgrouplist*Development*
Loadedplugins:fastestmirror,refresh-packagekit,security
SettingupGroupProcess
Loadingmirrorspeedsfromcachedhostfile
*localdvd:
InstalledGroups:
AdditionalDevelopment
Developmenttools
AvailableGroups:
DesktopPlatformDevelopment
ServerPlatformDevelopment
Done
[root@localhost~]#yumgroupinstall"ServerPlatformDevelopment"
列出指定类型指定名称的包
[root@localhost~]#yumlistinstalledcreaterepo
Loadedplugins:fastestmirror,refresh-packagekit,security
Loadingmirrorspeedsfromcachedhostfile
*localdvd:
InstalledPackages
createrepo.noarch0.9.9-18.el6@localdvd#@符号表示已经安装
四、总结
从以上源代码安装、RPM、YUM的演化可以看出,新的工具的产生是为了解决生产中的难题,提高生产效率。各种方法都有其适用性,在生成环境中合理的使用,才能发挥各种方法的优势。
参考资料
Debian软件包
推荐文章,博客园,xiaoluo501395377
本文出自“终南山下”博客,请务必保留此出处http://me2xp.blog.51cto.com/6716920/1530425
相关文章推荐
- 【原创】《Linux高级程序设计》杨宗德著 - 进程管理与程序开发 - 安装信号与捕捉信号 分类: Linux --- 应用程序设计 2014-11-08 13:00 49人阅读 评论(0) 收藏
- linux程序管理4 编译安装
- linux 第五章 安装及管理程序
- 如何使用 GNU Stow 来管理从源代码安装的程序和点文件 | Linux 中国
- 我的学习记录--Linux (CentOS) 程序安装包管理,yum
- Linux中包的管理与程序安装
- linux安装及管理程序
- linux下源码的编译与安装Tarball套件管理程序
- linux安装及管理程序
- Linux 常见的系统管理 + 网络管理 + 常用工具指令(简单的程序安装,如MySQL)
- linux程序安装及包管理
- IBM的LPI复习资料之LPI101-Topic102:Linux安装和包管理(3)管理动态链接库(查找和加载程序需要的动态链接库文件)
- lilo命令_Linux lilo 命令用法详解:安装核心载入开机管理程序
- Linux常用命令(四)程序的安装与管理
- Linux 下安装及管理程序
- 我的学习记录--Linux (CentOS) 程序安装包管理,rpm
- 8.23_Linux软件包管理之编译程序包安装
- Linux 软件安装及管理程序
- 安装配置管理 之 JRE 安装和配置,以适合JAVA程序运行所具备的环境
- LINUX下程序安装JDK、tomcat