Results for category "Linux"

97 Articles

Slow RAID performance with our new Linux storage

During the last months we periodically experienced performance problems with our storage system. Investigating the cause for the slow performance was problematic as we did not have direct shell access and could only rely on crippled information from the web GUI. Yesterday my collagues migrated the storage system from the proprietary operating system solution to Fedora 22.

After some problems with LVM and directory permissions for Samba, the storage went back online today in the morning. We noticed really fast, that our steady slow storage transformed into a “sometimes running fast, sometimes really slow” machine. One thing was, that copying ISOs from and to a Samba share resulted into really bad I/O performance on every VM which uses mounted iSCSI disks. For example, during a copy through SMB our internal JIRA and Confluence were no longer usable as the proxy timed out. Both VMs (JIRA/Confluence and proxy) were stored on the iSCSI disks provided by the storage.

We excluded the Samba daemon and the operating system as root causes for this issue. We tested the performance with help of dd and compared the results with Thomas Krenns. Our eyes exploded as we saw that the performance of our RAID was a magnitude (s)lower than the reference values. Even a software RAID were four times (!) faster than our hardware RAID. For direct read/writes we received constant slow throughput of 40 MByte/s. WTF? We thought about this issue and came to the conclusion that it had to be something with the LSI 9261-8i RAID controller of the storage. A defect on the controller itself seemed to be unlikely. But then we realized, that the Backup Battery Unit of the RAID controller had a defect. Could it be that an erroneuos battery could have such an impact? And indeed, Thomas Krenn supported this thesis: A defect or disabled BBU ensures that the RAID cache gets disabled and with that the performance.

Our BBU replacement is ordered and I am optimistic that we will fix the performance issue. I’ll update this blog post as soon as we have the new battery installed.

Update 2015-09-14: BBU has been installed. The RAID performance is fine now.

Dell XPS 15, Linux and HiDPI

A few weeks ago I bought a new notebook (Dell XPS 15, 15″, 512 GByte SSD, Core i7) for my after-work work and home usage. First of all: it is an awesome fast piece of hardware. Fedora 21 boots up in 3 seconds, Eclipse (STS) starts up in around 7 seconds. But it has some disadvantages regarding the hardware:

  • Having the laptop on the lap bends the case, randomly not releasing the buttons, see http://en.community.dell.com/support-forums/laptop/f/3518/t/19601453
  • At the beginning backspace and space key felt like already used. I must admit that I am using a mechanical keyboard at work and for my standalone PC at home, so every other rubber keyboard sucks ūüėČ
  • Return key feels slightly too small at the beginning.
  • High pitching noise, probably coming from the touchscreen. Most of the time it occurs during scrolling through long documents and having CPU load. I am not sure why this happens.

Especially the problem with the non-releasable buttons drove me crazy at first because it seemed to occur randomly. After some days working with the notebook I accepted this failure. All in all it seems to be a very nice notebook for a developer like me, but…

… The HiDPI support for Linux software just sucks. Linus Torvald statement made his statement at the end of 2012 but the current state is still bad:

  • Default Chromium package has no support for HiDPI; buttons and menus have the wrong scaling. Firefox does support HiDPI and so I set it as my default browser.
  • Scaling of some GTK input fields (radio buttons, checkbox) is wrong, see https://bugzilla.mozilla.org/show_bug.cgi?id=975919
  • Using a second display (beamer) totally screws up the X server. I can’t¬† get a higher resolution than 800*600 when cloning both displays. Not sure, why this happens.
  • IntelliJ (including EAP 14), Eclipse (4.4) and Netbeans (8.x) are having wrong scaled icons. See wiki discussion for Eclipse at https://wiki.eclipse.org/Bug_421383_-_Graphics_Scaling_issues_on_high_DPI_displays

For a list of workarounds, the ArchWiki is the first place to look for.

Fixing segmentation fault in libapt-pkg

I received the message “Segmentation fault” while running an¬†apt-get install. My¬†syslog¬†contained the following lines:

Aug 11 11:34:19 srv kernel: [65729.407484] check-new-relea[12700]: segfault at 7f2dfd94746c ip 00007f2dfc0becd8 sp 00007fffd0671d20 error 4 in libapt-pkg.so.4.12.0[7f2dfc069000+11c000]
Aug 11 11:35:52 srv kernel: [65822.603384] apt-get[12820]: segfault at 7f7d256e346c ip 00007f7d24252cd8 sp 00007fffdbb89140 error 4 in libapt-pkg.so.4.12.0[7f7d241fd000+11c000]

I fixed it with

dpkg-reconfigure libapt-pkg4.12

Use your Uberspace server as relay host for your local postfix instance

Here are the instructions for letting your home server send e-mails with help of your Uberspace account. This small guide is based on Ubuntu 13.04. I assume your Uberspace username is $USUSER and your Uberspace host is $USHOST.

Setup an additional mail address

See http://uberspace.de/dokuwiki/start:mail

 ssh $USUSER@$USHOST.uberspace.de
 vadduser local-server
 # enter a non-trivial password
 # the address "local-server" is now available via $USUSER-local-server@USHOST.uberspace.de

Setup postfix

apt-get install postfix libsasl2-modules bsd-mailx
# choose "Satellite System" for Postfix server type

Change /etc/postfix/main.cf

myhostname = mail.my-local.domain
mydestination = mail.my-local.domain, localhost
relayhost = $USHOST.uberspace.de:submission
smtp_sasl_auth_enable = true
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password

Add your newly created mail account

touch /etc/postfix/sasl_password
chmod 600 /etc/postfix/sasl_password
vim /etc/postfix/sasl_password
# add the following line
# $USHOST.uberspace.de:submission $USUSER-local-server@USHOST.uberspace.de:$PASSWORD
# :wq
service postfix restart

Send a test mail

mail -s "Test" mail@youraddress.de -- -f root@local-server.internal

tail -f /var/log/syslog should now contain something like

Aug 10 19:52:26 srv postfix/qmgr[11620]: 63EDB13C0F83: from=<root@local-server.internal>, size=309, nrcpt=1 (queue active)
Aug 10 19:52:26 srv postfix/smtp[11626]: connect to $USHOST.uberspace.de[2001:1a50:11:0:xx:yy:zz:x]:587: Network is unreachable
Aug 10 19:52:26 srv postfix/smtp[11626]: 63EDB13C0F83: to=<mail@youraddress.de>, relay=$USHOST.uberspace.de[95.143.xx.yy]:587, delay=0.64, delays=0.26/0.12/0.19/0.07, dsn=2.0.0, status=sent (250 ok 1376157144 qp 15391)
Aug 10 19:52:26 srv postfix/qmgr[11620]: 63EDB13C0F83: removed

The Network is unreachable is not important, because I don’t have IPv6 enabled.

Update your HP TouchPad to CyanogenMod 10.1

Yesterday I read the article written by Christoph and thought about updating my current installed CyanogenMod 9 with the current version. Here are the instructions (assuming, you have already CM installed):

  • wget¬†http://108.166.171.36/goodata/50d9ef8310a7cba36225d98a0a37ea26/51ec1e7a/devs/milaq/tenderloin/cm10.1/cm-10.1-20130721-UNOFFICIAL-tenderloin.zip
  • wget¬†http://108.166.171.36/goodata/5dc90f8102df2b869507ff02a7642a07/51ec1e4a/gapps/gapps-jb-20130301-signed.zip
  • Restart the HP TouchPad and select ClockWorkMod Recovery on boot
  • Connect your notebook with the TouchPad via USB cable and select¬†mounts and storage > ¬†mounts USB storage
  • Copy both .zips to the connected USB mass storage device into the directory cminstall¬†(or wherever you want)
  • Select¬†mounts and storage > umount
  • Select¬†wipe data/factory reset > yes
  • Select wipe cache partition > yes
  • Select¬†install zip from sdcard > choose zip from sdcard¬†for both files downloaded before
  • Select reboot system now

How to update the firmware for video codecs is described here. Two remarks: the newest build does work too and use Total Commander for moving the firmware.

Funkauswerter monitord um ActiveMQ-Support erweitern

Unsere bisherigen Pl√§ne f√ľr ZABOS sehen vor, dass wir die Funktionalit√§t der Alarmierung per SMS √ľber F√ľnfton-Folgeruf (ZVEI) erweitern – n√§mlich um die digitalen Protokolle POCSAG und FMS. Unserer bisheriger F√ľnfton-Folgerufempf√§nger ist ein selbstenwickeltes Board mit Mikrocontroller, der die F√ľnfton-Folgen aufnimmt und dann √ľber die serielle Schnittstelle an ZABOS weiterreicht.

