Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introduzione ad ubuntu core - Qt day 2017

92 views

Published on

Cos'è Ubuntu core e come lo si può usare per fare il deploy di applicazioni (Qt) a milioni di utenti in pochi secondi.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Introduzione ad ubuntu core - Qt day 2017

  1. 1. Marco Trevisan Software Engineer - Ubuntu Desktop Team marco@ubuntu.com @3v1n0 · +MarcoTrevisan · irc://Trevinho Snappy, ovvero
  2. 2. We are the company behind Ubuntu.
  3. 3. Ubuntu e Canonical EMPLOYEES 500+ COUNTRIES 49+ FOUNDED 2004 Canonical sviluppa il sistema operativo dal 2004, ed adesso sta estendendo Ubuntu su dispositivi mobili ed IoT. Ubuntu è un sistema operativo attualmente disponibile su server, cloud personal computer, telefoni e dispositivi IoT.
  4. 4. Ubuntu Linux, il più utilizzato per lo sviluppo Source: Eclipse Foundation + StackOverflow survey Mint Fedora Debian Other Ubuntu 2% 2% 3% 6% 17%
  5. 5. dalla nuvola alle cose
  6. 6. Ubuntu già da vita a dispositivi IoT Smart drone controllers Advanced robotics Home gateways Industrial gateways Digital Signage
  7. 7. Le sfide dell’IoT Sicurezza Aggiornamenti Monetizzazione 1 2 3
  8. 8. Ma siam davvero sicuri?!? Hackers remotely kill a jeep on the highway – with me in it. Andy Greenberg
  9. 9. Aggiornamenti, non raffreddori! Nest thermostat glitch leaves users in the cold Nick Bilton
  10. 10. Fosse solo hardware… Accessori, tools e servizi indotti. E magari facciamoci anche cassa!
  11. 11. Dispositivi Linux distribuiti indirizzati economci vulnerabile Difficile da gestire e riparare Server Linux centralizzato supportato costoso ridondante Economico da gestire e riparare
  12. 12. source: https://www.flickr.com/photos/mom2sofia/8394217408/in/photostream/
  13. 13. source: https://www.reddit.com/r/funny/comments/2ad0s8/apparently_ace_ventura_is_my_new_fedex_guy/
  14. 14. source: http://nathantracy.net/
  15. 15. A minimal, secure, transactional Ubuntu designed for IoT
  16. 16. Ubuntu Core: piccolo, sicuro, veloce Tutto il meglio di Ubuntu in uno spazio nato per tutti i dispositivi Aggiornamenti transizionali Sistema di pacchetti semplice da creare, mantenere e fare il deploy Sicurezza in primo piano
  17. 17. Mettiamolo a dieta quest’Ubuntu! DIMENSIONE DELL’IMMAGINE 776 MB Ubuntu Core CentOS Atomic Host 7 350 MB
  18. 18. Abbiamo gli snap!
  19. 19. Snap - pacchetti Linux universali Distro supportate Snap / framework Sicuri | Facili da creare | Transazionali | Appstore-friendly
  20. 20. Ubuntu classic Ubuntu Core Kernel 4.4 Kernel 4.4 Applicazioni confinate come snap, senza dipendenze OS minimale come snap Kernel, anche questo uno snap Pacchetto di Sistema App B Libreria DriverApp A Legenda
  21. 21. Interazione tra snap app snapapp snap app writable area app writable area Le app sono confinate ed isolate app snap app writable area app snap app writable area
  22. 22. Aggiornamenti Atomici: Apps, OS e kernel Dati Area scrivibile Snap originario Aggiornamento Dati aggiornati Area scrivibile Snap aggiornato Dati originari Area scrivibile I dati precedenti vengono mantenuti sul device Snap orgiginario Dati precedenti Area scrivibile Snap precedente Rollback in caso di fallimento
  23. 23. Un appstore per tutti i gusti...
  24. 24. $600 drone (hardware) Sicurezza. Aggiornamenti. Guadagno. Long Term Support. … gestibile dal produttore ...
  25. 25. … Con tutti i numeri alla mano
  26. 26. Dal codice al metallo... Snapcraft → Build → Store → Deploy: Tutto in mano ai developers!
  27. 27. 18.04 (TBD) 9 mo Trusted by Linux developers Long Term Support Developer Release Ubuntu 14.04 LTS (Kernel 3.13) Ubuntu 16.04 LTS (Kernel 4.4) Ubuntu 18.04 LTS (TBD) ... 5 yrs 5 yrs 5 yrs 14.10 (3.16) 9 mo 15.04 (3.19) 9 mo 15.10 (4.2) 9 mo 16.10 (4.8) 9 mo 17.04 (TBD) 9 mo 17.10 (TBD) 9 mo 14.04 14.10 15.04 15.10 16.04 16.10 17.04 17.10 18.04 18.10 19.04 Ubuntu Core 16 (Kernel 4.4) 5 yrs Ubuntu 18.04 LTS (TBD) 5 yrs
  28. 28. ● Docker e LXC sono container ○ Un unico processo con una gestione a sé ○ Kernel condiviso, proprio filesystem ● Snap si occupa di confinare ○ Le app nei pacchetti snap sono avviate e gestite dal kernel come gli altri processi nel sistema ○ Kernel/rete condivisi, filesystem solo parzialmente proprio ○ Processi controllati dai tool classici ○ Non c’è bisogno di fare routing ○ I file sono accessibili direttamente (se consentito) ○ Multi-utente, un’unica istanza per app LXD snap Contenere o Confinare, questo è il problema!
  29. 29. Perfetto per tutti i dispositivi I Vendor controllano la distribuzione delle loro app direttamente, e dei gadget snap (kernel, o driver specifici) Platform condivise per estendere il sistema operativo con librerie riutilizzabili da più snap Il sistema di base è Ubuntu: per sempre libero e gratuito.
  30. 30. Hardware alla mano... Processori Intel x86 or ARMv7/v8 (Cortex-A7) Memoria 256MB+ Flash 4GB System storage Connettività disponibile WiFi, Ethernet, USB, BT4.0 BLE, … Board supportate ufficialmente Raspberry Pi, Dragonboard, Intel DUC e Joule, Artik, …
  31. 31. Scoperchiamo il core
  32. 32. classic kernel snappy os appapp kernel config Scribile dall’OS Area scrivibile dall’app Area scrivibile dall’app Un pacchetto può scrivere in qualsiasi area Snaps in sola lettura Aree scrivibili per snap filesystem
  33. 33. versioned root writable area (for services) $SNAP_DATA common root writable area (for services) $SNAP_COMMON versioned user writable area $SNAP_USER_DATA /tmp (per service and app)/tmp (per service and app) /tmp (per service and app process) snap code & assets (squashfs, RO bind-mounted in /snap/<snap_name>/<version>) $SNAP Service common user writable area $SNAP_USER_COMMON Service CLI GUI
  34. 34. versioned root writable area (for services) $SNAP_DATA common root writable area (for services) $SNAP_COMMON versioned user writable area $SNAP_USER_DATA /tmp (per service and app)/tmp (per service and app) /tmp (per service and app process) ~ /dev/<device> /sys / (from core snap) /var/lib/snapd/hostfs (/ from host) snap code & assets (squashfs, RO bind-mounted in /snap/<snap_name>/<version>) $SNAP Service common user writable area $SNAP_USER_COMMON Service CLI GUI
  35. 35. Interazione tra snap app snapapp snap app writable area app writable area Le app sono confinate ed isolate app snap app writable area app snap app writable area
  36. 36. Ubuntu Core: un sistema all-snaps! Ed un sistema moderno per creare distribuzioni Kernel snap Core snap Gadget snap App snap App snap App snap Content interface snap ● Integrità assicurata da un sistema in sola lettura squashfs ● Non serve riflashare tutto quando cambia un componente
  37. 37. alla prova di snapd
  38. 38. # Prerequisito: installa snapd nel sistema # Od usa un immagine per KVM di Ubuntu-core # http://snapcraft.io # Installa ed esegui il tuo primo snap $ snap find hello $ sudo snap install hello $ hello $ snap list # Snap può fornire servizi e diversi binari $ hello $ hello.universe
  39. 39. # Aggiorna gli snap nel sistema (automatico) $ sudo snap refresh # Passa alla versione di “hello” di un altro # canale $ sudo snap refresh hello --beta $ hello # Rimuove uno snap $ sudo snap remove hello
  40. 40. # Uno snap più complesso! $ snap info qml-hello-world name: qml-hello-world summary: "Get started in the fantastic QML world" publisher: 3v1n0 description: | Snap me, please. And see how I run qml! https://github.com/3v1n0/snap-qml-hello-world commands: - qml-hello-world - qml-hello-world.qtquick-controls tracking: candidate installed: 0.2-wow-version (3) 76MB - refreshed: 2017-06-24 01:44:53 +0200 CEST channels: stable: 0.1-awesome-version (2) 76MB - candidate: 0.2-wow-version (3) 76MB - beta: ↑ edge: ↑
  41. 41. # Installa lo snap in version stabile $ snap install qml-hello-world # Aggiorna all’ultima versione dell’app! $ snap refresh qml-hello-world --candidate # Se non dovesse più funzionare a dovere... $ snap revert qml-hello-world --devmode # La versione è blacklisted, non viene # riscaricata mentre la versione funzionante # in stable viene ripristinata
  42. 42. Si… Ma come si fanno gli snap? Mettiamoli al servizio di
  43. 43. Crea gli snap in classic, li usi su Ubuntu Core
  44. 44. https://tutorials.ubuntu.com/ create-first-snap
  45. 45. # Per far gli snap, serve snapcraft $ sudo apt install snapcraft # Un nuovo progetto si inizia con $ snapcraft init # Il codice d’esempio $ git clone https://github.com/3v1n0/snap-qml-hello-world # Hint: snapcraft.yaml nella cartella ‘snap’
  46. 46. # Il file yaml… Nel suo complesso name: qml-hello-world version: '0.1-awesome-version' icon: qt-logo.svg summary: Get started in the fantastic QML world description: | Snap me, please. And see how I run qml! https://github.com/3v1n0/snap-qml-hello-world grade: stable confinement: strict parts: hello-world: plugin: nil source: . after: [ desktop-qt5 ] stage-packages: [ qmlscene, qml-module-qtquick2 ] install: | cp -v hello-world.qml qt-logo.svg $SNAPCRAFT_PART_INSTALL apps: qml-hello-world: command: desktop-launch qmlscene $SNAP/hello-world.qml plugs: [ x11 ]
  47. 47. # Metadati di base del file yaml name: qml-hello-world version: '0.1-awesome-version' icon: qt-logo.svg summary: Get started in the QML world description: | Snap me, please. And see how I run qml! grade: stable confinement: strict
  48. 48. # Le parti del file yaml parts: hello-world-qml: plugin: nil source: . after: [ desktop-qt5 ] stage-packages: - qmlscene - module-qtquick2 install: | cp -v hello-world.qml qt-logo.svg $SNAPCRAFT_PART_INSTALL
  49. 49. # Le app incluse apps: qml-hello-world: command: | desktop-launch qmlscene $SNAP/hello-world.qml plugs: [ x11 ]
  50. 50. # Genera lo snap: $ snapcraft # prova lo snap $ snap try prime $ snap run qml-hello-world # E poi distribuiscilo al mondo! $ snap register qml-hello-world $ snap push qml-hello-world*.snap --release [stable|candidate|beta|edge] # Sì, *adesso* chiunque può installarlo
  51. 51. Build.snapcraft.io goditi il tuo tempo, a compilare ci pensa lui (in sicurezza, multi-arch, ed affidabilità)
  52. 52. Gestisci cicli di rilascio, versioni senza limiti
  53. 53. Esempi di snapcraft.yaml e Qt: - QtWidgets e librerie condivise - QtWidgets e librerie statiche (ricompilando qt) - Applicazione complessa con molte librerie di terze parti sia statiche che condivise con versione custom di Qt: http://go.3v1n0.net/snapcraft-qt-examples
  54. 54. snapcraft.io developer.ubuntu.com/en/snappy github.com/snapcore/snapd github.com/snapcore/snapcraft sudo snap install snap-codelabs # http://localhost:8123
  55. 55. Per saperne di più ubuntu.com marco@ubuntu.com · @3v1n0 · +MarcoTrevisan · irc://freenode/Trevinho

×