lunedì 19 marzo 2012

Ma come mi piace libvirt...

O.K, fino a poco tempo fa creavo piccoli danni (per valori abbastanza grandi di "piccoli") come sistemista in ambiente cloud ed è chiaro che con quel calzino in testa libvirt mi piacesse.

Ora sono tornato a fare lo sviluppatore, e come primo task sto cercando di ottenere un editor per Spagic Studio (un Eclipse personalizzato) partendo da oryx (documentato meglio di quello che sembra, il supporto invece...).

Problemonzio: Spagic Studio va ancora portato decentemente sotto GNU/Linux, non gira sotto una Debian testing a 64 bit e anche coi 32 bit ci sono problemi, meglio usare la VM (b)Ubuntu già pronta, bene o male il portatile è un i5 con 4G di ram.

Siccome sono pigro e voglio automatizzare il collegarmi alla VM, avviare Spagic Studio, ho deciso di fare uno script da agganciare anche al menu di Debian. Parto con lo script che, sfruttando l'autenticazione con chiavi senza password, mi avvia Spagic Studio sulla VM.

Ma prima deve verificare che la VM ci sia, e questo si può fare usando "virsh list". Ora dato che io lavoro con il mio utente e non con root il comando diventa "virsh -c qemu:///system" (si, uso qemu/kvm come hypervisor) ed il mio utente deve poter avere accesso in lettura sui socket UNIX che libvirt crea in /var/run/libvirt.

La cosa più semplice da fare è aggiungere il mio utente agli utenti del gruppo libvirt con addgroup (addgroup saint libvirt). Piccolo problema: la mia shell di login non sa che mi hanno assegnato questo nuovo gruppo, quindi fintanto che non faccio un logoff/logon mi tocca usare il comand "newgrp libvirt" per attivare l'appartenenza a questo gruppo.

Il comando però lancia una nuova shell invece che attuare i cambiamenti nella shell in cui è stato lanciato, quindi se voglio metterlo in uno script o gli faccio lanciare un secondo script o uso un here document (la pagina italiana manca al 19 Marzo 2012).

Siccome sono molto pigro e avviare un qualsiasi programma (compresa una VM) è una cosa meccanica ed automatizzabile, mi sono stufato di andare ad avviare a mano la VM, voglio invece che lo script che lo script non si limiti a dire "la VM non c'è" ed esca, ma la lanci usando il medesimo virsh ("virsh start nome-del-dominio").

Eccolo qui il kluge finale in tutto il suo orrore. Qualche diavoleria automagica -legata all'uso di newgrp- mi ha costretto a usare un ramo else ed a ripetere istruzini che avrei potuto raccogliere a fattor comune, ma funziona e per ora va bene così:


#!/bin/bash

# accertiamoci di essere nel gruppo libvirt
newgrp libvirt <<EOF
if virsh -c qemu:///system list | grep bubuntuspagico | grep running 2> /dev/null > /dev/null
then
ssh -X bubuntu "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/lib/jdk1.6.0_25/bin;JAVA_HOME=/usr/local/lib/jdk1.6.0_25;export PATH JAVA_HOME;(cd spagic-studio-linux-3.4.0-32Bit/spagic-studio/; ./eclipse &)"
else
if ! virsh -c qemu:///system start bubuntuspagico > /dev/null 2> /dev/null
then
zenity --error --text "Bubuntu non è attiva" --title "Spagic Studio@bubuntu" --width 300
fi
while ! ssh bubuntu ls > /dev/null 2> /dev/null
do
sleep 1
/bin/echo -e ".\c"
done
ssh -X bubuntu "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/lib/jdk1.6.0_25/bin;JAVA_HOME=/usr/local/lib/jdk1.6.0_25;export PATH JAVA_HOME;(cd spagic-studio-linux-3.4.0-32Bit/spagic-studio/; ./eclipse &)"
fi
EOF


Al prossimo reboot e logon tolglierò l'uso dello here document che diverrà inutile.

Nessun commento:

Posta un commento