Jak sfałszować zainstalowaną wersję pakietu?

23

Będąc wcześnie adoptowanym i używającym codziennych wersji 11.04, czasami spotykam się z sytuacją, gdy niektóre pakiety wymagają wcześniejszych wersji innych pakietów niż te, które zainstalowałem. Zwykle nowsze (ale odrzucone) wersje potrzebnych pakietów zapewniają pełną funkcjonalność swoich starszych wersji.

Jeśli użyję dpkg -i --force-depends-versiondo zainstalowania pakietów zależnych, wszystko działa dobrze, nigdy nie widziałem problemu.

Czy zamiast ręcznie pobierać i instalować każdy pakiet, mogę po prostu udawać, że system ma zainstalowaną określoną wersję pakietu, gdy jest nowsza? Czy istnieje --force-depends-versionkluczowy odpowiednik apt-get?

Ivan
źródło

Odpowiedzi:

16

Możesz użyć pakietu equivs Zainstaluj ekwiwalenty , aby utworzyć fikcyjny pakiet, aby sfałszować instalowany pakiet. Kilka instrukcji tutaj .

frabjous
źródło
Chociaż to wystarczy. Ale link może prędzej czy później się zepsuć. Lepiej mieć przynajmniej wznowione instrukcje w odpowiedzi. Moja odpowiedź może pomóc tutaj askubuntu.com/a/1181415/26246 . Możemy więc odnieść się do tego pytania, które ma wyższy głos w sprawie ekwiwalentów.
user.dz
23

Pomimo odpowiedzi, która została już zaakceptowana, wprowadzenie przyjętej lepiej oddaje proces:

  1. Istnieje pakiet Debian o nazwie, equivsktóry może tworzyć atrapy pakietów. Zainstaluj, uruchamiającsudo apt-get install -y equivs

  2. Po zainstalowaniu generujesz plik „kontrolny” szablonu za pomocą następującego polecenia: equivs-control postfix(zamień postfixna nazwę pakietu). W moim przypadku mógłbym użyć alternatywnej nazwy pakietu, np. postfix-customLub cokolwiek innego, ale mój niestandardowy pakiet się spełni lub Provideszależność instalacji postfix(ponownie zamieniając postfixna dowolny pakiet, który chcesz.

  3. Po wygenerowaniu pliku kontrolnego szablonu zazwyczaj usuwam wiele skomentowanych instrukcji (instrukcji zaczynających się od #). Jednym z nich, które chciałbym zachować, jest Provides:stwierdzenie, w którym mogę powiedzieć, że mój pakiet zapewnia możliwości oferowane przez inny pakiet, który próbuję sfałszować, np. Provides: postfixMówi mechanizmowi rozwiązywania zależności Debian / Ubuntu, że mój pakiet - niezależnie od nazwy - zapewnia te same możliwości pakietu docelowego, ponownie postfixlub cokolwiek innego. To pozwala mi nazwać mój pakiet niezależnie od pakietu docelowego, aby uniknąć nieporozumień. Erlang Factory robi to ze swoimi rzeczami, np . esl-erlangZapewnia erlang.

  4. Wreszcie, po utworzeniu pliku kontrolnego szablonu, możesz equivs-buildwygenerować fałszywy pakiet, np equivs-build /path/to/generated/control/file.

  5. Zbudowanie pakietu zajmuje kilka sekund, a następnie można uruchomić sudo dpkg -i my_package_name*.deb

Dla zaawansowanych użytkowników, jeśli plik kontrolny szablonu ma Requires:linię zależności, możesz użyć narzędzia takiego jak gdebiinstalacja pakietu, a także różnych pakietów, które deklaruje jako zależności.

Jonathan Oliver
źródło