无论我们使用哪种操作系统,仅使用操作系统自带的程序包一般都满足不了我们的使用需求,所以我们都需要安装程序。这篇博文我们来讲解一下在Linux操作系统中我们该如何安装程序。
本篇文章会涉及rpm管理程序包、yum管理程序包、yum仓库的指定、自己编译源码安装程序、简要介绍一下该如何自己建立一个yum仓库给其他主机提供程序包。
一、rpm管理程序包
(1)如何获取安装包
1)系统发行版的光盘或者官方的文件服务器(或者镜像站点):
http://mirrors.aliyun.com/
http://mirrors.163.com/
http://mirrors.sohu.com/
2)第三方组织:
(a)EPEL:社区组织
http://mirrors.kernel.org/fedora-epel/
(b)非生产环境下使用的搜索引擎
http://pkgs.org 最好用
(2)rpm管理程序包
提供的操作有:安装、升级、卸载、查询和校验、数据库维护
使用格式:rpm [OPTIONS] [PACKAGE_FILE]
概述:
安装:-i,--install
卸载:-e,--erase
升级:-U,--update,-F,--freshen
查询:-q,--query
校验:-V,-verify
数据库维护:--builddb,--initdb
1)安装
使用格式:rpm {-i|--install} [install-options] PACKAGE_FILE …
通用选项:
-v:详细信息
-vv:更详细的信息输出
--quiet:尽量少的输出命令的提示信息,一般仅输出错误信息
注:这里的通用选项对以下卸载等操作同样适用
安装选项:
-h:hash marks,输出进度条;每个#表示2%的进度;
--test:只准备不安装,测试、检查和报告依赖关系和冲突信息等;
--nodeps:忽略依赖关系;不建议,因为安装了有可能使用不了;
--replacepkgs:重新安装,一般改错了配置文件时可删掉配置文件,重新安装可恢复;
--nosignature:不检查包签名信息,不检查来源合法性;
--nodigest:不检查包完整性信息;
--noscripts:不执行以下四类rpm自带的脚本;
--nopre:不执行安装过程开始之前运行的脚本;
--nopost:不执行安装过程完成之后运行的脚本;
--nopreun: 不执行卸载过程真正开始执行之前运行的脚本;
--nopostun:不执行卸载过程完成之后运行的脚本;
2) 升级
使用选项:rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-U:升级或安装;
-F:仅升级,仅有指定要安装程序的老版本包时升级。
升级选项:
--oldpackage:降低版本;
--force:强制升级;
注意:(1)不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版本内核即可
(2)如果某源程序包的配置文件安装后曾被修改过,升级时,新版本程序提供的同一配置文件不会
覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
3)卸载
使用格式:rpm {-e|--erase} [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
卸载选项:
--allmatches:卸载所有匹配指定名称的程序包的各版本;
--nodeps:忽略依赖关系;
--test:测试卸载,查看依赖关系。
4)查询
使用格式:rpm {-q|--query} [select-options] [query-options]
挑选选项:
PACKAGE_NAME:查询指定的程序包是否已经安装及其版本。
-a, --all:查询所有已经安装的包。
-f FILE:查询指定的文件由哪个程序包安装生成。
-p, --package PACKAGE_FILE:用于对未安装的程序包执行查询操作(和query-options结合使用)。
--whatprovides CAPABILITY:查询指定的CAPABILITY(功能)有那个程序包生成
示例: rpm -q --whatprovides ‘config(bash)‘
--whatrequires CAPABILITY:查询指定的CAPABILITY被那个包所依赖
查询选项:
--changelog:查询rpm包的changelog;
-l, --list,列出一个包安装生成的所有文件列表。
-i, --info:程序包相关的信息,版本号、大小、所属的包组等和 -q 联合使用;
-c, --configfiles:查询指定的程序包提供的配置文件;
-d, --docfiles:查询指定程序包的帮助文档;
--provides:查询指定程序包提供的所有CAPABILITY
-R, --requires:查询指定程序包的依赖关系
--scripts:查看程序包自带的脚本片段的信息
5)校验
使用格式:rpm {-V|--verify} [select-options] [verify-options]
查询显示字段介绍:
S file Size differs #文件大小
M Mode differs (includes permissions and file type) #权限改变
5 digest (formerly MD5 sum) differs #MD5码改变
D Device major/minor number mismatch #主次设备不匹配
L readLink(2) path mismatch #readLink路径不匹配
U User ownership differs # 属主改变
G Group ownership differs # 属组改变
T mTime differs # 时间戳改变
P caPabilities differ #功能改变
6)包合法性验证和完整性验证
来源合法性验证:
数字签名:包的制作者单向加密程序包的校验码,再用私钥加密程序包的校验码。
使用者用公钥可以解密即为来源合法。
完整性检验:
得出校验码,再把程序包单向加密之后比对,如一致则为完整性合法。
对于CentOS的发行版rpm而言,导入公钥即可
]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
验证:
(1)安装此组织签名的程序时,会自动执行验证;
(2)手动验证: rpm -K PACKAGE_NAME
7)数据库管理
rpm管理数据库路径:/var/lib/rpm/
查询操作通过此处的数据库进行。
rpm数据库重建:
获取帮助:man 8 rpmdb (CentOS 7)
rpm {--initdb|--rebuilddb}:
--initdb:初始化数据库,当前无任何数据库可初始化创建一个新的;如果有
不执行任何操作;
--rebuildb:重新构建。通过读取当前系统上所有已经安装过的程序包进行重新创建;
二、yum管理程序包
yum是rpm的前台管理程序,可以自动解决rpm无法解决的依赖关系,方便用户的程序包管理
(1)yum的工作机制
首先在本地建立yum命令的仓库配置文件,而后向远程主机的yum仓库申请元数据文件,下载了元数据文件后,将元数据文件缓存在本地,之后安装程序包时可以先查询本地cache,查看依赖关系,之后看对比本地已下载的程序包,从yum仓库下载未下载的程序包至本地,先安装被依赖的程序包,之后安装所需程序包。安装完成后会删除下载的程序包以节约空间,但是缓存在本地的yum仓库元数据不会删除。
(2)建立yum仓库指向配置文件
/etc/yum.repos.d/*.repo:此目录下的自定义文件为仓库的指向提供配置信息
文件内容解释:
[repositoryid] --------->此配置文件的唯一标识
name=Some name for this repository -------->名称
baseurl=url://path/to/repository/ -------->yum仓库的位置指向
ftp://
http://
nfs://
file:/// -------->此处的最后一个/为根
enabled={1|0} -------->是否启用此配置文件,1为启用,0为不启用
gpgcheck={1|0} -------->是否执行校验,1为开启,0为不启用
gpgkey=URL -------->指明密钥文件
enablegroups={1|0} -------->是否使用组来划分程序包
cost={1000} -------->开销,默认为1000,当两个yum仓库中拥有同一资源,定 义开销值来决定去哪一个yum仓库下载。
注:此文件中的1、2、3、4、5必须给出,gpgcheck=1则第6项也必须给出。另外更多信息请执行
man 5 yum.conf 查看
另外:yum的repo配置文件中可用的变量:
$releasever:当前OS的发现版的主版本号;
$arch:平台
$basearch:基础平台
$YUM0-$YUM9: 提供的自定义变量(可在shell环境变量中设置)
示例:
[epel] name=Extra Packages for Enterprise Linux 7 - $basearch baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
tips:如何将光盘配置成yum仓库
1 挂载光盘至某目录,例如/media/cdrom
#mount -r -t iso9660 /dev/cdrom /media/cdrom
2 创建配置文件
[Base] name="Centos cdrom repo" baseurl=file:///media/ enable=0 gpgcheck=0
(3)yum命令
1)显示仓库列表:
yum repolist [all | enabled | disabled]
2)显示程序包:
yum list [all | glob_exp1] [glob_exp2] [...]
yum list available| updates|installed [glob_exp1] […]
3)安装程序包:
yum install package1 [package2] [...]
4)重新安装
reinstall package1 [package2] [...]
5)升级程序包:
update [package1] [package2] [...]
6)降级程序包:
downgrade package1 [package2] [...]
7)检查可用升级:
check-update
8)卸载程序包:
remove | erase package1 [package2] [...]
注意:依赖于这个卸载的包的程序也会被卸载;
9)查看程序包信息
info [...]
10)查看指定的特性(CAPABILITY)(也可以是某文件)由那个程序提供
注:相当于 rpm -qf
provides | whatprovides feature1 [feature2] [...]
11)清理本地缓存:
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
12)生成缓存:
makecache
13)搜索:
search string1 [string2] [...] 以指定关键字搜索程序包名及摘要信息
14)查看指定程序包的依赖关系
deplist package1 [package2] [...]
15)查看yum事务历史:
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
16)包组管理相关命令:
* groupinstall group1 [group2] [...]
* groupupdate group1 [group2] [...]
* grouplist [hidden] [groupwildcard] [...]
* groupremove group1 [group2] [...]
* groupinfo group1 [...]
用法同上
(4)自己建立一个yum仓库
1)新建一个yum仓库目录,而后在此目录下新建一个Packages的目录,里面放入rpm包。
2)之后在rpm包目录中执行createrepo --basedir=/tmp/myyumrepo/ ./
此时会在/tmp/myyumrepo/在存在一个repodata目录
3)我们可以在/etc/yum.repo.d/下新建一个仓库指向文件,来验证我们新建的仓库是否可用。
[myyumrepo] name=myyumrepo baseurl=file:///tmp/myyumrepo/ enabled=1 gpgcheck=0
注:1、关于校验问题可以自行使用md5单向加密程序包获得特征码,而后再使用私钥加密得到 key文件,之后在yum指向文件中指向这个key文件。
2、如果想让其他人访问到自建的yum仓库,需建立文件服务器。此文对此不做太多涉及。
三、自己编译源码安装程序
前提:1、系统内配置好了编译环境;
通过“包组”提供开发组件
CentOS 6:"Develoment Tools"和"Server Platform Develoment"
CentOS 7:"Develoment Tools"
2、下载源码包并解压
(1)编译安装:
这里以httpd的安装为示例
1、configure脚本
选项:指定安装位置,指定启用的特性
选项分类:
安装路径设定:
--prefix=/PATH/TO/SOMEWHERE:指定默认安装位置,默认为/usr/local
--sysconfdir=/PATH/TO/SOMEWHERE:指定配置文件安装位置
注:./configure --help:获取其支持使用的选项
2、make
(2)安装后的操作
1)导出二进制程序目录至PATH环境变量中;
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
2)导出库文件路径
编辑/etc/ld.so.con.d/NAME.conf
添加新的库文件所在目录至此文件
ldconfig [-v]
3)导出头文件
基于链接的方式实现:
ln -sv
4)导出帮助手册
编辑/etc/man.config文件
添加一个MANPATH指向自己编译安装的程序包的帮助手册目录
注:此文示例均是在CentOS上做的测试。
本文出自 “RoadtoOM” 博客,请务必保留此出处http://flyalways.blog.51cto.com/7680670/1728686
原文:http://flyalways.blog.51cto.com/7680670/1728686