Como manter meu sistema Debian com os pacotes mais recentes?

9

A maior parte do "Software" que instalo no meu servidor precisa ser a versão mais recente (Java, Tomcat, MySQL-Cluster). Portanto, nunca tive a sorte de haver pacotes Debian pré-criados (na distribuição) disponíveis. Portanto, todo o software é baixado da página do projeto e construído a partir da fonte.

Agora, minha pergunta é: qual é a maneira correta de instalá-los no meu sistema Debian?

Meu principal problema é que, ao instalá-los diretamente da fonte, eles não são incluídos no gerenciamento de pacotes (com o aptitude). O Checkinstall parece não ser realmente sugerido para ser usado e o equiv também tem desvantagens. É a única maneira correta de lidar com isso criando meus próprios pacotes com dh_make e dpkg-buildpackage?

O que você está fazendo se você sempre precisa da versão mais recente?

Braiam
fonte

Respostas:

10

Deseja pacotes mais recentes é um problema comum em qualquer sistema operacional. O ciclo de lançamento do Debian teve uma média de 2 anos nos últimos anos; portanto, no final deste ciclo, talvez seja uma questão mais premente. Uma maneira de atenuar isso é avançar para o teste no final do ciclo de lançamento estável, quando a próxima versão estiver quase estável. Não está claro a partir da pergunta se se trata de estável em geral, sobre testes e / ou instável também. Independentemente disso, ter a versão mais recente pode ser um problema, mesmo que esteja executando instável, pois a versão mais recente pode ainda não estar empacotada. Os desenvolvedores / empacotadores Debian são voluntários, então eles podem ficar entediados ou ocupados com outras coisas, com o resultado de que o pacote definha.

