- PVSM.RU - https://www.pvsm.ru -

Установка Gitorious на Centos 6

image
Gitorious – open source альтернатива GitHUB, написан на RoR, использует ActiveMQ (в данном случае Stomp)
Установка производилась на свежеустановленный дистрибутив CentOS-6.2-x86_64-minimal. Все команды выполняются от root, там где нужен другой пользователь будет соответствующее указание.

Время на установку ~3 часа

Подготовка к увстановке Gitorious

Для удобства установил консольный текстовый редактор nano (не люблю vi), качалку wget, файловый менеджер midnight commander

yum install nano wget mc

Теперь нужно добавить RPMForge репозиторий

wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

Затем обновим систему и установим некоторые требуемые пакеты

yum update
yum groupinstall -y "Development tools" "Development Libraries"

yum install -y git-core git-svn java-1.6.0-openjdk vim-* apg pcre pcre-devel zlib zlib-devel libyaml-devel GeoIP-devel sphinx mysql-devel mysql-server mysql readline-devel libxml2-devel libxslt libxslt-devel aspell*

MySQL

Теперь настраиваем MySQL

service mysqld start
/usr/bin/mysql_secure_installation

Устанавливаем пароль для пользователя root и отвечаем yes на все запросы

Ruby Enterprise Edition

Скачиваем последний дистрибутив ruby enterprise с www.rubyenterpriseedition.com/download.html [1] и устанавливаем

wget  http://rubyenterpriseedition.googlecode.com/files/ruby-enterprise-1.8.7-2012.02.tar.gz
tar xzf tar xzf ruby-enterprise-1.8.7-2012.02.tar.gz
cd cd ruby-enterprise-1.8.7-2012.02
./installer

Жмем Enter 2 раза и дожидамся окончания установки
Настраиваем ruby и изменяем переменные окружения

cd /opt
ln -s ruby-enterprise-1.8.7-2012.02/ ruby
nano /etc/profile
Добавляем следующие настройки после строки if [ "$EUID" = "0" ]; then
pathmunge /opt/ruby/bin
export RAILS_ENV=production
export PATH=/usr/local/sphinx/bin:/usr/local/bin:$PATH
export _JAVA_OPTIONS=-Xmx64m
export MAGICK_HOME=/usr/local
export DYLD_LIBRARY_PATH=/usr/local/lib

Добавляем следующие настройки в самый конец файла

nano /etc/bashrc
pathmungea () {
                if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
                        if [ "$2" = "after" ] ; then
                                PATH=$PATH:$1
                        else
                                PATH=$1:$PATH
                        fi
                fi
        }
pathmungea /opt/ruby/bin
export RAILS_ENV=production
export PATH=/usr/local/sphinx/bin:/usr/local/bin:$PATH
export _JAVA_OPTIONS=-Xmx64m
export MAGICK_HOME=/usr/local
export DYLD_LIBRARY_PATH=/usr/local/lib
unset pathmungea

Теперь перелогиниваемся и приступаем к установке ImageMagick

ImageMagick

cd ~
yum install -y tcl-devel libpng-devel libjpeg-devel ghostscript-devel bzip2-devel freetype-devel libtiff-devel

в yum устаревшая версия ImageMagick, так что устанавливаем из исходников, для предотвращения возникновения ошибок

wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.7.6-1.tar.gz
tar xzf ImageMagick-6.7.6-1.tar.gz
cd ImageMagick-6.7.6-1
./configure --prefix=/usr/local --with-bzlib=yes --with-fontconfig=yes --with-freetype=yes --with-gslib=yes --with-gvc=yes --with-jpeg=yes --with-jp2=yes --with-png=yes --with-tiff=yes
make
make install

Теперь нужно установить некоторые ruby gems и bundle exec

gem install bundle
gem install sphinx rmagick ultrasphinx mime-types chronic ruby-hmac daemons mime-types BlueCloth ruby-yadis ruby-openid rspec rspec-rails RedCloth stompserver --no-ri --no-rdoc

