Como posso executar o Debian estável, mas instalar alguns pacotes dos testes?

206

Digamos que você esteja executando um servidor e não queira atualizar para o Testing (Squeeze) do Stable (Lenny) para instalar apenas um ou dois pacotes necessários.

Qual é a melhor maneira de instalar apenas determinados pacotes do Testing?

Gareth
fonte
2
É o que a documentação oficial mais recente tem a dizer: Pacotes de fontes mistas de arquivos .
Alexey #

Respostas:

183

Muitas pessoas parecem ter medo de misturar estável com teste, mas, francamente, o teste é bastante estável por si só, e com preferências e verificação de soluções adequadas, você pode evitar o "desvio da estabilidade" que coloca seus principais pacotes no caminho instável.

"O teste é bastante estável?" , você pergunta. Sim. Para que um pacote seja migrado de instável para teste, ele precisa ter zero bugs abertos por 10 dias consecutivos. As chances são de que, especialmente para os pacotes mais populares, alguém enviará um relatório de bug para uma versão instável, se algo estiver errado.

Mesmo se você não quiser misturar os ambientes, ainda é bom ter a opção, caso você encontre algo que exija uma versão mais nova do que a que está estável.

Aqui está o que eu recomendo para configurar isso:

Primeiro, crie os seguintes arquivos em /etc/apt/preferences.d:

stable.pref:

# 500 <= P < 990: causes a version to be installed unless there is a
# version available belonging to the target release or the installed
# version is more recent

Package: *
Pin: release a=stable
Pin-Priority: 900

testing.pref:

# 100 <= P < 500: causes a version to be installed unless there is a
# version available belonging to some other distribution or the installed
# version is more recent

Package: *
Pin: release a=testing
Pin-Priority: 400

unstable.pref:

# 0 < P < 100: causes a version to be installed only if there is no
# installed version of the package

Package: *
Pin: release a=unstable
Pin-Priority: 50

experimental.pref:

# 0 < P < 100: causes a version to be installed only if there is no
# installed version of the package

Package: *
Pin: release a=experimental
Pin-Priority: 1

(Não tenha medo do material instável / experimental aqui. As prioridades são baixas o suficiente para que nunca seja instalado automaticamente nada disso. Até o ramo de testes se comportará, pois só instalará os pacotes que você deseja em testes.)

Agora, criando um conjunto correspondente para /etc/apt/sources.list.d:

stable.list: Copie do seu original /etc/apt/sources.list. Renomeie o arquivo antigo para algo como sources.list.orig.

testing.list: O mesmo que stable.list, exceto com testing.

unstable.list: O mesmo que stable.list, exceto com unstable, e remova as listas de segurança.

experimental.list: O mesmo que unstable.list, exceto com experimental.

Você também pode adicionar um oldstablein sources.lists.de preferences.d(use a prioridade 1), embora esse apelido tende a expirar e desaparecer antes do próximo ciclo estável. Em casos como esse, você pode usar http://archive.debian.org/debian/e "codificar" a versão do Debian (etch, lenny, etc.).

Para instalar a versão de teste de um pacote, basta usar aptitude install lib-foobar-package/testingou simplesmente acessar a GUI do aptitude e selecionar a versão dentro dos detalhes do pacote (pressione enter no pacote que você está vendo).

Se você receber reclamações de conflitos de pacotes, consulte as soluções primeiro. Na maioria dos casos, o primeiro será "não instale esta versão". Aprenda a usar as opções de resolvedor de aceitação / rejeição por pacote. Por exemplo, se você estiver instalando foobar-package / testing, e a primeira solução for "não instale foobar-package / testing", marque essa opção como rejeitada, e as outras soluções nunca voltarão a esse caminho. Em casos como esse, você provavelmente precisará instalar alguns outros pacotes de teste.

Se estiver ficando muito peludo (como se estivesse tentando atualizar a libc ou o kernel ou algum outro sistema central enorme), você poderá rejeitar esses caminhos de atualização ou simplesmente voltar completamente da atualização inicial. Lembre-se de que ele só atualizará as coisas para teste / instável se você permitir.

