Network management with LXD and OpenVSwitch in Ubuntu 18.04

Just some quick notes about my homelab setup of LXD 3.0 with OpenVSwitch (OVS) in Ubuntu 18.04.

Why use OVS in a small homelab environment? Because it’s the most used SDN stack in the world, and you should learn it instead of relying on the traditional Linux bridges, especially if you are into virtualization/containerization or networking stuff.
Ever heard of whitebox switches? They are going to be the dominant platform in the hyperscaler datacenters… and maybe, also in the enterprise market.

A big warning: this is not a “best practices” configuration, the one with overlay switch and tunnel switch as shown in this great article, but I’m still working on that and this simpler one should be ok for some non-enterprise playground.

As of today (today is the first day of Ubuntu 18.04!) Netplan does not directly support OVS, so don’t even try to use it; I hope they will fix it soon, but for now just don’t configure your OVS NIC with Netplan and please fallback to traditional configuration scripts. Or even to manual startup, they are servers and they are meant to be always on anyway… or not? (Thinking of MaaS)

I strongly suggest you to use a machine with multiple NICs, it will make anything a lot easier because you would not be kicked away from the network when adding your only NIC to the OVS bridge.

Just to begin, install OVS with apt install openvswitch-common openvswitch-switch and check the status of ovs-vswitchd.service and  ovsdb-server.service. Don’t forget to enable the ability of kernel to forward packets with the usual echo “net.ipv4.ip_forward = 1” >> /etc/sysctl.conf, followed by sysctl -p /etc/sysctl.conf to reload the config.

After that, do not create any switch in the initial lxd init configuration. Just create an OVS switch in LXD with the command lxc network create ovs-1 bridge.driver=openvswitch. It will automatically be added both to the LXD network profiles and to the OVS configuration, that you can check with ovs-vsctl show. That’s cool! Now it’s time to bind the physical interface to our ovs-1 switch; remember that this will KILL any connection established on the NIC that you choose, so be careful.

After choosing your NIC to bind (list them with the ip link command), type ovs-vsctl add-port ovs-1 eno4; eno4 is my fourth NIC, of course. Now it’s time to apply the network profile we just created to the default profile (but you can choose another one, of course) with lxc network attach-profile ovs-1 default eth0. This way, the first NIC of your LXD container will be a veth port on the OVS switch ovs-1. Start a container in LXD with lxc launch ubuntu:18.04 and check if you got everything right with ovs-ofctl show ovs-1; some veth-stuff should appear. Now, log into your container and play with it’s network configuration: it should appear like it’s on the same L2 switch of the physical NIC eno4.

What you can do now? Easy VLAN tagging, for example: ovs-vsctl set port vethM3WY7X tag=200. Don’t forget to set the switch port physically connected with eno4 as a trunk for the VLAN tag that you choose.
You can also create NIC aliases and bind different OVS switches with different tags to the in the very same NIC, but I have not experimented that yet.

Paranoia, XenServer and libvirt: Full Disk Encryption unlocking from virtual serial TTY

Everybody wants encryption today; encryption of network traffic, mainly.
But what about the encryption of data-at-rest? I mean, what if someone got physical access to your storage?
Of course you can protect specific folders with your tools of choice, but there’s always a chance that some file got saved outside your security fence by a zealous program, or just forgotten by you on the desktop… here comes the Full Disk Encryption (shortly, FDE) to the rescue!

Maybe you are  already using it without being aware of that… if BitLocker on Windows and FileVault on Mac OS X sound familiar, you are on track.

The penguin within

But, what about our beloved Linux machines?
In the Linux world, FDE is mainly achieved through LUKS; this software is capable of encrypting your disks with AESXTS using both passphrases and key files, usually stored in an USB drive and plugged on-demand.

I won’t tell you how to setup LUKS in your machine because you should better refer to the installation manual of your distro.

If you plan to use it with a workstation, you’ll be set already manually inserting the password or the USB drive on every boot.

And my VMs?

But, what if you want to use LUKS in a virtual environment, in a hosted VM?

