linux 软件管理
Posted lizitest
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 软件管理相关的知识,希望对你有一定的参考价值。
CentOS安装包为:rpm包
rpm包的问题:不能解决依赖性问题
yum:用于解决依赖性问题
本章重点:
? rpm安装
? yum安装
? 编译安装
二进制应用程序(rpm - Redhat package manage)的组成部分:
? 二进制文件
? 库文件
? 配置文件
? 帮助文件
?源代码:name-VERSION.tar.gz|bz2|xz
VERSION: major.minor.release
?rpm包命名方式:
? name-VERSION-release.arch.rpm
○ 例:bash-4.2.46-19.el7.x86_64.rpm
VERSION: major.minor.release
release:release.OS
常见的arch:
? x86: i386, i486, i586, i686
? x86_64: x64, x86_64, amd64 powerpc: ppc
跟平台无关:noarch
?包:分类和拆包
? Application-VERSION-ARCH.rpm: 主包
? Application-devel-VERSION-ARCH.rpm 开发子包
? Application-utils-VERSION-ARHC.rpm 其它子包
? Application-libs-VERSION-ARHC.rpm 其它子包
?包之间:可能存在依赖关系,甚至循环依赖
?解决依赖包管理工具:
? yum:rpm包管理器的前端工具(rpm包的另外的安装方式)
? apt-get:deb包管理器前端工具
? zypper: suse上的rpm前端管理工具
? dnf: Fedora 18+ rpm包管理器前端管理工具
?查看二进制程序所依赖的库文件
? ldd /PATH/TO/BINARY_FILE 显示库文件依赖的包
? ldd /usr/bin/ls ls命令依赖的包****
?管理及查看本机装载的库文件
? ldconfig -v 系统中正在调用的库
? /sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.so.cache
?程序包管理器:
功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作
?包文件组成 (每个包独有)
? RPM包内的文件
? RPM的元数据,如名称,版本,依赖性,描述等
? 安装或卸载时运行的脚本(不一定都有)
?数据库(公共):/var/lib/rpm 包的安装信息存放处,共系统使用**
? 程序包名称及版本
? 依赖关系
? 功能说明
? 包安装后生成的各文件路径及校验码信息
?管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf
?获取程序包的途径:
(1) 系统发版的光盘或官方的服务器;
CentOS镜像:
? https://www.centos.org/download/
? http://mirrors.aliyun.com
? http://mirrors.sohu.com
? http://mirrors.163.com
(2) 项目官方站点
(3) 第三方组织:
? Fedora-EPEL:Extra Packages for Enterprise Linux
? Rpmforge:RHEL推荐,包很全
搜索引擎:
? http://pkgs.org
? http://rpmfind.net
? http://rpm.pbone.net
? https://sourceforge.net/
(4) 自己制作
?注意:第三方包建议要检查其合
CentOS系统rpm命令:
? 安装
? 卸载
? 升级
? 查询
? 校验
? 数据库维护
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE…
? -i:安装(install)
? -v: verbose 显示详细安装过程
? -vv:
? -h: 以#显示程序包管理执行进度
? rpm -ivh PACKAGE_FILE ...
?[install-options]
? --test: 测试安装,但不真正执行安装,即dry run模式
? --nodeps:忽略依赖关系
? --replacepkgs 覆盖包 | replacefiles 覆盖文件( 替代重装)
○ rpm -ivh /XXX/tree-1.6.0-10.el7.x86_64.rpm --replacepkgs tree文件被删除,进行替代安装
○ rpm2cpio /XXX/tree-1.6.0-10.el7.x86_64.rpm | cpio -it 查看tree安装包中的文件列表
○ rpm2cpio /XXX/tree-1.6.0-10.el7.x86_64.rpm | cpio -id ./usr/bin/tree 单独覆盖安装./usr/bin/tree文件到/usr/bin目录(有可能造成属性破坏)
? --nosignature: 不检查来源合法性
? --nodigest:不检查包完整性
? --noscripts:不执行程序包脚本
○ rpm -qp --scripts /XXX/httpd-2.4.6.67.el7.centos.x86_64.rpm 查看此包的脚本
? %pre: 安装前脚本; --nopre
? %post: 安装后脚本; --nopost
? %preun: 卸载前脚本; --nopreun
? %postun: 卸载后脚本; --nopostun
升级:
?rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
?rpm {-F|--freshen} [install-options] PACKAGE_FILE...
? upgrade:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装”
? freshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作
? rpm -Uvh PACKAGE_FILE ...
? rpm -Fvh PACKAGE_FILE ...
? --oldpackage:降级
? --force: 强制安装
○ rpm -ivh /XXX/tree-1.6.0-10.el7.x86_64.rpm --force 强行安装
查询:
?rpm {-q|--query} [select-options] [query-options]
? rpm -q tree 查询包名
? rpm -qa 查看系统所有安装过的包(来源于/var/lib/rpm)**
? rpm -qa | grep "tr"
? rpm -qi tree 查询包的信息
? rpm -qpi /XXX/tree-1.6.0-10.el7.x86_64.rpm 没安装的情况下,查看包的信息
?[select-options]
-a: 所有包
-f: 查看指定的文件由哪个程序包安装生成
-p rpmfile:针对尚未安装的程序包文件做查询操作
--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供
--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
?rpm2cpio 包文件|cpio –itv 预览包内文件
?rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件
?[query-options]
? --changelog:查询rpm包的changelog
? -c: 查询程序的配置文件
○ rpm -qc bash
? -d: 查询程序的文档
○ rpm -qd treee
? -i: information
? -l: 查看指定的程序包安装后生成的所有文件
○ rpm -ql tree
? --scripts:程序包自带的脚本
? --provides: 列出指定程序包所提供的CAPABILITY
? -R: 查询指定的程序包所依赖的CAPABILITY
?常用查询用法:
? -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
? -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
? -qa
?包卸载:
? rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME …
○ rpm -e tree 卸载
○ rpm -e tree --allmatches 卸载所有不同版本的tree包
校验:
?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
? 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
○ rpm -ql tree
○ rpm -V tree 有变化才显示内容*
安装软件之前包的验证
?包来源合法性验正及完整性验正
? 完整性验正:SHA256
? 来源合法性验正:RSA
?公钥加密
? 对称加密:加密、解密使用同一密钥
? 非对称加密:密钥是成对儿的
? public key: 公钥,公开所有人
? secret key: 私钥, 不能公开
?导入所需要公钥
? rpm -K|checksig rpmfile 检查包的完整性和签名
○ rpm -K | tree
? rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
? CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7
? rpm -qa “gpg-pubkey*”
? rpm -qf /usr/bin/tree 查看磁盘上的命令来源于哪个包
yum 解决依赖性问题
? yum依赖于yum仓库
○ rpm包
○ repdata目录中存放包的元数据:依赖数据等
? yum安装:
○ 先找元数据,下载到电脑上。安装后不删除
○ 在下载rpm包,进行安装。安装后默认删除
? yum配置仓库路径:
○ cd /etc/yum.repos.d/
○ mkdir bak
○ mv *.repo bak 备份原来的repo文件
○ vim base.repo 新建repo文件
[repositoryID]
baseurl=file:///misc/cd yum元数据路径
gpgcheck=0 不检查key
? 文件服务器类型
○ http://
○ https://
○ ftp://
○ file://
? yum安装
yum install httpd-tools -y -y不询问
?yum客户端配置文件:
/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置
仓库指向的定义:
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority}
roundrobin:意为随机挑选,默认值
priority:按顺序访问
cost= 默认为1000
? yum repolist 查看仓库
? 添加仓库
[base] base源
baseurl=file:///misc/cd yum元数据路径
gpgcheck=0 不检查key
[epel] epel源
baseurl=https://mirrors.aliyun.com/epel/7/x86_64
bpgcheck=0
? yum卸载:依赖包不会卸载,会提示
○ yum remove mysql-server
? yum history 安装了mysql-server后,安装了4个包,ID为2
? 查看安装细节:yum history info 2
? yum history undo 2 卸载依赖
? yum history redo 2 删除错误,重新安装
? 从互联网上找到的rpm包:
○ 直接安装会提示有依赖
○ yum install httpd-2.4.6-67.el7.centos.x86_64.rpm 解决依赖性问题
? yum缓存:
○ cat /etc/yum.conf
§ cachedir=/var/cache/yum/$basearch/$releasever
§ cachedir=/var/cache/yum/x86_64/7
§ du -sh * 查看目录下文件大小
? yum清楚缓存:
○ yum clean all 如果断网,切换yum源,清除后可以正常安装
? 禁用yum源
[base] base源
baseurl=file:///misc/cd yum元数据路径
gpgcheck=0 不检查key
[epel] epel源
baseurl=https://mirrors.aliyun.com/epel/7/x86_64
bpgcheck=0
enabled=0
? yum源
?阿里云repo文件:
http://mirrors.aliyun.com/repo/
?CentOS系统的yum源
?阿里云:https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
?教学环境:
http://172.16.0.1/cobbler/ks_mirror/$releasever/
?EPEL的yum源:
?阿里云:
https://mirrors.aliyun.com/epel/$releasever/x86_64
?教学环境:
http://172.16.0.1/fedora-epel/$releasever/x86_64/
? yum search mysql 模糊检索
?yum命令的用法:
yum [options] [command] [package ...]
?显示仓库列表:
yum repolist [all|enabled|disabled]
?显示程序包:
yum list
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]
?安装程序包:
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...] (重新安装)
?升级程序包:
yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降级)
?检查可用升级:
yum check-update
?卸载程序包:
yum remove | erase package1 [package2] [...]
?查看程序包information:
yum info [...]
?查看指定的特性(可以是某文件)是由哪个程序包所提供:
yum provides | whatprovides feature1 [feature2] [...]
?清理本地缓存:
清除/var/cache/yum/$basearch/$releasever缓存
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
?构建缓存:
yum makecache
?搜索:yum search string1 [string2] [...]
以指定的关键字搜索程序包名及summary信息
?查看指定包所依赖的capabilities:
yum deplist package1 [package2] [...]
?查看yum事务历史:
yum history [info|list|packages-list|packages-info|
summary|addon-info|redo|undo|
rollback|new|sync|stats]
yum history
yum history info 6
yum history undo 6
?日志 :/var/log/yum.log
?安装及升级本地程序包:
yum localinstall rpmfile1 [rpmfile2] [...]
(用install替代)
yum localupdate rpmfile1 [rpmfile2] [...]
(用update替代)
?包组管理的相关命令:
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]
yum grouplist 查看包组
yum groupinfo Desktop 查看Desktop包组
yum groupinstall Desktop 安装包组
创建包组:createrepo .
以上是关于linux 软件管理的主要内容,如果未能解决你的问题,请参考以下文章