A máquina do tempo de debian

Logotipo de debianMoi de vez en cando, na versión sid (still en development) de debian entra un pacote que ten algún erro, pero en xeral é moi segura. Ós que usen a versión estable ou a versión testing este post non lles interesa en absoluto xa que os pacotes entran en testing con alomenos dúas semanas de probas e en estable entran os pacotes dende testing despois dun conxelado da distribución. Un caso recente: hai unhas semanas as versións dos pacotes de alsa deixábanme sen son na máquina.

A forma sinxela de evitar o desastre é non elimina-los pacotes vellos (apt-get autoclean) ata asegurarse de que os novos van como deberían. Isto non ten porque funcionar sempre. Algunhas veces ata que non se reiniciar a máquina non nos damos conta de que algo non vai ben.

Outra forma é emprega-la máquina do tempo de debian. En http://snapshot.debian.net/ gárdanse tódolos días o estado da versión sid, de xeito que se poidan obter tódalas versións que entraron na distribución de tódolos pacotes.

Un caso práctico: imaxinemos que vemos que despois da última actualización do sistema o programa svn non funciona. O primeiro que hai que facer é localizar en qué pacote se atopa ese programa:

xose@debian:~$ which svn
/usr/bin/svn
xose@debian:~$ dpkg -S /usr/bin/svn
subversion: /usr/bin/svn

Atopamos que o pacote do que queremos a versión anterior é subversion.
Hai dous métodos de usa-la máquina do tempo:

Todo o arquivo
Este método sérvenos cando sabemos exactamente cando entrou no noso sistema a versión que non funciona do pacote, por exemplo se actualizamos continuamente o sistema e xusto despois da actualización vemos que un programa non funciona.

Supoñamos que o pacote entrou en sid o día 3 de xuño, polo que a última versión que funcionaba estaba no día anterior. Temos que introducir no sources.list a seguinte liña:

deb http://snapshot.debian.net/archive/2006/06/02/debian unstable main contrib non-free

Actualizámo-lo arquivo de pacotes (apt-get update).
Miramos as versións dispoñibles do pacote:

xose@debian:~$ apt-cache policy subversion
subversion:
Instalado: 1.3.2-1
Candidato: 1.3.2-3
Táboa de versións:
1.3.2-3 0
500 http://http.us.debian.org sid/main Packages
*** 1.3.2-1 0
100 /var/lib/dpkg/status
1.3.1-3 0
500 http://snapshot.debian.net unstable/main Packages

A versión que nos interesa é a "1.3.1-3", así que ó instala-lo pacote témoslle que dicir a apt-get que queremos esa versión. apt-get por defecto instala a versión superior, así que lle temos que dicir a versión do pacote engadindo "=1.3.1-3" detrás do pacote:

xose@debian:~$ apt-get install subversion=1.3.1-3
A ler as listas de paquetes... Rematado
A construír a árbore de dependencias... Rematado
Non se puido instalar algúns paquetes. Isto pode significar que solicitou
unha situación imposible ou, se emprega a distribución inestable, que
algúns paquetes solicitados aínda non se crearon ou moveron de Incoming.

Xa que só solicitou unha soa operación, é bastante probable que o
paquete non sea instalable e que se deba informar dun erro no paquete.
A seguinte información pode axudar a resolver a situación:

Os seguintes paquetes teñen dependencias sen cumprir:
subversion: Depende: libsvn0 (= 1.3.1-3) pero hase instalar 1.3.2-3
E: Paquetes rotos
xose@debian:~$ apt-get install subversion=1.3.1-3 libsvn0=1.3.1-3
A ler as listas de paquetes... Rematado
A construír a árbore de dependencias... Rematado
Paquetes suxiridos:
db4.3-util
Os seguintes paquetes hanse DESACTUALIZAR:
libsvn0 subversion
0 actualizados, 0 instalados, 2 desactualizados, 0 hanse eliminar e 209 sen actualizar.
Hai que recibir 1487kB de arquivos.
Despois de desempaquetar hanse liberar 4096B de disco.

subversion depende de libsvn0 polo que temos que instala-los dous paquetes.

Un determinado pacote
Este método valnos cando non sabemos cando houbo a última versión do pacote que funcionaba. O inconvinte desde método é que temos que saber as dependencias do pacote da versión que queremos instalar. Como xa vimos co método anterior, a versión que queremos de subversion depende do pacote libsvn0.
Temos que introducir no sources.list a seguinte liña:

deb http://snapshot.debian.net/archive pool subversion libisvn0

Actualizámo-lo arquivo de pacotes (apt-get update).
Miramos as versións dispoñibles do pacote:

xose@debian:~$ apt-cache policy subversion
subversion:
Instalado: 1.3.2-1
Candidato: 1.3.2-3
Táboa de versións:
1.3.2-3 0
500 http://http.us.debian.org sid/main Packages
500 http://snapshot.debian.net pool/subversion Packages
1.3.2-2 0
500 http://snapshot.debian.net pool/subversion Packages
*** 1.3.2-1 0
500 http://snapshot.debian.net pool/subversion Packages
100 /var/lib/dpkg/status
1.3.1-3 0
500 http://snapshot.debian.net pool/subversion Packages
1.3.1-2 0
500 http://snapshot.debian.net pool/subversion Packages
1.3.1-1 0
500 http://snapshot.debian.net pool/subversion Packages
[continua con tódalas vesión que hai en snapshot.debian.net de subversion]

A versión que nos interesa é a "1.3.1-3", así que ó instala-lo pacote témoslle que dicir a apt-get que queremos esa versión. apt-get por defecto instala a versión superior, así que lle temos que dicir a versión do pacote engadindo "=1.3.1-3" detrás do pacote:

xose@debian:~$ apt-get install subversion=1.3.1-3 libsvn0=1.3.1-3
A ler as listas de paquetes... Rematado
A construír a árbore de dependencias... Rematado
Paquetes suxiridos:
db4.3-util
Os seguintes paquetes hanse DESACTUALIZAR:
libsvn0 subversion
0 actualizados, 0 instalados, 2 desactualizados, 0 hanse eliminar e 209 sen actualizar.
Hai que recibir 1487kB de arquivos.
Despois de desempaquetar hanse liberar 4096B de disco.

Nota dos exemplos: eu emprego sudo e varios alias do tipo apt-get="sudo apt-get" para os comandos de administración de xeito que coma usuario normal parece que poido executar comandos de administrador. Por escribir menos, vaia.