Jak i dlaczego tworzyć pakiety -dbg, -dev, -doc?

15

Piszę pakiet Ubuntu dla pakietu, który zasadniczo zawiera wiele bibliotek i nagłówków, które następnie można wykorzystać do zbudowania innego oprogramowania. Pakiet rozpada się również na mniejsze podpakiety, które są od siebie zależne; w tym sensie pakiet jest podobny do boostu.

Zauważyłem, że pakiety takie jak boost zapewniają

[...]
libboost-dbg
libboost-dev
libboost-doc
[...]
libboost-all-dev
[...]

ale nic, co nosi nazwę boostlub libboost.

  • Jaki jest tego pomysł?
  • Jakie celów -dbg, -devi -docpakiety?
  • Czy są jakieś instrukcje, jak pisać pliki kompilacji dla tych pakietów?
Nico Schlömer
źródło

Odpowiedzi:

13

Pomysł i cel

Główny powód oddzielenia tych różnych pakietów ma związek z miejscem na dysku i szybkością pobierania. Szczególnie dotyczy to przestrzeni lustrzanej, ponieważ oznacza dystrybucję wielu kopii danych. Przez wykonanie foo-common, foo-datalub foo-docpakietów Architecture: all, tylko zachować jedną kopię danych w archiwum zamiast po to skopiowane z każdej architektury (np i386, amd64, itd ...). Symbole debugowania nie są potrzebne większości użytkowników i po prostu powodują, że pobieranie pakietu trwa dłużej.

W przypadku pakietów w oficjalnych archiwach Ubuntu nie ma właściwie żadnego powodu, aby -dbgręcznie tworzyć pakiety. Maszyny kompilacyjne automatycznie -dbgsymusuwają symbole debugowania i umieszczają je w pakietach hostowanych na ddebs.ubuntu.com. (Patrz: pakiety symboli debugowania ) -dbg, które istnieją, zwykle są po prostu przenoszone z Debiana.

Instrukcje

Jeśli chodzi o implementację, spójrz na to pytanie:

W skrócie, debian/controldla każdego pakietu należy utworzyć nowe zwrotki . Następnie debian/foo-*.installnależy również utworzyć pliki. Umożliwi dh_installto umieszczenie odpowiedniej zawartości we właściwych pakietach.

foo.installDo głównego pakietu binarnego może wyglądać następująco:

usr/bin/
usr/lib/

foo-common.install, foo-data.install, foo-doc.install, Lub cokolwiek innego:

/usr/share/doc/
/usr/share/icons/
/usr/share/foo/
/usr/share/locale/

I dla foo-dev:

/usr/include/
/usr/lib/pkgconfig
/usr/lib/*.so

Utworzenie foo-dbgpakietu wymaga edycji, debian/rulesponieważ normalnie dh_stripusuwa symbole debugowania. Musimy więc zastąpić to zachowanie:

.PHONY: override_dh_strip
override_dh_strip:
        dh_strip --dbg-package=foo-dbg
andrews coś
źródło
12

Boost to złożony przykład, najpierw spójrzmy na prostszy.

Dokładnie, pakiet źródłowy openssl zapewnia 5 pakietów binarnych:

  • libssl1.0.0zawiera bibliotekę dynamiczną OpenSSL, wersja 1.0.0. Właśnie to muszą uruchamiać programy powiązane z tą biblioteką. Nazwa pakietu zawiera numer wersji, ponieważ w tym samym czasie mogą być zainstalowane inne wersje biblioteki, jeśli masz inne programy połączone z inną wersją, która nie jest binarnie zgodna z wersją 1.0.0.
  • opensslzawiera narzędzia wiersza poleceń korzystające z biblioteki OpenSSL. Nawet jeśli masz wiele wersji biblioteki, nie potrzebujesz wielu wersji tych narzędzi: jest tylko jedna /usr/bin/openssli powiązane narzędzia, dane i dokumentacja.
  • libssl-devzawiera pliki potrzebne do skompilowania programu łączącego się z OpenSSL. Istnieją pliki nagłówkowe C ( *.h), biblioteki do łączenia ( *.a, *.so) i kilka innych plików.
  • libssl-doczawiera dokumentację biblioteki OpenSSL. Potrzebujesz tego pakietu tylko wtedy, gdy zamierzasz pisać programy korzystające z biblioteki.
  • libssl1.0.0-dbgzawiera symbole debugowania. Jest przydatny tylko dla osób, które debugują bibliotekę OpenSSL lub programy, które z niej korzystają. Odpowiedź andrewsomething zawiera więcej informacji na temat tych -dbgpakietów.

Ponadto precyzja zawiera starszą wersję biblioteki libssl0.9.8, ponieważ istnieją programy, które są nadal powiązane ze starszą wersją.

Inne pakiety, które możesz zobaczyć, są powiązaniami dla języków innych niż C. OpenSSL nie jest dostarczany z żadnym (istnieją powiązania z OpenSSL dla innych języków, ale nie pochodzą z tego samego źródła). Przykładem jest sqlite3 , który jest dostarczany z powiązaniami TCL .

Głównym powodem podziału takich pakietów jest to, że różne pakiety mają różnych odbiorców docelowych. System, w którym nikt nigdy niczego nie kompiluje, potrzebuje jedynie libpakietu podstawowego i być może narzędzi wiersza poleceń; w razie potrzeby zostaną automatycznie zainstalowane z zależności. Jeśli ktoś chce skompilować program korzystający z biblioteki, potrzebuje -devpakietu. Jeśli ktoś chce napisać program korzystający z biblioteki, potrzebuje -docpakietu.

A co z Boostem? Ma tę samą strukturę, ale ponieważ Boost jest ogromną biblioteką, jest podzielony na wiele mniejszych pakietów: libboost-*1.46.1i libboost-*1.46-dev. Dokładnie, istnieje tylko jedna wersja Boost, 1.46 , ale oneiric miał zarówno 1.42, jak i 1.46 . Istnieje również domyślna wartość domyślna zwiększenia metapakietu, która pobiera wersję pakietu jako zależność.

Patrząc na libhangul , oprócz pakietu biblioteki dynamicznej libhangul1i pakietu programistycznego libhangul-dev, istnieje pakiet libhangul-data. Ten pakiet zawiera dodatkowe dane wymagane przez bibliotekę. Nawet jeśli masz wiele wersji biblioteki, mogą one udostępniać -datapakiet. Ponadto pakiet jest niezależny od architektury. Oprogramowanie zawierające dużą ilość danych niezależnych od architektury jest dzielone na pakiety zależne od architektury i niezależne od architektury, aby zaoszczędzić miejsce w witrynach dystrybucji. Innym sufiksem o podobnym znaczeniu jest -common.

Zasady pakowania Ubuntu i Debiana są bardzo podobne, więc materiały dotyczące tworzenia pakietów Debiana dotyczą także Ubuntu. W rzeczywistości możesz mieć ten sam pakiet źródłowy dla Debiana i Ubuntu; jedyną rzeczą, która wyróżnia pakiety Debian i Ubuntu, jest ich kompilacja z różnymi wersjami bibliotek m, a to tylko różnica między różnymi wydaniami Ubuntu. Przygotuj dokumentację dewelopera Debiana , zwłaszcza Podręcznik Polityki Debiana i Dokumentację dla programistów ; zapoznaj się ze wstępem do Przewodnika nowego administratora. Zignoruj ​​części dotyczące pracy z projektem Debian i tak dalej, po prostu przeczytaj części dotyczące tworzenia pakietu.dh_make to dobry sposób na rozpoczęcie pracy z pakietem deb (wybierz „Biblioteka”).

Gilles „SO- przestań być zły”
źródło