Notes from FOSDEM

Going to FOSDEM has always been a mix of feelings: is that time of year when you meet many friends from the Free Software community, you learn some interesting things that you didn’t know about, you share some knowledge, and you may have a fair amount of chocolate and beer in a usually cold weather.

Sometimes talks are not what they seem, and oftentimes you can’t get into a room because it’s full. But there’s always the chance to learn something new, so here’s my list of notes:

  • Play etcd if you want to try it and see what happens when you make changes.
  • Minikube: mini Kubernetes for developing on your laptop.
  • Software Heritage API is publicly available.
  • OpsTheater offers a stack for IaaS with Puppet, Foreman, GitLab, Icinga, ELK+Graphana, Mattermost (integrates easily with GitLab).
  • Recommendation: move things from Hiera to Foreman smart parameters. Debugging Hiera can be a nightmare if you have hundreds of YAML files.
  • octocatalog-diff compares two Puppet catalogs without deploying the changes. Facts are not live and changes in providers won’t show. A Foreman plugin is available too as a proof of concept.
  • Puppeteer helps find configuration smells that violate recommended best practices.
  • Legacy docs are big, comprehensive, and feature based. Modular docs are lean, concise, targeted, and user-story based. Content rot makes docs hard to find and navigate. Document only what users need, as user stories.
  • Perl6 grammars make it easy to implement informal DSLs. Reading recommendation: Domain Specific Languages, by Martin Fowler (2010).

Happy hacking!

Config Management Camp

This was my first time at the Config Management Camp in Gent and I had a great time and you’ll see from my notes below that it was definitely worth it.

Day 1

  • Recommendation: use find-nodes from PuppetDB with i parallel SSH (pssh).
  • Services resiliance depends on human resiliance (HumanOps).
  • tiny puppet installs applications on any OS (slides):
    • e.g. tp install puppetdb
    • tinydata is the default source for application data.
  • Vox Pupuli maintain abandoned puppet modules.
  • Reading recommendation: Thinking in Systems: A Primer, by Donella Meadows.
  • Puppet extensions:
    • Ruby functions can take lambda arguments.
    • dalen-puppetdbquery query_resources function to find other nodes resources.
    • Puppet faces allows new puppet subcommands (dalen-puppetls).
  • Foreman unknown gems (slides):
    • Foreman hooks plugin.
    • Trends show changes over time.
    • Bookmark searches. Puppet can ask the search API for information with puppet-foreman module.
    • Class import has rules to hide things in the UI.
    • hammer ssh -c ‘uptime’ -s ‘architecture=…’
    • foreman-rake hosts:scan_out_of_sync
    • There are several Foreman UI themes.
    • API docs are available in your Foreman instance as http://foreman/apidoc
  • Types and providers:
    • require “wirble” in ~/.irbrc
    • Pro tip: use Puppet types and providers for managing web APIs.

Day 2

  • Inspiring story by Annie Hedgpeth, My Journey Into Technology Through Inspec (video).
  • Getting data to the end user:
    • Memex maps the Dark Web.
    • NASA beards like GitHub, sysadmins don’t.
    • juju allows users choose their applications, configure and scale them.
  • Someone mentioned that libral (a native Resource Abstraction Layer) seemed interesting.
  • Quality automation with rudder-dev (slides)
  • undef: refactoring old puppet code (slides)
    • Puppet 3.x is EOL.
    • Hiera overload, bloated YAML. Clean it up!
    • Lack of validation/CI:
      • Syntax error should not be deployable.
      • Fix style with puppet-lint -f
      • rspec-puppet to test special cases.
      • Beaker or Test Kitchen for acceptance tests.
    • VCS top notch:
      • Make it easy as possible to avoid mistakes.
      • Put full context in the commit message.
      • Use the body to explain what and why, not how.
      • Commit often, perfect later, publish once.
      • The git pickaxe shows you how to find any text in the commits.
      • GitMagic helps setting contribution guidelines.
    • Make newbie experience better:
      • Start with control-repo.
      • Pick supported forge modules, then pick approved ones.
      • puppet module skeleton
      • Write as little as possible.

