Posts Tagged ‘ open source

HOWTO: Install Subversion, Ruby on Rails and Redmine on CentOS5 (& RHEL5)

[Update 17th Sept 2009]

I’ve just noticed that Redmine version 0.8.5 was released last week, while this HOWTO should still be valid, I have not yet tested it so please report any issues you experience with new installs in the comments and I’ll look into them and amend the HOWTO where necessary :)

[Updated 3rd June 2009]

So since Assembla changed it’s strategy and forced a monetised service or your once private projects were to become public after some date in February I decided to set up my own subversion repos / web management interface.

I never really used the Assembla service to its full potential however and all I really needed was a basic SVN setup with a webinterface to show the diffs in an eye-friendly format. The only two real choices were Trac and Redmine. I’d already used Trac on Assembla and countless other project sites so I was more drawn to Redmine due to it’s good interface design (imo, the Trac interface looks like it’s stuck together with Lego pieces), its features are more integrated and well, I fancied a change. The only problem was that Redmine runs on Ruby on Rails which I’ve heard very bad things about. So I decided to take a plunge and find out wtf the hassle was all about. It turns out there weren’t any up-to-date, well written and well maintained HOWTO’s out there detailing how to get a functional RoR environment configured on CentOS / RHEL. So I wrote my own (after hitting several brick walls)…

HOWTO: Install Subversion, Ruby on Rails and Redmine on CentOS5 (& RHEL5)

NOTES

  • This HOWTO is written for CentOS 5.2 [updates for 5.3 in purple text]
  • Replace [FQDN] with either your IP address or the hostname (or FQDN) which you’ll be using to access the interface.
  • Replace [user] with the username under whom’s home directory the Subversion repository database will be located. e.g. /home/[user]/svn-repos
  • This HOWTO will be using the following variables:
  • You already have the “httpd” (apache) package installed
  • You will be running apache as the user ‘apache’
  • The subversion repository root folder will be under /home/[user]/subversion/
  • The vhost’s folder locationg will be /var/www/svn
  • The subversion repository to be created will be called ‘example-repo’

Install and set up Subversion

yum install mod_dav_svn subversion

Add the group [user] to the user apache and make the subversion base URL readable and writable…

usermod -aG [user] apache
chmod g+x /home/[user]
mkdir /home/[user]/subversion
chmod g+rwx /home/[user]/subversion
chown -R [user]:[user] /home/[user]/subversion

Make the web directory:

mkdir /var/www/svn
chown apache.apache /var/www/svn

Put the following into /etc/httpd/conf.d/svn.conf (this is for a sub-repo called ‘example-repo’)

NameVirtualHost *:80
<VirtualHost *:80>
        DocumentRoot "/var/www/svn"
        ServerName [FQDN]
        <Location /example-repo>
                DAV svn
                SVNPath /home/[user]/subversion/example-repo
                AuthType Basic
                AuthName "Subversion repo"
                AuthUserFile /var/www/passwd
                Require valid-user
        </Location>

        <Directory "/var/www/svn">
        allow from all
        Options +Indexes
        </Directory>
</VirtualHost>

Add an HTTP auth user…

htpasswd -cm /var/www/passwd [user]

Create a proper SVN repository

cd /home/[user]/subversion
su [user] -c "svnadmin create example-repo"

Import any SVN repos by doing:

su [user] -c "svnadmin load example-repo < /path/to/repo/dump/file"

Make sure the permissions are correct

chmod g+rwx /home/[user]/subversion
chown -R [user].[user] /home/[user]

Install Ruby on Rails

*NOTE: Ruby on Rails installation requires the EPEL yum repository (at time of writing).

su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm'

Let’s get Ruby up and running first… [NOTE: not on an SElinux environment cba with that]

yum install httpd httpd-devel apr make gcc-c++ mysql-server mysql ruby ruby-devel ruby-docs ruby-ri \
ruby-libs ruby-mode ruby-tcltk ruby-irb ruby-rdoc fcgi fcgi-devel mod_fcgid rubygems subversion-ruby

Now we’ll install passenger (aka mod_rails)

gem install passenger
passenger-install-apache2-module

Create and insert this text into /etc/httpd/conf.d/rails.conf (or alternatively edit the existing svn.conf created when we set up subversion)
NOTE:

  • The below configuration is specific to the installation of redmine (hence the DocumentRoot)
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/ext/apache2/mod_passenger.so
   PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.0.6
   PassengerRuby /usr/bin/ruby

NameVirtualHost *:80

   <VirtualHost *:80>
     ServerName 192.168.10.17
     DocumentRoot /var/www/rails/redmine/public
   </VirtualHost>

Now on to Redmine itself

Get Redmine 0.8 from http://www.redmine.org/wiki/redmine/Download

cd /usr/src
svn co http://redmine.rubyforge.org/svn/branches/0.8-stable redmine-0.8
mkdir /var/www/rails/
cd /var/www/rails/
cp -r /usr/src/redmine-0.8/ redmine/
chown -R apache.apache redmine
cd redmine

Create a clean backup of source files

tar czf Redmine0.8-clean.tar.gz .

Initialise mySQL:

service mysqld start

To secure mysql:

mysql_secure_installation

Create a mysql database for redmine…

