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:
- 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.
- 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.
- 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.
Respostas:
(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?Apesar do erro produzido por
apt
, não há pacotes quebrados aqui. Então, o que deu errado? O problema é que a versão emlibc6
que o unstableslrn
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 dolibc6
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
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. Vejaman apt_preferences
para detalhes.Pode-se também fazer
É 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 unstableslrn
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:
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).
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".
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
.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ávelslrn
, precisará dadeb-src
linha instável ou ela não funcionará. Observe que você não precisa dasdeb
linhas correspondentes para baixar as fontes, emboraapt-cache policy
use essas informações; portanto, se você não tiver asdeb
linhas correspondentes ,apt-cache policy
não mostrará as versões relevantes. Se você possui asdeb
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.Se você adicionar linhas
/etc/apt/sources.list
, não se esqueça de executarapt-get update
depois.Faça o download das fontes para
slrn
. Um bom lugar é/usr/local/src/slrn
.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 aodebian/changelog
arquivo. Em seguida, altere a entrada para algo parecido com isto, por exemplo.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
nadevtools
embalagem.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
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 nodebian/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.Uma alternativa ao uso
apt-get build-dep
é instalá-los manualmente, fazendoSe 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.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órioNo entanto, uma discussão detalhada dessas questões está fora do escopo deste post.
fonte
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/local
usostow
, 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:Faça
.tar
o download do arquivo etc. para/usr/local/src/
.Crie um arquivo
/usr/local/packages/some_software
que 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).Descompacte o conteúdo do
.tar
arquivo em/usr/local/tmp/some_software
.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á,cd
neste diretório, vejaREADME
,INSTALL
etc.Na maioria dos casos, há um script autotools
configure
no pacote. Ligue./configure --prefix /usr/local/stow/some_software-version
para que os arquivos sejam instalados neste subdiretório. Caso contrário, leiaMakefile
e descubra como definir o caminho para os arquivos instalados.Compile com
make
.Instale com
make install
.cd /usr/local/stow
, entãostow some_software-version
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
...-dev
pacotes corretos do Debian. Ougcc
pode reclamar de coisas que uma versão diferente dagcc
qual 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.fonte
stow
criar pacotes Debian? Na página de manual, não parece./usr/local
é muito mais simples estow
ajuda 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.