814 lines
34 KiB
XML
814 lines
34 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V4.5-Based Extension//EN"
|
|
"../../../share/xml/freebsd45.dtd" [
|
|
<!ENTITY fbus.ap "<application>Servidor de Atualização do FreeBSD</application>">
|
|
]>
|
|
|
|
<!--
|
|
The FreeBSD Documentation Project
|
|
The FreeBSD Brazilian Portuguese Documentation Project
|
|
|
|
Original revision: r41162
|
|
-->
|
|
|
|
|
|
<article lang="pt_br">
|
|
<articleinfo>
|
|
<title>Construa Seu Próprio Servidor de Atualização do &os;</title>
|
|
|
|
<author>
|
|
<firstname>Jason</firstname>
|
|
<surname>Helfman</surname>
|
|
<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 id="trademarks" role="trademarks">
|
|
&tm-attrib.freebsd;
|
|
&tm-attrib.general;
|
|
&tm-attrib.intel;
|
|
&tm-attrib.amd;
|
|
</legalnotice>
|
|
|
|
<pubdate>$FreeBSD$</pubdate>
|
|
|
|
<releaseinfo>$FreeBSD$</releaseinfo>
|
|
</articleinfo>
|
|
|
|
<abstract>
|
|
<para>Este artigo descreve como construir um &fbus.ap; para uso
|
|
interno na sua organização. O software <ulink
|
|
url="http://svnweb.freebsd.org/base/user/cperciva/freebsd-update-build/">freebsd-update-server</ulink>
|
|
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>
|
|
|
|
<sect1 id="acknowledgments">
|
|
<title>Agradecimentos</title>
|
|
<para>Este artigo posteriormente impresso na <ulink
|
|
url="http://bsdmag.org/magazine/1021-bsd-as-a-desktop">BSD
|
|
Magazine</ulink>.</para>
|
|
</sect1>
|
|
|
|
<sect1 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 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 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 <ulink
|
|
url="&url.books.handbook;/network-apache.html">Apache</ulink>,
|
|
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 GB, e usam 2.6 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 id="Configuration">
|
|
<title>Instalação & Configuração</title>
|
|
|
|
<para>Para efetuar o download do software <ulink
|
|
url="http://svnweb.freebsd.org/base/user/cperciva/freebsd-update-build/">freebsd-update-server</ulink>
|
|
instale o <filename role="package">devel/subversion</filename> 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 id="ftp-id"/>
|
|
|
|
# Host platform
|
|
export HOSTPLATFORM=`uname -m`
|
|
|
|
# Host name to use inside jails
|
|
export BUILDHOSTNAME=${HOSTPLATFORM}-builder.daemonology.net<co id="buildhost-id"/>
|
|
|
|
# Location of SSH key
|
|
export SSHKEY=/root/.ssh/id_dsa<co id="sshkey-id"/>
|
|
|
|
# SSH account into which files are uploaded
|
|
MASTERACCT=builder@wadham.daemonology.net<co id="mstacct-id"/>
|
|
|
|
# Directory into which files are uploaded
|
|
MASTERDIR=update-master.freebsd.org<co 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 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 id="eol-id"/></programlisting>
|
|
</informalexample>
|
|
|
|
<calloutlist>
|
|
<callout arearefs="sha256-id">
|
|
<para>A chave hash &man.sha256.1; da versão desejada,
|
|
ela é publicada no <ulink
|
|
url="&url.base;/releases/">anúncio da versão</ulink>.</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 <ulink
|
|
url="&url.base;/security/security.html">Site de
|
|
Segurança do &os;</ulink>. 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 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 <replaceable>amd64 7.2-RELEASE</replaceable></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 <ulink
|
|
url="http://svnweb.freebsd.org/base/user/cperciva/freebsd-update-build/">freebsd-update-server</ulink>
|
|
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 <replaceable>amd64 7.2-RELEASE</replaceable></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/<replaceable>7.2-RELEASE/amd64</replaceable></userinput>
|
|
&prompt.root; <userinput>touch -t <replaceable>200801010101.01</replaceable> 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 <ulink
|
|
url="&url.books.handbook;/network-apache.html">Configuração do
|
|
servidor Apache</ulink> 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
|
|
<ulink
|
|
url="&url.books.handbook;/updating-freebsdupdate.html">Atualização
|
|
do &os;</ulink> 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
|
|
<ulink url="init.txt"><filename>init.sh</filename></ulink>
|
|
.</para>
|
|
</sect1>
|
|
|
|
<sect1 id="patch">
|
|
<title>Compilando um patch</title>
|
|
|
|
<para>Toda vez que um <ulink
|
|
url="&url.base;/security/advisories.html">aviso de segurança</ulink>
|
|
ou uma <ulink url="&url.base;/security/notices.html">nota de
|
|
segurança</ulink> é 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
|
|
class="directory">/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 <ulink
|
|
url="&url.base;/security/advisories.html">Aviso de Segurança
|
|
do &os;</ulink>. Mais informações sobre como interpretar os
|
|
avisos, podem ser encontradas no <ulink
|
|
url="&url.books.handbook;/security-advisories.html">Handbook do
|
|
&os;</ulink>.</para>
|
|
|
|
<para>Na <ulink
|
|
url="http://security.freebsd.org/advisories/FreeBSD-SA-09:12.bind.asc">nota de segurança</ulink>,
|
|
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 <replaceable>amd64 7.1-RELEASE 7</replaceable></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 <replaceable>amd64 7.1-RELEASE</replaceable></userinput></screen>
|
|
</informalexample>
|
|
|
|
<para>Para referência, segue o log de uma execução completa do
|
|
<ulink url="diff.txt"><filename>diff.sh</filename></ulink>.</para>
|
|
</sect1>
|
|
|
|
<sect1 id="tips">
|
|
<title>Dicas</title>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Se uma versão personalizada tiver sido compilada usando
|
|
o <ulink url="&url.articles.releng;/release-build.html">procedimento</ulink>
|
|
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
|
|
<maketarget>buildworld</maketarget> e
|
|
<maketarget>obj</maketarget> 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 &&
|
|
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</screen>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Crie uma entrada SRV apropriada no <ulink
|
|
url="&url.books.handbook;/network-dns.html">DNS</ulink>
|
|
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>
|