rpm命令 软件包管理
程序包管理
一、概述
(一)API:Application Program Interface 应用编程接口
ABI:Application Binary Interface 应用二进制接口
Unix-line 使用ELF
API可以相同,不同架构的ABI不同
(二)库级别的虚拟化
在linux上可以运行WinE ,在Windows上可以运行Cywin来实现库的跨平台运行
(三)系统级开发
C/C++:httpd,vsftpd,nginx等应用一般对系统要求较高的,使用C/C++来编辑核心程序
(四)应用级开放
java/Python/perl/ruby/php
java:jvm库
Python:pvm
perl:perl解释器
ruby:ruby解释器
php:php解释器
(五)系统级程序格式:例如c/c++
源代码:文本格式的程序代码
编译开发环境:编译器,头文件,开发库,
二进制格式:文本格式的程序代码–>编译器–>二进制格式(二进制程序,库文件,配置文件,帮助文件)
(六)应用级编程工具程序格式,例如java,python
源代码:编译成能够在其虚拟机上运行的格式
开发环境:编译器,开发库,
二进制
项目构建工具:
c/c++:make
java:maven
二、程序包管理器:
1、源代码–>目标二进制格式–>组织成为一个或者有限几个"包"文件
安装,升级,卸载,查询,校验
2、程序包管理器:
debian: dpt工具,dpkg,".deb"后缀
REHL:redhat: redhat package manager–>rpm,".rpm"; rpm is package manager;
SUSE: rpm, ".rpm"
Gentoo: 使用poets机制
ArchLinux:
3、源代码: 命名格式 name-VERSION.tar.gz
VERSION包含: major.minor.release
4、rpm包命名格式:
name-VERSION-release.arch.rpm
VERSION: major.minor.release
release.arch: rpm包的发行号
release.os
archetecture:架构 i386 x64(amd64),ppc noarch
拆包:主包和子包
主包: name-VERSION-release.acch.rpm
子包: name-function-VERSION-release.arch.rpm
光盘挂载:mount -r /dec/cdrom /media.cdrom
5、依赖关系: 子包依赖于主包,不能独立存在使用
前端工具: 自动解决依赖关系
yum: rhel系列系统上的rpm包管理器的前端工具
apt-get(apt-cache): deb包管理器的前端工具
zypper:suse的rpm管理器前段工具
dnf: Fedora 22+系统上的rpm包管理器的前端工具
前端管理工具能解决后端管理工具的许多不便之处
三、程序包管理器: rpm
功能: 将编译好的应用程序的各个组成文件打包成一个或者几个程序包文件,从而更方便的实现程序包的安装,升级,卸载,和查询等管理操作
(1) 程序包的组成清单(每个程序包都单独实现)
文件清单
安装或者卸载时运行的脚本
(2) 数据库(公共)
存储程序包的名称和版本
依赖关系
功能说明
安装生成的各个文件的路径和校验码信息
等等
ls /var/lib/rpm 查看rpm的数据库
包括:group name sigmd5(校验码) triggername发器名称
四、获取程序包的途径
1、系统发行版的光盘或者官方的文件服务器(或者镜像站点)
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
2 、项目的官方站点
例如: www.zabbix.com
3、第三方组织
(a)EPEL
(b)搜索引擎查找,使用专门的rpm包搜索引擎
http://pkgs.org
http://rpmfind.net
4、自己制作rpm包
建议: 从网站下载完成后, 检查其合法性
来源合法性
程序包的完整性
五、Centos系统上rpm命令管理程序包
安装,升级,卸载,查询,校验,数据库维护
1、rpm命令:rpm [OPTION] [PAVKAGE_FILE]
安装: -i, –install
升级: -U, –update, -F, –freshen
卸载: -e, –erase
查询: -q, –query
校验: -V, –verify
数据库维护: –builddb,–initdb
2、安装:
rpm {-i|–install} {install-options} PACKAGE_FILE…
rpm -ivh PACKAGE_FILE…
例如:
安装zsh
安装完成之后可以查看
cat /etc/shellls
如果要使用zsh,直接在命令行界面输入zsh就可以切换到zsh使用,退出使用exit即可
GENERAL OPTION:
-v: berbose,详细信息
-vv;更详细的信息
install-options:
-h: 以hash marks输出进度条,每个#表示2%的进度
–test: 测试安装,检查并报告依赖关系及冲突信息等
–nodeps: 忽略依赖关系;不建议使用
–replacepkgs: 重新安装,但是修改配置文件之后,不会更新配置文件,需要将配置文件删除后安装
–replacefiles
–noscripts
注意: rpm包可以带脚本
四类:
preinstall: 安装过程开始之前运行的脚本,%pre , –nopre
postinstall: 安装过程完成之后运行的脚本,%post, –nopost
preuninstall:卸载过程真正开始之前运行的脚本,%preun, –nopreun
postuninstall:卸载过程完成之后运行的脚本,%postun, –nopostun
–nosignature: 不检查包签名信息,不检查来源合法性
–nodigest: 不检查包完整性信息
3、升级:
rpm {-U|–update} {install-options} PACKAGE_FILE…
rpm {-F|–freshen} {install-options} PACKAGE_FILE…
-U: 升级或安装
-F: 升级
rpm -Uvh PACKAGE_FILE
rpm -Fvh PACKAGE_FILE
–oldpackage: 降级
–force: 强制升级
注意:(1)不要对内核做升级操作,升级内核会重启系统.Linux支持多内核版本并存,因此,直接安装新内核
(2)如果某源程序的包的配置文件安装包曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供
4、卸载:
-e,–erase
rpm {-e|–erase} [–allmatches] [–nodeps] [noscripts] [–notriggers] [–test] PACKAGE_NAME…
–allmatches: 卸载所有匹配指定名称的程序包各版本
–notrigger: 不触发任何操作
–nodeps: 忽略依赖关系
–test: dry run模式,测试卸载
rpm -e 包名
5、查询:
rpm {-q|query} [select-options] [query-options]
[select-options]
package_name:查询执行的程序包是否已经安装,及其版本
-a,–all: 查询所有已经安装过的包
rpm -qa | grep ""
-f,–file FILE: 查询指定的文件由哪个程序包安装生成
-g,–group GROUP: 查询指定包组中包含了哪些包
-p,–package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作
-whatprovides CAPABILITY: 查询指定的CAPABILITY由哪个程序包提供
-whatrequires CAPABILITY: 查询指定的CAPABILITY被哪个包所依赖
[query-options]
–changelog: 查询rpm包的changelog(历史改进)
rpm -q –changelog zsh | less
-l,–list: 列出程序包安装生成的所有程序列表
rpm -ql bash
-i,–info: 查询程序包相关的信息,版本号,大小,所属的包组等
rpm -qi bash
-c,–configfiles: 查询指定的程序包提供的配置文件
rpm -qc bash
-d,–docfiles: 查询指定的程序包提供的帮助文档
rpm -qd bash
—provides: 列出指定的程序包提供的所有CAPALIBITY
rpm -q –provides bash
rpm -q –whatprovides 'config(bash)'
rpm -q –whatrequires 'config(bash)'
-R,–requires: 查询指定的程序包的依赖关系
rpm -q -R bash
–scripts: 查询程序包自带的脚本片段
rpm -q –scripts bash
用法:
-qi PACKAGE,
-qf FILE,
-qc PACKAGE,
-qd PACKAGE
-ql PACKAGE_NAME,
-qpi PACKAGE_FILE
-qpl PACKAGE_FILE
-qpc FILE
-qpd
6、校验:
rpm {-V|verify} [select-options] [verify-options]
V–requires,–verify
rpm -V zsh
man page查询校验信息的意义
六、包来源合法性和完整性验证:
1、来源合法性验证:
数字签名: 用自己的私钥加密对应文件的特征码
2、完整性验证
导入ios文件的秘钥包:rpm –import /…/../RPM-GPG-KEY-CentOS-7
手动校验: rpm -K PACKAGE_FILE
3、获取并导入信任的包制作者的秘钥:镜像文件中存在
在/etc/pki/rpm-gpg 中同样存在RPM-GPG-KEY-CentOS-7 文件存在
对于centos发行版来说: 使用rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7即可
4、验证:
(1)安装次组织签名的程序时,会自动执行验证
(2)手动验证: rpm -K PACKAGE_FILE
七、数据库重建:
rpm的数据库位置: /var/lib/rpm
查询操作: 通过此处的数据库进行的
获取帮助:
CentOS6: man rpm
CentOS7: man rpmdb
rpm{–initdb|rebuilddb} –dbpath
–initdb: 初始化数据库,当前无任何数据库可实现创建一个新的;当前有时不执行任何操作
–rebuilddb: 重新构建,通过读取当前系统上所有已经安装过的程序包重新构建
回顾:
rpm命令实现程序管理
安装: -ivh ,–nodeps –replacepkgs
卸载: -e. –nodeps
升级: -Uvh -Fvh .–nodeps ,–oldpackage 降级
查询: -q ,-qa,-qf,-qi,-qd,-qc,–scripts,-q –changelog,
-q –provides ,-q –requires
校验: -V
导入GPG密钥文件: –import,-K(直接检测,不用安装),–nodigest(不检查完整性) ,–nosignature(不检测来源合法性)
数据库重建: –initdb ,–rebuilddb
yum命令 程序包管理
一、解决依赖关系:
CentOS: yum,dnf
URL:统一资源定位符
yum repository: rpm repo
存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下: repodata):
1、文件服务器格式
baseurl=
ftp://
http://
nfs://
file:///
2、yum客户端
配置文件
rpm -q yum 查看yum文件
rpm -qc yum 配置文件
/etc/yum.conf:为所有仓库提供公共配置,或者不属于仓库的配置
/etc/yum.repos.d/*.repo: 为每一个仓库的指向提供配置
获取配置文件的帮助信息: man yum.conf
仓库指向的定义:(含有选项的,前边数值为默认数值)
[repositoryID]
name=some name for this repository
baseurl=url://path/to/repository(可以指定多个URl)
mirrorlist=(镜像文件,一般不会和URL同时使用)
enabled={1|0}(是否启用)
gpgcheck={1|0}(是否检查来源合法性)
repo_gpgcheck={1|0}(是否检查元数据的来源合法性)
gpgkey=URL(gpg的密钥文件的访问路径)
enablegroup={1|0}(是否使用组来批量管理程序包)
failovermethod={roundrobin(轮询)|priority(优先级)}(故障转移方法)(指定多个baseurl时发生故障如何查询)
keepalive={1|0}
username
passwd
cost=1000(默认)
自己配置yum源
vim *.conf
[base]
name=
baseurl=
gpgcheck=0
[epel]
name=
baseurl=
gpgcheck=0
二、yum命令的使用
yum [options] [command] [package …]
command is one of :
repolist [all|enabled(默认启用)|diaabled(禁用)] 显示仓库列表
list 显示程序包
list optionss
# yum list [通配符]
# yum list available [通配符](可用)
# yum list updates [通配符](可升级)
# yum list installed [通配符](可安装)
安装
install package1 package2 …
重新安装
reinstall package1 package2 …
降级
downgrade package1 [package2] […]
升级制定程序包
update
yum update [package1] [package2] …
检查可用升级
check-update
卸载程序包
remove | erase package1 [package2] …
查询包的简要信息
info
info […]
查看指定的特性(可以是某文件)是由哪个程序包所提供的
provides | whatprovides feature1 [feature2] […]
清理本地缓存
clean [ packages(程序包) | metadata(元数据) | expir-cache(过期缓存) | rpmdb | plugins(插件) | all ]
构建缓存
makecache
搜索:以指定的关键字搜索程序包名及summary信息
search [string1] [string2] […]
查看指定包所依赖的capabilities
deplist package1 […]
查询yum事务历史
history [ info | summary(概要) | packages-list | packages-info | addon-info | redo | undo …]
安装及升级本地程序包
localinstall
包组管理的相关命令
groupinstall group1 […]
groupupdate
grouplist
groupremove
groupinfo
四、如何使用光盘当作本地yum仓库
(1)挂载光盘到某目录
# mount -r -t
(2)创建配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
五、yum的命令行选项
–nogpgcheck: 禁止进行 gpg check
-y: 自动回答为"yes"
-q, –quiet静默模式
–disablerepo=repoidglob:临时禁用此处指定的repo
–enablerepo=repoidglob:临时启用此处指定的repo
–noplugins: 禁用所有插件
六、yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号
$arch: 平台
$basearch: 基础平台
$YUM0-YUM9
http://mirrors.站点.com/centos/$releasever/$arch/$basearch/OS
1、创建yum仓库
安装:yum install createrepo
使用createrepo命令创建:
get到目标目录下
createrepo [options] <directory>
createrepo ./ 查看当前目录的rpm包,并进行创建yum源
编写配置文件
2、程序包的编译安装:
testapp-VERSION-release.src.rpm –>安装后,使用rpmbuild命令制作成二进制的rpm包,而后安装
源代码 –> 预处理 –> 编译(gcc) –> 汇编 –> 链接 –> 执行
源代码的组织格式:
多文件:文件中代码之间,和可能存在跨文件依赖关系
项目管理工具
c/c++: make(configure –> Makefile.in –> makefile)
java: maven
C代码编译安装三步骤:
(1)./configure:
<1> 让用户通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成的makefile
<2> 检查各指定启用特性所依赖的外部环境
(2)make
根据makefile文件,构建应用程序
(3)make install
开发工具:
autoconf: 生成configure脚本
automake: 生成Makefile.in文件
建议: 安装前查看INSTALL, README
3、开源程序源代码的获取:
官方自建站点:
apache.org(ASF)
mariadb.org
代码托管:
SourceForge
Github.com
code.google.com
4、c/c++: gcc编译器 (GNU C Complier)
编译C源代码:
前提: 提供开发工具和开发环境
开发工具: make, gcc等
开发环境: 开发库,头文件
glibc: 标准库
通过“包组”提供开发组件
CentOS 6: "Development Tools", "Server Platform
Development",
第一步: configure脚本
选项: 指定安装位置、指定启用的特性
–help: 获取其支持使用的选项
mget、scp命令如何使用
选项分类:
安装路径设定
–prefix=/PATH/TO/SOMEWHERE:指定默认安装位置,默认为/usr/local/
–sysconfdir=/PATH/TO/SOMEWHERE:指定配置路径
System types: 目标系统平台结构
Optional Features: 可选特性的启用
–disable-FEATURE: 禁用特性
–enable-FEATURE: 启用特性
Optional Packages: 可选程序包(依赖到的程序包)
–with-PACKAGE
–without-PACKAGE
例如:~]# yum groupinstall Server Platform Development -y
~]# ./configure –prefix=/usr/local/apache2 –sysconfdir=/etc/http2
第二部: make
cd http-2.2.29
make install
netstat -tan
第三部: 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
将目标文件下的include文件路径输出到/usr/include目录下
(4) 导出帮助手册
编辑/etc/man.config文件
添加一个MANPATH参数,并指明新路径即可
例如: 在/etc/man.config中添加
原创文章,作者:black_fish,如若转载,请注明出处:http://www.178linux.com/37408
评论列表(1条)
文章对rpm包管理相关知识总结的很详细,其中rpm包管理工具中查询语句和yum源配置是基本能力,需要多加练习,熟练掌握。