一,Linux软件包:有二进制包与源代码包
包管理器:包含数据库和程序组成清单,能将编译好的程序打包成一个或几个文件,可用于实现安装,卸载,升级,检验,数据库管理,主流的有RedHat的rpm后缀为.prm,Debian的dpkg后缀为.deb
数据库包含:
程序名及版本,程序之间的依赖关系,功能说明,安装生成的个文件路径级校验信息
程序组成清单包含:
文件清单,安装卸载时运行的脚本
程序的命名格式:
源代码命名:name-version.tar.{gz|gz2|xz}
Version包含:major.minor.release
Rpm命名:name-version-release.arch.rpm
Release为rpm包的版本号与源码发行号无关。
arch适用的硬件平台
程序间的依赖关系:程序间的依赖关系非常繁杂,为了解决这个问题
Debian的dpkg升级为apt-get
RedHat的rpm升级为yum(依赖于rpm工作)
二,rpm包:
rpm的分包机制:主包命名和源程序一样
子包需要在name后加上功能说明
例如:主包:
bash-4.2.3-3.centos7.x86_64.rpm
子包:
bash-a-4.2.3-3.centos7.x86_64.rpm
bash-b-4.2.3-3.centos7.x86_64.rpm
bash-devel-4.2.3-3.centos7.x86_64.rpm
rpm包的获取途径:
1, 发行光盘或站的服务器
2, 项目官网
3, 第三方机构或个人制作并公开的rpm包
rpm包的合法性验证:
来源合法性
数据完整性
rpm包的安装:
rpm [option] /path/to/package_file
-i:install安装
-v:显示较详细信息
-vv:详细信息
-vvv:更详细的信息
-h:使用#号表示安装进度,一个#代表2%
组合-ivh
--test:测试是否可安装,而不安装
--prefix PATH:将软件安装到指定目录
--nodeps:不考虑依赖关系,强制安装。
--replacepkgs:重新安装,如果原文件作了修改,则不执行替换,而是将应该安装的
配置文件重命名为.rpnew文件
rpm包的升级:
新版本替换老版本
rpm[option] /path/to/pakage_file
-u:有老版本则升级,没有则安装 -Uvh
-F:必须有老版本,否则不安装 -Fvh
--force:强制升级,可能会使依赖此包的程序无法运行
rpm包的卸载:
Rpm[option] package_name
-e:卸载
如果存在依赖,一种是将依赖于此的安装包一并卸载,二是忽略依赖关系,但可能回事依赖的安装包运行不正常–nodeps
如果包的配置文件安装后曾被改动过,卸载时不会卸载而是被重命名为.rpmsave文件
rpm查询操作:
1, 查询包是否安装
rpm –qpackage_name …可以查询多个,空格分隔
2, 查询所有已安装的包:
rpm –qa 按条件过滤rpm –qa|grep ‘pattern’
3, 查询包的描述信息
rpm –qipackage_name
4, 查询包安装生成了那些文件
rpm –qlpackage_name
5,查询某包安装生成了那些配置文件
rpm –qc package_name
6,查询某包安装生成了那些文件
rpm –qdpackage_name
7,查询程序包的相关脚本
rpm –q –scriptspackage_name
8,查询某文件是由那个包安装生成的
rpm –qf/path/to/package_file
9,对尚未安装的包进行查询
rpm –qpi /path/to/package_file
rpm –qpl /path/to/package_file
rpm –qpc /path/to/package_file
rpm –qpd /path/to/package_file
效验:检查包安装后生成的文件属性是否发生变化
rpm –V package_name
各属性代表的意义,某属性为变化显示为.
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum)differs
D Devicemajor/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
rpm包来源合法性及完整性检验:
前提:在当前系统上导入包的制作者的公钥
导入:
rpm --import/path/to/key_file
# rpm -qa gpg-pubkey*
显示所有已经导入的gpg格式的公钥
# rpm -qi gpg-pubkey-NAME
显示密钥的详细信息
检查包:安装过程中会自动执行
手动检查:
rpm -K /path/to/package_file
rpm --checksig /path/to/package_file
不检查包完整性:
rpm-K --nodigest
不检查来源合法性:
rpm-K –nosignature
数据库重建:
上边我们说过,数据库里包含了程序名及版本,程序之间的依赖关系,功能说明,安装生成的个文件路径级校验信息,如果书没有数据库,那么rpm包的安装将会无法确定依赖关系等所以我们要学会数据库的重建
数据库的目录为/var/lib/rpm
初始化:rpm - -initdb如果没有库则会创建一个,如果有则不创建
重建:rpm - -rebuilddb:直接重建覆盖原有数据
三,yum
yum的功能:
可以解决rpm包的依赖关系
yum的工作流程:
第一步:获取仓库数据缓存与本地/var/cache/yum
第二部:yum客户端程序在本地分析元数据文件,并结合本地系统环境(已安装的包)做出
要安装的程序包的决策
第三部:获取程序包根据决策联系Yum仓库,下载各程序包缓存于本地后,一并进行安装;
yum配置文件中可用的四个变量:
$releasever: 程序的版本,对Yum而言指的是redhat-release版本;只替换为主版本号,
如RedHat6.5,则替换为6;
$arch:系统架构
$basearch:系统基本架构,如i686,i586等的基本架构为i386;
$uuid:
$YUM0-9:在系统中定义的环境变量,可以在yum中使用
文件中以变量的方式指定对应的参数就是为了适应文件路径下的更新,而不用每次都更新路
径。
yum使用机制:
要使用yum必须确保有yum仓库可用
Rpm包的文件服务器中,repodate目录的父目录就是一个仓库
Rpm包的获取路径
ftp格式的 ftp://server/path/to/repository
http格式的 http://server/path/to/repository
nfs格式的 nfs://server/nfs_path
file本地文件 file:///path/to/repository
光盘镜像文件 file:///media/cdrom
yum还提供了repo格式的配置文件,在其中指明仓库访问路径及各种属性
主配置文件:/etc/yum.conf
其他配置文件:/etc/yum.repos.d/下以.repo结尾的
yumrepo文件的格式。
[REPOID]
name=somefor this repository
baseurl=file:///media/cdrom
http://server/path/to/repository
enabled={0|1} 默认不启用为0,启用为1(仓库状态)
gpgcheck={0|1}0不检测,1检查,默认
gpgkey=URL(指向KEY地址)
mirrorlist=URL to a file (可以讲baseurl指定在一个文件中,用mirrorlist指定)
cost={1..n}指定仓库访问开销,默认1000,越小优先级越高
yum仓库包含:
数据:各种rpm包
元数据:数据文件,包名,版本信息,各个包所含的文件类表,依赖关系,报分组信息
Yum下的各种数据包,只显示了10个
yum仓库的类型:
base库:通常为系统发行版所提供的程序包
updates库:升级安装包库,优先级高于base
yum仓库自建:
1、如何自建基于光盘镜像的yumrepo
找一个挂载镜像
创建一个yum仓库指向镜像
2、自建提供yum仓库的中心服务器
ftp,http, nfs
以http为例,步骤:
(1)安装httpd程序,并启动服务
#rpm -ivh httpd-
或者
#yum install httpd
我选择yum安装
安装成功
启动服务
#service httpd start
#chkconfig httpd on (设定开机启动状态)
(2)httpd的文档根目录为/var/www/html:
创建子目录,存放某相关的所有rpm包
我们在html创建一个repository作为仓库目录
(3)为仓库生成元数据文件,以使能够作为仓库使用
#rpm -ivh createrepo-
或者
#yum install createrepo
#createrepo /path/to/rpm_repo/
这就是我们自己创建的仓库,然后配置/etc/yum.repos.d/*即可使用
(4) 配置yum客户端使用此仓库即可
配置方法见yum的使用机制
Rpm与yum的使用及仓库创建就完成了