como eu verifico se (manualmente) o software de atualização quebrará o software existente?

3

Como exemplo, digamos que eu queira atualizar o sqlite3. A versão que eu tenho depois (apt-get) atualizando e atualizando é 3.7.13. A versão mais atual é a 3.7.14. Se eu instalar a versão mais atual a partir do código-fonte, posso de alguma forma saber que não quebrará o software existente neste computador? Existe alguma lista de qual software depende de qual outro software?

Não é realmente necessário com o sqlite3, mas eu ainda quero saber em geral.

Estou executando o debian wheezy.

    
por anonymous 10.12.2012 / 01:37

2 respostas

2

Compatibilidade binária - ABIs e APIs

Para entender por que as atualizações podem ou não interromper o software existente em sua máquina, você deve ter uma percepção vaga da ABI s e API s. Consulte esta questão relacionada no StackOverflow para obter mais informações.

Controle de versão da biblioteca compartilhada

O software geralmente é lançado com pelo menos números de versão maiores e menores. Eu li que, geralmente, qualquer incompatibilidade ABI só deve ser introduzida juntamente com uma mudança no número da versão principal. Então, se você está atualizando entre versões secundárias, geralmente deve ser seguro instalar apenas a nova versão sobre a antiga.

As bibliotecas compartilhadas instaladas devem ter um número de versão anexado ao nome do arquivo e, freqüentemente, isso difere do número da versão release . Outros aplicativos, dependendo da biblioteca compartilhada, serão vinculados ao criar o código-fonte. O binário resultante deve então usar o linker dinâmico para procurar a biblioteca compartilhada correta, identificada pelo seu número de versão major . (Isso provavelmente é dependente do vinculador usado e provavelmente há uma opção ld , que permite que você especifique a versão secundária.)

libsqlite3

Usando libsqlite3-0 (3.7.13-1) como exemplo, tenho um arquivo de biblioteca compartilhada e dois links simbólicos apontando para essa biblioteca:

> ls -l /usr/lib/x86_64-linux-gnu/libsqlite3.so*
lrwxrwxrwx 1 root root     19 Jun 14 14:05 /usr/lib/x86_64-linux-gnu/libsqlite3.so -> libsqlite3.so.0.8.6
lrwxrwxrwx 1 root root     19 Jun 14 14:05 /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 -> libsqlite3.so.0.8.6
-rw-r--r-- 1 root root 692984 Jun 14 14:05 /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6

Então, como saber se uma biblioteca ou um executável foi vinculado a essa biblioteca e de qual versão ela depende?

No Linux, use:

'ldd <filename>'

No OS X:

'otool -L <filename>'

Por exemplo, vamos ver qual versão do módulo sqlite do libsqlite3 Python precisa funcionar.

> ldd /usr/lib/python2.7/lib-dynload/_sqlite3.so | grep sqlite
        libsqlite3.so.0 => /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007fe32872c000)

Portanto, ele precisa apenas do link simbólico numerado da versão principal e não da biblioteca compartilhada totalmente nomeada e numerada. Atualizações então, devem apenas atualizar os links simbólicos libsqlite3.so [.0] para apontar para a nova biblioteca compartilhada.

Criando um libsqlite de ponta a partir da fonte criaria, esperamos, uma biblioteca compartilhada com o mesmo número de versão principal. Se não, você pode sempre sobrescrever o link simbólico e apontá-lo para a versão desejada, testar e reverter para os pacotes do sistema, se / quando necessário.

Aptidão

Como você está usando Debian, eu pensei em mencionar também que aptitude permite que você veja "Pacotes que dependem de libsqlite3-0 (267)" (e o mesmo para qualquer outro pacote também). É claro, se você compilou muitos aplicativos do código-fonte e não informou dpkg disso, então essa lista pode não ser exaustiva.

    
por 10.12.2012 / 20:01
0

Dê uma olhada no relatório sobre compatibilidade binária retrógrada para a biblioteca aqui (ou pode ser aqui ). Não há problema em atualizar se houver algumas quebras de ABI na biblioteca entre as versões comparadas.

Além disso, sua configuração da biblioteca pode diferir da configuração da distribuição (algumas opções específicas, que podem forçar algumas alterações na ABI), portanto, é melhor atualizar suas bibliotecas apenas com a ajuda do gerenciador de pacotes.

Particularmente, a atualização do sqlite parece segura por causa do presente relatório :

    
por 20.03.2016 / 23:56