Hope you find the notes useful. Let me know if you have any questions.


Reunió de juny de

Per la reunió del passat mes de juny dels Perl Mongers de Barcelona fam fer un experiment al que vam anomenar Testing Open Space, una mena de desconferència en què l’eix central seria el concepte dels tests i els temes dels que es parlarien es decidirien a la mateixa reunió. Comparteixo aquí el resum de la reunió que he enviat a la llista perquè crec que també podria ser interessant per a gent de fora de la comunitat dels mongers.

Després de les presentacions corresponents (teníem cares noves) vam explicar diferents casos amb què ens trobem que cal introduir tests, sobretot d’integració, en sistemes legacy. Vam posar com a exemples els següents:

  • Introduir tests en un sistema no modularitzat per a fer les altes d’usuaris als serveis del meu departament. És un codi que originalment es va fer per resoldre un problema concret i que ha anat creixent de forma descontrolada (un script per cada servei) i sense tests.
  • Introduir tests en una eina per automatitzar els pull requests als upstreams dels mòduls de Perl que empaquetem a Debian. Ja tenim una forma d’enviar les diferències dels canvis que hem de fer per generar els paquets a Debian, però per als upstreams que tenen els repositoris a GitHub volem crear directament els pull requests.
  • Com fer tests d’integració en un sistema que utilitza serveis d’Amazon Web Services (AWS) sense replicar tot l’entorn de producció.

En aquest punt vam fer una petita explicació de les diferències entre els tests funcionals o unitaris i els d’integració. També vam parlar de mocking i de com evitar-lo tenint diferents entorns per a producció i test.

Tot seguit, vam comentar com amb refactoritzacions petites que vagin afegint una capa d’abstracció als serveis d’AWS es podrien fer els tests més fàcilment: aquest middleware primer cridaria exactament als serveis d’AWS (assegurant així que no s’introdueix cap canvi de disseny que afecti al funcionament) i que després gradualment es podria anar evolucionant fins que permeti fer tests sense tocar els serveis d’AWS. Vam comparar-ho amb el patró Model-View-Controller i amb altres middlewares com DBIC.

Després vam fer una mica de teràpia de grup parlant dels motius pels quals no es fan els tests i la qualitat del codi no és la que hom desitjaria. Vam parlar del triangle de ferro (recursos, abast, temps i qualitat) i de la versió pick two.

Finalment, ja quan estàvem a la porta a punt de marxar va sorgir el tema del Behaviour-Driven Development i vam comentar molt ràpidament què fa i quina diferències té respecte al Test-Driven Development: el primer està orientat a negoci i el segon a desenvolupament.

Us recomano aquest parell de llibres:

També podeu trobar interessant aquest vídeo sobre La economia del refactoring d’en Xavi Gost a la CAS2014 (no estic d’acord amb tot el que diu però el trobo igualment interessant).

Packaging SoftiWARP kernel module for Debian

One of the HPC clusters we have at work has a mixed set of nodes: a few of them have InfiniBand interfaces and the others don’t. A few weeks ago we were requested to install the SoftiWARP kernel module on those nodes that lack the InfiniBand interface. We had already tried to build the module from source and it worked well, but now the challenge was to install it as a Debian package with DKMS, so it would be built for all installed kernel versions on each node.

We use Puppet to manage cluster node configuration, so you may wonder why not using Puppet instead. Well, for one we’re talking about installing the source of a kernel module, with no configuration at all. But there’s also the fact that Puppet delegates to package providers the management of software, which know much better how to deal with software upgrades. Lastly, there’s the challenge of learning something new: though I had previous knowlegde of DKMS, I had no idea on how to make a Debian package out of it.

Fortunately, I found Evgeny Golov‘s DKMS playground on Debian wiki. With those tips and my recently updated experience on packaging Perl modules for Debian, I was confident enough to try my first DKMS Debian package. Actually, it came out quite easy: I just had to adapt debian/rules a bit to accommodate modern debhelper best practices:

