欢迎各位兄弟 发布技术文章
这里的技术是共享的
rpm -> yum yum是基于rpm的
HTML: HyperText Mark Language
XML: Extended Mark Language
XML,JSON:半结构化的数据
yum 仓库中的元数据文件
primary.xml.gz:
当前仓库中的整个软件包的包列表,当前仓库里的所有rpm包的列表
依赖关系 各包之间的依赖关系,各能力之间的依赖关系
每个RPM安装能够生成的文件列表
filelists.xml.gz
当前仓库中的所有RPM包的安装后生成的所有文件列表,它是个全局的文件
(primary效率低,filelists是为了快速的)
other.xml.gz
额外信息,比如RPM包的修改日志
repomd.xml 是包含了上面三个文件 ( primary.xml.gz filelists.xml.gz other.xml.gz )文件的时间戳和检验和
repomd (repository meta data ) (仓库元数据)
yum install zsh (此时其中有一个功能是验证 三个xml.gz ( primary.xml.gz filelists.xml.gz other.xml.gz )文件的时间戳和检验和即repomd.xml记录的是否相符合 (repomd.xml 是每次都要下载的) 如果不相符合,说明有被篡改,需重新下载primary.xml.gz 等三个文件吧? )
comps*.xml (即comps-rhel5-server-core.xml) RPM包分组信息 (它在创建yum之前必须存在) (它是红帽特有的)
每个组里有群组,群组也有名称 分组信息应该在创建yum仓库之前是存在的
每个组中的rpm包分成三个部分:必须安装的,可以安装的(建议安装的),可选的
yum
install 不用指定路径,直接指定软件名
ftp://172.16.0.1/pub/{Server,VT,Cluster,ClusterStorage}
上面每一个都是独立的yum源
如何为yum定义repo文件
[Repo_ID] (不能跟此前的其它的名称同名,它是repo唯一的标识,其实是id)
name=Description (怎么命名都行)
baseurl= (repo地址的访问路径) (三种格式 ftp:// http:// file:/// ) (本地路径前两个斜杠表示file协议,最后一个斜杠表示根路径)
enabled={1,0} (是否启用)
gpgcheck={1,0} (是不是使用gpg这种机制来验证软件包的合法性和完整性) (默认是1)
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release (如果gpgcheck启用的话,要使用它)
yum [options] [command] [package...]
子命令
list:列表 (列表仓库中的所有软件包rpm包)
(下面的都支持glob通配符)
all 所有的(默认)
available:所有可用的 (仓库里有,但是还未安装的,已经装过的,它就不显示了)
installed:已经安装的
updates: 可用的升级
clean:清理缓存
packages 清理软件rpm包
headers 清理头部信息
metadata 清理元数据文件
dbcache 库缓存(本地rpm包的库缓存)
all 清理所有 (实在记不住的话,就用它吧)
repolist: 列出可用的yum仓库(显示repo列表及其简要信息)
all
enabled (默认)
disabled
install: 安装
-y:自动回答为yes
--nogpgcheck:不做gpg检查安装
yum install PACKAGE_NAME
update:升级
update-to:升级为指定版本
upgrade:已经废弃 为了兼容以前版本的?
upgrade-to:已经废弃 为了兼容以前版本的?
remove|erase;卸载 (如果有依赖的话,依赖的包也会被卸载掉)
-y:自动回答为yes
info: 相当于 rpm -qi 查看软件包的信息
provides | whatprovides : 相当于 rpm -qf 查看指定的文件或特性是由哪个包安装生成的
makecache 生成缓存
groupinfo
grouplist [hidden] [groupwildcard] groupwildcard就是通配符的意思
groupinstall
groupremove
groupupdate
search 采用模糊匹配的方式进行查找 # yum search httpd*
localinstall 本地安装
localupdate 本地升级的
reinstall 重新安装
downgrade 降级的
repolist 列出所有可用仓库
help 帮助
/media/cdrom{Server,VT,Clust,ClusterStorage} 每一个都是独立的yum源 (yum仓库)
如何创建yum仓库
createrepo (它是一个rpm包) (rpm包提供的命令也是这个名字) yum install createrepo (把这个createrepo 装了之后,才能使用 createreo命令建仓库吧)
http://172.16.0.1/yum/{Server,VT} (是不是如果本机ip是 172.16.0.1 也可以通过这种方法来创建本地yum源)
服务器更改了元数据,缓冲元数据,就会有冲突
所以缓冲元数据会定期清理的
如果手动拥有了服务器的仓库的话,那么就要手动清空客户端的缓冲元数据
yum仓库就是rpm包的存放位置
yum仓库还包含元数据文件
生成元数据的命令 createrepo
repo 就是库
把光盘挂载后当作仓库,是不是 createrepo 这个命令不需要了
如果把光盘挂载后当作仓库,此时挂载的是DVD光盘,而不是ISO光盘
# ls /media
# mkdir /media/cdrom
# mount -r /dev/cdrom /media/cdrom
# cd /media/cdrom
# ls
# cd Server
# ls
在红帽5中 四个仓库,每个仓库都有它自己仓库的源数据
红帽6中,把yum仓库的所有的rpm放到同一个目录里面,但是把 repodata 放在父目录下面,给 repodata定义了另外的链接路径,但是将来指定yum仓库的时候,一定要指向repodata的所在的目录 (即光盘的根目录?) (当然进了 Server目录,里面有repodata,把 Server 目录当作 仓库目录应该也可以 )
反正 根本原理 就是把 repodata的所在的目录 当作仓库目录
下面红帽5
下图是红帽6 由下图可以所有的rpm包都在 Package 目录
下图是红帽6
repodata 仓库数据
# cd repodata/
# ls
# pwd
rhel5 与 rhel6 的yum库文件夹有所不同
挂载红帽6光盘 看看yum仓库
下面是红帽6的操作
# mkdir /media/cdrom
# mount /dev/cdrom /media/cdrom
# cd /media/cdrom
# ls
# ls Server/ (有repodata 没有rpm包)
# ls Packages (所有包都在这个目录)
# ls
# pwd
要把 repodata 目录当作所在仓库的真正所在的路径
# man yum
# cd
# pwd
# ls /etc/yum.conf ( 配置文件一般在什么什么.conf上,类似于windows的INF文件 )
[root@localhost ~]# cat /etc/yum.conf
cachedir 缓存目录
keepcache 是否保存缓存中的文件?
debuglevel 调试级别 yum安装的时候输出信息的级别
logfile 记录安程过程的级别
distroverpkg 发行版版本号的名称, (distro 发行) (ver version 版本) (pkg指的是版本号吧)
tolerant 容忍的,耐受磨损的 (假如有两个软件包,x,y y已经装过了,一般会告诉你报错,y已经装过了 tolerant=1就不报错,就不装了,就忽略)
exactarch ( exact 精确的 ) exactarch 表示安装rpm包的时候,从yum仓库中获得的版本与当前系统必须要严格匹配
obsoletes 过期的要不要废弃
gpgcheck 安装rpm包的时候,检查完整性和来源合法性, 当然要检查的话,一定要提供检查文件 ,当然可以不检查
plugins 是否允许使用插件,默认是0不允许,但是我们一般会用yum-fastestmirror这个插件。
tolerant
exactarch
obsoletes
gpgcheck
plugins
对于以上只要基本了解就行
# cd /etc/yum.repos.d/
# ls
# cat redhat.repo
# cat rhel-debuginfo.repo
# man yum
# cd
# yum clean ( yum clean all)
# yum list
# yum list | less
installed 表示 已安装,如果未安装的话,就是仓库名(Repo_ID)
# cd /etc/yum.repos.d/
# ls
# vim server.po
[Base]
name=RHEL5 Server
baseurl=ftp://172.16.0.1/pub/Server
enabled=1
gpgcheck=0 #本地的 ,就不要检查了吧
# yum list
此处截图省略
# yum list | less
此时可以看到installed(已安装的) 和 Base (仓库名)
可以定义多个 .repo结尾的文件,事实上一个repo文件里也可以定义多个repo信息
# vim server.repo
[Base]
name=RHEL5 Server
baseurl=ftp://172.16.0.1/pub/Server
enabled=1
gpgcheck=0
[VT]
name=REHL5 TV
baseurl=ftp://172.16.0.1/pub/VT
enabled=1
gpgcheck=0
# yum list | less
此时可以看到 仓库名 VT 了
如果看不到的话
可以
# yum clean
然后执行
# yum list | less
此处图同上,省略掉吧
# yum repolist
status 指的是 包含有多少 yum仓库包
[root@localhost yum.repos.d]# man yum (yum子命令有好多可选项)
# yum repolist (默认 enabled 即 yum repolist enabled)
# yum repolist disabled 显示禁用的yum仓库
[root@localhost yum.repos.d]# man yum
# yum list all (显示所有的)
# yum list all zsh* (所有的zsh开头的包)
# man yum
# yum list all php53*
# yum install php53-mysql
# yum install php* (安装时可以使用通配符)
# man yum (update升级到仓库中的最新版本 update-to 升级到仓库中的指定版本)
# yum remove php53-pdo (卸载它,会同时卸载依赖于它的包 这里php53-mysql也会被卸载掉 )
# man yum
info 这里 类似于 rpm -qi
# yum info zsh 查看这个软件包的信息
# yum provides /etc/inittab
# yum grouplist (列出来仓库中的所有组)
# man yum
grouplist [hidden](显示隐藏的) [groupwildcard] (可以使用通配符) ( wildcard 通配符)
groupinfo 组名 显示某一个组的信息 中间有空格的话,要用双引号引起来
# yum groupinfo "Development Tools"
( mandatory 强制性的)
( default 默认的 )
( optional 可选的)
# yum groupinstall "Development Tools" "Development Libraries" -y (开发组和开发库这两个组 应该是以后自己手动编译安装软件包的时候要用到这两个组)(手动安装的时候用用到开发环境 即这两个组)
(是不是安装过程中打开新窗口还使用 yum 安装,会报错? 一旦报错怎么办?听不清马哥讲的话)
# lftps
> cd Server
> ls
> get php53-mysql-5.5.5-5.el6.i386.rpm
> bye
# ls
# rpm -ivh php53-mysql-5.3.3-5.el5.i386.rpm (提出有依赖关系)
# yum localinstall php53-mysql-5.3.3-5.el5.i386.rpm (localinstall 必须要指定文件,此时如果仓库里有依赖关系所需要的库,就自动安装了
尤其是集群环境的时候,很有用)
# yum localinstall php53-mysql-5.3.3-5.el5.i386.rpm (localinstall 必须要指定文件,此时如果仓库里有依赖关系所需要的库,就自动安装了)
如果是从互联网下载下来的rpm包(使用 yum localinstall 安装),校验报错 就要使用 --nogpgcheck 选项( yum localinstall --nogpgcheck)
# cd /etc/yum.repos.d/
# ls
# mv server.repo server.repo.backup
# ls
# yum clean all
# ls
# yum list all
# vim cdrom.repo
[Base]
name=RHEL5 CDROM Server
baseurl=file:///media/cdrom/Server
enabled=1
gpgcheck=0
# yum list all
# yum install createrepo (可是 假如(rpm包在硬盘上,但是 没有 createrepo ) 又没有怎么办,只有先用光盘装上去,才能 使用 createrepo 命令 )
# mkdir -pv /yum /VT
# cp /media/cdrom/VT/*.rpm /yum/VT
# cd /yum/VT
# ls
# cd /etc/yum.repos.d/
# ls
# vim cdrom.repo
# vim cdrom.repo
[Base]
name=RHEL5 CDROM Server
baseurl=file:///media/cdrom/Server
enabled=1
gpgcheck=0
[VT]
name=VT
baseurl=file:///yum/VT
enabled=1
gpgcheck=0
# yum repolist
# yum list all
(库中有 VT 但是 没有 repomd.xml ,反正 没有 VT 的仓库 ,此时 通过 createrepo 来创建)
# createrepo /yum/TV
# ls /yum/VT (此时可以看到 repodata 里面)
# yum clean all
#yum repolist
# cd /media/cdrom/VT/repodata
# ls (comps-rhel5-vt.xml,但是在 /yum/VT是没有的 )
# cp comps-rhel5-vt.xml /root
# cd
# createrepo -g /root/comps-rhel5-vt.xml /yum/VT