2011-09-18 21 views
21

Próbuję skompilować pakiet deb dla mojego serwera. Kiedy idę do kompilacji, wszystko wygląda dobrze, aż do momentu, gdy dojdzie do dh_usrlocal Konstrukcja zatrzymuje się i powoduje błąd. Problem polega na tym, że próbuję tego po raz pierwszy i naprawdę nie wiem, gdzie szukać problemu.Dlaczego dh_usrlocal rzuca błąd kompilacji?

To jest wyjście z mojego terminalu, zawierałem także polecenie, które uruchomiłem na dole wyjścia.

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 

Każda pomoc zostanie doceniona.

+0

Wiem dlaczego, ale nie wiem jak to obejść. Według Debiana dokumentacja deb powinna umieszczać pliki w katalogu/bin lub/usr/bin i nie powinna umieszczać pliku w/usr/local/ –

+0

Naprawdę znalazłem sposób na naprawienie problemu, zmodyfikowałem skrypt perl 'dh_usrlocal' tak problem nie wystąpił. Ale robiąc to nie jestem pewien, czy będą działać inne kompilacje. – ianc1215

+6

Modyfikowanie 'dh_usrlocal' jest * absolutnie * nie jest właściwym rozwiązaniem, na wypadek, gdyby ktoś inny tu się wydarzył. Właściwym rozwiązaniem jest, aby twój pakiet nie instalował plików w '/ usr/local', ponieważ ten obszar jest zarezerwowany do użytku lokalnego administratora. Jeśli nalegasz na użycie '/ usr/local', po prostu nie wywołuj' dh_usrlocal' w 'debian/rules'. –

Odpowiedz

25

powinieneś pominąć uruchomienie dh_usrlocal. aby to zrobić, po prostu dodaj to do debian/rules: override_dh_usrlocal:

Ogólnie, jeśli masz problem z konkretnym celem, po prostu przesłonisz go, dodając override_ {target} w swoim debian/rules.
Na przykład masz problem z dh_icons. po prostu dodać ten w debian/rules

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

dh_usrlocal robi niektóre fudging ze wszystkimi ścieżkami, które odnoszą się do/usr/local. Zobacz tutaj: http://man.he.net/man1/dh_usrlocal. Moja odpowiedź zadziałała tylko wtedy, gdy miałem dwa pliki usr/folders określone w pliku '.install', ale oznaczało to, że mój pakiet został zainstalowany w katalogu'/usr/usr/local/... 'i nie powiodło się. – NuclearPeon

3

WAŻNE: Ten błąd występuje tylko wtedy, gdy podczas próby zainstalowania na /usr/local/

przeniosłem mój pakiet do zainstalowania z /usr/local/lib/python3/dist-packages/ do /usr/lib/python3/dist-packages i błąd zniknął. dh_usrlocal wydaje się być uszkodzony lub mój pakiet nie przestrzega reguł, których oczekuje.


zacząłem uzyskiwanie błąd po dodaniu pliku package.install do mojego pakietu debian więc byłoby skopiować zawartość pakietu do systemu plików. (Ja instalacji do /usr/local/ w czasie)

zawartość mojego pliku instalacyjnego, gdy nie powiodła się:

usr/* usr/ 

Zawartość kiedy działa prawidłowo: strukturę

usr/ usr/ 

plików pakietu debian:

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

Edytuj: To wydaje się działać tylko podczas kopiowania katalogów głównych. Kiedy próbuję określić kopiowanie przeszłości usr /, zepsuje się z tym samym błędem. Zobacz górę odpowiedzi, aby znaleźć moje rozwiązanie.

+1

nie powinieneś tego robić, ponieważ twój pakiet nie jest standardowym pakietem. oprogramowanie użytkownika powinno wejść do/usr/local/.... –

+1

Całkowicie się z tobą zgadzam. Jednak kompilacja zrywa się za każdym razem, gdy określam tę ścieżkę. Nie jestem pewien, co jest wymagane do zrobienia/usr/local/work i właśnie stwierdzam, co jest wolne od błędów i rozwiązuje mój problem. Dobrze, że zwracasz na to uwagę, ale spędziłem wiele godzin właśnie na tym etapie. Mogę zgłosić błąd w Debianie lub przesiać jego fora/listy mailingowe później. – NuclearPeon

2

Właściwy pakiet Debiana nie może generować tam żadnych rzeczy, ale puste katalogi. Dlatego narzeka, że ​​nie może usunąć katalogu. Nie oczekuje, że pliki tam będą. Jedyne co możesz mieć to katalog w/usr/local i to właśnie dh_usrlocal próbuje obsłużyć , ale nie powinieneś mieć plików

Użytkownicy umieszczają tylko pliki w/usr/local /.

Również myślę, że jeśli masz nazwę usr/local w ścieżce katalogu, spowoduje to również błąd, mimo że nie jest to właściwy usr/local. Przykład tego, co może również powodować problem. Myślę, że regex w kompilacji oprogramowania szuka usr/local.

/var/tmp/usr/local/ 

Wiem, że jest to stary post, ale zajmuje on pierwsze miejsce w Google, więc potrzebuje dobrej odpowiedzi, aby ludzie szybko rozwiązali ten problem.

+0

Większość oprogramowania firm trzecich instaluje się w katalogu/usr/local. W systemie Debian jest on zarezerwowany do użytku prywatnego przez administratora systemu, więc pakiety nie powinny używać katalogów takich jak/usr/local/bin, lecz raczej używać katalogów systemowych, takich jak/usr/bin zgodnie ze standardem hierarchii plików (FHS). –

Powiązane problemy