Scroll to navigation

dpkg-shlibdeps(1) programy pomocnicze dpkg dpkg-shlibdeps(1)

NAZWA

dpkg-shlibdeps - generowanie zależności podstawień współdzielonych bibliotek

SKŁADNIA

dpkg-shlibdeps [opcja...] [-e]plik-wykonywalny [opcja...]

OPIS

dpkg-shlibdeps określa zależności podstawień współdzielonych bibliotek dla plików wykonywalnych podanych jako argumenty. Zależności te są dodawane do pliku podstawień zmiennych debian/substvars jako zmienne shlibs:pole-zależności, przy czym pole-zależności jest nazwą odpowiedniego pola zależności. Wszystkie inne zmienne rozpoczynające się od shlibs: są usuwane z tego pliku.
dpkg-shlibdeps ma dwa źródła informacji służące do generowania informacji o zależnościach. Są to pliki symbols lub pliki shlibs. Dla każdego pliku binarnego analizowanego przez dpkg-shlibdeps określana jest lista bibliotek, z którymi jest on linkowany. Następnie dla każdej biblioteki przeglądany jest plik symbols lub plik shlibs (jeśli ten pierwszy nie istnieje, lub gdy debian/shlibs.local zawiera stosowną zależność). Oba pliki powinny być dostarczane przez pakiet zawierający bibliotekę i powinny więc być dostępne jako /var/lib/dpkg/info/ pakiet. symbols lub /var/lib/dpkg/info/ pakiet.shlibs. Nazwa pakietu jest określana w dwóch krokach: odnalezienie pliku biblioteki w systemie (sprawdzając w tych samych katalogach, których używa ld.so), a następnie użycie dpkg -S plik-biblioteki w celu określenia pakietu dostarczającego daną bibliotekę.

Pliki symboli

Pliki symboli zawierają dokładniejsze określenia informacji o zależnościach, dostarczając minimum zależności dla każdego symbolu eksportowanego przez bibliotekę. Skrypt próbuje odnaleźć plik związany z pakietem biblioteki w następujących miejscach (użyte jest pierwsze dopasowanie):
debian/*/DEBIAN/symbols
Informacje o współdzielonej bibliotece wygenerowane w bieżącym procesie budowy, który wywołał również dpkg-shlibdeps. Są one generowane przez dpkg-gensymbols(1). Są używane tylko, gdy biblioteka znajduje się w drzewie budowania pakietu. Plik "symbols" z tego drzewa ma pierwszeństwo nad plikami symboli z innych pakietów binarnych.
/etc/dpkg/symbols/pakiet.symbols.arch
/etc/dpkg/symbols/pakiet.symbols
Informacje o zasięgu systemu, które nadpisują informacje o zależnościach bibliotek współdzielonych. arch jest architekturą bieżącego systemu (określoną przez dpkg-architecture -qDEB_HOST_ARCH).
Wynik z "dpkg-query --control-path pakiet symbols"
Dostarczane przez pakiet informacje o zależnościach bibliotek współdzielonych. O ile nie jest nadpisany przez --admindir, pliki te są położone w /var/lib/dpkg.
Podczas przeszukiwania symboli używanych przez wszystkie pliki binarne, dpkg-shlibdeps zapamiętuje (największą) minimalną wersję wymaganą dla każdej biblioteki. Na końcu procesu jest więc w stanie wypisać minimalne zależności dla każdej użytej biblioteki (pod warunkiem, że informacja z plików symbols jest dokładna).
Jako zabezpieczenie plik symboli może zawierać pole metainformacji Build-Depends-Package, zaś dpkg-shlibdeps określając minimalną wersję wymaganą przez odpowiadający pakiet z pola Build-Depends będzie używać właśnie tej wersji, jeśli jest ona wyższa niż minimalna wersja określona dzięki przeszukiwaniu symboli.

Pliki "shlibs"

Pliki "shlibs" wiążą bezpośrednio bibliotekę z zależnościami (bez przeglądania symboli). Jest to więc często silniejsze niż naprawdę potrzebne, ale bardzo bezpieczne i łatwe w obsłudze.
Zależności dla biblioteki są wyszukiwane w kilku miejscach. Używany jest pierwszy plik zawierający informacje dla danej biblioteki:
debian/shlibs.local
Lokalne informacje z pakietu nadpisujące informacje o zależnościach bibliotek współdzielonych.
/etc/dpkg/shlibs.override
Informacje o zasięgu systemu, które nadpisują informacje o zależnościach bibliotek współdzielonych.
debian/*/DEBIAN/shlibs
Informacje o zależnościach współdzielonych bibliotek wygenerowane w bieżącym procesie budowy, który wywołał również dpkg-shlibdeps. Są używane tylko, gdy biblioteka znajduje się w drzewie budowania pakietu. Plik "shlibs" z tego drzewa ma pierwszeństwo nad plikami shlibs z innych pakietów binarnych."
Wynik z "dpkg-query --control-path pakiet shlibs"
Dostarczane przez pakiet informacje o zależnościach bibliotek współdzielonych. O ile nie jest nadpisany przez --admindir, pliki te są położone w /var/lib/dpkg.
/etc/dpkg/shlibs.default
Domyślna informacja o zależnościach bibliotek współdzielonych, o zakresie systemu.
Uzyskane zależności są używane bezpośrednio (chyba, że są odfiltrowane ponieważ zostały zidentyfikowane jako duplikaty lub słabsze niż jakaś inna zależność).