Bereits vor einiger Zeit hatten wir begonnen, uns nach Alternativen umzuschauen, denn die Eigenentwicklung der Auswertungssoftware f√ľr die digitalen Protokolle w√ľrde zu viel Zeit in Anspruch nehmen. Au√üerdem war f√ľr jedes neue ZABOS-System ein neues Mikrocontroller-Board n√∂tig. Da wir keine Hardwareschmiede sind, wollten wir darauf verzichten.
Als Alternativen liefen uns schlie√ülich FMS Crusader √ľber den Weg und au√üerdem auch das Open Source-Tool monitord, das recht gut in unsere zuk√ľnftige Produktstrategie passte.

monitord ist in C++ geschrieben und l√§uft sowohl unter Linux als auch unter Windows. Mit einer Lua-Scripting-API kann die Funktionalit√§t des Systems erweitert werden. Allerdings wollte ich aus architekturbedingten Gr√ľnden keinen REST-Service auf ZABOS-Seite zum √úbermitteln der Alarmierungen schreiben.
Stattdessen sollten die eingehenden Alarmierungen f√ľr zuk√ľnftige ZABOS-Versionen in einer Message-Queue in Form von ActiveMQ auflaufen.
ZABOS kann dann innerhalb von ActiveMQ z.B. drei verschiedene Topics (zabos.pocsag, zabos.zvei und zabos.fms) abonnieren und die jeweiligen Schleifen im System alarmieren, sobald eine Nachricht in dem jeweiligen Topic ver√∂ffentlicht wird. monitord hingegen nimmt die Funksignale √ľber zwei Soundkarten auf (damit werden wir das Board mit dem Mikrocontroller und die n√∂tige serielle Schnittstelle los), verarbeitet sie und und publiziert sie im passenden Topic der Queue.

Neben der Lua-API existiert in monitord auch eine eigene Plugin-Schnittstelle die z.B. f√ľr das MySQL-Plugin genutzt wird. Diese Plugins k√∂nnen dann direkt in C++ geschrieben werden.

Nachdem ich mich mit dem gesamten Konzept sehr schnell angefreundet hatte, schaute ich erst einmal nach, ob ActiveMQ denn irgenwelche Bindings f√ľr C++ besa√ü. Gl√ľcklicherweise haben die Jungs von Apache (wie so oft) gute Arbeit geleistet und somit konnte ich mir ActiveMQ-CPP herunterladen und kompilieren. Vorher musste ich noch libaprutil1-dev nachinstallieren.
Das der ActiveMQ-CPP-Distribution beiliegende Beispiel unter src/examples/producers/SimpleProducer.cpp war f√ľr mein Vorhaben genau der richtige Einstieg – mehr sollte mein Plugin ja auch eigentlich nicht k√∂nnen.

ActiveMQ-CPP hatte ich also soweit installiert – nun ging es daran, monitord mit ActiveMQ bekannt zu machen. Zuerst lie√ü ich den monitord-Quellcode kompilieren und testete, ob dieser soweit √ľberhaupt in Ordnung war.
Das Kompilieren funktionierte zwar, allerdings konnte der Daemon meine Soundkarte nicht erkennen. Erstaunlicherweise stand im Log, dass er √ľber OSS auf die Soundkarte zugreifen wollte, obwohl ich explizit in der monitord.xml als Soundkarte “plughw” verwendet und auch beim Kompilieren –with-alsa mitgegeben hatte. Ich schaute mir die configure-Ausgabe noch einmal an und stellte fest, dass das Paket libasound2-dev f√ľr ALSA ben√∂tigt wurde – ist irgendwie auch klar -, ich es aber nicht installiert hatte. Das configure-Script brach aber bei fehlenden Headern nicht ab, sondern kompilierte stattdessen mit OSS-Support.
Ich also libasound2-dev nachinstalliert und meine Soundkarte wurde schließlich erkannt.

