使用nexus代理yum源和apt源
2023-08-02
为什么要用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源有以下好处:
缓存和加速下载: Nexus代理可以缓存已下载的软件包,当其他服务器需要相同的软件包时,它们可以从本地Nexus代理获取,从而加快下载速度。
节省带宽: 代理源通过缓存软件包,可以节省网络带宽的使用,特别是在大规模部署或多个服务器需要相同软件包的情况下。
离线访问: 如果服务器在无法访问互联网的环境下运行,您可以通过在Nexus上缓存所需的软件包,然后将其传输到离线服务器上,从而实现离线环境下的软件包管理。
稳定性和可靠性: 使用Nexus代理可以提高软件包的稳定性和可靠性,因为您可以在代理源中验证和管理软件包,确保它们不包含恶意内容,并且可以随时回滚到以前的版本。
本地定制: Nexus代理允许我们定制软件包,添加补丁或进行修改,从而满足特定需求。您可以在代理源中管理这些定制软件包,而不必更改上游源。
集中管理: 通过Nexus代理,可以集中管理不同类型的软件包,包括Yum和APT。这使得软件包管理更加一致和方便。
安全性: 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.d
中Rocky-*.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.d
中openEuler.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