Actualització de lucid a precise fora de temps

El passat 24 d’octubre vam fer una trobada tècnica de Caliu per actualitzar el sistema del servidor a Ubuntu precise perquè la lucid havia deixat de tenir manteniment des de l’estiu i ja no se’n publiquen actualitzacions de cap tipus. Aquest cop ens trobàvem lluny del servidor i vam estar treballant tota l’estona en remot.

El primer que vam fer va ser connectar al servidor de màquines virtuals per poder tenir accés a la consola del servidor si feia falta. Tot seguit vam obrir un terminal de root amb byobu per si es tallava la connexió i vam fer una còpia de seguretat de totes les bases de dades del mysql:


mysqlshow
for D in A B C D; do \
  echo -n "Dumping $D... "; \
  mysqldump --opt "$D" | \
  gzip -9c > "$D"-20151024.sql.gz; \
  echo $?; \
done

Aleshores vam connectar al servidor de màquines virtuals per crear snapshots dels volums lògics de la màquina virtual i d’aquesta manera tenir una còpia de seguretat immediata:


lvs
lvcreate -s -L 256.00m -n backup_lessig_boot larry/lessig_boot
lvcreate -s -L 20.00g -n backup_lessig_sistema larry/lessig_sistema
lvs

A continuació vam aturar els serveis (apache2, nginx, mysql, memcached, monit) i els crons que actualitzen els miralls. Ens vam assegurar que teníem seleccionada la versió LTS i vam executar l’ordre d’actualitzar el servidor:


grep ^Prompt=lts /etc/update-manager/release-upgrades
do-release-upgrade

En aquest punt el procés d’actualització va canviar el fitxer /etc/apt/sources.list i va començar a descarregar paquets però es va aturar queixant-se que no podia validar-ne alguns. Vam trobar en diferents fòrums una solució que havia funcionat per algunes persones però que no volíem aplicar sense entendre quin era el problema perquè justament la gràcia és que els paquets que s’instal·len es puguin verificar. La solució deia que calia posar això al fitxer /etc/update-manage/release-upgrades.d/unauth.conf:


[Distro]
AllowUnauthenticated=yes

Vam dedicar un parell d’hores a mirar el problema amb detall, examinant els scripts del procés d’actualització i modificant-los per obtenir més informació. La conclusió a la que vam arribar és que era un bug i com que la solució que comentàvem a dalt tampoc fa funcionar, vam tirar pel dret i vam modificar l’script d’actualització que descarrega el do-release-upgrade (en negreta la línia que vam afegir, teniu els detalls al bug que comentàvem abans):


return True
# check if the user overwrote the unauthenticated warning
try:
    b = self.config.getboolean("Distro","AllowUnauthenticated")
    if b:
        logging.warning("AllowUnauthenticated set!")
        return True

Amb aquest canvi, l’actualització es va fer amb èxit. Durant un moment es va perdre la sessió remota d’ssh però afortunadament vam poder recuperar el byobu des de la consola de la màquina virtual.

En aquest punt, vam revisar tots els canvis que s’havien produït o que calia fer en els fitxers de configuració. Per trobar els fitxers afectats vam utilitzar aquesta ordre:


find /etc -name '*.dpkg-*' -o -name '*.ucf-*'

Es tractava d’afegir els canvis nous (els dels fitxers .dpkg-new o .ucf-*) als fitxers de configutació existents o d’incorporar la configuració antiga (els fitxers .dpkg-old) als nous fitxers de configuració. Una feinada considerable però de vegades important i que facilita les actualitzacions posteriors.

Per finalitzar vam fer net de paquets sobrers i serveis obsolets, vam tornar a posar en marxa els serveis i vam verificar que tot funcionava correctament.

Els comentaris estan tancats