程序包管理:就是能相对安装程序,并能安装后删除软件包的一类工具php
程序包管理的前端工具:就是能自动查询包之间的依赖关系,并能自动下载和安装的一个工具html
yum:rpm包管理器的前端工具;前端
apt-get:deb包管理器前端工具;node
zypper:suse上的rpm前端管理工具;c++
dnf:Fedora 22+ rpm包管理器前端管理工具;数据库
yum不是取代rpm的,它是rpm的补充和完善apache
程序包管理的功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷的实现程序包的安装、卸载、查询、升级和校验等管理操做。vim
1、程序的组成组成清单 (每一个包独有)centos
文件清单浏览器
安装或卸载时运行的脚本
2、数据库(公共的)
程序包名称及版本
依赖关系;
功能说明;
安装生成的各文件的文件路径及校验码信息;
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum,dnf
获取程序包的途径:
(1)系统发版的光盘或官方的服务器;
CentOS镜像:
http://mirrors.aliyun.com http://mirrors.sohu.com
http://mirrors.163.com
(2)项目官方站点
(3)第三方组织:
Fedora-EPEL
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
(4)本身制做
建议:检查其合法性,来源合法性以及程序包的完整性;
下面介绍下,CentOS系统上使用rpm管理程序包的经常使用的命令:
安装、卸载、升级、查询、校验、数据库维护等操做
安装:
命令:rpm{-i|--install} [install-options] PACKAGE_FILE ...
-v:verbose 显示过程
-vv: 显示更加详细的过程
-h:以#显示程序包管理执行进度;每一个#表示2%的进度
rpm -ivh PACKAGE_FILE ... 通常经常使用的命令
install的选项 :[install-options]
--test:测试安装,但不真正执行安装过程;dry run模式;
--nodeps:忽略依赖关系;
--replacepkgs:从新安装;
--nosignature:不检查来源合法性;
--nodigest:不检查包完整性;
--noscipts:不执行程序包脚本片段;
升级:
rpm{-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm{-F|--freshen} [install-options] PACKAGE_FILE ...
upgrage:安装有旧版程序包,则“升级”;若是不存在旧版程序包,则“安装”;
freeshen:安装有旧版程序包,则“升级”;若是不存在旧版程序包,则不执行升级操做;
经常使用的命令格式:
rpm-Uvh PACKAGE_FILE ...
rpm-Fvh PACKAGE_FILE ...
--oldpackage:降级;
--force:强行升级;
注意:(1) 不要对内核作升级操做(由于升级后要重启才能使用(4.0之前的内核都须要重启)若是不能启动,那么你的系统就会挂掉);Linux支持多内核版本并存,所以,对直接安装新版本内核;
(2) 若是原程序包的配置文件安装后曾被修改,长级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;
查询:
rpm{-q|--query} [select-options] [query-options]
[select-options]:
-a:全部包
-f:查看指定的文件由哪一个程序包安装生成
-p/PATH/TO/PACKAGE_FILE:针对还没有安装的程序包文件作查询操做;
--whatprovidesCAPABILITY:查询指定的CAPABILITY由哪一个包所提供;
--whatrequiresCAPABILITY:查询指定的CAPABILITY被哪一个包所依赖;
[query-options]:
--changelog:查询rpm包的changlog
-c:查询程序的配置文件
-d:查询程序的文档,即帮助手册
-i:information
-l:查看指定的程序包安装后生成的全部文件;
--scripts:程序包自带的脚本片段
-R:查询指定的程序包所依赖的CAPABILITY;
--provides:列出指定程序包所提供的CAPABILITY;
经常使用用法:
-qiPACKAGE;-qf FILE;-qc PACKAGE; -ql PACKAGE; -qd PACKAGE;
-qpiPACKAGE_FILE;-qpl PACKAGE_FILE; ...
-qa包括全部选项
卸载:
若是你卸载的包有依赖关系,是不会让你卸载的,可使用选项--nodeps进行强制卸载
rpm{-e|--erase} [--allmatches] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_NAME ...
校验:校验须要先导入公钥
命令:rpm {-V|--verify}[select-options] [verify-options]
每个对应为表示的意义
S file Size differs 文件大小
M Mode differs (includes permissions andfile type)权限
5 digest (formerly MD5 sum) differs表示MD5码
D Device major/minor number mismatch设备文件的设备号
L readLink(2) path mismatch路径
U User ownership differs属主
G Group ownership differs属组
T mTime differs最近一次的修改时间
P caPabilities differ功能
包来源合法性验证及完整性验证:
完整性验证:SHA256
来源合法性验证:RSA
导入公钥:
rpm--import /PATH/FROM/GPG-PUBKEY-FILE
CentOS7发行版光盘提供的密钥文件:RPM-GPG-KEY-CentOS-7
在其余官方站点的须要下载他们的密钥
通常为了安全,尽可能只使用光盘中的包,EPEL的包或者官方网站的包
数据库重建:
rpm{--initdb|--rebuilddb}
initdb:初始化
若是事先不存在数据库,则新建之;不然,不执行任何操做;
rebuilddb:重建
不管当前存在与否,直接从新建立数据库;
通常状况这两个命令不会使用,还有rpm命令只容许一个终端进行操做
下面演示一下CentOS 7中rpm命令管理程序包
1、安装
首先挂载CentOS的镜像光盘,而后切换到光盘目录中,而后进入Packages目录中,而后ls查看一下,会发现不少以rpm结尾的包
以这个包zsh-html-5.0.2-7.el7.x86_64.rpm为例安装一下,能够看到
若是安装的包有依赖关系,就会比较麻烦,若是你安装的包须要依赖其余包,而那个包你又没有安装,这个时候安装就会失败。
以这个php-fpm-5.4.16-23.el7_0.3.x86_64.rpm包为例
可使用--nodeps选项忽略这个依赖关系,把这个包装进去,是能够安装成功的,但能不能运行就不知道了,
还有其余选项可使用,在这里就不在演示,若有须要可使用man命令查看
升级和安装的过程相似在这里再也不演示,
二、 查询
rpm –qa查询全部安装过的包,显示信息比较多,在这里就再也不演示了
rpm -qa | grep ‘php’查询指定格式的安装过的包,‘|’这是管道命令,grep是搜索文本的命令,若是有不明白的能够查看Linux基础入门的内容
rpm -qf /etc/fstab 查看这个文件是由那个程序生成的
rpm -q –whatrequires /bin/ls 查询这个文件被哪一个程序或软件依赖
rpm -q --changelog zsh 查看rpm包制做的时候的修改的日志
rpm -q -c zsh 查询zsh这个包安装的配置文件
rpm -ql -p php-common-5.4.16-23.el7_0.3.x86_64.rpm 查看未安装的软件包安装后生成的文件
经常使用的有-qi;-ql;-qd...还有不少就不一一演示了
三、 卸载
rpm -e zsh 而后使用rpm –q zsh查看是否卸载成功
四、 校验
以zsh-5.0.2-7.el7.x86_64.rpm这个包为例,先rpm -ql zsh查看下生成的文件,而后选择一个文件对它进行修改,而后进行校验查看
S表明大小变了5标识校验码变了 T最近一次修改时间也变了
包来源合法性验证及完整性验证:这通常在包安装前验证
以CentOS7光盘中的包来操做
首先使用rpm --import/PATH/FROM/GPG-PUBKEY-FILE 导入密钥
CentOS7中是PRM-GPG-KEY-CentOS-7这个文件,而后就会自动校验了
若是不导入,在安装关盘中的包时就会出一个警告,若是导入了,安装光盘里的包就不会出现警告了
安装包的时候要本身解决关系就比较麻烦和复杂,这就须要一个工具来自动检测依赖关系并进行自动下载和安装这些包的工具,这就叫程序包前端管理工具,如yum,dnf等
程序包前端管理工具:
yum的工做方式简单来讲yum客户端要链接到一个文件服务器,里面存放不少的rpm包,yum会根据URL(统一资源定位符)进去下载所依赖的rpm包并自动安装这些包。
CentOS中有yum和dnf
YUM:
yum repository :yum repo 即yum仓库,里面存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata)。默认状况下,镜像光盘就是一个仓库
yum仓库要是文件服务器:
协议有:
ftp://
http://
nfs://
file:///
要想使用yum就必需要先安装,使用rpm –q yum查看下是否安装,如没有安装就须要进行安装才能作如下的操做;若是安装过,使用-qc查看下配置文件的路径
yum客户端:
配置文件:
/etc/yum.conf:为全部仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置
在CentOS中,只要不是以.repo结尾的仓库配置文件,就不会被使用
仓库指向的定义:
[repositoryID] 仓库ID(惟一)
name=Some name for thisrepository 仓库名
baseurl=url://path/to/repository/ 指向仓库的访问路径,能够指定多个
enabled={1|0} 是否启用此仓库,默认为启用
gpgcheck={1|0} 是否检查合法性及完整性
gpgkey=URL 指明密钥文件
enablegroups={1|0} 是否容许支持组来批量管理程序包
failovermethod={roundrobin|priority} 故障转移方法
默认为:roundrobin,意为随机挑选;
注意:等号左右不能有空格
当有不少仓库,yum会使用最新rpm包的仓库,若是包的新旧同样,可使用cost来设置优先级,
cost=
默认为1000
yum命令的用法:
命令格式 yum [options] [command] [package ...]
经常使用的有:
显示仓库列表:repolist[all|enabled|disabled]
显示程序包:
list
# yum list [all | glob_exp1][glob_exp2] [...]
# yum list{available|installed|updates} [glob_exp1] [...]
安装程序包:
install package1 [package2] [...] 还能够指定版本号进行安装
从新安装包:覆盖的形式进行安装
reinstall package1 [package2] [...]
升级程序包:
update [package1] [package2] [...]
降级程序包:
downgrade package1 [package2] [...]
检查可用升级:
check-update
卸载程序包:
remove | erase package1 [package2][...]
查看程序包information:
info [...]
查看指定的特性(能够是某文件)是由哪一个程序包所提供:
provides | whatprovides feature1[feature2] [...]
清理本地缓存:
clean [ packages | metadata |expire-cache | rpmdb | plugins | all ]
构建缓存:
makecache
搜索:
search string1 [string2] [...]
以指定的关键字搜索程序包名及summary信息;
查看指定包所依赖的capabilities:(即包所依赖的其余包或文件)
deplist package1 [package2] [...]
查看yum事务历史:每一次yum执行安装、卸载和删除都是启动了一次yum事务
history[info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
安装及升级本地程序包:
*localinstall rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use install)
* localupdate rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use update)
包组管理的相关命令:
* groupinstall group1 [group2] [...]
* groupupdate group1 [group2] [...]
* grouplist [hidden] [groupwildcard] [...]
* groupremove group1 [group2] [...]
* groupinfo group1 [...]
配置一个yum执行,并设置仓库,以CentOS6.6为例:
首先切换到/etc/yum.repos.d/这个路径下,使用ls列出全部的仓库文件
默认启用的是CentOS-Base.repo这个文件中的,其余的都默认不启用,
把CentOS-Base.repo重命名为CentOS-Base.repo.bak,而后这个仓库问价就不可用了,而后咱们建立本身的仓库文件,(这里我用的是本身的ftp服务器,下面若是你的不能安装,你就把原来的仓库文件还原,联网的状况下,也是能够安装成功的),在此目录下建立一个文件并编辑vim centos-local.repo
而后保存退出,使用yum repolist列出可用的仓库的信息
这样仓库就可使用了
yum list 显示全部的程序包,此命令还支持glob匹配
安装程序包
yum install gcc
有四个依赖包,而后输入Y进行安装
这就安装好了,
查看包的简要信息
搜索包名及summary信息
查看指定包所依赖的capabilities
查看yum的历史事务
安装包组,使用yum grouplist 查看包组,能够看到已安装的和能够安装的包组
以这个命令为例,安装DevelopmentTools这个包组
yum groupinstall "Development Tools"
出现Complete!这样就安装完成了
如何使用光盘看成本地yum仓库:
(1) 挂载光盘至某目录,例如/media/cdrom
# mount -r /dev/cdrom /media/cdrom
(2) 建立配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
以CentOS7为例,使用光盘看成本地yum仓库
首先挂载光驱,建立一个目录/media/cdrom,而后使用
mount –r/dev/cdrom /media/cdrom
出现这个设备,就是挂载成功了
而后cd /media/cdrom目录下
repodata这个目录就是能够直接指定的仓库目录
而后cd/etc/yum.repos.d/下使用ls查看下,若是有其余.repo结尾的文件,先给更名,而后建立一个名为local.repo的本地仓库
使用yumrepolist 就能够看到本身建立的本地仓库了
这样使用光盘建立本地仓库就完成了
而后就能够安装或更新软件包了
yum的命令行选项:
--nogpgcheck:禁止进行gpgcheck
-y: 自动回答为“yes”
-q:静默模式;
--disablerepo=repoidglob:临时禁用此处指定的repo
--enablerepo=repoidglob:临时启用此处指定的repo
--noplugins:禁用全部插件
yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号
$arch: 平台
$basearch:基础平台;
$YUM0-$YUM9
建立yum仓库:
自建仓库,首先要有指向光盘或者指向互联网上的镜像的仓库,由于要先装createrepo
使用yum install createrepo 安装,createrepo能够帮助咱们去组织和管理建立出
rpm包的相关的文件,
createrepo命令的使用:
createrepo[options] <directory> 选项通常都省略
以CentOS6.6为例,建立仓库:
下载一些rpm包到本地,而后把有限的rpm包建立成仓库我用的是本地的文件服务器,
首先使用lftp 172.16.0.1 登陆到服务器上,而后进入pub目录下,ls找到Sources,而后切入Sources目录中
找到6.x86_64目录,而后依次进入这些目录xen4centos/x86_64/Packages,这里面有不少rpm包,把它们都下载到本地目录下
lftp172.16.0.1:/pub/Sources/6.x86_64/xen4centos/x86_64/Packages> 在这个模式下使用!加上命令执行的是bash操做
建一个目录/yum/repo,而后切换到本地的/yum/repo而后把Packages中的全部.rpm结尾的所有下载到/yum/repo中
下载完成后,使用bye退出
而后切换到/yum/repo目录中,使用ls查看下,看是否下载成功
使用createrepo ./ 就能够建立了
建立完成后,就生成了repodata目录,而后cd进入,ls查看会有几个文件
本身建立的仓库据弄好了,而后本身建立指向下,看可否使用
进入/etc/yum.repos.d/目录下,修改centos-local.repo这个文件,加入下面内容
而后使用yum repolist 显示可用repo
本身建立的仓库可使用
试一下,yum install xen
输入y就能够安装了,依赖关系中有咱们本身建立仓库,这就证实本身建立的仓库可用
程序包编译安装:
上面演示和讲到的安装都是直接安装,即安装的都是二进制文件,程序的编译安装就是下载程序的源码,而后本身进行编译,而后进行安装
若是你说既然有别人编译好的二进制格式的了,咱们拿来直接用不就好了,为何还要本身编译呢?
那是由于,别人编译好的软件里面的功能可能不是很符合本身,或者不能彻底发挥本身的硬件的性能,因此这就要本身根据本身的硬件进行编译了
下载源码的rpm包,而后使用rpmbuild命令制做成二进制格式的rpm包,然后再安装
一个源代码要想称为一个可执行的程序须要经历的过程:
简单来讲有如下几个过程
源代码 --> 预处理 --> 编译(gcc)--> 汇编 --> 连接 --> 执行
C代码编译安装三步骤:
(1) ./configure:
经过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile;检查依赖到的外部环境;
(2)make:
make是一个工具,根据makefile文件为标准,经过调用别的工具来完成整个程序的构建构建应用程序;
(3)make install
开发工具:
autoconf:生成configure脚本
automake:生成Makefile.in
建议:安装前查看INSTALL,README
开源程序源代码的获取:
官方自建站点:
apache.org(ASF)
mariadb.org
...
代码托管站点:
SourceForge
Github.com
code.google.com
c/c++的编译使用 gcc(GNU C Complier)编译器来编译
编译C源代码:
前提:提供开发工具及开发环境
开发工具:make,gcc等
开发环境:开发库,头文件
glibc:标准库
经过“包组”提供开发组件
CentOS6: "Development Tools", "Server Platform Development",这两个包组要安装好
第一步:configure脚本
选项:指定安装位置、指定启用的特性
--help:获取其支持使用的选项
选项分类:
安装路径设定:
--prefix=/PATH/TO/SOMEWHERE:指定默认安装位置;默认为/usr/local/
--sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装位置;
Systemtypes:
OptionalFeatures: 可选特性
--disable-FEATURE
--enable-FEATURE[=ARG]
Optional Packages: 可选包
--with-PACKAGE[=ARG]
--without-PACKAGE
第二步:make
第三步:makeinstall
安装后的配置:
(1) 导出二进制程序目录至PATH环境变量中;
编辑文件/etc/profile.d/NAME.sh
exportPATH=/PATH/TO/BIN:$PATH
(2) 导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中;
让系统从新生成缓存:
ldconfig[-v]
(3) 导出头文件
基于连接的方式实现:
ln-sv
(4) 导出帮助手册
编辑/etc/man.config文件,添加一个MANPATH
下面以CentOS6.6为例编译安装软件:
首先确保开发工具和开发环境都下载安装好了
而后下载源程序,
我在这里是直接到本身的文件服务器上进行下载的,下载这个httpd-2.2.29.tar.bz2
而后使用tar展开,进入其目录下
里面有INSTALL文件,能够进入查看,里面会告诉你安装步骤,还有configure文件
而后使用configure命令
./configure--prefix=/usr/local/apache2 --sysconfdir=/etc/http2 指定安装目录和配置文件的目录,回车就能够进行安装了
没有出现error就证实成功了,就能够执行第二步make了
出现这样的字样就算成功了
下面进行第三步,make install就好了,这一步通常没错误
而后咱们进入咱们安装指定的目录去看下
而后启动试试:
使用bin/apachectl start 会出现一个错误,那个不用管,而后使用netstat–tan有80端口这一项处在LISTEN在证实启动成功了
而后使用浏览器验证下
显示这样的字样,证实启动成功
后面的安装后的配置就不演示了