EDIT: corrigidos alguns pinos prioritários e atualizamos a lista.

Brendan Byrd
fonte
4
Você foi executado apt-get updatedepois de criar os arquivos de configuração?
Flow
3
Estou recebendo (o que me parece) comportamentos inconsistentes usando esse método. "apt-get install -t testing appX" não fornece o mesmo que "apt-get install appX / testing" (consulte serverfault.com/q/646934/132528 ) - Suponho que seja exatamente dessa maneira que esse método faz com que as prioridades sejam resolvidas, mesmo que não sejam intuitivas para mim?
eugenevd
7
IMPORTANTE: o autor escolheu um valor de preferência de fixação para estável / segurança que é maior que o valor da Versão padrão ... consulte serverfault.com/a/653552/120130 para obter mais informações
Alex Ryan
7
Essa resposta acabou de quebrar meu sistema. Após uma tentativa sudo apt-get update, recebi um erro de atualização. Então reiniciei, o que me deu Xsession error, reiniciei novamente e agora não tenho GUI. o /dev/sda1/agora está cheio. Ótimo.
Luchonacho #
3
Vou recomendar que as pessoas prestem atenção nos comentários negativos deste post. Eu acabei de entender isso na recente atualização do Debian 9, que foi corrigida revertendo essas mudanças. Ouvir os conselhos no artigo do Debian sobre este assunto: wiki.debian.org/DontBreakDebian (desloque-se para não fazer uma FrankenDebian)
Brandon Arnold
98

Em /etc/apt/apt.conf.dadicionar o seguinte arquivo

99defaultrelease:

APT::Default-Release "stable";

in /etc/apt/sources.list.d- adicione URLs para fontes instáveis ​​/ de teste

stable.list:

deb     http://ftp.de.debian.org/debian/    stable main contrib non-free
deb-src http://ftp.de.debian.org/debian/    stable main contrib non-free

deb     http://security.debian.org/         stable/updates  main contrib non-free

testing.list:

deb     http://ftp.de.debian.org/debian/    testing main contrib non-free
deb-src http://ftp.de.debian.org/debian/    testing main contrib non-free

deb     http://security.debian.org/         testing/updates  main contrib non-free

corre

apt-get update

e instale o que você precisa com

apt-get -t testing install something

Seja muito cuidadoso se você instalar coisas com muitas dependências. De preferência, não faça isso na produção.

Você também pode tentar a sua sorte em backports ou repositório similar.

pQd
fonte
11
Uau. Aquilo foi rápido. Eu estava postando para compartilhar as informações que acabei de encontrar! Agradável!
Gareth
Eu nunca usei o método apt.conf antes. Parece mais simples que o método de arquivo de preferências, mas oferece um controle menos preciso. - Coops
Coops
4
A resposta precisa ser atualizada; essa configuração quebrará completamente as coisas agora que o squeeze se tornou estável e o lenny se tornou antigo.
El Yobo 15/02
11
Não é mais utilizável, atualize
Lothar
4
em versões Debian mais recentes não há nenhum arquivo apt.conf, em vez editar /etc/apt/apt.conf.d/70debconf
Hayden Thring
49

apt_preferences

Defina o nível padrão para o qual o sistema deve 'atualizar com segurança' no arquivo / etc / apt / preferências:
man apt_preferences

Você pode fazer muito com o apt_preferences, mas por uma questão de simplicidade ...

Eu precisava instalar um único pacote (autoMysqlBackup) que estava disponível apenas no Testing. A solução foi adicionar o seguinte ao / etc / apt / preferências:

Explanation: Uninstall or do not install any Debian-originated
Explanation: package versions other than those in the stable distro
Package: *
Pin: release a=stable
Pin-Priority: 900

Package: *
Pin: release o=Debian
Pin-Priority: -10

