Actualitzar gitlab 10.7.3 con debian 8 a gitlab 14.1.0 con debian 10

Hoy os traigo una migración que me ha llevado 4 días largos y el motivo es el de dejar sin actualizar demasiado tiempo un sistema. Con el tiempo lo he ido poniendo todo al día pero siempre había éste (y otro) servicio que se me resistía. Hablamos de gitlab instalado usando los repositorios de gitlab y cabe decir que aunque haya sido una actualización larga y puñetera me ha obligado a mirarme como funcionaba a nivel de sistemas gitlab y telita la de cosas que tiene!

El gitlab que tengo instalado, la curiosidad es que “trae los programas dentro”, es decir, en lugar de estar instalados por apt con los repositorios de debian están ahí metidos en una carpeta.

Otra cosa que tendremos que tener en cuenta es que para hacer una migración a una nueva versión se recomienda hacerlo desde otras versiones tal como explica en la documentación.

En mi caso por las versiones que debería pasar son las:

11.11.8 -> 12.0.12 -> 12.1.17 -> 12.10.14 -> 13.0.14 -> 13.1.11 -> latest 13.12.Z -> latest 14.0.Z -> 14.1.Z -> latest 14.Y.Z

Así que vamos a empezar.

Actualizar de debian 8 a debian 10
En esta migración me ha tocado sacarme el miedo con los upgrades de versiones major de debian. Siempre he tenido la costumbre cada vez que ha habido una release de debian nueva ir migrando los servicios en un sistema nuevo. Por la complejidad de la instalación y porqué al principio no me enteraba muy bien de como estaba montado esto del git y tras una migración infructuosa hace unos meses, decidí probar de hacerlo así y también porqué muchas de las dependencias del programa no estaban vinculadas al repositorio de apt.

Para este proceso he comentado los sources de gitlab que se encuentran en /etc/apt/sources.list.d/

root@git:~# vi /etc/apt/sources.list.d/gitlab_gitlab-ce.list
root@git:~# vi /etc/apt/sources.list.d/runner_gitlab-ci-multi-runner.list
root@git:~# apt update

Seguimos actualizando la debian 8 a la última versión

root@git:~# apt -y upgrade && apt -y dist-upgrade

Modificamos los sources para poner los de debian 9 (stretch)

root@git:~# vi /etc/apt/sources.list
# Repositorio base stable.
deb http://ftp.es.debian.org/debian/ stretch main contrib non-free
deb-src http://ftp.es.debian.org/debian/ stretch main  contrib non-free

# Repositorio de actualizaciones de seguridad
deb http://security.debian.org/debian-security stretch/updates main contrib non-free
deb-src http://security.debian.org/debian-security stretch/updates main contrib non-free

# Repositorio de actualizaciones anteriormente conocido como "Volatil"
deb http://ftp.es.debian.org/debian/ stretch-updates main contrib non-free
deb-src http://ftp.es.debian.org/debian/ stretch-updates main contrib non-free

Actualizamos a debian 9

root@git:~# apt update && apt -y upgrade && apt -y dist-upgrade

Cambiamos los repositorios a debian 10 y volvemos a actualizar.

root@git:~# vi /etc/apt/sources.list
deb http://deb.debian.org/debian/ buster main non-free contrib
deb-src http://deb.debian.org/debian/ buster main non-free contrib

deb http://security.debian.org/debian-security buster/updates main contrib non-free
deb-src http://security.debian.org/debian-security buster/updates main contrib non-free

# buster-updates, previously known as 'volatile'
deb http://deb.debian.org/debian/ buster-updates main contrib non-free
deb-src http://deb.debian.org/debian/ buster-updates main contrib non-free

root@git:~# apt update && apt -y upgrade && apt -y dist-upgrade

Y reiniciamos

root@git:~# reboot

Actualizando gitlab

Comprobamos que gitlab se levante correctamente (en la versión en la que estoy hay problemas con los permisos de /var/opt/gitlab/gitlab-workhorse/socket que lo soluciono haciendo un chmod g+w,o+w /var/opt/gitlab/gitlab-workhorse/socket).

En cualquier momento si queremos ver lo que está haciendo gitlab podemos comprobarlo en el siguiente fichero de log:

root@git:~# tail -f /var/log/gitlab/gitlab-rails/production.log

Ahora si, descomentamos los sources que hemos comentado antes del gitlab, los ponemos con la versión de stretch y actualizamos el sistema

root@git:~# vi /etc/apt/sources.list.d/gitlab_gitlab-ce.list
deb https://packages.gitlab.com/gitlab/gitlab-ce/debian/ stretch main
deb-src https://packages.gitlab.com/gitlab/gitlab-ce/debian/ stretch main

root@git:~# vi /etc/apt/sources.list.d/runner_gitlab-ci-multi-runner.list
deb https://packages.gitlab.com/runner/gitlab-ci-multi-runner/debian/ stretch main
deb-src https://packages.gitlab.com/runner/gitlab-ci-multi-runner/debian/ stretch main

root@git:~# curl -s https://packages.gitlab.com/gpg.key | apt-key add -
root@git:~# apt update

