注:

使用容器创建 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、脚本和说明。

目标

在此实验室中,您将学习:

先决条件

安装所需的程序包

如果尚未连接,请打开终端并通过 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 服务正常运行:

您可以根据需要定位这些目录,但是建议您在此容器的配置信息旁边创建这些目录。例如:

mkdir rhn repo

设置资料档案库的配置变量

ol-repo-sync 映像取决于存储在配置目录中的各种配置文件中的配置信息。

注意:需要 Oracle Linux 支持订阅才能从 ULN 同步。如果您没有支持订阅,请完全从 config/repos.json 中删除 uln 数组。

为了实现最佳的同步性能,尽可能使用 yum 源而非 uln,因为 yum.oracle.com 利用 Akamai CDN,下载速度几乎总是比 ULN 高出很多。

  1. (可选)如果拥有活动的 Oracle Linux 支持订阅:

    cp config/uln.sample.conf config/uln.conf
    

    将占位符替换为 Oracle SSO 身份证明和有效的 CSI。要保护此文件的内容,请运行:

    chmod 400 config/uln.conf
    

    这会阻止您以外的任何人访问。

  2. 通过运行以下命令创建 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 文件,可以随时再次运行此命令。至少应在发布新更新或主要版本时运行该命令,以使新系统信息库可供同步。

  3. 复制 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

注意:* 这需要几分钟时间,不向终端输出,但在完成时应返回到命令提示符。当前工作目录中的 rhnconfig 目录映射到容器。只要 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 帮助中心