Observação:

Usar um Contêiner para Criar um Espelho de Repositório DNF ou ULN

Isenção de Responsabilidade do Suporte Técnico Oracle

A Oracle não fornece suporte técnico para a sequência de etapas fornecidas nas instruções a seguir porque essas etapas se referem a um projeto de código-fonte aberto não fornecido pela Oracle. Este tutorial fornece instruções opcionais apenas como conveniência.

O método suportado pela Oracle para criar espelhos de distribuição de software Oracle Linux é usar o comando dnf reposync em um sistema que esteja executando o Oracle Linux. Para obter mais informações, consulte https://docs.oracle.com/en/operating-systems/oracle-linux/software-management/sfw-mgmt-UseSoftwareDistributionMirrors.html#use-mirrors.

Introdução

O Oracle Linux 8 inclui uma ferramenta reposync totalmente funcional para DNF, o que facilita a criação de um espelho de qualquer repositório yum. Esse recurso também pode ser estendido para espelhar canais ULN para ambientes em que a maioria dos sistemas não tem acesso direto à internet. Criando um espelho yum dos repositórios yum e canais ULN usados pela sua organização, você pode reduzir a sobrecarga da rede e melhorar o desempenho do yum em todo o seu ambiente. Os espelhos Yum também serão úteis se você estiver configurando outros serviços para seu ambiente, como Ksplice off-line.

Enquanto as versões anteriores do Oracle Linux incluíam um pacote uln-yum-mirror que poderia ser usado para executar serviços de espelhamento, isso não era particularmente eficiente e era relativamente complicado de configurar.

Um serviço de espelho ULN ou yum é um exemplo típico de um serviço que é melhor executado em um conjunto de contêineres. Usando o Docker ou o Podman, você pode implantar de forma rápida e fácil um contêiner que usa a imagem oraclelinux:8-slim para tratar a sincronização programada dos repositórios yum ou canais ULN que você usa na sua organização. Você também pode implantar um contêiner que lida com o provisionamento dos repositórios espelhados em um serviço Web que os sistemas cliente podem acessar.

Um projeto do opensource GitHub fornece Dockerfiles, scripts e instruções para configurar esse tipo de serviço em https://github.com/Djelibeybi/oraclelinux-reposync.

Objetivos

Neste laboratório, você aprenderá a:

Pré-requisitos

Instale os pacotes necessários

Se ainda não estiver conectado, abra um terminal e conecte-se via ssh ao sistema ol8-server:

ssh oracle@<ip_address_of_ol8-server>

Instale o git para que você possa clonar o repositório de ressincronização de contêiner:

sudo dnf install -y git

Instale o podman e os utilitários relacionados:

sudo dnf module install -y container-tools:ol8

Observação: Se você estiver usando o Oracle Linux 7, os pacotes buildah e skopeo só estarão disponíveis por meio dos repositórios EPEL não suportados. Por esse motivo, você pode optar por usar o Docker com a finalidade de criar e executar suas imagens de contêiner. Mais detalhes sobre o uso do Docker estão encontrados no projeto opensource README.md.

Clonar o repositório de ressincronização de contêiner

Clone o repositório:

git clone https://github.com/Djelibeybi/oraclelinux-reposync.git
cd oraclelinux-reposync

Criar as imagens

Crie as duas imagens de contêiner incluídas no repositório:

buildah build-using-dockerfile -t ol-repo-sync .
buildah build-using-dockerfile -t ol-repo-web -f Dockerfile.nginx .

Verifique o build:

podman images

Criar diretórios de armazenamento adicionais

Dois diretórios adicionais precisam ser criados para que o serviço de ressincronização de contêiner funcione corretamente:

Esses diretórios podem ser localizados onde desejar, mas é recomendável que você os crie juntamente com as informações de configuração desse contêiner. Por exemplo:

mkdir rhn repo

Definir as variáveis de configuração para ressincronização

A imagem ol-repo-sync depende das informações de configuração armazenadas em vários arquivos de configuração armazenados no diretório de configuração.

Observação: É necessária uma assinatura de suporte do Oracle Linux para sincronização a partir do ULN. Se você não tiver uma assinatura de suporte, remova o array uln completamente do config/repos.json.

