Troubleshooting virtualbox VM’s not starting

On my Linux Mint 17.1 machine I regularly face an error starting a VM. This error occurs after every kernel update. It says that the VirtualBox kernel driver was not loaded. When trying to load this driver

sudo /etc/init.d/vboxdrv setup

it gives another error:

stopping kernel drivers...done.

Uninstalling old virtualbox dkms kernel modules/etc/init.d/voboxdrv: 302: /etc/init.d/vboxdrv: /usr/share/virtualbox/src/vboxhost/do_dkms: not found
...done.
(Failed, trying without DKMS)
recompiling VirtualBox kernel modules...failed!
(look at /var/log/vbox-install.log to find out what went wrong.)

vbox-install.log:

/etc/init.d/vboxdrv: 334: /etc/init.d/vboxdrv: /usr/share/virtualbox/src/vboxhost/build_in_tmp: not found

This can be solved by reinstalling the virtualbox-dkms package:

sudo apt-get --reinstall install virtualbox-dkms

And then the kernel drivers are loaded:

sudo /etc/init.d/vboxdrv status
VirtualBox kernel modules (vboxdrv, vboxnetflt, vboxnetadp, vboxpci) are loaded.

This workaround turned out fine for me, so I thought I could share it.

virtualbox

Credits

Ordina DevOps: puppetmaster configuratie in GIT

Inleiding
In deze tutorial leg ik uit hoe grote bedrijven hun puppet omgeving hebben ingericht. De puppetmaster configuratie wordt opgeslagen in een GIT repository, zodat wijzigingen op een centrale plaats kunnen worden gedaan. De ingebruikzijnde puppet modules worden ook centraal beheerd. Deze uitleg is gebaseerd op een puppettraining. Het is een globale uitleg van de werking, en geen stap voor stap handleiding.
Vereiste software
vagrant                                  (configuratie van VM’s in code)
virtualbox                             (hypervisor)
puppet (open source versie)                                (puppet server en client)
r10k                                         (om de puppetmaster configuratie uit een git repository te pullen)
git repository: github, gitlab, gitbucket, …   (om de puppetmaster configuratie op te slaan, en eventueel eigen puppet modules)
Configuratiebestanden
Globale stappen
1. vagrant twee VM’s laten opspinnen: 1. puppetmaster 2. puppetclient (+ installatie)
2. ssh-keygen
3. control-repo aanmaken
4. vagrant vm’s opspinnen
5. r10k configureren
1. Vagrant
Pak de bestanden in puppet_r10k.tar.gz uit.  In de Vagrantfile staat de configuratie van de Virtual Box VM’s. In deze file wordt ook een deel van de puppetmaster configuratie gedaan. Pas de locatie van de boxfile aan (dit is het CentOS 7 baseimage).
2. SSH-keys
Genereer een public en private key pair met ssh-keygen. Google is your friend.
Plaats beiden bestanden (id_rsa en id_rsa.pub) in de map keys. Deze keys zullen door vagrant worden gekopieërd naar /root/.ssh/
3. Maak een git repo aan
Genaamd ‘control-repo’. Voeg onder deployment keys de public key (id_rsa.pub) toe. Hierdoor kan r10k de configuratie in dit repository binnenhalen op de puppetmaster.
Plaats de control-repo configuratiebestanden in dit repo. Meer uitleg: control-repo.
4. vagrant vm’s opspinnen
Ga in een terminalvenster naar de map met de Vagrantfile, en draai vagrant up. Als Vagrant een error geeft omdat deze VM’s al bestaan, dan kunnen ze verwijderd worden met vagrant destroy -f. De VM’s worden nu opgespint, dit kan even duren.
5. r10k configureren
We hebben nu twee VM’s: een puppetmaster en een puppetclient. Op de puppetmaster staat puppet open source geïnstalleerd. De machines zijn bereikbaar via ssh, via ssh root@localhost -p 2200 of -p 2222. Doe een git clone van het control-repo in /etc/puppet/environments/development. Het is handig om vooraf het control-repo te clonen op de locatie machine, en de default branch (waarop wordt gecommit) in te stellen op development: git checkout -b development
De volgende bestanden dienen aangepast te worden om te verwijzen naar het control-repo:
– /etc/puppet/puppet.conf
hiera_config path wijzigen in development
– /etc/puppet/r10k/r10k.yaml
wijzig remote: ‘git@gitlab.com:Eimert/control-repo.git’ in je eigen GIT repo, en zorg dat de public key als deployment key is ingesteld (eerder uitgelegd).
–  /etc/puppet/environments/production/manifests/site.pp
Om een module te classificeren voor installatie wordt hiera gebruikt. Uncomment, en zorg dat site.pp een hiera_include(‘classes’) bevat:
node default
{
  # classes for all nodes:
  hiera_include(‘classes’)
}
‘classes’ wordt gebruikt in de .yaml bestanden onder /etc/puppet/environments/production/hieradata/. Voorbeeld volgt onder ‘een eigen module installeren’.
Nu kun je de eerste r10k run starten: /usr/local/bin/r10k deploy environment -pv -c /etc/puppet/r10k/r10k.yaml
De puppet configuratie uit het control-repo wordt nu binnengehaald. De puppetconfiguratie kan nu op een centrale plaats (het git repo) gewijzigd worden, en automatisch (cron) binnengehaald worden door r10k. Ook regelt r10k het toevoegen en verwijderen van modules, uitleg hieronder. Je bent nu klaar met je eigen r10k puppetmaster server!
puppet

