在许多企业或高安全性的环境中,服务器通常不允许直接连接到互联网,这给使用yum
进行软件包管理和更新带来了巨大挑战。yum
作为CentOS(以及其继任者Rocky Linux, AlmaLinux)的核心包管理工具,依赖于在线仓库来获取软件包和解决依赖关系,通过一些巧妙的配置和方法,我们完全可以实现离线环境下的yum
安装,本文将详细介绍几种主流且可靠的CentOS离线yum
方案,帮助您在无网络环境下轻松管理软件。
搭建完整的本地离线仓库 (推荐)
这是最完整、最可靠的离线解决方案,尤其适用于需要长期维护多台服务器的场景,其核心思想是在一台可以上网的机器上,将整个远程仓库或所需的软件包及其依赖完整地下载下来,然后制作成一个本地仓库,最后迁移到离线服务器上使用。
操作步骤概览
步骤 | 在线机器操作 | 离线机器操作 |
---|---|---|
准备工具 | yum install -y yum-utils createrepo | 无 |
下载软件包 | reposync -p /path/to/localrepo --repoid=baseos --download-metadata | 无 |
创建仓库元数据 | createrepo /path/to/localrepo/baseos | 无 |
迁移数据 | 将整个/path/to/localrepo 目录通过U盘、移动硬盘等方式拷贝到离线机器 | 无 |
配置本地源 | 无 | 创建新的.repo 文件,指向本地目录 |
使用yum | 无 | yum install nginx (正常使用) |
详细实施流程
在线机器准备:
找一台与离线服务器系统版本一致的、能够上网的CentOS机器,安装必要的工具:sudo yum install -y yum-utils createrepo
yum-utils
提供了reposync
命令,用于同步仓库;createrepo
用于创建仓库元数据。同步远程仓库:
使用reposync
命令下载所需的仓库,以同步BaseOS
和AppStream
仓库为例(CentOS 8/Rocky Linux 8及以后版本):# 创建一个存放仓库的目录 mkdir -p /opt/centos-offline # 同步BaseOS仓库,-p指定存放路径,--download-meta下载元数据 reposync -p /opt/centos-offline --repoid=baseos --download-metadata # 同步AppStream仓库 reposync -p /opt/centos-offline --repoid=appstream --download-metadata
这一步会花费较长时间,因为需要下载整个仓库的内容,你也可以只同步你需要的特定软件包。
创建本地仓库元数据:
下载完成后,为每个仓库目录创建元数据,这样yum
才能识别它:createrepo /opt/centos-offline/baseos createrepo /opt/centos-offline/appstream
执行后,会在每个目录下生成一个
repodata
文件夹,这是本地仓库的核心。迁移到离线服务器:
将整个/opt/centos-offline
目录打包(如tar -czvf centos-offline.tar.gz /opt/centos-offline
),然后通过U盘、光盘或内部网络传输到目标离线服务器上,并解压(如放在/opt
目录下)。:
进入/etc/yum.repos.d/
目录,禁用或备份所有原有的在线仓库配置文件,然后创建一个新的本地仓库配置文件,例如local.repo
:[local-baseos] name=Local BaseOS Repository baseurl=file:///opt/centos-offline/baseos enabled=1 gpgcheck=0 [local-appstream] name=Local AppStream Repository baseurl=file:///opt/centos-offline/appstream enabled=1 gpgcheck=0
baseurl
使用file://
协议指向本地的仓库路径。gpgcheck=0
表示不进行GPG签名检查,简化配置。清理缓存并使用:
运行以下命令清理旧的yum
缓存并生成新的缓存:yum clean all yum makecache
你可以像在线一样使用
yum install <package_name>
来安装软件了,yum
会自动从本地仓库中查找并安装软件包及其所有依赖。
优点:一劳永逸,后续安装和更新非常方便,功能最完整。
缺点:初始准备工作耗时较长,占用磁盘空间较大。
仅下载单个软件包及其依赖
如果你只是偶尔需要安装一两个软件,搭建完整的本地仓库显得“杀鸡用牛刀”,这时,可以使用yum
的--downloadonly
功能。
操作步骤
在线机器下载:
在一台同系统的联网机器上,使用yum
的--downloadonly
选项下载指定的软件包及其所有依赖。--resolve
参数至关重要,它能确保依赖项也被一并下载。# 创建一个存放rpm包的目录 mkdir ~/rpms # 下载nginx及其所有依赖包到指定目录 yum install --downloadonly --downloaddir=~/rpms --resolve nginx
迁移并安装:
将~/rpms
目录下的所有.rpm
文件拷贝到离线服务器上,然后使用rpm
命令或yum localinstall
进行安装。# 进入rpm包所在目录 cd /path/to/rpms # 推荐使用yum localinstall,因为它会自动处理本地包之间的依赖关系 yum localinstall *.rpm # 或者使用rpm命令,但需要按依赖顺序手动安装 # rpm -ivh *.rpm
优点:快速、直接,针对性强,不占用大量空间。
缺点:每次安装新软件都需要重复此过程,无法有效管理软件更新。
利用官方ISO镜像制作离线源
CentOS的官方DVD ISO镜像本身就是一个完整的离线仓库,你可以直接利用它。
操作步骤
获取并挂载ISO:
从官网下载与服务器版本匹配的DVD ISO镜像,将其拷贝到离线服务器上,然后挂载ISO文件:mkdir /mnt/centos-iso mount -o loop /path/to/CentOS-x.x-x86_64-DVD-xxx.iso /mnt/centos-iso
为了开机自动挂载,可以修改
/etc/fstab
文件。:
创建/etc/yum.repos.d/centos-iso.repo
如下:[iso-baseos] name=CentOS ISO BaseOS baseurl=file:///mnt/centos-iso/BaseOS enabled=1 gpgcheck=0 [iso-appstream] name=CentOS ISO AppStream baseurl=file:///mnt/centos-iso/AppStream enabled=1 gpgcheck=0
:
同样地,执行yum clean all
和yum makecache
后即可使用。
优点:官方源,稳定可靠,制作简单。
缺点:镜像中的软件包版本可能较旧,无法获取到最新的安全更新。
相关问答FAQs
离线安装时,提示“软件包:xxx-1.0 需要 yyy-2.0 >= 2.0”,但这个依赖包明明在我下载的目录里,为什么还报错?
解答:这个问题通常是因为没有使用yum localinstall
命令,而是直接用了rpm -ivh *.rpm
。rpm -ivh
在安装时是按文件名顺序逐个处理的,如果依赖包在所安装包的后面,它就找不到,而yum localinstall
会先读取所有指定目录下的rpm包信息,建立一个临时的本地仓库,然后像在线安装一样智能地解决依赖顺序问题,在离线安装多个关联包时,强烈推荐使用yum localinstall *.rpm
。
我应该选择哪种离线yum方法?哪种最好?
解答:没有绝对的“最好”,只有“最适合”。
- 如果你需要管理多台服务器,且追求长期、稳定、方便的维护,那么方法一(搭建完整本地仓库)是最佳选择,投入一次,长期受益。
- 如果你只是临时、偶尔地在单台服务器上安装一两个小工具,那么方法二(仅下载单个包)最快捷高效。
- 如果你需要进行标准化的系统批量部署,且对软件版本没有最新的要求,那么方法三(利用官方ISO)非常方便,因为它本身就是一套标准化的安装介质。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复