Com vários repositórios adicionados ao /etc/apt/sources.list, o aptitude agora atualizará apenas para o release especificado, mesmo que os repositórios de repositório posteriores estejam listados (neste caso, 'stable').

deb http://mirror.aarnet.edu.au/debian/ lenny main
deb-src http://mirror.aarnet.edu.au/debian/ lenny main
deb http://mirror.aarnet.edu.au/debian/ squeeze main
deb-src http://mirror.aarnet.edu.au/debian/ squeeze main

Portanto, para instalar esse pacote, tudo o que você precisa fazer é:

$ aptitude install -t testing packageName 
Gareth
fonte
Este também é um bom método, não tão rápido quanto o apt.conf, mas permite controlar todas as suas fontes diferentes de maneira relativa.
Coops
2
Isso é muito complicado para a tarefa ... O uso do APT :: Default-Release define a prioridade do pino da versão para 990 (semelhante à forma como você a define como 900) e a fixação negativa para o restante não é realmente necessária. de qualquer maneira, durante as atualizações distintas, o pacote estável tem prioridade e assim que você listar algo explicitamente na linha de comando, sua prioridade de fixação negativa será ignorada.
Raphaël Hertzog
Não sei ao certo como responder a você, @ Rafael. Parece uma maneira muito elegante de fazer as coisas. Eu usei o apt pinning antes de anos atrás, mas nunca realmente o 'entendi'. Os exemplos que usei acima são diretamente da página do manual apt_preferences.
Gareth
2
Confirmar esta funciona bem no aperto
tomfanning
3
@Lothar: Funciona no Debian 6. Só porque o arquivo não existe, não significa que não funcione. Basta criar o arquivo e adicionar as configurações. Cite a página de manual: "Se não houver arquivo de preferências ou se não houver entrada no arquivo que se aplique a uma versão específica, a prioridade atribuída a essa versão será a prioridade da distribuição à qual essa versão pertence."
rzetterberg
13

Pelo que vale, o conselho geral que sempre vi é "Não misture estável com nada". A maioria dos tutoriais de sistemas mistos é para misturar testes e instáveis.

O raciocínio parece ser que, se você misturar estável com testes, pacotes muito básicos (como libc6) exigirão atualizações (para instalar o software a partir de testes) e, uma vez que esses pacotes básicos passarem para testes, todo o sistema poderá se desviar dessa maneira.

Aqui estão duas alternativas:

  1. Use Backports .
  2. Instale uma linha de origem do teste e tente criar a versão posterior que você deseja da fonte .
Telêmaco
fonte
11
Concordo. Eu apenas tentei atualizar o libdvdread4 dos testes por causa de um bug na versão no wheezy / stable. Ele quer trazer a última libc embora. Então, peguei o pacote de código-fonte do libdvdread4 no stable e o corrigi com a alteração de fonte de 1 linha e o reconstruí. Muito melhor do que extrair todos os tipos de pacotes dos testes. Agora todos os pacotes ainda são "estáveis" e eu só tenho a alteração de 1 linha que preciso.
dgrant 12/09
12

A documentação do debian é extensa no assunto e eu recomendo fortemente que se aprofundem, pois revelará verdadeiramente a beleza do sistema debian.

Dê uma olhada em Como manter um sistema misto , ele explicará tudo o que você precisa saber.

tomdeb
fonte
11
Este parece ser o mesmo método usado na resposta por @pQd, portanto não se aplica ao debian> = 6.0. O título do link também diz "documentação obsoleta" agora. Também na maior parte link apenas resposta.
dequis
Enquanto @dequis está certo em que o link parece estar desatualizado, apenas segui as instruções em um Debian 8 (teste) para instalar um pacote instável, e tudo parece funcionar perfeitamente bem. Alguém tem um link de documentação atualizado?
domsson
11
Este é provável que seja o que você está procurando: debian.org/doc/manuals/debian-reference/...
tomdeb
7

Outra maneira, que poderia impedir a instalação de muitas dependências do Testing ou do Sid, é esta: você diz ao apt-get para obter o código-fonte do pacote do Testing ou do Sid e cria um pacote para o seu sistema usando as ferramentas Debian (não é necessário mexer manualmente) com fontes).

