dpkg-shlibdeps(1)

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

SKŁADNIA
dpkg-shlibdeps [opcje] plik_wykonywalny|-eplik_wykonywalny [opcje]

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). 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 -Splik-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).

katalog_admin/info/pakiet.symbols
    Dostarczane przez pakiet informacje o zależnościach bibliotek współdzielonych. O ile nie jest nadpisany, admindir ma wartość /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."

katalog_admin/info/package.shlibs
    Dostarczane przez pakiet informacje o zależnościach bibliotek współdzielonych. O ile nie jest nadpisany, admindir ma wartość /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 -dpole_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.

-h, --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.

UWAGI
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).

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).
    Ż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).

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 olub 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/gcc/i486-linux-gnu/4.2.3/../../../../lib/libssl.so.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).

AUTORZY
Copyright (C) 1995-1996 Ian Jackson
Copyright (C) 2000 Wichert Akkerman
Copyright (C) 2006 Frank Lichtenheld
Copyright (C) 2007-2008 Raphaël Hertzog

Niniejszy program jest oprogramowaniem wolnym, sprawdź Powszechną Licencję Publiczną GNU w wersji drugiej lub późniejszej, by dowiedzieć się o warunkach dystrybucji. Brak JAKIEJKOLWIEK gwarancji.

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