为什么要用nexus代理yum和apt源

大多数情况下,生产环境的服务器处于受限制的网络环境中,无法访问公网的yum或apt源。因此可以架设一个代理服务器,让代理服务器获取软件包。

Nexus是一种流行的仓库管理工具,用于管理和组织各种类型的软件包、构建工件和依赖项。它的主要用途是创建、维护和管理软件仓库,以支持开发者团队在软件开发和部署过程中的需要。Nexus支持的仓库类型有: apt, bower, cocapods, cona, docker, gitfs, go, helm, maven, npm, nuget, p2, raw, rubegems, yum。

使用Nexus代理Yum源和APT源有以下好处:

  1. 缓存和加速下载: Nexus代理可以缓存已下载的软件包,当其他服务器需要相同的软件包时,它们可以从本地Nexus代理获取,从而加快下载速度。

  2. 节省带宽: 代理源通过缓存软件包,可以节省网络带宽的使用,特别是在大规模部署或多个服务器需要相同软件包的情况下。

  3. 离线访问: 如果服务器在无法访问互联网的环境下运行,您可以通过在Nexus上缓存所需的软件包,然后将其传输到离线服务器上,从而实现离线环境下的软件包管理。

  4. 稳定性和可靠性: 使用Nexus代理可以提高软件包的稳定性和可靠性,因为您可以在代理源中验证和管理软件包,确保它们不包含恶意内容,并且可以随时回滚到以前的版本。

  5. 本地定制: Nexus代理允许我们定制软件包,添加补丁或进行修改,从而满足特定需求。您可以在代理源中管理这些定制软件包,而不必更改上游源。

  6. 集中管理: 通过Nexus代理,可以集中管理不同类型的软件包,包括Yum和APT。这使得软件包管理更加一致和方便。

  7. 安全性: Nexus代理可以帮助您监控和审计软件包,确保它们没有被篡改或包含恶意内容,从而提升整体的安全性。

总之,使用Nexus代理Yum源和APT源可以提高软件包管理的效率、稳定性和安全性,特别是在大规模或复杂网络的环境中。

本文将结合我目前经常使用的三种Linux发行版:Rocky Linux 8.8, openEuler 22.04 LTS, Ubuntu 22.04,介绍在Nexus如何创建这些Linux系统的yum和apt软件包代理仓库,并配置这些系统使用这些仓库。

Rocky Linux 8.8

在nexus创建yum(proxy)的仓库,仓库名为rocky,代理的远程地址(Remote Storage)可以选择Rocky Linux的国内源。例如https://mirror.sjtu.edu.cn/rocky/

创建完成后得到仓库的地址为https://nexus.xxx.com/repository/rocky/

下面,在Rocky Linux 8服务器上配置切换使用Nexus代理的yum源。

备份系统默认的yum仓库配置:

1mkdir -p /etc/yum.repos.d/backup
2cp -r /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup

/etc/yum.repos.dRocky-*.repo文件中仓库的地址替换为https://nexus.xxx.com/repository/rocky

1sed -e 's|^mirrorlist=|#mirrorlist=|g'\
2    -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://nexus.xxx.com/repository/rocky|g'\
3    -i.bak \
4    /etc/yum.repos.d/Rocky-*.repo

上面的命令使用了sed工具编辑Rocky Linux的YUM仓库配置文件。sed: 这是一个流式文本编辑器,用于处理和转换文本数据。

  • -e 's|^mirrorlist=|#mirrorlist=|g': 这是第一个编辑操作。它使用正则表达式将以 mirrorlist= 开头的行替换为以 #mirrorlist= 开头的行,从而将mirrorlist的配置行注释掉。
  • -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://nexus.xxx.com/repository/rocky|g': 这是第二个编辑操作。它使用正则表达式将以 #baseurl=http://dl.rockylinux.org/$contentdir 开头的行替换为以 baseurl=https://nexus.xxx.com/repository/rocky 开头的行,从而将基本URL的配置行修改为指向nexus代理的仓库地址。
  • -i.bak: 这个标志告诉sed编辑器在原始文件中直接进行修改,并将原始文件备份为.bak扩展名的文件(虽然前面手动将repo文件备份到了backuup目录里,这里使用sed编辑文件时再将其以.bak文件备份在当前目录下)。
  • /etc/yum.repos.d/Rocky-*.repo是进行编辑的目标文件路径,它匹配/etc/yum.repos.d/中名为Rocky-*.repo的所有文件。

