Установка GitLab на Slackware

в 7:50, , рубрики: Git, gitlab, linux, setup, slackware, метки: , , ,

Установка GitLab на Slackware
Доброго времени суток. У меня есть маленький подручный сервер, который используется как git сервер для показа клиенту проекта и т.д. Сервер работает на операционной системе Slackware v.13.1.0, семейства linux. Почему не Debian или Ubuntu — так исторически сложилось. Для просмотра git репозиториев я использовал cgit. Недавно возникла необходимость начать использовать GitLab. Если интересно — добро пожаловать под кат.

Так что такое GitLab? Если вам знаком GitHub, то это похожая структура, только на вашем сервере и под вашем контролем.

Для того, чтобы GitLab у нас заработал, необходимо установить Ruby 2+, MySQL, Git, Apache 2+, а также Python 2.6+ и последний Redis. Я упущу процесс установки mysql.

Итак, по порядку.

Необходимые компоненты


Установка GitLab на Slackware Устанавливаем Python

Поставим сначала пайтон. Стягиваем отсюда пакет.

План действий

#делаем файл исполняемым
sudo chmod +x python.SlackBuild

#запускам скрипт
sudo ./python.SlackBuild

#устанавливаем пакет
sudo installpkg python

Установка GitLab на Slackware Устанавливаем Ruby

Следующим делом установим руби. Процесс аналогичный установке пайтона, скачиваем отсюда файлики.

План действий

#делаем файл исполняемым
sudo chmod +x ruby.SlackBuild

#запускам скрипт
sudo ./ruby.SlackBuild

#устанавливаем пакет
sudo installpkg ruby

Альтернативный способ установки ruby:

Альтернативный план действий

#создаем временную папку и переходим в нее
mkdir /tmp/ruby && cd /tmp/ruby

#скачиваем исходники руби и распаковываем их
curl --progress ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p353.tar.gz | tar xz

#переходим в распакованную папку исзодиников и начинаем процесс сборки
cd ruby-2.0.0-p353
./configure --prefix=/usr/local/
make
sudo make install

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

#проверяем куда установился руби
which ruby

#проверяем версию руби
ruby --version

#устанавливаем bundler, без него никуда
gem install bundler --no-ri --no-rdoc

Установка GitLab на Slackware Устанавливаем Redis

Процедура установки Redis отличается от двух предыдущих.

План действий

#зайдем во временный каталог
cd /tmp

#создадим папку где будем производить все махинации
mkdir redis
cd redis

#стягиваем и распаковываем исходники редиса
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable

#собираем все до купы
make

#далее копируем исполняемые файлы сервера и клиента
cd src
sudo cp redis-server /usr/local/bin/
sudo cp redis-cli /usr/local/bin/

Это еще не все. Чтобы сервис редиса поднимался когда стартует сервер, необходимо подправить файл /etc/local.conf:

#открываем от рута файл на редактирование
sudo nano /etc/local.conf

#находим строчку где написано [components] и под ней добавляем 
/usr/local/bin/redis-server

Запускаем redis-server просто выполнив комманду «redis-server» (без кавычек). В другом терминале сделаем проверку, что сервер редиса поднялся:

#Выполняем комманду
redis-cli ping

#Ответ
PONG

Установка GitLab на Slackware Устанавливаем Git

Осталось установить git.

#скачаем и распакуем нужную версию гита
cd /tmp && curl --progress https://git-core.googlecode.com/files/git-1.9.0.tar.gz | tar xz

#перейдем в распакованную папку
cd git-1.9.0/

#соберем сурсы до купы
make prefix=/usr/local all

#установим git
sudo make prefix=/usr/local install

Установка GitLab на Slackware GitLab


Приступим непосредственно к процессу установки GitLab.

Добавление пользователя git в систему

Если у вас еще не был создан пользователь git в системе, то необходимо с этого начать. Для этого выполним комманду в терминале:

sudo /usr/sbin/adduser --disabled-login git

Проходим пошаговое создание профиля пользователя. После создания проверяем, что у нас в /home создалась папка нового пользователя с именем git (если вы указали другое имя пользователя, к примеру gitlab, то имя папки будет gitlab, а так же в конце статьи будут заметки, где и что надо будет изменить в gitlab и gitlab-shell, чтобы все заработало).

Устанавливаем и настраиваем gitlab-shell

Первым делом стянем и установим gitlab-shell:

План действий

#заходим в папку пользователя git
cd /home/git

#клонируем с гитхаба исходники
sudo -u git -H git clone https://github.com/gitlabhq/gitlab-shell.git
cd gitlab-shell

#вместо VERSION подставим необходимую версию, я использовал на тот момент v1.9.0
sudo -u git -H git checkout VERSION

#переименовываем пример конфига
sudo -u git -H cp config.yml.example config.yml

#отредактируем конфиг
nano config.yml

#найдем строчку
#gitlab_url: "http://localhost/"
#и поменяем http://localhost/ на валидный адрес

