Posted on January 23, 2017 by admin

Ubuntu Core – snappy

Scoperto quasi per caso, cercando immagini da installare su Raspberry Pi, sono incappato in Ubuntu Core.

Ubuntu Core è un sistema server minimale che include tutto il necessario per far girare “migliaia” di server virtuali sui vari servizi di cloud computing. Cambia un po’ la filosofia che sta dietro al sistema operativo, più simile a quello che si vede sui cellulari, che a quello di un vero sistema desktop.

Vediamo un po’ più a fondo cosa si può fare in Ubuntu Core con snappy.

Premetto che Ubuntu Core può essere provato sotto diverse infrastrutture:

  • KVM
  • Amazon AWZ
  • Google Cloud
  • Microsoft Azure

Notevole.
Per provarlo, io ho utilizzato KVM su Ubuntu 14.10 a 64bit. Successivamente lo proverò si Raspberry Pi2.

Se non avete installato KVM

[code language=”bash” gutter=”false”]
$ sudo apt-get install qemu-kvm
[/code]

e controllate che la vostra macchina supporti KVM

[code language=”bash” gutter=”false”]
$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
[/code]

Se non otterrete l’output sopra, dovrete controllare nelle impostazioni del processore nel BIOS della vostra macchina se è stato attivato.

Esempio se avete un Intel dovreste vedere:
Intel Virtualization [Enabled]

Se avete il supporto KVM, scaricate l’immagine di Ubuntu core da qui:

[code language=”bash” gutter=”false”]$ wget http://cdimage.ubuntu.com/ubuntu-core/preview/ubuntu-core-alpha-02_amd64-virt.img[/code]

E create il dominio, la vostra macchina virtuale.

Per fare in fretta ed avere una GUI per la gestione della macchina virtuale, l’ho creata usando virt Manager.
Se non lo avete installato scaricatelo:

[code language=”bash” gutter=”false”]sudo apt-get install virt-manager[/code]

La mia macchina virtuale ha 1024MB di RAM, 1 Core e si chiama polpetta.
polpetta

Una volta fatta partire la macchina virtuale loggatevi.
Potete utilizzare la console offerta da virt manager, oppure se sapete l’IP della macchina virtuale collegarvi via ssh.
(L’account di default è ubuntu con password ubuntu .)

Quale release di Ubuntu Core è installata?

[code language=”bash” gutter=”false”]
$ snappy info
release: ubuntu-core/devel
frameworks:
apps:[/code]

il campo release ci mostra che la versione è di sviluppo. Siamo su una alpha, quindi per ora non pretendete la luna.
Gli altri due campi sono vuoti, per ora.

Vediamo cosa è installato:

[code language=”bash” gutter=”false”]$ snappy versions
Part Tag Installed Available Fingerprint Active
ubuntu-core edge 143 145 a43f62b4a258eb *
[/code]

C’è un unico componente installato: ubuntu-core, che è il layer base di sistema.

La fingerprint ci permette di capire quale codice sta girando sul nostro Ubuntu Core e poterlo confrontare con altri utenti.
Sappiamo se il codice che stiamo eseguendo è identico a quello che sta utilizzando un altro utente di Snappy.

Il flag su Active ci dice la versione del componente in esecuzione.
Eseguendo un update del componente, lo vedremo in esecuzione al riavvio del sistema.

Come scrivevo prima la struttura del sistema operativo diversa da quella standard di Ubuntu o Debian. Il packages manager non funzionerà qui.
Ce lo ricorda lo stesso Ubuntu Core:

[code language=”bash” gutter=”false”]$ apt-get update
Ubuntu Core does not use apt-get, see ‘snappy –help’
[/code]

[code language=”bash” gutter=”false”]
$ sudo apt-get install nodejs
Ubuntu Core does not use apt-get, see ‘snappy –help’
[/code]

Proviamo a fare un aggiornamento.
Vediamo quali componenti hanno un aggiornamento disponibile. Gli aggiornamenti verranno cercati nel cloud.

[code language=”bash” gutter=”false”]
$ snappy update-versions
updated components are available with your current stability settings.
[/code]

[code language=”bash” gutter=”false”]
$ snappy update ubuntu-core
[/code]

Al riavvio avremo la nuova versione a nostra disposizione.

[code language=”bash” gutter=”false”]
ubuntu@localhost:~$ sudo snappy versions
Part Tag Installed Available Fingerprint Active
ubuntu-core edge 145 – 97c61b9c11e13f *
[/code]

Proviamo ad installare qualcosa:

[code language=”bash” gutter=”false”]
$ sudo snappy install nodejs
No package ‘nodejs’ for ubuntu-core/devel
[/code]

Non c’è una corrispondenza diretta con il market di Ubuntu.
Proviamo con qualcosa di diverso e che utilizzo spesso, docker.

[code language=”bash” gutter=”false”]
$ snappy search docker
Part Version Description
docker 1.3.2.004 The Docker app deployment system
[/code]

Installiamolo
[code language=”bash” gutter=”false”]
$ sudo snappy install docker
docker 4 MB [=====================================================] OK
Part Tag Installed Available Fingerprint Active
docker edge 1.3.2.004 – 788b0787b18b1c *
[/code]

Ricontrolliamo le versioni di tutti i componenti installati

[code language=”bash” gutter=”false”]
$ snappy versions
Part Tag Installed Available Fingerprint Active
ubuntu-core edge 138 – 4ad83f1ec0adb0 *
docker edge 1.3.2.004 – 788b0787b18b1c *
[/code]

Il sistema base Ubuntu Core e docker. Installiamo un altro componente.

[code language=”bash” gutter=”false”]
$ sudo snappy install hello-world
hello-world 31 kB [==================================================] OK
Part Tag Installed Available Fingerprint Active
hello-world edge 1.0 – 4616c8b1b6e11b *
[/code]

Fatto!
Ricontrolliamo cosa abbiamo a bordo!

[code language=”bash” gutter=”false”]
$ snappy info
channel: ubuntu-core/devel
frameworks: docker
apps: hello-world
[/code]

Come visualizzato qui sopra, docker è un framework mentre hello‐world è una app.

Sia il framework docker che la app hello-world sono state installate con snappy, tuttavia sono differenti.
Hanno diverse impostazioni di sicurezza e ed il grado di isolamento.

I framework estendono il sistema base e di conseguenza hanno dei permessi speciali.
Le app invece sono isolate una dall’altra per default. Chiuse nel loro piccolo mondo, interagiscono con il sistema base con permessi definiti in partenza.