Come posso sviluppare un gestore di pacchetti per sistemi embedded?

2

Ho bisogno di sviluppare / utilizzare un gestore di pacchetti per un sistema Linux incorporato con le seguenti proprietà:

  • Un master controlla completamente quali pacchetti devono essere installati (lo slave non ha la possibilità di chiedere nulla al master)
  • La velocità di download sul dispositivo è lenta e non solo tutto ciò che è disponibile nella distribuzione principale può essere scaricato nella destinazione
  • L'aggiornamento / declassamento dei pacchetti deve essere possibile
  • Dovrebbe essere possibile sostituire il gestore pacchetti sul sistema stesso
  • Possibilità di sostituire il sistema operativo stesso
  • È facile recuperare dai guasti (perdita di potenza, ...), specialmente quando si considerano i due punti sopra
  • I blocchi sullo slave che devono essere cancellati manualmente non sono in alcun modo consentiti
  • Se un nuovo (meta?) pacchetto sostituisce un vecchio (meta) pacchetto e rimangono alcuni pacchetti non necessari, vengono rimossi, per risparmiare spazio sul dispositivo
  • Definire alcune forme di ordine o dipendenza per installare i pacchetti
  • Forse è necessaria una qualche forma di un sistema di recupero (come rilevare che è necessario, come avviarlo, ...)

Alcuni punti ripetono solo altri punti, e alcuni punti non sono necessariamente qualcosa che il gestore pacchetti deve fare.

Ho iniziato a copiare idee da dpkg (specialmente come installa i file e li rinomina in seguito per ridurre il lasso di tempo in cui può accadere qualcosa di brutto) e utilizzare il formato deb per i pacchetti stessi (non usando tutti i campi).

Non sono sicuro di me stesso, se questa domanda appartiene ai programmatori, ma invece di chiedere una soluzione o qualcosa del genere, sono più interessato se altri programmatori affrontano lo stesso problema e se ci sono risorse notevoli come questo tipo del problema è risolto. Personalmente mi è successo troppe volte che i dispositivi embedded potrebbero essere quasi distrutti da un aggiornamento software senza alcuna possibilità (senza hardware speciale) per il ripristino.

Alcuni link che potrebbero essere pertinenti per gli altri sono i seguenti:

Potrei anche fornire una descrizione simile allo pseudo codice per ciò che intendo fare.

    
posta azraiyl 18.01.2012 - 23:03
fonte

1 risposta

2

Di norma con i sistemi incorporati è necessario un boot loader per gestire gli aggiornamenti del sistema operativo. In genere si dispone di un caricatore di avvio principale che esegue il boot sulla quantità minima di hardware necessaria per installare un caricatore di avvio secondario.

Di solito il boot loader primario sarà in grado di installare un programma di base da un archivio collegato fisicamente come USB o seriale, che di solito è il caricatore di avvio secondario. L'idea del boot loader primario è quella di prevenire il "bricking" del dispositivo con qualsiasi tipo di errore del software, quindi il caricatore di avvio principale non può mai essere aggiornato sul campo, se non del tutto.

Come sembra che tu voglia eseguire complessi aggiornamenti "Over the Air", il boot loader primario non è un posto adatto per questo, ma vuoi essere in grado di recuperare da un'operazione OTA fallita. Ciò richiederà un boot loader secondario in grado di gestire questa complessità e installare gli aggiornamenti del SO e del sistema operativo secondo necessità.

Se riesci a tollerare il rischio di un errore di aggiornamento del dispositivo e di dover ricorrere a un ripristino di avvio principale, non avrai bisogno del caricatore di avvio secondario.

Pensa a un PC normale - Primario è il jumper di ripristino / rollback del BIOS, secondario è il BIOS (che può essere avviato da USB / DVD / NETWORK ecc. ed è aggiornabile) e quindi il sistema operativo. Il sistema operativo può installare i propri aggiornamenti, ma se uno di questi non funziona correttamente, il BIOS può eseguire un avvio di rete PXE e reinstallare il sistema operativo.

Puoi rendere il Secondario complesso quanto necessario, a patto che tu abbia il tempo, in quanto può essere aggiornato, ma KISS è essenziale.

Quello che stai chiedendo non è banale da costruire da zero, trova qualcuno che lo abbia già fatto prima. Non ho dimestichezza con i sistemi Linux incorporati per sapere cosa potrebbe esserci da fare per te. Il miglior consiglio che posso dare è: Fallirà, hai bisogno di un meccanismo di recupero, una volta che hai una meccanica di recupero, non importa se fallisce perché puoi recuperare, quindi concentrati sul recupero, non sulla prevenzione del fallimento. L'attenzione su quanti guasti simultanei hai bisogno di recuperare, solo 1, 2, più ...... Più di 1 è estremamente difficile, più di 3 nemmeno la NASA va lì.

    
risposta data 19.01.2012 - 01:54
fonte

Leggi altre domande sui tag