mysql -u[username] -p

At the prompt enter:

create database redmine character set utf8;

Quit with:

quit

Copy the example database file to the “live” location

cd /var/www/rails/redmine
cp config/database.yml.example config/database.yml

Enter the appropriate settings for the [production] section ensuring that host is set to 127.0.0.1

vim /var/www/rails/redmine/config/database.yml

Set up email

cd /var/www/rails/redmine
cp config/email.yml.example config/email.yml

Enter the appropriate settings for the [production] section ensuring that “address” is set to the IP address of the SMTP host

vim /var/www/rails/redmine/config/email.yml

Install rails for redmine using gem…

cd /var/www/rails/redmine/app/
gem install -v=2.1.2 rails

Import the redmine database into the live database specified in the above config file

cd /var/www/rails/redmine/app/
rake db:migrate RAILS_ENV="production"

Install default configuration data in database (this is entirely optional, but recommended).

cd /var/www/rails/redmine/app/
rake redmine:load_default_data RAILS_ENV="production"

Bring up the testing webserver, once loaded check your config by browsing to http://[FQDN]:3000

cd /var/www/rails/redmine/
ruby script/server -e production

Make sure your apache config file edits are ok and that the services will start at boot by doing:

service httpd configtest
service httpd restart
chkconfig httpd on
chkconfig mysqld on

[Optional:] Add the following to your crontab which will create a database backup in the /home/[user] directory

/usr/bin/mysqldump -u <user> -p <password> <database> | gzip > /home/[user]/redmine_`date +%y_%m_%d`.gz

Make your subversion server configuration accessible to redmine by doing the following:

mkdir /etc/subversion
cp -r /root/.subversion/* /etc/subversion/
vim /var/www/rails/redmine/lib/redmine/scm/adapters/subversion_adapter.rb

Change the line:

SVN_BIN = "svn"

to:

SVN_BIN = "svn --config-dir /etc/subversion"

Then restart apache:

service httpd restart

e107forge Officially opens!

So, I launched a personal project of mine yesterday which I’ve been working on-and-off for the last three or so years…

e107forge.org has been put in place to provide a single, easy-to-access location for e107 developers, plugin writers and theme coders to store and keep track of their projects, code and releases while working in conjunction with plugins.e107.org.

So what’s the difference between plugins.e107.org and e107forge.org?
The difference is the audience, while plugins.e107.org is aimed entirely at the end user who wants to be able to find a plugin easily and isn’t necessarily interested in the code behind the plugin. On the flipside, e107forge.org is all about the code and the developers, SVN and CVS access is available while providing a fully featured, easy-to-manage project page and allowing coders to collaborate together to work on a plugin. Rather than one developer writing a plugin and then another user making code changes and re-submitting the plugin, we can have collaborative developers drawn together by a particular plugin.

If you’re a developer wanting to get your code or project online but need some help along the way e107forge.org is here to help. If you’re a theme developer who’s keen to have a versioning system take care of the headaches of making minute changes here and there, e107forge.org is for you. We can provide SVN and CVS versioning control as well as bug trackers / issues / feature requests etc. It really is up to you when it comes to which features you want to use.

Some cool OSS and other apps (part 1)

Recently I’ve been swimming in an ocean of OSS (Open Source Software) searching for the perfect app(s) to solve a few problems and the results of those I felt I had to note down here.
The first is a work-related system and kicks some serious ass when I realised it’s full potential. Since I started my career with my current employer I’ve been in the midst of a supply-chain system that’s been, well, chaotic at best. As Systems Co-ordinator for this company i’d been looking for a long time for some sort of OSS system that I could implement that would increase the efficiency and transparency of the supply chain and (hopefully) make everyone’s working life a little bit easier. Idealy I was looking for a php / mySQL implementation of a work-flow management app. I couldn’t find anything for approx 6 months.

Then one day I was just having a general mooch on sourceforge and noticed a project called CRM-CTT in the recent news block on the front page. Now, the CRM (Customer Relationship Management) part of the title threw me a bit, but I was intrigued and went further. Turned out they (actually, it seems like a one-man dev project, the main guy is a guy called Hidde Fennema) had just released a mile-stone version release and they had a VMware (<3 btw) Virtual Appliance for download. Since I already have VMware installed on just about every server we have I pulled the image down to our backup server and started it up. Despite being based on slackware (bare-bones distro by nature) it seemed pretty solid, and usable. Then I got really stuck in and realised to my sheer GLEE that it was EXACTLY what we needed.

Within an afternoon I had drafted a work-flow for our supply chain – with trigger-based automation and status / assignee ability and custom form design. It was heavenly. So, if you’re looking for a work-flow app that truely has not only the end-user in mind, but also real-world implementation ability and more importantly, flexibility then I strongly suggest trying it out. For an example of it’s flexibility, this last week I’ve just been asked to roll out an implementation of the same system but this time to control and regulate the business non-stock purchase ordering. So, from managing a supply chain (from order placing, through data entry to processing by goods-in) to managing purchase orders and the admin attached (from quote gathering to invoicing) it quite literally blew my mind.

Next I’ll try to cover the hunt for the best priced economical web-hosting control panel (upon which this server runs).

—————-
Now playing: Groove Armada – Get Down on Amarok