Решение проблемы

Установка gitlab в LXC контейнер


Установка Gitlab на виртуальную машину или сервер не представляет никакой трудности. Разработчики предлагают полностью автоматизированную систему развертывания приложения. Но в среде lxc контейнера она не работает. Я расскажу, как это исправить.

После автоматической установки gitlab, вы увидите следующую ошибку:

There was an error running gitlab-ctl reconfigure:

sysctl[kernel.shmall] (postgresql::enable line 66) had an error: Mixlib::ShellOut::ShellCommandFailed: execute[load sysctl conf kernel.shmall] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/package/resources/sysctl.rb line 59) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '255'
---- Begin output of cat /etc/sysctl.conf /etc/sysctl.d/*.conf | sysctl -e -p - ----
STDOUT:
STDERR: sysctl: setting key "kernel.shmmax": Read-only file system
---- End output of cat /etc/sysctl.conf /etc/sysctl.d/*.conf | sysctl -e -p - ----
Ran cat /etc/sysctl.conf /etc/sysctl.d/*.conf | sysctl -e -p - returned 255

Ошибка установки Gitlab в LXC контейнере

Проблема в том, что gitlab меняет некоторые параметры ядра через sysctl, а у контейнера нет возможности ими управлять. Отсюда у нас есть 2 решения:

  1. Отключить применение этих изменений.
  2. Применить эти изменения на хосте.

Так как я настраивал тестовую систему только под мои проекты, я решил не применять эти изменения. Посмотреть, о чем идет речь, можно в следующих конфигурационных файлах:

# cat /opt/gitlab/embedded/etc/90-omnibus-gitlab-*

kernel.sem = 250 32000 32 262
kernel.shmall = 4194304
kernel.shmmax = 17179869184
net.core.somaxconn = 1024

Скажу честно, я не осилил их описание. Точнее я его прочитал, но не понял, как эти параметры могут повлиять на работу gitlab. Обычно, тюнинг ядра нужен, когда приложение работает под хорошей нагрузкой и дефолтные параметры становятся неоптимальными для максимальной производительности. В таком случае, отключение изменений этих параметров лично мне никак не повредит, так как нагрузки никакой не будет. Я буду единственным пользователем этой системы.

Если вы разворачиваете gitlab в продакшн, то внимательно взвесьте все за и против и решите, как лучше поступить. Чтобы отключить применение изменений в ядре, необходимо изменить файл /opt/gitlab/embedded/cookbooks/package/resources/sysctl.rb. Было:

  # Load the settings right away

execute "load sysctl conf #{new_resource.name}" do
command "cat /etc/sysctl.conf /etc/sysctl.d/*.conf | sysctl -e -p -"
action :nothing

Стало:

  # Load the settings right away

execute "load sysctl conf #{new_resource.name}" do
#command "cat /etc/sysctl.conf /etc/sysctl.d/*.conf | sysctl -e -p -"
command "cat /etc/sysctl.conf"
action :nothing

После этого запускаем конфигурацию системы повторно:

# gitlab-ctl reconfigure

Ошибки быть не должно. В завершении настройки на всякий случай перезапустите сервисы:

# gitlab-ctl restart

Для того, чтобы внести нужные изменения в ядро хостовой машины, добавьте необходимые параметры в /etc/sysctl.conf и выполните команду:

# cat /etc/sysctl.conf /etc/sysctl.d/*.conf | sysctl -e -p -

После этого перезагрузите хост и запускайте заново конфигурацию gitlab в контейнере.

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

СМОТРИ ТАКЖЕ