            Construa seu proprio servidor de atualizac,ao do FreeBSD

  Jason Helfman

   Jason Helfman <jgh@FreeBSD.org>

   Revisao: caeedde588

   Copyright (c) 2009-2011, 2013 Jason Helfman

   FreeBSD is a registered trademark of the FreeBSD Foundation.

   Many of the designations used by manufacturers and sellers to distinguish
   their products are claimed as trademarks. Where those designations appear
   in this document, and the FreeBSD Project was aware of the trademark
   claim, the designations have been followed by the "(TM)" or the "(R)"
   symbol.

   Intel, Celeron, Centrino, Core, EtherExpress, i386, i486, Itanium,
   Pentium, and Xeon are trademarks or registered trademarks of Intel
   Corporation or its subsidiaries in the United States and other countries.

   AMD, AMD Athlon, AMD Opteron, AMD Phenom, AMD Sempron, AMD Turion, Athlon,
   Elan, Opteron, and PCnet are trademarks of Advanced Micro Devices, Inc.

   2020-08-05 21:58:56 +0000 por Danilo G. Baio.
   Resumo

   Este artigo descreve a construc,ao de um servidor de atualizac,oes do
   FreeBSD interno. O freebsd-update-server foi escrito por Colin Percival
   <cperciva@FreeBSD.org>, Oficial de Seguranc,a Emerito do FreeBSD. Para
   usuarios que acham conveniente atualizar seus sistemas em um servidor de
   atualizac,ao oficial, construir seu proprio FreeBSD Update Server pode
   ajudar a estender sua funcionalidade suportando versoes do FreeBSD
   ajustadas manualmente ou fornecendo um espelho local que permitira
   atualizac,oes mais rapidas para varias maquinas.

   [ Documento HTML em partes / Documento HTML completo ]

     ----------------------------------------------------------------------

   Indice

   1. Agradecimentos

   2. Introduc,ao

   3. Pre-requisitos

   4. Configurac,ao: Instalac,ao & Configurac,ao

   5. Compilando o Codigo de Atualizac,ao

   6. Compilando um Patch

   7. Dicas

1. Agradecimentos

   Este artigo foi publicado posteriormente na BSD Magazine.

2. Introduc,ao

   Usuarios experientes ou administradores sao muitas vezes responsaveis por
   varias maquinas ou ambientes. Eles entendem as dificeis demandas e
   desafios da manutenc,ao de tal infraestrutura. A execuc,ao de um Servidor
   de Atualizac,ao do FreeBSD facilita a implantac,ao de patches de
   seguranc,a e software em maquinas de teste selecionadas antes de
   implementa-las nas maquinas em produc,ao. Isso tambem significa que varios
   sistemas podem ser atualizados a partir da rede local, em vez de uma
   conexao de Internet potencialmente mais lenta. Este artigo descreve os
   passos envolvidos na criac,ao de um Servidor de Atualizac,ao do FreeBSD
   interno.

3. Pre-requisitos

   Para construir um Servidor de Atualizac,ao do FreeBSD interno, alguns
   requisitos devem ser atendidos.

     * Um sistema FreeBSD em execuc,ao.

  Nota:

       No minimo, as atualizac,oes requerem a criac,ao de uma versao do
       FreeBSD maior ou igual a versao do release alvo para a distribuic,ao.

     * Uma conta de usuario com pelo menos 4 GB de espac,o disponivel. Isso
       permitira a criac,ao de atualizac,oes para 7.1 e 7.2, mas os
       requisitos de espac,o exatos podem mudar de versao para versao.

     * Uma conta com acesso ao ssh(1) em uma maquina remota para carregar
       atualizac,oes distribuidas.

     * Um servidor web, como o Apache, com mais da metade do espac,o
       necessario para a construc,ao. Por exemplo, as compilac,oes de teste
       para 7.1 e 7.2 consomem uma quantidade total de 4 GB e o espac,o do
       servidor da web necessario para distribuir essas atualizac,oes e de
       2.6 GB.

     * Conhecimento basico de shell script com o Bourne shell, sh(1).