Citando aqui:
https://wiki.debian.org/DebianUnstable#How_do_I_backport_a_sid_package_to_testing_or_stable.3F

Como faço para backport um pacote sid para teste ou estável?

Instale a fonte Debian (e as ferramentas de desenvolvimento, especialmente debhelper, devscripts e build-essential), e então construa o pacote.

Passo a passo:

add a deb-src line for sid to your sources.list

apt-get update

apt-get build-dep PACKAGE_NAME

apt-get -b source PACKAGE_NAME 

As debs resultantes devem estar no diretório atual e podem ser instaladas com o dpkg -i the.deb.

gerlos
fonte
4

Venho fazendo isso há um longo período de tempo para ter certeza de que é suficientemente seguro e pode ser conveniente. Com a configuração abaixo, a versão estável será instalada por padrão, no entanto, o Aptitude também permitirá que você escolha a versão com portabilidade ou instável, se assim o desejar:

insira a descrição da imagem aqui

Há quatro coisas que precisam ser editadas, a liberação de fixação padrão precisa ser definida, as fontes precisam de backports e instáveis ​​adicionados, diminuindo a prioridade de fixação de pacotes de backports / instáveis ​​e as configurações de exibição do aptitude precisam ser modificadas para exibir a fixação.

  • Crie um '/etc/apt/apt.conf.d/10defaultrelease' e faça seu conteúdo da seguinte maneira:
Apt :: Versão-padrão "stable";
  • Edite seu '/etc/apt/sources.list' para adicionar fontes instáveis ​​e de backports para que fique assim:
# deb cdrom: [Debian GNU / Linux 6.0.0 _Squeeze_ - Multi-arquitetura oficial amd64 / i386 NETINST # 1 20110205-14: 45] / squeeze main

deb http://ftp.us.debian.org/debian/ squeeze main
deb-src http://ftp.us.debian.org/debian/ squeeze main

deb http://security.debian.org/ squeeze / updates principal
deb-src http://security.debian.org/ squeeze / updates principal

# squeeze-update, anteriormente conhecido como 'volátil'
deb http://ftp.us.debian.org/debian/ squeeze-updates main
deb-src http://ftp.us.debian.org/debian/ squeeze-updates main

# squeeze backports
# http://backports.debian.org/Instructions/
deb http://backports.debian.org/debian-backports squeeze-backports main

# instável
# http://wiki.debian.org/AptPreferences
deb http://ftp.us.debian.org/debian/ unstable main
deb-src http://ftp.us.debian.org/debian/ unstable main

# ex não livre. java do sol
#deb http://ftp.us.debian.org/debian/ aperte não-livre
# deb-src http://ftp.us.debian.org/debian/ squeeze não gratuito
  • Editar etc/apt/preferencesarquivo fixado - se o arquivo não existir, crie-o.
# Prioridades de fixação de pacotes
# Consulte http://wiki.debian.org/AptPreferences e http://manpages.debian.net/cgi-bin/man.cgi?query=apt_preferences
#
# Na casca da porca, o PIN mais alto é instalado
#
# Os pinos padrão são os seguintes, além das nossas configurações:
# 990 - para versões que não estão instaladas, mas pertencem à nossa configuração `APT :: Default-Relase" stable "`.
# 500 - para versões que não estão instaladas e não pertencem à versão de destino
# 100 - para pacotes que já estão instalados, isso também significa outras versões do mesmo pacote
# 1 - para pacotes experimentais; pacotes com "NotAutomatic: yes"
#
# Nossos Pinnings
# 400 - backports que podem ser instalados com segurança sem a necessidade de atualizar outros pacotes
# 50 - pacotes instáveis, instalação forçada na tela de detalhes, podem resultar em conflitos

Pacote: *
Pin: release n = squeeze-backports
Prioridade de pino: 400