OPCJE

dpkg-shlibdeps interpretuje parametry nie będące opcjami jako nazwy plików wykonywalnych, tak jakby były podane przez -eplik_wykonywalny.
-eplik-wykonywalny
Włączenie zależności odpowiadających bibliotekom współdzielonym wymaganym przez plik-wykonywalny.
-dpole-zależności
Dodanie zależności, które mają być dodane do pola zależności pole-zależności pliku kontrolnego (zależności dla tego pola są umieszczane w zmiennej shlibs:pole-zależności).
 
Opcja -dpole-zależności wpływa na wszystkie pliki wykonywalne podane po tej opcji, aż do następnego -d pole-zależności. Domyślnym polem-zależności jest Depends.
 
Jeśli to samo określenie zależności (lub zbiór alternatyw) pojawia się w więcej niż jednej nazwie z rozróżnianych pól zależności Pre-Depends, Depends, Recommends, Enhances lub Suggests to dpkg-shlibdeps automatycznie usunie zależność ze wszystkich pól, poza polem reprezentującym najważniejsze zależności.
-pprefiks-nazw-zmiennych
Rozpoczynanie nazw zmiennych podstawiania od prefiks-nazw-zmiennych : zamiast shlibs:. Podobnie, wszystkie zmienne rozpoczynające się od prefiks-nazw-zmiennych : (zamiast shlibs:) są usuwane z pliku zmiennych podstawiania.
-O
Wyświetlenie ustawień zmiennych podstawiania na standardowe wyjście, zamiast dodawania ich do pliku zmiennych podstawiania (domyślnie debian/substvars).
-ttyp
Preferowanie informacji o zależnościach bibliotek współdzielonych oznaczonych dla danego typu pakietu. Jeśli informacji oznaczonych nie ma, używane są informacje bez oznaczeń. Domyślnym typem pakietu jest "deb". Informacje o zależnościach bibliotek współdzielonych są oznaczane dla danego typu pakietu przez poprzedzenie ich nazwą typu, dwukropkiem oraz białymi znakami (spacjami).
-Llokalny-plik-shlibs
Odczyt nadpisań informacji o bibliotekach współdzielonych z lokalnego-pliku-shlibs zamiast debian/shlibs.local.
-Tplik-zmiennych-podst
Zapis zmiennych podstawiania w pliku plik-zmiennych-podst; domyślnie jest to debian/substvars.
-v
Włączenie dodatkowych informacji. Wyświetlanych jest wiele komunikatów tłumaczących działanie dpkg-shlibdeps.
-xpakiet
Wyłączenie pakietu z generowanych zależności. Użyteczne aby zapobiec zależnościom pakietu od samego siebie dla pakietów dostarczających binaria typu ELF (pliki wykonywalne lub biblioteki), które zależą od innej biblioteki zawartej w tym samym pakiecie. Ta opcja może być użyta wielokrotnie aby wyłączyć kilka pakietów.
-Skatalog-budowania-pakietu
Przeglądanie najpierw katalogu-budowania-pakietu przy próbie odnalezienia biblioteki. Przydatne gdy pakiet źródłowy tworzy wiele odmian tej samej biblioteki, a chce się zapewnić uzyskanie zależności od określonego pakietu binarnego. Ta opcja może być użyta wielokrotnie: katalogi będą przeglądane w tej samej kolejności przed katalogami innych pakietów binarnych.
--ignore-missing-info
Kontynuacja pomimo braku informacji o zależnościach dla biblioteki współdzielonej. Odradza się używanie tej opcji, wszystkie biblioteki powinny dostarczać informacje o zależnościach (w postaci plików shlibs lub plików symboli) - nawet jeśli nie są jeszcze używane przez inne pakiety.
--warnings=wartość
wartość jest polem bitowym definiującym zbiór ostrzeżeń, które mogą być wysłane przez dpkg-shlibdeps. Bit 0 (wartość=1) włącza ostrzeżenie "w żadnej z bibliotek nie znaleziono symbolu symb używanego przez plik-binarny", bit 1 (wartość=2) włącza ostrzeżenie "można by uniknąć zależności od biblioteki bibl", zaś bit 2 (wartość=4) włącza ostrzeżenie " plik-binarny nie powinien być linkowany z biblioteką". Domyślną wartością jest 3: pierwsze dwa ostrzeżenia są domyślnie aktywne, zaś ostatnie nie. Ustawienie wartości na 7 powoduje aktywację wszystkich ostrzeżeń.
--admindir=katalog
Zmienia położenie bazy danych dpkg. Domyślnie jest to /var/lib/dpkg.
-?, --help
Wyświetla informację o użytkowaniu i kończy działanie.
--version
Wyświetla informację o wersji i pomyślnie kończy działanie.

