Tras casi dos meses cocinándose en unstable la temida
transición a GCC5 y la nueva libstdc++6 ha llegado a Debian Testing
(Stretch):
we are ready to migrate the bulk of the GCC-5 transition and related
sub-transitions to testing tonight. Apologise for the short notice.
We expect this to be mostly a smooth ride, but there are some
caveats:
La actualización me ha resultado poco problemática, gracias a que he
seguido unas cuantas buenas prácticas:
-
Los paquetes que han quedado temporalmente obsoletos en testing lo
son por buenos motivos (dependencias que no se van a poder cumplir
tras la transición) y por lo tanto lo mejor es desinstalarlos hasta
que vuelvan a reintroducirse en el archivo (ya con dependencias
actualizadas). Dejarlos instalados sólo va a llevar a conflictos
irresolubles por el package resolver.
-
Evitar utilizar sources que no sean las oficiales de Debian (los
mantenedores que hacen la transición no los tienen en cuenta).
-
Otra cosa que se le atraganta al package resolver son los paquetes
que pierden su indicador de "instalado automáticamente", ya que el
resolver en modo upgrade (safe-upgrade) no toca los paquetes
que el usuario ha instalado manualmente. Estos paquetes, que por
dependencias deberían haberse borrado no lo hacen, y eso provoca que
upgrade simplemente los retenga. Los usuarios pueden intentar
forzar la situación con un dist-upgrade (full-upgrade), y es
entonces cuando el resolver se ve obligado a preguntar al usuario
sobre qué paquetes eliminar y cuáles mantener. Lo mejor para evitarlo
es mantener los paquetes con sus indicadores correctos de "instalado
automáticamente".
Este problema se ve acentuado porque los mantenedores han decidido que,
en vez de actualizar directamente el paquete, existan 2 versiones de
ciertos paquetes (fundamentalmente de bibliotecas escritas en C++): la
antigua y la nueva, que es la versión compilada con GCC5 y contra la
nueva libstdc++6. El paquete con la versión antigua conserva el nombre
mientras que el de la nueva se le añade al nombre un sufijo "v5". De
esta forma, la transición de ciertos paquetes puede hacerse
independiente de la de otros, y se evita tener que hacer la transición
de todo a la vez.
El problema de este enfoque es que ciertos bugs en aptitude/libapt-pkg
que hacen que se pierda el indicador de "instalado automáticamente"
se disparan cuando se hace este tipo de transiciones de cambios de
nombres. En mi caso, tras hacer el aptitude upgrade
20 bibliotecas
y otros 7 paquetes perdieron el indicador. Tuve que hacer un
markauto
de todos ellos para poder seguir.
Una cosa que hice es seguir el principio divide et impera. Sabiendo
que el paquete más problemático probablemente iba a ser libstdc++6, lo
primero que hice fue asegurarme que se actualizaba con un aptitude
install libstdc++6
. Después, volví a revisar si más paquetes habían
perdido el indicador "Auto" y a volvérselo a poner. Y finalmente, un
nuevo aptitude upgrade
me hizo la actualización de la mayoría de los
paquetes que faltaban. Unos detalles más, y actualmente sólo tengo
retenidos 10 paquetes por dependencias no resolubles, que espero que en
los próximos días se solucionen.
Seguiré informando.
:wq