Pacote: *
Pin: solte a = instável
  • Crie '/etc/apt/apt.conf.d/100guiconf' e configure o Aptitude para exibir informações de fixação.
Aptitude :: UI :: Formato de Exibição do Pacote "% c% a% M% p% Z% v% V% i";
Daniel Sokolowski
fonte
11
Apenas uma atualização que, além das opções anteriores, decidi executar todos os meus pacotes de sistema nos repositórios de desenvolvimento 'testing'. Por source.listisso, deve dizer o nome do código em jessievez de squeeze. A política do Debian testingestá quase estável e os pacotes têm sido quase tão novos quanto no unstablerepositório. Estou ficando sem espaço aqui, portanto, dê uma olhada em: wiki.debian.org/DebianReleases , wiki.debian.org/StableUpdates e wiki.debian.org/StableProposedUpdates ; os dois últimos são fontes de repositório adicionais.
Daniel Sokolowski
2

Se sua seleção de pacotes estiver mais envolvida ou a instalação for repetida em várias máquinas, considere configurar um repositório privado que espelha um subconjunto dos repositórios oficiais. Isso requer um pouco de trabalho para configurar o repositório, mas a recompensa é fácil de manter, com um mínimo de configuração em cada cliente e resultados repetíveis ao executar dezenas de instalações. Acho isso útil mesmo quando apenas um ou dois pacotes estão sendo instalados e uso esse método para automatizar e manter instalações na nuvem. Um único servidor em um VPS barato pode lidar com dezenas de repositórios particulares.

Para configurar seu servidor de repositório privado:

# Install aptly.
apt-get install aptly

# Create local mirror (choose a source mirror near you).
aptly mirror create -filter="mirror-contains-no-packages" stretch-roundcube http://httpredir.debian.org/debian stretch main

# Configure filters for local mirror.
aptly mirror edit -filter="Name (% roundcube*)" stretch-roundcube

# Update local mirror.
aptly mirror update stretch-roundcube

# Drop previously published repositories and mirrors, if running these commands in a script.
aptly publish drop stretch

# Drop snapshot, if running these commands in a script.
aptly snapshot drop stretch-roundcube

# Create new snapshot.
aptly snapshot create stretch-roundcube from mirror stretch-roundcube

# Publish snapshot.
aptly publish snapshot -architectures=i386,amd64 -distribution=stretch -component=roundcube -label="Your Name" -origin="Your Name" stretch-roundcube

Em seguida, configure o servidor da Web de sua escolha para servir os arquivos do repositório estático. Possivelmente, proteja o repositório com um certificado de segurança e autenticação básica.

Para manter automaticamente seu repositório privado e obter atualizações do upstream, coloque o acima em um script e execute a partir de um trabalho cron.

Para configurar sua máquina cliente, na sua máquina cliente:

# Configure private repository without authentication.
echo 'deb http://private.repository.example.com/ stretch roundcube' > /etc/apt/sources.list.d/private.repository.example.com.list

# Configure private repository with authentication.
echo 'deb https://hostname:[email protected]/ stretch roundcube' > /etc/apt/sources.list.d/private.repository.example.com.list
apt-get install apt-transport-https

# Update.
apt-get update

# Install package.
apt-get install roundcube

Para manter sua máquina cliente e obter todas as atualizações de repositório particular, em sua máquina cliente:

# Update.
apt-get update

# Upgrade.
apt-get upgrade
Daniel Kauffman
fonte
1

Outra opção é fazer o download do pacote de origem do teste. O APT pode criar automaticamente o pacote de origem após o download. Dessa forma, seus pacotes estáveis ​​não serão afetados pelo teste de atualizações. A única desvantagem é que levará mais tempo do que apenas baixar e instalar o pacote binário.

Para configurar o APT para baixar pacotes de origem do teste, basta adicionar:

deb-src http://<your debian mirror here> testing main

Se você deseja apenas seguir os testes atuais e não os futuros, substitua "testing" pelo nome de código atual (no momento da redação deste documento, é "buster")

temy
fonte