Wyróżnikiem Gentoo jest samodzielna kompilacja bibliotek i programów. Nie uważam tego za przesadnie sensowne (szkoda czasu i prądu) ale nawet pod Debianem i Ubuntu czasem trzeba. I warto wiedzieć jak.
Trzeba w dwóch wypadkach. Jednym jest przeciąganie pakietów z nowszej czy starszej dystrybucji. Drugi, rzadki, ma miejsce gdy developerom coś się nie uda. Tak jak nie udało się ostatnio:
$ pgadmin3 pgadmin3: relocation error: pgadmin3: symbol _ZN21wxMemoryFSHandlerBase19AddFileWithMimeTypeERK8wxStringPKvjS2_, version WXU_2.8 not defined in file libwx_baseu-2.8.so.0 with link time reference
Ups.
Ta urokliwa informacja oznacza, że
pgadmin3
, dynamicznie zlinkowany zlibwx_baseu-2.8.so.0
, nie znajduje w tej bibliotece potrzebnych funkcji. Prawdobnie autorzylibwx
wgrali nową, niekompatybilną binarnie wersję (zgaduję, że jakaś metoda została przerobiona z pełnoprawnej funkcji na inline) ale zapomnieli przy tym o zmianie numeru.Niezależnie od winnego, najprostszym rozwiązaniem jest zrekompilowanie programu.
Niezbędne komendy są tylko nieznacznie trudniejsze od normalnej instalacji.
sudo apt-get build-dep pgadmin3 apt-get --compile source pgadmin3 sudo dpkg -i pgadmin3*.deb rm -rf pgadmin*.*
Wstępne build-dep
sprawdza, czy są zainstalowane wszystkie potrzebne biblioteki i
narzędzia i w razie potrzeby je doinstalowuje (build-dep
to skrót
od build dependencies czyli rzeczy potrzebne do zbudowania).
Główne apt-get source
ściąga do bieżącego katalogu źródła pakietu z repozytorium (pliki
pgadmin3_1.10.2.orig.tar.gz
- oryginalne źródła, pgadmin3_1.10.2-1.diff.gz
- nakładane na nie zmiany
autorów dystrybucji, pgadmin3_1.10.2-1.dsc
- opis pakietu, pgadmin3_1.10.2-1_i386.changes
- opis zmian)
i rozpakowywuje całość w podkatalogu pgadmin3_1.10.2
. Jeśli jest zadana opcja --compile
zostaje
też od razu uruchomiona kompilacja (która potrafi trochę potrwać), jej efektem jest powstanie
jednego lub więcej pliku .deb
(tu akurat powstają dwa, pgadmin3_1.10.2-1_i386.deb
oraz
pgadmin3-data_1.10.2-1_all.deb
).
Potem pozostaje te pliki zainstalować (zamiast dpkg -i
można się
posłużyć także dwuklikiem) i skasować niepotrzebne już archiwa,
pakiety i katalog roboczy (tu oczywiście także, kto nie lubi rm
,
może ciągać do kosza czy wciskać Del w nautilusie).
I już.
Oczywiście wszystkie numerki zależą od aktualnej wersji pakietu.
Uwaga: aby
apt-get source
mogło działać, muszą być odkomentowane wierszedeb-src
w/etc/apt/sources.list
(czyli adresy repozytoriów źródeł), co można też odklikać w konfiguracji aktualizacji.
Jeśli zachodzi potrzeba jakiegoś wpłynięcia na sposób kompilacji (tu akurat nie było to potrzebne ale zdarzyło mi się kiedyś poprawiać nazwę katalogu w Makefile jakiegoś egzotycznego pakietu, można też rozważyć korygowanie opcji optymalizacji), sekwencję odrobinę wydłużamy:
sudo apt-get build-dep pgadmin3 apt-get source pgadmin3 cd pgadmin3_1.10.2-1 # ... Tu ewentualne edycje dpkg-buildpackage sudo dpkg -i ../pgadmin3_1.10.2-1_i386.deb ../pgadmin3-data_1.10.2-1_all.deb rm -rf pgadmin*.*
Pierwszym kandydatem do edycji jest plik debian/rules
, czyli główne
Makefile, ustalające min. sposób uruchomienia configure
.