2. GitLab Installation on CentOS – 6.3
Preperation:
The main problem with installing GitLab on CentOS is that - other than Ubuntu or Fedora - it
doesn't have the ICU(lib) installed and
that's why ruby crashes/doesn't run around.
We will work as root most of the time, so make sure you have the permissions to do so
First of all we need to add the epel repo to yum to get all the packages we want.
1: rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
Then we install all required packages:
1: yum -y groupinstall 'Development Tools' 'Additional Development'
2: yum -y install readline readline-devel ncurses-devel gdbm-devel glibc-devel tcl-devel openssl-devel curl-devel
expat-devel db4-devel byacc gitolite sqlite-devel gcc-c++ libyaml libyaml-devel libffi libffi-devel libxml2 libxml2-
devel libxslt libxslt-devel libicu libicu-devel system-config-firewall-tui python-devel redis
Up next: Downloading and extracting ruby:
1: curl -O http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p0.tar.gz
2: tar xzvf ruby-1.9.3-p0.tar.gz
3: cd ruby-1.9.3-p0
1) Configure without binary suffix
1: ./configure --enable-shared --disable-pthread
Now install ruby:
1: make && make install
DIVINE IT LIMITED Page 2
3. GitLab Installation on CentOS – 6.3
Some may need to install qt-devel qtwebkit-devel by running (Replace the 64 in the path with
32 if you're running on a 32 bit box)
1: yum install qt-devel qtwebkit-devel
2: export PATH=$PATH:/usr/lib64/qt4/bin
Now we have to install all the gems GitLab needs to run:
1: gem update --system
2: gem update
3: gem install rails
Now everything is set up and we can start to configure the environment for GitLab. First we
create a user, that will run GitLab:
1: adduser --shell /bin/bash --create-home --home-dir /home/gitlab gitlab
Because this user will be the Admin of the repos on the server, we need to have a RSA key pair
to authenticate:
1: su gitlab
2: ssh-keygen -t rsa # as gitlab user
Now switch back to root account. Because GitLab is only a graphical user interface to manage
repos, we need a powerfull backend. gitolite will do this for us.
We also need a user for gitolite.
1: adduser --system --shell /bin/sh --comment 'gitolite' --create-home --home-dir /home/git git
Gitolite needs to know one key, that it knows as admin. We will pass the key of GitLab to
gitolite. To do so we first copy the private key of our gitlab user to the home
directory of our gitolite user:
1: # make sure you do this as root
2: cp /home/gitlab/.ssh/id_rsa.pub /home/git/gitlab.pub
DIVINE IT LIMITED Page 3
4. GitLab Installation on CentOS – 6.3
Now we need to initialize gitolite:
1: su git
2: gl-setup ~/gitlab.pub # this passes the admin key to gitolite
When the prompt appears edit the provided file (it's in a vi-Editor) and set $REPO_UMASK to
0007
Switch back to root user now.
We now need to give our management software (GitLab) access to the repos:
1: usermod -a -G git gitlab
2: chmod -R g+rwX /home/git/repositories/
3: chmod 770 /home/git
Because the gitlab user will need a password later on, we configure it right now, so we are
finished with all the user stuff.
1: passwd gitlab # please choose a good password :)
As next step we need to introduce GitLab to gitolite (that is, we let them change their SSH-keys)
1: su gitlab
2: ssh git@localhost
and back to the root user, so we don't need to care about permissions.
GitLab needs a few gems, we haven't installed yet:
1: curl http://python-distribute.org/distribute_setup.py | python
2: easy_install pip
3: pip install pygments
4: gem install bundler
As mentioned before, the gitlab user will have to do a bit of administration stuff, so we need to
DIVINE IT LIMITED Page 4
5. GitLab Installation on CentOS – 6.3
give him sudo rights. To do so, we edit the sudoers file with visudo:
1: visudo
Add gitlab ALL=(ALL) ALL after root ALL=(ALL) ALL so it looks like this:
1: ...
2: root ALL=(ALL) ALL
3: gitlab ALL=(ALL) ALL
4: ...
Do not edit anything else!!!
After another two gems we are finished with the gem stuff:
1: gem install ruby-debug19
2: gem install charlock_holmes
We now switch to our gitlab user and we won't use our root account anymore:
1: su gitlab
Get the GitLab software:
1: cd && git clone git://github.com/gitlabhq/gitlabhq.git
2: cd gitlabhq
We're nearly done. Next we bundle our application.
1: bundle install
GitLab will use a MySQL database (in our case), which we need to install and start:
1: yum -y install mysql-server
2: /etc/init.d/mysqld start
DIVINE IT LIMITED Page 5
6. GitLab Installation on CentOS – 6.3
To configure the MySQL server easily we use:
1: mysql_secure_installation
Remember the password type in for root!
We now connect to our database server to create a user for GitLab:
1: mysql -u root -p # when prompted enter the root password we've chosen in mysql_secure_installation
We now have a mysql shell. Mind the trailing ; !
1: mysql> CREATE DATABASE gitlab CHARACTER SET UTF8;
2: mysql> GRANT ALL PRIVILEGES ON gitlab.* TO 'gitlabusr'@'localhost' IDENTIFIED BY 'supersecret' WITH GRANT
OPTION;
3: mysql> quit
Remember the password and username (here: gitlabusr and supersecret)!
To create the database a script is deployed with GitLab. However it needs an additional service
to run:
1: sudo nohup redis-server > /dev/null
Enter the password created for the gitlab user and hit CTRL+Z. Then type
1: bg
The service is now running in background.
DIVINE IT LIMITED Page 6
7. GitLab Installation on CentOS – 6.3
We now configure GitLab by copying the configurion files from example to real:
1: cp ~/gitlabhq/config/database.yml.example ~/gitlabhq/config/database.yml
2: cp ~/gitlabhq/config/gitlab.yml.example ~/gitlabhq/config/gitlab.yml
In database.yml we have to edit the production settings of database (at the very top of the file).
We have to change the database-name, username and password.
We will now create the database structure:
1: RAILS_ENV=production rake db:setup
2: RAILS_ENV=production rake db:seed_fu
To start the server we use
1: bundle exec rails s -e production
That's it. We're done. All have to do now, is set up firewall and navigate to http://ip-or-
domain:3000/ and log in with
user: admin@local.host
pass: 5iveL!fe
DIVINE IT LIMITED Page 7