четверг, 28 июня 2012 г.

Установка Redmine на CentOS 6.2 (Часть 1)

Неожиданно для самого себя подкралась мне задачка: на тестовом сервере установить Redmine для экспериментов. Первая мысль которая у меня всплыла в голове "Да плёвое дело! Не первый раз ставлю разного рода программы, и с этим справимся!!!" Не ожидал я того, что меня ждёт целый квест, на выполнение которого уйдёт ни много ни мало - 2 дня!!! (тут должен быть смайл бьющийся головой об стену, но решил сильно не драматизировать ситуацию).
Первым делом конечно же нырнул на сайт производителя, покурить маны, как там и что ставится. С первого взгляда, все понятно и просто. Однако, первое что меня смутило, что работает он под управлением Ruby. Так как мне ни разу не приходилось им пользоваться, решил всё таки "погуглить" на момент подводных камней при установке, чтобы быть во всеоружии. Google тут же щедро поделился ссылкой на блог, где кто то уже пытался установить Redmine на CentOS. Ну так вообще замечательно!!! Как говорится: то что доктор прописал. Да вот не задачка: блог написан коряво, да ещё английский вперемешку с японским языком. С английским я более менее могу справиться, но вот с японским!!! Собственно, не мудрствуя лукаво, решил оставить себе "узелок на память" и записать последовательность своих действий, не подозревая какая эпопея меня поджидает.

Сначала маленькое отступление от сути статьи. Redmine нужно было установить не то, что на UNIX-систему, а именно на CentOS.
Во первых, не кривя душой скажу прямо: не люблю я Linux ни в каком его проявлении. Я привык работать с FreeBSD и за последние примерно 10 лет только с "фрей" и работал. Успокаивало только одно: Linux - unix-подобная система. И хоть её развитие пошло в инородном направлении от BSD-систем, всё равно прородитель её является именно UNIX.
Во-вторых, если бы мне пришлось устанавливать Redmine на FreeBSD, думаю, что эта бы статья так бы никогда и не увидела свет. Много ли ума надо, чтобы набрать в консоли "make install clean"? Чего там описывать? Тем не менее, случилось то что должно было случиться.

Теперь к сути статьи.
Все ставиться будет на 64-битную CentOS 6.2. Сильно расписывать ничего не стал, некоторые моменты вывода информации на консоль, которые не играют ключевой роли, я опускал (вы часто увидите лейбл "[...skipped...]"). Думаю и так будет всё понятно.
Так же хочу обратить внимание, что некоторые моменты установки можно было оптимизировать. Однако, весь ход установки записан в хронологическом порядке, то есть так как это было на самом деле.
Если вы решите обратиться не ко всей статье, а только к какому то одному моменту установки, обращайте внимание на путь текущего каталога, так как в некоторых местах он играет важную роль.
Собственно, если есть какие то погрехи в статье или у вас возникли вопросы по написанному, пишите в комментариях, попробуем вместе разобраться.
Итак, набираемся терпения и... поехали!

    Содержание:
  1. Проверка текущей версии CentOS.
  2. Подготовка к установке. Установка дополнительных пакетов.
  3. Установка Ruby.
  4. Установка RubyGems.
  5. Установка Rails.
  6. Установка Extra Packages for Enterprise Linux 6 (EPEL).
  7. Установка MySQL.
  8. Конфигурация MySQL.
  9. Первый запуск MySQL.
  10. Создание пароля для root и удаление анонимного подключения к MySQL.
  11. Создание базы данных и пользователя для Redmine.
  12. Установка автоматического запуска MySQL.
  13. Установка ImageMagick.
  14. Установка поддержки шрифтов TrueType.
  15. Установка RMagick.
  16. Установка Redmine.
  17. Установка Apache.
  18. Начальная настройка Redmine.
  19. Установка модуля MySQL для подключения через Ruby.
  20. Настройка файла configuration.yml.
  21. Установка Passenger.
  22. Подключение и настройка модуля Passenger к Apache.
  23. Изменение конфигурации, если используется SELinux.
  24. Запуск Apache и установка его автозагрузки.

1. Проверка текущей версии CentOS.

[root@loginsrv ebabenko]# lsb_release -a
LSB Version:    :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description:    CentOS release 6.2 (Final)
Release:        6.2
Codename:       Final

2. Подготовка к установке. Установка дополнительных пакетов.

[root@loginsrv ebabenko]# yum groupinstall "Development Tools"

[...skipped...]

Total download size: 3.8 M
Is this ok [y/N]: y

[...skipped...]

Dependency Updated:
  systemtap-runtime.x86_64 0:1.6-5.el6_2

Complete!
[root@loginsrv ebabenko]# yum install zlib-devel openssl-devel

[...skipped...]

Total download size: 2.5 M
Is this ok [y/N]: y

