Skip to content

下载 yum 的离线安装包

概述

  在生产环境中,因为安全原因,经常会不提供外网访问权限。在这种环境下,想要安装软件或更新软件,就需要提前将离线安装包下载下来,然后通过相关途径将安装包复制到生产环境系统中才行。

  由于使用 yum 来安装或更新软件都非常方便,因此我搜索了一下 yum 如何下载离线安装包的方法,这里做一下笔记。

步骤

下载 rpm 包

  找一台环境与生产环境一致的电脑,并且这台电脑需要可以联接互联网。然后通过以下命令将安装包下载到指定的本地目录里:

bash
# 下载内核
$ mkdir -p /root/packages/centos/7/x86_64/elrepo
$ rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-6.el7.elrepo.noarch.rpm
$ yum --enablerepo=elrepo-kernel install kernel-lt --downloadonly --downloaddir=/root/packages/centos/7/x86_64/elrepo

# 下载所有系统/软件更新相关的包
$ mkdir -p /root/packages/centos/7/x86_64/updates
$ yum update --downloadonly --downloaddir=/root/packages/centos/7/x86_64/updates

# 下载 docker-ce 以及依赖到 docker 目录下
$ mkdir -p /root/packages/centos/7/x86_64/docker-ce
$ yum install docker-ce --downloadonly --downloaddir=/root/packages/centos/7/x86_64/docker-ce
 
# 下载 docker-ce 的更新包到 docker 目录下
$ yum update docker-ce --downloadonly --downloaddir=/root/packages/centos/7/x86_64/docker-ce

  如果你只知道命令,但是不知道是什么包提供的,可以通过以下方法来查询命令所在包:

bash
# 通过以下命令,可以看到 netstat 是由 net-tools 包提供的功能
$ yum provides "*/netstat"
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * elrepo: hkg.mirror.rackspace.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.ustc.edu.cn
base/7/x86_64/filelists_db                                                                                                                                                | 7.2 MB  00:00:00     
docker-ce-stable/7/x86_64/filelists_db                                                                                                                                    |  32 kB  00:00:00     
elrepo/filelists_db                                                                                                                                                       |  46 kB  00:00:00     
extras/7/x86_64/filelists_db                                                                                                                                              | 277 kB  00:00:00     
updates/7/x86_64/filelists_db                                                                                                                                             | 8.7 MB  00:00:00     
net-tools-2.0-0.25.20131004git.el7.x86_64 : Basic networking tools
    :base
匹配来源:
文件名    :/bin/netstat

# 如果你有已经安装了该工具的系统,那么可以在该系统下通过以下命令快速查找
$ rpm -qf `which netstat`
net-tools-2.0-0.25.20131004git.el7.x86_64

安装 rpm 包

  安装离线 rpm 包的方式,可以选择以下两种之一:

  • 如果你管理的服务器比较少,那么可以通过线下复制的方式,将安装包复制到服务器,然后通过下以命令安装:
bash
# 安装 docker 目录下所有的 rpm 包
# -i, --install: 安装软件包
# -v, --verbose: 提供更多的详细信息输出
# -h, --hash:    软件包安装的时候列出哈希标记
$ rpm -ivh ./docker/*

# 更新 docker 目录下的所有的 rpm 包
# -U, --upgrade: 升级软件包
# -v, --verbose: 提供更多的详细信息输出
# -h, --hash:    软件包安装的时候列出哈希标记
$ rpm -Uvh ./docker/*
  • 如果你管理的服务器比较多,那么可以搭建 rpm 私服,然后将下载好的 rpm 包上传到私服,其它服务器将 rpm 源指向私服,即可安装这些软件包:

  目前市面上有很多工具都提供了包管理工具,如 GitLab、Nexus3 等等,简单一点也可以自己起个服务器,然后用 nginx、httpd 这些服务器来托管:

bash
# 安装 createrepo 工具包
$ yum install -y createrepo
 
# 创建相关 rpm 源的目录
$ mkdir /root/packages/centos/7/x86_64/os && createrepo /root/centos/7/x86_64/os

# 然后将相关的 rpm 分类放到以上指定的目录之后,通过以下命令更新源
$ createrepo --update createrepo /root/centos/7/x86_64/os

  然后通过 nginx 暴露 yum 源(如果不懂 Nginx,可以参考我之前的笔记[链接]):

bash
# 修改 /etc/nginx/nginx.conf
server {
    # 监听端口
    listen 80;

    # 托管 yum 源
    location /packages/ {
        autoindex on;
        root /root/packages;
    }
}

  完成以上步骤之后,就可以将其它服务器的 yum 源切换到自己托管的源了。

bash
# 将原来的服务器的 yum 源移除(先备份起来)
$ mv /etc/yum.repos.d /etc/yum.repos.d.bak

# 创建新源
$ mkdir /etc/yum.repos.d && nano /etc/yum.repos.d/centos.repo

# 以下是 /etc/yum.repo.d/centos.repo 的文件内容
[base]
name=CentOS-$releasever - Base
failovermethod=priority
baseurl=http://10.10.10.10/packages/centos/$releasever/$basearch/os/
enabled=1
gpgcheck=0

[updates]
name=CentOS-$releasever - Updates
failovermethod=priority
baseurl=http://10.10.10.10/packages/centos/$releasever/$basearch/updates/
enabled=1
gpgcheck=0

[extras]
name=CentOS-$releasever - Extras
failovermethod=priority
baseurl=http://10.10.10.10/packages/centos/$releasever/$basearch/extras/
enabled=1
gpgcheck=0


# EPEL (Extra Packages for Enterprise Linux), 是由 Fedora Special Interest Group 维护的 Enterprise Linux(RHEL、CentOS)中经常用到的包。
[elrepo]
name=ELRepo.org Community Enterprise Linux Repository - el7
baseurl=http://10.10.10.10/packages/centos/$releasever/$basearch/elrepo/
enabled=1
gpgcheck=0

[elrepo-kernel]
name=ELRepo.org Community Enterprise Linux Kernel Repository - el7
baseurl=http://10.10.10.10/packages/centos/$releasever/$basearch/elrepo-kernel/
enabled=0
gpgcheck=0

[elrepo-extras]
name=ELRepo.org Community Enterprise Linux Extras Repository - el7
baseurl=http://10.10.10.10/packages/centos/$releasever/$basearch/elrepo-extras/
enabled=0
gpgcheck=0

# Nginx 源
[nginx]
name=nginx repo
baseurl=http://10.10.10.10/packages/centos/$releasever/$basearch/nginx/
enabled=1
gpgcheck=0

# Docker 源
[docker]
name=Docker CE Stable - $basearch
baseurl=http://10.10.10.10/packages/centos/$releasever/$basearch/docker/
enabled=1
gpgcheck=0

# Kubernetes 源
[kubernetes]
name=Kubernetes
baseurl=http://10.10.10.10/packages/centos/$releasever/$basearch/kubernetes/
enabled=1
gpgcheck=0

Released under the MIT license.