Добавляем EPEL репозиторий (download.fedora.redhat.com сменился на dl.fedoraproject.org)

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm	
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm

Gitorious

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

useradd -d /home/git git

su git
cd ~
mkdir log
mkdir conf
git clone git://gitorious.org/gitorious/mainline.git gitorious
cd gitorious/
mkdir -p tmp/pids
exit
#logout в root
 
ln -s /home/git/gitorious/script/gitorious /usr/local/bin/gitorious
cd /home/git/gitorious/
chmod ug+x script/*
chmod -R g+w config/ log/ public/ tmp/

Конфигурируем gitorious

su git
nano /home/git/gitorious/doc/templates/centos/git-daemon
RUBY_HOME="/opt/ruby"
GITORIOUS_HOME="/home/git/gitorious"
 
nano /home/git/gitorious/doc/templates/centos/git-ultrasphinx
GITORIOUS_HOME="/home/git/gitorious"
 
nano /home/git/gitorious/doc/templates/centos/git-poller
RUBY_HOME="/opt/ruby"
GITORIOUS_HOME="/home/git/gitorious"
export _JAVA_OPTIONS=-Xmx64m
 
nano /home/git/gitorious/doc/templates/centos/stomp
RUBY_HOME="/opt/ruby"
GEMS_HOME="/opt/ruby"
GITORIOUS_HOME="/home/git/gitorious"
		
exit
gem install --no-ri --no-rdoc -v 1.5.0 json
gem install --no-ri --no-rdoc -v 1.3.1.1 rdiscount
gem install --no-ri --no-rdoc -v 0.8.7 rake
gem install --no-ri --no-rdoc -v 1.1.0 daemons
gem install --no-ri --no-rdoc -v 0.8.9 geoip
gem install --no-ri --no-rdoc -v 1.0 raspell

gem uninstall rake -v 0.9.2.2


cd /home/git/gitorious

bundle install

cp config/database.sample.yml config/database.yml
cp config/gitorious.sample.yml config/gitorious.yml
cp config/broker.yml.example config/broker.yml


su git
mkdir /home/git/data
mkdir /home/git/data/repositories
mkdir /home/git/data/tarballs
mkdir /home/git/data/tarball-work
chown -R git:git /home/git/data

#Включаем вход по ключам
mkdir /home/git/.ssh
chmod -R 700 /home/git/.ssh
touch /home/git/.ssh/authorized_keys
chmod 600 /home/git/.ssh/authorized_keys
chmod -R 700 /home/git/data
exit

chown -R git:git /home/git
chmod 711 /home/git

Создаем секретный куки для конфигурационного файла

apg -m 64

и копируем полученные данные в файл

nano /home/git/gitorious/config/gitorious.yml

в строку cookie_secret:

Пример:

development:
  cookie_secret: SwouncievNivJucivrevnisfookEcnasiarHamgogdipmopyicbyctyikBagArimgronugAmIsUkDifpoyftEggobviuzIpArgecHewElsOcubnuejEtDecerlyooHibsmivyecivfalakMarfAvikokip^ojyorwahonkIrEdeibZepbivsaftIdmapmic)frivetcetEceivepJuxNeipnidzaroyffAgVevfuIvDesemAfyacAppAtdeavayswenEjUcoofnafryefGewboshkyersufcawJontIavZenFeifWoitGejEajnoiWrysawidHewofOkheTwiOjFigWigbobinCushBurnErnodedLuenAtTeyznoynoryop
  repository_base_path: "/home/git/data/repositories"
  extra_html_head_data:
  system_message:
  gitorious_client_port: 80
  gitorious_client_host: git.example.com
  gitorious_host: git.example.com
  gitorious_user: git
  exception_notification_emails: admin@example.com
  mangle_email_addresses: true
  public_mode: true
  locale: en
  archive_cache_dir: "/home/git/data/tarballs"
  archive_work_dir: "/home/git/data/tarball-work"
  only_site_admins_can_create_projects: true
  hide_http_clone_urls: false
  is_gitorious_dot_org: false
    use_ssl: false 
test:
  cookie_secret: SwouncievNivJucivrevnisfookEcnasiarHamgogdipmopyicbyctyikBagArimgronugAmIsUkDifpoyftEggobviuzIpArgecHewElsOcubnuejEtDecerlyooHibsmivyecivfalakMarfAvikokip^ojyorwahonkIrEdeibZepbivsaftIdmapmic)frivetcetEceivepJuxNeipnidzaroyffAgVevfuIvDesemAfyacAppAtdeavayswenEjUcoofnafryefGewboshkyersufcawJontIavZenFeifWoitGejEajnoiWrysawidHewofOkheTwiOjFigWigbobinCushBurnErnodedLuenAtTeyznoynoryop
  repository_base_path: "/home/git/data/repositories"
  extra_html_head_data:
  system_message:
  gitorious_client_port: 80
  gitorious_client_host: git.example.com
  gitorious_host: git.example.com
  gitorious_user: git
  exception_notification_emails: admin@example.com
  mangle_email_addresses: true
  public_mode: true
  locale: en
  archive_cache_dir: "/home/git/data/tarballs"
  archive_work_dir: "/home/git/data/tarball-work"
  only_site_admins_can_create_projects: true
  hide_http_clone_urls: false
  is_gitorious_dot_org: false
    use_ssl: false
 
production:
  cookie_secret: SwouncievNivJucivrevnisfookEcnasiarHamgogdipmopyicbyctyikBagArimgronugAmIsUkDifpoyftEggobviuzIpArgecHewElsOcubnuejEtDecerlyooHibsmivyecivfalakMarfAvikokip^ojyorwahonkIrEdeibZepbivsaftIdmapmic)frivetcetEceivepJuxNeipnidzaroyffAgVevfuIvDesemAfyacAppAtdeavayswenEjUcoofnafryefGewboshkyersufcawJontIavZenFeifWoitGejEajnoiWrysawidHewofOkheTwiOjFigWigbobinCushBurnErnodedLuenAtTeyznoynoryop
  repository_base_path: "/home/git/data/repositories"
  extra_html_head_data:
  system_message:
  gitorious_client_port: 80
  gitorious_client_host: git.example.com
  gitorious_host: git.matthouse.us
  gitorious_user: git
  exception_notification_emails: admin@example.com
  mangle_email_addresses: true
  public_mode: true
  locale: en
  archive_cache_dir: "/home/git/data/tarballs"
  archive_work_dir: "/home/git/data/tarball-work"
  only_site_admins_can_create_projects: true
  hide_http_clone_urls: false
  is_gitorious_dot_org: false
  use_ssl: false

Продолжаем настройку:

nano /home/git/gitorious/config/broker.yml

production:
    adapter: stomp
development:
    adapter: stomp
test:
    adapter: stomp

конфигурируем Mysql и инициализируем БД

mysql -uroot –p’<ROOT’S MYSQL PASSWORD>'
 
create database gitorious;
create database gitorious_test;
create database gitorious_dev;
CREATE user 'git'@'localhost' IDENTIFIED BY '<PASWORD>';
GRANT ALL ON gitorious.* TO 'git'@'localhost';
GRANT ALL ON gitorious_test.* TO 'git'@'localhost';
GRANT ALL ON gitorious_dev.* TO 'git'@'localhost';
FLUSH privileges;
exit;

nano /home/git/gitorious/config/database.yml

cd /home
chown -R git:git /home/git
cd /home/git
chmod -R 755 data
chmod 755 gitorious

cd /home/git/gitorious
nano Rakefile
#Добавить строку
require 'thread'
#перед
require 'tasks/rails'
cd /home
chown -R git:git /home/git
cd /home/git
chmod -R 755 data
chmod 755 gitorious

gem update --system 1.6.2
bundle exec rake gems:install
bundle exec rake db:create:all
bundle exec rake db:setup
bundle exec rake db:migrate

Настройка ultrsphinx:


cd /home/git/gitorious
 
export RAILS_ENV=production
export PATH=/usr/local/sphinx/bin:$PATH

bundle exec rake ultrasphinx:configure RAILS_ENV=production
bundle exec rake ultrasphinx:index 
bundle exec rake ultrasphinx:daemon:start RAILS_ENV=production

создаем ссылки на init файлы и запуcкаем сервисы необходимые для работы Gitorious

ln -s /home/git/gitorious/doc/templates/centos/git-daemon /etc/init.d/git-daemon
chmod +x /etc/init.d/git-daemon
chkconfig --add git-daemon
service git-daemon start
 
ln -s /home/git/gitorious/doc/templates/centos/stomp /etc/init.d/stomp
chmod +x /etc/init.d/stomp
chkconfig --add stomp
service stomp start
 
ln -s /home/git/gitorious/doc/templates/centos/git-poller /etc/init.d/git-poller
cd /home
chown -R git:git /home/git
cd /home/git
chmod -R 755 data
chmod 755 gitorious

chmod +x /etc/init.d/git-poller
chkconfig --add git-poller
nano /home/git/gitorious/script/poller
# Добавить require 'thread' после строки  $KCODE = 'u'
service git-poller start

ln -s /usr/local/bin/gitorious /usr/bin
 
cd /home
chown -R git:git /home/git
cd /home/git
chmod -R 755 data
chmod 755 gitorious

конфигурируем ultrasphinx

#создаем словарь
cd /home/git/gitorious
aspell config dict-dir
   /usr/lib64/aspell-0.60
cp vendor/plugins/ultrasphinx/examples/ap.multi /usr/lib64/aspell-0.60/
bundle exec rake ultrasphinx:spelling:build
 
nano /home/git/gitorious/config/ultrasphinx/production.conf
 
#изменяем "address" на"listen"
  listen = 0.0.0.0
#уменьшаем выделение памяти до 64Мб
indexer {
  mem_limit = 64M
 
#делаем git-ultrasphinx демоном.
ln -s /home/git/gitorious/doc/templates/centos/git-ultrasphinx /etc/init.d/git-ultrasphinx
chmod +x /etc/init.d/git-ultrasphinx

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

yum install -y --enablerepo=remi memcached
service memcached start
chkconfig memcached on

Apache

yum install -y httpd httpd-devel mod_xsendfile curl-devel

#настройка xsendfile
 
nano /etc/httpd/conf.d/xsendfile.conf
#добавить после строки LoadModule 
XSendFile on
XSendFilePath /home/git/data/tarballs
XSendFilePath /home/git/data/repositories

Устанавливаем Ruby passenger

/opt/ruby/bin/passenger-install-apache2-module

Пример httpd.conf [2]
Пример host.conf [3]

Финальные команды:

chcon -R -h -t httpd_sys_script_exec_t /opt/ruby/lib/ruby/gems/1.8/gems/passenger-3.0.11/ext/apache2/mod_passenger.so
service httpd configtest
service httpd start

отключаем файрволл (у нас же чистая система, он еще не настроен)

service iptables stop

Открываем в браузере git.example.com и любуемся на главную страницу gitorious

image

Автор: Diam0n


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/open-source/17061

Ссылки в тексте:

[1] www.rubyenterpriseedition.com/download.html: http://www.rubyenterpriseedition.com/download.html

[2] httpd.conf: https://github.com/Diam0nUA/gitorious_httpd/blob/master/httpd.example

[3] host.conf: https://github.com/Diam0nUA/gitorious_httpd/blob/master/host.example