[...skipped...]

Dependency Updated:
  openssl.x86_64 0:1.0.0-20.el6_2.5

Complete!
[root@loginsrv ebabenko]# yum install ncurses-devel gdbm-devel openssl-devel zlib-devel readline-devel libyaml-devel

[...skipped...]

Total download size: 25 k
Installed size: 22 k
Is this ok [y/N]: y

[...skipped...]

Installed:
  gdbm-devel.x86_64 0:1.8.0-36.el6

Complete!

3. Установка Ruby.


Качаем пакет с исходниками Ruby с сайта http://www.ruby-lang.org/en/downloads/ (на момент установки была доступна версия http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz)
[root@loginsrv ebabenko]# cp ~ebabenko/data/distrib/redmine/ruby-1.9.3-p194.tar.gz /usr/local/src
[root@loginsrv ebabenko]# cd /usr/local/src/
[root@loginsrv src]# tar zxvf ruby-1.9.3-p194.tar.gz

[...skipped...]

[root@loginsrv src]# rm ruby-1.9.3-p194.tar.gz
rm: remove regular file `ruby-1.9.3-p194.tar.gz'? y
[root@loginsrv src]# cd ruby-1.9.3-p194
[root@loginsrv ruby-1.9.3-p194]# ./configure


[...skipped...]

[root@loginsrv ruby-1.9.3-p194]# make

[...skipped...]

[root@loginsrv ruby-1.9.3-p194]# make install

[...skipped...]

[root@loginsrv ruby-1.9.3-p194]# ruby -v
bash: ruby: command not found
Настроим переменные окружения:
[root@loginsrv ruby-1.9.3-p194]# /usr/local/bin/ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
[root@loginsrv ruby-1.9.3-p194]# printenv PATH
/usr/lib/jvm/jre-1.6.0-openjdk.x86_64:/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin:/opt/maven/maven-3.0.4:/opt/maven/maven-3.0.4/bin:/sbin:/bin:/usr/sbin:/usr/bin
[root@loginsrv ruby-1.9.3-p194]# echo 'PATH=$PATH:/usr/local/bin' >> /etc/profile
[root@loginsrv ruby-1.9.3-p194]# echo 'export PATH' >> /etc/profile
[root@loginsrv ruby-1.9.3-p194]# echo 'PATH=$PATH:/usr/local/bin' >> /root/.bash_profile
[root@loginsrv ruby-1.9.3-p194]# echo 'export PATH' >> /root/.bash_profile
[root@loginsrv ruby-1.9.3-p194]# visudo
Найти следующие строки:
#
# Adding HOME to env_keep may enable a user to run unrestricted
# commands via sudo.
#
# Defaults   env_keep += "HOME"

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
В переменную secure_path добавить ':/usr/local/bin'
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
Теперь требуется проверить что пути установлены правильно и они будут доступны для каждого пользователя. Для этого нужно перелогиниться в системе. После перелогина:
[ebabenko@loginsrv ~]$ whoami
ebabenko
[ebabenko@loginsrv ~]$ printenv PATH
/usr/lib64/qt-3.3/bin:/usr/lib/jvm/jre-1.6.0-openjdk.x86_64:/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin:/opt/maven/maven-3.0.4:/opt/maven/maven-3.0.4/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/home/ebabenko/bin
[ebabenko@loginsrv ~]$ ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
[ebabenko@loginsrv ~]$ sudo -s
[sudo] password for ebabenko:
[root@loginsrv ebabenko]# whoami
root
[root@loginsrv ebabenko]# printenv PATH
/usr/lib/jvm/jre-1.6.0-openjdk.x86_64:/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin:/opt/maven/maven-3.0.4:/opt/maven/maven-3.0.4/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
[root@loginsrv ebabenko]# ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]

4. Установка RubyGems.


Качаем пакет с исходниками RubyGems с сайта http://rubyforge.org/frs/?group_id=126 (на момент установки была доступна версия http://rubyforge.org/frs/download.php/76073/rubygems-1.8.24.tgz).
[root@loginsrv ebabenko]# cp ~ebabenko/data/distrib/redmine/rubygems-1.8.24.tgz /usr/local/src
[root@loginsrv ebabenko]# cd /usr/local/src/
[root@loginsrv src]# tar zxvf rubygems-1.8.24.tgz

[...skipped...]

[root@loginsrv src]# rm rubygems-1.8.24.tgz
rm: remove regular file `rubygems-1.8.24.tgz'? y
[root@loginsrv src]# cd rubygems-1.8.24
[root@loginsrv rubygems-1.8.24]# ruby setup.rb 
/usr/local/lib/ruby/1.9.1/yaml.rb:56:in `':
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.
RubyGems 1.8.24 installed

== 1.8.24 / 2012-04-27

* 1 bug fix:

  * Install the .pem files properly. Fixes #320
  * Remove OpenSSL dependency from the http code path


------------------------------------------------------------------------------

RubyGems installed the following executables:
        /usr/local/bin/gem
Сообщение "It seems your ruby installation is missing psych (for YAML output). To eliminate this warning, please install libyaml and reinstall your ruby." говорит что даже то, что устанавливались дополнительные пакеты, их было не достаточно для полноценной работы Ruby. Поэтому добавляем недостающую библиотеку.
[root@loginsrv rubygems-1.8.24]# cd ~ebabenko/data/distrib/redmine/
[root@loginsrv redmine]# wget http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz
--2012-06-26 11:05:57--  http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz
Resolving pyyaml.org... 70.87.222.22
Connecting to pyyaml.org|70.87.222.22|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 471759 (461K) [application/x-gzip]
Saving to: "yaml-0.1.4.tar.gz"

100%[=========================================================================>] 471,759      368K/s   in 1.3s

2012-06-26 11:05:59 (368 KB/s) - "yaml-0.1.4.tar.gz" saved [471759/471759]

[root@loginsrv redmine]# cp yaml-0.1.4.tar.gz /usr/local/src
[root@loginsrv redmine]# cd /usr/local/src
[root@loginsrv src]# tar zxvf yaml-0.1.4.tar.gz
[root@loginsrv src]# rm yaml-0.1.4.tar.gz
rm: remove regular file `yaml-0.1.4.tar.gz'? y
[root@loginsrv src]# cd yaml-0.1.4
[root@loginsrv yaml-0.1.4]# ./configure