I won’t talk about acrobatic USB-passthrough, focusing instead on the passphrase method.

Of  course, you can manually type it in your preferred hypervisor VM-console; but because having a very long and random passphrase is of utmost importance, writing a 40 characters long on every server reboot can be extremely tedious and can easily bring to bad habits, like short passphrases, avoiding necessary update-reboot cycles or dumping the LUKS thing at all.

Meeting the serial (killer?)

The best way of input long keys would be having it stored in encrypted keyrings with the possibility to copy-and-paste them into the VM prompt as needed, but the graphical consoles AFAIK don’t support input methods like that, and of course we cannot use SSH&co. because there isn’t any service running in the VM before boot.

There’s another way to access the VM at “physical” level, at least with hypervisors like KVM and XEN: the glorious and vintage serial console!

Maybe you have already heard of it for router configuration; shortly, it was the leading way of talking to an operating system out-of-band before the video output we use today.

Any Linux distribution provide this capability; to enable it in a CentOS 7 guest, you just need to modify your /etc/default/grub to make it looks like this:


GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0,115200"
GRUB_CMDLINE_LINUX="!/root rd.luks.uuid=DONT_CHANGE_IT!!/s
wap rhgb"

and rebuild your initrd with grub2-mkconfig -o /boot/grub2/grub.cfg.
Take a snapshot before doing any modification to your grub.cfg, you have been warned!

Now reboot your system and everything should work as before, except for…

Practical unlocking

Yes, now there is an active serial interface that can be used to access your VM from the hypervisor, in a completely textually way.
Really, you can stop typing that super-long random string one-character-at-time right now!

The thing is, how to access it from the virtualization host?

  • If you are using libvirt-virsh framework, you are lucky: just type virsh console VMname and you are set! The exit-escape is CTRL-].
  • If you are on XenServer with XAPI, use the xl console VMname console (same escape). Dump that xe console command, it won’t help you if you are targeting an HVM guest; it is very likely that you are on HVM, you should now if you still are on PV-mode. The xl command solution is undocumented in the XenServer doc, and it’s the actual reason why I wrote this post. 

Oh, XL is also the new default toolstack for XEN management!

Now you should be set and smooth, go and enjoy your very-long and very-random LUKS passphrases!

Devo comprare un computer, mi dai un consiglio?

Mi vengono fatte spesso delle domande da amici e conoscenti riguardo al settore dell’informatica, spesso anche stravaganti.
Dovendo fare una classifica, la richiesta più comune in assoluto è:

Devo comprare un laptop/desktop per lavorare, mi dai un consiglio tu che sei un esperto?

Richiesta quasi sempre seguita da link a volantini pubblicitari che promuovono il modello X in offerta nella catena Y.

Di solito, si tratta di infami accrocchi consumer con un ciclo di vita che non supera i due anni, plastiche di qualità infima, sistema preinstallato pieno di bloatware e garanzia-assistenza striminzite.
Nonché, naturalmente, riparabilità e possibilità di reperire ricambi che si avvicina asintoticamente a zero non appena il modello esce di produzione.

Signora mia, cosa vuole che le dica. Really.

Qualsiasi consiglio io possa dare a riguardo, è spesso preceduto da slogan apodittici come:

Eh, ma non fanno più i computer di una volta, che duravano una vita!

Non è vero, è solo che non li trovi più al centro commerciale in super-offerta… o meglio, lì non li hai MAI trovati.
Una macchina che dura più di un paio d’anni, con costruzione e caratteristiche industry standard, è una macchina professionale.

E le macchine professionali, sono sempre state vendute per altri canali.

È vero, si è verificata una anomalia del mercato (leggi, boom dell’informatica) per la quale per diversi anni la buonissima parte dei computer disponibili sul mercato era costituita da macchine di discreto livello (IBM, Apple, NEC), che non a caso costavano parecchio ed erano pensate per professionisti… anche se poi venivano acquistate dalla famiglia media, sulla spinta della moda e di un marketing che ha cavalcato l’onda.

