Iocage upgrade: etcupdate failed! Rolling back snapshot.

FreeBSD: iocage upgrade get etcupdate failed!

Lors de mon upgrade vers 12.3-RELEASE, je n'ai pu mettre à jour aucune jail avec pour message d'erreur :

root@nocloud ~ $ iocage upgrade -r 12.3-RELEASE jail

etcupdate failed! Rolling back snapshot.

Je teste la création d'une nouvelle jail :

root@nocloud ~ $ iocage create -r 12.3-RELEASE -b -n jail
jail successfully created!

A priori ça ne vient pas de la basejail. Je tente une jail en 12.2 puis upgrade vers 12.3 :

root@nocloud ~ $ iocage create -r 12.2-RELEASE -b -n jail2
jail2 successfully created!
root@nocloud ~ $ iocage upgrade -r 12.3-RELEASE jail2
jail2 successfully upgraded from 12.2-RELEASE-p15 to 12.3-RELEASE-p4!
Please reboot the jail and inspect.

Au moins la stack iocage semble fonctionnelle… Il n'y avait rien de probant dans les logs /var/log/iocage.logou /usr/iocage/log/jail-console.log.

Comme iocage est écrit en python :

root@nocloud ~ $ grep -ir etcupdate /usr/local/lib/python3.8/site-packages/iocage_*
/usr/local/lib/python3.8/site-packages/iocage_lib/ioc_upgrade.py:        etcupdate_cmd = [
/usr/local/lib/python3.8/site-packages/iocage_lib/ioc_upgrade.py:            "/usr/sbin/etcupdate", "-F", "-s", "/iocage_upgrade"
/usr/local/lib/python3.8/site-packages/iocage_lib/ioc_upgrade.py:                etcupdate_cmd,
/usr/local/lib/python3.8/site-packages/iocage_lib/ioc_upgrade.py:            msg = "etcupdate failed! Rolling back snapshot."

On voit que la commande exécutée est bien etcupdate. Je teste dans la jail :

jail ~ ❯❯❯ etcupdate
Conflicts remain from previous update, aborting.

jail ~ ❯❯❯ etcupdate resolve
Resolving conflict in '/root/.cshrc':
Select: (p) postpone, (df) diff-full, (e) edit,
        (h) help for more options: e

Je m'aperçois que ça concerne le cshrc du root /var/db/etcupdate/conflicts/root/.cshrc et qui est daté de mon ancienne upgrade. Le conflit ne concerne rien qui doit être conservé :

jail ~ ❯❯❯ rm -f /var/db/etcupdate/conflicts/root/.cshrc

Je n'ai plus d'erreur avec etcupdate. Je retente :

root@nocloud ~ $ iocage snapremove -n ioc_upgrade_2022-04-04 jail2
root@nocloud ~ $ iocage upgrade -r 12.3-RELEASE jail2
jail2 successfully upgraded from 12.2-RELEASE-p15 to 12.3-RELEASE-p4!
Please reboot the jail and inspect.
Remove the snapshot: ioc_upgrade_2022-04-04 if everything is OK

Plus qu'à supprimer partout, cleaner les snapshots et refaire l'upgrade :

root@nocloud ~ $ for j in $(iocage list -qh | awk '{ print $1 }'); do rm -rf /usr/iocage/jails/$j/root/var/db/etcupdate/conflicts/root; done 
root@nocloud ~ $ for j in $(iocage list -qh | awk '{ print $1 }'); do iocage snapremove -n ioc_upgrade_2022-04-04 $j; done
root@nocloud ~ $ for j in $(iocage list -qh | awk '{ print $1 }'); do iocage upgrade -r 12.3-RELEASE $j ;done

:)


Commentaires