Zimbra (OSE e NE): Criando um mirror local dos repositórios do Zimbra (Parte 1)

Olá! Irei publicar uma série de artigos sobre a criação de mirrors locais dos repositórios do Zimbra, tanto para a versão Open Source como para a Network Edition.

A utilização de repositórios foi disponibilizada a partir da versão 8.7 do Zimbra.

Nestes artigos, irei abordar desde a criação de um mirror local utilizando o Nginx, passando por repositórios gerenciados pelo Sonatype Nexus Repository Manager, até a criação de múltiplas instâncias (com suporte a balanceamento de carga) na AWS  com Bootstrap.

Parte 2 aqui:

https://respirandolinux.com.br/2019/02/25/proxy-para-repositorios-yum-com-nexus-repository-manager-3/

Primeiramente, vamos entender algumas motivações para criação de um mirror dos repositórios do Zimbra:

  • Restrição de conexão com a internet no(s) servidor(es) do Zimbra

  • Estrutura multi-server do Zimbra, para evitar o download múltiplas vezes dos mesmos pacotes

  • Implementação de Auto Scaling do Zimbra para escalabilidade otimizando desempenho e recursos

Vejamos uma ilustração do funcionamento de repositórios locais:

 

Mirror local (hosted) com Nginx

Neste primeiro artigo, faremos um mirror local hosted (isto é, todos os arquivos são armazenados previamente no servidor) utilizando o Centos 7 e Nginx (nada impede que você utilize outro servidor de sua preferência). Os repositórios do Zimbra ficam armazenados em buckets S3 da AWS, portanto, para efetuar o download destes pacotes é necessário seguir os seguintes procedimentos:

# yum install epel-release

# yum install python-pip

# pip install awscli

Na nossa instalação, iremos efetuar o download dos pacotes no diretório “/var/repositories”, mas você pode ajustar esse caminho de acordo com a sua infraestrutura:

# mkdir /var/repositories

# cd /var/repositories

Decidindo para quais versões do Zimbra efetuar o mirror

Primeiramente, é necessário entender, que independentemente do SO utilizado para criação do mirror, será possível obter e fornecer pacotes para todas as distribuições suportadas pelo Zimbra.

Outro fator que deve ser levado em consideração é qual ou quais versões se deseja manter um mirror local.

Para um mirror somente para o seu ambiente Zimbra, aconselho realizar a operação somente para a versão que será instalada e posteriormente atualizar com os próximos releases. Se você irá implementar um mirror como provedor e precisa fornecer os pacotes para as mais diversas versões do Zimbra, você poderá efetuar o download para todas as versões suportadas.

No nosso exemplo, iremos efetuar o mirror da versão mais atual até o momento: 8.8.11, tanto para as versões Open Source como Network Edition, para distribuições RPM: Red Hat, CentOs e Oracle Linux. (Na configuração do cliente irei explicar quais repositórios devem ser utilizados)

No diretório “/var/repositories”, efetue o download dos pacotes para a versão 8.8.11, cabendo destacar que é sempre necessário baixar o repositório da versão “8.7”:

# aws s3 sync s3://repo.zimbra.com/rpm/87 ./rpm/87 --no-sign-request --delete

# aws s3 sync s3://repo.zimbra.com/rpm/8811-ne ./rpm/8811-ne --no-sign-request --delete

# aws s3 sync s3://repo.zimbra.com/rpm/8811 ./rpm/8811 --no-sign-request --delete

Para a versão 8.8.11 (fornecendo ambas as versões NE e OSE), serão utilizados aproximadamente 3.5GB.

Mantendo os repositórios locais atualizados com os oficiais

Para manter os repositórios oficiais atualizados, basta criar tarefas no CRON para sincronizar os repositórios que estão sendo efetuados os mirrors locais.

No exemplo abaixo, temos as entradas na crontab para atualizar os repositórios da versão 8.8.11 as 3:30h da manhã, diariamente:

Caso você tenha modificado o caminho, ajuste de acordo com sua necessidade.

