Linux程序包管理:RPM和YUM
就像Window一样,我们安装了windows系统如果没有相应的应用软件,如OFFICE,IE,等各种软件,用户是无法使用计算机,linux 完成各种应用功能,也需要各种应用程序,所以程序包的管理就非常必要。
Linux平台的内核功能:进程管理、内存管理、网络协议栈、驱动程序、...
应用程序:
早期的linux程序包的组成部分:
二进制程序:/bin, /sbin,/ /usr/bin, /usr/sbin,
库文件:/lib64, /usr/lib64
配置文件:/etc
帮助文件:manual, info,
所以早期在linux上安装管理应用程序非常的不便。直到包管理器的出现
包管理器的作用:打包,包管理(安装、升级、卸载、查询及校验)
deb: debian 最早的包管理器
rpm: redhat package manager 现在最为流行的包管理器,
RPM is Package Manager
如何获取rpm包:
1、发行版提供的程序包;
2、Fedora-EPEL
3、项目的官方站点
4、搜索引擎
http://rpmfind.net
http://rpm.pbone.net
http://pkgs.org
CentOS识别光盘用的设备文件:/dev/cdrom
以下是我的操作:
基于rpm命令实现程序包管理:
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
-i: 安装软件包
-v:显示详细过程,-vv, -vvv
-h:软件包安装的时候列出哈希标记 (和 -v 一起使用效果更好)
由于每个rpm包都提供一个或多个capabilities,所以rpm包会有依赖关系
--nodeps:忽略依赖关系安装
--replacepkgs:重装程序包
升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-Uvh: 如果有旧版程序包,则升级之;如果没有,则安装之;
-Fvh: 如果有旧版程序包,则升级之;如果没有,则不安装;
--nodeps:不验证软件包依赖
--oldpackage:降级;linux服务器要的是稳定,所以有时我们需要降级,经常使用
先升级:
再降级:
--force:强制升级
卸载:
rpm {-e|--erase} [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
查询:
rpm {-q|--query} [select-options] [query-options]
查询选项:
-qa: 查询本机已经安装的所有程序包;
-qf /PATH/TO/SOMEFILE: 查询此处的文件由哪个程序包安装生成;
-qc: 查询指定程序包安装生成的配置文件
-qd: 查询指定的程序包安装生成的文档
-qi: 查询指定的程序包的相关信息;
-ql: 查询程序包安装生成的所有文件的列表;
-q --scripts:查询程序包相关的脚本:
preinstall: 安装前脚本
postinstall:安装后脚本
preuninstall: 卸载前脚本
postuninstall: 卸载后脚本
-p: 查询针对是未安装的程序包文件;
校验:
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 --import /PATH/TO/KEY_FILE
校验:rpm -K /PATH/TO/RPM_FILE
YUM: Yellowdog Updater Modified
yum repositories:
文件服务器:
ftp://hostname/PATH/TO/REPO
http://hostname/PATH/TO/REPO
file:///PATH/TO/REPO
yum程序的配置文件:
/etc/yum.conf
定义全局配置:对所有仓库都适用的配置
/etc/yum.repos.d/*.repo
一个文件通常用于一个或一组功能相近或相关的仓库
定义一个YUM仓库指向:
[REPO_ID] 仓库的名字,不能与其他仓库重名
name= 说没仓库的意义
baseurl= 定义仓库的实际有效地址
# mirrorlist=SCHEME://HOSTNAME/PATH/TO/MIRROR_LIST_FILE 该仓库的镜像站点
enabled={1|0} 1表示启用,0表示不启动,默认为启用
gpgcheck={1|0} 检验包的合法,完整,0为不启动
gpgkey= 公钥文件的位置
cost= 仓库的开销
定义仓库指向可用变量:
$releasever: 引用当前系统的主版本号;
$basearch: 当前系统的基本架构;
i386, i486, i586, i686: i386
例如: http://mirrors.magedu.com/CentOS/$releasever/os/$basearch
yum命令:
yum [options] [command] [package ...]
命令:
安装:install
卸载:remove
升级:update
查询:
info
search KEYWORD
list all|installed|availiable
provides /PATH/TO/SOMEFILE: 查询指定文件由哪个包安装生成
重新安装:reinstall
降级:downgrade
清理缓存:clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
生动生成缓存:makecache
包组:
grouplist
groupinfo "GRP_NAME"
groupinstall "GRP_NAME"
groupremove "GRP_NAME"
仓库:
repolist [all|enabled|disabled] 列出所有可用仓库,默认是all
repoinfo [all|enabled|disabled] 查看仓库相关信息
如何使用光盘当做本地仓库:
挂载光盘至某目录
1:挂载光盘到/media/cdrom
2:/创建并编辑/etc/yum.repos.d/cdrom.repo文件,定义仓库,使用file:///指明其访问路径;
添加如下:
3:备份源仓库文件并改名:
[root@localhost yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak
创建本地仓库:
yum install createrepo
createrepo /PATH/TO/RPMFILES/