Por simplicidade e concretude, suponho que o plano a seguir é fazer o backport de um pacote para estável, mas ele se aplica de maneira mais geral. Então, aqui está o que eu faço se quiser uma versão mais recente do software que não esteja presente em estável, em uma ordem aproximada.

  1. Procure o pacote nos Backports da Debian . Às vezes, você pode encontrar um pacote recente o suficiente para satisfazer seus propósitos. No entanto, geralmente esses pacotes estão desatualizados em comparação com a versão em instável, experimental ou upstream.

  2. Tente instalar o pacote diretamente do teste, instável ou experimental. Se o stable não tiver divergido muito da versão em que você está tentando instalar, isso poderá funcionar. Você saberá que essa abordagem é ruim se o sistema começar a tentar instalar ou atualizar pacotes básicos a partir da versão mais recente. Suponha que você esteja tentando instalar a partir do instável, depois

    apt-get install packagename/unstable
    

    é a primeira coisa a tentar. Com as versões do apt in stable, isso geralmente falha, pois requer outros pacotes da instável, e esse encantamento apenas aumenta a preferência de packagenamesuficientemente alta para que seja instalado na instável. Se você não entender o que isso significa, vá embora e leia man apt_preferences. Continue adicionando dependências da instável, certificando-se de que ele não esteja tentando atualizar os pacotes básicos. Por exemplo, se ele começar a tentar atualizar a libc6 ou X ou KDE ou Gnome, aborte imediatamente. Geralmente, é bom se tentar atualizar outros pacotes do mesmo pacote de origem, pois geralmente eles são fortemente acoplados. Para ver de que pacote fonte um pacote binário depende, faça

    apt-cache showsrc packagename
    

    Como muitas coisas dependem da biblioteca GNU C (libc6), isso costumava ser um problema. Mais recentemente, a API parece ter se estabilizado; portanto, agora é mais possível evitar a necessidade de atualizá-la. Se um pacote satisfizer suas dependências de tempo de execução em estável, mas ainda não funcionar corretamente, registre um bug. Se o empacotador diz que não é um bug, eles estão errados. :-)

  3. Faça o backport do pacote você mesmo de teste, instável ou experimental.

    Como mencionado acima, os backports são uma opção, mas geralmente esses pacotes estão desatualizados em comparação com a versão em instável, experimental ou upstream.

    Isso geralmente pode exigir uma coisa do tipo de loop de compilação de dependência recursiva. Você primeiro precisa obter as dependências de compilação com

    apt-get build-dep packagename    
    

    Se isso falhar, porque uma das dependências não é recente o suficiente, você precisará fazer o backport dessa dependência primeiro. Isso pode sair de controle. Normalmente desisto se tiver que lidar com mais de 2 níveis de recursão. Observe, no entanto, que as dependências reais não são necessariamente tão rígidas quanto declaradas, ie. uma versão mais antiga pode funcionar. O empacotador geralmente não tenta encontrar a versão mais antiga de uma dependência de compilação (ou, na verdade, tempo de execução) que funcionará.

  4. Verifique a disponibilidade de pacotes do upstream correspondente. Idealmente, eles corresponderiam à sua versão de distribuição, mas você também poderá reconstruí-los, se necessário.

  5. Crie pacotes para a versão do software mais recente que os pacotes mais recentes em testing / unstable / experimental. Isso pode ser relativamente desafiador, mas ainda às vezes surpreendentemente factível. A primeira coisa a observar é que, se você está tentando empacotar uma versão mais recente de um pacote que já esteja no Debian, você já está começando com uma grande vantagem, a saber, que você possui o pacote existente para trabalhar. Apenas faça

    apt-get source packagename
    

    e apt-getfará o download do pacote fonte correspondente, incluindo o subdiretório debian onde o empacotamento está. Observe ainda que hoje em dia, esse empacotamento geralmente vive dentro de algum repositório de controle verson (o git parece popular com o Debian) e o stable apt (atualmente 0.8.10.3 ) mostra-lhe onde é isso quando você invoca apt-get source. Você deve observar isso, porque os empacotadores podem ter versões mais recentes da embalagem do que corresponde a qualquer pacote liberado. Por exemplo.

    $ apt-get source mercurial
      Reading package lists... Done
      Building dependency tree       
      Reading state information... Done
      NOTICE: 'mercurial' packaging is maintained in the 'Svn' version control system at:
      svn://svn.debian.org/python-apps/packages/mercurial/trunk
    

    Como alternativa, você pode simplesmente usar

    apt-cache showsrc mercurial | grep Vcs
    

    para listar o repositório.

    Se o pacote estiver desatualizado, talvez seja necessário fazer modificações no
    pacote, atualizar os patches aplicados, mas ainda assim geralmente é um bom ponto de
    partida. O Debian parece estar no processo de padronizar o gerenciamento de pacotes no
    quilt pelo formato dpkg-source 3.0 (quilt) , de modo que ajuda na atualização de patches.

    Concluirei com um exemplo real de como suportei o pacote Debian de pgf . A última versão empacotada do pgf era 2.00 em 2008 e, desde então, a 2.10 foi lançada. Veja a discussão em Atualize para a versão estável mais recente do pgf (2.10) e meu bug de acompanhamento com um patch, pgf: patches, no pacote Debian 2.0 . Como se viu, o pacote Debian do pgf era muito simples, e eu apenas tive que mudar uma linha no pacote 2.10 para fazê-lo funcionar. Acabei por reprimir todas as queixas lintianas também, mas isso era estritamente opcional.

Faheem Mitha
fonte
A última frase do primeiro parágrafo pode ser enganosa. Por favor, deixe claro que o problema ocorre apenas algumas vezes . A maneira como você coloca faz parecer que os DDs geralmente são assim.
tshepang
@Tshepang: Bom ponto. Está tudo bem agora?
Faheem Mitha
Sim, muito melhor.
tshepang
5

Você certamente pode criar seus próprios pacotes, e isso funcionará. No entanto, eu recomendaria o uso de backports primeiro, se o que você quiser estiver disponível lá.

Os backports são mantidos pelo Debian e você recebe atualizações de segurança para eles.

bahamat
fonte
3

