Instalação e dependências do pacote - como evitar a instalação de bibliotecas existentes?

3

Eu sou um usuário de servidor Ubuntu relativamente novo, então estou aprendendo enquanto vou. Eu tenho um problema com um pacote de software que estou instalando (QGIS) que tem várias dependências, sendo uma delas gdal library. Independentemente do gerenciador de instalação que eu uso (apt, synaptic ou aptitude), este pacote instala o gdal versão 1.7.3, que é bastante desatualizado (a versão estável atual é 1.9.1). Eu não teria um problema com isso se eu já não tivesse compilado / compilado a última versão do gdal (eu optei por fazê-lo, então eu poderia incluir algum suporte de formato raster incomum).

Se eu digitar dpkg --list , posso ver as duas bibliotecas existentes uma ao lado da outra, mas eu nem quero a antiga. Depois de alguns ajustes eu usei synaptic e manualmente desabilitei a dependência gdal durante a instalação e então minha versão compilada do gdal 1.9.1 entrou em ação. Por que o QGIS não usaria a última versão desde o início?

Além disso, existe uma maneira no Linux de verificar se as dependências precisam ser instaladas? Ou talvez, existe uma maneira de alterar quais bibliotecas o pacote usa depois de ter sido instalado?

    
por U2ros 11.09.2012 / 21:20

2 respostas

2

Cada pacote deb tem uma lista de dependências que devem ser atendidas antes da instalação. Você pode listar as dependências do arquivo deb usando dpkg --info path_to.deb . Aqui está o exemplo:

 new debian package, version 2.0.
 size 5800810 bytes: control archive=2527 bytes.
    1301 bytes,    20 lines      control              
    3074 bytes,    41 lines      md5sums              
     721 bytes,    22 lines   *  postinst             #!/bin/sh
     637 bytes,    18 lines   *  postrm               #!/bin/sh
 Package: qgis
 Version: 1.8.0~precise1
 Architecture: i386
 Maintainer: Quantum GIS developers <[email protected]>
 Installed-Size: 10374
 Depends: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libgdal1-1.7.0, libgsl0ldbl (>= 1.9), libpq5, libproj0, libqgis1.8.0, libqt4-network (>= 4:4.5.3), libqt4-sql (>= 4:4.5.3), libqt4-svg (>= 4:4.5.3), libqt4-xml (>= 4:4.5.3), libqtcore4 (>= 4:4.8.0), libqtgui4 (>= 4:4.8.0), libqtwebkit4 (>= 2.2~2011week36), libqwt5-qt4, libspatialite3 (>= 3.0.0~beta20110817), libsqlite3-0 (>= 3.5.9), libstdc++6 (>= 4.6), qgis-providers (= 1.8.0~precise1), qgis-common (= 1.8.0~precise1)
 Recommends: qgis-plugin-globe, qgis-plugin-grass, python-qgis
 Suggests: gpsbabel
 Conflicts: uim-qt3
 Section: science
 Priority: extra
 Homepage: http://qgis.org/
 Description: Geographic Information System (GIS)
  A Geographic Information System (GIS) manages, analyzes, and displays
  databases of geographic information. Quantum GIS (QGIS) supports shape file
  viewing and editing, spatial data storage with PostgreSQL/PostGIS, projection
  on-the-fly, map composition, and a number of other features via a plugin
  interface. QGIS also supports display of various georeferenced raster and
  Digital Elevation Model (DEM) formats including GeoTIFF, Arc/Info ASCII Grid,
  and USGS ASCII DEM.

O mais importante para você é a seção "Depende" contém uma lista de pacotes e sua versão que deve ser instalada para instalar o pacote. Para cada pacote pode haver informações sobre a versão exata, versão mínima ou versão máxima.

Como você pode ver acima, qgis requer libgdal1-1.7.0 (o nome não é a versão). A versão atual deste pacote no repositório do Ubuntu é 1.7.3-6ubuntu3 (observe que a versão mínima do pacote não é fornecida!).