OSTRZEŻENIA

Ponieważ dpkg-shlibdeps analizuje zbiór symboli używanych przez każdy plik binarny generowanego pakietu, jest w stanie wysyłać ostrzeżenia w pewnych przypadkach. Informują one o rzeczach, które mogą być ulepszone w pakiecie. W większości przypadków dotyczy to bezpośrednio oryginalnych źródeł. Poniżej zebrane są ostrzeżenia na jakie można natrafić, w kolejności malejącej ważności:
w żadnej z bibliotek nie znaleziono symbolu symb używanego przez plik_binarny
Wskazany symbol nie został odnaleziony w żadnej z bibliotek, z którymi jest linkowany plik binarny. Taki plik_binarny jest najpewniej biblioteką i powinien być linkowany z dodatkową biblioteką podczas budowania pakietu (opcja -lbiblioteka linkera).
plik_binarny zawiera nierozwiązywalne odniesienie do symbolu sym: prawdopodobnie jest to wtyczka
Wskazany symbol nie został odnaleziony w żadnej z bibliotek, z którymi jest linkowany plik binarny. Taki plik_binarny jest najpewniej wtyczką i jest prawdopodobnie dostarczany wraz z programem, który ładuję taką wtyczkę. Teoretycznie wtyczka nie powinna mieć pola SONAME, jednak ten plik binarny je posiada i nie można go zidentyfikować na tej podstawie. Fakt, iż plik ten jest umieszczony w niepublicznym katalogu mocno wskazuje na to, że nie jest on zwykłą biblioteką współdzieloną. Jeśli plik binarny rzeczywiście jest wtyczką, można pominąć to ostrzeżenie. Jednak zawsze istnieje możliwość, że jest to biblioteka i programy z nią linkowane używają RPATH, aby dynamiczny loader był w stanie ją odnaleźć. W takim przypadku bibliotekę można uznać za zepsutą i należy ją naprawić.
można by uniknąć zależności od bibliotekijeżeli nie byłoby niepotrzebnego linkowania pliku-binarnego z nią (nie jest używany żadny z tamtejszych symboli)
Żaden z plików_binarnych, które są linkowane z biblioteką nie używa symboli przez nią udostępnianych. Poprawiając wszystkie pliki binarne można uniknąć zależności związanych z tą biblioteką (chyba, że taka sama zależność jest również generowana przez inną bibliotekę, która jest faktycznie używana).
można by uniknąć zależności od biblioteki, jeżeli nie byłoby niepotrzebnego linkowania plików-binarnych z nią (nie są używane żadne z tamtejszych symboli).
Dokładnie to samo co powyżej, tylko dla kilku plików binarnych.
plik-binarny nie powinien być linkowany z biblioteką (nie są używane żadne z tamtejszych symboli).
plik_binarny jest linkowany z biblioteką, której nie potrzebuje. Nie jest to problem, ale można uzyskać pewną poprawę wydajności czasu ładowania pliku binarnego, jeśli biblioteka ta nie będzie z nim linkowana. To ostrzeżenie sprawdza te same informacje co poprzednie, ale wykonuje to dla każdego pliku binarnego zamiast wykonywania globalnego sprawdzenia dla wszystkich analizowanych plików.

BŁĘDY