4. Configurac,ao: Instalac,ao & Configurac,ao

   Fac,a o download do software freebsd-update-server instalando
   devel/subversion e security/ca_root_nss, e execute:

 % svn co https://svn.freebsd.org/base/user/cperciva/freebsd-update-build freebsd-update-server

   Atualize o scripts/build.conf apropriadamente. Ele e criado durante todas
   as operac,oes de construc,ao.

   Aqui esta o build.conf padrao, que deve ser modificado para se adequar ao
   seu ambiente.

 # Main configuration file for FreeBSD Update builds.  The
 # release-specific configuration data is lower down in
 # the scripts tree.

 # Location from which to fetch releases
 export FTP=ftp://ftp2.freebsd.org/pub/FreeBSD/releases1

 # Host platform
 export HOSTPLATFORM=`uname -m`

 # Host name to use inside jails
 export BUILDHOSTNAME=${HOSTPLATFORM}-builder.daemonology.net2

 # Location of SSH key
 export SSHKEY=/root/.ssh/id_dsa3

 # SSH account into which files are uploaded
 MASTERACCT=builder@wadham.daemonology.net4

 # Directory into which files are uploaded
 MASTERDIR=update-master.freebsd.org5

   Parametros para considerac,ao seriam:

   1 Este e o local onde as imagens ISO sao baixadas (pela sub-rotina         
     fetchiso() do scripts/build.subr). A localizac,ao configurada nao esta   
     limitada a URIs de FTP. Qualquer esquema de URI suportado pelo           
     utilitario padrao fetch() deve funcionar bem.                            
                                                                              
     Personalizac,oes para o codigo de fetchiso() podem ser instaladas        
     copiando o script padrao build.subr para a area especifica do release e  
     da arquitetura em scripts/RELEASE/ARCHITECTURE/build.subr e aplicando    
     alterac,oes locais.                                                      
   2 O nome do host em construc,ao. Esta informac,ao sera exibida em sistemas 
     atualizados ao executar:                                                 
                                                                              
     % uname -v                                                               
   3 A chave SSH para fazer upload de arquivos para o servidor de             
     atualizac,oes. Um par de chaves pode ser criado digitando ssh-keygen -t  
     dsa. Este parametro e opcional; a autenticac,ao de senha padrao sera     
     usada como um metodo de autenticac,ao secundario quando a SSHKEY nao     
     estiver definida.                                                        
                                                                              
     A pagina de manual do ssh-keygen(1) contem informac,oes mais detalhadas  
     sobre o SSH e as etapas apropriadas para criar e usar um.                
   4 Conta para fazer upload de arquivos para o servidor de atualizac,ao.     
   5 Diretorio no servidor de atualizac,ao para o qual os arquivos sao        
     enviados.                                                                

   O arquivo padrao build.conf fornecido com o codigo-fonte do
   freebsd-update-server e adequado para a criac,ao de versoes i386 do
   FreeBSD. Como um exemplo de criac,ao de um servidor de atualizac,ao para
   outras arquiteturas, as etapas a seguir descrevem as alterac,oes
   necessarias na configurac,ao para o amd64:

    1. Crie um ambiente de compilac,ao para o amd64:

 % mkdir -p /usr/local/freebsd-update-server/scripts/7.2-RELEASE/amd64

    2. Instale um build.conf no diretorio de criac,ao recem-criado. As
       opc,oes de configurac,ao de compilac,ao para o FreeBSD 7.2-RELEASE com
       arquitetura amd64 devem ser semelhantes a:

 # SHA256 hash of RELEASE disc1.iso image.
 export RELH=1ea1f6f652d7c5f5eab7ef9f8edbed50cb664b08ed761850f95f48e86cc71ef51

 # Components of the world, source, and kernels
 export WORLDPARTS="base catpages dict doc games info manpages proflibs lib32"
 export SOURCEPARTS="base bin contrib crypto etc games gnu include krb5  \
                 lib libexec release rescue sbin secure share sys tools  \
                 ubin usbin cddl"
 export KERNELPARTS="generic"

 # EOL date
 export EOL=12752892002

       1 A chave sha256(1) usada para fazer o hash para a release desejada e  
         publicada no respectivo anuncio de release.                          
       2 Para gerar o numero "End of Life" para o build.conf, consulte o "EOL 
         estimado" publicado no Site de Seguranc,a do FreeBSD. O valor de EOL 
         pode ser derivado da data listada no site, usando o utilitario       
         date(1), por exemplo:                                                
                                                                              
         % date -j -f '%Y%m%d-%H%M%S' '20090401-000000' '+%s'                 

