2011-09-18 15 views
21

Sto provando a compilare un pacchetto deb per il mio server. Quando vado a costruire, tutto sembra a posto finchè non arriva a dh_usrlocal La compilazione si interrompe e rende un errore restituito. Il problema è che sto provando questo per la prima volta e davvero non so dove cercare il problema.Perché dh_usrlocal genera un errore di compilazione?

Questo è l'output dal mio terminale, ho anche incluso il comando che ho eseguito nella parte inferiore dell'output.

make[2]: Leaving directory `/home/ian/Desktop/scst-2.1.0/src' 
make[1]: Leaving directory `/home/ian/Desktop/scst-2.1.0' 
    dh_install 
    dh_installdocs 
    dh_installchangelogs 
    dh_installexamples 
    dh_installman 
    dh_installcatalogs 
    dh_installcron 
    dh_installdebconf 
    dh_installemacsen 
    dh_installifupdown 
    dh_installinfo 
    dh_pysupport 
    dh_installinit 
    dh_installmenu 
    dh_installmime 
    dh_installmodules 
    dh_installlogcheck 
    dh_installlogrotate 
    dh_installpam 
    dh_installppp 
    dh_installudev 
    dh_installwm 
    dh_installxfonts 
    dh_bugfiles 
    dh_lintian 
    dh_gconf 
    dh_icons 
    dh_perl 
    dh_usrlocal 
dh_usrlocal: debian/scst/usr/local/include/scst/scst.h is not a directory 
dh_usrlocal: debian/scst/usr/local/include/scst/scst_user.h is not a directory 
dh_usrlocal: debian/scst/usr/local/include/scst/Module.symvers is not a directory 
dh_usrlocal: debian/scst/usr/local/include/scst/scst_debug.h is not a directory 
dh_usrlocal: debian/scst/usr/local/include/scst/scst_const.h is not a directory 
dh_usrlocal: debian/scst/usr/local/include/scst/scst_sgv.h is not a directory 
rmdir: failed to remove `debian/scst/usr/local/include/scst': Directory not empty 
dh_usrlocal: rmdir debian/scst/usr/local/include/scst returned exit code 1 
make: *** [binary] Error 1 
dpkg-buildpackage: error: debian/rules binary gave error exit status 2 
[email protected]:~/Desktop/scst-2.1.0$ sudo dpkg-buildpackage -rfakeroot 

Qualsiasi aiuto sarebbe apprezzato.

+0

So perché, ma non so come aggirarlo. Secondo Debians la documentazione debs dovrebbe mettere i file in/bin o/usr/bin e che non dovrebbe mettere un file in/usr/local/ –

+0

ho effettivamente trovato un modo per risolvere il problema, ho modificato lo script perl 'dh_usrlocal' quindi il problema non si è verificato. Ma nel farlo non sono sicuro che altre build funzioneranno. – ianc1215

+6

La modifica di 'dh_usrlocal' è * assolutamente * non la soluzione giusta per questo, nel caso che qualcun altro accada da qui. La soluzione corretta è che il pacchetto non installi i file in/usr/local', poiché tale area è riservata all'amministratore locale. Se insisti a usare '/ usr/local', allora non chiamare' dh_usrlocal' in 'debian/rules'. –

risposta

25

si dovrebbe saltare in esecuzione dh_usrlocal. per farlo basta aggiungere questo alla debian/rules: override_dh_usrlocal:

In maniera generale, se hai un problema con un target specifico, basta ignorare aggiungendo override_ {target} nei tuoi debian/rules.
esempio, hai un problema con dh_icons. basta aggiungere questo nel tuo debian/rules

override_dh_icons: 
    {insert your processing commands or do nothing to skip it when building package} 
+1

dh_usrlocal fa qualche confusione con tutti i percorsi relativi a/usr/local. Vedi qui: http://man.he.net/man1/dh_usrlocal. La mia risposta funzionava solo quando avevo specificato entrambe le cartelle usr/nel mio file '.install', ma ciò significava che il mio pacchetto era installato in/usr/usr/local/... e non funzionava. – NuclearPeon

3

IMPORTANTE: Questo errore si verifica solo quando si tenta di installare a /usr/local/

ho spostato il mio pacchetto da installare /usr/local/lib/python3/dist-packages/-/usr/lib/python3/dist-packages e l'errore scomparve. dh_usrlocal sembra essere rotto o il mio pacchetto non rispetta le regole che si aspetta.


ho iniziato a ricevere l'errore dopo l'aggiunta di un file package.install al mio pacchetto Debian quindi sarebbe copiare il contenuto del pacchetto per il file system. (Stavo installando a /usr/local/ al momento)

contenuto del mio file di installazione quando non è riuscito:

usr/* usr/ 

Contenuto quando funziona correttamente: struttura

usr/ usr/ 

file di pacchetto Debian:

packagename-0.1/ 
    debian/ 
    usr/ 
    local/ 
     lib/ 
     python3/ 
      packagename/ 

Modifica: Sembra funzionare solo quando si copiano le directory root. Una volta che provo a specificare la copia passata di usr /, si interrompe con lo stesso errore. Vedi il massimo della risposta per trovare la mia soluzione.

+1

non dovresti farlo poiché il tuo pacchetto non è un pacchetto standard. il software dell'utente dovrebbe andare in/usr/local/.... –

+1

Sono completamente d'accordo con te. Tuttavia, la costruzione si interrompe ogni volta che si specifica tale percorso. Sono incerto su ciò che è necessario per rendere/usr/local/work e sto solo affermando ciò che è privo di errori e risolve il mio problema. È bene che tu me lo indichi, ma ho passato ore ad arrivare a questo punto. Potrei presentare un bug su Debian o setacciare i loro forum/mailing list più tardi. – NuclearPeon

2

Un pacchetto Debian appropriato non è consentito generare roba lì ma directory vuote. Ecco perché si lamenta che non è possibile eliminare la directory. L'unica cosa che puoi avere è una directory in/usr/local e questo è ciò che dh_usrlocal cerca di gestire ma non dovresti avere file

Gli utenti mettono solo i file in/usr/local /.

Inoltre, penso che se si utilizza il nome usr/local nel percorso della directory, si verificherà anche l'errore anche se non è il usr/local corretto. Un esempio di cosa potrebbe causare anche il problema. Penso che la regex nel software di build cerchi usr/local.

/var/tmp/usr/local/ 

So che questo è un vecchio post, ma è alla posizione # 1 su google così bisogno di una buona risposta così le persone a risolvere questo problema in fretta.

+0

La maggior parte dei software di terze parti si installa nella directory/usr/local. In Debian, è riservato per uso privato dall'amministratore di sistema, quindi i pacchetti non dovrebbero usare directory come/usr/local/bin, ma piuttosto usare directory di sistema come/usr/bin in accordo con File hierarchy standard (FHS). –

Problemi correlati