(Se você tiver perguntas / comentários sobre esta resposta, adicione um comentário. Ou, se você tiver um representante suficiente, poderá me enviar um ping no chat.)
Instalando diretamente pacotes binários de uma versão mais recente do Debian - não a resposta.
Suponha que você esteja executando alguma versão de uma distribuição baseada no Debian. Você deseja uma versão mais recente de um pacote do que está disponível para você. A primeira coisa que todo iniciante tenta fazer para instalar o pacote binário diretamente na sua versão do Debian. Isso pode ou não funcionar, dependendo da versão em execução e da quantidade de versões mais recentes do pacote. Em geral, esse procedimento não funcionará bem.
Considere, por exemplo, o caso em que um está tentando instalar um pacote binário de testing / unstable diretamente no stable. Provavelmente, isso não vai correr bem, a menos que os testes / instáveis estejam muito próximos da estabilidade naquele momento. O motivo tem a ver com a natureza de uma distribuição binária baseada em Linux como o Debian. Esses sistemas operacionais dependem muito de bibliotecas compartilhadas e essas dependências geralmente são muito dependentes da versão; frequentemente muito mais do que o necessário. Atualmente, o Debian não tem uma boa maneira de tornar as dependências da versão "restritas" - uma maneira abreviada de dizer que a dependência da versão é exatamente tão restritiva quanto necessária.
O que isso significa para o usuário? Suponha, por exemplo, que você esteja tentando instalar o say slrn
do Debian instável para o Debian estável. Como isso seria?
# apt-get install slrn/unstable
Reading package lists... Done
Building dependency tree
Reading state information... Done
Selected version '1.0.1-10' (Debian:testing [amd64]) for 'slrn'
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
slrn : Depends: libc6 (>= 2.15) but 2.13-38+deb7u1 is to be installed
E: Unable to correct problems, you have held broken packages.
Apesar do erro produzido por apt
, não há pacotes quebrados aqui. Então, o que deu errado? O problema é que a versão em libc6
que o unstable slrn
foi compilado é diferente (e tem um número de versão mais alto) do que a versão disponível no Debian stable. ( libc6
é a biblioteca GNU C. A biblioteca C é central para qualquer sistema operacional semelhante ao Unix, e a biblioteca GNU C é a versão que os sistemas operacionais baseados em Linux geralmente usam.)
Portanto, o instável slrn
requer uma versão numerada maior do libc6
que a disponível para estável. Observe que, como um pacote foi compilado em uma versão superior da biblioteca, não requer necessariamente uma versão superior dessa biblioteca, mas geralmente é o caso.
A sintaxe
apt-get install slrn/unstable
significa: use o instável, slrn
mas para todos os outros pacotes use apenas as versões do stable. Para ser mais preciso, ele usa números de prioridade. Veja man apt_preferences
para detalhes.
Pode-se também fazer
apt-get install -t unstable slrn
É muito mais provável que funcione, mas geralmente você não deseja fazê-lo. Por quê?
Isso significa: tratar temporariamente todos os pacotes instáveis em pé de igualdade com os pacotes no stable. Portanto, isso puxará as slrn
dependências da instável da instável se elas tiverem um número de versão mais alto e geralmente serão. Isso geralmente inclui a biblioteca GNU C por razões já explicadas. Agora, essa abordagem geralmente será "bem-sucedida", na medida em que as dependências serão satisfeitas por definição (a unstable slrn
tem dependências que são satisfeitas na instável), mas você acaba com uma mistura de pacotes que de repente são forçados a executar com versões de bibliotecas diferente do que eles foram construídos. Provavelmente isso não vai acabar bem.
A resposta é ... BACKPORTS!
Então, qual é a maneira correta de fazer isso? É para reconstruir as fontes Debian de versões mais recentes no seu sistema, popularmente conhecidas como "backporting". Considere os seguintes casos:
Existem fontes semioficiais / oficiais de pacotes adicionais disponíveis para essa versão do Debian.
O primeiro lugar a procurar é o Backports Debian , que é o site oficial dos backports Debian.
Para um exemplo concreto:
Adicione a linha de backports apropriada para seu release e atualização para encontrar os novos pacotes e instale algo explicitamente a partir de backports (porque os backports são desativados por padrão).
echo "deb http://ftp.debian.org/debian stretch-backports main" | sudo tee /etc/apt/sources.list.d/stretch-backports.list
sudo apt-get update
sudo apt-get install -t stretch-backports git
Isso obterá a versão estável mais recente do git, que possui recursos úteis mais recentes que o estável incluído no stretch (por exemplo, 'include', que permite combinar vários arquivos de configuração ou alterar seu nome de usuário para ~ / work / projects / vs ~ / personal / projetos /).
Outro lugar para se olhar são os vários PPAs dos mantenedores do Ubuntu. Você pode fazer uma pesquisa por "nome do pacote PPA".
Não há versões mais recentes do pacote disponíveis para essa versão do sistema operacional, mas existem versões mais recentes disponíveis para versões / lançamentos mais recentes do sistema operacional. Este é o caso padrão para backporting.
Backporting significa que você reconstrói os fontes Debian a partir de uma versão posterior do Debian na versão em execução. Este procedimento pode ser fácil ou envolvido e difícil, dependendo da embalagem. Aqui está um resumo de como fazer isso.
Um breve tutorial de backporting para iniciantes
Para concretização, vou assumir que você está executando o atual estável Debian, atualmente chiado. Vou usar o pacote slrn
como exemplo.
Primeiro, observe que todos os arquivos de empacotamento da Debian estão no debian/
subdiretório do diretório de origem.
O primeiro passo é verificar se uma versão mais recente está disponível. Você pode fazer isso usando apt-cache policy
.
apt-cache policy slrn
slrn:
Installed: 1.0.0~pre18-1.3
Candidate: 1.0.0~pre18-1.3
Version table:
1.0.1-10 0
50 http://debian.lcs.mit.edu/debian/ testing/main amd64 Packages
50 http://debian.lcs.mit.edu/debian/ unstable/main amd64 Packages
*** 1.0.0~pre18-1.3 0
500 http://debian.lcs.mit.edu/debian/ wheezy/main amd64 Packages
100 /var/lib/dpkg/status
1.0.0~pre18-1.1 0
500 http://debian.lcs.mit.edu/debian/ squeeze/main amd64 Packages
Gostaríamos de fazer o backport 1.0.1-10
.
PASSO 1:
Nota: verifique se as deb-src
linhas da versão de origem que você deseja baixar aparecem na sua /etc/apt/sources.list
. Por exemplo, se você deseja baixar a versão instável slrn
, precisará da deb-src
linha instável ou ela não funcionará. Observe que você não precisa das deb
linhas correspondentes para baixar as fontes, embora apt-cache policy
use essas informações; portanto, se você não tiver as deb
linhas correspondentes , apt-cache policy
não mostrará as versões relevantes. Se você possui as deb
linhas, não se esqueça de fixar as versões mais recentes usando uma entrada /etc/apt/preferences
ou semelhante. Uma entrada /etc/apt/preferences
como esta (para instável) funcionará, por exemplo.
Package: *
Pin: release a=unstable
Pin-Priority: 50
Se você adicionar linhas /etc/apt/sources.list
, não se esqueça de executar apt-get update
depois.
Faça o download das fontes para slrn
. Um bom lugar é /usr/local/src/slrn
.
apt-get source slrn=1.0.1-10
PASSO 2:
Altere ligeiramente o número da versão, para distinguir seu backport da versão upstream. Executar dch -i
, que adicionará automaticamente uma entrada ao debian/changelog
arquivo. Em seguida, altere a entrada para algo parecido com isto, por exemplo.
slrn (1.0.1-10.username) UNRELEASED; urgency=low
* Backport to wheezy.
-- User <user@domain> Sun, 02 Feb 2014 23:54:13 +0530
ETAPA 3:
Tente criar as fontes. Se os pacotes necessários para a construção não estiverem disponíveis, a tentativa falhará. Mude o diretório para o diretório de origem. Use debuild
na devtools
embalagem.
cd slrn-1.0.1/
debuild -uc -us
Se as dependências de compilação forem satisfeitas, as fontes criarão e produzirão algumas debs no nível acima do diretório de origem; neste caso /usr/local/src/slrn
.
PASSO 4:
Suponha que as dependências de construção não sejam satisfeitas. Então você precisa tentar instalar as dependências de compilação. Isso pode ou não funcionar, pois as dependências podem não estar disponíveis para sua versão ou, se disponíveis, podem não estar disponíveis na versão correta.
Nota: Infelizmente, não é incomum que os pacotes Debian exijam versões de dependências de compilação maiores que o necessário. Não existe uma maneira automatizada no Debian de verificar isso, e freqüentemente os mantenedores de pacotes não se importam desde que funcionem na versão / release correspondente. Portanto, adote uma atitude cética em relação às versões de dependência e use o bom senso. Por exemplo, pacotes amplamente usados, como Python e as ferramentas GNU, não dependerão de versões muito específicas de suas dependências, independentemente do que o empacotador Debian lista.
De qualquer forma, você pode tentar instalá-los fazendo
apt-get build-dep slrn=1.0.1-10
Se isso der certo, tente criar o pacote novamente (PASSO 2). Se falhar, será necessário mais trabalho. Observe que debuild
analisa as dependências de compilação no debian/control
arquivo e você pode alterá-las se necessário. Então, vamos falar sobre isso agora. Aqui estão as dependências de compilação para slrn.
Build-Depends: debhelper (>=9), libslang2-dev, libuu-dev,
exim4 | mail-transport-agent, libgnutls-openssl-dev, po-debconf, autoconf,
libcanlock2-dev, autotools-dev, dpkg-dev (>= 1.16.0), chrpath, dh-autoreconf, inn2-inews
Uma alternativa ao uso apt-get build-dep
é instalá-los manualmente, fazendo
apt-get install debhelper libslang2-dev ...
Se você começar a alterar esses valores no arquivo de controle, deverá mudar para uma instalação manual, pois apt-get build-dep
não fará mais a coisa certa.
Não há versões em pacote das versões mais recentes do software disponíveis. As opções disponíveis são empacotar a versão mais recente.
Em muitos casos, é possível reutilizar o pacote de versões anteriores do software em conjunto com fontes mais novas. Essa abordagem pode ter problemas, principalmente os patches aplicados a versões anteriores do software, que podem não se aplicar aqui; portanto, pode ser necessário ressincronizá-los com as fontes. O formato de origem 3.0 (quilt) que agora está se tornando padrão usa o quilt e os patches estão localizados no debian/patches
diretório
No entanto, uma discussão detalhada dessas questões está fora do escopo deste post.