2009-11-15 22 views
5

Ho un progetto per hobby che è scritto in C# usando MonoDevelop. Ho cercato per un po 'di tempo di girare la confezione di linux, ma continuo a sentirmi frustrato e sopraffatto.Come posso impacchettare la mia applicazione linux usando MonoDevelop?

Il mio programma è composto da:

  • Un progetto di libreria ("Generator"), che fa cose con i dati creati dal mio programma.
  • Un progetto ui ("Interfaccia") che utilizza Gtk #. Questo progetto ha due sottodirectory: "glade" (file xml che gtk usa per costruire i widget) e "book" (dati usati dal mio programma).
  • Un progetto di utilità ("Utils") utilizzato da entrambi i progetti di libreria e di interfaccia.
  • Un progetto principale ("MyProgramName") che avvia l'interfaccia.

Quello che (credo) che voglio fare è davvero molto semplice (credo):

  • Compilare la mia domanda
  • Copiare il file exe e dll (in/usr/local/bin?)
  • Copiare la directory "libro" (in/usr/local/bin?)
  • Copiare la directory "radura" (in/usr/local/bin?)

Oh, e voglio farlo come un pacchetto .deb. Penso che se riesco a far funzionare il tarball, un pacchetto .deb non dovrebbe essere un problema, ma è quello che voglio fare alla fine.

Non sono ancora sicuro di come farlo. Ho usato MonoDevelop per creare un Tarball. Quando installo il tarball (usando ./configure, make, sudo checkinstall), sembra installare il codice eseguibile (e persino creare un comando per eseguire il programma), ma dimentica le directory "book" e "glade".

Come faccio a fare questo? Scusa se questa è una domanda di base/ampia. Ho cercato su google su questo argomento, e non riesco a trovare nulla che non presupponga di conoscere le basi del packaging (anche se afferma che non lo presume).

risposta

4

I pacchetti Debian sono come i file tar: contengono una copia del file system. Per creare un pacchetto Debian ...

  1. Installare il tarball in una directory di build.
  2. Aggiungere una directory DEBIAN con i file di controllo. Ho trovato utile this article.
  3. Creare il pacchetto con dpkg --build.

Vorrei iniziare imparando gli autotools di GNU: autoconf e automake. Rendono molto facile installare il programma in una directory di build. Hai citato ./configure. Quindi presumo che questo progetto abbia già una parte della struttura. Dalla descrizione, sembra che il progetto potrebbe avere bisogno ...

  • Le voci configure.in per i file nel "libro" e "radura".
  • Makefile.sono file in "libro" e "glade".

Mettere tutto insieme, i seguenti comandi risultato in un file pacchetto chiamato project.deb.

 
# ./configure --prefix build/usr 
# make && make install 
# dpkg --build build project.deb 
3

Forse this blog post potrebbe essere di aiuto a voi.

Esso descrive accuratamente la struttura di un pacchetto deb, che è la seguente:

<YOUR PACKAGE NAME> 
└── deb 
    ├── DEBIAN 
    │ ├── conffiles 
    │ ├── control 
    │ └── preinst 
    └── opt 
     └── <YOUR APPLICATION> 
      └── <Your Application Contents> 

Fondamentalmente, si ha una cartella deb all'interno del pacchetto con i seguenti 2 cartelle obbligatorie interna:

  • DEBIAN - contenente i file che descrivono il package deb stesso
  • struttura del file system che rispecchia la destinazione per l'installazione del pacchetto . Nell'esempio precedente, il pacchetto verrà distribuito nella directory /opt/<YOUR APPLICATION>.

Dalla directory DEBIAN, è necessario disporre almeno del file control, che è testo normale. Deve contenere voci in un formato specifico descritto in dettaglio nella pagina collegata. Ecco un semplice esempio (tratto da lì), con un file di controllo di esempio:

Package:packagingmono 
Version:1.0 
Maintainer:Mikael Chudinov <[email protected]> 
Architecture:amd64 
Section:net 
Description:Template for Debian packaged Mono application. 
Depends:mono-complete (>=3) 
  • Package deve essere il vostro nome del pacchetto. Consentito è lettere maiuscole/minuscole, numeri e -.
  • Version - la versione del pacchetto. Consiglierei di usare la versione di assemblaggio per quel campo.
  • Maintainer - il nome dello sviluppatore del pacchetto e le informazioni di contatto.
  • Architecture - i386 o amd64. Se si desidera distribuire l'applicazione ottimizzata per x86 e x64 come eseguibili separati per piattaforma (intendo esplicitamente creata per x64 o x86, non utilizzando AnyCPU), è necessario produrre pacchetti deb separati per ciascuno e impostare il campo Architecture in modo appropriato. Il resto dei campi potrebbe essere lo stesso.
  • Section - facoltativo, potrebbe essere uno qualsiasi degli allowed package categories nel sistema debian apt.
  • Description. Consiste di due token: una breve descrizione (il primo elemento prima di un nuovo simbolo di linea) e facoltativamente più lungo (il testo dopo la prima nuova riga).
  • Depends - un elenco di dipendenze del pacchetto. L'esempio afferma mono-complete che è il nome del pacchetto per il runtime mono, e l'ulteriore limita ad essere maggiore o uguale alla versione 3

cosa importante da sapere su un pacchetto deb è che si può effettivamente mettere un'intera applicazione (il contenuto della cartella bin) in un unico pacchetto. Non è necessario mettere le librerie di riferimento in pacchetti separati e contrassegnarle come dipendenze, il secondo ha senso se si intende installare altre applicazioni che si baserebbero sulle stesse librerie. Inoltre, imballare l'applicazione insieme non permetterebbe che il problema del dll-hell diventasse un giorno un problema di inferno. Uno svantaggio di questo è che la dimensione del pacchetto potrebbe diventare più grande.

L'articolo consiglia anche alcuni strumenti GNU/Linux nativi che ti aiuteranno nella creazione del pacchetto. Ad esempio, xbuild può essere utilizzato per eseguire un file MSBuild che eseguirà la confezione. Ciò contribuirà a rendere le cose più familiari agli sviluppatori di Windows. Lo strumento lintian può anche aiutarti a risolvere i problemi con il file .deb prodotto. Il resto degli strumenti sono utilità intermedie invocate durante il processo di packaging di MSBuild.

+0

@Mogsdad, in effetti, hai un punto. Sfortunatamente stavo rispondendo dal mio telefono mentre ero in viaggio, quindi avevo capacità limitate di arricchire il post. L'ho aggiornato ora, quindi è possibile rimuovere il downvote –

+0

Non il mio downvote; Stavo semplicemente spiegando perché potresti ottenerli, ma rimuoverò il mio commento, grazie per aver agito. In bocca al lupo! (PS: non è necessario affrettarsi a rispondere a una domanda di 7 anni sul telefono ... l'OP è passato.) – Mogsdad

+1

Grazie a @Mogsdad, e scusami se ti biasimo senza alcuna prova, che è tanto brutto quanto un downvote o anche peggio. Devo ammettere che la data della domanda è tra le ultime cose che ho notato, e dal momento che sono entrato nella confezione di Debian il giorno prima, ho deciso di rispondere mentre ero ancora nell'hype e le informazioni rilevanti erano facili da trovare per me. Auguro tutti bene. –

Problemi correlati