Weekly Snap: Icinga at Audi, Netcat & Clang

weekly snap29 Jul – 2 Aug turned over a new month by introducing our Icinga project at Audi, our Graphic Designer and alternative tools for data transfer and compiling.
Eva began by counting 85 days to the OSMC with Jens Michelson’s presentation on “Monitoring by extending the Net-SNMP agent”.
She went on to share a little on our ongoing Icinga and LConf project at carmaker AUDI AG as our our Graphic Designer, Daniela introduced herself and her sticky note keeper.
Lastly, Blerim showed how to speed up data transfer over a network with Netcat and Michael recommended Clang as an alternative compiler to GCC.

clang als Compiler Alternative

gcc als Compiler ist eigentlich jedem ein Begriff, der schon mal Icinga selbst kompiliert hat. Respektive g++, sofern man sich mutig an Icinga 2 Builds heranwagt. Auf gängigen Systemen, wie etwa Debian, reicht ein

# apt-get install gcc
# apt-get install g++

um damit arbeiten zu können. Um das ganze zu beschleunigen, hat mein Kollege Gunnar schon auf ccache hingewiesen 😉
Man soll ja hin und wieder über den Tellerrand schauen, und als dann FreeBSD angekündigt hat, clang als default Compiler zu verwenden, bin ich hellhörig geworden. Aber wie es halt so ist, das übliche Zeitproblem schlägt immer wieder zu – bis der erste Icinga Bug mit clang Compiler Warnings aufgemacht wurde.
Die Installation von clang ist ähnlich trivial wie gcc. In Debian Testing (jessie) sollte man lediglich beachten, dass die Pakete nach Versionen getrennt sind. clang-3.2 oder ganz frisch clang-3.4.

# apt-get install clang

Um das ganze parallel zu gcc verwenden zu können, übergibt man die Variablen direkt an make.

$ make -j4 CC=clang
$ make -j4 CXX=clang++

“Am Objekt” sieht das ganze in Icinga 2 mit dem gerade in Entwicklung befindlichen IDO Backend dann so aus:
Ich habe absichtlich einen Fehler beim Host DB Object eingebaut, der einen falschen Typ an die Funktion übergibt, die sich ein Service Object erwartet, aber einen Host bekommt. Icinga 2 kennt lediglich Servicechecks und benötigt deswegen Serviceattribute auch beim Host.
clang_gcc_test_diff
Während gcc (mit ccache) den Fehler zwar ordentlich anmeckert, sieht mans eigentlich nicht sofort.
clang_gcc_test_make_gcc
clang hingegen illustriert das mit Farben und weist einen ebenso direkt auf den falschen String hin.
clang_gcc_test_make_clang
Fazit: Auch wenn wir weiterhin gcc/g++ als grundsolide Basis beim Entwickeln verwenden, clang ist mit Sicherheit eine interessante Alternative, die sich jedermann mal ansehen sollte.

Michael Friedrich
Michael Friedrich
Senior Developer

Michael ist seit vielen Jahren Icinga-Entwickler und hat sich Ende 2012 in das Abenteuer NETWAYS gewagt. Ein Umzug von Wien nach Nürnberg mit der Vorliebe, österreichische Köstlichkeiten zu importieren - so mancher Kollege verzweifelt an den süchtig machenden Dragee-Keksi und der Linzer Torte. Oder schlicht am österreichischen Dialekt der gerne mit Thomas im Büro intensiviert wird ("Jo eh."). Wenn sich Michael mal nicht in der Community helfend meldet, arbeitet er am nächsten LEGO-Projekt oder geniesst...

Weekly Snap: From Open Shot to Mac tips, Cloud, Clang and CeBIT

16 – 20 January was packed with tips, customer news and events as well as the odd buzzword and prank call.
Markus shared his two favourite, open source video editors – OpenShot and Kdenlive while Gunnar gave the thumbs up to Clang, the C++ compiler, for static code analysis.
Following on, Angsar admired Google Docs and Tobias took a lighthearted look at the hottest IT buzzwords around the office.
Julian then explained how to create a new admin account on a Mac in 5 easy steps and Pamela announced our attendance at CeBIT on 6 – 10 March, in the Open Source Park, with free tickets to boot.
Bernd brought big news that our longstanding customer Tradoria will soon be known as Rakuten, after a successful takeover by the Japanese ecommerce giant. He also shared the latest prank call he received from a so-called Mathildenberg Foundation offering a year’s supply of olive oil.

Statische Code-Analyse mit Clang

Clang ist ein Compiler für C und C++, der als Teil des LLVM-Projekts erhältlich ist. Im Vergleich zu gcc ist er um ein Vielfaches schneller und hilft Entwickler, indem er benutzerfreundliche Fehlermeldungen ausgibt (mehr dazu unter http://clang.llvm.org/diagnostics.html).
Zusätzlich kann er verwendet werden, um Anwendungen statisch zu analysieren. Darunter versteht man die automatische Fehlersuche anhand des Quelltexts einer Anwendung. Da die Anwendung dabei nicht ausgeführt wird (z.B. beim Debuggen mit gdb), können hierbei nicht alle Fehler gefunden werden. Trotzdem gelingt es dem “Clang Static Analyzer” viele mögliche Fehler zu finden:

Im Gegensatz zu anderen Tools, wie z.B. Splint, erstellt Clang HTML-Reports, die den Benutzer sofort erkennen lassen, wo sich die (möglichen) Fehler befinden:

In der Dokumentation von Clang ist beschrieben, wie man den Static Analyzer verwenden kann: Im einfachsten Fall muss man lediglich “scan-build ./configure” (für autoconf-Projekte) und “scan-build make” aufrufen, um einen Report zu erhalten.