#запустим установку от лица пользователя git
sudo -u git -H ./bin/install

Создаем mysql пользователя и db

Далее надо создать в mysql таблички для gitlab. Создадим временный файлик, к примеру gitlab_tables.sql и сохраним в нем следующее:

sql

-- подставляем вместо USER_PASSWORD валидный пароль или оставляем так
CREATE USER 'gitlab'@'localhost' IDENTIFIED BY 'USER_PASSWORD';
CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost';

Логинимся в mysql пользователем root и выполняем не хитрую комманду

-- gitlab_tables.sql - имя временного файлика
source gitlab_tables.sql;

Легким движением рук мы создали пользователя с именем gitlab и базу данных gitlabhq_production, а так же дали права для оного пользователя на эту базу.
Более этот файл не понадобится, можем смело его удалять.

Устанавливаем и настраиваем gitlab

Теперь приступим к установке и настройке самого gitlab:

План действий

#переходим в корень домашней папки пользователя git
cd /home/git

#клонируем исходники gitlab в папку gitlab и переходим в новую склонированную папку
sudo -u git -H git clone https://github.com/gitlabhq/gitlabhq.git gitlab
cd /home/git/gitlab

#вместо VERSION подставим необходимую версию, я использовал на тот момент 7-2-stable
sudo -u git -H git checkout VERSION 

#переименуем пример конфига в обычный кофиг
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml

#откроем на редактирование конфиг файл
sudo -u git -H nano config/gitlab.yml

#и заменим localhost на верный адрес
## Web server settings
    host: localhost
    port: 80
    https: false

#скопируем конфиг для базы
sudo -u git cp config/database.yml.mysql config/database.yml

#откроем на редактирование настройки gitlab для работы с mysql базой
sudo -u git -H nano config/database.yml

#в этом файле следующие три строчки встречаются три раза, меняем параметры на те которые мы использовали при создании mysql базы ранее
  database: gitlabhq_production
  username: root
  password: "secure password"

Устанавливаем права на файлы и папки внутри /home/git/gitlab:

План действий

cd /home/git/gitlab
sudo chown -R git log/
sudo chown -R git tmp/
sudo chmod -R u+rwX  log/
sudo chmod -R u+rwX  tmp/
sudo -u git -H mkdir /home/git/gitlab-satellites
sudo -u git -H mkdir tmp/pids/
sudo -u git -H mkdir tmp/sockets/
sudo chmod -R u+rwX  tmp/pids/
sudo chmod -R u+rwX  tmp/sockets/
sudo -u git -H mkdir public/uploads
sudo chmod -R u+rwX  public/uploads
sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb
sudo -u git -H git config --global user.name "GitLab"
sudo -u git -H git config --global user.email "gitlab@localhost"
sudo -u git -H git config --global core.autocrlf input
sudo -u git -H chmod o-rwx config/database.yml

Устанавливаем ruby gems

Следующим шагом будет установка ruby gems:

#заходим в папку gitlab в домашней папке пользователя git
cd /home/git/gitlab

#установим charlock_holmes, на момент установки актуальная версия была 0.7.3
sudo gem install charlock_holmes --version '0.7.3'

#запустим установку всего бандла зависимостей(этот шаг может занять много времени, запаситесь терпением)
sudo -u git -H bundle install --deployment --without development test postgres aws

Запускаем установку gitlab

Осталось только запустить установку и настройку самого gitlab:

#если запустите от пользователя root - процесс пойдет, вам покажут предупреждение что от рута нет гарантии, что все верно будет работать
#когда спросят подтверждения старта установки - отвечаем 'yes'
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production

По окончанию установки, если все прошло успешно, в консоли высветится следующее:

Administrator account created:

login.........root
password......5iveL!fe

Проверка валидности конфигурации gitlab

Осталось совсем не много. Проверим, что у нас все сконфигурировано верно и донастроим конфиг, чтобы при старте сервера, gitlab стартовал автоматически:

План действий

#проверим как сконфигурирован наш gitlab
sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production

#если предыдущая комманда выполнилась без ошибок, продолжаем далее, иначе резолвим ошибки
#скопируем скрипт
sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab

#сделаем скрипт исполняемым
sudo chmod +x /etc/init.d/gitlab

#откроем на редактирование local.conf:
sudo nano /etc/local.conf

#находим строчку где написано [components] и под ней добавляем 
git@/etc/init.d/gitlab
#git - имя пользователя от лица которого выполнить скрипт

Стартуем gitlab

Теперь самое время стартануть gitlab, для этого выполняем следующую комманду:

sudo -u git -H /etc/init.d/gitlab start

Если все хорошо, то в консоли мы увидим следующее:

The GitLab Unicorn web server with pid 15869 is running.
The GitLab Sidekiq job dispatcher with pid 16468 is running.
GitLab and all its components are up and running.

По умолчанию gitlab крутится через unicorn на порту 8080 и мы можем убедиться в этом:

#запустим браузер lynx
lynx localhost:8080

