3. Como espelhar o FreeBSD

Ok, agora você conhece os requisitos e sabe como oferecer os serviços, mas não sabe como começar. Esta sessão explica como realizar realmente o espelhamento de várias partes do FreeBSD, que ferramentas utilizar e apartir de onde espelhar.

3.1. FTP

A área de FTP representa o maior volume de dados a serem espelhados. Ele inclui os conjuntos de distribuição os quais são requeridos para as instalações via rede, os ramos (branches) do sistema dos quais se tira snapshots a partir da árvore de código fonte, as imagens ISO para gravar CDs de instalação do sistema, um sistema de arquivos vivo, a árvore do ports, os distifiles (código fonte necessários para compilar o ports) e uma quantidade enorme de pacotes. Tudo naturalmente para as várias versões do FreeBSD, e para as várias arquiteturas.

3.1.1. Espelhando com FTP

Você pode utilizar um programa de espelhamento de FTP para obter os arquivos. Existem muitos programas disponíveis, os quais são amplamente utilizados tais como:

O ftp/mirror é muito popular, mas parece ter alguns inconvenientes, ele é escrito em perl(1), e possui alguns problemas reais para espelhar grandes diretórios como o site FreeBSD. Existem rumores de que a versão atual corrigiu isso ao permitir que seja especificado um algoritimo diferente para comparar a estrutura de diretórios.

Em geral o FTP não é bom para tarefas de espelhamento. Ele transfere o arquivo inteiro se ele for alterado, e não cria um único stream de dados o qual o beneficiaria de uma grande janela de congestão TCP.

3.1.2. Espelhando com RSYNC

Uma forma melhor de espelhar uma área FTP é através do uso do rsync. Você pode instalar o port net/rsync e então utilizá-lo para sincronizar com o seu servidor de upstream. O rsync já foi mencionado na Seção 2.4.2. Uma vez que a disponibilização de acesso via rsync não é obrigatória, o seu site preferido de upstream pode não adotá-lo. Você pode ter um pouco de trabalho para encontrar um servidor que permita o acesso via rsync.

Nota: Uma vez que o número de clientes rsync terão um impacto significativo no servidor, muitos administradores impõe limitações no número de acessos simultâneos aos seus servidores. Para um espelhamento, você deve consultar o responsável pelo servidor de upstream que você está utilizando, sobre as regras do servidor, e sobre a possibilidade dele abrir uma excessão para o seu servidor (uma vez que você é um site espelho).

A linha de comando para espelhar o FreeBSD pode ser parecida com essa:

% rsync -vaz --delete ftp4.de.FreeBSD.org::FreeBSD/ /pub/FreeBSD/
          

Consulte a documentação do rsync, a qual está disponível em http://rsync.samba.org/, sobre as várias opções que podem ser utilizadas com o rsync. Se você sincronizar o módulo inteiro (ao contrário de apenas alguns subdiretórios), esteja ciente de que o módulo-diretório (normalmente "FreeBSD") não será criado, assim você não deve omitir o diretório alvo. Você também pode desejar configurar um script de trabalho o qual seria executado como um comando pelo cron(8), para automatizar o processo.

3.1.3. Espelhando com o CVSup

Poucos sites, incluindo o ftp-master.FreeBSD.org, oferecem acesso via CVSup para espelhamento da área de FTP. Você deve instalar um cliente de cvsup, preferencialmente a partir do port net/cvsup (também visto na Seção 2.4.4). Um exemplo de arquivo supfile para fazer o espelhamento a partir do ftp-master.FreeBSD.org se pareceria com isto:

         #
          # FreeBSD archive supfile from master server
          #
          *default host=ftp-master.FreeBSD.org
          *default base=/usr
          *default prefix=/pub
          #*default release=all
          *default delete use-rel-suffix
          *default umask=002

          # If your network link is a T1 or faster, comment out the following line.
          #*default compress

          FreeBSD-archive release=all preserve
          

Parece que o CVSup seria a melhor forma de espelhar o arquivo em termos de eficiência, mas infelizmente ele está disponível em apenas alguns sites.

Nota: Por favor consulte a documentação do CVSup, como por exemplo a cvsup(1) e considere o uso da opção -s uma vez que ela pode reduzir em muito o trabalho a ser realizado.

3.2. Espelhando o repositório CVS

De novo você possui várias possibilidades para realizar esta tarefa, mas o mais recomendado é utilizar o CVSup.

3.2.1. Utilizando o CVSup

O CVSup já foi descrito em algum detalhe na Seção 2.4.4 e na Seção 3.1.3.

Abaixo você encontra um exemplo de supfile para realizar esta tarefa:

         #
          # FreeBSD CVS supfile from master server
          #
          *default host=cvsup-master.FreeBSD.org
          *default base=/usr
          *default prefix=/pub/FreeBSD/development/FreeBSD-CVS
          *default release=cvs
          *default delete use-rel-suffix
          *default umask=002

          # If your network link is a T1 or faster, comment out the following line.
          #*default compress

          cvs-all
          

Você também deve dar uma olhada em /usr/share/examples/cvsup.

Nota: Por favor não esqueça de considerar a dica mencionada na nota acima.

3.2.2. Utilizando outros métodos

