Установка GITLAB на ARM-платформу (BananaPI M2)


Установка GitLab на платформу ARM не особо отличается от установки другого ПО для которого имеется официальный репозиторий и сводится к следующим типовым этапам:

  1. Установка необходимого ПО
  2. Подключения репозитория
  3. Установка
  4. Дополнительная настройка

Идея я думаю понятна и мы можем начинать.

ARM система на базе BananaPI M2

Загружаем ключи и подключаем репозиторий

# curl -L https://packages.gitlab.com/gitlab/raspberry-pi2/gpgkey | sudo apt-key add -
# apt-get update
# apt-get install debian-archive-keyring
# apt-get install -y apt-transport-https
# curl -sS https://packages.gitlab.com/install/repositories/gitlab/raspberry-pi2/script.deb.sh | sudo bash
# apt-get update

Устанавливаем GitLab

# aptitude install gitlab gitlab-shell python3-gitlab

Мастер установки довольно дружелюбный и вам необходимо только подтвердить домен который будет использоваться для работы с GitLab, определиться будем ли мы использовать HTTPS в работе и задать тип сертификата который мы собираемся использовать (самоподписанный или Let's encrypt).

Сертификат для Lets encrypt устанавливается автоматически

Но стоит отметить, что не все так гладко и процесс установки у меня завершился с ошибкой:

Could not find gem 'devise-two-factor (~> 2.0.0)'

Решение этого вопроса нашлось довольно быстро и пришлось лишь установить несколько дополнительных пакетов и проверить, что ruby-gems собираются корректно:

# sudo apt-get install cmake libmysqlclient-dev automake autoconf autogen libicu-dev
# cd /usr/share/gitlab
# bundler

Устранение ошибки Could not find gem

Если все прошло корректно, то просто перезапустите установку пакета командой:

# dpkg --configure -a

Если все прошло удачно, то вы увидите подобное сообщение:

Administrator account created:
login.........root
password......5iveL!fe

Возможно, что вы получите ошибку:

/lib/posix_spawn_ext.so: undefined symbol: rb_fix2int

В этом случае вам понадобится обновить ваш Ruby-интерпретатор, но в Ubuntu Linux для ARM платформы это не очень просто и придется пересобрать его из исходных кодов. Исходный код интерпретатора Ruby доступен по адресу https://www.ruby-lang.org/en/downloads/, а компилируется он обычным configure -> make -> make install (я думаю с этим больших проблем у вас не будет).

Возможно вы конечно захотите использовать несколько версий ruby и для этого вы можете воспользоваться механизмом update-alternatives:

# update-alternatives --install /usr/bin/ruby ruby /usr/bin/ruby2.3 500
# update-alternatives --install /usr/bin/ruby ruby /usr/local/bin/ruby 0
# update-alternatives --config ruby

Для нового интерпретатор устанавливаем свой bundler:

# gem install bundler

Естественно, что все rubby-gems потребуется пересобрать:

# cd /usr/share/gitlab
# bundle

Но, по поводу этой же ошибки может иметь место и другая ситуация если у вас 32-х битная система, то вам потребуется провести даунгрэйд библиотеки posix-spawn до версии 0.3.12:

# gem install posix-spawn:0.3.12
# gem uninstall posix-spawn

Select gem to uninstall:
 1. posix-spawn-0.3.12
 2. posix-spawn-0.3.13
 3. All versions
> 2
Successfully uninstalled posix-spawn-0.3.1

Вот собственно это все нестандартные ситуации на которые я натолкнулся при установка GitLab на ARM-платформу. Можно конечно использовать и версию загруженную из GIT-репозитория, но естественно, что у вас в этом случае не будет удобного мастера установки и вам придется проделать очень много операций в консоли.

Описание установки есть на официальном сайте: https://docs.gitlab.com/ee/install/installation.html (я попробовал инструкция рабочая, но времени на установку и настройку ушло очень много).

Установка GIT-LAB из исходных кодов

При установке из исходных кодов я получил ошибку:

ActionView::Template::Error (Could not load compiled manifest from /opt/gitlab-ce/public/assets/webpack/manifest.json - 
have you run `rake webpack:compile`? (original error No such file or directory @ rb_sysopen - /opt/gitlab-ce/public/assets/webpack/manifest.json)):

И тут все понятно, но в документации этот момент упущен почему-то, просто выполните предложенную команду в виде:

# sudo -u git -H bundle exec rake webpack:compile RAILS_ENV=production NODE_ENV=production

После того как все сервисы запустились в штатном режиме, можно авторизоваться в GitLab с логином и паролем полученном при установке системы, по адресу который мы указали мастеру установки.

Запустил

Как мы видим, GitLab в отличие от RhodeCode можно запустить на ARM и даже на довольно слабом ARM (RhodeCode при попытке установки на ARM говорит, что архитектура не поддерживается).

Сброс пароля администратора GitLab

В дополнение, бонусом расскажу как сбросить пароль администратора:

# cd /home/git/gitlab
# sudo -u git -H bundle exec rails console production
> user = User.find(1)
=> #<User id:1 @root>
irb(main):004:0> user.password = 'Password'
=> "Password"
irb(main):005:0> user.password_confirmation = 'Password'
=> "Password"
irb(main):006:0> user.save
Enqueued ActionMailer::DeliveryJob (Job ID: 7d180716-d41d-4723-a700-7b4b7383bf9f) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", gid://gitlab/User/1
=> tru

Как вы видите метод сброса пароля немного непривычный и после смены пароля таким методом, вы дополнительно получите письмо подтверждение.