GitLab: микс версий

ПРЕДЫСТОРИЯ

Был сервер на CentOS 7, а стал Rocky 8.5, но не сразу. Gitlab был версии 14.6.2, а актуальная версия 14.7.0. При обновлении на CentOS 8 git тоже начал обновляться. Оказалось, что для новой версии нужен python3-policycoreutils, а для старой policycoreutils-python-utils и во время обновления установщик не найдя python3-policycoreutils, откатил gitlab на версию 9.х. как итог после установки новой версии получил ошибку, что я обновляю версию 9 до версии 14, мол сперва установите предыдущие мажорные обновления. 1.5 дня ушло чтобы разобраться, что же делать в данной ситуации. Оказалось все не так уж страшно и сложно.

ВАЖНОЕ И НЕВАЖНОЕ

Хорошо, что заблоговременно сделал бекап системного диска на clonezilla, где находилась база данных в /var/opt/gitlab. Далее заархиривал /opt/gitlab и стал играться. В итоге выяснилась следующая структура:

/var/opt/gitlab - база данных, конфиги ращличных подсистем (redis, postgres, nginx и т.д.)
/opt/gitlab-lfs - в моем случае large filesystem вынесен в эту директорию
/opt/gitlab-pages - директория для pages
/opt/gitlab/git-data - репозитории
/opt/gitlab/registry - реестр docker образов

Это самые важные директории в gitlab. В /var/opt/gitlab скрипт установки и удаления никакие изменения не вносят, но на всякий лучше сделать резервный архив. В директорию gitlab-lfs тоже никакие изменения не вносятся, но перед установкой или удалением лучше переименовать в gitlab-lfs-bak к примеру (ибо размер слишком большой и бекапить это боль), чтобы скрипты не смогли найти эту директорию. Остальные директории не так уж много весят (кроме repositories, но для него сделал исключение) и их я rsync'нул на другой сервер.
При удалении можно заметить, что скрипт пытается удалить содержимое /opt/gitlab/embedded/ и /opt/gitlab/LICENSES/. На всякий сделал резервную копию директорий:

/opt/gitlab/LICENSES
/opt/gitlab/bin
/opt/gitlab/embedded
/opt/gitlab/etc
/opt/gitlab/init
/opt/gitlab/licenses
/opt/gitlab/service
/opt/gitlab/sv
/opt/gitlab/var
# и файлов которые лежали в корне /opt/gitlab

Как оказалось не зря и они нам еще пригодятся.

ВОССТАНОВЛЕНИЕ

Удаляем gitlab-ce 9.x и устанавливаем последний gitlab-ce. Разворачиваем виртуалку в VirtualBox с Rocky 8.5, для бинарной совместимости с уже обновленной ОС. Устанваливаем последнюю версию gitlab-ce и архивируем /opt/gitlab. Копируем его на сервер, переименовываем /opt/gitlab в /opt/gitlab-bak и распаковываем архив в /opt/gitlab. С /opt/gitlab-bak копируем директории git-data и registry в /opt/gitlab. Далее копируем содержимое следующих директорий с /opt/gitlab-bak в /opt/gitlab:

init
service
sv
var

Теперь если выполним gitlab-ctl reconfigure, то увидим ошибку. Потому выполняем systemctl restart gitlab-runsvdir и снова запускаем gitlab-ctl reconfigure, после чего chef должен отработать как надо, в чем можно убедится посмотрев gitlab-ctl status.

P.S.

Походу всей этой эпопеи столкнулся с тем, что драйвер RAID контроллера Avago Technologies MPT SAS2 был выпелен с RHEL, но он все еще есть в репозитории epel. Проходим на зеркало https://mirror.yandex.ru/elrepo/dud/el8/x86_64/ и выбираем подходящий под дистрибутив образ. В моем случае это dd-mpt3sas-37.101.00.00-1.el8_5.elrepo.iso. Скачиавем, распаковываем каким-нить 7-zip, находим rpm пакет и устанавливаем. После ребута появится массив.