Un Apple Lisa 2, che nel 1984 costava circa 4000$. Chiedetevi perché nessun Apple moderno si chiami “Lisa”.

Sorpresa: questa categoria di macchine esiste ancora, ma sopratutto è diventata parecchio più conveniente rispetto a qualche anno fa, grazie ai grandi numeri dietro l’industria informatica.

Ma andiamo con ordine…

Linee guida

Vuoi fare un acquisto oculato?

Bene, la prima cosa che devi sapere è che, senza praticamente alcuna eccezione (a parte casi estremamente di nicchia che non ti riguardano, altrimenti non cercheresti un consiglio), ti converrà sempre acquistare il prodotto di un vendor Tier-1, ovvero quelli che hanno il 90% del market share e che progettano/producono ciò che vendono; i vendor Tier-1 sono HP, Dell, Lenovo, Fujitsu, Apple.

Acer, Asus ed MSI, stanno un gradino più in basso.

No, nessun assemblatore (neanche e sopratutto te stesso) può garantirti i livelli di affidabilità, integrazione delle componenti, funzionalità speciali e garanzia offerti da un produttore di primo piano.



Se hai problemi a comprendere come funzioni l’economia di scala, non posso aiutarti.

Dimmi che serie vuoi, e ti dirò cs fai? Cn ki 6 xké nn risp??

I produttori di primo piano, hanno generalmente tre linee di prodotti laptop/desktop:

  • Una serie consumer/economica, dove la variabile più importante è il prezzo d’acquisto;
  • Una serie business, dove si tende a minimizzare il TCO;
  • Una serie orientata alle performance pure.

Naturalmente, per la stragrande maggioranza degli impieghi generici, sarà da preferire la serie che minimizza il TCO.


Ok, se sai già cos’è il TCO hai capito dove voglio andare a parare, puoi saltare a piè pari il paragrafo.

Altrimenti: read on.

Il TCO, Total Cost of Ownership o “costo totale di proprietà” è una misura di quanto costi “in totale” possedere ed utilizzare un bene, includendo tutte le spese (materiali o meno) alle quali si andrà incontro durante il ciclo di vita dell’oggetto.

Ad esempio, a parità degli altri fattori, un computer che ti faccia smadonnare perché devi riavviarlo ogni sei ore , ha un TCO più alto rispetto ad uno che funziona e basta, perché dovrai spendere delle ore/uomo per attendere che riparta.

Un altro fattore determinante nel computo del TCO potrebbe essere l’affidabilità intrinseca dei componenti utilizzati, oppure la possibilità di avere velocemente e in modo gratuito dei ricambi. Oppure ancora, la compatibilità con un software particolare, un centro assistenza in zona, delle caratteristiche tecniche che facciano risparmiare tempo.

Continuo a non capire. Mannaggia.

In soldoni, le macchine business/TCO-oriented solitamente prevedono un investimento iniziale maggiore rispetto alla controparte consumer, ma la spesa complessiva da sostenere durante il ciclo di vita della macchina è minore.
Acquistarle costa di più, ma poi si ripagano.

Insomma, alla lunga convengono. Ecco.


Quali sarebbero queste famigerate macchine business/TCO-oriented? Facciamo un po’ di esempi, soffermandoci ad esempio sui laptop (il settore trainante del mercato):

  • Lenovo ThinkPad;
  • HP Zbook / EliteBook;
  • Dell Latitude / XPS (gli ultimi XPS sono Precision senza GPU discreta).
Cinque tasti fisici, touchpad e TrackPoint (il pallino rosso in alto a destra). Ditemi ancora che voi col portatile usate il mouse esterno.

Cosa hanno in comune queste alternative?

  • Garanzia di almeno 3 anni on-site, spesso espandibile. On-site, vuol dire che aprite un ticket online o telefonicamente, e dopo al più quattro giorni un tecnico recapita e installa fisicamente la parte di ricambio a casa vostra;
  • Espandibilità e possibilità di sostituire storage e RAM senza rendere nulla la garanzia. Disponibilità di ricambi a lungo termine (anche dieci anni);
  • Costruzione, design delle componenti e robustezza anni luce qualsiasi portatile consumer;
  • Parecchie porte fisiche, anche legacy;
  • Buona compatibilità con sistemi Linux;
  • Dispositivi di puntamento avanzati (ah, la TrackPoint!), tastiere resistenti all’acqua, lettori di impronte digitali, possibilità di gestione remota della macchina (vPro) e tante altre features enterprise-grade.

