最近在学习CEPH知识,由于生产环境部署在内网,且内网环境中的yum源不完善导致安装cpeh时会有很多依赖文件没办法做到自动下载,如果手动下载所有依赖包的话过程繁琐,且有些依赖包也会依赖其他依赖包,这种俄罗斯套娃式的依赖包无疑是给学习之路增添阻力。
本文主要介绍使用yum --downloadonly参数和repotrack工具两种方法下载相应包及依赖包
安装组件
[root@server ~]# yum -y install epel-release
[root@server ~]# yum -y install createrepo
[root@server ~]# yum -y install yum-utils
EPEL是企业版 Linux 附加软件包的简称,EPEL由Fedora特别兴趣小组创建、维护并管理的,针对红帽企业版 Linux(RHEL)及其衍生发行版(比如 CentOS、Scientific Linux、Oracle Enterprise Linux)的一个高质量附加软件包项目。
createrepo 命令用于创建yum源(软件仓库),即为存放于本地特定位置的众多rpm包建立索引,描述各包所需依赖信息,并形成元数据。
yum-utils是管理repository及扩展包的工具,包含一系列yum工具,本实验中我们用到 repotrack工具,该工具直接下载指定的包包括所有依赖一块下载到指定目录,看成解决软件依赖利器!
实验环境
# 外网环境,下载相关程序包和依赖包
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
# 内网环境,生产或者测试环境
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
方法一:downloadonly
为了实现上述功能,使用 yum 自带的 downloadonly 参数实现,yum -h 可以查看相应介绍。
默认情况下,该命令会将软件包保存到 /var/cache/yum/ 的 rhel-{arch}-channel/packageslocation 目录,我们可以将路径设置到任意位置,只需加入参数 --downloaddir 选项即可。
yum install --downloadonly --downloaddir=<directory> <package-name>
为了更进一步加深印象,在此以内网安装ceph为例
设置ceph镜像源
开始下载之前,将ceph下载源修改为阿里源地址,且下载的ceph版本为14.x版本,nautilus 对应ceph 14版本
下载ceph包
# 更新软件包,推荐将yum uprade所有依赖包下载到内网
[root@server ~]# yum upgrade
[root@server ~]# mkdir ceph-14.2.22_el7.x86_64
[root@server ~]# yum install --downloadonly --downloaddir=/root/ceph-14.2.22_el7.x86_64 ceph
ceph安装包和相关依赖包下载列表部分如下:
上述只是将所有主程序和相关依赖包下载完毕,现在又有新问题出现,内网使用 rpm -ivh ceph-14.2.22-0.el7.x86_64.rpm 时并不会自动安装所有的依赖包,那如何解决这个问题呢?
方法二:repotrack(推荐)
repotrack用法很简单,常用参数-p指定保存路径
repotrack下载过程
[root@server ~]# repotrack -p ./ceph ceph
Downloading acl-2.2.51-15.el7.x86_64.rpm
Downloading audit-libs-2.8.5-4.el7.x86_64.rpm
Downloading audit-libs-2.8.5-4.el7.i686.rpm
Downloading audit-libs-python-2.8.5-4.el7.x86_64.rpm
Downloading basesystem-10.0-7.el7.centos.noarch.rpm
...... 后面省略 ......
两种方法的区别在于:repotrack工具全量下载程序包以及程序的依赖包、yum downloadonly参数严格意义讲并不是下载相应依赖包,仅会下载当前OS缺少部分的依赖包。它和yumdownloader工具原理一样,使用上也基本一样,所以在此不介绍yumdownloader工具,如果外网和内网环境基本一致,可以使用downloadonly参数。
自建yum本地仓库
通过createrepo自建repository仓库,自建仓库完成后将仓库目录作为repo源地址,使用yum install 安装软件,有效解决了依赖包的问题。
# -v 显示过程
[root@server ~]# createrepo -v ceph-14.2.22_el7.x86_64/
Spawning worker 0 with 56 pkgs
Worker 0: reading ceph-14.2.22-0.el7.x86_64.rpm
Worker 0: reading ceph-base-14.2.22-0.el7.x86_64.rpm
...... 中间省略 ......
Worker 0: reading userspace-rcu-0.7.16-1.el7.x86_64.rpm
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Starting other db creation: Tue Oct 26 16:43:36 2021
Ending other db creation: Tue Oct 26 16:43:36 2021
Starting filelists db creation: Tue Oct 26 16:43:36 2021
Ending filelists db creation: Tue Oct 26 16:43:36 2021
Starting primary db creation: Tue Oct 26 16:43:36 2021
Ending primary db creation: Tue Oct 26 16:43:36 2021
Sqlite DBs complete
将自建的仓库目录打包后上传至内网环境
[root@server ~]# tar zcvf ceph-14.2.22_el7.x86_64.tar.gz ceph-14.2.22_el7.x86_64/
设置本地仓库源地址
以下步骤在内网(客户端)环境中操作,以下步骤只针对单台主机生效,如果想在整个内网环境中都可以使用环境包,推荐在本地使用ftp或者nginx搭建本地离线环境。
这里多打了个基础环境包(basepkg)过程没有输出,操作方法一样,即将yum upgrade的依赖包下载后自建仓库
[root@client ~]# ls
anaconda-ks.cfg basepkg_el7.x86_64.tar.gz ceph-14.2.22_el7.x86_64.tar.gz
[root@client ~]# tar xzf ceph-14.2.22_el7.x86_64.tar.gz
[root@client ~]# tar xzf basepkg_el7.x86_64.tar.gz
[root@client ~]# cd /etc/yum.repos.d/
[root@client yum.repos.d]# ls
CentOS-Base.repo CentOS-CR.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Sources.repo CentOS-Vault.repo
[root@client yum.repos.d]# mkdir bak
[root@client yum.repos.d]# mv *.repo bak
[root@client yum.repos.d]# cat ceph.repo
[ceph]
name=ceph
baseurl=file:///root/ceph-14.2.22_el7.x86_64
gpgcheck=0
enabled=1
[root@client yum.repos.d]# cat base.repo
[base]
name=base
baseurl=file:///root/basepkg_el7.x86_64
gpgcheck=0
enabled=1
清理和更新仓库数据
[root@client yum.repos.d]# yum clean all
Loaded plugins: fastestmirror, langpacks
Cleaning repos: base ceph
Cleaning up list of fastest mirrors
[root@client yum.repos.d]# yum makecache
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
base | 2.9 kB 00:00:00
ceph | 2.9 kB 00:00:00
(1/6): base/filelists_db | 396 kB 00:00:00
(2/6): base/other_db | 133 kB 00:00:00
(3/6): base/primary_db | 761 kB 00:00:00
(4/6): ceph/filelists_db | 125 kB 00:00:00
(5/6): ceph/other_db | 54 kB 00:00:00
(6/6): ceph/primary_db | 112 kB 00:00:00
Metadata Cache Created
通过yum repolist命令查看仓库及包的数量
[root@client yum.repos.d]# yum repolist
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id repo name status
base base 265
ceph ceph 156
repolist: 421
安装ceph
[root@client yum.repos.d]# yum install -y ceph
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package ceph.x86_64 2:14.2.22-0.el7 will be installed
--> Processing Dependency: ceph-osd = 2:14.2.22-0.el7 for package: 2:ceph-14.2.22-0.el7.x86_64
...... 中间省略 ......
python-urllib3.noarch 0:1.10.2-7.el7 python-webob.noarch 0:1.2.3-7.el7 python-webtest.noarch 0:1.3.4-6.el7
python-werkzeug.noarch 0:0.9.1-2.el7 python2-bcrypt.x86_64 0:3.1.6-2.el7 python2-six.noarch 0:1.9.0-0.el7
rdma-core.x86_64 0:22.4-6.el7_9 userspace-rcu.x86_64 0:0.7.16-1.el7
Complete!
[root@client ~]# ceph -v
ceph version 14.2.22 (ca74598065096e6fcbd8433c8779a2be0c889351) nautilus (stable)
nginx搭建离线仓库
安装和配置nginx
[root@server ~]# yum install -y nginx
# ↓显示nginx安装路径,确定配置文件的存放位置
[root@server conf.d]# rpm -ql nginx
[root@server conf.d]# pwd
/etc/nginx/conf.d
[root@server ~]# ls /data/web/
ceph-14.2.22_el7.x86_64
# ↓增加配置文件,注意location部分按照实际环境设置
[root@server conf.d]# cat repo.conf
server {
listen 80;
server_name localhost;
location / {
root /data/web;
index index.html index.php index.htm;
autoindex on; # 允许显示目录
}
}
关闭或者开放防火墙规则,访问界面如下,如果访问页面时一直报403,多数原因为目录权限问题,将web目录权限设置成nginx或者将nginx.conf的user设置为root。
配置yum源
以下配置在客户端操作
设置baseurl时需要注意,如果打包的文件放在子目录下的,路径需要填写到子目录,这里为ceph-14.2.22_el7.x86_64
[root@localhost ~]# cat /etc/yum.repos.d/tmp.repo
[test]
name=test
baseurl=http://192.168.1.130/ceph-14.2.22_el7.x86_64
gpgcheck=0
enabled=1
更新仓库数据
[root@localhost yum.repos.d]# yum clean all
已加载插件:fastestmirror, langpacks
正在清理软件源: test
Cleaning up list of fastest mirrors
[root@localhost yum.repos.d]# yum makecache
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
test | 2.9 kB 00:00:00
(1/3): test/primary_db | 112 kB 00:00:00
(2/3): test/filelists_db | 125 kB 00:00:00
(3/3): test/other_db | 54 kB 00:00:00
元数据缓存已建立
[root@localhost yum.repos.d]# yum repolist
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
源标识 源名称 状态
test test 156
repolist: 156
安装ceph
可以看到从我们配置的yum源安装ceph