Construir seus próprios pacotes é o caminho a percorrer (IMHO). Dependendo da idade da versão do pacote Debian e do que mudou, isso pode ser tão fácil quanto substituir o nome do arquivo tarball de origem na descrição do pacote e, na pior das hipóteses, você ainda pode usá-lo como modelo para sua própria versão.

Sven
fonte
1

O que você está fazendo se você sempre precisa da versão mais recente?

  1. Como já mencionado , use backports.

  2. Apenas um pequeno subconjunto de pacotes Debian é suportado, então sugiro que você use o Debian Testing . Oferece um bom equilíbrio entre estabilidade e tempo recente e, de certa forma, é como uma distro contínua.

  3. Se você é um pouco mais ousado, use o Debian Unstable . Alegou ser razoavelmente estável. Alguns chegam a afirmar que é mais estável do que os lançamentos "estáveis" de outras distros. De qualquer forma, o Unstable é o local onde as novas versões dos pacotes normalmente chegam. Eles normalmente ficam lá por cerca de 10 dias, para permitir o teste, antes de migrar para o Testing.

  4. Mesmo usando esses dois, você ainda pode não ter as versões mais recentes. Nesse caso, dê uma olhada no Debian Experimental . É normalmente usado quando os novos pacotes são muito perturbadores para os arquivos normais (Instável e Teste).

  5. Se o Experimental ainda não possui versões de software suficientes, consulte os PPAs do Ubuntu . Eu já vi versões de software mais recentes do que o que falta nos arquivos acima. Use-o com cuidado, pois o Ubuntu não é 100% compatível com o Debian (mas, na maioria dos casos, não deve haver problemas).

  6. Se o acima falhar, acho que apenas crie seus próprios pacotes, como mencionado .

tshepang
fonte
Pessoas que dizem que a instabilidade do Debian é mais estável do que a de outras distros estão brincando na melhor das hipóteses. Mudanças instáveis ​​todos os dias, estável é um repositório fixo. Instável não significa que irá travar, mas significa que os desenvolvedores fazem muitas alterações nos pacotes. Estável significa que foi lançado e apenas as correções de segurança serão adicionadas. Eu nunca tive acidentes estranhos correndo instáveis. Eu vi problemas de quebra de pacotes e dependência após a atualização, cuidado ;-) Como tudo isso se compara aos lançamentos "estáveis" de outras distros está além de mim. Não há "mais estável" neste contexto. Isso muda ou não.
Arjan Drieman
@ArjanDrieman: na verdade, essas pessoas não estão brincando, e nesse contexto estão se referindo a ser mais à prova de falhas.
tshepang
Eles ainda estão brincando, na melhor das hipóteses. Eu realmente vi pessoas brincando sobre isso. Uma chama de micro distribuição ;-) Eu usei algumas distros ao longo do tempo e nunca tive falhas estranhas executando nenhuma das outras pessoas. As pessoas que dizem isso com seriedade não podem apoiar pesquisas e estatísticas. Isso pode ser ignorância, arrogância, preconceito, qualquer coisa ... mas isso é melhor do que uma piada? Você pode me dizer quem são esses "Alguns" misteriosos ?, para que eu possa pedir sua pesquisa? "Alguns chegam a ir tão longe" ... essas são palavras de doninha. O que você gostaria em uma resposta, fatos ou opinião popular e afirmações ambíguas?
Arjan Drieman
11
@ Arjan Drieman: Na verdade, eu concordo instável, pode 'às vezes' viver de acordo com seu nome. Você troca a estabilidade por se aproximar do limite, qualquer um que afirme que não é esse o caso é falso na melhor das hipóteses. No geral, é surpreendentemente estável, mas a estabilidade não é a maior prioridade para os instáveis. Eu também tendem a concordar com você, no que diz respeito às palavras "escorregadias". É quase um mecanismo de defesa por aqui, pois qualquer declaração absoluta / direta é imediatamente atacada.
JM Becker