天天看点

软件包的安装

一、linux系统下的软件包可分为三种:

 1)源码(source code)

 2)rpm(基于rpm--redhat package manager,软件包管理器的rpm软件包,常用)

 3)dbkg(基于debian的软件包管理器)

二、软件包的组成:

 二进制文件、配置文件、库文件、文档。

三、软件包的安装方式:

 3.1 手动编译安装源代码

 一般就是“三步走”完成源码的安装。

 1)./configure --分析安装平台环境

 在软件包解压完毕之后,我们进入源码目录,一般都会存在configure和readme这么两个文件,readme详细的介绍了这个软件所能完成的功能、授权许可、安装需求、安装注意事项、安装方式等等,所以在安装软件前,一定要事先阅读这个readme文件,确保安装的正确性。configure文件一般是个可执行文件,可以在当前目录下直接输入 “./configure”进行软件安装的环境测试.源码安装都需要gcc或者cc编译器.最后测试成功会生成makefile文件,为下一步使用make编译做准备。

 2)make --编译安装软件

 make工具最主要的功能就是通过makefile文件来实现的,makefile文件是按照某种语法来进行编写的,文件中定义了各个源文件之间的依赖关系,并说明了如何编译源文件并生成可执行文件,它通过描述各个源程序之间的关系让make工具自动完成编译工作。

 3)make install --安装软件

注:软件安装完成后,可能需要导出软件的库文件,改变环境变量,导入man文件路径,以及头文件。

1、软件库文件导出方法:

a.在/etc/ld.so.conf.d/新建一个以.conf结尾的文件,并将此程序的库文件路径添加至此文件中

如/usr/local/apache/lib

b.执行ldconfig,让系统重新装载库文件;

#ldconfig -v

2、可执行程序路径的导出方法:

#export path=$path:/usr/local/apache/bin

也可以写入配置文件:

 写入/etc/profile:--对所有用户生效

 写入~/.bash_profile--仅对当前用户生效

3、man文件路径导出方法

编辑/etc/man.config文件,新增加如下一行;

 例如:manpath /usr/local/apache/man 

4、头文件导出方法

 创建链接(例如:ln -sv /usr/local/apache/lnclude /usr/include/apache)

 3.2 rpm包方式安装

 rpm包管理类似于windows下的“添加/删除程序”但是功能却比“添加/删除程序”强大很多。在linux的系统安装光盘中,有很多以“.rpm” 结尾的软件包,这些包文件就是我们所说的rpm文件。每个rpm文件中包含了已经编译好的二进制可执行文件,其实就是将软件源码文件进行编译安装,然后进行封装,就成了rpm文件,类似与windows安装包中的“.exe”文件。

   rpm包管理方式的优点是:安装简单方便,因为软件已经编译完成打包完毕,安装只是个验证环境和解压的过程。此外通过rpm方式安装的软件,rpm工具都会记录软件的安装信息,这样方便了软件日后的查询,升级和卸载。

 rpm工具的使用分为安装、查询、验证、更新、删除等操作。

 安装:

  rpm -i /pathrpm_package

  rpm -ivh --nodeps --force

  v;显示安装信息;

  h:以#显示安装进度(一个#:2%的进度)

  --nodeps 忽略依赖关系

  --force 强制安装

 卸载:

  rpm -e name --nodeps

 升级:

  rpm -uvh /pathrpm_package

  rpm -fvh /pathrpm_package

   -uvh 老版本的安装了的就升级安装,没安装就直接安装新版本

   -fvh 老版本必须的安装

   --force 强行升级

 查询:

  rpm -q name--查询软件包的版本信息

  rpm -qa --查询当前系统上安装的软件包 支持文件名通配

  rpm -qi name --查询软件包的描述信息

  rpm -ql name --查询软件包安装后都生成了那些文件

  rpm -qc name --查询软件的配置文件所存放的位置

  rpm -qd name --查询软件文档所存放的位置

  rpm -q --scripts name --查看软件包安装时执行的脚本

  rpm -qf filename|path --查询那个文件是由那个软件包安装生成的

  rpm -q --changelog name --查看每一次的制作都改进了那些内容

  rpm -qpi name --查看未安装软件包的描述信息

   -p --查看未安装软件包的信息

 校验:

  rpm -v

  属性:

  s:文件大小改变

  m:权限,文件类型改变

  5:md5校验值改变

  d:设备的主/次号不匹配

  l:路径发生改变

  u:属主发生改变

  g:属组发生改变

  t:最近一次的修改时间发生了变化 

 rpm重建数据库;

  #rpm --initdb  --重新初始化数据库,如存在则不覆盖

  #rpm --rebuilddb  --如果存在则覆盖之

  /var/lib/rpm--rpm数据库

 rpm对软件包的验证:

导入公钥:

 rpm --import path

例如:rpm --import /etc/pki/rpm-gpg/rpm-gpg-key-redhat-release--导入redhat的公钥。

验证:

rpm -k[ --nodigest(不验证md5) --nosignature(不验证签名)]name.rpm

另外,基于rpm安装rpm包还可以利用yum。

yum --yellow dog updater, modified

 主要功能是更方便的添加/删除/更新rpm包。它能自动解决包的倚赖性问题,它能便于管理大量系统的更新问题 。

yum特点

 可以同时配置多个资源库(repository)

 简洁的配置文件(/etc/yum.conf)

 自动解决增加或删除rpm包时遇到的倚赖性问题

 使用方便

 保持与rpm数据库的一致性

yum客户端的配置文件:

 1、/etc/yum.conf

 2、/etc/yum.repos.d/*.repo

.repo文件便是定义yum源的文件。

定义yum源的格式

 [id]

 name=yum源的完整名称;

 baseurl=yum源的地址(eg:ftp://172.16.0.1/pub/server)

 gpgcheck=0|1(验证签名)

 enabled=0|1(是否生效)

yum的使用方法

yum

 list {all|installed|avaliable|updates} --显示所有已安装过的软件的信息和所有可用软件的信息。

 install package_name package_name2 ...--安装软件

  -y --不用再确认;

 remove|erase package_name1 package_name2 ...--卸载软件

 update package_name1   --软件升级

 check-update   --检查更新

 info --显示软件包的摘要信息

 provides|whatprovides  file|path --显示文件是哪个软件包安装生成的

 downgrade pacage_name1...  --降级

 reinstall package_name1 ... --重装软件包

 repolist [all|enabled|disabled]  --显示yum源

 clean {all}--清空yum缓存

 grouplist --显示软件包组

 groupinstall "groupname" --安装一组软件(!!组名中间有空格必须用引号引起来)

 groupremove "groupname"  --卸载一组软件

 groupinfo "groupname" --查看有关组的信息

 localinstall /path-rpm_file  --本地安装软件

  --nogpgcheck (不检测签名)

 localupdate --本地升级软件

 search keyword --根据关键字搜索软件

创建yum源

yum源的元数据文件目录:

 primary.xml.gz --每一个rpm包的文件名,及软件包之间的依赖关系

 filelists.xml.gz 此yum源中每一个rpm包中文件的文件相关信息

 other.xml.gz  额外信息,比如changelog等

 repomd.xml:定义了以上三个文件的校验码和时间戳

 comps-*.xml(comps-rhel5-server-core.xml):定义了软件包的分组信息

#createrepo path

 -g 创建关于软件包的分组信息

 -q 工作于静默模式下

 -v 显示详细信息

总结:源码安装,可以根据需求自定义安装软件,缺点是安装的软件难于维护,卸载,升级。利用rpm,yum安装软件,安装简单,便于维护。缺点是软件的编译不是根据本机的硬件所编译的,所以不会很好的发挥机器本身的性能。

继续阅读