#!/usr/bin/make -f
sversion:=$(shell dpkg-parsechangelog|grep "^Version:"|cut -d" " -f2|rev|cut -d- -f2-|rev|cut -d':' -f2)
    dh $@
    dh_installdirs -p$(pdkms)  usr/src/$(sname)-$(sversion)
    cp -a *.txt Makefile *.c *.h debian/$(pdkms)/usr/src/$(sname)-$(sversion)
    sed "s/__VERSION__/$(sversion)/g" debian/ > debian/$(pdkms)/usr/src/$(sname)-$(sversion)/dkms.conf

Funny enough, I spend more time filling the details on debian/copyright and debian/control files than actually setting up DKMS, so big kudos to Evgeni!

Take a look at the full debian packaging for further details. You may notice that this package has a dependency on libsiw-dev (SoftiWARP userland library), which I had to package first and was a bit trickier. More on that next time.

Col·laboració en els projectes TIC de la UPC

Avui el personal TIC de la UPC estàvem convidats a participar en un seminari sobre eines col·laboratives durant el qual ens han fet una enquesta amb diverses preguntes per copsar fins a quin punt fem difusió de la nostra tasca tant a dins com a fora de la universitat.

A la pregunta s’havia de repondre la periodicitat amb què difonem la nostra tasca a la nostra unitat, a d’altres unitats de la UPC i a fora de la UPC. Quan hem analitzat les respostes de l’enquesta, aquesta pregunta ha generat un petit debat sobre si s’havia acabat d’entendre bé i què s’entenia per difusió. Sense entrar en detalls, el resultat de l’enquesta mostrava que fem difusió a les nostres unitats força sovint, una mica menys a la resta d’unitats i molta menys a fora de la UPC. El debat s’ha centrat en aquesta darrera observació: la majoria de les persones diuen que gairebé mai fan difusió de les seves tasques a fora de la UPC. Doncs bé, jo he estat una d’aquestes persones.

Fa temps que vaig encetar aquest blog amb la intenció de compartir les meves experiències sobretot a la feina. Però escriure demana temps i constància i ràpidament ho vaig abandonar. De fet, gairebé feia un any que no escrivia res. La pregunta que em faig és per què passa això? A banda del temps per escriure, quins altres factors fan que compartir el que faig a la UPC sigui difícil o faci mandra? Potser és la frustració d’haver intentat col·laborar molts cops sense gaire èxit.

La UPC és molt gran, fins al punt que hi treballem uns quants centenars de TIC. Molts ens coneixem perquè hem treballat junts, perquè hem estat companys d’estudis, perquè hem coincidit en els cursos de formació, perquè hem lluitat plegats per defensar els nostres drets a la UPC, etc. Per tot això, els TIC de la UPC estem força units per un sentiment de pertinença que ens defineix com un grup amb un gran potencial dins de la comunitat UPC. Però curiosament aquest sentiment no es tradueix en projectes de col·laboració entre les diferents unitats on estem treballant. Fins i tot la comunicació entre nosaltres és pobra en el sentit que no sabem què fan els nostres companys d’altres unitats, tret que hàgim coincidit en alguna banda i els ho preguntem directament.

Aleshores què és el que cal perquè es produeixi aquesta col·laboració entre nosaltres? Jo tinc la sensació que molts dels TIC tenim ganes de col·laborar perquè hem vist en altres comunitats que és bo a llarg termini per a tothom. Avui durant el seminari ens han presentat algunes eines que poden engrescar-nos una mica, però en el fons el problema no són les eines. Per dur a terme projectes cal destinar-hi recursos. Això vol dir que, en el context actual d’escassetat, aquests recursos no es podran destinar a altres coses i per tant cal establir prioritats. Aquesta feina és responsabilitat de les persones que dirigeixen els equips i les unitats de la universitat perquè són els que coneixen què aporta més valor a la docència i la recerca. Què falla doncs?

