How to install gitlab on Ubuntu Server 12.04 (precise) the right way

This weekend I’ve been installing Gitlab on a LXC guest. The host is running Ubuntu 12.04 and so is the guest. I tried to document my steps the best I could so I could share my experiences with it. Sometimes I had to go back a few steps so maybe something are garbled up but I believe this is still a good starting point on setting up gitlab on a Ubuntu server.

My main goals were:

  • use as much software from the Ubuntu repositories as possible so I don’t have to worry about security updates et cetera
  • keep the installation as simple as possible so I know when I look at it over 6 months
  • keep the software (gitolite) in the default Ubuntu location(s)
This tutorial assumes you have some good knowledge about Linux (servers) so I doesn’t spell out everything.

The steps found on the Gitlab website are quite accurate so keep them in mind:

  1. login as user, install git & generate ssh key
  2. Install ruby 1.9.2
  3. Install gitolite with umask 0007 and add your user to git group
  4. logout & login again
  5. Clone & setup gitlab (checkout project wiki on github)
  6. Start server. Enjoy!

My global setup

  • Installed Gitolite, Redis and Ruby from the default Ubuntu repositories
  • Installed Nginx (nginx-full) with Ruby/Phusion Passenger support from the Brightbox testing repositories (stable didn’t yet support Ubuntu 12.04 Precise)
  • Gitlab + dependencies are managed by bundler (build from source)
  • Nginx is running as the gitlab user

Step 1: installing Nginx with Phusion Passenger (mod_rails) support on Ubuntu 12.04

add-apt-repository ppa:brightbox/passenger-nginx-testing
apt-get update
apt-get install nginx-full
cat <<EOF > /etc/nginx/conf.d/passenger.conf
passenger_root /usr/lib/phusion-passenger;
EOF

I had some troubles with this version of Nginx from Brightbox because of some missing mime-type config file. That was quickly solved by copying it from another server.

The configuration file of my gitlab virtual host I put in: /etc/nginx/sites-available/gitlab.host.tld.

The contents of that file can be found here.

Step 2: installing dependencies from Ubuntu sources

apt-get install gitolite ruby1.9.3 redis-server ruby-budler rake

For the gitolite configure screens: just keep hitting enter

Step 3: installing build dependencies for ruby gems needed by gitlab

apt-get install make libxml2-dev g++ libicu-dev ruby2.9.1-dev libmysqlclient-dev libsqlite3-dev

Step 4: setting up your gitlab user: creating it, giving it permissions and generating a ssh key

adduser --disabled-login --disabled-password --force-badname gitlab.host.tld
usermod --append --groups gitolite gitlab.host.tld
su -s /bin/bash gitlab.host.tld
ssh-keygen
exit

Step 5: configuring gitolite with the ssh public key of your gitlab user

(as root)

dpkg-reconfigure gitolite

The question about the public key can be answered with the contents of `/home/gitlab.host.tld/.ssh/id_rsa.pub`

Step 6: loosening the permissions so the gitlab user can reach the gitolite files

Only do this when you know what you’re doing!

chmod g+rw /var/lib/gitolite/repositories --recursive
chmod g+rw /var/lib/gitolite/.gitolite.rc

This works because we added our user gitlab.host.tld to the gitolite group remember?

Next: edit /var/lib/gitolite/.gitolite.rc and change this line:

$REPO_UMASK = 0077; # gets you 'rwx------'

to:

$REPO_UMASK = 0007; # rwxrwx---

This makes sure newly created files/directories by gitolite are also writable by the gitolite group.

Step 7: installing gitlab itself

If everything worked out the system is ready and gitlab itself can be installed:

su -s /bin/bash gitlab.host.tld
cd ~/public_html
git clone git://github.com/gitlabhq/gitlabhq.git .

Step 8: Install the gitlab dependencies

This one is tricky. Maybe I forgot to list some build dependencies or maybe the added some extra dependencies since I wrote this. If this doesn’t succeed: read the logs (especially mkfm.log).

bundle install --deployment

Step 9: configure gitlab

cp config/database.yml.example config/database.yml
cp config/gitlab.yml.example config/gitlab.yml

Here is my gitlab.yml

It has admin_uri defined twice because of bug #1052
If you wouldn’t define it twice (in git_host and git) the rake task `gitlab:app:status` would always fail when you run gitolite under the user `gitolite`.

You can find out the contents of your own database.yml :)

Step 10: installing the database and compiling the assets

bundle exec rake db:setup RAILS_ENV=production
bundle exec rake db:seed_fu RAILS_ENV=production
rake assets:precompile

Step 11: check if your gitlab user has access to gitolite

RAILS_ENV=production rake gitlab:app:status

Rembember bug #1052!

Step 12: starting resque workers

Start at least one resque worker:

./resque.sh

And maybe another one:

./resque.sh

The resque workers are background workers that do `stuff` in the background. I believe for example the adding of ssh keys to gitolite and the parsing of a commit and putting that in the database.

At first I forget to start the resque workers and my keys weren’t properly added to gitolite. The solution to that was in my case:

RAILS_ENV=production rake gitlab:gitolite:update_hooks
RAILS_ENV=production rake gitlab:gitolite:update_keys
RAILS_ENV=production rake gitlab:gitolite:update_repos

Step 13: restart nginx & surf to http://gitlab.host.tld

The title says it all :)

Finally

I copied all the commands from the servers’ bash history command. The order of the commands I wrote down on top of my head so there could be some mistakes there. If you spot something wrong or missing: just contact me of leave a comment.

Some excellent resources:

Fixing the “IPv6 addrconf: prefix with wrong length 48″ on Ubuntu (server)

touch /etc/sysctl.d/60-ipv6.conf

echo "net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.all.accept_ra = 0
" > /etc/sysctl.d/60-ipv6.conf

This will fix it after a reboot. I you want to change it imediately:

echo 0 > /proc/sys/net/ipv6/conf/all/autoconf
echo 0 > /proc/sys/net/ipv6/conf/all/accept_ra

sudo & vim

I had some minor annoyance while using Vim on the commandline. Whenever I did: `sudo vim` my Vim plugin wheren’t loaded (root had no .vimrc). I discovered that you can add environmental variables to sudo so I added this to my ~/.bash_aliases:

alias sudo="sudo MYVIMRC=$HOME/.vimrc"

Disabling the oneconf service in Ubuntu

Oneconf was eating up a lot of memory on my system. But if you purge the oneconf package it also removes the ubuntu-desktop and software-center package. And I wanted to keep those. Especially ubuntu-desktop.

David Anderson had a nice post about this on the Ubuntu launchpad. He suggested to do the following:

sudo chmod a-x /usr/share/<wbr>oneconf/<wbr>oneconf-<wbr>service
sudo chmod a-x /usr/share/<wbr>oneconf/<wbr>oneconf-<wbr>query
sudo chmod a-x /usr/share/<wbr>oneconf/<wbr>oneconf-<wbr>update

So I did and it works great. No more oneconf service and I didn’t notice any other problems (yet).

Opensource Github alternative

While searching for a nice Github alternative (too pricey I think) I came upon this nice alternative. GITLAB
Check it out!

Changing ip address on Ubuntu server

Easy as pie:

ifconfig eth0 192.168.5.120 netmask 255.255.255.0 up
route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.5.1

Kruidvat fotoservice installeren op Ubuntu 12.04 (Precise Pangolin) / Linux

Ik wilde een paar foto’s afdrukken op een groot formaat en het was eerste paasdag. Dus toen ben ik maar gaan zoeken naar fotosites die Linux ondersteunen. 1 van de weinige die Linux (een beetje) ondersteunt is Kruidvat.

Zij bieden losse software aan die op Linux draait. Dat klopte maar ik moest wel eerst nog wat (aparte) dingen installeren voordat de fotosoftware van Kruidvat werkte op Linux:

sudo apt-get install libstdc++6:i386 libfontconfig1:i386 libsm6:i386

Vervolgens de software zelf nog even:

wget http://www.kruidvat.nl/fotoservice/bestelsoftware-download-windows-download-windows-start.html?version=linux
tar -xzvf setup_Kruidvat_fotoservice.tgz
./install.pl

Kruidvat fotoservice op Ubuntu Linux

Daarna kwam ik erachter dat Pixnum ook Linux ondersteunt met verschillende uploaders (Flash, FTP & Java) en goedkoper is dan Kruidvat. Toen waren de foto’s echter al besteld. Misschien voor de volgende keer dus.

motorrijweer.nl

Ik heb de eerste versie van motorrijweer.nl live gezet! ‘t Is nog vrij basis maar je kunt wel al voor een paar regio’s het motorweer/motorrijweer opvragen. Op naar de volgende versies!

Motorrijweer / motorweer

Combining 4 images and aligning them next to eachother

The workflow: make two new images out of 4: combining 2×2 to make hdr’s. Then aligning them

sudo apt-get install hugin-tools enfuse
enfuse DSC_166* -o 1.jpg
enfuse DSC_167* -o 2.jpg
align_image_stack -a test.jpg 1.jpg 2.jpg

Then I put them next to eachother in GIMP :p

 

The continuing story of Zend Studio 5.5.1 (part 2)

Everytime I install a new version of Ubuntu / Linux I’m hoping Zend Studio (the old/good one) will still be working. This time with Ubuntu 12.04 I again had to do this but it didn’t take longer than a couple of minutes.

First I had to install the java executable (otherwise I got a “java: not found” error message. Because the Sun JRE isn’t available anymore for Ubuntu (12.04) I installed the default one (icedtea I believe). To my amazing that worked perfectly!

Then I had to install some (i386) libs and it worked! libxcursor is need or else you’ll get a really ugly cursor in Zend Studio 5.

sudo apt-get install default-jre
sudo apt-get install libc6-i386 libxp6:i386 libxtst6:i386 libxcursor1:i386
ln -s /lib32/libc.so.6 /lib/libc.so.6