Skip to content

Parallels Desktop 8 und Ubuntu Linux mit deutscher Mac-Tastatur

Nach stundenlangem Herumprobieren habe ich endlich herausgefunden, wie man bei Verwendung von Parallels Desktop 8 unter Mac OS X in einer Ubuntu 12.04 LTS VM die Tastatur konfigurieren muss, damit man diverse Sonderzeichen (@, geschweifte Klammern, etc.) eingeben kann. Die Gemeinheit ist, dass man die richtige Kombination von drei Einstellungen braucht, damit es funktioniert:

Zunächst muss man in der virtuellen Maschine das Tastatur-Layout auf "Deutsch (Macintosh)" einstellen. Dies ist noch der offensichtlichste Teil. Als nächstes muss man in den Optionen im Bereich "Taste zum Wechsel in die dritte Tastaturebene" die Option "Beliebe Alt-Taste" aktivieren. "Linke Alt-Taste" würde auch funktionieren, "Rechte Alt-Taste" hingegen nicht.

 Jetzt funktioniert die Eingabe von Sonderzeichen wie auf dem Mac gewohnt (z.B. mit Alt-L für das At-Zeichen). Allerdings hat man jetzt keine Alt-Taste mehr (um z.B. direkt einen Menüpunkt anzuspringen). Deshalb muss jetzt noch im Bereich "Verhalten der Alt/Windows-Tasten" die Option "Linke Alt-Taste ist gegen linke Windows-Taste vertauscht" gewählt werden.

Anschließend kann mann die Befehl-Taste dort verwenden, wo man sonst die Alt-Taste verwenden würde (z.B. um mit Alt-Buchstabe direkt einen Befehl in der Menü-Leiste auszuwählen). Parallels Desktop 8 bildet allerdings einige Tastenkombination mit der Befehl-Taste automatisch auf ihre Entsprechung mit der Steuerung-Taste ab, wenn als Profil "Linux" gewählt ist. So wird z.B. Befehl-X durch Strg-X ersetzt. Wenn man dieses Verhalten nicht möchte, muss man in den Einstellungen von Parallels Desktop unter Kurzbefehle als Profil "Generic" wählen. Dann werden die Tastenkombinationen unverändert weitergegeben.

In VirtualBox funktionieren zumindest die ersten zwei Schritte. Das Umbelegen der Befehl-Taste scheitert daran, dass VirtualBox ein Drücken dieser Taste nicht weitergibt sondern selbst verarbeitet.

Update (13. Juni 2017):

Im Prinzip gilt diese Anleitung auch noch für aktuelle Versionen von Ubuntu und Parallels Desktop. Allerdings gibt es in neueren Ubuntu-Versionen keine GUI mehr, über die sich die Einstellungen vornehmen lassen. Stattdessen, muss man die entsprechenden Optionen manuell setzen:

dconf write /org/gnome/desktop/input-sources/xkb-options "['lv3:alt_switch', 'altwin:swap_lalt_lwin']"

Mit diesem Kommando hat es in meinem Fall dann auch mit einer Ubuntu 16.04 LTS VM unter Parallels Desktop 12 funktioniert.

Categories: IT

Less Trouble with KVM virtio and DHCP

In an earlier blog post I claimed that I was seeing problems with VMs using the virtio driver for networking on an Ubuntu 12.04 LTS KVM host using DHCP.

However, as far as I am concerned, this claim was wrong. I now figured out, that the messages about bad UDP checksums had nothing to do with my problem. I was rather experiencing the problems caused by a configuration that did not list the VLAN network interface (eth0.X) on which the DHCP relay agent received the answers from the DHCP server.

The mean thing is, that switch away from virtio fixed this problem. However, this was not because of the UDP checksums now being right (this was merely a side effect). It fixed the problem, because when not using the virtio driver, the DHCP relay agent would receive the answer packets, even if they were received on a VLAN interface it was not listening to. I can only guess that the implementation for VLAN-tagged interfaces is slightly different when using the virtio driver.

After adding the interface to the list of interfaces used by the DHCP relay agent, the DHCP packets are relayed correctly, even if using the virtio driver. The messages about bad UDP checksums now reappeared in the log file, but obviously this is not causing any trouble.

On the other hand, according to a bug report some users really seem to have problems with DHCP when using the virtio driver. However, this might only affect Ubuntu 12.04 LTS guests but not VMs on a Ubuntu 12.04 LTS host.

Trouble with KVM virtio and DHCP

Lately I experienced a problem with KVM-based virtual machine running a DHCP server and another one running a DHCP relay (for both I use the ISC implementations). The DHCP relay was complaining about "bad udp checksums". Using tcpdump and wireshark I quickly found out, that the software was right and the UDP checksums were in fact wrong. After some searching, I found a bug report, that basically described the same problem.