Des del meu humil punt de vista, tot i que la comunitat UPC està formada diversos col·lectius de persones, no compartim la mateixa visió del que és la universitat. Fins a un cert punt, suposo que és comprensible tenint en compte que els col·lectius són realment diversos (en tipologia i mida): els estudiants, el personal docent i investigador i el personal d’administració i serveis. Però aquest problema de visió no compartida fins i tot passa dins dels mateixos col·lectius i aquí és on comencem a ensopegar amb els impediments. Com es resol això?

La solució és molt simple de dir però difícil de dur a terme: cal incentivar i facilitar la col·laboració a tots els nivells dins la UPC. El que no hauria de passar és que hi hagi gent amb l’empenta i l’esperit de fer projectes que aportin valor a la universitat, col·laborant amb els companys d’altres unitats i que la manca d’una visió compartida freni aquesta iniciativa. Perquè la gent col·labori només cal que en tinguin ganes i els ho posin fàcil. Un altre dia en seguiré parlant.

El futur del correu a la UPC

A la UPC ja fa uns anys que s’està estudiant la migració del servei de correu electrònic al núvol. Arran d’un fil sobre el tema a la llista de l’assemblea de la Càtedra de Programari Lliure, he fet una reflexió sobre el tema que també vull compartir des del blog. Us recomano que llegiu tot el fil i especialment el document que ha preparat en Sebas Vila amb les seves valoracions.

El tema del correu com a comodity és un aspecte interessant a tenir en compte, hi estic d’acord. Però no és pas l’únic i no crec que sigui el principal en la situació actual de la UPC. Davant de la greu situació econòmica de la UPC, el primer que cal posar damunt la taula és una anàlisi econòmica del cost actual del servei de correu distribuït en unitats, el cost que tindria si es centralitzés en 1 sol punt dins la UPC i finalment el que costaria externalitzar-lo, tenint en compte el cost de migració del que no es parla en cap moment, i de tornar-lo cap a casa si canviessin les circumstàncies. Amb l’anàlisi econòmica i tècnica, junt amb l’anàlisi de riscos es podria determinar si cal fer el pas i si cal fer-lo ara.

Un altre aspecte important a tenir en compte és l’opinió que tenen els usuaris del servei actual. Tal com apunta en Sebas, potser ens adonaríem que hi ha una part important de gent dins la UPC que ja no estan utilitzant el servei de correu i que per tant tampoc suposen un cost significatiu. Però també cal tenir en compte que fa una pila d’anys que s’intenta deixar de banda el Lotus Notes i que no hi ha manera d’aconseguir-ho, força usuaris segueixen utilitzant-lo per llegir el correu. Si fins ara no ha estat possible eliminar el Notes què ens fa pensar que aquests usuaris es voldran canviar a qualsevol altra cosa?

El risc de fracàs és realment alt per molts motius, però principalment perquè s’està plantejant una migració completa del servei de correu actual. Em pregunto per què no es pot fer un projecte pilot amb usuaris de diferents col·lectius i fer una anàlisi acurada del que suposaria la migració completa. S’ha fet amb el tema del teletreball, per què no es fa amb el correu?

Estic d’acord amb en Marc que hem de valorar si el correu és un servei estratègic o si cal dedicar els esforços a d’altres serveis que tinguin més impacte en la docència i la recerca. Però com a tècnic tinc la sensació que el correu UPC és com la xarxa UPC, són serveis transversals que vehiculen la resta de serveis. No els valorem perquè funcionen raonablement o perquè hem sabut trobar-hi alternatives (els mòbils amb 3G en són un exemple).

Si la UPC fos una startup dedicada a fabricar maquinari lliure o programari lliure, tindria clar que el correu no seria un servei estratègic i no hi dedicaria recursos propis. Però el nostre camp és el coneixement i per compartir-lo de forma eficient crec que hem de tenir el control dels nostres propis canals de comunicació. No es tracta de competir amb els serveis del núvol perquè qui vol ja els està utilitzant sense demanar permís, hem de donar el servei que necessiten els nostres usuaris. Per això potser ens hem de preocupar primer per saber si estem donant el servei que volen i si ho estem fent bé. Tampoc serveix de res parlar en nom dels usuaris sense tenir dades concretes del que opinen del servei que donem.