5. Compilando o Codigo de Atualizac,ao

   O primeiro passo e executar o scripts/make.sh. Isso criara alguns
   binarios, criara diretorios e ira gerar uma chave de assinatura RSA usada
   para aprovar as compilac,oes. Nesta etapa, uma senha tera que ser
   fornecida para a criac,ao final da chave de assinatura.

 # sh scripts/make.sh
 cc -O2 -fno-strict-aliasing -pipe   findstamps.c  -o findstamps
 findstamps.c: In function 'usage':
 findstamps.c:45: warning: incompatible implicit declaration of built-in function 'exit'
 cc -O2 -fno-strict-aliasing -pipe   unstamp.c  -o unstamp
 install findstamps ../bin
 install unstamp ../bin
 rm -f findstamps unstamp
 Generating RSA private key, 4096 bit long modulus
 ................................................................................++
 ...................++
 e is 65537 (0x10001)

 Public key fingerprint:
 27ef53e48dc869eea6c3136091cc6ab8589f967559824779e855d58a2294de9e

 Encrypting signing key for root
 enter aes-256-cbc encryption password:
 Verifying - enter aes-256-cbc encryption password:

  Nota:

   Mantenha um backup do fingerprint gerado. Este valor e necessario para o
   arquivo /etc/freebsd-update.conf para as atualizac,oes binarias.

   Neste ponto, estamos prontos para montar uma construc,ao.

 # cd /usr/local/freebsd-update-server
 # sh scripts/init.sh amd64 7.2-RELEASE

   O que se segue e uma amostra de uma execuc,ao da compilac,aoinicial.

 # sh scripts/init.sh amd64 7.2-RELEASE
 Mon Aug 24 16:04:36 PDT 2009 Starting fetch for FreeBSD/amd64 7.2-RELEASE
 /usr/local/freebsd-update-server/work/7.2-RELE100% of  588 MB  359 kBps 00m00s
 Mon Aug 24 16:32:38 PDT 2009 Verifying disc1 hash for FreeBSD/amd64 7.2-RELEASE
 Mon Aug 24 16:32:44 PDT 2009 Extracting components for FreeBSD/amd64 7.2-RELEASE
 Mon Aug 24 16:34:05 PDT 2009 Constructing world+src image for FreeBSD/amd64 7.2-RELEASE
 Mon Aug 24 16:35:57 PDT 2009 Extracting world+src for FreeBSD/amd64 7.2-RELEASE
 Mon Aug 24 23:36:24 UTC 2009 Building world for FreeBSD/amd64 7.2-RELEASE
 Tue Aug 25 00:31:29 UTC 2009 Distributing world for FreeBSD/amd64 7.2-RELEASE
 Tue Aug 25 00:32:36 UTC 2009 Building and distributing kernels for FreeBSD/amd64 7.2-RELEASE
 Tue Aug 25 00:44:44 UTC 2009 Constructing world components for FreeBSD/amd64 7.2-RELEASE
 Tue Aug 25 00:44:56 UTC 2009 Distributing source for FreeBSD/amd64 7.2-RELEASE
 Mon Aug 24 17:46:18 PDT 2009 Moving components into staging area for FreeBSD/amd64 7.2-RELEASE
 Mon Aug 24 17:46:33 PDT 2009 Identifying extra documentation for FreeBSD/amd64 7.2-RELEASE
 Mon Aug 24 17:47:13 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.2-RELEASE
 Mon Aug 24 17:47:18 PDT 2009 Indexing release for FreeBSD/amd64 7.2-RELEASE
 Mon Aug 24 17:50:44 PDT 2009 Indexing world0 for FreeBSD/amd64 7.2-RELEASE

 Files built but not released:
 Files released but not built:
 Files which differ by more than contents:
 Files which differ between release and build:
 kernel|generic|/GENERIC/hptrr.ko
 kernel|generic|/GENERIC/kernel
 src|sys|/sys/conf/newvers.sh
 world|base|/boot/loader
 world|base|/boot/pxeboot
 world|base|/etc/mail/freebsd.cf
 world|base|/etc/mail/freebsd.submit.cf
 world|base|/etc/mail/sendmail.cf
 world|base|/etc/mail/submit.cf
 world|base|/lib/libcrypto.so.5
 world|base|/usr/bin/ntpq
 world|base|/usr/lib/libalias.a
 world|base|/usr/lib/libalias_cuseeme.a
 world|base|/usr/lib/libalias_dummy.a
 world|base|/usr/lib/libalias_ftp.a
 ...

   Entao a compilac,ao do world e executada novamente, com patches para
   world. Uma explicac,ao mais detalhada pode ser encontrada em
   scripts/build.subr.

  Atenc,ao:

   Durante este segundo ciclo de compilac,ao, o daemon do protocolo de tempo
   de rede, ntpd(8), e desativado. Segundo o Colin Percival
   <cperciva@FreeBSD.org>, Oficial de seguranc,a emerito do FreeBSD, "a
   compilac,ao do codigo do freebsd-update-server precisa identificar os
   timestamps que sao armazenados nos arquivos para que possam ser ignorados
   ao comparar builds para determinar quais arquivos precisam ser
   atualizados. Essa busca de timestamp trabalha com duas construc,oes com
   400 dias de diferenc,a e compara os resultados."

 Mon Aug 24 17:54:07 PDT 2009 Extracting world+src for FreeBSD/amd64 7.2-RELEASE
 Wed Sep 29 00:54:34 UTC 2010 Building world for FreeBSD/amd64 7.2-RELEASE
 Wed Sep 29 01:49:42 UTC 2010 Distributing world for FreeBSD/amd64 7.2-RELEASE
 Wed Sep 29 01:50:50 UTC 2010 Building and distributing kernels for FreeBSD/amd64 7.2-RELEASE
 Wed Sep 29 02:02:56 UTC 2010 Constructing world components for FreeBSD/amd64 7.2-RELEASE
 Wed Sep 29 02:03:08 UTC 2010 Distributing source for FreeBSD/amd64 7.2-RELEASE
 Tue Sep 28 19:04:31 PDT 2010 Moving components into staging area for FreeBSD/amd64 7.2-RELEASE
 Mon Aug 24 19:04:46 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.2-RELEASE
 Mon Aug 24 19:04:51 PDT 2009 Indexing world1 for FreeBSD/amd64 7.2-RELEASE
 Mon Aug 24 19:08:04 PDT 2009 Locating build stamps for FreeBSD/amd64 7.2-RELEASE
 Mon Aug 24 19:10:19 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.2-RELEASE
 Mon Aug 24 19:10:19 PDT 2009 Preparing to copy files into staging area for FreeBSD/amd64 7.2-RELEASE
 Mon Aug 24 19:10:20 PDT 2009 Copying data files into staging area for FreeBSD/amd64 7.2-RELEASE
 Mon Aug 24 12:16:57 PDT 2009 Copying metadata files into staging area for FreeBSD/amd64 7.2-RELEASE
 Mon Aug 24 12:16:59 PDT 2009 Constructing metadata index and tag for FreeBSD/amd64 7.2-RELEASE

 Files found which include build stamps:
 kernel|generic|/GENERIC/hptrr.ko
 kernel|generic|/GENERIC/kernel
 world|base|/boot/loader
 world|base|/boot/pxeboot
 world|base|/etc/mail/freebsd.cf
 world|base|/etc/mail/freebsd.submit.cf
 world|base|/etc/mail/sendmail.cf
 world|base|/etc/mail/submit.cf
 world|base|/lib/libcrypto.so.5
 world|base|/usr/bin/ntpq
 world|base|/usr/include/osreldate.h
 world|base|/usr/lib/libalias.a
 world|base|/usr/lib/libalias_cuseeme.a
 world|base|/usr/lib/libalias_dummy.a
 world|base|/usr/lib/libalias_ftp.a
 ...

   Finalmente, a construc,ao e concluida.

 Values of build stamps, excluding library archive headers:
 v1.2 (Aug 25 2009 00:40:36)
 v1.2 (Aug 25 2009 00:38:22)
 @(#)FreeBSD 7.2-RELEASE #0: Tue Aug 25 00:38:29 UTC 2009
 FreeBSD 7.2-RELEASE #0: Tue Aug 25 00:38:29 UTC 2009
     root@server.myhost.com:/usr/obj/usr/src/sys/GENERIC
 7.2-RELEASE
 Mon Aug 24 23:55:25 UTC 2009
 Mon Aug 24 23:55:25 UTC 2009
 ##### built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009
 ##### built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009
 ##### built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009
 ##### built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009
 Mon Aug 24 23:46:47 UTC 2009
 ntpq 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)
  * Copyright (c) 1992-2009 The FreeBSD Project.
 Mon Aug 24 23:46:47 UTC 2009
 Mon Aug 24 23:55:40 UTC 2009
 Aug 25 2009
 ntpd 4.2.4p5-a Mon Aug 24 23:55:52 UTC 2009 (1)
 ntpdate 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)
 ntpdc 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)
 Tue Aug 25 00:21:21 UTC 2009
 Tue Aug 25 00:21:21 UTC 2009
 Tue Aug 25 00:21:21 UTC 2009
 Mon Aug 24 23:46:47 UTC 2009

 FreeBSD/amd64 7.2-RELEASE initialization build complete.  Please
 review the list of build stamps printed above to confirm that
 they look sensible, then run
 # sh -e approve.sh amd64 7.2-RELEASE
 to sign the release.

   Aprove a compilac,ao se tudo estiver correto. Mais informac,oes sobre como
   determinar isso podem ser encontradas no arquivo fonte distribuido chamado
   USAGE. Execute scripts/approve.sh, conforme indicado. Isso assinara a
   release e movera os componentes para uma area de preparac,ao adequada para
   o upload.

 # cd /usr/local/freebsd-update-server
 # sh scripts/mountkey.sh

 # sh -e scripts/approve.sh amd64 7.2-RELEASE
 Wed Aug 26 12:50:06 PDT 2009 Signing build for FreeBSD/amd64 7.2-RELEASE
 Wed Aug 26 12:50:06 PDT 2009 Copying files to patch source directories for FreeBSD/amd64 7.2-RELEASE
 Wed Aug 26 12:50:06 PDT 2009 Copying files to upload staging area for FreeBSD/amd64 7.2-RELEASE
 Wed Aug 26 12:50:07 PDT 2009 Updating databases for FreeBSD/amd64 7.2-RELEASE
 Wed Aug 26 12:50:07 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.2-RELEASE

   Apos o processo de aprovac,ao ser concluido, o procedimento de upload pode
   ser iniciado.

 # cd /usr/local/freebsd-update-server
 # sh scripts/upload.sh amd64 7.2-RELEASE

  Nota:

   No caso de o codigo de atualizac,ao precisar ser reenviado, isso pode ser
   feito mudando para o diretorio de distribuic,oes publicas para o release
   alvo e atualizando os atributos do arquivo carregado.

 # cd /usr/local/freebsd-update-server/pub/7.2-RELEASE/amd64
 # touch -t 200801010101.01 uploaded

   Os arquivos enviados precisarao estar no diretorio de documentos raiz do
   servidor web para que as atualizac,oes sejam distribuidas. A configurac,ao
   exata ira variar dependendo do servidor web usado. Para o servidor web
   Apache, consulte a sessao Configurac,ao de servidores Apache no Handbook.

   Atualize o KeyPrint e ServerName do cliente no arquivo
   /etc/freebsd-update.conf, e execute as atualizac,oes conforme instruido na
   Sec,ao de Atualizac,ao do FreeBSD no Handbook.

  Importante:

   Para que o Servidor de Atualizac,ao do FreeBSD funcione corretamente,
   atualizac,oes para ambas releases atual e a release que se deseja
   atualizar precisam ser compilados. Isso e necessario para determinar as
   diferenc,as de arquivos entre as releases. Por exemplo, ao atualizar um
   sistema FreeBSD de 7.1-RELEASE para 7.2-RELEASE, as atualizac,oes
   precisarao ser construidas e carregadas em seu servidor de distribuic,ao
   para ambas as versoes.

   Para referencia, toda a execuc,ao do init.sh e anexada.