Although I cannot verify this, I think the problem might be related to the fact that I recently upgraded the host machine from Ubuntu 10.04 LTS (Lucid) to Ubuntu 12.04 LTS (Precise). As a workaround, I deactivated the use of the "virtio" support for the network interface in both virtual machines, which seems to fix the problem, because then the UDP checksums are correct.

However, when I performed the same change for a virtual machine still running on an Ubuntu 10.04 LTS host, this actually caused a problem: If VLAN interfaces are used inside the virtual machine, the normal non-virtio driver will screw things up on a Ubuntu 10.04 LTS host.

Long story short: For virtual machines running on a Ubuntu 10.04 LTS host you should use and for a Ubuntu 12.04 LTS you should avoid virtio networking.

Update [2012-07-08]: It seems like the conclusions I draw in this article are actually wrong. Therefore I posted an update clarifying the situation.

Trouble with globally installed Firefox extensions after software upgrade in Ubuntu

Some time ago Ubuntu 10.04 LTS received a Firefox update from the 3.6 branch to the more recent versions (10.0+).

After that upgrade, Firefox on one of my Ubuntu systems suddenly appeared in English instead of the correct locale (German in my case). I first thought that this might be a problem with some localization packages not being installed correctly. However, the problem persisted after upgrading the system to Ubuntu 12.04 LTS.

Some globally extensions (in particular the language pack) showed up in an old version in the add-ons list, although the newest version was installed. Finally I found out, that Firefox looks for the extensions in /usr/lib/firefox/extensions. The new language packs however had been installed in /usr/lib/firefox-addons/extensions. On other systems, /usr/lib/firefox/extensions is a symbol link to /usr/lib/firefox-addons/extensions. In my case however the directory existed and contained the files from the old versions of the language packs.

For some reasons, the old language packs (which had different package names) had not been removed and thus the Firefox upgrade did not place the symbol link (because the directory was not empty). After manually removing the old versions of the language packs, deleting the directory and reinstalling Firefox, the symbol link was created automatically and suddenly the globally installed Firefox add-ons worked again.

Neues Spielzeug III

Inhalt der Kartons: TelefoneHeute ist planmäßig unsere neue Telefonanlage in Betrieb gegangen. Damit ist auch das Geheimnis gelüftet, was sich in den Kartons befand.

Wir haben uns für eine Telefonanlage von STARFACE entschieden. Überzeugt hat mich an dieser Anlage, die ich auf der CeBIT letztes Jahr zum ersten mal gesehen hatte, dass die Anbindung der Telefone vollständig über IP erfolgen kann, Telefone unterschiedlicher Hersteller unterstützt werden (wir benutzen Tischtelefone von snom) und man die Anlage mit eigenen Modulen erweitern kann.

Nachdem ich die eigentliche Anlage und die Telefone schon vor rund drei Wochen direkt bei STARFACE in Karlsruhe abgeholt hatte, musste noch etwas Netzwerk-Hardware und anderes Zubehör organisiert werden. Die Kontakte die ich mit verschiedenen STARFACE-Mitarbeitern hatte, waren alle sehr nett, so dass ich diese Firma uneingeschränkt weiterempfehlen kann.

Als überraschend schwierig hat es sich erwiesen passende Netzwerk-Switches zu bekommen. Eigentlich hätten diese schon vor rund zwei Wochen kommen sollen, aber da unser Lieferant, Office-Partner, selbst Probleme mit seinem Vorlieferanten hatte, verzögerte sich die Lieferung immer weiter. Glücklicherweise konnte Office-Partner die Switches dann doch noch von einem anderen Vorlieferanten kurzfristig beziehen, so dass wir letzte Woche dann alle benötigte Hardware hatten. An dieser Stelle auch ein herzliches Dankeschön an Herrn Wittneven von Office-Partner für seinen Einsatz.

STARFACE TelefonanlageFür den neuen Telefon-/DSL-Anschluss hatten wir uns für Vodafone entschieden. Ausschlaggebend war nicht nur der im Vergleich zur Telekom deutlich niedrigere Preis bei den Geschäftskunden-Angeboten, sondern auch die Tatsache, dass uns Vodafone DSL-6000 anbieten konnte, während bei der Telekom nur DSL-3000 möglich war.

Heute morgen war dann schließlich der Telekom-Techniker da um die Leitung zu schalten. Über den Service der Telekom wird ja gerne gelästert, insbesondere wenn es um die Schaltung von Leitungen für Mitbewerber geht. In unserem Fall war der Telekom-Techniker aber nicht nur sehr pünktlich sondern auch ausgesprochen freundlich und kompetent.

