doc/pt_BR.ISO8859-1/articles/freebsd-update-server/article.xml
2013-11-07 15:39:28 +00:00

792 lines
34 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"../../../share/xml/freebsd50.dtd" [
<!ENTITY fbus.ap "<application xmlns='http://docbook.org/ns/docbook'>Servidor de Atualização do FreeBSD</application>">
]>
<!--
The FreeBSD Documentation Project
The FreeBSD Brazilian Portuguese Documentation Project
Original revision: r41162
-->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="pt_br">
<info><title>Construa Seu Próprio Servidor de Atualização do &os;</title>
<author><personname><firstname>Jason</firstname><surname>Helfman</surname></personname><affiliation>
<address>&a.jgh;</address>
</affiliation></author>
<copyright>
<year>2009</year>
<year>2010</year>
<year>2011</year>
<year>2013</year>
<holder role="mailto:jgh@FreeBSD.org">Jason Helfman</holder>
</copyright>
<legalnotice xml:id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.general;
&tm-attrib.intel;
&tm-attrib.amd;
</legalnotice>
<pubdate>$FreeBSD$</pubdate>
<releaseinfo>$FreeBSD$</releaseinfo>
<abstract>
<para>Este artigo descreve como construir um &fbus.ap; para uso
interno na sua organização. O software <link xlink:href="http://svnweb.freebsd.org/base/user/cperciva/freebsd-update-build/">freebsd-update-server</link>
foi escrito pelo &a.cperciva;, Chefe de Segurança emérito do
&os;. Para usuários que acreditam que é conveniente atualizar
seus sistemas a partir de um servidor oficial de atualização,
construir o seu próprio &fbus.ap; pode ajudá-lo a estender suas
funcionalidades, seja por adicionar suporte a versões
customizadas do &os; ou por viabilizar a criação de um servidor
local o qual permitirá atualizações mais rápidas caso você
possua muitos servidores para atualizar.</para>
</abstract>
</info>
<sect1 xml:id="acknowledgments">
<title>Agradecimentos</title>
<para>Este artigo posteriormente impresso na <link xlink:href="http://bsdmag.org/magazine/1021-bsd-as-a-desktop">BSD
Magazine</link>.</para>
</sect1>
<sect1 xml:id="introduction">
<title>Introdução</title>
<para>Usuários experientes ou administradores são frequentemente
responsáveis por diversas máquinas ou ambientes. Eles entendem
as dificuldades e os desafios de manter tal estrutura. A
utilização de um &fbus.ap; torna mais fácil a tarefa de
implantar patches de segurança e de softwares nas máquinas
selecionadas para testá-los antes proceder com o seu deploy no
ambiente de produção. Isto também significa que seus servidores
poderão ser atualizados a partir da rede local em vez de
utilizarem sua conexão de internet, o que torna o processo muito
mais rápido. Este artigo descreve as etapas envolvidas na
criação de um &fbus.ap; para uso interno.</para>
</sect1>
<sect1 xml:id="prerequisites">
<title>Pré-Requisitos</title>
<para>Para construir o seu &fbus.ap; alguns requisitos devem ser
cumpridos.</para>
<itemizedlist>
<listitem>
<para>Estar executando o &os;.</para>
<note>
<para>No mínimo, as atualizações precisam ser compiladas em
uma versão do &os; maior ou igual a versão alvo a ser
distribuída.</para>
</note>
</listitem>
<listitem>
<para>Ter acesso a uma conta de usuário com no mínimo
4&nbsp;GB de espaço livre. Isto permite a criação de
atualizações para as versões 7.1 e 7.2, mas o espaço exato
requerido pode mudar de versão para versão.</para>
</listitem>
<listitem>
<para>Ter acesso a uma conta &man.ssh.1; em uma máquina
remota para enviar as atualizações a serem
distribuídas.</para>
</listitem>
<listitem>
<para>Possuir um servidor web, como <link xlink:href="&url.books.handbook;/network-apache.html">Apache</link>,
com mais da metade do espaço necessário para a compialação.
Por exemplo, compilações testes para 7.1 e 7.2 consomem um
espaço total de 4&nbsp;GB, e usam 2.6&nbsp;GB para
distribuir essas atualizações.</para>
</listitem>
<listitem>
<para>Ter conhecimento básico de shell script com o Bourne
shell, &man.sh.1;</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 xml:id="Configuration">
<title>Instalação &amp; Configuração</title>
<para>Para efetuar o download do software <link xlink:href="http://svnweb.freebsd.org/base/user/cperciva/freebsd-update-build/">freebsd-update-server</link>
instale o <package>devel/subversion</package> e
execute:</para>
<screen>&prompt.user; <userinput>svn co http://svn.freebsd.org/base/user/cperciva/freebsd-update-build freebsd-update-server</userinput></screen>
<para>Atualize o <filename>scripts/build.conf</filename> de forma
adequada. Ele é usado durante as operações de
compilação.</para>
<para>Aqui está o <filename>build.conf</filename> padrão, que
deverá ser modificado para se adequar ao seu ambiente.</para>
<informalexample>
<programlisting>
# 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/releases<co xml:id="ftp-id"/>
# Host platform
export HOSTPLATFORM=`uname -m`
# Host name to use inside jails
export BUILDHOSTNAME=${HOSTPLATFORM}-builder.daemonology.net<co xml:id="buildhost-id"/>
# Location of SSH key
export SSHKEY=/root/.ssh/id_dsa<co xml:id="sshkey-id"/>
# SSH account into which files are uploaded
MASTERACCT=builder@wadham.daemonology.net<co xml:id="mstacct-id"/>
# Directory into which files are uploaded
MASTERDIR=update-master.freebsd.org<co xml:id="mstdir-id"/></programlisting>
</informalexample>
<para>Parâmentros que devem ser considerados:</para>
<calloutlist>
<callout arearefs="ftp-id">
<para>Este é o local de onde serão feitos os downloads das
imagens ISO (pela sub-rotina <function>fetchiso()</function>
do <filename>scripts/build.subr</filename>). O local a ser
configurado não é limitado a URIs de FTP. Qualquer URI
suportada pela ferramenta &man.fetch.1; pode ser
usada.</para>
<para>Customizações do código da
<function>fetchiso()</function> podem ser feitas copiando
o script padrão <filename>build.subr</filename> para o
local da sua versão e arquitetura específica
<filename>scripts/RELEASE/ARCHITECTURE/build.subr</filename> e
alterando o arquivo.</para>
</callout>
<callout arearefs="buildhost-id">
<para>O nome do computador que fará a compilação. Esta
informação será exibida durante a atualização dos
sistemas:</para>
<screen>&prompt.user; <userinput>uname -v</userinput></screen>
</callout>
<callout arearefs="sshkey-id">
<para>A chave <application>SSH</application> para enviar os
arquivos para o servidor de atualização. O par de chaves
pode ser criado digitando <command>ssh-keygen -t
dsa</command>. Este parâmetro é opcional; a autenticação
por senha será usada como método de autenticação quando a
variável <literal>SSHKEY</literal> não estiver
definida.</para>
<para>A página do manual &man.ssh-keygen.1; tem informações
mais detalhadas sobre o <application>SSH</application> e os
passos apropriados para criar e usar chaves.</para>
</callout>
<callout arearefs="mstacct-id">
<para>Conta para enviar os arquivos para o servidor de
atualização.</para>
</callout>
<callout arearefs="mstdir-id">
<para>Diretório do servidor de atualização para o qual os
arquivos serão enviados.</para>
</callout>
</calloutlist>
<para>O arquivo <filename>build.conf</filename> padrão, distribuído
com o fonte do <application>freebsd-update-server</application>,
está preparado para compilar a versão &arch.i386; do &os;.
A titulo de exemplo sobre como compilar um servidor de
atualização para outras arquiteturas, as seguintes modificações
são necessárias para a arquitetura &arch.amd64;:</para>
<procedure>
<step>
<para>Crie um ambiente de compilação para o
&arch.amd64;:</para>
<informalexample>
<screen>&prompt.user; <userinput>mkdir -p /usr/local/freebsd-update-server/scripts/7.2-RELEASE/amd64</userinput></screen>
</informalexample>
</step>
<step>
<para>Copie o arquivo <filename>build.conf</filename> para o
diretório recém criado. As configurações de compilação para
o &os; 7.2-RELEASE na arquitetura &arch.amd64; devem ser
similares a:</para>
<informalexample>
<programlisting># SHA256 hash of RELEASE disc1.iso image.
export RELH=1ea1f6f652d7c5f5eab7ef9f8edbed50cb664b08ed761850f95f48e86cc71ef5<co xml:id="sha256-id"/>
# 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=1275289200<co xml:id="eol-id"/></programlisting>
</informalexample>
<calloutlist>
<callout arearefs="sha256-id">
<para>A chave hash &man.sha256.1; da versão desejada,
ela é publicada no <link xlink:href="&url.base;/releases/">anúncio da versão</link>.</para>
</callout>
<callout arearefs="eol-id">
<para>Para gerar o número "End of Life" (Fim da Vida) para
o <filename>build.conf</filename>, consulte a informação
sobre o "Estimated EOL" publicada no <link xlink:href="&url.base;/security/security.html">Site de
Segurança do &os;</link>. O valor do
<literal>EOL</literal> pode ser derivado a partir da
data listada no site, usando a ferramenta &man.date.1;,
por exemplo:</para>
<screen>&prompt.user; <userinput>date -j -f '%Y%m%d-%H%M%S' '20090401-000000' '+%s'</userinput></screen>
</callout>
</calloutlist>
</step>
</procedure>
</sect1>
<sect1 xml:id="build">
<title>Preparando a atualização</title>
<para>O primeiro passo é executar o
<filename>scripts/make.sh</filename>. 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.</para>
<screen>&prompt.root; <userinput>sh scripts/make.sh</userinput>
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:</screen>
<note>
<para>Anote a impressão digital (fingerprint) da chave gerada.
Ela é necessária no
<filename>/etc/freebsd-update.conf</filename> para as
atualizações de binários.</para>
</note>
<para>Neste ponto, nós estamos prontos para a etapa de
compilação.</para>
<informalexample>
<screen>&prompt.root; <userinput>cd /usr/local/freebsd-update-server</userinput>
&prompt.root; <userinput>sh scripts/init.sh amd64 7.2-RELEASE</userinput></screen>
</informalexample>
<para>A seguir está um exemplo de uma execução
<emphasis>inicial</emphasis>.</para>
<screen>&prompt.root; <userinput>sh scripts/init.sh amd64 7.2-RELEASE</userinput>
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
...</screen>
<para>Em seguida, a compilação da base do sistema será feita
novamente, com os patches. Uma explicação mais detalhada pode
ser encontrada em <filename>scripts/build.subr</filename>.</para>
<warning>
<para>Durante a segunda compilação, o serviço de network time
protocol, &man.ntpd.8; será desligado. De acordo com
&a.cperciva;, Chefe de Segurança emérito do &os;, "o <link xlink:href="http://svnweb.freebsd.org/base/user/cperciva/freebsd-update-build/">freebsd-update-server</link>
compila códigos necessários para identificar os
<literal>timestamps</literal>, 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
<literal>timestamp</literal> funciona realizando duas
compilações separadas por 400 dias e comparando os
resultados."</para>
</warning>
<screen>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
...</screen>
<para>Finalmente, a compilação termina.</para>
<screen>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.</screen>
<para>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
<filename>USAGE</filename>, distribuído com o código fonte.
Execute o <filename>scripts/approve.sh</filename>. 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.</para>
<informalexample>
<screen>&prompt.root; <userinput>cd /usr/local/freebsd-update-server</userinput>
&prompt.root; <userinput>sh scripts/mountkey.sh</userinput></screen>
</informalexample>
<screen>&prompt.root; <userinput>sh -e scripts/approve.sh amd64 7.2-RELEASE</userinput>
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</screen>
<para>Depois que o processo de aprovação tiver sido finalizado,
o processo de transferência pode ser iniciado.</para>
<informalexample>
<screen>&prompt.root; <userinput>cd /usr/local/freebsd-update-server</userinput>
&prompt.root; <userinput>sh scripts/upload.sh amd64 7.2-RELEASE</userinput></screen>
</informalexample>
<note>
<para>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
<emphasis>uploaded</emphasis>.</para>
<informalexample>
<screen>&prompt.root; <userinput>cd /usr/local/freebsd-update-server/pub/7.2-RELEASE/amd64</userinput>
&prompt.root; <userinput>touch -t 200801010101.01 uploaded</userinput></screen>
</informalexample>
</note>
<para>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 <application>Apache</application>, por favor,
consulte a seção <link xlink:href="&url.books.handbook;/network-apache.html">Configuração do
servidor Apache</link> do Handbook.</para>
<para>Atualize o <literal>KeyPrint</literal> e o
<literal>ServerName</literal> no arquivo
<filename>/etc/freebsd-update.conf</filename>, e efetue as
atualizações de acordo com os procedimentos descritos na seção
<link xlink:href="&url.books.handbook;/updating-freebsdupdate.html">Atualização
do &os;</link> do Handbook.</para>
<important>
<para>Para o &fbus.ap; funcionar corretamente, é preciso que
estejam compiladas a versão <emphasis>atual</emphasis> e
a versão <emphasis>alvo</emphasis> 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 &os; 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>
</important>
<para>Para referência, segue um exemplo de log completo da
execução do
<link xlink:href="init.txt"><filename>init.sh</filename></link>
.</para>
</sect1>
<sect1 xml:id="patch">
<title>Compilando um patch</title>
<para>Toda vez que um <link xlink:href="&url.base;/security/advisories.html">aviso de segurança</link>
ou uma <link xlink:href="&url.base;/security/notices.html">nota de
segurança</link> é anunciada, uma atualização pode ser
compilada.</para>
<para>Para este exemplo, a versão 7.1-RELEASE será usada.</para>
<para>Algumas suposições são feitas para a compilação de uma
versão diferente:</para>
<itemizedlist>
<listitem>
<para>Crie a estrutura correta de diretório para a compilação
inicial.</para>
</listitem>
<listitem>
<para>Faça a compilação inicial da 7.1-RELEASE</para>
</listitem>
</itemizedlist>
<para>Crie o diretório do patch para a respectiva versão em
<filename>/usr/local/freebsd-update-server/patches/</filename>.</para>
<informalexample>
<screen>&prompt.user; <userinput>mkdir -p /usr/local/freebsd-update-server/patches/7.1-RELEASE/</userinput>
&prompt.user; <userinput>cd /usr/local/freebsd-update-server/patches/7.1-RELEASE</userinput></screen>
</informalexample>
<para>Como exemplo, pegue o patch para o &man.named.8;. Leia o
aviso, obtenha o arquivo necessário do <link xlink:href="&url.base;/security/advisories.html">Aviso de Segurança
do &os;</link>. Mais informações sobre como interpretar os
avisos, podem ser encontradas no <link xlink:href="&url.books.handbook;/security-advisories.html">Handbook do
&os;</link>.</para>
<para>Na <link xlink:href="http://security.freebsd.org/advisories/FreeBSD-SA-09:12.bind.asc">nota de segurança</link>,
este aviso é chamado de <literal>SA-09:12.bind</literal>.
Depois de fazer o download do arquivo, é necessário renomeá-lo
para o nível correto do patch. É recomendado manter
consistência com os níveis oficiais de patch do &os;, mas o nome
pode ser escolhido livremente. Para esta compilação, vamos
seguir a prática atual do &os; e chamá-lo de
<literal>p7</literal>. Renomeie o arquivo:</para>
<informalexample>
<screen>&prompt.user; <userinput>cd /usr/local/freebsd-update-server/patches/7.1-RELEASE/; mv bind.patch 7-SA-09:12.bind </userinput></screen>
</informalexample>
<note>
<para>Ao executar uma compilação de nível de patch, é
assumido que os patches anteriores estarão no mesmo lugar.
Quando uma compilação de patch é executada, ela vai aplicar
todos os patches contidos no diretório do patch.</para>
<para>Podem ser adicionados patches personalizados na
Compilação. Use o número zero, ou qualquer outro
número.</para>
</note>
<warning>
<para>É da responsabilidade do administrador do &fbus.ap;
tomar as devidas ações para verificar a autenticidade de cada
patch.</para>
</warning>
<para>Neste ponto, um <emphasis>diff</emphasis> está pronto para
ser construído. O software primeiro irá verificar se o
<filename>scripts/init.sh</filename> foi executado na respectiva
versão antes de executar a construção do diff.</para>
<informalexample>
<screen>&prompt.root; <userinput>cd /usr/local/freebsd-update-server</userinput>
&prompt.root; <userinput>sh scripts/diff.sh amd64 7.1-RELEASE 7</userinput></screen>
</informalexample>
<para>O que segue abaixo é um exemplo do log da execução de uma
compilação <emphasis>diferencial</emphasis>.</para>
<screen>&prompt.root; <userinput>sh -e scripts/diff.sh amd64 7.1-RELEASE 7</userinput>
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
...</screen>
<para>As atualizações são exibidas, e uma aprovação é
requisitada.</para>
<screen>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.</screen>
<para>Siga o mesmo processo descrito anteriormente para aprovar a
compilação:</para>
<screen>&prompt.root; <userinput>sh -e scripts/approve.sh amd64 7.1-RELEASE</userinput>
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.</screen>
<para>Depois de aprovar a compilação, faça a transferência do
software para o servidor de distribuição:</para>
<informalexample>
<screen>&prompt.root; <userinput>cd /usr/local/freebsd-update-server</userinput>
&prompt.root; <userinput>sh scripts/upload.sh amd64 7.1-RELEASE</userinput></screen>
</informalexample>
<para>Para referência, segue o log de uma execução completa do
<link xlink:href="diff.txt"><filename>diff.sh</filename></link>.</para>
</sect1>
<sect1 xml:id="tips">
<title>Dicas</title>
<itemizedlist>
<listitem>
<para>Se uma versão personalizada tiver sido compilada usando
o <link xlink:href="&url.articles.releng;/release-build.html">procedimento</link>
nativo do <command>make release</command>, o código do
<application>freebsd-update-server</application> irá
funcionar a partir da sua versão. Por exemplo, uma versão
sem o ports ou sem a documentação pode ser compilada
limpando-se as funcionalidades pertencentes às sub-rotinas
de documentação <function>findextradocs()</function>,
<function>addextradocs()</function> e alterando o local de
download na <function>fetchiso()</function>,
respectivamente, no <filename>scripts/build.subr</filename>.
Em um último passo, mude o hash &man.sha256.1; em
<filename>build.conf</filename> na sua respectiva versão e
arquitetura e então você está pronto para compilar sua
versão personalizada.</para>
<screen># 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 () {
}
</screen>
</listitem>
<listitem>
<para>Adicionando a opção <option>-j
<replaceable>NÚMERO</replaceable></option> nas etapas
<buildtarget>buildworld</buildtarget> e
<buildtarget>obj</buildtarget> no script
<filename>scripts/build.subr</filename> pode acelerar o
processo dependendo do hardware usado, entretanto isto não é
necessário. Usar esta opção em outras etapas não é
recomendado, pois pode fazer a compilação ficar
instável.</para>
<screen>#Build the world
log "Building world"
cd /usr/src &amp;&amp;
make -j 2 ${COMPATFLAGS} buildworld 2&gt;&amp;1
# Distribute the world
log "Distributing world"
cd /usr/src/release &amp;&amp;
make -j 2 obj &amp;&amp;
make ${COMPATFLAGS} release.1 release.2 2&gt;&amp;1</screen>
</listitem>
<listitem>
<para>Crie uma entrada SRV apropriada no <link xlink:href="&url.books.handbook;/network-dns.html">DNS</link>
para o servidor de atualização, e coloque outros servidores
com pesos variados. Usar este recurso irá permitir que você
distribua a carga do processo de atualização entre vários
servidores, entretanto esta dica não será necessária a menos
que você deseje prover um serviço redundante.</para>
<screen>
_http._tcp.update.myserver.com. IN SRV 0 2 80 host1.myserver.com.
SRV 0 1 80 host2.myserver.com.
SRV 0 0 80 host3.myserver.com.</screen>
</listitem>
</itemizedlist>
</sect1>
</article>