6. Compilando um Patch

   Toda vez que e anunciado um aviso de seguranc,a ou uma notificac,ao de
   seguranc,a, um patch de atualizac,ao pode ser construido.

   Para este exemplo, o 7.1-RELEASE sera usado.

   Algumas suposic,oes sao feitas para uma versao diferente:

     * Configure a estrutura de diretorios correta para a compilac,ao
       inicial.

     * Execute uma compilac,ao inicial para o 7.1-RELEASE.

   Crie o diretorio de correc,ao do respectivo release no diretorio
   /usr/local/freebsd-update-server/patches/.

 % mkdir -p /usr/local/freebsd-update-server/patches/7.1-RELEASE/
 % cd /usr/local/freebsd-update-server/patches/7.1-RELEASE

   Como exemplo, pegue o patch para named(8). Leia o comunicado, e pegue o
   arquivo necessario de Avisos de Seguranc,a do FreeBSD . Mais informac,oes
   sobre a interpretac,ao do comunicado podem ser encontradas no Handbook do
   FreeBSD.

   No resumo de seguranc,a, este comunicado e chamado SA-09:12.bind. Depois
   de baixar o arquivo, e necessario renomear o arquivo para um nivel de
   correc,ao apropriado. Sugere-se manter isso consistente com os niveis
   oficiais de correc,ao do FreeBSD, mas seu nome pode ser escolhido
   livremente. Para esta compilac,ao, vamos seguir a pratica atualmente
   estabelecida do FreeBSD e chamar isso de p7. Renomeie o arquivo:

 % cd /usr/local/freebsd-update-server/patches/7.1-RELEASE/; mv bind.patch 7-SA-09:12.bind

  Nota:

   Ao executar uma compilac,ao em nivel de patch, supoe-se que os patches
   anteriores estejam no lugar. Quando uma compilac,ao de patch e executada,
   ela executara todas os patches contidos no diretorio de patch.

   Pode haver patches personalizados adicionados a qualquer compilac,ao. Use
   o numero zero ou qualquer outro numero.

  Atenc,ao:

   Cabe ao administrador do Servidor de Atualizac,ao do FreeBSD tomar as
   medidas apropriadas para verificar a autenticidade de cada patch.

   Neste ponto, um diff esta pronto para ser construido. O software verifica
   primeiro para ver se um scripts/init.sh foi executado na respectiva versao
   antes de executar a construc,ao do diff.

 # cd /usr/local/freebsd-update-server
 # sh scripts/diff.sh amd64 7.1-RELEASE 7

   O que se segue e um exemplo de uma execuc,ao de uma compilac,ao
   diferencial.

 # sh -e scripts/diff.sh amd64 7.1-RELEASE 7
 Wed Aug 26 10:09:59 PDT 2009 Extracting world+src for FreeBSD/amd64 7.1-RELEASE-p7
 Wed Aug 26 17:10:25 UTC 2009 Building world for FreeBSD/amd64 7.1-RELEASE-p7
 Wed Aug 26 18:05:11 UTC 2009 Distributing world for FreeBSD/amd64 7.1-RELEASE-p7
 Wed Aug 26 18:06:16 UTC 2009 Building and distributing kernels for FreeBSD/amd64 7.1-RELEASE-p7
 Wed Aug 26 18:17:50 UTC 2009 Constructing world components for FreeBSD/amd64 7.1-RELEASE-p7
 Wed Aug 26 18:18:02 UTC 2009 Distributing source for FreeBSD/amd64 7.1-RELEASE-p7
 Wed Aug 26 11:19:23 PDT 2009 Moving components into staging area for FreeBSD/amd64 7.1-RELEASE-p7
 Wed Aug 26 11:19:37 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.1-RELEASE-p7
 Wed Aug 26 11:19:42 PDT 2009 Indexing world0 for FreeBSD/amd64 7.1-RELEASE-p7
 Wed Aug 26 11:23:02 PDT 2009 Extracting world+src for FreeBSD/amd64 7.1-RELEASE-p7
 Thu Sep 30 18:23:29 UTC 2010 Building world for FreeBSD/amd64 7.1-RELEASE-p7
 Thu Sep 30 19:18:15 UTC 2010 Distributing world for FreeBSD/amd64 7.1-RELEASE-p7
 Thu Sep 30 19:19:18 UTC 2010 Building and distributing kernels for FreeBSD/amd64 7.1-RELEASE-p7
 Thu Sep 30 19:30:52 UTC 2010 Constructing world components for FreeBSD/amd64 7.1-RELEASE-p7
 Thu Sep 30 19:31:03 UTC 2010 Distributing source for FreeBSD/amd64 7.1-RELEASE-p7
 Thu Sep 30 12:32:25 PDT 2010 Moving components into staging area for FreeBSD/amd64 7.1-RELEASE-p7
 Wed Aug 26 12:32:39 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.1-RELEASE-p7
 Wed Aug 26 12:32:43 PDT 2009 Indexing world1 for FreeBSD/amd64 7.1-RELEASE-p7
 Wed Aug 26 12:35:54 PDT 2009 Locating build stamps for FreeBSD/amd64 7.1-RELEASE-p7
 Wed Aug 26 12:36:58 PDT 2009 Reverting changes due to build stamps for FreeBSD/amd64 7.1-RELEASE-p7
 Wed Aug 26 12:37:14 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.1-RELEASE-p7
 Wed Aug 26 12:37:14 PDT 2009 Preparing to copy files into staging area for FreeBSD/amd64 7.1-RELEASE-p7
 Wed Aug 26 12:37:15 PDT 2009 Copying data files into staging area for FreeBSD/amd64 7.1-RELEASE-p7
 Wed Aug 26 12:43:23 PDT 2009 Copying metadata files into staging area for FreeBSD/amd64 7.1-RELEASE-p7
 Wed Aug 26 12:43:25 PDT 2009 Constructing metadata index and tag for FreeBSD/amd64 7.1-RELEASE-p7
 ...
 Files found which include build stamps:
 kernel|generic|/GENERIC/hptrr.ko
 kernel|generic|/GENERIC/kernel
 world|base|/boot/loader
 world|base|/boot/pxeboot
 world|base|/etc/mail/freebsd.cf
 world|base|/etc/mail/freebsd.submit.cf
 world|base|/etc/mail/sendmail.cf
 world|base|/etc/mail/submit.cf
 world|base|/lib/libcrypto.so.5
 world|base|/usr/bin/ntpq
 world|base|/usr/include/osreldate.h
 world|base|/usr/lib/libalias.a
 world|base|/usr/lib/libalias_cuseeme.a
 world|base|/usr/lib/libalias_dummy.a
 world|base|/usr/lib/libalias_ftp.a
 ...
 Values of build stamps, excluding library archive headers:
 v1.2 (Aug 26 2009 18:13:46)
 v1.2 (Aug 26 2009 18:11:44)
 @(#)FreeBSD 7.1-RELEASE-p7 #0: Wed Aug 26 18:11:50 UTC 2009
 FreeBSD 7.1-RELEASE-p7 #0: Wed Aug 26 18:11:50 UTC 2009
     root@server.myhost.com:/usr/obj/usr/src/sys/GENERIC
 7.1-RELEASE-p7
 Wed Aug 26 17:29:15 UTC 2009
 Wed Aug 26 17:29:15 UTC 2009
 ##### built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009
 ##### built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009
 ##### built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009
 ##### built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009
 Wed Aug 26 17:20:39 UTC 2009
 ntpq 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)
  * Copyright (c) 1992-2009 The FreeBSD Project.
 Wed Aug 26 17:20:39 UTC 2009
 Wed Aug 26 17:29:30 UTC 2009
 Aug 26 2009
 ntpd 4.2.4p5-a Wed Aug 26 17:29:41 UTC 2009 (1)
 ntpdate 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)
 ntpdc 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)
 Wed Aug 26 17:55:02 UTC 2009
 Wed Aug 26 17:55:02 UTC 2009
 Wed Aug 26 17:55:02 UTC 2009
 Wed Aug 26 17:20:39 UTC 2009
 ...

   As atualizac,oes sao impressas e a aprovac,ao e solicitada.

 New updates:
 kernel|generic|/GENERIC/kernel.symbols|f|0|0|0555|0|7c8dc176763f96ced0a57fc04e7c1b8d793f27e006dd13e0b499e1474ac47e10|
 kernel|generic|/GENERIC/kernel|f|0|0|0555|0|33197e8cf15bbbac263d17f39c153c9d489348c2c534f7ca1120a1183dec67b1|
 kernel|generic|/|d|0|0|0755|0||
 src|base|/|d|0|0|0755|0||
 src|bin|/|d|0|0|0755|0||
 src|cddl|/|d|0|0|0755|0||
 src|contrib|/contrib/bind9/bin/named/update.c|f|0|10000|0644|0|4d434abf0983df9bc47435670d307fa882ef4b348ed8ca90928d250f42ea0757|
 src|contrib|/contrib/bind9/lib/dns/openssldsa_link.c|f|0|10000|0644|0|c6805c39f3da2a06dd3f163f26c314a4692d4cd9a2d929c0acc88d736324f550|
 src|contrib|/contrib/bind9/lib/dns/opensslrsa_link.c|f|0|10000|0644|0|fa0f7417ee9da42cc8d0fd96ad24e7a34125e05b5ae075bd6e3238f1c022a712|
 ...
 FreeBSD/amd64 7.1-RELEASE update build complete.  Please review
 the list of build stamps printed above and the list of updated
 files to confirm that they look sensible, then run
 # sh -e approve.sh amd64 7.1-RELEASE
 to sign the build.

   Siga o mesmo processo descrito anteriormente para aprovar uma compilac,ao:

 # sh -e scripts/approve.sh amd64 7.1-RELEASE
 Wed Aug 26 12:50:06 PDT 2009 Signing build for FreeBSD/amd64 7.1-RELEASE
 Wed Aug 26 12:50:06 PDT 2009 Copying files to patch source directories for FreeBSD/amd64 7.1-RELEASE
 Wed Aug 26 12:50:06 PDT 2009 Copying files to upload staging area for FreeBSD/amd64 7.1-RELEASE
 Wed Aug 26 12:50:07 PDT 2009 Updating databases for FreeBSD/amd64 7.1-RELEASE
 Wed Aug 26 12:50:07 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.1-RELEASE

 The FreeBSD/amd64 7.1-RELEASE update build has been signed and is
 ready to be uploaded.  Remember to run
 # sh -e umountkey.sh
 to unmount the decrypted key once you have finished signing all
 the new builds.

   Depois de aprovar a compilac,ao, fac,a o upload do software:

 # cd /usr/local/freebsd-update-server
 # sh scripts/upload.sh amd64 7.1-RELEASE

   Para referencia, toda a execuc,ao do diff.sh e anexada.

