最近在学习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)的一个高质量附加软件包项目。

centos rpm升级_centos

createrepo 命令用于创建yum源(软件仓库),即为存放于本地特定位置的众多rpm包建立索引,描述各包所需依赖信息,并形成元数据。

centos rpm升级_centos rpm升级_02

 yum-utils是管理repository及扩展包的工具,包含一系列yum工具,本实验中我们用到  repotrack工具,该工具直接下载指定的包包括所有依赖一块下载到指定目录,看成解决软件依赖利器! 

centos rpm升级_centos_03

  实验环境

# 外网环境,下载相关程序包和依赖包
[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 可以查看相应介绍。

centos rpm升级_运维_04

默认情况下,该命令会将软件包保存到 /var/cache/yum/ 的 rhel-{arch}-channel/packageslocation 目录,我们可以将路径设置到任意位置,只需加入参数 --downloaddir 选项即可。

yum install --downloadonly --downloaddir=<directory> <package-name>

为了更进一步加深印象,在此以内网安装ceph为例

设置ceph镜像源

开始下载之前,将ceph下载源修改为阿里源地址,且下载的ceph版本为14.x版本,nautilus 对应ceph 14版本

centos rpm升级_centos_05

  

下载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安装包和相关依赖包下载列表部分如下:

centos rpm升级_运维_06

上述只是将所有主程序和相关依赖包下载完毕,现在又有新问题出现,内网使用 rpm -ivh ceph-14.2.22-0.el7.x86_64.rpm 时并不会自动安装所有的依赖包,那如何解决这个问题呢?

方法二:repotrack(推荐)

repotrack用法很简单,常用参数-p指定保存路径

centos rpm升级_linux_07

 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。

centos rpm升级_centos rpm升级_08

centos rpm升级_linux_09

配置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

centos rpm升级_linux_10