Compilare contenitori Linux per dispositivi embedded

2

Recentemente sono stato esposto a Docker e ho scoperto che si trattava di uno strumento eccellente per rendere le implementazioni di produzione molto meno rischiose rispetto a quello a cui ero abituato (proveniente da un mondo embedded, incorporato come "Linux portato su PCB braccio personalizzato con completa le immagini di sistema cross-build ").

Tuttavia, ho subito sperimentato che la creazione di immagini Docker è in qualche modo un processo di "esecuzione runtime steps" invece di costruire in termini uno fa un rootfs usando Yocto. Questo era uno stopper perché impedisce la compilazione incrociata. Inoltre, non esiste alcuna nozione di sysroot sulla macchina host in questo approccio.

Ho visto un servizio cloud che offre opzioni per costruire immagini Docker per Arm, ma non mi sento a mio agio con l'idea, dato che di nuovo manca il sysroot e inizia a sentirsi come una soluzione hacky ... in più cosa se tu passare a una piattaforma di processore diversa, una per la quale è necessario eseguire la compilazione incrociata ...

Quindi mi stavo chiedendo, questo aggiornamento di produzione privo di rischi è una cosa meravigliosa, c'è sicuramente qualcuno che ci pensava già, ci sono tutti questi smart box e router che devono essere aggiornati da remoto, sicuramente hanno una sorta di " supervisore con contenitori "architettura per evitare che il sistema muoia in caso di interruzione di corrente o di un bug critico dell'applicazione, ma il più lontano che ho ottenuto è stato un piccolo lwm article solo per flirtare con questa idea.

UPDATE: Ho trovato un nuovo riferimento a qualcosa che sembra mirare in quella direzione.

Mi piacerebbe conoscere gli approcci che hai visto finora affrontando questo problema e quali tecnologie?

Hai usato un bootloader failsafe che avrebbe aspettato una nuova immagine completa (kernel e rootfs) nel caso qualcosa fosse andato storto?

Qualche idea di creare contenitori userspace con sistemi di compilazione?

    
posta TheMeaningfulEngineer 15.04.2016 - 22:50
fonte

1 risposta

1

Ricordo NOOBS per il raspberry pi, ma questo richiede l'interazione dell'utente.

Sono nuovo nel mondo embed, non è così per Linux, ma tutto il contenitore / docker / x è uno stack abbastanza recente, quindi forse non ha ancora raggiunto il mondo degli embed. :)

L'approccio sistematico ai contenitori è davvero accurato, puoi creare dei contenitori sysroot veramente imballati (dnf = fedora, debootstrap = debian) e supervisionarli con systemd piuttosto pulito. Ad esempio:

 mkdir /tmp/myimage 
 dnf --releasever=23 --installroot=/tmp/myimage install <package-name>
 rm -rf /tmp/myimage/var/cache/dnf
 # tar zcvf - /tmp/myimage | docker import - myimage ?

Ti dà un'immagine che è ~ 30M (15M compressa) più le dimensioni di qualunque pacchetto tu stia installando.

In caso di fallimento del kernel, il mondo normale userebbe kvm per testarlo. Non sono a conoscenza di alcuna caratteristica di sistema per il test del kernel (non sono un esperto di sistema) ma sicuramente ci sono alcuni boot hook per il kernel.

Ad esempio:

Potresti avviare con systemd.unit = emergency.target e personalizzare il file emergency.target per fare le tue cose senza "problema". Immagino che potresti fare "qualsiasi cosa" lì, come ripristinare kernel ... ma sai che sei in una shell di sistema rotta, quindi forse non risulta così semplice ...;)

Quindi scommetterei per l'approccio systemd se possibile.

Stai usando yocto? Se sì, potresti spiegare perché?

Ciao e buona fortuna. ;)

    
risposta data 18.06.2016 - 20:17
fonte

Leggi altre domande sui tag