Para obter o melhor desempenho de sincronização, use a fonte yum em vez de uln sempre que possível, pois yum.oracle.com aproveita o CDN Akamai e quase sempre terá velocidades de download muito mais altas que o ULN.

  1. (Opcional) Se você tiver uma assinatura de suporte ativa do Oracle Linux:

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

    Substitua os placeholders pelas credenciais do Oracle SSO e um CSI ativo. Para proteger o conteúdo desse arquivo, execute:

    chmod 400 config/uln.conf
    

    Isso impede que alguém, exceto você, acesse.

  2. Crie um arquivo config/repo-map.json executando o seguinte comando:

    podman run --rm -it \
      --name ol-repo-sync \
      -v ${PWD}/config:/config:z \
      -v ${PWD}/repo:/repo:z \
      ol-repo-sync update
    

    Esse comando poderá ser executado novamente a qualquer momento se você quiser atualizar o arquivo config/repo-map.json com a configuração de repositório mais recente. O comando deve ser executado pelo menos sempre que uma nova atualização ou versão principal for liberada para que os novos repositórios estejam disponíveis para sincronização.

  3. Copiar repos.json

    cp config/repos.sample.json config/repos.json
    

    Adicione todos os repositórios que você deseja sincronizar ao array uln ou yum.

    Exemplo:

    Este é um script que sincroniza os pacotes Oracle Linux 8 Ksplice aware userspace do ULN e os pacotes Oracle Linux Automation Manager do yum.oracle.com. Se você não tiver uma conta ULN durante este laboratório, remova todo o bloco uln.

    echo '{
       "uln": [
            "ol8_x86_64_userspace_ksplice",
            "ol8_aarch64_userspace_ksplice"
        ],   
        "yum": [
            "ol8_x86_64_automation"
        ]
    }' | tee config/repos.json
    

(Opcional) Registre seu contêiner com o ULN

Se você não pretende espelhar nenhum canal da ULN, você não precisa registrar seu contêiner. Se você tiver inserido suas credenciais ULN no arquivo de configuração ULN e tiver criado um diretório para conter os dados de registro ULN e tiver configurado pelo menos um canal ULN no arquivo de configuração de repositório, deverá registrar o contêiner.

O registro pode ser feito executando-se:

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

Observação:* Isso levará alguns minutos sem saída para o terminal, mas deverá retornar ao prompt de comando quando concluído. Os diretórios rhn e config no diretório de trabalho atual são mapeados para o contêiner. Você só precisa executar o registro uma vez para o contêiner, desde que o diretório rhn esteja mapeado para /etc/sysconfig/rhn para cada contêiner subsequente que você executar.

Preencher seu repositório espelhado

Para preencher o repositório espelhado com pacotes dos repositórios e canais configurados, execute:

podman run --rm -it \
  -v ${PWD}/rhn:/etc/sysconfig/rhn \
  -v ${PWD}/config:/config \
  -v ${PWD}/repo:/repo:z \
  ol-repo-sync

O contêiner adiciona e inscreve automaticamente cada canal configurado em config/repos.json e cria uma hierarquia idêntica à usada pelo servidor Oracle Linux yum.

Este comando pode ser programado para ser executado em uma programação recorrente usando um cronjob ou um timer systemd.

Observação: Esta etapa leva um tempo para ser concluída à medida que todos os pacotes são submetidos a download local para seu sistema.

Servir o espelho yum local para sistemas cliente

Use a imagem de contêiner ol-repo-web para atender aos repositórios yum para seus sistemas cliente. Este contêiner pode ser executado permanentemente e pode ser configurado para iniciar na inicialização:

podman run --detach --name yum-server \
  -p 8080:80 \
  -v ${PWD}/repo:/var/www/html/repo:ro \
  ol-repo-web

Observação: O diretório de repositório é mapeado para o contêiner do servidor yum com permissões somente leitura para permitir que o contêiner continue a executar e atender clientes enquanto os repositórios e canais espelhados são atualizados.

Verificar o espelho yum local

Crie uma nova entrada de repositório dnf com o seguinte conteúdo:

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

Observação: Se estiver expondo a sistemas externos, altere o baseurl acima para o endereço IP ou nome do host do sistema que está executando o contêiner.
Abra também o firewall para permitir o acesso à porta 8080.

sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

Em seguida, confirme se a nova entrada funciona:

dnf repolist
dnf info ansible

Para Obter Mais Informações

Consulte outros recursos relacionados:

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.