A questo c’è da aggiungere la personalissima considerazione che utilizzare un dispositivo di elevata qualità ripaghi in soddisfazione personale; qualcosa difficile da quantificare economicamente, ma sicuramente percepibile se questo si utilizza su base giornaliera.

L’elefante nella stanza / e il coccodrillo?

Vi starete chiedendo: perché citi la Apple, che ha di fatto una sola linea di prodotti? La Apple è un caso particolare: fino a qualche anno fa vendeva solamente macchine business-grade, affidabili e di solito ben costruite, nonché espandibili/riparabili con una discreta facilità.

Sì, costavano care ed erano superiori alla concorrenza semplicemente perché appartenevano ad un’altra catergoria.
Le ultime incarnazioni (fine 2016) sono dei gingilli consumer ben costruiti, ma che mancano di alcune caratteristiche fondamentali per poter rientrare nella denominazione, ad esempio, di business laptop.
Nomen omen.

So what?

In sintesi: per fare una buona scelta, selezionate sempre macchine business-grade; le aziende sono sempre molto più attente del consumatore al ritorno dell’investimento, quindi difficilmente troverete modelli poco convenienti o di bassa qualità cercando nelle giuste famiglie di prodotti.
Spesso è saggio partire con la minima configurazione che soddisfa i propri requisiti, e aggiungere via via componenti alla bisogna.

Ciò detto, a me piacciono parecchio i ThinkPad. Ma anche l’XPS13 non è affatto male.
Riguardo i desktop, la serie Z di HP è fantastica; per qualunque carico più grosso di quello che possano reggere queste macchine, userei comunque un server.

XenServer 7 software RAID with mail alert

Leggi questo articolo anche in italiano.

XenServer 7 is emerging as the reference implementation of the opensource hypervisor Xen, proving advanced features regarding storage, networking, HA and management; all packaged in a self-contained, enterprise-level bundle, often superior to VMware vSphere, HyperV and KVM, the other big players of the enterprise virtualization market.

It should also be noticed that Xen is the hypervisor of choice for the majority of public clouds (AWS and the others), is completely FLOSS  software and its XenServer declination is managed directly from the Linux Foundation (no CITRIX anymore), making it the de-facto standard solution for the bare metal opensource virtualization.

Powerful batteries included!

The software stack that surrounds the Xen kernel has made a giant leap thanks to the adoption of a modified CentOS 7 as the dom0 in XenServer 7.
The standard installation of XS already include every piece of software needed to completely skip an hardware RAID solution and adopt an enterprise-ready software RAID solution! As of today, MDADM is one of the few RAID solution that can manage NVMe RAID or other niche configurations; thanks to the modern CPU power, MDADM (especially with very big arrays) plays on the same ground of some ASICS-based controller.

Furthermore, software RAID enable the creation of array using non-branded disks, a strategic feature of XS7 in comparison to products like VMware, that at most permits the creation of a RAIN using paid add-ons like vSAN. If you have ever compared the price of branded HDD or SSD  (HP, IBM, Dell, ecc.) with the COTS ones, you know what I’m talking about.

Dive into MDADM

This is the to-do list you have to follow in order to build a software RAID that will warn you in the event of malfunction:

  • Creation on an MDADM array;
  • Configure SSMTP to send email warnings;
  • Test if email alerts are working;
  • Add the array as an SR to XS7.

MDADM is a very battle-tested piece of software; included in the Linux kernel since many years, has earned on the field its reputation of very stable and bug-free software; indeed it is used in big critical system (like the “big irons x86”) and in the majority of commercial NAS system (Synology, QNAP, Buffalo, ecc).

