Jump to content
MarekZ

Jak Rozwiązać Konflikt Pakietów

Recommended Posts

Witam.

Jak poradzić sobie w sytuacji kiedy potrzebne są dwie różne wersje tego samego pakietu.

dnf daje komunikat że w systemie jest już zainstalowany pakiet w nowszej wersji i w związku z tym starszy pakiet jest w konflikcie?

Share this post


Link to post
Share on other sites

Nie bardzo wyobrażam sobie taką sytuację. Albo rybka albo akwarium.

Próbowałbym ewentualnie wrzucić biblioteki do jakiegoś osobnego drzewka pakietu i stworzyłbym skrypt startowy wskazujący na tę strukturę a nie na domyślną, systemową. Ale w praktyce przy bardziej skomplikowanych zależnościach mogłoby to oznaczać zrobienie niemal drugiego "roota".

Z ciekawości zapytam po co Ci to? Nie możesz znaleźć pakietu na nowszą lub starszą wersję biblioteki? Jakie programy się konfliktują przez tę bibliotekę?

 

[EDIT]

Jak masz dużo RAM, wielordzeniowy procesor, to przychodzi mi jeszcze do głowy jakaś minimalna maszyna wirtualna uruchamiana w seamless mode. Ale to żre RAM i zabiera moc obliczeniową z podstawowego systemu a i wydajność oraz czas uruchamiania nie musi być zadowalający. Wszystko w sumie zależy od aplikacji.

Share this post


Link to post
Share on other sites

Najprościej przebudować pakiet, by używał nowszej wersji.

Na siłę można także skorzystać z opcji instalacyjnych pakietu rpm.
Przykładowo potrzebujesz starszej "innej" wersji biblioteki niż dostępna w systemie:

# rpm -i --relocate /usr/lib=/usr/local/lib inna_wersja_pakietu

Uruchomienie programu zależnego od innej wersji lib:

$ LD_PRELOAD=/usr/local/lib/alternatywny_lib PROGRAM
$ PROGRAM

 

***

 

Dla odinstalowania alternatywnej wersji biblioteki, lub w razie problemów z "update systemu" w przyszłości:

 

# rpm -e --nodeps alternatywny_pakiet-wersja

# update systemu

# rpm -i --relocate /usr/lib=/usr/local/lib inna_wersja_pakietu

Share this post


Link to post
Share on other sites

Nie bardzo wyobrażam sobie taką sytuację. Albo rybka albo akwarium.

Próbowałbym ewentualnie wrzucić biblioteki do jakiegoś osobnego drzewka pakietu i stworzyłbym skrypt startowy wskazujący na tę strukturę a nie na domyślną, systemową. Ale w praktyce przy bardziej skomplikowanych zależnościach mogłoby to oznaczać zrobienie niemal drugiego "roota".

Z ciekawości zapytam po co Ci to? Nie możesz znaleźć pakietu na nowszą lub starszą wersję biblioteki? Jakie programy się konfliktują przez tę bibliotekę?

 

[EDIT]

Jak masz dużo RAM, wielordzeniowy procesor, to przychodzi mi jeszcze do głowy jakaś minimalna maszyna wirtualna uruchamiana w seamless mode. Ale to żre RAM i zabiera moc obliczeniową z podstawowego systemu a i wydajność oraz czas uruchamiania nie musi być zadowalający. Wszystko w sumie zależy od aplikacji.

Było by super gdyby tak było można.

Generalnie pytanie o te biblioteki było spowodowane dwoma sytuacjami potrzebą kompilacji ze źródeł oprogramowania (brak rpm lub bardzo długi czas oczekiwania na najnowszą wersję)

a druga sytuacja to wtyczka w programie która do instalacji potrzebuje bibliotek tyle że z najnowszymi nie działa.

Share this post


Link to post
Share on other sites

Najprościej przebudować pakiet, by używał nowszej wersji.

 

Na siłę można także skorzystać z opcji instalacyjnych pakietu rpm.

Przykładowo potrzebujesz starszej "innej" wersji biblioteki niż dostępna w systemie:

 

# rpm -i --relocate /usr/lib=/usr/local/lib inna_wersja_pakietu

 

Uruchomienie programu zależnego od innej wersji lib:

 

$ LD_PRELOAD=/usr/local/lib/alternatywny_lib PROGRAM

$ PROGRAM

 

***

 

Dla odinstalowania alternatywnej wersji biblioteki, lub w razie problemów z "update systemu" w przyszłości:

 

# rpm -e --nodeps alternatywny_pakiet-wersja

# update systemu

# rpm -i --relocate /usr/lib=/usr/local/lib inna_wersja_pakietu

ta opcja z przebudową pakietów by była bardzo dobra. Znasz może jakiś dobry poradnik na ten temat i na temat budowy pakietów, taki dla osub które jeszcze nigdy tego nie robiły?

Share this post


Link to post
Share on other sites

Podstawowe informacje:

https://fedoraproject.org/wiki/How_to_create_an_RPM_package

 

Paczki dla siebie możesz budować tak:

 

Zależności:

# dnf install @development-tools

# dnf install fedora-packager

# dnf install rpmdevtools

 

z konta użytkownika:

$ rpmdev-setuptree

 

stworzy wymaganą strukturę katalogów na koncie użytkownika i to prawie wszystko ;)

 

Potrzebujesz pakiet src.rpm z fedory, instalujesz go na koncie użytkownika

$ rpm -ivh pakiet.src.rpm

 

budowanie paczek z pliku spec pakietu bez budowania pakietu źródłowego:

$ rpmbuild -bb --define 'dist .Twoje_oznaczenie_pakietu' --clean --target $(uname -m) $(rpm --eval %{_specdir})/xx.spec

 

lub z budowaniem pakietu srpm

$ rpmbuild -ba --define 'dist .Twoje_oznaczenie_pakietu' --clean --target $(uname -m) $(rpm --eval %{_specdir})/xx.spec

 

xx - nazwa pliku spec budowanego pakietu, znajdziesz go w ~/rpmbuild/SPEC/xx.spec

 

Jeżeli w pliku spec występuje fraza

Release: 1%{?dist}

to 'dist .Twoje_oznaczenie_pakietu' pojawi się w nazwie zbudowanego pakietu.

 

Gdy nie będziesz miał odpowiednich zależności do budowania pakietu, rpmbuild wypisze co musisz doinstalować.

 

Po pomyślnym budowaniu pakiety znajdziesz w ~/rpmbuild/RPMS/

 

***

 

Można także bez ingerencji w plik spec przebudować bezpośrednio sam pakiet src.rpm, przykład:

$ rpmbuild --rebuild --target $(uname -m) pakiet.src.rpm

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...