Da die neue Telefonanlage über einen ISDN-Anlagenanschluss verfügt, habe wir jetzt endlich auch die Möglichkeit flexibel Durchwahlen für verschiedene Zwecke festzulegen. Das ist schon sehr bequem im Vergleich zum ISDN-Mehrgeräteanschluss, den wir vorher hatten. Leider haben sich dadurch unsere Telefonnummern geändert, aber mittelfristig wird sich der Aufwand in der Umstellungsphase sicherlich auszahlen.

Besonders gut gefällt mir die Möglichkeit der STARFACE-Telefonanlage eigene Module in einer speziellen Skriptsprache zu schreiben. Als jemand, der auch gerne mal selbst etwas bastelt, habe ich damit die Möglichkeit nahezu beliebige Funktionen in der Anlage selbst zu implementieren. Bei anderen Anlagen müssten wir hingegen teure Zusatzmodule vom Hersteller kaufen, insofern für die benötigte Funktion überhaupt Module verfügbar wären. Ein erstes Modul habe ich bereits entworfen, dazu werden ich aber noch in einigen Tagen etwas schreiben.

Zusammenfassend kann ich sagen, dass ich mit der jetzt gefundenen Lösung sehr zufrieden bin, und glaube, dass sich die vielen Stunden, die ich in Auswahl, Organisation und Einrichtung investiert habe, gelohnt haben.

Categories: IT

Neues Spielzeug II

Mehr PaketeIm Laufe der letzten zwei Wochen sind diverse weitere Pakete eingetroffen. Heute ist das letzte Paket gekommen (diese Artikel zu besorgen hat sich als schwieriger als erwartet erwiesen).

Damit haben wir jetzt alle benötigte Hardware und warten nur noch auf einen Dienstleister. Wenn alles glatt läuft, ist es am 31. August soweit, und dann wird auch verraten, was sich in den Kartons befunden hat und wofür wir die ganzen Sachen brauchen.

Als kleine Anregung zum Grübeln gibt es hier noch eine Information zum Foto von vor zwei Wochen: Diese Kartons habe ich alle in der Stephanienstraße in Karlsruhe abgeholt. :-)

Categories: IT

Neues Spielzeug I

KartonsGestern habe ich in Karlsruhe mehrere Kartons abgeholt. Was sich daran befindet, wird allerdings erst in einigen Wochen verraten. :-)

Categories: IT

KVM and Graceful Shutdown on Ubuntu

For quite some time, I have been trying to figure out, how to gracefully shutdown the KVM-based virtual machines running on a Ubuntu 10.04 LTS (Lucid Lynx) host system. This problem consists of two parts: First you have to make the virtual machines support the shutdown event from libvirt and second you have to call the shutdown action for each virtual machine on system shutdown.

The first part is very easy for Linux VMs and also not too hard for Windows VMs. I described the necessary steps in my wiki

The seconds part is harder to accomplish: On Ubuntu 8.04 LTS (Hardy Heron) I just modified the /etc/init.d/libvirt-bin script to call a Python script in the stop action. This solution was not perfect, as it meant that the virtual machines were also shutdown, when libvirtd was just restarted, however it was a quick and easy solution.

For Ubuntu 10.04, the init script has been converted to an Upstart job. So the easiest way was to create a upstart job that is starting on the stopping libvirt-bin event. However, this did not solve the problem, because the system powered off or rebooted before the shutdown of the virtual machines was finished. As it turns out, Ubuntu 10.04 uses an odd combination of Upstart jobs and traditional init scripts. This leads to a situation, where /etc/init.d/halt or /etc/init.d/reboot are called, before all upstart jobs have stopped, when one of the upstart jobs needs a significant amount of time to stop. This can be solved by adding an init script, than runs before the halt or reboot scripts and waits for the respective Upstart job to finish. In fact, it is best to run this script before the sendsigs script to avoid processes started by one of the upstart jobs to receive a SIGKILL.

I added the complete scripts and configuration files needed for this feature to my wiki. In fact, this solution also ensures, that the virtual machines are only shutdown if libvirt is stopped because of a runlevel change. Thus, the libvirt-bin package can now be upgraded without resulting in a restart of the VMs.

For me, automatically shutting down the virtual machines is very important. The KVM hosts I manage are connected to an uninterruptible power supply with limited battery time. Although in the past years I remember only a single time, the host systems were shutdown because the battery was nearly empty (most power interrupts are very short), I want to make sure that all virtual machines are in a safe, consistent state, when the power finally goes off. So I hope that the scripts in the wiki are also helpful to other people, having the same problem.

