Redmine 203 with Subversion and LDAP Authentication (for Redmine and Subversion through Redmine) on Centos 6 i386 - detailed » History » Version 5

Sven Nosse, 2012-08-24 14:07

1 5 Sven Nosse
h1. Redmine 2.0.3 on Centos 6.3 (i386) - detailed step by step
2 2 Sven Nosse
3 2 Sven Nosse
{{>toc}}
4 2 Sven Nosse
5 2 Sven Nosse
h2. Introduction
6 2 Sven Nosse
7 2 Sven Nosse
our company was using the BITNAMI stack with Redmine and Subversion for our production environment. So the goal was about changing the server and migrating the data from v1.4 to v2.0.3 including getting all repositories and permissions moved. Doing this I tried to avoid webrick but rather use the fastCGI Module for Apache2. 
8 2 Sven Nosse
Second was converting the logins from the built in database to LDAP (ActiveDirectory). Result of 2 days of work and googling is this little tutorial for setting up a mentioned box doing exactly this stuff. We are using CentOS 6 (i386) for that task. Please excuse my bad english for I am not used anymore to post long instruction manuals. Feel free to edit whatever you want. First of all, I tend to use vi so if you cannot operate vi I'd recommend to use any editor you like. If my instruction tells you to edit a file, you can find the sequence "..." which means, there is something above or below that line of text, that needs to be edited. Do not include those dots... 
9 2 Sven Nosse
10 2 Sven Nosse
h2. Assumptions
11 2 Sven Nosse
12 5 Sven Nosse
* You have a CentOS 6.3 installation (minimum install) working and SSH access to your box
13 2 Sven Nosse
* You can access the internet
14 2 Sven Nosse
* You are logged in with your root account
15 2 Sven Nosse
16 4 Sven Nosse
h2. Redmine Installation Instructions
17 2 Sven Nosse
18 2 Sven Nosse
My personal flavour is to use as less self compiled packages as necessary to get the package up and runnning. So I try to use as many repository packages as possible.
19 2 Sven Nosse
20 2 Sven Nosse
h3. turn off SE-Linux
21 2 Sven Nosse
22 3 Sven Nosse
I spent a lot of time to find out, that se-linux can be a real party pooper. So I strongly recommend to disable that first before installing anything else. You can find a tutorial inside the howto section describing how to enable SELinux for your installation.
23 2 Sven Nosse
<pre>
24 2 Sven Nosse
vi /etc/selinux/config
25 2 Sven Nosse
</pre>
26 2 Sven Nosse
27 2 Sven Nosse
find the line with SELINUX and set it to
28 2 Sven Nosse
<pre>
29 2 Sven Nosse
...
30 2 Sven Nosse
SELINUX=disabled
31 2 Sven Nosse
...
32 2 Sven Nosse
</pre>
33 2 Sven Nosse
Do a reboot *NOW*
34 2 Sven Nosse
35 2 Sven Nosse
h3. Install basic services (Apache, mySQL, and several tools...
36 2 Sven Nosse
37 2 Sven Nosse
Now we are good to go to install some tools that might be useful during our installation... First of all, update your system and then install some packages
38 2 Sven Nosse
<pre>
39 2 Sven Nosse
yum update
40 2 Sven Nosse
yum -y install wget system-config-network system-config-firewall vim openssh-clients
41 2 Sven Nosse
yum -y install httpd mysql mysql-server 
42 2 Sven Nosse
</pre>
43 2 Sven Nosse
After that continue and install all packages that might be necessary during the ruby and redmine installation.
44 2 Sven Nosse
<pre>
45 2 Sven Nosse
yum -y install ruby rubygems 
46 2 Sven Nosse
yum -y install zlib-devel curl-devel openssl-devel httpd-devel apr-devel apr-util-devel mysql-devel gcc ruby-devel gcc-c++ make postgresql-devel ImageMagick-devel sqlite-devel perl-LDAP mod_perl perl-Digest-SHA
47 2 Sven Nosse
</pre>
48 2 Sven Nosse
49 2 Sven Nosse
h3. Configure basic services
50 2 Sven Nosse
51 2 Sven Nosse
let's configure the basic services, first of all, enable mySQL and Apache to start at bootup
52 2 Sven Nosse
<pre>
53 2 Sven Nosse
chkconfig httpd on --level 2345
54 2 Sven Nosse
chkconfig mysqld on --level 2345
55 2 Sven Nosse
</pre>
56 2 Sven Nosse
After configuring these, start them up
57 2 Sven Nosse
<pre>
58 2 Sven Nosse
service httpd start
59 2 Sven Nosse
service mysqld start
60 2 Sven Nosse
</pre>
61 2 Sven Nosse
Now configure your new mySQL Installation and follow the instructions. Please note the mysql administrator password.
62 2 Sven Nosse
<pre>
63 2 Sven Nosse
/usr/bin/mysql_secure_installation
64 2 Sven Nosse
</pre>
65 2 Sven Nosse
66 2 Sven Nosse
h3. Configure passenger for Apache
67 2 Sven Nosse
68 2 Sven Nosse
You need to install passenger for Apache using gem. Do the following on the command line
69 2 Sven Nosse
<pre>
70 2 Sven Nosse
gem install passenger
71 2 Sven Nosse
passenger-install-apache2-module
72 2 Sven Nosse
</pre>
73 2 Sven Nosse
Please notice the installation messages! The next .conf file might use another path or version! 
74 2 Sven Nosse
After this you need to generate a conf file with the displayed content
75 2 Sven Nosse
<pre>
76 2 Sven Nosse
vi /etc/httpd/conf.d/ruby.conf
77 2 Sven Nosse
</pre>
78 2 Sven Nosse
During my installation the following content was displayed and needs to be entered in that file:
79 2 Sven Nosse
<pre>
80 2 Sven Nosse
   LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-3.0.15/ext/apache2/mod_passenger.so
81 2 Sven Nosse
   PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.15
82 2 Sven Nosse
   PassengerRuby /usr/bin/ruby
83 2 Sven Nosse
</pre>
84 2 Sven Nosse
Restart your apache with
85 2 Sven Nosse
<pre>
86 2 Sven Nosse
service httpd restart
87 2 Sven Nosse
</pre>
88 2 Sven Nosse
89 2 Sven Nosse
h3. Get Redmine and install it
90 2 Sven Nosse
91 2 Sven Nosse
change to your home directory and download the latest version, expand it and copy it to the right place.
92 2 Sven Nosse
<pre>
93 2 Sven Nosse
cd
94 2 Sven Nosse
wget http://rubyforge.org/frs/download.php/76259/redmine-2.0.3.tar.gz
95 2 Sven Nosse
tar xvfz redmine-2.0.3.tar.gz
96 2 Sven Nosse
mkdir /var/www/redmine
97 2 Sven Nosse
cp -av redmine-2.0.3/* /var/www/redmine
98 2 Sven Nosse
</pre>
99 2 Sven Nosse
Next is to install bundler and let it install the production environment (with automatic resolve)
100 2 Sven Nosse
Now change to this directory - *this is your new Redmine application directory!*
101 2 Sven Nosse
<pre>
102 2 Sven Nosse
cd /var/www/redmine
103 2 Sven Nosse
gem install bundler
104 2 Sven Nosse
bundle install --without development test
105 2 Sven Nosse
</pre>
106 2 Sven Nosse
fetch some coffee... this might take some time... 
107 2 Sven Nosse
108 2 Sven Nosse
h3. Create Redmine database
109 2 Sven Nosse
110 2 Sven Nosse
Next to generate a new database for redmine... Log on to your datbase with the following command. If prompted for a password, enter it.
111 2 Sven Nosse
<pre>
112 2 Sven Nosse
mysql -u root -p
113 2 Sven Nosse
</pre>
114 2 Sven Nosse
I tend to create a local only user for that database, change the password 'very_secret' to a better one :)
115 2 Sven Nosse
<pre>
116 2 Sven Nosse
create database redmine character set utf8;
117 2 Sven Nosse
create user 'redmine'@'localhost' identified by 'very_secret';
118 2 Sven Nosse
grant all privileges on redmine.* to 'redmine'@'localhost'; 
119 2 Sven Nosse
quit;
120 2 Sven Nosse
</pre>
121 2 Sven Nosse
122 2 Sven Nosse
h3. Configure Redmine
123 2 Sven Nosse
124 2 Sven Nosse
First of all, copy the example config to a productive one and edit the config for your needs
125 2 Sven Nosse
<pre>
126 2 Sven Nosse
cd /var/www/redmine/config
127 2 Sven Nosse
cp database.yml.example database.yml
128 2 Sven Nosse
vi /var/www/redmine/config/database.yml
129 2 Sven Nosse
</pre>
130 2 Sven Nosse
Now find the production section inside this file and edit it like that
131 2 Sven Nosse
<pre>
132 2 Sven Nosse
...
133 2 Sven Nosse
production:
134 2 Sven Nosse
  adapter: mysql
135 2 Sven Nosse
  database: redmine
136 2 Sven Nosse
  host: localhost
137 2 Sven Nosse
  username: redmine
138 2 Sven Nosse
  password: very_secret
139 2 Sven Nosse
  encoding: utf8
140 2 Sven Nosse
...
141 2 Sven Nosse
</pre>
142 2 Sven Nosse
Head back to your application directory and generate a secret token
143 2 Sven Nosse
<pre>
144 2 Sven Nosse
cd /var/www/redmine/
145 2 Sven Nosse
rake generate_secret_token
146 2 Sven Nosse
</pre>
147 2 Sven Nosse
Now it is about time to generate the database structure (application directory!)
148 2 Sven Nosse
<pre>
149 2 Sven Nosse
cd /var/www/redmine/
150 2 Sven Nosse
RAILS_ENV=production rake db:migrate
151 2 Sven Nosse
</pre>
152 2 Sven Nosse
fill the database with default values...
153 2 Sven Nosse
<pre>
154 2 Sven Nosse
cd /var/www/redmine/
155 2 Sven Nosse
RAILS_ENV=production rake redmine:load_default_data
156 2 Sven Nosse
</pre>
157 2 Sven Nosse
follow the instructions to select your language.
158 2 Sven Nosse
159 2 Sven Nosse
h3. mind the firewall!
160 2 Sven Nosse
161 2 Sven Nosse
be aware that the firewall is enabled by default (which is good!). So if you know which ports to open, do it now or disable the firewall (just for testing purposes). I'd really recommend disabling the firewall during installation and enable it (opening ports) after you are sure that everything works.
162 2 Sven Nosse
<pre>
163 2 Sven Nosse
system-config-firewall
164 2 Sven Nosse
</pre>
165 2 Sven Nosse
use the onscreen menu to disable it or adjust the values.
166 2 Sven Nosse
167 2 Sven Nosse
h3. do a testdrive!
168 2 Sven Nosse
169 2 Sven Nosse
I mentioned that I wanted not to use webrick, but for a testdrive, it'll work. This helps finding bugs and errors that might have occured before.
170 2 Sven Nosse
<pre>
171 2 Sven Nosse
cd /var/www/redmine/
172 2 Sven Nosse
ruby script/rails server webrick -e production
173 2 Sven Nosse
</pre>
174 2 Sven Nosse
Open up a browser and point it to: http://yoursystemname.yourdomain.com:3000 - the default username and password is 'admin'.
175 2 Sven Nosse
If everything is working, you are good to go! Kill webrick by hitting Ctrl+C.
176 2 Sven Nosse
177 2 Sven Nosse
h3. activate FCGI and generate plugin directory
178 2 Sven Nosse
179 2 Sven Nosse
To activate the fcgi module you need to copy the example file and edit the very first line. During this step it is recommended to generate the default .htaccess config as well.
180 2 Sven Nosse
<pre>
181 2 Sven Nosse
cd /var/www/redmine/public
182 2 Sven Nosse
mkdir plugin_assets
183 2 Sven Nosse
cp dispatch.fcgi.example dispatch.fcgi
184 2 Sven Nosse
cp htaccess.fcgi.example .htaccess
185 2 Sven Nosse
vi /var/www/redmine/public/dispatch.fcgi
186 2 Sven Nosse
</pre>
187 2 Sven Nosse
now edit dispatch.fcgi and change it like this...
188 2 Sven Nosse
<pre>
189 2 Sven Nosse
#!/usr/bin/ruby
190 2 Sven Nosse
...
191 2 Sven Nosse
</pre>
192 2 Sven Nosse
193 2 Sven Nosse
h3. Apache permissions!
194 2 Sven Nosse
195 2 Sven Nosse
this one is important, so don't miss that one... 
196 2 Sven Nosse
<pre>
197 2 Sven Nosse
chown -R apache:apache /var/www/redmine/
198 2 Sven Nosse
</pre>
199 2 Sven Nosse
200 2 Sven Nosse
h3. Getting Apache to work with FastCGI
201 2 Sven Nosse
202 2 Sven Nosse
Unfortunately the default Repo from CentOS cannot deliver the fcgid module so it is important to include a replo, that can deliver this package. I use the Fedora Repo so it is time to activate this... Again - this can change so please take care which repository to use.
203 2 Sven Nosse
<pre>
204 2 Sven Nosse
rpm --import https://fedoraproject.org/static/0608B895.txt
205 2 Sven Nosse
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
206 2 Sven Nosse
rpm -ivh epel-release-6-7.noarch.rpm
207 2 Sven Nosse
yum -y install mod_fcgid
208 2 Sven Nosse
</pre>
209 2 Sven Nosse
210 2 Sven Nosse
h3. set the file path for Redmine
211 2 Sven Nosse
212 2 Sven Nosse
I wanted to move the files to another location, so I decided to move them to /opt/redmine
213 2 Sven Nosse
<pre>
214 2 Sven Nosse
mkdir /opt/redmine
215 2 Sven Nosse
mkdir /opt/redmine/files
216 2 Sven Nosse
chown -R apache:apache /opt/redmine
217 2 Sven Nosse
</pre>
218 2 Sven Nosse
now edit the configuration
219 2 Sven Nosse
<pre>
220 2 Sven Nosse
cd /var/www/redmine/config
221 2 Sven Nosse
cp configuration.yml.example configuration.yml
222 2 Sven Nosse
vi /var/www/redmine/config/configuration.yml
223 2 Sven Nosse
</pre>
224 2 Sven Nosse
edit the path settings inside this file...
225 2 Sven Nosse
<pre>
226 2 Sven Nosse
...
227 2 Sven Nosse
  attachments_storage_path: /opt/redmine/files
228 2 Sven Nosse
...
229 2 Sven Nosse
</pre>
230 2 Sven Nosse
231 2 Sven Nosse
h3. Telling Apache to serve REDMINE
232 2 Sven Nosse
233 2 Sven Nosse
The final step is to tell apache, where to find Redmine and what to do with it. Generate a new conf file for your virtual host to serve redmine...
234 2 Sven Nosse
<pre>
235 2 Sven Nosse
vi /etc/httpd/conf.d/redmine.conf
236 2 Sven Nosse
</pre>
237 2 Sven Nosse
and enter the following config (adjust to your needs ;) )
238 2 Sven Nosse
<pre>
239 2 Sven Nosse
<VirtualHost *:80>
240 2 Sven Nosse
        ServerName yoursystemname.yourdomain.com
241 2 Sven Nosse
        ServerAdmin yourmail@yourdomain.com
242 2 Sven Nosse
        DocumentRoot /var/www/redmine/public/
243 2 Sven Nosse
        ErrorLog logs/redmine_error_log
244 2 Sven Nosse
245 2 Sven Nosse
        MaxRequestLen 20971520
246 2 Sven Nosse
247 2 Sven Nosse
        <Directory "/var/www/redmine/public/">
248 2 Sven Nosse
249 2 Sven Nosse
                Options Indexes ExecCGI FollowSymLinks
250 2 Sven Nosse
                Order allow,deny
251 2 Sven Nosse
                Allow from all
252 2 Sven Nosse
                AllowOverride all
253 2 Sven Nosse
        </Directory>
254 2 Sven Nosse
</VirtualHost>
255 2 Sven Nosse
</pre>
256 2 Sven Nosse
Restart Apache and cross your fingers, wheter you can access http://yoursystemname.yourdomain.com - redmine should be available right now...
257 2 Sven Nosse
<pre>
258 2 Sven Nosse
service httpd restart
259 2 Sven Nosse
</pre>
260 2 Sven Nosse
261 2 Sven Nosse
h3. Additional Config: E-Mail System
262 2 Sven Nosse
263 2 Sven Nosse
in order to get emails sent to your clients, edit the configuration.yml and enter your server settings...
264 2 Sven Nosse
<pre>
265 2 Sven Nosse
vi /var/www/redmine/config/configuration.yml
266 2 Sven Nosse
</pre>
267 2 Sven Nosse
now find the settings for your server... the following settings describe an anonymous relay on an internal server. You need to remove the username and password line if you use anonymous sign on.
268 2 Sven Nosse
<pre>
269 2 Sven Nosse
...
270 2 Sven Nosse
default:
271 2 Sven Nosse
  # Outgoing emails configuration (see examples above)
272 2 Sven Nosse
  email_delivery:
273 2 Sven Nosse
    delivery_method: :smtp
274 2 Sven Nosse
    smtp_settings:
275 2 Sven Nosse
      address: mailserver.yourdomain.com
276 2 Sven Nosse
      port: 25
277 2 Sven Nosse
      domain: yourdomain.com
278 2 Sven Nosse
...
279 2 Sven Nosse
</pre>
280 2 Sven Nosse
281 2 Sven Nosse
h2. Getting Subversion working
282 2 Sven Nosse
283 2 Sven Nosse
After getting Redmine working, it is time to get Subversion working... The goal is to integrate the repositories inside Redmine and host them on the same server...
284 2 Sven Nosse
285 2 Sven Nosse
h3. Installing Packages for Subversion
286 2 Sven Nosse
287 2 Sven Nosse
Install the following packages
288 2 Sven Nosse
<pre>
289 2 Sven Nosse
yum -y install mod_dav_svn subversion subversion-ruby
290 2 Sven Nosse
</pre>
291 2 Sven Nosse
292 2 Sven Nosse
h3. Linking authentication for Redmine
293 2 Sven Nosse
294 2 Sven Nosse
Redmine provides a perl module to handle Apache authentication on SVN DAV repositories. First step is to link that module into the search path
295 2 Sven Nosse
<pre>
296 2 Sven Nosse
mkdir /usr/lib/perl5/vendor_perl/Apache
297 2 Sven Nosse
ln -s /var/www/redmine/extra/svn/Redmine.pm /usr/lib/perl5/vendor_perl/Apache/Redmine.pm
298 2 Sven Nosse
</pre>
299 2 Sven Nosse
300 2 Sven Nosse
h3. creating repository for subversion
301 2 Sven Nosse
302 2 Sven Nosse
create a path and set permissions for your SVN repo...
303 2 Sven Nosse
<pre>
304 2 Sven Nosse
mkdir /opt/subversion
305 2 Sven Nosse
chown -R apache:apache /opt/subversion
306 2 Sven Nosse
</pre>
307 2 Sven Nosse
308 2 Sven Nosse
h3. edit virtual host for apache to serve SVN with redmine
309 2 Sven Nosse
310 2 Sven Nosse
to get Apache working with subversion, you need to adjust (create) the virtual host file
311 2 Sven Nosse
<pre>
312 2 Sven Nosse
vi /etc/httpd/conf.d/subversion.conf
313 2 Sven Nosse
</pre>
314 2 Sven Nosse
now enter/edit the following
315 2 Sven Nosse
<pre>
316 2 Sven Nosse
PerlLoadModule Apache::Redmine
317 2 Sven Nosse
<Location /svn>
318 2 Sven Nosse
        DAV svn
319 2 Sven Nosse
        SVNParentPath "/opt/subversion"
320 2 Sven Nosse
        SVNListParentPath on
321 2 Sven Nosse
        Order deny,allow
322 2 Sven Nosse
        Deny from all
323 2 Sven Nosse
        Satisfy any
324 2 Sven Nosse
        LimitXMLRequestBody 0
325 2 Sven Nosse
        SVNPathAuthz off
326 2 Sven Nosse
327 2 Sven Nosse
        PerlAccessHandler Apache::Authn::Redmine::access_handler
328 2 Sven Nosse
        PerlAuthenHandler Apache::Authn::Redmine::authen_handler
329 2 Sven Nosse
        AuthType Basic
330 2 Sven Nosse
        AuthName "Redmine SVN Repository"
331 2 Sven Nosse
332 2 Sven Nosse
        Require valid-user
333 2 Sven Nosse
        RedmineDSN "DBI:mysql:database=redmine;host=localhost:3306"
334 2 Sven Nosse
        RedmineDbUser "redmine"
335 2 Sven Nosse
        RedmineDbPass "OuaWe0HXidr39X"
336 2 Sven Nosse
337 2 Sven Nosse
        # cache max. 50 passwords
338 2 Sven Nosse
        RedmineCacheCredsMax 50
339 2 Sven Nosse
</Location>
340 2 Sven Nosse
</pre>
341 2 Sven Nosse
342 2 Sven Nosse
*BE RIGHT BACK! THIS WILL BE CONTINUED IN A FEW HOURS!*