Finalment, un aspecte interessant a tenir en compte és que el servei de correu no ha evolucionat gaire perquè és un dels més omnipresents a tot el món i costa introduir canvis (per exemple, per combatre l’spam, etc.). Curiosament aquest és un àmbit de recerca que sembla en via morta, però crec que té molt de potencial. Si la UPC renuncia a gestionar el seu propi correu estarà renunciant a un dels serveis universals sobre els quals un avenç en recerca podria tenir un impacte molt important per a tota la humanitat. De debò la UPC s’ho pot permetre o ha de ser pionera en el futur del correu electrònic? Si ho hagués de ser, no tindria gaire sentit haver externalitzat el seu propi servei, oi?

Please mount Volume or label a new one?

A Monday morning we found several messages like this from Bacula:

09-Sep 18:27 Tape-A JobId 15196: Please mount Volume "A0000038" or label a new one for:
    Job:          sites.2012-09-08_01.50.03_40
    Storage:      "LTO-4" (/dev/nst0)
    Pool:         Default
    Media type:   LTO-4

That was Bacula complaining about the wrong volume on the drive. However, after examining the status of storage the weird thing was that the tape with barcode “A0000038” was actually mounted on the drive, it was purged and had 0 bytes used… WTF?

We started suspecting our tape rotation algorithm was not taking into account that maybe purged tapes were not used if data retention hadn’t expired, but Automatic Volume Recycling says otherwise and some tests on other purged tapes with expired data retention failed too.

Several days of searching similar issues later, it seemed clear that there was something wrong only with some purged tapes from the media catalog. So i came up with a quick test for each one of our purged tapes in order to make sure that they were labeled correctly. First, i loaded “A0000038” and read its label:

# mtx -f /dev/sg4 load 22
Loading media from Storage Element 22 into drive 0...done
# dd if=/dev/nst0 bs=65000 count=1 | od -a | head
0+0 records in
0+0 records out
0 bytes (0 B) copied, 3.81024 s, 0.0 kB/s

You can see that it failed to find any Bacula label, so next i tried the same test with another tape in full state that had been used the day before:

# mtx -f /dev/sg4 load 16
Loading media from Storage Element 16 into drive 0...done
# dd if=/dev/nst0 bs=65000 count=1 | od -a | head
0+1 records in
0+1 records out
64512 bytes (65 kB) copied, 3.73563 s, 17.3 kB/s
0000000   G   ;   =   < nul nul nul   D nul nul nul nul   B   B   0   2
0000020 nul nul stx  gs   L etx   O sub del del del   ~ nul nul nul nul
0000040 nul nul nul 240   B   a   c   u   l   a       1   .   0       i
0000060   m   m   o   r   t   a   l  nl nul nul nul nul  vt nul eot dc3
0000100   1   8   O  si  ff nul eot dc3   J   +   W stx   p nul nul nul
0000120 nul nul nul nul nul nul nul nul nul nul nul nul nul   A   0   0
0000140   0   0   0   0   6 nul nul   D   e   f   a   u   l   t nul   B
0000160   a   c   k   u   p nul   L   T   O   -   4 nul   v   m   -   h
0000200   o   s   t   -   4 nul   T   a   p   e   -   A nul   V   e   r
0000220   .       5   .   0   .   1       2   4       F   e   b   r   u

(Note that device /dev/nst0 has a minimum block size of 64512 bytes, otherwise dd would raise a Cannot allocate memory error.)

This time the Bacula label was found on the tape (the Bacula 1.0 immortal string is a clue), so we were now on the right track. Then i reviewed our wiki for the tape change procedure and there was an optional step in the tape purging section explaining how to blank a tape from another Bacula director before labeling it for this one. Therefore, it seemed that someone had been blanking the tapes after purging them and Bacula didn’t know what to make with them even though they had the right barcodes.

The fix was quick: i tested every purged tape to make a list of the blanked ones, then deleted them from the catalog and labeled them back from the bconsole:

* delete volume="A0000038"
* label barcodes slots=22 pool=Default

Bacula is happy again, and we are too! 🙂