Результат работы lynx будет вывод страницы для авторизации пользователя. Вводим логин 'root' и пароль '5iveL!fe' (все без кавычек). Сабмитим форму и видим предложение от gitlab сменить текущий пароль, меняем.

Настраиваем Apache конфиг для gitlab

Осталось настроить Apache. Переходим в папку /etc/httpd/sites-available и создаем там файлик gitlab со следующим содержимым:

Содержимое конфиг файла gitlab для Apache

<VirtualHost *:80>
    ServerName OUR_COOL_URL
    
    ServerSignature Off
    
    ProxyPreserveHost On
    
#   Ensure that encoded slashes are not decoded but left in their encoded state.
    AllowEncodedSlashes Off
    
    <Location /gitlab>
        Order deny,allow
        Allow from all
        
        ProxyPassReverse http://127.0.0.1:8080
        ProxyPassReverse http://OUR_COOL_URL/
    </Location>
    
#   apache equivalent of nginx try files
    RewriteEngine on
    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
    RewriteRule .* http://127.0.0.1:8080%{REQUEST_URI} [P,QSA]
    
#   needed for downloading attachments
    DocumentRoot /home/git/gitlab/public
    
    Alias /gitlab /home/git/gitlab/public
    <Directory /home/git/gitlab/public>
        Options All -Indexes
        AllowOverride All
        Order deny,allow
        Allow from all
    </Directory>
    
    <Directory /home/git/gitlab/public/assets>
        Options All -Indexes
        AllowOverride All
        Order deny,allow
        Allow from all
    </Directory>
    
    LogFormat "%{X-Forwarded-For}i %l %u %t "%r" %>s %b" common_forwarded
    ErrorLog  /var/log/httpd/gitlab_error.log
    LogLevel warn
    CustomLog /var/log/httpd/gitlab_access.log combined env=!dontlog
    CustomLog /var/log/httpd/gitlab combined
    
</VirtualHost>

Полезные заметки


Проблемы, с которыми возможно столкнуться во время установки и после

  • Если вы использовали другое имя пользователя отличное от git то необходимо во всех конфигах gitlab, gitlab-shell, redis поменять пути. К примеру, в gitlab-shell в файле config.yml необходимо в нескольких местах исправить пути, допустим у нас пользователь gitlab:
    План действия

    #путь где будут созданы репозитории
    repos_path: "/home/gitlab/repositories"
    
    #путь к папке где будут храниться паблик ключи пользователей
    auth_file: "/home/gitlab/.ssh/authorized_keys"
    
    #путь к файлу логов
    log_file: "/home/gitlab/gitlab-shell/gitlab-shell.log"
    

  • По умолчанию пользователь Administrator(root) создан с email example@localhost, мы можем изменить этот email, а так же email from на нужные в следующих файлах:
    Список файлов

    /home/git/gitlab/config/gitlab.teatro.yml:    email_from: example@localhost
    /home/git/gitlab/config/gitlab.teatro.yml:    support_email: example@localhost
    /home/git/gitlab/config/gitlab.yml:    email_from: example@localhost
    /home/git/gitlab/db/fixtures/development/01_admin.rb:  s.email = "example@localhost"
    /home/git/gitlab/db/fixtures/production/001_admin.rb:  email: "example@localhost"
    

  • Если у вас при git push в репозиторий проекта, созданного в gitlab, вылазит следующая ошибка «constants.rb:2:in `<module:Bundler>': uninitialized constant Bundler: :RbConfig (NameError)», то необходимо обновить установленный в системе ruby.
    План действия

    #запускаем
    sudo /sbin/pkgtool
    
    #открываем View и  ищем в списке ruby (для быстрого перехода можно нажать на "r")
    #выходим и пишем
    which ruby
    which rake
    which gem
    
    #сравниваем версии, 99% , что версия в pkgtool младше и нужно будет сделать обновление
    
    #так же на всякий случай откроем на редактирование файлик boot в папке gitlab
    sudo -u git -H nano config/boot.yml
    
    #и добавим следующее прямо перед строчкой require 'rubygems', и заменим RIGHT_PATH_TO_GEM_FROM_WHICH_RESULT на путь который мы получили
    #как результат комманды which gem
    ENV['GEM_PATH'] = "RIGHT_PATH_TO_GEM_FROM_WHICH_RESULT"
    Gem.clear_paths
    

  • Если у вас во время git push в репозиторий проекта созданного в gitlab вылазит следующая ошибка «GitLab: An unexpected error occurred (redis-cli returned 127).», делаем следующее:
    План действия

    #открываем на редактирование файл config в gitlab-shell
    cd /home/git/gitlab-shell && sudo -u git -H nano config.yml
    
    #находим следующий блок
    # Redis settings used for pushing commit notices to gitlab
    redis:
      bin: /usr/local/redis-cli
    #и меняем значение в bin на правильный путь к redis-cli
    

Полезные ресурсы

Автор: eliotik

Источник

* - обязательные к заполнению поля