Construa Seu Próprio Servidor de Atualização do FreeBSD
Anterior |  | Próxima

# 5 Preparando a atualização

O primeiro passo é executar o `scripts/make.sh`. Isto irá compilar alguns binários, criar diretórios, e gerar uma chave de assinatura RSA usada para aprovar as compilações. Neste passo, uma senha deverá ser fornecida para terminar a criação 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: Anote a impressão digital (fingerprint) da chave gerada. Ela é necessária no `/etc/freebsd-update.conf` para as atualizações de binários.

Neste ponto, nós estamos prontos para a etapa de compilação.

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

A seguir está um exemplo de uma execução inicial.

    # 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
    ...

Em seguida, a compilação da base do sistema será feita novamente, com os patches. Uma explicação mais detalhada pode ser encontrada em `scripts/build.subr`.

> Atenção: Durante a segunda compilação, o serviço de network time protocol, ntpd(8) será desligado. De acordo com Colin Percival `<cperciva@FreeBSD.org>`, Chefe de Segurança emérito do FreeBSD, "o freebsd-update-server compila códigos necessários para identificar os `timestamps`, os quais são armazenadas em arquivos, de modo que estes últimos podem ser ignorados quando estivermos comparando compilações diferentes para determinar quais arquivos precisam ser atualizados. Esta procura por `timestamp` funciona realizando duas compilações separadas por 400 dias e comparando 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 compilação termina.

    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.

Se tudo estiver correto, aprove a compilação. Maiores informações sobre como determinar se o processo finalizou com sucesso podem ser encontradas no arquivo chamado `USAGE`, distribuído com o código fonte. Execute o `scripts/approve.sh`. Isto irá assinar a versão, e mover os seus componentes para uma área de preparo adequada para a transferência para o servidor de distribuição.

    # 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

Depois que o processo de aprovação tiver sido finalizado, o processo de transferência pode ser iniciado.

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

> Nota: No caso do código de atualização precisar ser transferido novamente para o servidor de distribuição, isto poderá ser feito entrando-se no diretório público de distribuição da versão desejada e atualizando os atributos do arquivo uploaded.

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

Os arquivos transferidos precisam ficar na raiz do servidor web para que as atualizações sejam distribuídas. A exata configuração dependerá do servidor web utilizado. Para o servidor web Apache, por favor, consulte a seção Configuração do servidor Apache do Handbook.

Atualize o `KeyPrint` e o `ServerName` no arquivo `/etc/freebsd-update.conf`, e efetue as atualizações de acordo com os procedimentos descritos na seção Atualização do FreeBSD do Handbook.

> Importante: Para o Servidor de Atualização do FreeBSD funcionar corretamente, é preciso que estejam compiladas a versão atual e a versão alvo para a qual você deseja se atualizar. Isto é necessário para que o sistema determine quais são os arquivos que diferem entre as versões. Por exemplo, para atualizar o FreeBSD da versão 7.1-RELEASE para a versão 7.2-RELEASE, será necessário que você compile e transfira os arquivos de ambas as versões para o seu servidor de atualização.

Para referência, segue um exemplo de log completo da execução do `init.sh` .

Anterior | Principal | Próxima
Instalação & Configuração |  | Compilando um patch

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>.