Een eigen module toevoegen
1. Schrijf je eigen puppet module of kopieër een puppet module van de puppet forge.
2. Maak een GIT repo aan voor deze module, en push de code.
3. Zorg dat er een deployment key is ingesteld voor het repository met deze puppet module. De puppetmaster moet over de private key beschikken (/root/.ssh/id_rsa).
4. Bewerk de Puppetfile in het control-repo (opgeslagen in de puppetmaster onder /etc/puppet/environments/development/Puppetfile). Voeg een regel toe met je eigen module, bijvoorbeeld:
mod ‘vim’, :git => ‘git@gitlab.com:Eimert/puppet-vim-customized.git’
5. r10k zal in een volgende run de Puppetfile binnenhalen, opmerken dat er een module is toegevoegd, en deze module ook binnenhalen en beschikbaar maken. /usr/local/bin/r10k deploy environment -pv -c /etc/puppet/r10k/r10k.yaml
Een (eigen) module installeren
1. Voer een puppet run uit op de puppetclient om te controleren of de machine is geregistreerd bij de puppetmaster. puppet agent -tv
2. Er moet nu ingesteld worden dat de module wordt geïnstalleerd op de client. Met hiera (hierarchy of values) kan een zeer nauwkeurige configuratie gemaakt worden. Voor dit voorbeeld gebruik ik een eenvoudige configuratie: dit is mijn hiera.yaml bestand:
hiera.yaml:

:backends:
  – yaml
:yaml:
  :datadir: /etc/puppet/environments/production/hieradata
:hierarchy:
  – “node/%{::hostname}”
  – common
Om te kijken welke modules een machine zou moeten hebben, wordt eerst gekeken naar nodes/hostname. Als er geen .yaml bestand bestaat van de puppetclient, wordt verder gezocht in common.yaml. Dit is mijn common.yaml:
# available modules are in the Puppetfile
# site.pp does a hiera_include(‘classes’) which refer to this:

classes:
  – ntp
  – vim
ntp::restrict:
  –
ntp::autoupdate: false
ntp::enable: true
ntp::servers:
  – 0.eu.pool.ntp.org iburst
  – 1.eu.pool.ntp.org iburst
  – 2.eu.pool.ntp.org iburst
  – 3.eu.pool.ntp.org iburstvim::background: light
Uitleg over de syntax: — classes: hier wordt naar verwezen door site.pp. Hieronder staan de namen van de modules die geïnstalleerd worden, zoals ntp en vim (namen van modules worden definieert in de Puppetfile). Om de ‘servers’ parameter van de ntp module een waarde mee te geven bij de installatie wordt ntp::servers: (plus waarden) gebruikt, zie bovenstaand voorbeeld).
3. Voer op de puppet client puppet agent -tv om een run te starten
4. Controleer of de gewenste wijzigingen zijn doorgevoerd.


