Linux软件包管理

软件包的组成部分:

1、二进制程序

2、配置文件

组成方式:

单文件,如/etc/pam.conf

将主配置文件切割为多个小文件,并放置于某目录中

单文件,在内部分割为多个片段(用[]分割为多个片段,如sambaPHP

3、库文件(二进制,可执行)

静态库:

动态库:

4、帮助文件:

手册页

软件包的种类:

1、可通过软件包管理器安装的软件包

根据使用的linux的操作系统不同,他的软件包也不同,当前linux下有两种比较流行的软件包,一种是以RedhatSUSE为主的rpm包,一种是以DebianUbuntu为主使用的deb软件安装包

RPMRedHat Package ManagerRedHat软件包管理工具)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinuxS.u.S.E.以及Turbo LinuxLinux的分发版本都有采用,可以算是公认的行业标准了。

   rpm包安装命令是“rpm    -参数”    包管理工具:yum  

deb包安装命令是“dpkg    -参数”包管理工具apt-get

rpm包的组成和命名:

包:组成部分

主包:如:bind-9.7.1-1.el5.i586.rpm

子包:如:bind-libs-9.7.1-1.el5.i586.rpm

bind-utils-9.7.1-1.el5.i586.rpm

包名格式:name-version-release.arch.rpm

bind-major.minor.release-release.arch.rpm

主版本号:重大改进

次版本号:某个子功能发生重大变化

发行号:修正了部分bug,调整了一点功能

2、二进制格式的压缩软件包

二进制格式的压缩软件包是由第三方编译好的二进制文件和一些帮助文件,这种包直接解压缩就可以使用,但这种包要注意所下载包适应的平台,如x86架构32位平台和64位平台,或其他架构的等,都用的是不同的包,因为二进制包是别人编译好的,该包的编译平台就决定了该包的运行平台。

3、可编译的源码软件包

该软件包就是带有程序的源代码的安装包,几乎没有平台限制,但该包需要自己手动编译,与上面两种软件包相比虽然比较麻烦,但可以指定软件的某些特性,这是上面的两种软件包所不具备的。

软件包的安装

1、rpm包安装

Rpm包安装有两的命令rpmyumyum的使用需要配置yum源,我们在下面介绍yum安装的时候再详细介绍yum及使用,现在先介绍rpm命令安装及其常用用法

rpm命令安装

1)、安装

rpm -i /PATH/TO/PACKAGE_FILE

-h: #显示进度;每个#表示2%;

-v: 显示详细过程

-vv: 更详细的过程

rpm -ivh /PATH/TO/PACKAGE_FILE

--nodeps: 忽略依赖关系;

--replacepkgs: 重新安装,替换原有安装;

--force: 强行安装,可以实现重装或降级;

2、查询

rpm -q PACKAGE_NAME: 查询指定的包是否已经安装

rpm -qa : 查询已经安装的所有包

rpm -qi PACKAGE_NAME: 查询指定包的说明信息;

rpm -ql PACKAGE_NAME: 查询指定包安装后生成的文件列表;

rpm -qc PACEAGE_NEME:查询指定包安装的配置文件;

rpm -qd PACKAGE_NAME: 查询指定包安装的帮助文件;

rpm -q --scripts PACKAGE_NAME: 查询指定包中包含的脚本

rpm -qf /path/to/somefile: 查询指定的文件是由哪个rpm包安装生成的;

如果某rpm包尚未安装,我们需查询其说明信息、安装以后会生成的文件;

rpm -qpi /PATH/TO/PACKAGE_FILE

rpm -qpl

3、升级

rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE: 如果装有老版本的,则升级;否则,则安装;

rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级;否则,退出;

--oldpackage: 降级

4、卸载

rpm -e PACKAGE_NAME

--nodeps

5、校验

rpm -V PACKAGE_NAME

6)、重建数据库

rpm

--rebuilddb   重建数据库

--initddb初始化数据库

7、检验来源合法性,及软件包完整性;

# ls /etc/pki/rpm-gpg/

RPM-GPG-KEY-redhat-release

rpm -K /PAPT/TO/PACKAGE_FILE

dsa, gpg: 验正来源合法性,也即验正签名;可以使用--nosignature,略过此项