7. Dicas

     * Se uma versao personalizada for criada usando o procedimento make
       release nativo, o freebsd-update-server funcionara a partir do seu
       release. Como exemplo, uma versao sem ports ou documentac,ao pode ser
       construida limpando funcionalidades de limpeza pertinentes `as
       sub-rotinas de documentac,ao findextradocs(), addextradocs() e
       alterando o local de download em fetchiso(), respectivamente, em
       scripts/build.subr. Como ultimo passo, altere o hash sha256(1) no
       arquivo build.conf sob sua respectiva versao e arquitetura e voce
       estara pronto para criar sua versao personalizada.

 # Compare ${WORKDIR}/release and ${WORKDIR}/$1, identify which parts
 # of the world|doc subcomponent are missing from the latter, and
 # build a tarball out of them.
 findextradocs () {
 }

 # Add extra docs to ${WORKDIR}/$1
 addextradocs () {
 }

     * Adicionando flags -j NUMERO para os alvos buildworld e obj no script
       scripts/build.subr pode acelerar o processamento, dependendo do
       hardware usado, no entanto, nao e necessario. O uso dessas flags em
       outros alvos nao e recomendado, pois pode tornar a construc,ao nao
       confiavel.

               # Build the world
                    log "Building world"
                    cd /usr/src &&
                    make -j 2 ${COMPATFLAGS} buildworld 2>&1

                 # Distribute the world
                    log "Distributing world"
                    cd /usr/src/release &&
                    make -j 2 obj &&
                    make ${COMPATFLAGS} release.1 release.2 2>&1

     * Crie um registro DNS apropriado para o servidor de atualizac,oes e
       coloque outros por tras dele com variaveis de pesos diferentes. O uso
       desse recurso fornecera espelhos de atualizac,ao, no entanto, essa
       dica nao e necessaria, a menos que voce deseje fornecer um servic,o
       redundante.

 _http._tcp.update.myserver.com.         IN SRV   0 2 80   host1.myserver.com.
                                         IN SRV   0 1 80   host2.myserver.com.
                                         IN SRV   0 0 80   host3.myserver.com.
