Como posso instalar versões mais recentes do software do que o Debian fornece?


26

Suponha que eu queira uma versão mais recente do software que a disponível para a minha versão atual de um sistema operacional, o que posso fazer?

Casos a considerar:

  1. Existem fontes semioficiais / oficiais de pacotes adicionais disponíveis para essa versão do sistema operacional. Por exemplo, backports.org para Debian ou PPAs para Ubuntu.
  2. 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 mais recentes do sistema operacional. Este é o caso padrão para backporting.
  3. 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.

Por Vamos compilar uma lista de perguntas e respostas canônicas, pois isso serve como um local para colocar respostas canônicas para o seguinte. As respostas provavelmente devem ser feitas no wiki da comunidade.


Isso é altamente específico da distribuição. Melhor fazer uma pergunta por distribuição.
Gilles 'SO- stop be evil'

2
@ Gilles A questão não é específica da distribuição. Eu acho que seria melhor ter uma pergunta, com respostas para diferentes distribuições.
Faheem Mitha

Um exemplo do que funcionou e não funcionou: Para o Debian 8, eu queria o MySQL 5.6. (Mas normalmente o MySQL 5.5 é instalável apenas para o Debian 8. Eu precisava da versão 5.6 para comparabilidade com outras coisas que estava fazendo.) Tentei instalar o backport 5.6, mas estava quebrado. Algum tipo de arquivo duplicado sendo carregado na mensagem de erro. Eu relatei, mas o que fazer? A solução: eu descobri que você poderia baixar o MySQL 5.6 especificamente para o Debian 8 diretamente do site MySQL. Isso funcionou, MAS ... não deixe de ler o comentário da SOLUÇÃO na parte inferior [this] ( dev.mysql.com/doc/refman/5.6/en/linux-i
Visualização elíptica

Respostas:


33

(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 slrndo 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 libc6que o unstable slrnfoi 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 slrnrequer uma versão numerada maior do libc6que 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, slrnmas 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_preferencespara 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 slrndependê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 slrntem 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 slrncomo 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-srclinhas 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-srclinha instável ou ela não funcionará. Observe que você não precisa das deblinhas correspondentes para baixar as fontes, embora apt-cache policyuse essas informações; portanto, se você não tiver as deblinhas correspondentes , apt-cache policynão mostrará as versões relevantes. Se você possui as deblinhas, não se esqueça de fixar as versões mais recentes usando uma entrada /etc/apt/preferencesou semelhante. Uma entrada /etc/apt/preferencescomo 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 updatedepois.

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/changelogarquivo. 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 debuildna devtoolsembalagem.

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 debuildanalisa as dependências de compilação no debian/controlarquivo 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-depnã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/patchesdiretório

No entanto, uma discussão detalhada dessas questões está fora do escopo deste post.


Isso é realmente genérico de distribuição (apenas que os repositórios de código para itens mais recentes podem ser chamados de maneira diferente, ou você precisará obter itens de lugares especiais). Verifique os guias da sua distribuição.
vonbrand

2

Uma maneira que sempre funciona, não apenas no Debian, é compilar você mesmo o software necessário. (Eu venho fazendo isso há anos no Debian, tanto quando eu precisava de uma versão mais recente que estava disponível quanto quando o software não era fornecido).

Eu armazeno pacotes compilados localmente em /use/localuso stow, o que me permite armazenar todos os arquivos relacionados a um pacote em uma árvore de subdiretórios e, em seguida, criar links simbólicos para essa árvore. Isso facilita o gerenciamento de pacotes compilados: os arquivos instalados não colidem com os arquivos fornecidos pelo Debian, e eu posso remover um pacote com um comando.

As etapas para compilar e instalar um pacote, por exemplo some_software, geralmente são uma variante do seguinte:

  1. Faça .taro download do arquivo etc. para /usr/local/src/.

  2. Crie um arquivo /usr/local/packages/some_softwareque descreva onde eu baixei o software, o que ele faz, qual versão é e que contém anotações sobre o que eu precisava fazer para compilar (veja abaixo).

  3. Descompacte o conteúdo do .tararquivo em /usr/local/tmp/some_software.

  4. Como alternativa, se estiver compilando a partir de um repositório, verifique o repositório em um subdiretório adequado (por exemplo /usr/local/git/some_software) e compile lá,

  5. cdneste diretório, veja README, INSTALLetc.

  6. Na maioria dos casos, há um script autotools configureno pacote. Ligue ./configure --prefix /usr/local/stow/some_software-versionpara que os arquivos sejam instalados neste subdiretório. Caso contrário, leia Makefilee descubra como definir o caminho para os arquivos instalados.

  7. Compile com make.

  8. Instale com make install.

  9. cd /usr/local/stow, então stow some_software-version

  10. Teste se funciona.

Freqüentemente, a compilação não funciona na primeira tentativa: O pacote pode precisar de bibliotecas e os arquivos de inclusão correspondentes, portanto é necessário instalar os ...-devpacotes corretos do Debian. Ou gccpode reclamar de coisas que uma versão diferente da gccqual o autor do pacote usado não se queixa. Às vezes, é preciso ler o código e corrigi-lo, mas isso não acontece com muita frequência.


A intenção desta pergunta, embora talvez isso não estivesse claro, era descrever como instalar pacotes de software para o Debian. Talvez eu deva esclarecer a questão. Será que stowcriar pacotes Debian? Na página de manual, não parece.
Faheem Mitha

O @FaheemMitha Stow não conhece os pacotes Debian. Ele gerencia apenas links simbólicos de um conjunto de diretórios de instalação separados para um único diretório.
Kusalananda

@FaheemMitha: Se você deseja transformar um software auto-compilado em um pacote Debian , você deve empacotá-lo, como um mantenedor de pacotes Debian. Mas isso é muito problemático se você for o único usuário, instalá-lo /usr/localé muito mais simples e stowajuda a gerenciar os arquivos armazenados lá. Ou, de outra forma: o software não precisa estar em um pacote Debian para usá-lo no Debian.
dirkt

Há uma grande vantagem para empacotar software como um pacote Debian, mesmo apenas para uso local: se você descrever as dependências corretamente, ter um pacote instalado vai garantir as dependências permanecem instalados ...
Stephen Kitt

@StephenKitt: Se o software de empacotamento do curso corretamente como pacote Debian é a solução superior. A desvantagem é que tem que investir o tempo para empacotá-lo corretamente ...
dirkt
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.