最后,运行 dnf makecache 命令更新DNF包管理器的缓存。

1dnf makecache

EPEL

在Rock Linux 8中还可以使用EPEL(Extra Packages for Enterprise Linux)仓库。EPEL 仓库提供了许多额外的软件包,这些软件包不包含在官方 Rocky Linux 仓库中,但是在许多情况下可能是非常有用的。

在nexus创建yum(proxy)的仓库,仓库名为epel,代理的远程地址(Remote Storage)可以选择EPEL的国内源。例如https://mirrors.tuna.tsinghua.edu.cn/epel/

在Rocky Linux服务器上安装EPEL:

1yum install epel-release

下面,在Rocky Linux 8服务器上配置切换使用Nexus代理的epel yum源。

1sed -i 's|^#baseurl=https://download.example/pub/epel|baseurl=https://nexus.xxx.com/repository/epel|' /etc/yum.repos.d/epel*
2sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*

openEuler 22.04 LTS SP2

在nexus创建yum(proxy)的仓库,仓库名为openeuler,代理的远程地址(Remote Storage)直接使用https://repo.openeuler.org/

创建完成后得到仓库的地址为https://nexus.xxx.com/repository/openeuler/

下面,在openEuler服务器上配置切换使用Nexus代理的yum源。

备份系统默认的yum仓库配置:

1mkdir -p /etc/yum.repos.d/backup
2cp -r /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup

/etc/yum.repos.dopenEuler.repo文件中仓库的地址替换为https://nexus.xxx.com/repository/openeuler

1sed -e 's|^baseurl=http://repo.openeuler.org|baseurl=https://nexus.xxx.com/repository/openeuler|g'\
2    -e 's|^gpgkey=http://repo.openeuler.org|gpgkey=https://nexus.xxx.com/repository/openeuler|g'\
3    -e 's|^metalink|#metalink|g' \
4    -i.bak \
5    /etc/yum.repos.d/openEuler.repo

运行 dnf makecache 命令更新DNF包管理器的缓存。

1dnf makecache

Ubuntu 22.04 (jammy)

在nexus创建apt(proxy)的仓库,仓库名为ubuntu-jammy,代理的远程地址(Remote Storage)可以选择Ubuntu的国内源, 例如http://mirrors.aliyun.com/ubuntu/Distribution中输入yammy

创建完成后得到仓库的地址为https://nexus.xxx.com/repository/ubuntu-jammy

备份系统默认的apt源配置:

1mkdir -p /etc/apt/backup
2cp -r /etc/apt/sources.list /etc/apt/backup

下面,在Ubuntu服务器上配置切换使用Nexus代理的apt源。

1sed -e 's|^deb http://nova.clouds.archive.ubuntu.com/ubuntu/|deb https://nexus.xxx.com/repository/ubuntu-jammy/|g'\
2    -i.bak \
3    /etc/apt/sources.list

更新源:

1apt update

关于Nexus的权限设置

注意启用Nexus的匿名访问(Anonymous Access),虽然启用了匿名访问,但为了不将Nexus中其他私有仓库(例如团队的maven仓库等其他仓库)暴露给匿名用户,需要解除内置的anonymous用户和nx-anonymous角色之间的绑定关系,另外新建一个匿名角色nx-anonymous-custom,对新建的匿名角色分配前面创建的apt和yum代理仓库的读权限,再将nx-anonymous-custom角色分配给anonymous