sha1, md5: 验正软件包完整性;可以使用--nodigest,略过此项

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release: 导入密钥文件

yum安装

1yum介绍

Yum是为了解决rpm包安装的依赖关系而出现的一种软件包管理工具,它是rpm的前台工具,也就是在使用yum安装的时候,其实也是依赖于rpm的,yum可以自动的解决rpm包的依赖关系。

Yumc/s架构,需要有yum repositoryrpm包仓库--yum仓库。

yum仓库有三类: 1.地文件路径

                   2.ftp

                   3. http

2Yum的工作机制

在使用yum命令安装软件包时,首先在yum仓库中获取所有包的列表,将安装的文件从仓库下载并缓存下来安装,安装前分析依赖关系,并把依赖包也下载至本地,然后一起安装。

Yum是通过yum仓库中的源数据文件获取rpm包列表,依赖关系等。

Yum仓库中的元数据文件:1.primary.xml.gz 所有rpm包列表,依赖关系,每个rmp安装生成的文件列表

2.filelist.xm.gz当前仓库中所有rmp包的所有文件列表

3.other.xml.gz额外信息(rpm修改日志)

4.repomd.xml记录的是上面的三个文件的时间戳和校验

5.comps*.xml rpm包分组信息

(3)yum仓库

红帽5中的rpm包仓库:(任何目录要当做yum源,则该目录一定要有一个叫repodata的目录,放置yum的元数据文件)

Repodata/: 只有包含此目录为其子目录的那个路径才可以作yum源:

Server 系统常用的基本软件

Cluster  集群相关的软件

clusterStorage 集群存储相关的

VT 虚拟化相关的

红帽6

所有包都在Package

Server中没有了rpm包,该目录目录是定义了rpm包的元数据信息

Yum仓库的元数据文件:

Repomd.xml 记录的是上面三个文件的时间戳和校验和;

Primary.xml.gz:当前yum仓库内每一个rpm包的名字及彼此间的依赖关系;此外好报还每一个rpm安装生成的文件;

Filelists.xml.gz: 所有rpm包包含的安装生成文件的列表:

Other.xml.gz:额外信息,主要包含的是rpm的改变日志

Comps-rhel5-server-core.xml 当前rpm包包组的定义(额外定义的,不是必须的)

(除了Comps-rhel5-server-core.xml外,其他文件都要手动生成)

生成元数据文件的命令:createrepo(此命令必须安装同名的rpm包后才可以使用)

4yum 配置文件

    Yum配置文件:

/etc/yum.conf  主配置文件,定义了包含的配置文件