Because is already included in the standard installation on XS7, the creation of a RAID array is very simple, especially in the typical scenario in which you have installed the hypervisor in a USB drive that won’t be part of the array… as recommended by the best practices! I have spoke about that here (Warning, italian inside™! Let me know if you want to read it in english).

For instance, create a RAID 10 with the first four HDDs is as simple as

 mdadm --create /dev/md0 --run --level=10 --raid-devices=4 /dev/sd[a,b,c,d] 

To monitor the disk syncing, just do

 watch cat /proc/mdstat 

or the evergreen

 mdadm --detail /dev/md0

that will also give you various information about the status of the array.

Would you trust a system that does not warn you in the event of failure?

We are going to set the array monitoring; just to begin, copy the active array configuration in the config file of MDADM with

 mdadm --verbose --detail --scan >> /etc/mdadm.conf 

This will enable the array monitoring by the MDADM daemon.
Now, configure the SSMTP to send email warnings… just as an example, this configuration of /etc/ssmtp/ssmtp.conf is usable to send notification from a gmail address:

It’s important to set /etc/ssmtp/revaliases like that: 

Eventually, the MAILADDR and MAILFROM parameters from the last rows of /etc/mdadm.conf will need to be assigned to your sender and receiver addresses, so mdadm.conf will look like that:

ARRAY /dev/md0 level=raid10 num-devices=4 metadata=1.2 name=your_hostname:0 UUID=UUID_ARRAY
MAILADDR destination_mail@provider.sth

Don’t leave your chair without some testing!

Now that the configuration is completed, you need to do some checks; MDADM can send a test email with

 mdadm --monitor --scan --test --oneshot 

But, if you really want, you can put a disk in “failed” state (be aware of rebuilding times with big HDD) using

 mdadm --manage --set-faulty /dev/mdo /dev/sdb mdadm --manage /dev/md0 --add /dev/sdb 

You have to wait a little for the fail detection, as far as ten minutes, because the daemon is correctly “lazy” at recognizing the fail, even if it is simulated.

Now that the array is tested and ready to be used, just add it to the XS7 SR:

 xe sr-create content-type=user device-config:device=/dev/md0  name-label="Local RAID10" shared=false type=lvm 

In XS7, the array is recognized even after a reboot without manual module insertion or other configurations; everything is just ready to go!

XenServer 7 software RAID con mail alert

You can also read this article in english.
XenServer 7 si sta imponendo come l’implementazione di riferimento dell’Hypervisor open source Xen, fornendo funzionalità avanzate di storage, networking e gestione (oltre che HA) pacchettizzate in una soluzione totalmente self-contained e di livello enterprise; il tutto, risultando spesso superiore a VMware vSphere e ad HyperV e KVM, gli altri big player del settore.

Giusto per ricordarlo, Xen è l’Hypervisor che funge da motore per la maggior parte dei cloud pubblici (da AWS in giù), è totalmente open source e la sua declinazione XenServer è ora gestita direttamente dalla Linux Foundation (non più da CITRIX),  risultando de facto la soluzione standard per la virtualizzazione bare-metal FLOSS.

Potenti batterie incluse!

Nella versione 7, l’adozione di una CentOS 7 modificata come dom0 ha fatto fare passi da gigante allo stack software che circonda il microkernel Xen… difatti, l’installazione standard di XS7 include già tutti gli elementi del puzzle necessari per poter saltare a piè pari una soluzione RAID hardware e tuffarci nelle meraviglie del software RAID! MDADM, ad oggi, è una delle pochissime alternative per creare array fra dischi NVMe o gestire altre configurazioni di nicchia e/o con un forte stress sulle performance; grazie alle CPU moderne, il software RAID (specie su grossi array, e naturalmente con diverse peculiarità) gioca spesso alla pari con gli ASICS dei più rinomati controllers.