[...skipped...]

[root@loginsrv yaml-0.1.4]# make

[...skipped...]

[root@loginsrv yaml-0.1.4]# make install

[...skipped...]
И переустанавливаем Ruby и RubyGems.
[root@loginsrv yaml-0.1.4]# cd ../ruby-1.9.3-p194
[root@loginsrv ruby-1.9.3-p194]# ./configure

[...skipped...]

[root@loginsrv ruby-1.9.3-p194]# make

[...skipped...]

[root@loginsrv ruby-1.9.3-p194]# make install

[...skipped...]

[root@loginsrv ruby-1.9.3-p194]# ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
[root@loginsrv ruby-1.9.3-p194]# cd ../rubygems-1.8.24
[root@loginsrv rubygems-1.8.24]# ruby setup.rb
RubyGems 1.8.24 installed

== 1.8.24 / 2012-04-27

* 1 bug fix:

  * Install the .pem files properly. Fixes #320
  * Remove OpenSSL dependency from the http code path


------------------------------------------------------------------------------

RubyGems installed the following executables:
        /usr/local/bin/gem

[root@loginsrv rubygems-1.8.24]# gem --version
1.8.24

5. Установка Rails.


Чтобы определить, какая требуется версия Rails для Redmine, нужно посмотреть сводную таблицу на странице WIKI Redmine (источник [3]). Так как будет устанавливаться версия Redmine 2.0.3, ему требуется установка Rails версии 3.2.6.
[root@loginsrv src]# gem install rails -v 3.2.6

[...skipped...]

[root@loginsrv src]# rails -v
Rails 3.2.6

6. Установка Extra Packages for Enterprise Linux 6 (EPEL).


Доступный пакет для установки можно найти по адресу http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/, далее выбирается версия CentOS (major version), далее битность системы:
  • CentOS 6.2, major version 6, следовательно переходим в директорию 6
  • битность системы 64, следовательно переходим в директорию x86_64
На момент установки была доступна версия http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/x86_64/epel-release-6-7.noarch.rpm
[root@loginsrv src]# rpm -Uvh http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/x86_64/epel-release-6-7.noarch.rpm
Retrieving http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/x86_64/epel-release-6-7.noarch.rpm
warning: /var/tmp/rpm-tmp.xxQEqE: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Preparing...                ########################################### [100%]
   1:epel-release           ########################################### [100%]
[root@loginsrv src]# yum repolist
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
epel/metalink                                                           |  18 kB     00:00
 * base: mirror.awanti.com
 * epel: mirror.awanti.com
 * extras: mirror.awanti.com
 * jpackage-generic: sunsite.informatik.rwth-aachen.de
 * updates: mirror.awanti.com
epel                                                                    | 4.0 kB     00:00
epel/primary_db                                                         | 4.6 MB     00:02
repo id                      repo name                                                   status
base                         CentOS-6 - Base                                             6,294
epel                         Extra Packages for Enterprise Linux 6 - x86_64              7,567
extras                       CentOS-6 - Extras                                               6
jpackage-generic             JPackage (free), generic                                    2,277
updates                      CentOS-6 - Updates                                          1,147
repolist: 17,291

Продолжение статьи "Установка Redmine на CentOS 6.2 (Часть 2)".