/etc/yum.repo.d/*.repo

/etc/yum/pluginconf.d/  插件的配置文件

Yum的配置文分为两段

全局配置(/etc/yum.conf中)

[main]

Cachedir=/var/cache/yum定义yum的缓存目录

Keepache=0是否在开关机后还保存缓存文件

Debuglevel=2调试级别

Logfile=/var/log/yum.log日志文件位置

Distroverpkg=redhat-release验证发行版相关的rpm包使用的哪个秘钥文件

Tolerant=11表示安装多个包时忽略已安装的包

Exactarch=1是否做平台精确匹配,1表示必须精确匹配

Obsoletes=1是否检查废弃的包

Gpgcheck=1是否检查rpm的签名信息(验证rpm包的来源的合法性)

Plugins=1是否支持插件

Metadat_expire=1h        缓存的时间

5. 指定yum仓库,yum仓库定义,指定yum仓库(/etc/yum.repo.d/*.repo):

Yum仓库的指定文件位于/etc/yum.repos.d/目录中,该文件可以自己创建编辑,但后缀名一定得是“.repo”。

内容格式为:[repo_name]

Name=描述信息

Baseusrl=

本地:  file:///var/yumrepo/server

ftp|http:  ftp|http://192.168.1.1/pub/server

ftp://USERNAME:PASSWORD@192.168.1.1/pub/server 必须以用户名登录访问的时候

Enabled={0|1}  是否启用该yum仓库,默认就是1(启用)

Gpgcheck=0 不启用

 gpgcheck=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release(验证rpm来源的文件)

6)创建yum仓库

        1)创建yum仓库目录。

        2)指定yum仓库位置即上面提到的/etc/yum.repos.d/目录中以“.repo”结尾的文件,可以重新创建一个也可以在已有的文件内再加一条。

        3生成元数据

使用命令createrepo生成该rpm仓库的元数据文件,如:createrepo  /yum/Server        

/yum/Server是创建的仓库的路径目录。

7yum命令使用

yum  [options] [commd]             package。。。。

list

                      (还可以支持指定匹配)

                   All(默认)

                   Available(可用的,尚未安装)

Installed(已安装的)

Updates(可用的升级)

repolist             显示repo列表及其简要信息

                           all

enable    默认

disabled  

               clean       (清理缓存)

packages

headers

metadata

dbcache

all

install      Package——Name   安装

        -yes   自动回答yes

        update                升级,升级为最新的

                update_to              升级为指定版本

remove|erase           卸载(依赖包同时卸载)

info   =qi      

provides           查看指定的文件或特性由哪个包安装生成的

grouplist

groupinfo

groupinstall

groupdate

groupsearch

grouplist

reinstall

--nogrpgcheck  忽略gpg检查

2、二进制包的安装

二进制包装只需要将压缩包解压缩,然后将二进制文件复制到你所需要的安装路径下,之后修改PATH环境变量,以能够识别此程序的二进制文件路径,导出库文件和头文件,之后再在Man配置文件(/etc/man.config)中添加一新路径即可。

步骤:

1、解压缩

# tar -xf /path/to/soft_file

2、复制二进制可执行文件

# cp -R soft_file  /patah/to/install_path

3、修改PATH环境变量,以能够识别此程序的二进制文件路径

 修改/etc/profile文件或/etc/profile.d/目录建立一个以.sh为名称后缀的文件,在里面定义export PATH=$PATH:/path/to/somewhere  

如:export PATH=$PATH:/usr/local/apache/bin

4、导出库文件和头文件

      导出库文件:

默认情况,系统搜索库文件的路径/lib,/usr/lib ;所以要搜索额外路径

/etc/ld.so.conf.d/中创建以.conf为后缀名的文件。而后把要增添的路径直接写在此文件中(当前找不着)

    Ldconfig  通知系统重新库文件

-v  显示重新搜寻的过程

  导出头文件:

库文件用于程序的二次开发,要导出的头文件包含了库文件的函数以及函数的调用参数等相关信息

默认路径:/usr/include

要增添头文件搜寻路径,使用链接进行;

/usr/local/tengine/include   /user/include/

Ln -s /usr/local/tengine/include/*   /user/include/

ln  /usr/local/tengine/include   /user/include/tengin

5、编辑man的配置文件(此项不是必须的)

Man配置文件(/etc/man.config)中添加一新路径,安装软件的man文件在解压后的目录下的man文件中

      如:安装软件的man文件位于/usr/loacl/man,就在man配置文件中添加

        MANPATH   /usr/loacl/man,

没添加前也可以使用man -M /path/to/man_file_dircotory

如:man -M   /usr/loacl/man

3、源码包安装(编译安装)

前提:准备开发环境

.编译安装需要安装相应的编译环境或开发环境如C语言软件包就安装gcc的开发环境安装"Development Tools""Development Libraries"

源码包安装步骤:

1)解压缩

# tar -xf  /PATH/TO/SOFT_FILE

2)生成makefile文件

# cd /PATH/TO/SOFT_PATH

# ./configure

./configure是该包的一个脚本(./configure 生成makefile.in---->生成makefile文件),可以加参数,

--help 获取帮助信息,可添加的选项信息

--prefix=/path/to/somewhere 指定安装路径

--sysconfdir=/PATH/TO/CONFFILE_PATH 指定配置文件的安装路径

功能:1、让用户选定编译特性;2、检查编译环境;

3)编译

# make

4)安装

# make install

5)修改PATH环境变量

6)导出库文件和头文件

7)编辑man的配置文件

注:567和二进制包的过程一样,源码包的安装步骤大多数都是以上几步,但也有个别的不是,这时候我们就需要看一下安装的帮助文件INSTALLREADME两个文件