Observação:
- Este tutorial está disponível em um ambiente de laboratório gratuito fornecido pela Oracle.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
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:
- Instalar ferramentas de contêiner
- Crie um contêiner com o software necessário
- Criar um serviço de espelho usando a ressincronização no contêiner
Pré-requisitos
- Um sistema com o Oracle Linux 7 ou Oracle Linux 8 instalado e com acesso à Internet.
- Este tutorial supõe que você está usando o Oracle Linux 8; portanto, os comandos de instalação de pacote usam dnf, se você estiver usando o Oracle Linux 7, substitua essas instruções de comando pelo yum.
- Neste tutorial, usamos Podman e Buildah para tratar da criação e execução de contêineres, mas se você estiver usando o Oracle Linux 7, também poderá usar o Docker para executar essas tarefas.
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:
rhn
: Se você pretende espelhar canais ULN, deverá criar um diretório para armazenar as informações de registro ULN para torná-lo persistente nas reinicializações subsequentes do contêiner. Você pode mapear esse diretório para seu contêiner sempre que executá-lo, para que ele tenha acesso aos dados de registro ULN.repo
: Um diretório deve ser criado para armazenar todos os pacotes e metadados que você espelha do ULN ou do servidor yum. O sistema de arquivos que hospeda esse diretório baseado precisa de espaço em disco suficiente disponível para atender a todos os repositórios e canais que você pretende espelhar. Você pode optar por montar um armazenamento dedicado para este local ou mapear para um local alternativo, se necessário.
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.
config/uln.conf
: Este arquivo armazena credenciais de acesso ULN, como credenciais do Oracle SSO e um CSI ativo. As permissões do arquivo devem ser definidas para restringir o acesso. Você não precisa desse arquivo se não pretende espelhar do ULN.config/repo-map.json
: Este arquivo é usado para construir URLs de repositório e identificar como acessar diferentes canais ULN e repositórios yum. Você não deve editar este arquivo, mas pode consultar para ver quais nomes de canal estão disponíveis para espelhamento. Observe que esse arquivo pode precisar ser atualizado periodicamente para contabilizar novos canais ULN. Além disso, algumas entradas deste arquivo só estão disponíveis no ULN. incluindo todos os repositórios que contêm a palavrabase
,patch
,ksplice
,JavaSE
eExadata
. Esses repositórios podem ser ainda mais restritos a CSIs específicos.config/repos.json
: Este arquivo é usado para identificar quais canais ULN ou repositórios yum devem ser espelhados. Ele é separado em duas seções: a primeira listando canais ULN e a segunda listando repositórios yum. Se você pretende apenas espelhar repositórios yum, remova totalmente a seção ULN. A seção ULN só deve conter canais que não estejam disponíveis como repositórios no https://yum.oracle.com, uma vez que é mais eficiente espelhar diretamente do servidor yum. A maioria dos canais também está disponível no servidor Oracle Linux yum; portanto, use esta seção para listar seus canais sempre que possível. Se você adicionar entradas à seção ULN, deverá ter uma conta ULN e deverá registrar a imagem do contêiner com ULN.
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 doconfig/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.
-
(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.
-
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. -
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 pacotesOracle 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
econfig
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óriorhn
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.
Use a Container to Create a DNF or ULN Repo Mirror
F54939-01
March 2022
Copyright © 2022, Oracle and/or its affiliates.