Redmine

From Alpine Linux
Revision as of 09:58, 7 April 2011 by Aalatchm (talk | contribs) (corrections using alpine-2.1.6. Edge repository no longer needed. Some missing steps were added.)

Install Lighttpd with FastCGI

Basic Installation

For installing the additional packages first activate community packages and update the package index

Install the required packages:

# apk add lighttpd php82 fcgi php82-cgi

Configure Lighttpd

Edit lighttpd.conf (/etc/lighttpd/lighttpd.conf) and uncomment the line:

Contents of /etc/lighttpd/lighttpd.conf

... include "mod_fastcgi.conf" ...

Edit mod_fastcgi.conf (/etc/lighttpd/mod_fastcgi.conf), find and change /usr/bin/php-cgi to /usr/bin/php-cgi82.

Contents of /etc/lighttpd/mod_fastcgi.conf

... "bin-path" => "/usr/bin/php-cgi82" # php-cgi ...

Start lighttpd service and add it to default runlevel

# rc-service lighttpd start # rc-update add lighttpd default

Install extra packages for redmine:

apk add fcgi mysql mysql-dev rubygems fcgi-dev sqlite-dev

Install the following rubygems (gem install <gemname> --version <version>). Note: newer versions of the gems may work, but these have been confirmed working in Alpine 2.1.2:

gem install -V --no-rdoc --no-ri actionmailer --version 2.3.3
gem install -V --no-rdoc --no-ri activerecord --version 2.3.3
gem install -V --no-rdoc --no-ri activeresource --version 2.3.3 
gem install -V --no-rdoc --no-ri edavis10-object_daddy --version 0.4.3
gem install -V --no-rdoc --no-ri fcgi --version 0.8.8
gem install -V --no-rdoc --no-ri mocha --version 0.9.10
gem install -V --no-rdoc --no-ri mysql --version 2.8.1
gem install -V --no-rdoc --no-ri rails --version 2.3.3
gem install -V --no-rdoc --no-ri shoulda --version 2.10.3
gem install -V --no-rdoc --no-ri sqlite3 --version 1.3.3

Configure MySql

/usr/bin/mysql_install_db --user=mysql
/etc/init.d/mysql start && rc-update add mysql default
/usr/bin/mysqladmin -u root password 'password'

Create the redmine database

mysql -u root -p
create database redmine character set utf8;
grant all privileges on redmine.* to 'redmine'@'localhost' identified by 'Secur3P@ass';
flush privileges;
exit

Create redmine folder

mkdir -p /usr/share/webapps/redmine

Download, unpack and move Redmine