Geralmente não se recomenda o uso de outros métodos que não o CVSup. De qualquer forma, vamos descrever rapidamente como fazer. Uma vez que a maioria dos sites oferecem o repositório CVS como parte da área de FTP, sob o caminho /pub/FreeBSD/development/FreeBSD-CVS, os seguintes métodos podem ser utilizados.

  • FTP

  • RSYNC

  • e talvez HTTP

Se você encontrar um site que suporte, você pode utilizar o net/sup. Mas ele é inferior ao CVSup e foram as suas deficiências que levaram o John Polstra a desenvolver o CVSup, então o seu uso é claramente não recomendado.

Importante: Você não deve utilizar o AnonCVS para espelhar o repositório CVS, uma vez que o CVS não permite que você acesse o repositório propriamente dito (arquivos ",v"), mas sim apenas as versões limpas dos módulos.

3.3. Espelhando as páginas WWW

A melhor forma é realizar um "check out" da distribuição www do servidor de CVS. Se você tem um mirror local do repositório CVS, provavelmente será tão simples quanto executar:

% cvs -d /home/ncvs co www

e um cronjob, o qual executa um cvs update -d -P periodicamente, talvez imediatamente depois de cada atualização do seu repositório. Naturalmente, os arquivos necessitam ficar em um diretório disponível para acesso público via WWW. A instalação e configuração de um servidor web não será abordada neste artigo.

Nota: Para que o site web fique disponível, você precisa executar o comando make(1) dentro do diretório principal do www. Este comando irá criar os arquivos *.html para serem visualizados via web. Para que o comando possa ser executado com sucesso, o port textproc/docproj precisa estar instalado.

Se você não possui um repositório local, você pode utilizar o CVSup para manter uma cópia atualizada das páginas www. Um exemplo de supfile para esta tarefa pode ser encontrado em /usr/share/examples/cvsup/www-supfile o qual irá se parecer com isto:

       #
        # WWW module supfile for FreeBSD
        #
        *default host=cvsup3.de.FreeBSD.org
        *default base=/usr
        *default prefix=/usr/local
        *default release=cvs tag=.
        *default delete use-rel-suffix

        # If your network link is a T1 or faster, comment out the following line.
        *default compress

        # This collection retrieves the www/ tree of the FreeBSD repository
        www
        

Não recomendamos o uso do ftp/wget ou de outras ferramentas de espelhamento web.

3.3.1. Espelhando a documentação do FreeBSD

Uma vez que a documentação é fortemente referênciada a partir das páginas web, recomenda-se que você também espelhe a documentação do FreeBSD. Entretanto, isto não é tão trivial quando espelhar as páginas www isoladamente.

Antes de mais nada, você deve obter os fontes da documentação, e de novo o método preferencial é via CVSup. Aqui está um exemplo do supfile correspondente:

        #
         # FreeBSD documentation supfile
         #
         *default host=cvsup3.de.FreeBSD.org
         *default base=/usr
         *default prefix=/usr/share
         *default release=cvs tag=.
         *default delete use-rel-suffix

         # If your network link is a T1 or faster, comment out the following line.
         #*default compress

         # This will retrieve the entire doc branch of the FreeBSD repository.
         # This includes the handbook, FAQ, and translations thereof.
         doc-all
         

Então você terá que instalar diversos ports. Mas você está com sorte, pois existe um meta port: textproc/docproj que faz o trabalho para você. Você precisa configurar algumas variáveis de ambiente, como por exemplo SGML_CATALOG_FILES. Também de uma olhada no seu /etc/make.conf (faça uma cópia do /etc/defaults/make.conf se você não possuir um), e verifique a variável DOC_LANG . Agora você já está provavelmente pronto para executar o comando make no seu diretório dos fontes da documentação (por padrão /usr/share/doc) para construí-la. De novo, você precisa torná-lo acessível através do seu servidor web e certifique-se de que os links apontam para o local correto.

Importante: A construção da documentação, assim como as diversas tarefas associadas ao processo, estão documentadas no fdp-primer. Por favor leia este documento, especialmente se você está tendo problemas para contruir a documentação.

3.4. Com que frequência atualizar o site espelho?

Cada site espelho deve ser atualizado regularmente. Você certamente irá precisar de alguns scripts de trabalho, os quais serão executados pelo cron(8), automatizando o processo de atualização. Uma vez que cada administrador implementa estes scripts da sua própria maneira, nós não podemos dar instruções específicas sobre como proceder. Mas de uma forma geral o processo de implementação poderia ser resumido como:

  1. Coloque os comandos para executar a sua aplicação de espelhamento em um script. Recomenda-se utilizar um script simples em /bin/sh.

  2. Adicione alguns redirecionamentos para arquivo das mensagens dos programas, de forma que possa usar o mesmo com a finalidade de diagnóstico de problemas.

  3. Teste se o seu script funciona, verifique o arquivo de log.

  4. Utilize o crontab(1) para adicionar o script ao crontab(5) do usuário apropriado. O qual deve ser um usuário diferente do usuário sob o qual o servidor de FTP é executado, desta forma não será permitido o acesso via FTP anônimo a arquivos presentes na área de FTP, os quais não possuam permissões que possibilitem a leitura por todos os demais usuários. Isto é utilizado para a fase de estágio das distribuições -- garantindo que todos os site espelhos oficiais possuam todos os arquivos necessários de uma distribuição, no dia em que a mesma é liberada.

Aqui estão alguns dos agendamentos recomendados para a atualização de um site espelho:

Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.