30 3 * * * /usr/bin/aws s3 sync s3://repo.zimbra.com/rpm/87 /var/repositories/rpm/87 --no-sign-request --delete
30 3 * * * /usr/bin/aws s3 sync s3://repo.zimbra.com/rpm/8811 /var/repositories/rpm/8811 --no-sign-request --delete
30 3 * * * /usr/bin/aws s3 sync s3://repo.zimbra.com/rpm/8811-ne /var/repositories/rpm/8811-ne --no-sign-request --delete

Instalando e configurando o Nginx

Agora iremos partir para a instalação e configuração do Nginx.

Efetuamos a instalação do Nginx:

# yum install nginx

Neste cenário, o servidor está sendo utilizado exclusivamente para prover os repositórios do Zimbra, então efetuamos a configuração do arquivo /etc/nginx/nginx.conf, que pode ser baixado conforme abaixo:

cd /etc/nginx

wget https://raw.githubusercontent.com/fsschmidt/zimbra/master/repo-mirror/nginx.conf

Observe o parâmetro “root”, onde informamos o diretório raiz dos nossos repositórios. Caso você tenha modificado o caminho, ajuste de acordo com sua necessidade.

Nesta configuração não está sendo implementado HTTPS para conexão aos repositórios, uma vez que o acesso ocorre em rede local e sem nenhum conteúdo de autenticação.

# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
worker_connections 1024;
}

http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;

include /etc/nginx/mime.types;
default_type application/octet-stream;

# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /var/repositories; # Diretório dos nossos repositórios
# Load configuration files for the default server block.

location / {
}

## Limitar acesso somente aos pacotes
location ~ /(db|conf) {
deny all;
return 404;
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2 default_server;
# listen [::]:443 ssl http2 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
}

Vamos reinicializar o Nginx e colocar para iniciar no boot:

# systemctl start nginx

# systemctl enable nginx

Efetuando a configuração no cliente (servidores onde será instalado o Zimbra)

Em todos os servidores Zimbra é necessário obter a chave do repositório da Zimbra:

# rpm –import https://files.zimbra.com/downloads/security/public.key

Configuração dos repositórios para a versão 8.8.11 Open Source para Red Hat, CentOS e Oracle Linux, para as versões 6 e 7:

vim /etc/yum.repos.d/zimbra.repo

[zimbra]
name=Zimbra RPM Repository
baseurl=http://seuservidor.dominio.com.br/rpm/87/rhel\$releasever
gpgcheck=1
enabled=1
[zimbra-8811-oss]
name=Zimbra New RPM Repository
baseurl=http://seuservidor.dominio.com.br/rpm/8811/rhel\$releasever
gpgcheck=1
enabled=1

Configuração dos repositórios para a versão 8.8.11 Network Edition para Red Hat, CentOS e Oracle Linux, para as versões 6 e 7:

vim /etc/yum.repos.d/zimbra.repo

[zimbra]
name=Zimbra RPM Repository
baseurl=http://seuservidor.dominio.com.br/rpm/87/rhel\$releasever
gpgcheck=1
enabled=1
[zimbra-8811-oss]
name=Zimbra New RPM Repository
baseurl=http://seuservidor.dominio.com.br/rpm/8811/rhel\$releasever
gpgcheck=1
enabled=1
[zimbra-8811-ne]
name=Zimbra New NE RPM Repository
baseurl=http://seuservidor.dominio.com.br/rpm/8811-ne/rhel\$releasever
gpgcheck=1
enabled=1

Podemos comprovar o funcionamento antes da instalação do Zimbra buscando os pacotes do Zimbra nos repositórios:

# yum repolist

# yum search zimbra

# yum search zimbra-patch

Para a versão Network Edition:

# yum search zimbra-docs

Efetuada a configuração dos repositórios, você pode executar a instalação do Zimbra normalmente, apenas informando que NÃO deseja utilizar os repositórios da Zimbra, na opção abaixo:

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s