注:
- Oracle 提供的免费实验室环境中提供了本教程。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间示例值。完成实验室后,请使用特定于您的云环境的这些值替换这些值。
使用容器创建 DNF 或 ULN 重做镜像
Oracle 支持免责声明
Oracle 不对以下说明中提供的步骤序列提供技术支持,因为这些步骤引用并开源项目(Oracle 未提供)。本教程为方便起见提供了可选说明。
Oracle 支持的 Oracle Linux 软件分发镜像创建方法是在运行 Oracle Linux 的系统上使用 dnf reposync
命令。有关详细信息,请参阅 https://docs.oracle.com/en/operating-systems/oracle-linux/software-management/sfw-mgmt-UseSoftwareDistributionMirrors.html#use-mirrors。
简介
Oracle Linux 8 包含适用于 DNF 的功能完备的 reposync 工具,可以轻松地创建任何 yum 系统信息库的镜像。对于大多数系统无法直接访问 Internet 的环境,此工具还可以扩展到镜像 ULN 通道。通过创建组织使用的 yum 系统信息库和 ULN 通道的 yum 镜像,您可以减少网络开销并提高整个环境的 yum 性能。如果要为您的环境配置其他服务(例如脱机 Ksplice),Yum 镜像也很有用。
尽管以前版本的 Oracle Linux 包含一个可用于执行镜像服务的 uln-yum-mirror
软件包,但这并不特别高效,而且设置起来相当复杂。
ULN 或 yum 镜像服务是最佳在一组容器中运行的服务的典型示例。通过使用 Docker 或 Podman,您可以快速轻松地部署使用 oraclelinux:8-slim
映像的容器来处理组织内使用的 yum 资料档案库或 ULN 通道的调度同步。您还可以部署一个容器,用于处理客户机系统能够访问的 Web 服务内镜像系统信息库的预配。
开源 GitHub 项目提供了在 https://github.com/Djelibeybi/oraclelinux-reposync 上设置此类服务的 Dockerfile、脚本和说明。
目标
在此实验室中,您将学习:
- 安装容器工具
- 使用所需软件构建容器
- 使用容器中的资料档案库创建镜像服务
先决条件
- 安装有 Oracle Linux 7 或 Oracle Linux 8 且可通过 Internet 访问的系统。
- 本教程假定您使用的是 Oracle Linux 8,因此软件包安装命令使用 dnf(如果您使用的是 Oracle Linux 7),请使用 yum 替换这些命令说明。
- 在此教程中,我们使用 Podman 和 Buildah 来处理容器的构建和运行,但是如果您使用的是 Oracle Linux 7,同样可以使用 Docker 执行这些任务。
安装所需的程序包
如果尚未连接,请打开终端并通过 ssh 连接到 ol8-server 系统:
ssh oracle@<ip_address_of_ol8-server>
安装 git,以便可以克隆 container-reposync 系统信息库:
sudo dnf install -y git
安装 podman 和相关实用程序:
sudo dnf module install -y container-tools:ol8
注意:如果使用的是 Oracle Linux 7,则仅通过不支持的 EPEL 系统信息库提供 buildah 和 Skopeo 软件包。因此,您可以选择使用 Docker 来构建和运行容器映像。有关使用 Docker 的更多详细信息,请参见开源项目 README.md。
克隆 container-reposync 资料档案库
克隆存储库:
git clone https://github.com/Djelibeybi/oraclelinux-reposync.git
cd oraclelinux-reposync
构建映像
构建存储库中包含的两个容器映像:
buildah build-using-dockerfile -t ol-repo-sync .
buildah build-using-dockerfile -t ol-repo-web -f Dockerfile.nginx .
验证构建:
podman images
创建附加存储目录
需要另外创建两个目录,以便 container-reposync 服务正常运行:
rhn
:如果要镜像 ULN 通道,必须创建一个目录来存储 ULN 注册信息,使其在后续的容器重新启动后仍然有效。您可以随时将此目录映射到容器中,以便它可以访问 ULN 注册数据。repo
:必须创建一个目录来存储从 ULN 或 yum 服务器镜像的所有软件包和元数据。托管基于此目录的文件系统需要足够的可用磁盘空间来满足要镜像的所有系统信息库和通道的需要。您可以选择将专用存储挂载到此位置或映射到备用位置(如果需要)。
您可以根据需要定位这些目录,但是建议您在此容器的配置信息旁边创建这些目录。例如:
mkdir rhn repo
设置资料档案库的配置变量
ol-repo-sync 映像取决于存储在配置目录中的各种配置文件中的配置信息。
config/uln.conf
:此文件存储 ULN 访问凭证,例如 Oracle SSO 凭证和活动的 CSI。必须设置文件权限以限制访问。如果不打算从 ULN 镜像,则不需要此文件。config/repo-map.json
:此文件用于构建资料档案库 URL 并确定如何访问不同的 ULN 通道和 yum 系统信息库。您不应编辑此文件,但可以参考它来查看哪些通道名称可用于镜像。请注意,可能需要不时更新此文件,以考虑新的 ULN 通道。此外,此文件中的某些条目仅在 ULN 中可用。包括包含单词base
、patch
、ksplice
、JavaSE
和Exadata
的所有存储库。这些系统信息库可能进一步局限于特定的 CSI。config/repos.json
:此文件用于标识应镜像哪些 ULN 通道或 yum 系统信息库。它分为两个部分:第一个列出 ULN 通道和第二个列出 yum 系统信息库。如果只想镜像 yum 系统信息库,请完全删除 ULN 部分。ULN 部分应仅包含不可作为 https://yum.oracle.com 上的系统信息库的通道,因为直接从 yum 服务器镜像效率更高。大多数通道在 Oracle Linux yum 服务器上也可用,因此请尽可能使用此部分列出您的通道。如果向 ULN 部分添加条目,则必须有一个 ULN 帐户,并且您必须向 ULN 注册容器映像。
注意:需要 Oracle Linux 支持订阅才能从 ULN 同步。如果您没有支持订阅,请完全从
config/repos.json
中删除uln
数组。
为了实现最佳的同步性能,尽可能使用 yum 源而非 uln,因为 yum.oracle.com 利用 Akamai CDN,下载速度几乎总是比 ULN 高出很多。
-
(可选)如果拥有活动的 Oracle Linux 支持订阅:
cp config/uln.sample.conf config/uln.conf
将占位符替换为 Oracle SSO 身份证明和有效的 CSI。要保护此文件的内容,请运行:
chmod 400 config/uln.conf
这会阻止您以外的任何人访问。
-
通过运行以下命令创建
config/repo-map.json
文件:podman run --rm -it \ --name ol-repo-sync \ -v ${PWD}/config:/config:z \ -v ${PWD}/repo:/repo:z \ ol-repo-sync update
如果要使用最新的存储库配置更新
config/repo-map.json
文件,可以随时再次运行此命令。至少应在发布新更新或主要版本时运行该命令,以使新系统信息库可供同步。 -
复制
repos.json
cp config/repos.sample.json config/repos.json
将要同步的所有资料档案库添加到 uln 或 yum 数组。
示例:
以下脚本将 ULN 中的
Oracle Linux 8 Ksplice aware userspace
软件包与 yum.oracle.com 中的Oracle Linux Automation Manager
软件包同步。如果在此练习期间没有 ULN 帐户,请删除整个 uln 块。echo '{ "uln": [ "ol8_x86_64_userspace_ksplice", "ol8_aarch64_userspace_ksplice" ], "yum": [ "ol8_x86_64_automation" ] }' | tee config/repos.json
(可选)将容器注册为 ULN
如果您不打算镜像 ULN 中的任何通道,则无需注册容器。如果已将 ULN 凭证输入到 ULN 配置文件,并且您创建了一个目录来包含 ULN 注册数据,并且在存储库配置文件中至少配置了一个 ULN 通道,则必须注册容器。
可以通过运行以下命令执行注册:
podman run --rm -it \
-v ${PWD}/rhn:/etc/sysconfig/rhn:z \
-v ${PWD}/config:/config:z \
-v ${PWD}/repo:/repo:z \
ol-repo-sync register
注意:* 这需要几分钟时间,不向终端输出,但在完成时应返回到命令提示符。当前工作目录中的
rhn
和config
目录映射到容器。只要rhn
目录针对您运行的每个后续容器映射到/etc/sysconfig/rhn
,您就只需为容器执行一次注册。
填充镜像系统信息库
要使用所配置的系统信息库和通道中的软件包填充镜像系统信息库,请运行:
podman run --rm -it \
-v ${PWD}/rhn:/etc/sysconfig/rhn \
-v ${PWD}/config:/config \
-v ${PWD}/repo:/repo:z \
ol-repo-sync
该容器会自动添加和订阅 config/repos.json
中配置的每个通道,并创建与 Oracle Linux yum 服务器使用的相同分层结构。
可以安排此命令使用 cronjob 或 systemd 计时器按循环调度运行。
注意:完成此步骤需要一些时间,因为所有软件包都下载到系统本地。
为客户机系统提供本地 yum 镜像
使用 ol-repo-web
容器映像为客户机系统提供 yum 系统信息库。此容器可以永久运行,并且可以配置为在引导时启动:
podman run --detach --name yum-server \
-p 8080:80 \
-v ${PWD}/repo:/var/www/html/repo:ro \
ol-repo-web
注意:将存储库目录映射到具有只读权限的 yum 服务器容器,以允许容器在更新镜像系统信息库和通道时继续运行并为客户机提供服务。
验证本地 yum 镜像
使用以下内容创建新的 dnf 系统信息库条目:
echo '[ol_automation_http_repo]
name=OL_automation_x86_64_HTTP
baseurl="http://localhost:8080/repo/OracleLinux/OL8/automation/$basearch/"
gpgcheck=0' | sudo tee /etc/yum.repo.d/ol-local.repo
注意:如果向外部系统公开,请将上面的
baseurl
更改为运行容器的系统的 IP 地址或主机名。
同时打开防火墙以允许访问端口 8080。sudo firewall-cmd --permanent --add-port=8080/tcp sudo firewall-cmd --reload
然后确认新条目有效:
dnf repolist
dnf info ansible
详细信息
请参阅其他相关资源:
更多学习资源
在 docs.oracle.com/learn 上浏览其他实验室,或者在 Oracle Learning YouTube 渠道上访问更多免费学习内容。此外,访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Use a Container to Create a DNF or ULN Repo Mirror
F54941-01
March 2022
Copyright © 2022, Oracle and/or its affiliates.