– est. Jan 2010 • Ex I3P – 2010/2014 • Premi, premini, premietti vari – StartCup, Premio Perotto, ecc. Giampaolo Mancini + Francesco Varano • Ing. Informatici • Ricercatori @ PoliTO • R&D WiNext • Trampoline
– Identità + Presenza + Interazione • ~500.000 utenti in Italia su ~300 hotspot (da bar a comuni) • Valentino/VFG, Swatch Group, Lindt Italia, IREN, Ativa, Elmec, etc. Nuovi Prodotti/Servizi – IoT + Cloud • 11Probes – Contapersone + Analisi flussi + Posizionamento • Printercast – Cloud printing open con accounting e billing (senza Domini) "Roba che ti fa guadagnare mentre dormi"
(CPU/SoC General Purpose) vs ARM-M (embedded propriamente detto) • Smartphone • Single Board Computer: Raspberry Pi & Co. ◦ Supporto per 29 nuove board ARM in Linux 4.9 • Hardware "embedded" di nuova generazione ◦ Videocamere ◦ Microserver ◦ Networking • Server/Hosting bare-metal ◦ Low cost ◦ Alta densità ◦ Consumi ridotti
• Sistema operativo di base stabile stateless • Servizi/applicazioni indipendenti dal SO/Distribuzione • Hosting bare-metal + alta densità = Containers-as-a-Service • Architettura di riferimento per cloud-on-premises? • Hosting bare-metal ARM ◦ scaleway.com ◦ packet.net
• Sistema operativo di base stabile (e stateless) • Servizi/applicazioni indipendenti dal SO/Distribuzione • Update OTA granulare dei (micro)-servizi • Architettura a micro-servizi -> nodi stateless ◦ Storage read-only ◦ Corruzioni SD Card ◦ Provisioning a run-time ◦ ...
si può arrivare? ESEMPIO: Microservizi Python in immagini docker • Sandbox (solo applicazione, immagine FROM SCRATCH) • Solo binari (solo eseguibile o solo runtime) • Applicazione cifrata (riduzione di problemi di IP infringement/sicurezza) • 10-20MB vs 180-250MB immagine Python ufficiale
Server Macchina ARM con GNU/Linux per ARMHF/AARCH64 • Distribuzioni ◦ Tutte le maggiori ◦ Consiglio: supporto UFFICIALE per Docker ◦ Consiglio: kernel aggiornato con driver per storage OverlayFS ◦ Installazione da package manager o "curl | sh"
IoT Macchina ARM con distribuzione GNU/Linux per IoT • Caratteristiche raccomandate della distribuzione ◦ SUPPORTO e pacchetti ◦ SUPPORTO per le board o dai produttori ◦ Linux 4.x • Distribuzioni ◦ Raspbian ◦ Arch Linux ◦ HypriotOS ◦ C.H.I.P. OS ◦ ResinOS
ARM • Arch Linux For ARM ◦ Distribuzione rolling ◦ Supporto ottimo ◦ Documentazione ottima ◦ Ottimo supporto delle board supportate ufficialmente ◦ Kernel sempre aggiornato ◦ Pacchetti "vanilla"
Raspbian ◦ Una delle distro per Raspberry Pi ◦ Supporto ufficiale di Docker ◦ Collaborazione Raspberry Pi Foundation e Docker ◦ Diversi Docker Captain coinvolti ◦ "curl | sh"
HypriotOS ◦ Dieter Reuter (@Quintus23M) ◦ Basata su Raspbian: solo per Raspberry Pi ◦ Docker ottimizzato pre-installato ◦ Versioni future basate su Debian per ARMHF/AARCH64: altre schede ◦ La distribuzione più ottimizzata e production-ready per Docker su ARM so far. ◦ Tool di contorno per flash delle SD e provisioning di base. ◦ http://blog.hypriot.com
• C.H.I.P. OS ◦ Per C.H.I.P. – board ARM più economica disponibile (la mia preferita) ◦ WiFi + BLE integrati ◦ Basata su Debian: solo C.H.I.P. ◦ Tool di contorno per flash delle SD. ◦ "curl | sh" ◦ Supporto ufficiale Docker dal 2016-12-11
ResinOS ◦ Basata su Yocto ◦ Supporto per molte board "serie" ◦ Approccio "boot to docker": systemd + qualche servizio al contorno + docker ◦ Tool CLI per provisioning ◦ Storage read-only e supporto per OTA del SO (bootloader + partizioni ridondate sulla SD) ◦ Basata sull'esperienza di resin.io: molto promettente
<immagine base per ARMHF/AARCH64 su hub.docker.com> • FROM scratch • NATIVO: Build su board ARM • CROSSBUILD: su GNU/Linux e MacOS (forse anche su Windows)
Hub • Solito caos di hub.docker.com • Repository consigliati ◦ https://hub.docker.com/u/container4armhf/ ◦ https://hub.docker.com/u/resin/ ◦ https://hub.docker.com/u/aarch64/ • Raccomandate immagini basate su Alpine Linux ◦ Immagine base ufficiale ◦ Occhio a musl-libc
per ARM su PC/Mac AMD64/X86_64 • Esecuzione dei container ARM su PC/MAC • Possibile incremento di prestazioni • (Emulazione ARM su PC/Mac con Qemu) • In generale, consiglio board ARM da build/sviluppo (tanta CPU/RAM). • GNU/Linux ◦ Qualsiasi distro con pacchetti per qemu-user-static e binfmt-misc ◦ Debian/Ubuntu, Arch, … • Docker for Mac
di chroot voodoo magic vecchia scuola: qemu-user-static + binfmt-misc (host == macchina di sviluppo, target == macchina di deployment) Usiamo binfmt-misc per far credere al docker del host (su Mac, al docker che gira sul GNU/Linux che gira in xhyve) di poter eseguire nativamente i binari per ARM. In realtà i binari vengono eseguiti da qemu-arm-static e qemu-aarch64-static.
• A runtime -v /usr/bin/qemu-arm-static:/usr/bin/qemu-arm-static • Build di nuova immagini con: FROM container4armhf/armhf-alpine COPY qemu-arm-static /usr/bin # Oppure RUN di script che fa check dell'architettura # e scarica qemu-user-static RUN rm /usr/bin/qemu-arm-static # ...
• RootFS Cross su Mac: container ARM/X86_64 per generare rootfs cross $ docker run --rm -ti -v tools:/tools alpine:edge \ /tools/bootstrap-cross-rootfs.sh • Cross-compilare prima tutto quello che si può: ◦ Python – generare wheel per ARM di tutti i pacchetti (pip wheel) ◦ … • GPIO, PiCamera, ecc. ◦ --privileged per test ◦ --device in produzione