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.
Para ver de cara al futuro las versiones disponibles usar:
root@git:~# apt list -a gitlab-ce
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.
Pingback: Gitlab: configurar el envío de correos electrónicos - Blackhold
# inici: 14.10.5-ce.0 debian 10.13
1. saltar de debian 10.13 a debian 12
1.1. comentar repos gitlab a /etc/apt/sources.list.d/
1.2. upgrade darrera versió debian 10
1.3. renombrar buster -> bullseye (està a deb no a archive) al sources.list.d && apt update && apt -y upgrade && apt -y dist-upgrade
1.4. renombrar bullseye -> bookworm (posar la config que tinc en local) -> apt-get clean; apt update && apt -y upgrade && apt -y dist-upgrade
1.5. reiniciar
2. comprovar que s’aixeca gitlab -> gitlab-ctl status
tail -f /var/log/gitlab/gitlab-rails/production.log
3. fer backup
4. actualitzar gitlab
4.1. descomentar els sources de gitlab i posar bookworm
4.2. curl -s https://packages.gitlab.com/gpg.key | apt-key add –
4.3. posar repos bullseye
4.4. apt install gitlab-ce=15.0.5-ce.0
chmod g+w,o+w /var/opt/gitlab/gitlab-workhorse/socket
gitlab-ctl restart
apt install gitlab-ce=15.1.6-ce.0
apt install gitlab-ce=15.11.13-ce.0
chmod g+w,o+w /var/opt/gitlab/gitlab-workhorse/socket
gitlab-ctl pg-upgrade
gitlab-ctl restart
gitlab-ctl status
apt install gitlab-ce=16.0.8-ce.0; gitlab-ctl restart; gitlab-ctl status
apt install gitlab-ce=16.3.0-ce.0; gitlab-ctl restart; gitlab-ctl status
apt install gitlab-ce=16.6.1-ce.0; gitlab-ctl restart; gitlab-ctl status
4.5. Canviar els repos de gitlab a bookworm i fer apt update; apt -y upgrade; apt -y dist-upgrade
4.6. gitlab-ctl pg-upgrade -V 14
15.11.0-ce.0 -> 16.3.9-ce.0
16.3.9-ce.0 -> 16.7.10-ce.0
16.7.10-ce.0 -> 16.11.10-ce.0
16.11.10-ce.0 -> 17.3.4-ce.0
17.3.4-ce.0 -> 17.4.1-ce.0
backup + upgrade debian 12
https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/