Установка Gitlab на виртуальную машину или сервер не представляет никакой трудности. Разработчики предлагают полностью автоматизированную систему развертывания приложения. Но в среде lxc контейнера она не работает. Я расскажу, как это исправить.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
После автоматической установки 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 меняет некоторые параметры ядра через sysctl, а у контейнера нет возможности ими управлять. Отсюда у нас есть 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 в контейнере.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
nano /etc/gitlab/gitlab.rb
##! Attempt to modify kernel paramaters. To skip this in containers where the
##! relevant file system is read-only, set the value to false.
package['modify_kernel_parameters'] = false
gitlab-ctl reconfigure
Эти изменения несущественны если не предполагается использовать полноценную систему развертывания и прочие премудрости системы контроля версий, в противном случае, я бы не рекомендовал использовать под эти цели контейнер, логичнее использовать полноценную виртуальную машину.
Спасибо за комментарий. Я так и предполагал изначально, но проверять заленился. И все же, почему не использовать контейнер? Есть какие-то конкретные примеры проблем? Параметры ядра же можно по факту выставить. Дальше, по идее, проблем быть не должно.