# NREN Compendium
* [Getting started](#getting-started)
* [Test](#test)
* [LocaleApp](#localeapp)
* [Deployment](#deployment)
## Getting started
### Ruby version
We're currently using version 2.1.1.
#### RVM
Update to the latest version and install ruby 2.0 and the latest bundler:
rvm get latest
rvm install ruby-2.1.1
rvm use --create 2.1.1@compendium
gem install bundler
#### Rbenv
Update to the latest version and install ruby 2.0 and the latest bundler:
brew update # update brew's formulas
brew upgrade rbenv # upgrade to the latest rbenv
brew upgrade ruby-build # upgrade to the latest ruby build
rbenv install 2.1.1
rbenv shell 2.1.1
gem install bundler
### QT
We're using WebKit in our test suite. So we need to install QT in order to compile WebKit:
brew update
brew install qt5
If you get this error installing capybara-webkit: `An error occurred while installing capybara-webkit (1.11.1), and Bundler cannot continue.`, follow these steps:
edit your `.bashrc` or equivalent if you use zsh and remove any export paths to qt, then:
```
brew uninstall qt@5.5
gem uninstall capybara-webkit
brew install qt@5.5
echo 'export PATH="$(brew --prefix qt@5.5)/bin:$PATH"' >> ~/.bashrc
(start a new shell)
bundle install
```
### PostgreSQL
We're using PostgreSQL version 9.2.4. Update brew to install the latest version:
brew update
brew install postgresql
Follow brew's steps to create the default database and make postgres autoload on system startup.
### Database
Create the correct users and databases:
psql -h localhost postgres -c "create user compendium with password 'compendium' CREATEDB"
When asked for a password, use the following command instead and use `compendium` as the password:
createuser -P -S -d -R -l -e compendium
### Node.js
We need Node.js and NPM for some tooling. Install it using brew:
brew install node
### Source
git clone git@github.com:zilverline/terena.git
cd terena
### Local dependencies
Install the local gems and node dependencies. **You must run these
commands from the `compendium` root directory!**
npm install
bundle install
### Setup the database schema and seed data
rake db:create db:migrate
RAILS_ENV=test rake db:migrate
### Running the server
You're now ready to run the project:
rails server
## Test
Run the complete test suite with:
rake spec
Run only the integration tests:
rake integration_spec
## LocaleApp
We use LocaleApp to manage static content. The translation files are hosted at [http://www.localeapp.com/projects/6559](http://www.localeapp.com/projects/6559).
To update the local translation files, run:
bundle exec localeapp pull # or alias this as 'belp'
## Deployment
### Available environments
* Integration: `git clone gitolite@molotov.terena.org:compendium-int` - https://molotov.terena.org/
Basic authentication: compendium - koffie-laptop-kauwgom
* Acceptance: `git clone gitolite@molotov.terena.org:compendium-acc` - https://compendium.terena.org/
Basic authentication: compendium - koffie-laptop-kauwgom
### Setup environment
Install dependencies (latest versions):
* Git
* Apache
* Passenger
* Ruby 2.0.0-p353
* Postgresql
* Gitolite
* RVM (may be installed globally)
* node & npm (Install from source! See [https://gist.github.com/dwayne/2983873](https://gist.github.com/dwayne/2983873))
Create a `compendium` user (without a password). Add this user to the following groups: `rvm` and `www-data`.
Configure gitolite:
dpkg-reconfigure gitolite
Use all the default configuration values except for the public key. You can enter a public ssh key for the admin user. This setup will create an admin repo with admin only access.
Clone this admin repo:
git clone gitolite@molotov.terena.org:gitolite-admin
Make changes to the configuration. See Gitolite's [documentation](https://github.com/sitaramc/gitolite) for configuration details. Make sure you add all the public keys you want to give access to the new repositories, including the keys of the newly created `compendium` user and the Jenkins build server.
Add sudo rights for the `gitolite` and `compendium` user. Edit `/etc/sudoers` and add the following snippit:
gitolite ALL=(compendium) NOPASSWD: ALL
compendium ALL=(postgres) NOPASSWD: ALL
This allows the `gitolite` user to execute commands as the `compendium` user, without a password. And it allows the `compendium` user to execute commands as the `postgres` user. Again without a password.
Configure a post-receive hook at `/var/lib/gitolite/repositories/${REPO_NAME}.git/hooks/post-receive`. The code for this script is in [script/integration/git/hooks/post-receive](script/integration/git/hooks/post-receive). Make sure this file is owned bij de `gitolite` user and can be executed (`chmod +x`).
Clone the newly created repo in the web directory (as the `compendium` user):
cd /pub/www/
git clone gitolite@molotov.terena.org:${REPO_NAME}
Configure an Apache Virtual Host. The configuration can be found in [script/integration/apache/vhost](script/integration/apache/vhost).
Reload Apache and enjoy!
#### SAML
Install the apache authentication module:
apt-get install libapache2-mod-auth-mellon
a2enmod auth_mellon
Generate certificates:
openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -keyout sp.key -out sp.crt
Move certificates to `/etc/apache/mellon/`:
mkdir /etc/apache/mellon
mv sp.crt sp.key ~/etc/apache/mellon/
Save contents of [https://login.terena.org/wayf/saml2/idp/metadata.php](https://login.terena.org/wayf/saml2/idp/metadata.php) to `/etc/apache/mellon/idp.xml`.
Add the following to the vhost config:
<Location />
MellonEnable "info"
MellonSecureCookie On
MellonSessionDump Off
MellonSamlResponseDump Off
MellonEndpointPath "/mellon"
MellonSPPrivateKeyFile /etc/apache2/mellon/sp.key
MellonSPCertFile /etc/apache2/mellon/sp.crt
MellonIdPMetadataFile /etc/apache2/mellon/idp.xml
</Location>
Restart apache and enjoy!
You can now open `https://#{APP_HOST}/login` and you'll be redirected to the login page of TERENA.
## KPI Spider
To fetch the KPI information for the services matrix, you can run
`rake servicematrix:import_kpis`. This should be installed as a cron
tab or some other scheduler on the production machine.