Nota: O documento original é mais novo que esta tradução.
A distribuição Debian “testing”
Para informações básicas, orientadas ao usuário, sobre a distribuição
testing
, veja a FAQ do
Debian.
Uma coisa importante a ser notada, tanto para usuários regulares quanto para desenvolvedores, é que as atualizações de segurança não são gerenciadas pela equipe de segurança. Para mais informações veja a FAQ da Equipe de Segurança.
Esta página cobre primariamente os aspectos da testing
que são
importantes para desenvolvedores Debian.
Como a testing
funciona
A distribuição testing
é uma distribuição gerada automaticamente. Ela
é gerada da distribuição instável (unstable
) por um conjunto de scripts
que tentam mover pacotes que provavelmente não possuem bugs críticos ao
lançamento (release-critical
). Eles o fazem de modo a garantir que as
dependências dos outros pacotes na testing
sempre possam ser
satisfeitas.
Uma versão particular de um pacote se moverá para a testing
quando
ele satisfizer todos os seguintes critérios:
- Ele precisa estar na instável (
unstable
) por 10, 5 ou 2 dias, dependendo da urgência doupload
; - Ele precisa estar compilado e atualizado em todas as arquiteturas
nas quais ele foi anteriormente compilado na instável (
unstable
); - Ele precisa ter menos bugs críticos ao lançamento
(
release-critical
) ou o mesmo número que a versão atualmente natesting
(veja abaixo para mais informações); - Todas as suas dependências precisam ser satisfeitas ou
pelos pacotes que já estão na
testing
ou pelo grupo de pacotes que serão instalados ao mesmo tempo; - A operação de instalação do pacote na
testing
não deve quebrar qualquer outro pacote natesting
(Veja abaixo para mais informações.)
Um pacote que satisfaz as três primeiras condições é considerado um
Candidatos Válido
.
O script de atualização mostra quando cada pacote deve mover-se da instável
(unstable
) para a testing
. A saída é dividida em duas partes:
- As justificativas de atualização (update excuses)
[compactadas com gzip]:
listam todos as versões candidatas dos pacotes e o estado básico de sua
propagação para a
testing
; ele é um pouco mais curto e mais agradável - A saída de atualização (update output)
[compactada com gzip]:
a saída completa, quase sem processamento dos scripts da
testing
conforme eles passam pelos candidatos
Questões Feitas/Respondidas Freqüentemente
O que são bugs críticos ao lançamento (release-critical
), e como
eles são contados?
release-critical), e como eles são contados?
Todos os bugs de algumas severidades altas são considerados críticos ao lançamento por padrão; atualmente, estas severidades são crítico, grave e sério.
Presume-se que tais bugs tenham um impacto nas probabilidades do pacote
ser lançado com a versão estável do Debian: em geral, se um pacote tem bugs
críticos ao lançamento, ele não irá para a testing
, e conseqüentemente
não será lançado na estável (stable
).
A contagem de bugs na testing
de um pacote é considerada como
aproximadamente a contagem de bugs no último momento no qual a versão na
testing
era a mesma da instável (unstable
). Os bugs com tag
squeeze ou
wheezy não serão contados. No entanto,
bugs com a tag sid serão contados.
Como instalar um pacote na testing
poderia quebrar os outros
pacotes?
testingpoderia quebrar os outros pacotes?
A estrutura dos repositórios da distribuição é tal que ela pode conter
somente uma versão de um pacote; um pacote é definido por seu nome. Assim,
quando o pacote fonte acmefoo é instalado na testing
, junto com
seus pacotes binários acme-foo-bin, acme-bar-bin,
libacme-foo1 e libacme-foo-dev, a versão antiga é
removida.
No entanto, a versão mais antiga pode também ter provido um pacote
binário com um soname
antigo de uma biblioteca, como
libacme-foo0. Remover o acmefoo antigo removerá o
libacme-foo0, quebrando qualquer pacote que dependa dele.
Evidentemente, isto afeta principalmente pacotes que tem alterações de pacotes binários em versões diferentes (assim sendo, principalmente bibliotecas). No entanto, pacotes nos quais há dependências de versões declaradas com as comparações ==, <= ou << também serão afetados.
Quando os pacotes binários vindos de um pacote fonte se alteram deste modo,
todos os pacotes que dependem das bibliotecas antigas tem que ser
atualizados para depender dos binários novos. Como a instalação de tais
pacotes na testing
quebram todos os pacotes que dependem deles na
testing
, algum cuidado tem que ser tomado: todos os pacotes dependentes
precisam estar atualizados e prontos para serem instalados de modo que eles não
estejam quebrados e, assim que tudo esteja pronto, a intervenção manual do
gerenciador de lançamento ou um assistente geralmente é necessária.
Se você está tendo problemas com grupos complicados de pacotes como estes, contate a debian-devel ou a debian-release para receber ajuda.
Eu ainda não entendo! Os scripts da testing dizem
que este pacote é um candidato válido, mas ele ainda não foi para a
testing.
Isto tende a acontecer quando de algum modo, direto ou indireto, instalar o pacote vai quebrar algum outro pacote.
Lembre-se de considerar as dependências do seu pacote. Suponha que
o seu pacote depende da libtool, ou libltdlX. Seu pacote não
irá para a testing
até que a versão correta da libtool esteja pronta
para ir com ele.
Do mesmo modo, isso não irá ocorrer até que a instalação da libtool não
quebre pacotes que já estão na testing
. Em outras palavras, até que todos os
outros pacotes que dependem da libltdlY (onde Y é a
versão anterior) tenham sido recompilados, e todos os seus bugs críticos ao
lançamento estiverem corrigidos, etc, nenhum destes pacotes entrará na
testing
.
É aqui que a
saída de
texto
[compactada com gzip]
é útil: ela dá dicas (embora bastante resumidas) de quais pacotes quebram
quando um candidato válido é adicionado à testing
.
Por que algumas vezes é difícil ter pacotes Architecture: all
na testing?
Se o pacote Architecture: all deve ser instalado, ele precisa satisfazer suas dependências em todas as arquiteturas. Se ele depende de dados pacotes que compilam somente em um conjunto limitado das arquiteturas do Debian, isto não será possível.
No entanto, por enquanto, a testing
ignorará a instalabilidade dos
pacotes Architecture: all em arquiteturas não-i386. (Isto
é um hack grosseiro e eu não estou realmente feliz em ter feito isto,
mas aí vai.
—aj)
Meu pacote está parado porque ele está desatualizado em alguma
arquitetura. O que eu devo fazer?
Verifique o estado de seu pacote no banco de dados de logs de construção. Se o pacote não pode ser compilado, ele estará marcado como failed; investigue os logs e corrija todos os problemas que foram causados pelas fontes do seu pacote.
Se você notar que alguma arquitetura construiu a versão nova do seu
pacote mas ele não está aparecendo na saída dos scripts da testing
,
você só precisa ser um pouco mais paciente até que o mantenedor do
respectivo buildd faça o upload dos arquivos para o repositório Debian.
Se você notar que algumas arquiteturas não construíram a nova versão de seu pacote, apesar de você ter feito o upload de uma correção para uma falha anterior, o motivo provavelmente é que ele está marcado como esperando por dependências (Dep-Wait). Você também pode ver a lista dos chamados wanna-build states (estados quer-construir) para se certificar.
Estes problemas geralmente são corrigidos eventualmente, mas se você está esperando por um período longo de tempo (digamos, duas semanas ou mais), notifique o mantenedor do buildd do respectivo porte se tal endereço estiver documentado nas páginas dos portes, ou a lista de discussão do porte.
Se você explicitamente removeu uma arquitetura da lista Architecture no
arquivo de controle (control
), e o pacote foi construído para aquela
arquitetura anteriormente, você precisa requisitar a remoção do antigo pacote
binário para esta arquitetura seja removido do repositório antes que seu
pacote possa fazer a transição para a testing
. Você precisa reportar
um bug contra ftp.debian.org
requisitando remoção de todos os pacotes
das arquiteturas removidas do repositório instável (unstable
).
Geralmente a lista do porte
em questão deveria ser informada como forma
de cortesia.
Há alguma exceção? Eu tenho certeza que o acmefoo
entrou na testing apesar de não satisfazer todos os requerimentos.
O gerente de lançamento pode sobrepujar as regras de dois modos:
- Ele pode decidir que a quebra causada pela instalação de uma nova
biblioteca irá tornar as coisas melhores ao invés de piores, e deixá-la
entrar na
testing
junto com suas dependências. - Ele também pode remover manualmente pacotes da
testing
que ficariam quebrados, para que o novo material possa ser instalado.
Você pode dar um exemplo real, não-trivial?
Aqui está um: quando o pacote fonte apache é instalado na
testing
, junto com seus pacotes binários apache,
apache-common, apache-dev e apache-doc, a
versão antiga é removida.
No entanto, todos os pacotes de módulos do Apache dependem de
apache-common (>=alguma-coisa), apache-common
(<< alguma-coisa), assim esta alteração quebra
todas estas dependências. Conseqüentemente, todos os módulos Apache
precisam ser recompilados contra a nova versão do Apache para a
testing
ser atualizada.
Vamos elaborar mais um pouco: depois que todos os módulos foram
atualizadas na instável
para trabalhar com o novo Apache, os scripts
da testing
tentam apache-common e descobrem que ele quebra
todos os módulos Apache porque eles tem Depends: apache-common
(<< a versão atual), e então tentam
libapache-foo para descobrir que ele não instala
porque ele tem Depends: apache-common (>= a versão
nova).
No entanto, posteriormente eles aplicarão uma lógica diferente (algumas vezes pedidas por uma intervenção manual): eles ignorarão o fato que o apache-common quebra coisas, e continuar indo com as coisas que funcionam; se isto ainda não funcionar depois que nós fizermos tudo que nós podíamos, muito mal, mas talvez isto irá funcionar. Posteriormente eles tentarão todos os pacotes libapache-foo e verificar se eles realmente funcionam.
Depois que tudo tiver sido tentado, eles verificam quantos pacotes
foram quebrados, analisam se isto é melhor ou pior que o que havia
originalmente e aceitar tudo ou esquecer sobre isto. Você verá isto no
update_output.txt nas linhas
.recur:
Por exemplo:
recur: [foo bar] baz
basicamente diz já tendo descoberto que foo e
bar torna as coisas melhores, Eu estou agora tentando
baz para ver o que acontece, apesar disto quebrar coisas
. As
linhas do update_output.txt que começam com
indicam coisas que parecem tornar as coisas
melhores, e linhas accepted
deixam as coisas piores.skipped
O arquivo update_output.txt é completamente ilegível!
Isto não é uma questão. ;-)
Vamos pegar um exemplo:
skipped: cln (0) (150+4)
got: 167+0: a-40:a-33:h-49:i-45
* i386: ginac-cint, libginac-dev
Isto significa que se o cln entrar na testing
,
ginac-cint e libginac-dev tornam-se não-instaláveis
na testing
no i386. Note que as arquiteturas são verificadas em ordem
alfabética e que somente os problemas na primeira arquitetura problemática
são mostrados — é por isso que a arquitetura alpha é mostrada tão
freqüentemente.
A linha got
inclui o número de problemas na testing
nas
arquiteturas diferentes (até a primeira arquitetura onde um problema é
encontrado — veja acima). i-45
significa que se o cln
fosse para a testing
, haveria 45 pacotes não-instaláveis na i386.
Algumas das entradas acima e abaixo do cln mostram que havia 43
pacotes não-instaláveis na testing
nesta arquitetura naquele momento.
A linha skipped: cln (0) (150+4)
significa que ainda há 150 pacotes
para checar após este pacote até esta verificação de todos os pacotes ser
completada, e que 4 pacotes que não vão ser planejados para atualização pois
quebrariam dependências já foram encontrados. O (0)
é irrelevante, você
pode ignorá-lo seguramente.
Note que há várias verificações de todos os pacotes em uma rodada dos
scripts da testing
.
Jules Bean montou inicialmente as questões freqüentemente feitas e as respostas.
Informações Adicionais
As páginas a seguir fornecem informações adicionais sobre o estado atual da
testing
e a migração de pacotes da instável para a testing
:
- Estatísticas sobre pacotes binários que estão desatualizados para
testing
, estável -
testing
, estável - Interface web agradável
para ajudá-lo a encontrar porque pacotes estão sendo retidos fora da
testing
.
Você pode estar interessado em ler um antigo e-mail de explicação. Sua única grande falha é que ela não leva em conta o pool dos pacotes, porque ele foi implementado por James Troup depois que ela foi escrita.
O código da testing
está disponível em
ftp-master.
Anthony Towns leva os créditos pela implementação da testing.
