Gentoo: Abbruch beim Update auf Qemu 2.x bei Nutzung von libvirt

Das letzte world-Update eines Gentoo-Servers war etwas aufwändiger als üblich: Die betroffene Kiste kümmert sich unter anderem per libvirt und qemu um Virtualisierung, letzteres sollte mit dem Update von einer 1.5.x-Version auf eine 2.x aktualisiert werden. Mit der neuen Qemu-Version haben sich jedoch einige wichtige Dinge geändert, so gibt es nun keine zentrale Datei zum Start von VMs mehr. Auch die KVM-Unterstützung ist nicht länger als eigener Wrapper vonhanden. Statt einem bösen Erwachen fängt glücklicherweise das Update – bei Verwendung von Libvirt – eine veraltete Konfiguration ab und führt zu einer Fehlermeldung:

* The kvm/qemu-kvm wrappers no longer exist, but your libvirt
* instances are still pointing to it. Please update your
* configs in /etc/libvirt/qemu/ to use the -enable-kvm flag
* and the right system binary (e.g. qemu-system-x86_64).
* ERROR: app-emulation/qemu-2.0.0::gentoo failed (pretend phase):
* update your virt configs to not use qemu-kvm
*
* Call stack:
* ebuild.sh, line 93: Called pkg_pretend
* qemu-2.0.0.ebuild, line 225: Called die
* The specific snippet of code:
* die „update your virt configs to not use qemu-kvm“

Schauen wir mal nach – in /etc/libvirt/qemu liegt für jede VM eine XML-Datei mit allen Einstellungen, unter anderem findet sich in jeder der Dateien ein Eintrag <emulator>/usr/bin/qemu-kvm</emulator>, welcher mit dem „neuen“ Pfad des Emulators, also „qemu-system-x86_64“ für einen 64Bit-x86-Client, ersetzt werden muss. Die KVM-Erweiterung muss man hierbei nicht beachten, Libvirt gibt die nötigen Argumente zum aktivieren des Virtualisierungsmodus automatisch mit. Also Texteditor auf und ran ans Editieren, richtig? Nunja, das geht bei 2 oder 3 VMs, ich hab da aber ein paar mehr, also muss folgender Einzeiler herhalten:

for i in /etc/libvirt/qemu/*.xml ;do mv "$i" "$i.backup" && sed 's/\/usr\/bin\/qemu-kvm/\/usr\/bin\/qemu-system-x86_64/' "$i.backup" > "$i" ;done

Hinweis: Der Einzeiler lässt die Originaldateien als Backup zurück – wenn alles funktioniert hat können die Dateien mit der Endung *.backup entfernt werden.

Nachdem die XML-Dateien angepasst wurden lässt sich das Qemu-Update wie gewohnt installieren.

BitNotice #42 – GPIO unter OpenWRT an Carambola

BitNotice #42 - GPIO unter OpenWRT an Carambola

(5.8 MB) 00:05:15

2014-06-15 21:20 🛈

Auf vielen Routern lassen sich so genannte GPIOs (General-purpose Input/Output Pins) nutzen. Hersteller verwenden sie um LEDs zu steuern oder Taster abzufragen, doch unter OpenWRT können wir sie auch selbst steuern. Mit wenigen „echo“-Befehlen lässt sich so eine eigene LED steuern… Oder entsprechend über ein Relais ganze Steckdosen.

Gezeigte Referenz: http://k.japko.eu/wl-740n-w1.html

Renicetree – renice a process including it’s children

./configure && make – aw crap.

Immer wieder passiert es mir, dass ich längere Prozesse starte ohne ein „nice“ davor zu setzen. Ergebnis: Der Kompiliervorgang o.Ä. hat die selbe Priorität wie alles andere und zieht die Reaktionsfähigkeit des PC deutlich in den Keller. Üblicherweise kann man nun mir „renice“ den Prozess nachträglich herunterstufen, jedoch klappt das gerade bei Kompiliervorgängen nicht sonderlich gut: renice ändert lediglich die Priorität des angegebenen Prozesses, hierdurch werden auch neu erstellte Kindprozesse erfasst, bereits laufende jedoch nicht. Da Make teils sehr verschachtelt arbeitet und Jobprozessoren zur Verteilung der Aufträge nutzt muss man z.T. einige Prozesse ändern um das System wieder lauffähig zu machen. Hier z.B. der make-Baum eines OpenWRT:

make(25087)->sh(25209)->make(25211)-|->bash(25214)->make(25237)
                                    |->bash(25229)->make(25240)

Da ich keine Lust mehr hatte ständig die nötigen IDs per Hand zu suchen ist renicetree entstanden. Es sucht alle zu einer PID gehörigen Kindprozesse und setzt auch für diese ein renice ab. Um halbwegs kompatibel zu bleiben ist die Software in einer Bash-Syntax entstanden.

Da ich keinerlei erweiterte Ahnung von Shell-Scripting habe dürfte der Code bei Profis vermutlich Haarraufen verursachen, aber er läuft immerhin – auch wenn mir die Eigenheiten der Bash gewaltig auf den Nerv gingen (Keine mehrdimensionalen Arrays, keine indirekte Variabelreferenzen, etc). Script gibt’s wie immer auf Github. Use at your own risk.


Update: Ich wurde darauf hingewiesen, dass renice über die Process Group ID (-g) eine ähnliche Funktion bereits bieten würde. Das kann ich – zumindest für GUI-Betrieb – nicht bestätigen, hier hat z.B. alles unter meinem Terminal-Emulator die selbe Gruppen-ID, also auch Prozesse, welche in einem anderen Tab gestartet sind.

BitBastelei #101 – DS18B20 Temperatursensoren an RasberryPi

BitBastelei #101 - DS18B20 Temperatursensoren an RasberryPi

(35.6 MB) 00:10:21

2014-06-15 19:40 🛈

DS18B20 sind günstige, sehr einfach zu verwendende und genaue (±0,5°C) Temperatursensoren. Mit nur einem Widerstand lassen sich gleich mehrere an einen Raspberry Pi anschließen.

Datenblatt: http://www.maximintegrated.com/en/products/analog/sensors-and-sensor-interface/DS18B20.html
Tutorial bei RaspiProjekt.de: https://www.raspiprojekt.de/anleitungen/schaltungen/9-1wire-mit-temperatursensor-ds18b20.html

BitNotice #41 – „Beast Z380“ Tacker/Nagler

BitNotice #41 - "Beast Z380" Tacker/Nagler

(36.5 MB) 00:05:25

2014-06-15 18:00 🛈

In einer der letzten Folgen hatte ich gezeigt wie man LED-Streifen mittels Tacker an die Wand bekommt – nun, der gezeigte war nicht mir, also ist es offenbar Zeit meinen Werkzeugbestand zu ergänzen.

Von mir gekaufter Artikel: http://www.ebay.de/itm/201077107390

BitNotice #40 – Carambola Unbrick via UBoot/RS232/TFTP

BitNotice #40 - Carambola Unbrick via UBoot/RS232/TFTP

(5.1 MB) 00:03:06

2014-06-15 16:20 🛈

Beim Basteln mit Firmware gibt es ein großes Risiko: Eine falsche Eingabe und das System reagiert nicht mehr. Ein solches funktionsloses und somit nicht mehr brauchbares Gerät nennt man „Brick„, also Ziegelstein. Doch so lange der Bootloader noch erreichbar ist lässt sich vielfach noch etwas retten.

Hier wird ein 8Devices Carambola bzw. dessen Bootloader „UBoot“ mittels serieller Schnittstelle angewiesen eine neue Firmware per TFTP vom Rechner zu laden.

Ranttime #7 – (Anti-)Cloud-Computing für Einsteiger

Die Cloud macht das leben einfacher – dies wird einem von so ziemlich jeder Werbung suggeriert, doch vielfach werden die Risiken verschwiegen. Nicht so bei mir: Hier wird die (leicht überspitzte) Geschichte von Geschäftsmann Bernd und seinem Ausflug in die Cloud erklärt.

BitNotice #38 – Noch mehr LED-Streifen

BitNotice #38 - Noch mehr LED-Streifen

(40.9 MB) 00:06:51

2014-06-15 11:20 🛈

Fast alles ist schon LED, jetzt kommen die letzten Glühbirnen in den Abstellräumen dran. Billigste Lösung: LED-Streifen. Gewinnt sicher keinen Schönheitspreis, durch das verteilte Licht gehören dunkle Ecken aber der Vergangenheit an.

Auktion von d-hellbringer: http://www.ebay.de/itm/181301078460

BitBastelei #100 – OpenWRT auf Carambola

BitBastelei #100 - OpenWRT auf Carambola

(24.5 MB) 00:16:11

2014-06-15 09:40 🛈

Das „Carambola“-Board der Firma 8Devices (http://8devices.com/carambola) ist eine Entwicklungsplattform für Netgeräte. Hardwaretechnisch ist sie an Routern orientiert und ist entsprechend mit 2 LAN-Ports und 802.11b/g/n-WLAN ausgestattet. Leider hat die Original-Software seit längerem kein Update erhalten, aber der offizielle OpenWRT-Zweig (http://wiki.openwrt.org/doc/howto/buildroot.exigence) sollte Abhilfe schaffen.

Der gezeigte Kompiliervorgang kann für nahezu alle von OpenWRT unterstützten Router verwendet werden, es muss lediglich in der Konfiguration das Richtige CPU-/Routermodell angegeben werden.

Nerd Inside