Criando e instalando pacotes da unstable

0

Nota : para tornar essa questão mais concreta, usarei a instalação do pacote rustc como exemplo. No entanto, a questão pretende aplicar-se aos pacotes em geral.

Eu estou em um sistema usando o Debian Stable. Eu quero instalar o pacote rustc da distribuição Unstable (não existe no Stable, por enquanto). Eu adiciono as fontes Unstable ao meu arquivo /etc/apt/sources.list

# Unstable
deb http://ftp.debian.org/debian unstable main contrib non-free
deb-src http://ftp.debian.org/debian unstable main contrib non-free

e execute apt update , seguido por apt install rustc . O APT se recusa a instalar devido a problemas de dependência, como esperado.

The following packages have unmet dependencies:
 rustc : Depends: libstd-rust-dev (= 1.12.0+dfsg1-1) but it is not going to be installed
         Depends: binutils (>= 2.26) but 2.25-5 is to be installed
         Recommends: rust-gdb but it is not going to be installed or
                     rust-lldb but it is not going to be installed

O único meio que me ocorre de instalar o pacote nos repositórios é construí-lo a partir da fonte. Eu leio esta página no wiki do Debian, o que sugere que um pacote do Unstable pode ser compilado com este procedimento:

  1. adicione uma linha deb-src para sid ao seu sources.list
  2. apt-get update
  3. apt-get build-dep PACKAGE_NAME
  4. apt-get -b source PACKAGE_NAME

Mas o passo 3. falha com dependências não atendidas.

Então, minha pergunta é se é possível criar pacotes a partir do Unstable e instalá-los em um sistema Stable. Se sim, como isso seria feito? Eu imagino que deve haver uma maneira de construir / baixar todas as dependências e incorporá-las nos binários finais do pacote que eu quero. E então instale esse pacote.

    
por Gonçalo Ribeiro 07.10.2016 / 11:30

2 respostas

3

Primeiro de tudo, adicionar instável a um sistema estável como você fez é uma má idéia realmente : as ferramentas de distribuição considerarão os pacotes instáveis como destinos de atualização válidos e, mesmo que você seja cuidadoso, normalmente, você precisará atualizar uma biblioteca amplamente usada, e acabará com a maioria de seus pacotes de rastreamento instável em pouco tempo. (Use pinning se você realmente precisa.)

Em relação à sua pergunta, em geral, é possível criar um pacote de fontes instáveis no stable, seguindo o procedimento para o qual você vincula . Como você indica, isso pode envolver dependências de back porting ou adaptar o pacote de origem para que ele possa ser construído estável. Se a etapa apt-get build-dep falhar, essa é a razão: algumas das dependências de compilação do pacote de origem instável não podem ser satisfeitas na estabilidade. Você precisa repetir esse processo até ter feito o back-port de tudo o que é necessário, instalando os pacotes gerados durante o processo. Para pacotes populares, vale a pena registrar um bug para solicitar um backport oficial.

Observe que quando apt-get build-dep falhar, você precisará instalar as dependências de compilação manualmente. dpkg-buildpackage dirá o que está faltando, o que é útil se você estiver transferindo dependências de construção: à medida que você adiciona dependências de compilação, a lista de pacotes ausentes relatada por dpkg-buildpackage diminuirá e quando parar reclamando você sabe que está feito. Isso também leva em consideração quaisquer alterações feitas nas dependências de compilação em debian/control (que apt-get build-dep não fará).

Para rustc as coisas são muito mais complicadas: rustc precisa de si para construir, por isso precisa ser "bootstrapped". Isso foi feito há alguns meses na instável, com a colaboração dos mestres de FTP; não é algo fácil de replicar de maneira limpa em um sistema estável.

Então, para obter rustc instalado em um sistema estável, aqui está como eu faria ...

  1. Back-port binutils (com DEB_BUILD_OPTIONS=nocross,nomult,nogold para evitar a criação do conjunto de ferramentas cruzadas e gold , que não pode ser criado com g++ do Jessie).
  2. Instale libllvm3.8 dos backports de Jessie.
  3. Instale o libstd-rust-dev , libstd-rust-1.12 e rustc da instável.
por 07.10.2016 / 11:51
0

Eu leio sua nota, mas caso você realmente queira rustc, você pode tentar instalar a versão testing / stretch: link

O teste / extensão não é tão novo quanto a instável, mas é definitivamente mais recente que estável.

Você pode tentar obter o código-fonte com o apt-get source e modificar o arquivo ./debian/control para não requerer versões específicas, mas não tenho certeza se ele será capaz de construir. Além disso, é mais fácil sudo dpkg-buildpackage -B -us -uc em vez dos outros métodos listados nesse wiki.

    
por 07.10.2016 / 11:50