一、简介
- 在windows系统上我们安装软件的时候加上了一些与这些程序相关的信息,将他建立称为了数据库,就可以实现软件的安
- 装、卸载、升级与验证了,类似于windows的“添加删除程序”。由于在linux系统上利用源码包设置编译参数、实际编译、
- 最后还要根据需要的方式来安装程序,这个过程很是麻烦,而且对于不熟悉整个系统的用户来说,更是一种负担,所以后
- 来在我们linux系统下至有两种常见的套件管理程序,分别是RPM和Debian的dpkg,其中RPM最为常见,那么晚我们
- 下面就来介绍下RPM。
- RPM的全名为“RedHat Package Manager”,顾名思义它是由RedHat公司开发的。Rpm是以一种数据库记录的方式将所
- 需要的套件安装到linux主机的一套管理程序,它最大的特点就是将要安装的套件先编译并打包,通过包装好的套件中默
- 认的数据库记录,记录这个套件在安装的时候所依赖的属性模块。用户在安装的时候,RPM会根据套件里的记录信息,查
- 询主机的依赖属性套件是否满足,如满足则给予安装。若不满足在不给于安装、安装的时候将该套件的信息全部写入RPM
- 的数据库中,以方便将来的查询、验证与卸载。这样做的优点:
- 1、由于已经编译完成并且打包,所有安装方便。
- 2、由于套件信息已经记录在了Linux主机的数据库中,方便查询、升级与卸载。
- 当然其也有其缺点,由于所有的数据已经编译完成,所以安装的时候一定需要当初安装时的主机环境,也就是说,当初建
- 立这个套件的安装环境,必须在用户主机上出现,如果不出现就无法进行安装。缺点主要如下:
- 1、安装环境必须与打包时的环境一致
- 2、需要满足套件的依赖属性需求
- 3、卸载时需要特别小心,最底层的套件不可先删除,否则可能对整个系统造成问题。
- RPM程序的数据库位置/var/lib/rpm,这里面定义了关于RPM管理的所有属性,当然我们如果还可以更新这个数据库的,
- rpm --rebuilddb:重建数据库,一定会重新建立。
- rpm --initdb:初始化数据库,没有才建立,有就不用建立。
RPM相关软件包名字格式:
- name-version-release.arch.rpm
- name-version-release-release.arch.rpm
- version:主版本号.此版本号.发行版本号.平台.rpm,对于其命名需要遵循以下规则:
- 主版本号改变:软件的功能发送了重大的改变。
- 此版本号改变:某个子功能发生了重大变化
- 发行号改变:修改了部分bug,调整了一点点小功能。
二、
- linux下软件管理套件RPM的出现大大降低了基本软件的安装和升级等管理难度,当然linux此'出生'一来就是
- 一一切皆文件、系统字符界面而著称的,所以虽然软件管理套件可以帮我们实现那么大的功能,也不会像windows上面的
- 那样,我们还需要掌握关于RPM的相关命令才能实现软件的安装、升级、卸载等功能,当然现在也有了图形界面下软件的
- 管理套件,但是我们linux系统的伟大之处是可以稳定、永久不宕机的提供服务的系统,我们不会让其运行在图形界面下
- 的,所以作为一个合格的linux系统运维人员掌握软件的管理命令是必备、基础的要求了。下面我们来介绍介绍关于RPM
- 的相关命令吧~~~
RPM命令主要包括四类:安装、查询、升级、卸载
⑴、rpm安装命令
- rpm -i /PATH/TO/PACKAGE_FILE:安装软件包
- rpm -h :以#显示安装进度,每个#表示2%
- rpm -v :显示安装详细信息
- rpm -vv :更详细的信息
- rpm -ivh :组合使用,一般使用这个组合来安装软件
- rpm --nodeps:忽略依赖关系。
- rpm --replacepkgs:重新安装、替换原来安装。
- rpm -ivh --oldpackage:降级安装。
- rpm -ivh --force:强行安装,可以实现重装或降级
- rpm --test:仅测试有没有依赖关系
实例:
安装zsh的安装包
rpm --test:仅测试有没有依赖关系
⑵、rpm软件查询命令:
rpm -q PACKAGE_NAME:查询指定的包是否安装
rpm -qa :查询以安装的所有包
rpm -qi PACKAGE_NAME:查询指定包的说明信息
rpm -ql PACKAGE_NAME:查询指定包安装后生成的文件列表
rpm -qc PACKAGE_NAME:查询指定包安装的配置文件
rpm -qd PACKAGE_NAME:查询指定包安装的帮助文件
- rpm -q --scripts PACKAGE_NAME:查询指定包中包含的脚本
- rpm -qf /path/to/somefile:查询指定的文件时由那个rpm包安装生成的
- 如果某个rpm包尚未安装,我们需要查询其说明信息,安装后会生成的文件
- rpm -qpi /PATH/TO/PACKAGE_FILE
- i:软件说明信息
- rpm -qpL /PATH/TO/PACKAGE_FILE
- L:软件文件列表
⑶、软件升级命令:
rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级;否则,则安装
rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级;否则,则退出
rpm -Uvh --oldpackage 低版本的包:降级
⑷rpm软件卸载命令:
卸载的时候此包不能被其他软件包依赖
rpm -e PACKAGE_NAME //直接卸载、但是此时如果卸载的软件被其他软件包多以来的话则不能卸载
rpm –nodeps //忽略软件包之间的依赖关系
⑸、其他相关命令
rpm软件校验命令:
- rpm -V PACKAGE_NAME:无输出信息就是正常,(linux的哲学思想:没有回答则是最好的回答!嘿嘿~~)
- rpm重建数据库:
- 数据库位置:/var/lib/rpm
- rpm --rebuilddb:重建数据库,一定会重新建立。
- rpm --initdb:初始化数据库,没有才建立,有就不用建立。
- rpm检验来源合法性及软件完整性:
- 加密类型:
- 对称:加密解密使用同一个秘钥
- 公钥:一对秘钥,公钥、私钥;公钥隐含与私钥中,可以提取出来并公开出去。
- 公钥:加密,私钥:身份验证
- 红帽公钥:ls /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
- rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release:导入秘钥文件
- rpm -K /PATH/TO/PACKAGE_FILE
- dsa,gpg:验证来源合法性,也即验证签名;可以使用--nosignature,略过此项
- sha1,md5:验证软件包完整性;可以使用--nodigest,略过此项
- rpm -K --nodigest /PACKAGE_NAME:只验证签名。
三、YUM
- 从上面我们学会了利用rpm套件管理工具在linux系统上进行软件包的安装、升级、查询、卸载等相关命令的操作和方法,
- 但是我们从上面了解到我们利用rpm来进行安装软件的时候会存在软件包之间的依赖关系,而rpm并不能自己智能的解析其
- 各个包之间的依赖关系,但是如果我们利用rpm –nodeps和rpm -ivh --force进行安装的时候很可能造成安装的软件
- 无法正常运行,为了解决这个问题,后来又出现了一个功能更强大的工具:YUM,yum在rpm的基础上很好的解决了软件包
- 之间的依赖关系。
- YUM是一种基于C/S架构的服务,需要Server和Client来进行使用,即yum仓库和本地的yum工具。
⑴、 服务器端配置:yum仓库可以是本地文件、ftp服务器和http服务器。在其服务器端有yum仓库的配置文件,yum仓库的配置文件叫YUM的元数据文件,元数据文件需要存放在一个叫repodata的目录下面,其目录和组成yum池的rpm包需要同处于同一个目录下,下面我们来认识一下yum的元数据把~~
各个元数据文件的解释:
- primary.xml.gz:定义了当前仓库中所有的rpm包列表以及各包之间的依赖关系和每个软件包安装生成的文件列表
- filelists.xml.gz:当前仓库中所有RPM包的文件列表
- other.xml.gz:额外信息,rpm包的修改日志
- repomd.xml:记录的是上面三个文件的时间戳和校验和
- comps-*.xml:RPM包分组信息(需要手动定义)
⑵、YUM服务客户端的配置
- 首先确定我们系统上面安装了yum服务软件包:yum-3.2.22-39.el5,可以利用rpm –q yum来进行查看,趁着也联系联系使用上面的rpm命令~嘿嘿
- 客户端配置文件在/etc/yum.repos.d/*.repo文件内进行定义,可以定义多个.repo文件,也可以在一个repo文件定义多个yum服务器,其格式如下:
- [Repo_ID]
- name=Description
- baseurl=yum仓库路径
- enabled={0|1}:是否启用此仓库,默认不写的时候是启用
- gpgcheck={0|1}:校验文件的完整性
- 注:关于yum仓库的路径有三种:
- ftp服务器的时候: ftp://…..
- http服务器的时候:http://…..
- 本地文件的时候: fiel:///
⑶、上面我们完成了YUM服务的相关配置,那么我们下面来说说关于yum操作的相关命令吧
- yum list:查看yum列表
- yum list all:默认选项,会列出所有的yum库
- yum list available:列出仓库中未安装的包
- yum list installed:列出显示已经安装的软件
- yum list updates:列出可以升级的软件包
- yum clean:清除缓存
yum clean {packages | headers | metadata | dbcache | all}:清除缓存再查看会再次统计数据并显示出来。
⑷、yum的安装命令
- yum install PACKAGE_NAME //安装软件、此项选择会让你选择
- yum –y install PACKAGE_NAME //直接自动完成软件的安装
- yum install --nogpgcheck:不做校验,安装软件,
- yum update PACKAGE_NAME : 升级软件包
- yum update_to PACKAGE_NAME :升级到指定版本
- yum remove|erase PACKAGE_NAME :卸载软件
yum info PACEAGE_NAME:查看软件包信息
yum provides|whatprovides file:查看指定文件是由那个软件包生成的
⑸、yum关于组的管理命令
- yum grouplist //查看组,包括安装或未安装的
- yum groupinstall GROUPNAME //安装组,注意如果组名中间有空格,需要使用双引号
- groupinfo 组名:显示组包含包信息(如果组名中间有空格,使用"")
四、源码程序安装
1、在我们进行编译安装的时候需要提前安装编译软件需要的开发环境和开发库:"Development Tools"和”Development Libraries“
- 先配置好yum库,然后利用yum库安装
- yum –y groupinstall "Development Tools" //安装开发工具
- yum groupinstall -y "Development Libraries" //安装开发库
2、解压源码程序包
3、cd 进入源码解压目录
- ./configure //编译安装配置命令
- ./config –help //查看编译帮助信息
- yum groupinstall -y "Development Libraries"
- --sysconfdir=/PATH/TO/CONFFILE_PATH:配置文件安装路径,如果不指定则在安装目录下的config目录下
- make编译
- make install安装
4、安装完成以后我们需要对我们自定义安装的软件进行设置,设置环境和man等信息
- 修改PATH环境变量,以便识别此程序的文件路径:在/etc/profile.d/目录下简历一个以.sh为后缀的文件,在里面定
- 义export PATH=$PATH:/path/to/somewhere
- 要想此配置生效,重新登录或者自己手动执行此脚本
5、库文件配置:默认情况下,系统搜索库文件的路径为/lib,/usr/lib;要增加额外的搜寻路径:在/etc/ld.so.conf.d/中创建以.conf为后缀的文件,然后把要增加的路径直接写至此文件中。
- ldconfig:通知系统重新搜寻库文件。
- ldconfig -v:显示重新搜寻库的过程
6、头文件输出
- 默认是/usr/inclode
- 增添头文件搜寻路径,使用链接进行
- 添加头文件有两种方式:ln -s /usr/local/tengine/include/* /usr/include/ 或者
- ln -s /usr/local/tengine/include /usr/include/tengine
7、man文件路径添加
man文件路径:默认安装在--prefix指定的目录下的man目录内,而系统默认的是/usr/share/man,我们需要在/etc/man.conf内定义man 的查找路径:在/etc/man.config内添加一条MANPATH
下面我们通过编译、安装web服务器来说明编译安装的相关过程
1、安装开发环境
2、解压源码包
tar xf httpd-2.2.22.tar.bz2
3、进入解压包,然后配置参数、编译、安装
cd httpd-2.2.22 //进入源码目录
./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd //设置安装目录/usr/local/apache,配置文件为/etc/httpd
make && make install //编译和安装
下面启动httpd服务吧~~测试一下能否做成工作
是不是启动不了?哈哈~那就对了,那是因为现在我们自定义的软件的命令不在当前的环境变量中
那么下面我们来在系统内添加一下环境变量吧~~
vim /etc/profile.d/httpd.sh ,添加如下内容
export PATH=$PATH:/usr/local/apache/bin //增加环境变量
此时若想环境变量生效可以重新登录客户端或者执行一下这个脚本
这里执行下脚本吧~~看看能不能生效
. /etc/profile.d/httpd.sh
httpd
下面我们来测试一下吧~
为了更好的说明效果,我们把主页内容更改一下~~
刷新下网页,查看下内容
ok,到此就可以实现比较简单的web服务了,但是此时是那么的丑,所以我们需要对其程序进行进一步的优化,man文件、头文件、库文件、服务启动脚本等信息增加等相关操作,由于此处所说内容已经比较多了,暂时把其相关的操作我们就在下一篇博文内进行讨论吧~当然我们利用上面的有关内容是可以自己实现的~对吧,大侠们!下篇博文暂定为“黄金组合LAMP”~~嘿嘿,四天之后放出,到时候希望大家给还是菜鸟的我指正错误--linux系统博大精深,需要逐步、深入!
上面所说内容只是个人总结,还望各位大侠不吝赐教!指出其中错误~~~~--chrinux(chris linux)。