Problems when Upgrading to GRUB 2

Yesterday, I upgraded the last systems, which where still running on GRUB Legacy (GRUB 1) to GRUB 2 (the grub-pc package on Ubuntu).

On one of the systems, I experienced the problem, that upgrade-from-grub-legacy could not install GRUB. When I tried to install GRUB manully using grub-install, I got a strange error message:

/usr/sbin/grub-setup: warn: Your embedding area is unusually small.  core.img won't fit in it..
/usr/sbin/grub-setup: warn: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and its use is discouraged..
/usr/sbin/grub-setup: error: if you really want blocklists, use --force.

It took me some time to figure out, that this system had an unusual disk geometry, resulting in not enough space being available before the start of the first partition. The output of fdisk -lu /dev/sda looked like this:

Disk /dev/sda: 320.1 GB, 320071884800 bytes
64 heads, 32 sectors/track, 305244 cylinders, total 625140400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0009153c

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1              32      585727      292848   83  Linux
/dev/sda2          585728   625139711   312276992    5  Extended
/dev/sda5          585760   215429119   107421680   8e  Linux LVM
/dev/sda6       215429152   430272511   107421680   8e  Linux LVM
/dev/sda7       430272544   625139711    97433584   8e  Linux LVM

Usually, the first partition starts at sector 63 (for systems installed more recently, 2048 is also common), but for this system it started at sector 32. I guess that this was cause by the strange geometry, which did not specify the usual 255 heads and 63 sectors/track. I am not sure, whether the disks (two Western Digital 320 GB drives) really have this strange geometry, or the RAID-Controller, a 3ware Escalade 8006-2LP, reports a different geometry. However, for sure the first partition being to close to the start of the disk was the cause of the problem with GRUB.

Unfortunately, I could not move the partition using parted and gparted does not allow to specify the start and end of a partition in sectors, but only in MiB (and only supports aligning to MiB or cylinders, which did not help considering the odd geometry). Therefore I decided to delete the partition (after all it was only the boot partition and its content could easily be stored on the root partition) and create a new partition using fdisk.

In fact, when (re-)creating the partition, fdisk suggested to start the partition at sector 2048, which I accepted. No surprise, after that change GRUB could be installed to the MBR without any problems.

The good thing about this problem was, that the time I invested to get a high-availability setup running for most important services, finally paid of. I for sure would have been less relaxed, while figuring out and fixing the GRUB problem, when the services usually running on this machine would have been offline.

Speicherprobleme lösen mit Valgrind

Beim Versuch EDM auf einem openSUSE-11.2-System (x86_64) zum Laufen zu bekommen, traten in bestimmten Fällen immer wieder Speicherzugriffsfehler auf. Nun ist es so, dass ich wirklich kein Freund von RPM-basierten Distributionen im allgemeinen und SUSE im speziellen bin. Aber es wäre zu einfach gewesen dieses Problem auf die Distribution zu schieben. Eine Suche im EPICS-Mailinglisten-Archiv ergab dann auch relativ schnell, dass dieses Problem auch schon auf anderen 64-Bit-Systemen aufgetreten war.

Zunächst untersuchte ich das Problem also mit dem GDB. Damit konnte ich aber lediglich herausfinden, dass der Fehler beim "delete[]" eines Arrays auftrat. Mit etwas Debug-Code konnte ich schnell feststellen, dass es (trotz entsprechender Meldungen der glibc) kein Double-Free-Problem war, kam aber ansonsten nicht wirklich weiter.

Dann entdeckte ich das Werkzeug Valgrind. Valgrind wurde speziell entwickelt um Speicher-Probleme, wie Buffer-Overflows und Memory-Leaks, in C/C++-Programmen zu finden. Tatsächlich konnte ich damit sehr schnell herausfinden, dass ein Array über die Grenzen hinweg beschrieben wurde.

Die Ursache war dann auch schnell gefunden. Der Code, der den Speicher für den Array reserviert, hatte die Größe verschiedener Datentypen fest kodiert. Die Annahme, dass ein "long"-Wert 4 Bytes hat, ist allerdings nur auf 32-Bit-Systemen richtig. Auf 64-Bit-Systemen kann ein "long" 8 Bytes lang sein.Nachdem die festen Größen durch den "sizeof"-Operator ersetzt wurden, verschwand dann auch der Speicherzugriffsfehler.

Valgrind kann also ein wertvolles Werkzeug bei der Lösung von Speicherproblem in C- oder C++-Code sein, deren Ursache andernfalls nur schwer zu finden wäre.