El repositorio de gitlab contiene todas las versiones de gitlab disponibles y una cosa que he descubierto nueva es que es posible usar “apt list -a gitlab-ce” para verlas. De la misma forma con un paquete=versión vamos a poder instalar la versión de gitlab-ce que nos interese en cada momento!

Así que aquí meto el chorro de comandos que voy a ir ejecutando. Las primeras versiones no corresponden exactamente con las versiones que he puesto arriba (porqué esto lo he descubierto mas tarde hehe) y me guiaba por lo que pedía el paquete al actualizarlo.

# apt-get install gitlab-ce=10.8.0-ce.0
# gitlab-ctl restart
# apt-get install gitlab-ce=11.11.0-ce.0
# gitlab-ctl restart
# gitlab-ctl pg-upgrade # para actualitzar a psql 10.7
# gitlab-ctl restart
# rm -rf /var/opt/gitlab/postgresql/data.9.6 
# gitlab-ctl prometheus-upgrade --skip-data-migration # para actualitzar a prometheus 2.x
# gitlab-ctl restart

En esta primera fase vemos como actualizamos primero a 10.8.0 y después a 11.11.0. Al final de cada actualización nos recomienda usar el comando “gitlab-ctl restart” para comprobar que todo esté funcionando correctamente. También podemos usar “gitlab-ctl status” para comprobar el estado de gitlab y también útil por si se ha quedado tonto el inicio de la aplicación (en algunas versiones me ha servido para levantar gitlab).

En estas primeras actualizaciones he tenido de hacer el upgrade de psql que estaba a la 9 a 10.7 y también prometheus-upgrade para el prometheus 1 a 2.x. En siguientes actualizaciones todos estos pasos ya los hace automáticamente.

# apt-get install gitlab-ce=11.11.8-ce.0
# gitlab-ctl restart
# apt-get install gitlab-ce=12.0.12-ce.0
# gitlab-ctl restart
# apt-get install gitlab-ce=12.1.17-ce.0
# gitlab-ctl restart
# apt-get install gitlab-ce=12.10.14-ce.0
# gitlab-ctl restart
# apt-get install gitlab-ce=13.0.14-ce.0
# gitlab-ctl restart
# apt-get install gitlab-ce=13.1.11-ce.0
# gitlab-ctl restart
# apt-get install gitlab-ce=13.12.8-ce.0

A partir de aquí no hay otra que ir pasando de versión a versión (seguimos con el repositorio de gitlab en stretch). Pero justo en la 13.12.8 en mi instalación empieza a dar problemas con la ubicación del socket del gitlab-workhorse. Lo soluciono cambiando la configuración en el fichero /etc/gitlab/gitlab.rb la siguiente línea:

root@git:~# vi /etc/gitlab/gitlab.rb
gitlab_workhorse['listen_addr'] = "/var/opt/gitlab/gitlab-workhorse/sockets/socket"

En mi script de arreglar los permisos del socket del workhorse, también le hago el chmod sobre este fichero. Aprovechamos también para hacer un poco de limpieza

root@git:~# gitlab-ctl restart
root@git:~# rm -rf /var/opt/gitlab/postgresql/data.11
root@git:~# rm -f /var/opt/gitlab/postgresql-version.old
root@git:~# apt-get clean

Y seguimos…

# apt-get install gitlab-ce=14.0.6-ce.0
# gitlab-ctl restart

Aquí empieza a dar otros problemas. Uno de ellos es que una cosa llamada unicorn pasa a llamarse puma y en mi fichero de configuración hay una línea que está dando problemas. La comento y luego hago un gitlab-ctl upgrade y vuelvo a intentar la instalación

root@git:~# vi /etc/gitlab/gitlab.rb
# unicorn['worker_timeout'] = 300

root@git:~# gitlab-ctl upgrade
root@git:~# apt-get install gitlab-ce=14.0.6-ce.0
root@git:~# gitlab-ctl restart

En éste punto es cuando aprovechamos para cambiar los sources de gitlab de stretch a buster

root@git:~# vi /etc/apt/sources.list.d/gitlab_gitlab-ce.list
deb https://packages.gitlab.com/gitlab/gitlab-ce/debian/ buster main
deb-src https://packages.gitlab.com/gitlab/gitlab-ce/debian/ buster main

root@git:~# vi /etc/apt/sources.list.d/runner_gitlab-ci-multi-runner.list
deb https://packages.gitlab.com/runner/gitlab-ci-multi-runner/debian/ buster main
deb-src https://packages.gitlab.com/runner/gitlab-ci-multi-runner/debian/ buster main

root@git:~# curl -s https://packages.gitlab.com/gpg.key | apt-key add -
root@git:~# apt update

Y volvemos a repetir la instalación de la versión 14.0.6

root@git:~# apt-get install gitlab-ce=14.0.6-ce.0
root@git:~# gitlab-ctl restart

Y finalmente a la última 14.1.0 con el apt -y upgrade!

root@git:~# apt -y upgrade
root@git:~# gitlab-ctl restart
root@git:~# gitlab-ctl status

En esta versión añado el gitlab-ctl status al lado del script de chmod del socket de gitlab-workhorse porque sino no arranca gitlab.

Y ésto es todo!

Recomiendo fervientemente hacer backup de la maquina virtual que aloja gitlab en cada punto que aviso que hay cambios que hacer.

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.