Archive for the ‘Gitorious’ Category
Gitorious is the name of a web based project host for collaborative open source projects using the Git distribution revison control system. It’s is an open source clone of the well know GitHub platefom. Gitorious is written on Ruby On Rails and helps managing your projects: Git repositories, wikis, timeline and more.
Since it’s an open source application you can set up you own Gitorious in your company and host in it all your projects, this article will help step by step on how set up and configure Gitorious on Ubuntu server 11.04. Instead of providing a big apt-get install command that contain all required stuff, I prefer to group them by libraries for better understanding.
Install Git and system essentials
sudo apt-get install -y git-core git-svn sudo apt-get install -y apg build-essential libpcre3 libpcre3-dev sendmail make zlib1g zlib1g-dev ssh
Ruby and required libraries
Gitorious runs on a variety of Ruby version (you’ll need at least Ruby 1.8.6), during this part I’ going to use the Ruby 1.8.7 from apt which more is than enough, and then I’ll create a symbolic link of /usr/bin/ruby1.8 to /usr/bin/ruby.
sudo apt-get install -y ruby1.8 libbluecloth-ruby libopenssl-ruby1.8 ruby1.8-dev ri rdoc irb sudo ln -s /usr/bin/ruby1.8 /usr/bin/ruby
Since we are using Ruby 1.8.7 from apt, we need to set up RubyGems from source (Do not install RubyGems from apt !!). Get the 1.5.3 version of RubyGem on this page.
wget http://rubyforge.org/frs/download.php/74343/rubygems-1.5.3.tgz tar xvzf rubygems-1.5.3.tgz cd rubygems-1.5.3 sudo ruby setup.rb sudo ln -s /usr/bin/gem1.8 /usr/bin/gem
Common libraries & RMagic
Regardless of your Ruby version, you’ll have to install theses tools :
sudo apt-get install -y libonig-dev libyaml-dev geoip-bin libgeoip-dev libgeoip1 sudo apt-get install -y imagemagick libmagickwand-dev
Setting Up the database
Gitorious can use a variety of Relational Database (MySQL, PostgreSQL…), during this article I’m going to install MySQL 5.1 from ubuntu apt.
sudo apt-get install -y mysql-client-5.1 mysql-server-5.1 libmysqlclient16-dev
Setting Up Sphinx search engine
If you want to have the ability to search you gitorious content you need to install sphinx.
wget http://www.sphinxsearch.com/downloads/sphinx-0.9.8.tar.gz tar xvfz sphinx-0.9.8.tar.gz cd sphinx-0.9.8 ./configure make && sudo make install
setting up Memcache is not required to run Gitorious, but it’s recommended to improve performance :
sudo apt-get install -y memcached sudo update-rc.d memcached defaults
First we are going to create a new users group called gitorious. Everyone that needs to work on the Gitorious code can be added to this group to gain access.
sudo groupadd gitorious sudo usermod -a -G gitorious <username>
username is the login of the user that you wish to add to the group.
Now lets create a base directory to hold Gitorious, the logs and Apache configuration files.
sudo mkdir -p /var/www/gitorious.server.com sudo chown <username>:gitorious /var/www/gitorious.server.com sudo chmod -R g+sw /var/www/gitorious.server.com
This will set the setgid bit, ensuring the gitorious group follows new files and directories inside /var/www/gitorious.server.com, now create a home for Gitorious :
cd /var/www/gitorious.server.com mkdir log mkdir conf git clone git://gitorious.org/gitorious/mainline.git gitorious sudo ln -s /var/www/git.server.com/gitorious/script/gitorious /usr/local/bin/gitorious cd gitorious rm public/.htaccess mkdir -p tmp/pids sudo chmod ug+x script sudo chmod -R g+w config/ log/ public/ tmp/
/var/www/gitorious.server.com/conf and /var/www/gitorious.server.com/log are for Apache configuration and log files. We’ll create those later.
Configuration of git-daemon, git-ultrasphinx and git-poller services
Gitorious ships with ready to use git-ultrasphinx, git-daemon and got-poller scripts wich are used to start these services automaticly when the system starts. Be aware that these script has hardcoded paths to both Ruby Enreprise Edition and Gitorious and need to be change befor linking them to /etc/init.d.
Open the git-daemon, git-poller, stomp and git-ultrasphinx and change the value of RUBY_HOME to /usr and GITORIOUS_HOME to use your path.
The next step is to create a symbolic link of these scripts to /etc/init.d, configure the permission and finally set them to start automatically.
sudo ln -s /var/www/gitorious.server.com/gitorious/doc/templates/ubuntu/git-ultrasphinx /etc/init.d/git-ultrasphinx sudo ln -s /var/www/gitorious.server.com/gitorious/doc/templates/ubuntu/git-poller /etc/init.d/git-poller sudo ln -s /var/www/gitorious.server.com/gitorious/doc/templates/ubuntu/git-daemon /etc/init.d/git-daemon sudo ln -s /var/www/gitorious.server.com/gitorious/doc/templates/ubuntu/stomp /etc/init.d/stomp sudo chmod +x /etc/init.d/git-daemon sudo chmod +x /etc/init.d/git-poller sudo chmod +x /etc/init.d/git-ultrasphinx sudo chmod +x /etc/init.d/stomp sudo update-rc.d git-daemon defaults sudo update-rc.d git-poller defaults sudo update-rc.d git-ultrasphinx defaults sudo update-rc.d stomp defaults
Installing all required Gems for Gitorious
Gitorious uses a bunch of gems, that are now easily managed by Bundler, first you’ll have to install bundler, and finnally install all required gems.
sudo gem install -v 0.8.7 rake sudo gem install -v 1.1.0 daemons sudo gem install -b rmagick stompserver passenger bundler cd /var/www/gitorious.server.com/gitorious sudo bundle install
Setting up home for git repositories
You’ll need to create a new user in charge of your git repositories, the git daemon and message queue poller, normally this user is called git but you can named whatever you want. The git repositories will be stored on a folder inside the home of the newly created user.
sudo adduser git sudo usermod -a -G gitorious git sudo mkdir /home/git/repositories sudo mkdir /home/git/tarballs sudo mkdir /home/git/tarballs-work sudo chown -R git:git /home/git
Now we need to login as git user and to some work, when someone need to push throught Gitorious, the user wil be looked up in the git user’s ~/.ssh/authorized_keys. we have to create this file, but Girtorious will maintain it for us.
su git mkdir ~/.ssh chmod 700 ~/.ssh touch ~/.ssh/authorized_keys
Configure Gitorious and migrate the database
In this part we are going to configure Gitorious, and create the database. We need to configure the database (database.yml file), the borker (broker.yml file) and Gitorious itself (gitorious.yml file). First if you are still logged as git you have to logout.
cd /var/www/gitorious.server.com/gitorious cp config/database.sample.yml config/database.yml cp config/gitorious.sample.yml config/gitorious.yml cp config/broker.yml.example config/broker.yml
First we need to generate a secret key with apg command:
apg -m 64
Copy the key generated and clean it by removing every newlines (this key we be used lately on the gitorious.yml file). I’ll make a brief commentary on some properties here, and then I’ll show you what my config looks like.
- gitorious_host: This should match the hostname you access Gitorious with.
- gitorious_client_host and gitorious_client_port: These are the values used by script/server. However, they’re also used by the git-daemon, so be sure to set these correctly, or you’ll have trouble pushing.
- public_mode: If you’re setting up a closed Gitorious, you’ll want to set this to true but if you want people to be able to browse your projects without logging in, you can keep it true.
Here’s an example configuration. In this example I configured only the production environment, but the other environment should be the same thing.
production: cookie_secret: <Here the Key generated with apg -m 64 without EOL> repository_base_path: "/home/git/repositories" extra_html_head_data: system_message: gitorious_client_port: 80 gitorious_client_host: gitorious.server.com gitorious_host: gitorious.server.com gitorious_user: git exception_notification_emails: firstname.lastname@example.org mangle_email_addresses: true public_mode: false locale: en archive_cache_dir: "/home/git/tarballs" archive_work_dir: "/home/git/tarballs-work" only_site_admins_can_create_projects: true hide_http_clone_urls: false is_gitorious_dot_org: false
You can check the broker configuration in config/broker.yml, but you don’t need to change anything.
Edit your config/database.yml to suit your database configuration, then open mysql and create the production database and the user :
mysql -uroot -p create database gitorious; create user gitorious@localhost identified by 'PASSWORD'; grant all privileges on gitorious.* to gitorious@localhost identified by 'PASSWORD';
If your user already exists and has create privileges, you can do rake db:create instead of the above. But I prefer to give database users as limited privileges as possible.
Gitorious can trip you up if you don’t pay close attention to environments: the git-daemon uses the production environment by default. However, forgetting to specify an environment will cause other scripts to use the development environment. This also goes for script/poller, which polls the queue for tasks. Since I’m configuring a production environment I need to adjust the production configuration on database.yml file.
production: adapter: mysql database: gitorious username: gitorious password: <Your password> host: localhost encoding: utf
The next step is to tell Rails to migrate the production database, but before that we need to fix an incompatibility issue of RubyGems with Rails < 2.3.11 and to do that you need to add the following line at the top of config/boot.rb :
Now we let
rake do all the work for us:
rake db:setup RAILS_ENV=production
The gitorious must have an administrator, to do so execute the following commands :
cd /var/www/gitorious.server.com/gitorious env RAILS_ENV=production ruby script/create_admin script/console production user = User.first user.login = "admin" #Change to your desired username user.activate user.accept_terms user.save
You’ll be prompted for credentials, and the user will be created and automagically activated. You then activate the user by hand by using script/console.
Get Ultrasphinx running
To get set up Ultrashpinx you’ll have to run theses commands :
cd /var/www/gitorious.server.com/gitorious rake ultrasphinx:bootstrap RAILS_ENV=production
You also need to create a Linux CRON job to keep UltraSphinx indexes updated using the following command :
crontab -e * * * * * cd /var/www/gitorious && /usr/bin/bundle exec rake ultrasphinx:index RAILS_ENV=production
Before running Gitorious, you need to get your permissions right.
- Whatever user owns config/environment.rb is the user who’ll own the Rails process under Passenger
- The user who runs the application needs full access to the git repositories
- the git-daemon process needs full access to the git repositories
- the git-poller process needs full access to the git repositories
/var/www/gitorious.server.com/gitorious sudo chown -R git:gitorious config/environment.rb script/poller log tmp sudo chmod -R g+w config/environment.rb script/poller log tmp sudo chmod ug+x script/poller
Now, let’s start every required service to see if our Gitorious works, first we need to start stomp, git-daemon and git-poller.
sudo service stomp start sudo service git-daemon start sudo service git-poller start
Now let’s start our Gitorious embedded Web server (the one that runs on the 3000 port) to be sure that Gitorious works.
su git -c "cd /var/www/gitorious.server.com/gitorious && script/server -e production"
This should start the server successfully. Now head over to http://gitorious.server.com:3000, and with any bit of luck, you didn’t miss a detail and the Gitorious splash screen will great you. Log in with the user you created earlier.
To be continued, On The next version of this article I’ll show you how to use Apache HTTP server instead of the embedded one…