Merkwürdige Probleme nach Ubuntu-Update

Nachdem ich auf einem Ubuntu 10.04 LTS (Lucid Lynx) System ein reguläres System-Update durchgeführt hatte, welches auch ein Update von libvirt enthielt, konnte ich merkwürdigerweise eine bestimmte VM nicht mehr starten.

Die ausgegebene Meldung

error: Failed to start domain mydomain
error: monitor socket did not show up.: Connection refused
war leider auch nicht besonders aussagekräftig. In den Logfiles fanden sich auch keine weiteren Informationen und libvirtd mit der Option "-v" zu starten brachte mich auch nicht weiter.

Nach viel herumprobieren stellte sich letztendlich heraus, dass die folgenden Zeilen in der Domain-Konfiguration für das Problem verantwortlich waren:

    <disk type='block' device='cdrom'>
      <source dev='/dev/cdrom'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
    </disk>

Warum genau die gleiche Konfiguration vor dem Update noch funktioniert hat, kann ich auch nicht sagen. Da ich für die betroffene VM das CD-Laufwerk sowieso nicht benötige, habe ich die Zeilen einfach nur entfernt.

Squid 3.1 on Ubuntu 8.04 Hardy Heron

Squid 3.1 introduced support for IPv6, so there is a very good reason for an upgrade from Squid 3.0.

Unfortunately, there is no Ubuntu package for this version, not even in the upcoming Ubuntu release 10.04 Lucid Lynx.

For a while, I have been using the Debian experimental packages of Squid 3.1.0, compiled from source on Ubuntu 8.04. However, now a stable version of Squid 3.1 has been released, but there is no Debian package for Squid 3.1.1.

Therefore, I used the Debian package for Squid 3.1.0.14 as the base for building a package for Squid 3.1.1. I have published this package in source as well as built for Ubuntu 8.04 on amd64. There you can also find a package for libcap2, which is required by Squid 3.1 but not included in Ubuntu 8.04.

Of course, there is no kind of warranty for this packages, so use them at your own risk.

Spring IDE for Eclipse breaks JDT weaving

I experiences a problem, when trying to use Scala IDE for Eclipse and Spring IDE at the same time in Eclipse 3.5 Galileo on Mac OS X:

Scala IDE need JDT weaving support, however the JDT weaving seems to be broken by Spring IDE. If Spring IDE is installed and JDT Weaving is enabled, on startup the following problem occurrs:

[org.eclipse.equinox.weaving.hook] info adding AspectJ hooks ...
[org.eclipse.equinox.weaving.aspectj] info Starting AspectJ weaving service ...
21.03.2010 18:29:10 org.aspectj.weaver.tools.Jdk14Trace error
SCHWERWIEGEND: register definition failed
java.lang.ClassCastException: org.aspectj.weaver.loadtime.definition.Definition cannot be cast to org.aspectj.weaver.loadtime.definition.Definition
    at ...

This problem seems to be related to the fact that the com.springsource.org.aspectj.weaver_1.6.5.RELEASE.jar plugin brings a second class file for org.aspectj.weaver.loadtime.definition.Definition in addition to the class file already shipped with Eclipse. This probably cause the ClassCastException on startup.

By uninstalling the Spring IDE features, this problem can be resolved and JDT Weaving can be enabled.

Schneller Kundendienst

Am Samstag hatte ich auf einem Server, der bei Hetzner steht, ein Kernel-Update vorgenommen.

Nach dem obligatorischen Neustart konnte ich das System allerdings nicht mehr erreichen. Auch eine Untersuchung im Rettungssystem brachte keine neuen Erkenntnisse zu Tage. Insbesondere funktionierte auch ein Start mit der alten Kernel-Version nicht mehr.

Daher erstellte ich bei Hetzner ein Ticket mit der Bitte, mir eine Remote-Konsole zur Verfügung zu stellen. Tatsächlich erhielt ich nach rund 30 Minuten eine Antwort mit den Zugangsdaten für die Konsole.

Mit Hilfe der Konsole konnte ich schnell feststellen, dass GRUB erst gar nicht richtig gestartet wurde.

Dieses Problem ließ sich dann relativ schnell aus der GRUB-Shell mit Hilfe von

device (hd0) /dev/sda
root (hd0,1)
setup(hd0)
device (hd0) /dev/sdb
root (hd0,1)
setup(hd0)

lösen.

Ich möchte an dieser Stelle die schnelle Unterstützung von Hetzner hervorheben. Ohne die Remote-Konsole wäre ich wahrscheinlich nicht auf die Idee gekommen, dass GRUB im MBR beschädigt sein könnte.

Categories: IT