Quando você compila essa lib de fontes ( ./configure && make && make install ou algo parecido), você coloca binários desse pacote nos diretórios do sistema. Mas quando você instala o pacote via apt, synaptic ou aptitude eles não se importam com binários. Eles estão usando o índice de pacotes instalados (em algum lugar em /var/ ) e não sabem que você instalou essa biblioteca a partir de fontes, então eles estão instalando todas as dependências. Para fazer com que as ferramentas percebam que existe gdal no sistema, você pode preparar o pacote deb a partir do código-fonte compilado e instalá-lo usando o dpkg. Deve haver algum tutorial sobre isso no wiki do Debian. Mas mesmo quando você preparar essas ferramentas de gerenciamento de pacotes, você ainda estará procurando pelo pacote com o nome libgdal1-1.7.0 (é claro que você poderia preparar o pacote com gdal 1.9.1 e nomeá-lo libgdal1-1.7.0 , mas não é uma boa idéia Algumas mudanças de API na versão mais recente e é possível que qgis caia ou algo assim).

Por que qgis está usando o antigo gdal ?

O Ubuntu tem um longo ciclo de lançamento, por isso, quando o repositório de pacotes foi congelado, pode ser melhor, por alguns motivos, usar uma versão mais antiga deste pacote. Ou talvez não haja ninguém disposto a preparar nova versão? ;)

Existe uma maneira de alterar a lista de dependências?

Sim. Você pode baixar o pacote selecionado e empacotá-lo com a lista de dependências alterada:

mkdir tmp
dpkg -x package.deb ./tmp
dpkg -e package.deb

nano ./tmp/DEBIAN/control and change dependency list
mkdir ./build
dpkg-deb -b ./tmp ./build

Você pode fazer isso, mas há uma chance de que você tenha alguns problemas no futuro com a instalação do software devido à inconsistência na lista global de pacotes instalados.

    
por 11.09.2012 / 22:21
2

Às vezes, compilar uma versão mais nova a partir da fonte é a única solução possível para um problema, mas, como regra geral, é melhor evitá-la, a menos que seja absolutamente necessário. Ignorar o sistema de embalagem normalmente significa obter uma correção de curto prazo para muita dor a longo prazo. E se você compilar e instalar uma versão mais nova do gdal em, digamos, / usr / local, então você deve compilar o gqis também.

Uma pergunta melhor seria: "Onde posso obter um novo pacote de biblioteca gdal para o Ubuntu?" seguido por "e onde posso obter um pacote gqis para o Ubuntu compilado para usá-lo?"

A resposta a estas duas perguntas é que versões mais recentes de ambos estão empacotadas na versão 'quantal' do Ubuntu, que deve ser lançada em cerca de um mês. Atualmente, o quantal tem as seguintes versões (mas é provável que isso mude no momento em que é lançado)

link (1.7.4 + 1.7.5 ~ 20120320-1.1)
link (1.9.0-3ubuntu3)

É possível configurar o apt para que ele saiba sobre pacotes do Ubuntu Precise e do Ubuntu Quantal, mas preferir pacotes do Precise por padrão. Isso permitiria forçar as versões quantais de certos pacotes a serem instalados.

Pesquise aqui ou em sites irmãos como link para "APT Pinning" para obter detalhes sobre como fazer isso - link por exemplo.

Note que a instalação de pacotes mais novos de uma versão mais nova do Ubuntu pode fazer com que outros pacotes sejam atualizados, mesmo que você não os tenha especificado - se o pacote que você quer instalar depender de versões mais novas de outros pacotes, então maneira de satisfazer essas dependências é instalá-las também.

Outra alternativa é backport - ou seja, baixar as fontes debianizadas para libgdal1 e gqis de Quantal e recompilar os pacotes para Precise. Isso pode envolver o download e a recompilação de pacotes de origem para quaisquer outros pacotes dos quais os dois dependam (e, por sua vez, esses pacotes extras também podem ter dependências atualizadas que precisam ser recompiladas ... e assim por diante). Geralmente, é muito mais fácil retroceder pacotes como este do que usar o apt pinning.

    
por 12.09.2012 / 01:07