Il RAID software consente inoltre di creare array utilizzando dischi di qualsiasi brand (anche non certificati per il vostro server), cosa che da un vantaggio strategico a XS rispetto a prodotti come VMware, che invece permettono al più di creare RAIN  tramite add-on a pagamento come vSAN. Se avete mai comparato i costi dei dischi branded (HP, IBM, Dell, ecc.) VS gli stessi modelli off-the-shelf (in special modo SSD), capirete bene quale possa essere il vantaggio economico.

Dive into MDADM

Il workflow da seguire per realizzare una soluzione RAID software di livello enterprise su XS7 che ci avviserà in automatico di eventuali malfunzionamenti, è molto semplice:

  • creazione di un array con MDADM;
  • configurazione di SSMTP per l’invio di notifiche;
  • test dell’invio notifiche e fault-rebuild dell’array;
  • aggiunta dell’array come SR.

MDADM è un software veramente battle-tested; incluso nel kernel linux da moltissimi anni, si è guadagnato sul campo la sua fama di stack molto stabile e privo di bugs importanti, tant’è che viene da anni utilizzato in grossi sistemi di produzione (degni di nota sopratutto i “big irons x86” dell’ultimo quinquennio), nonché nella maggior parte dei NAS commerciali (Synology, QNAP, Buffalo, ecc).

Risultando già incluso nella installazione standard di XS7, creare un array RAID risulta semplicissimo nel tipico scenario in cui avete installato l’Hypervisor su un drive USB che non farà parte dell’array… come da best practice! E voi seguite le best practices, no? Ne faccio cenno anche qui.

Ad esempio, nel caso in cui volessimo creare un array RAID 10 con i primi quattro HDD del sistema, basterà eseguire

 mdadm --create /dev/md0 --run --level=10 --raid-devices=4 /dev/sd[a,b,c,d] 

e, per monitorare la costruzione dell’array,

 watch cat /proc/mdstat 

oppure il sempreverde

 mdadm --detail /dev/md0

che, inoltre, ci fornisce varie informazioni sullo status del nostro array.

Ti fidi di un sistema che non ti avvisa se c’è un guasto?

Settiamo io monitoraggio dell’array; intanto, copiamo la configurazione attiva nel file di configurazione di MDADM

 mdadm --verbose --detail --scan >> /etc/mdadm.conf 

questo attiva il monitoring dell’array con le caratteristiche specificate. Quindi, configuriamo SSMTP per l’invio della posta ad un nostro indirizzo e-mail.

A titolo di esempio, la seguente configurazione del file /etc/ssmtp/ssmtp.conf è utilizzabile per l’invio delle notifiche da un indirizzo gmail:

È importante non dimenticare di configurare anche il file /etc/ssmtp/revaliases con una riga come la seguente: 

Infine, è necessario aggiungere i parametri MAILADDR e MAILFROM nelle ultime righe di /etc/mdadm.conf, in modo che il file risultante sia assimilabile a questo modello:

ARRAY /dev/md0 level=raid10 num-devices=4 metadata=1.2 name=vostro_hostname:0 UUID=UUID_ARRAY
MAILADDR mail_di_destinazione@provider.sth

Che setup sarebbe, senza nute… senza testing?

Ora che la configurazione è completata, possiamo testarla; MDADM può eseguire l’invio di una mail di test del sottosistema di notifiche con

 mdadm --monitor --scan --test --oneshot 

; in generale, il test è affidabile, ma se volete potete anche mettere in status “failed” uno dei dischi (attenzione ai tempi di rebuild) con

 mdadm --manage --set-faulty /dev/mdo /dev/sdb mdadm --manage /dev/md0 --add /dev/sdb 

Raccomando di attendere la notifica via mail per una decina di minuti, il demone è giustamente un po “lazy” nel riconoscere il fail, anche quando simulato.

Ora che l’array è testato e pronto all’uso, basta aggiungerlo agli SR utilizzabili da XenServer con un semplice

 xe sr-create content-type=user device-config:device=/dev/md0  name-label="Local RAID10" shared=false type=lvm 

In XS7 l’array viene riconosciuto al reboot senza dover forzare il caricamento di moduli o altre configurazioni particolari, tutto è semplicemente pronto all’uso.