rpm包管理器:
应用程序要想成为机器可识别的二进制机器码,必须经过一下步骤:
rpm包管理器的功能就是将这一切过程自动管理,成为易于普通人使用,可简化应用程序安装的工具。
人们将源码经过编译执行后将程序打包成rpm格式的包,所有使用rpm包安装时必须与提供rpm包的作者使用相同的操作系统平台环境。因此出现了不同的包管理器,rpm知识其中一个。
rpm包的命名格式:
rpm包命名方式:name-version-arch.rpm
version :主版本号、次版本号、平台号
arch :表示平台,格式有release。os。arch
此外,rpm包的制作这根据应用程序的相应的功能将一个大的程序分割成不同包发布,这就是rpm包的拆包机制:一般分为主包和次包。
主包:提供该软件的主要功能。
次包:类似于插件机制来为主包补充相应的功能。
rpm包在安装的时候会检查软件的依赖关系,因此在安装的时候出现软件依赖关系导致的安装错误,需要自行解决。此外,为了rpm包的安全性,rpm包安装时会检查包的完整性和来源合法性。采用非对称加密技术进行加密(非对称加密机制另外学习)。
rpm在安装软件的时候会在本地创建数据库,用来存放相关的信息。如程序包名称及版本、依赖关系、功能说明、安装生成的各文件的文件路径及校验码信息。以便后续的查询。(rpm最使用的功能就是查询功能)。
rpm命令常用使用方法:
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
--test 仅测试安装但不真正安装
--nodeps 忽略依赖关系
--replacepgks 即使将要安装的包以安装过也重新安装
--nodigest 不检验包完整性
--nosignature 不检验包的来源合法性
--prefix 指定安装路径
--noscipts:不执行程序包脚本片段
%pre :安装前脚本 --nopre
%post:安装后叫脚本 --nopost
%preun:卸载前脚本 --nopreun
%postun:卸载后脚本 --nopostun
升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
upgrade:安装有旧版程序包,则升级,没有就安装
freshen:安装有旧版本程序包,则升级,没有则不升级
--oldpackage:降级
--force:强制
注意:1、不要多内核做升级操作:linux支持多内核版本并存,因此可以直接安装新版本内核。
2、如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一配置文件并不会覆盖此前的配置文件,而是重命名(filename.newrpm)后保存。如果旧版的配置文件不曾改过,那么新版的配置文件不会安装,而是利用旧版的配置文件。
查询:
rpm {-q|--query} [select-options] [query-options]
[select-options]
-a :所有包
-f :查看指定的文件由哪个程序包安装生成
-p /path/to/pachage_file :针对尚未安装的程序包文件做查询操作
--whatprovides capability :查询指定的capability由哪个程序包提供
--whatrequires capability :查询指定的capability依赖于哪个程序包
[query-optios]
--changelog :查询rpm包的修改信息
-c :查询程序的配置文件
-d :查询程序的文档
-i :information
-l :查看指定的程序包安装后所生成的所有文件
--scripts :程序包自带的脚本片段
--provides :列出指定程序包所提供的capability功能
卸载:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_NAME ...
校验:
rpm {-V|--verify} [select-options] [verify-options]
verify-options包括以下可选选项
[--nodeps] :不做依赖性校验
[--noscripts] :不做程序包脚本片段校验
[--nodigest] :不做包完整性校验
[--nosignature] :不做包来源合法性校验
[--nouser] :不检查属主
[--nogroup] :不检查属组
[--nomtime] :不检查修改时间
[--nomode] :不检查权限
rpm包的校验功能是根据非对称加密技术来进行的。所以rpm校验的选项包括:
S file Size differs 文件大小的不同
M Mode differs (includes permissions and file type) 文件权限的不同
5 digest (formerly MD5 sum) differs 文件的指纹不同
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 包提供的能力的不同
校验后的输出格式中信息有:
c %config configuration file.
d %doc documentation file.
g %ghost file (i.e. the file contents are not included in the package payload).
l %license license file.
r %readme readme file.
rpm校验的时候需要先导入公钥,rpm的提供者都会同时提供公钥。使用命令
rpm --import /path/from/gpg-pubkey
数据库重建:
rpm --initdb|--rebuilddb
initdb :初始化数据库,如果实现不存在数据库,则新建之
rebuilddb :无论当前是否存在数据库,都始终重建数据库
yum工具:
yum是作为rpm包的前段工具使用的,yum安装使用的机制如图:
yum可选命令如下:
* install package1 [package2] [...] 安装制定的包
* update [package1] [package2] [...] 更新指定的包(默认直接更新到可升级的最新版本,如果指定的更新包原本没有安装,则不会安装)
* update-to [package1] [package2] [...] 更新包到指定版本
* check-update 检查哪些程序可升级
* upgrade [package1] [package2] [...] 升级程序包相当于update
* upgrade-to [package1] [package2] [...]
* distribution-synchronization [package1] [package2] [...]
* remove | erase package1 [package2] [...] 卸载指定的包
* list [...] 列出相应的包
* info [...] 打印指定包的详细信息
* provides | whatprovides feature1 [feature2] [...] 查看指定的包提供那些能力(可用glob通配符模糊指定一个包)
* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] 清楚相应的缓存
* makecache 制作yum缓存
* groupinstall group1 [group2] [...] 安装软件组
* groupupdate group1 [group2] [...] 软件组更新
* grouplist [hidden] [groupwildcard] [...] 列出使用的yum仓库中组列表
* groupremove group1 [group2] [...] 移除软件组
* groupinfo group1 [...] 列出软件组的信息
* search string1 [string2] [...] 根据关键字查找相应的包
* localinstall rpmfile1 [rpmfile2] [...] 安装下载到本地的rpm包(同时会根据其依赖关系自动安装其他软件包)
* localupdate rpmfile1 [rpmfile2] [...] 更新下载到本地rpm包
* reinstall package1 [package2] [...] 重新安装软件包
* downgrade package1 [package2] [...] 降级安装软件包
* repolist [all|enabled|disabled] 默认列出当前系统上的yum可用仓库列表
* version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
* history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll-back|new|sync|stats]
* check 查询本地rpm数据库并提供找到的问题信息
* help [command] 帮助文档
yum的命令行选项:
--nogpgcheck :禁止进行gpgcheck
-y :自动回答为“yes”
-q :静默模式,不向屏幕输出信息
--disablerepo=repo_id :临时禁用某个repo仓库
--enablerepo=repo_id :临时启用某个repo仓库
--noplugins : 禁用所有插件
yum提供了配置文件来定义相应的功能。路径为/etc/yum.conf 和/etc/yum.repos.d/
因此在定义本地仓库配置文件是只需要再/etc/yum.repos.d/下创建以.repo结尾的文件即可。
在这里指定的选项会自动覆盖主配置文件的相应选项。
例:创建自定义yum配置文件:
[repositoryID]
name=Some name for this repository #只是用来便于识别的,可指定任意字符串
baseurl=url://path/to/repository/ #指定yum仓库位置
enabled={1|0} #默认是1
gpgcheck={1|0} #默认是1,表示进行gpg检查
gpgkey=URL #只有在gpgchek=1时才有效
enablegroups={1|0} #是否执行组安装
failovermethod={roundrobin|priority}
#表示当有多个仓库可使用时使用的仓库顺序与,默认为:roundrobin,意为随机挑选;cost=默认为1000
yum自定义仓库方法:
有时候会需要自定义一个yum仓库来供使用,使用createrepo软件可实现自动创建yum仓库需要的repodata文件,只需要提供包含有rpm包的packages目录,在使用createrepo时只需要指定packages目录的路径即可。
createrepo [options] <directory>
-u --baseurl <url>
-o --outputdir
--changelog-limit CHANGELOG_LIMIT
具体使用的选项可以自行查看man手册,根据需要指定相应的选项。
编译源码安装程序:
make被称为项目管理器,make(configuer --》makefile.in--》makefile)
make工具根据configure脚本来检查软件的依赖性关系,检查无误后会依据makefile.in文件为模板创建makefile文件,然后才能执行make&&make install
编译安装三步骤:
第一步:./configure <options>
作用:
1、 通过选项传递参数,指定启用特性、安装路径等,执行时会参考用户指定的参数 和makefile.in来生成makefile文件
2、检查依赖到的外部环境
第二步:make: #根据makefile文件,构建应用程序
第三步:make install # 执行安装
安装后的配置:
(1) 导出二进制程序目录至PATH环境变量中;
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中;
让系统重新生成缓存:
ldconfig [-v]
(3) 导出头文件
基于链接的方式实现:
ln -sv
(4) 导出帮助手册
编辑/etc/man.config文件
添加一个MANPATH
注释:configure和makefile.in文件都是用特定的开发工具帮助程序开发者来创建这些文件的。
开发工具:
autoconf:用来生成configure脚本
automake:用来生成makefile.in文件
建议:安装前查看INSTALL或者README文件
扩展:
DNF新一代的RPM软件包管理器。他首先出现在 Fedora 18 这个发行版中。而最近,他取代了YUM,正式成为 Fedora 22 的包管理器。
DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等多方面的内容。
DNF使用 RPM, libsolv 和 hawkey 库进行包管理操作。尽管它没有预装在 CentOS 和 RHEL 7 中,但你可以在使用 YUM 的同时使用 DNF 。
DNF 的最新稳定发行版版本号是 1.0,发行日期是2015年5月11日。 这一版本的额 DNF 包管理器(包括在他之前的所有版本) 都大部分采用 Python 编写,发行许可为GPL v2