dpkg-shlibdeps przerwie działanie z błędem jeśli nie będzie w stanie znaleźć publicznej biblioteki używanej przez plik binarny, lub jeśli biblioteka taka nie będzie mieć powiązanej informacji o zależnościach (pliku shlibs lub pliku symboli). Publiczne biblioteki mają SONAME i są wersjonowane (jak np. libsomething.so. X). Biblioteki prywatne (jak np. wtyczki) nie powinny mieć SONAME i nie muszą być wersjonowane.
nie można znaleźć biblioteki soname-biblioteki potrzebnej dla pliku_binarnego (RPATH to "rpath")
plik_binarny używa biblioteki o nazwie soname-biblioteki, ale dpkg-shlibdeps nie mógł odnaleźć tej biblioteki. dpkg-shlibdeps tworzy listę katalogów do sprawdzenia w następujący sposób: katalogi wymienione w RPATH pliku binarnego, katalogi wymienione w /etc/ld.so.conf, katalogi wymienione w zmiennej środowiskowej LD_LIBRARY_PATH, oraz standardowe katalogi publiczne (/lib, /usr/lib, /lib32, /usr/lib32, /lib64, /usr/lib64). Następnie sprawdza podobnie katalogi w drzewie budowania pakietu dla analizowanego pliku binarnego, w drzewach budowania pakietów podanych jako parametry opcji -S, w innych drzewach budowania zawierających pliki DEBIAN/shlibs lub DEBIAN/symbols, a na końcu w katalogu głównym. Jeśli biblioteka nie zostanie odnaleziona w żadnym z tych katalogów, otrzymuje się ten błąd.
 
Jeśli nie odnaleziona biblioteka jest w prywatnym katalogu tego samego pakietu, należy dodać taki katalog do LD_LIBRARY_PATH. Jeśli biblioteka jest w innym budowanym binarnym pakiecie, należy upewnić się, że plik shlibs lub plik symboli dla tego pakietu został stworzony oraz, że LD_LIBRARY_PATH zawiera odpowiedni katalog jeśli biblioteka także jest w katalogu prywatnym.
nie znaleziono informacji o zależnościach dla plik-biblioteki (używanego przez plik-binarny).
Biblioteka wymagana przez plik-binarny została znaleziona przez dpkg-shlibdeps w pliku-biblioteki, ale dpkg-shlibdeps nie mógł odnaleźć żadnej informacji o zależnościach dla tej biblioteki. Aby określić zależności, podjęto próbę użycia dpkg -Splik-biblioteki w celu określenia pakietu dostarczającego daną bibliotekę. Następnie sprawdzono odpowiednie pliki shlibs i pliki symboli w /var/lib/dpkg/info/ oraz w różnych drzewach budowania pakietów (debian/*/DEBIAN/).
 
To niepowodzenie może być spowodowane przez niepoprawny lub nieistniejący plik shlibs lub plik symboli w pakiecie biblioteki. Może się również zdarzyć jeśli biblioteka jest budowana wewnątrz tego samego pakietu źródłowego, a pliki shlibs jeszcze nie zostały stworzone (w takim przypadku należy poprawić debian/rules aby shlibs były tworzone przed wywołaniem dpkg-shlibdeps). Niewłaściwa wartość RPATH może również powodować, że biblioteka zostanie odnaleziona pod nietypową nazwą, która nie jest związana z żadnym pakietem (np. /usr/lib/openoffice.org/../lib/libssl.so.0.9.8 zamiast /usr/lib/libssl.so.0.9.8). dpkg-shlibdeps próbuje poradzić sobie z tym starając się odczytać nazwę kanoniczną (z użyciem realpath(3)) ale może to nie zawsze zadziałać. Aby uniknąć problemów, najlepiej jest zawsze doprowadzić do porządku RPATH pliku binarnego.
 
Wywołanie dpkg-shlibdeps w trybie rozszerzonej informacji (-v) dostarcza wielu dodatkowych informacji o tym, gdzie próbował on znaleźć informację o zależnościach. Może to być przydatne jeśli nie wiadomo dlaczego zwracany jest ten błąd.

ZOBACZ TAKŻE

deb-shlibs(5), deb-symbols(5), dpkg-gensymbols(1).

TŁUMACZE

Piotr Roszatycki <dexter@debian.org>, 1999
 
Bartosz Feński <fenio@debian.org>, 2004-2005
 
Robert Luberda <robert@debian.org>, 2006-2008
 
Wiktor Wandachowicz <siryes@gmail.com>, 2008
 
Michał Kułach <michal.kulach@gmail.com>, 2012
2012-05-04 Projekt Debian