cd /tmp/
wget http://rubyforge.org/frs/download.php/73140/redmine-1.0.3.tar.gz
tar zxvf redmine-1.0.3.tar.gz
mv redmine-1.0.3/* /usr/share/webapps/redmine/

Change permissions

chown -R lighttpd:lighttpd /usr/share/webapps/redmine
chmod 0666 /usr/share/webapps/log/production.log
mkdir /var/run/redmine
chown lighttpd:lighttpd /var/run/redmine

Edit the database config file and add the mysql password at every occurrence of "password:"

cp /usr/share/webapps/redmine/config/database.yml.example /usr/share/webapps/redmine/config/database.yml
nano /usr/share/webapps/redmine/config/database.yml 

Some more steps

cd /usr/share/webapps/redmine
mv public/dispatch.fcgi.example public/dispatch.fcgi
rake generate_session_store
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data 

Note: keep default language of en

Start the Redmine testing webserver

ruby /usr/share/webapps/redmine/script/server webrick -e production

Now you can browse to localhost:3000 an log using admin user and admin password.

Once Redmine is confirmed working, kill webrick.

Set up lighttpd by editing lighttpd.conf.

Uncomment the following line:
   "mod_alias",
Add the following content to the end of the file:
$HTTP["url"] =~ "^/redmine/" {
 alias.url = ("/redmine" => "/usr/share/webapps/redmine/public")
 server.document-root = "/usr/share/webapps/redmine/public/"
 server.error-handler-404 = "/redmine/dispatch.fcgi"
 index-file.names         = ("dispatch.fcgi")
 # Change *-procs to 2 if you need to use Upload Progress or other tasks that
 # *need* to execute a second request while the first is still pending.
 fastcgi.server           += (
       ".fcgi" => (
               "localhost" => (
                       "min-procs"       => 1,
                       "max-procs"       => 2,
                       "check-local"    => "disable",
                       "socket"          => "/var/run/redmine/fcgi.socket",
                       "bin-path"        => "/usr/bin/ruby /usr/share/webapps/redmine/public/dispatch.fcgi",
                       "bin-environment" => (
                               "RAILS_ENV"               => "production"
                       )
               )
       )
 )
}

Configure a relative URL by editing /usr/share/webapps/redmine/config/environment.rb: Add the line shown below, within the code block "Rails::Initializer.run do |config|"

config.action_controller.relative_url_root = '/redmine'

Restart lighttpd

/etc/init.d/lighttpd restart

Note: To enable email to ticket creation from unknown users/email addresses (after allowing anonymous issue creation within Redmine UI) for the 'myproject' project in Redmine:

 #!/usr/bin/perl
 # Author: Jeff Bilyk
 # March 2, 2011
 #Script to take email from stdin, then:
 # - Check redmine database to see if the user exists
 #   - If user doesn't exist, create the user
 # - Pass the email on the redmine utility:
 #   - echo "email contents" | rake redmine:email:read RAILS_ENV="production" project=myproject
 
 use strict;
 use DBI;
 # global variables
 my $DbName = 'redmine';
 my $DbUser = 'redmine';
 my $DbPassword = 'Secur3P@ass';
 my @fields;
 my @address;
 my $existinguser;
 
 # Get email from stdin
 my @email = <STDIN>;
 
 # Parse field for "for"
 foreach (@email)
 {
 	if ($_ =~ /From/)
 	{
 		@fields = (split /</,$_);
 		@address = (split />/,$fields[1]);
 	}
 }
 
 my $dbh = DBI->connect('dbi:mysql:' . $DbName, $DbUser, $DbPassword, { PrintError => 0 }) or die "SQL Connect Error:" . DBI->errstr;
 
 # Find out if there're any existing users with the specified email address
 my $sqlStatement = "SELECT * from users where mail = '$address[0]';";
 
 my $sqlCommand = $dbh->prepare($sqlStatement);
 
 $sqlCommand->execute or die "SQL Error: " . DBI->errstr;
 
 my @sqlRecordset;
 $existinguser = 'maybe';
 
 @sqlRecordset = $sqlCommand->fetchrow_array;
 
 if ($sqlRecordset[0] == ) {
 	printf "@sqlRecordset \n";
 	$existinguser = 'no';
 }
 else {
 	$existinguser = 'yes';
 }
 
 # If there isn't a user already, then create one
 if ($existinguser == 'no')
 {
 	my @name = (split /@/,$address[0]);
 	printf "Current variables: $name[0]  $address[0]  \n";
 	$sqlStatement = "INSERT INTO users (login, firstname, lastname, mail, mail_notification, admin, status, language, type) values (\"$name[0]\", \"$name[0]\", \" \", \"$address[0]\", 0, 0, 1, \"en\", \"User\");";
 	$sqlCommand = $dbh->prepare($sqlStatement);
 	$sqlCommand->execute or die "SQL Error: " .DBI->errstr;
 	printf "User created";
 }
 
 my $timeinsec = `date +%s`;
 open (MYFILE, ">>/var/tmp/$timeinsec");
 print MYFILE "@email";
 close (MYFILE);
 
 system("sed -i 's/^  //' /var/tmp/$timeinsec");
 system("sed -i 's/^ //' /var/tmp/$timeinsec");
 
 `cd /usr/share/webapps/redmine && rake redmine:email:read RAILS_ENV="production" project=myproject < /var/tmp/$timeinsec`;
 exit 0

Configure LBU

lbu inc /usr/lib/ruby
lbu inc /usr/share/webapps