Die rudiment√§re Logik zum Laden der ActiveMQ-Konfiguration innerhalb der monitord.xml, dem Initalisieren der Verbindung u.s.w. tipperte ich in knapp drei Stunden runter, nachdem ich immer wieder mal in die C++-Dokumentation schauen musste. Gl√ľcklicherweise konnte ich viel von dem ActiveMQ-Beispiel als auch von dem monitord-MySQL-Plugin √ľbernehmen.

Anschlie√üend erweiterte ich die configure.ac und Makefile.ac um die n√∂tigen ActiveMQ-Abh√§ngigkeiten und konnte mit –with-activemq auch mein Plugin kompilieren.

Das ActiveMQ-Plugin ist noch nicht vollst√§ndig, sowohl Testen als auch das Ver√∂ffentlichen der Nachrichten in der Queue ist noch nicht implementiert. Ist aber auch nicht wild, da es mir erst einmal um die Evaluierung des Konzepts ging. Und das ging alles recht schnell, obwohl ich von C++ und den GNU-Buildtools null Ahnung habe ūüėČ
Die ge√§nderten Sourcen habe ich auf Github ver√∂ffentlicht – enth√§lt nat√ľrlich noch massig Bugs und ist ungetestet.

Use latest webOS SDK with Virtualbox 4.0 running on Ubuntu

HP does not allow the installation of the emulator in a VirtualBox running version 4.0+ because Oracle changed some APIs between 3.x and 4.x.

If you already have VirtualBox 4.0 installed, you have to follow these steps (do a backup of your VirtualBox configuration and virtual machines!):

# add non-free to VirtualBox source in /etc/apt/sources.list
sudo echo "deb http://download.virtualbox.org/virtualbox/debian maverick contrib non-free" >> /etc/apt/sources.list
sudo apt-get update
# replace virtualbox-4.0 by virtualbox-3.2
sudo apt-get install virtualbox-3.2
# install 320x400 VM
palm-emulator
# install 320x480 VM
palm-emulator
# finally replace virtualbox-3.2 by virtualbox-4.0
sudo apt-get install virtualbox-4.0

Howto: Ein Git-Repository auf sourceforge.net resetten

Hin und wieder f√ľhrt man einen Commit durch, von dem man im Nachhinein denkt: “Verdammte Axt”. So geschehen bei einem meiner sourceforge.net-Projekte, die ich seit l√§ngerer Zeit von unserem internen Subversion-System auf das √∂ffentliche Git-Repository bei Sourceforge umstellen wollte.
Mein initialer Commit enthielt vertrauliche Informationen, die blöderweise nicht hätten auftauchen sollen, da ich in meiner .gitignore einen Typo hatte.
In solch einem Fall besteht nun die Möglichkeit, mit Hilfe von diversen Git-Kommandos die Datei zu entfernen oder aber man setzt das Repository komplett neu auf.
Um bei sourceforge.net das Repository per Hand neu zu erstellen, muss man Administrator-Rechte im Projekt besitzen und sich mit

ssh -t USER,PROJECT@shell.sourceforge.net create
# bzw.
ssh USER@shell.sourceforge.net

auf dem sf.net-Server einloggen.

Mit den folgenden Kommandos werden nun alle Git-Dateien des Projekt-Verzeichnisses gelöscht und das Repository neu initalisiert.

cd /home/scm_git/P/PR/PROJECT
rm -Rf PROJECT/*
mkdir PROJECT
git --git-dir=PROJECT/ init --shared=all
vim PROJECT/description

Debugging von C-Applikationen unter Linux

Da ich gegenwärtig an libopenranked von etqw-openranked arbeite und ich vermute, dass ich meine Erkenntnisse nach einiger Zeit wieder vergesse, gibt es hier die Kurzfassung.

Damit bei einem Segmentation Fault eine Core-Dump erzeugt wird, muss

ulimit -c unlimited

aufgerufen. Damit wird festgelegt, dass der Core-Dump beliebig groß sein darf.

Mit

gdb a.out core
backtrace

lassen sich die letzten Ausf√ľhrungsschritte der Applikation anzeigen.

Mit

apt-get install valgrind
valgrind --tool=memcheck --leak-check=yes ./a.out

l√§sst sich √ľberpr√ľfen, welche Funktionen potenzielle Memory Leaks erzeugen, die wiederum zu einem Segmentation Fault f√ľhren k√∂nnen.