Conclusie
We hebben een puppetmaster en client gecreëerd en geconfigureerd. Onze puppetmaster configuratie en puppet module configuratie is flexibel en staat op een centrale plaats (het GIT repo). Met hiera is een scheiding gemaakt tussen configuratiespecifieke data en data van de module. Dit maakt onze modules flexibel inzetbaar omdat ze diverse configuraties aankunnen, zonder aanpassingen aan de modulecode. Hiera maakt het ook mogelijk om nodes een specifieke configuratie mee te geven op basis van hun kenmerken. De ‘AIX’ nodes kunnen bijvoorbeeld voorzien worden van ‘ksh’ als shell, en de ‘RHEL’ nodes van ‘bash’.

Roles and profiles
Kan optioneel toegevoegd worden. Creëert combinaties van modules. Bijvoorbeeld een rol ‘appserver’ en een profiel ‘tomcat’ of ‘jboss’ of ‘websphere’. Zie slideshare voor meer informatie.

Opmerking: bij de Ordina Devops groep is terraform gebruikt, in deze tutorial is vagrant gebruikt.

Goodbye TU/e

De pre-master Computer Science & Engineering is niet wat ik ervan had verwacht. Ik heb hard gewerkt om bij te komen op het niveau wiskunde dat wordt gevraagd. De theoretische benadering van informatica kan vrij abstract zijn, maar voor de ingewijden zeker interessant. Ik werk liever aan praktische oplossingen🙂

IMG_20150724_142917 - kopie

TU/e
Goodbye TU/e

Afgestudeerd!

Op 26 maart 2015 heb ik mijn Hbo-diploma Business IT & Management (met honours) in ontvangst mogen nemen!🙂

diploma-uitreiking
Diploma-uitreiking

Na mijn afstuderen ben ik begonnen met een pre-master Computer Science & Engineering aan de TU/Eindhoven.

Merging eventlogs for process mining

Introduction
I am using the following SQL query to join eventlogs from multiple applications into one log. According to the literature this is called a ‘raw data merge’. I like this kind of join since it is adaptable and quicker when merging logs from more than two applications. The results of this query can be further processed by exporting them as a CSV and loading them into a conversion tool for eventlogs (XESame, Disco/Nitro, ProM Import).

Goal
To merge cleaned logging data and output in a suitable format for conversion to .xes or .mxml.

Usage instructions
1. Export logfiles from an application that fulfill the requirements for process mining (see image).
2. Import some logfiles into a database, one table per file (for example CSV file import using SQL developer and Oracle XE db).
3. Clean the data by making case id and timestamp format match. Also make sure the appropriate datatypes are used.
4. Adapt the following query to suit your situation and execute.
5. Export the results to a CSV file (SQL developer: right click, export, CSV file).
6. Convert the CSV file with the merged logs using a conversion tool.
7. Analyse the eventlog using a process mining tool (Disco, ProM, …)

Images

SQL query for merging multiple eventlogs
SQL query for merging eventlogs Creative Commons-Licentie
Source:
Eventlog format and requirements. Source: http://fluxicon.com/disco/files/Disco-User-Guide.pdf

MSFL-project afgerond

Van september 2013 tot juni 2014 heb ik gewerkt aan het mobiele sportsfieldlab honoursproject. Er is een sportdag georganiseerd waarop de testuitslagen d.m.v. een app verwerkt zijn. Een voorbeeld van het sportadvies dat de kinderen meekregen is hieronder te downloaden. Het voorbeeld is gemaakt met fictieve gegevens.
Voorbeeld sportadvies

Het Dagblad van het Noorden heeft het volgende artikel over ons geschreven:
DVHN-krantenartikel

Oracle: tijd naar seconden en omgekeerd omrekenen

Deze functies gebruik ik in een project om de tijd in datum kolommen te vergelijken:


FUNCTION time_to_sec (i IN VARCHAR2) RETURN NUMBER IS
numSecs NUMBER;
BEGIN
numSecs := to_char(to_date(i,'hh24:mi:ss'),'sssss');
RETURN numSecs;
END time_to_sec;

FUNCTION sec_to_time (i IN NUMBER) RETURN VARCHAR2 IS
/*
Round to 0 prevents this exception: ORA-01830: date format picture ends before converting entire input string
*/
numTime VARCHAR2(255);
BEGIN
numTime := to_char(to_date(ROUND(i,0),'sssss'),'hh24:mi:ss');
RETURN numTime;
END sec_to_time;