Ho letto di apport e il suo utilizzo per una settimana ormai. Ma non poteva capire le cose di sotto.
Scenario:
Ho sviluppato un’applicazione e l’ho confezionata. E il suo nome è MyApp.deb
. Il nome del pacchetto binario è MyApp
. L’applicazione è installata nel percorso /opt/myapplication/bin/MyApp
.
Requisiti:
- Quando la mia applicazione si arresta, voglio essere in grado di raccogliere il core dump.
- In ogni crash successivo, deve creare un nuovo crash, ma non sovrascrivere quello esistente. Qualcosa come la rinomina automatica con il timestamp attuale, ecc. Mi aiuterebbe.
- Quando installo la mia applicazione su un computer del cliente, il mio installatore non deve modificare i suoi parametri di sistema. Per esempio, non devo cambiare il modello della sua generazione di file di base, perché l’utente / cliente potrebbe odiare la mia applicazione in quanto cambierei i suoi parametri di sistema senza il suo consenso.
- Sto bene con il percorso di generazione del file principale. Una directory corrente o
/var/crash
Cose che ho esplorato fino ad ora:
Apport è una bella utility che abilita le generazioni di file core. Usando /proc/sys/kernel/core_pattern
posso formattare i file core. Ciò fornisce la flessibilità per redirect i file core in una directory predefinita, denominare i core file con pid, il percorso del file aggiunto o prep-ended, ecc. Per i pacchetti non Ubuntu, devo scrivere hook per generare core dump (report) . Apportare dopo aver raccolto il report che verrà caricato.
Cose che non capisco:
- Apport è quello che devo guardare? Voglio dire, è sufficiente il mio scopo? O dovrei guardare qualcos’altro?
- Che tipo di pacchetto cade sotto la mia domanda? Lo chiamo non-ubuntu? Terza parte? che cos’è? Vedo terminologie diverse nei documenti?
- Come accennato,
MyApp
viene eseguito da /opt/myapplication/bin/MyApp
, quindi dove verranno generati i file core? Dir attuale o /var/crash
? Apport rileva gli arresti anomali generati da /opt
? Lo interpreta?
- Domanda importante: se ho sviluppato l’applicazione e se Apport carica il rapporto sui repository di Ubuntu, non ha senso. Quindi, come posso dire a Apport di inviarmi il rapporto.
- Ottengo questo errore: l’
executable does not belong to a package, ignoring
. Quindi cosa sto sbagliando?
- Perché il riconoscimento riconosca il mio pacchetto, devo renderlo un pacchetto sorgente? È obbligatorio? Voglio solo creare un pacchetto binario?
- Ho anche visto da qualche parte nei documenti che Apport riconosce:
- Pacchetti di Ubuntu o
- Applicazioni del launchpad ma la mia applicazione non è nessuna di queste. Quindi, come mi aiuta Apport nello scenario attuale?
- Sembra vicino, ma potrebbe non essere quello che ti serve. Apport cambia automaticamente / proc / sys / kernel / core_pattern. Quindi se questo non può essere cambiato, sei praticamente sfortunato. D’altra parte, l’apport è nell’installazione di Ubuntu predefinita ora, quindi praticamente chiunque usi Ubuntu ha già quel parametro cambiato da esso. Inoltre, non sono a conoscenza di alcun modo per dire ad apport di mantenere più del crash più recente da una particolare app, ma fino a quando ogni crash viene caricato, non è un problema.
- Mi riferirei a terzi.
- Apport supporta gli eseguibili installati in / opt. Dovrai fornire un hook in / opt / path / to / your / app / share / apport / package-hooks.
- È ansible impostare un database degli arresti anomali personalizzato nel pacchetto-hook per il pacchetto. Ma se il tuo database di crash non si comporta come debbugs o launchpad, dovrai anche creare un’implementazione personalizzata del connettore del database degli arresti anomali, che non sembra possa essere eseguita senza installare un file python al di fuori di / opt.
- L’eseguibile deve essere installato da dpkg, il che significa che è necessario comprimerlo in un file .deb.
- Devi creare un pacchetto sorgente per creare un pacchetto binario, perché i pacchetti binari vengono creati dai pacchetti sorgente. Non è necessario distribuire il pacchetto sorgente.
- Apport funziona con qualsiasi cosa pacchettizzata come un file .deb.