Instalujesz poszczególne wersje, gdy repo ma nowsze wersje?

13

Przygotujmy metapakiet, który zależy od następujących pakietów

Depends: A (=2),
 B (=2),
 C (=2)

Uwaga „=” - chcę zainstalować te konkretne wersje, a nie najnowsze.

Do tego:

B zależy od A (> = 1)

C zależy od B (> = 1) i A (> = 1)

Jeśli najnowsze wersje A, B, C w repozytorium to 2, to działa.

Ponieważ umieściłem wersję 3 A i wersję 3 B w repo sudo apt-get install mój-meta-pakiet odmawia zakończenia następującymi informacjami:

The following packages have unmet dependencies:
  my-meta-package: Depends: B (= 2) but 3 is to be installed
                   Depends: A (= 2) but 3 is to be installed

Jeśli ręcznie zainstaluję wersje 2 A i B, wówczas metapakiet instaluje się poprawnie, co zdecydowanie sugeruje, że nie ma ukrytej zależności od A3 lub B3. Nie jest to rozwiązanie problemu, ponieważ metapakiet jest instalowany automatycznie na wielu komputerach.

PYTANIE: Co zrobić, aby sudo apt-get install my-meta-package install wersje 2,2,2?

Ponadto, czy jest sposób, aby uzyskać dodatkowe informacje, co tak naprawdę powoduje potrzebę wersji 3 A i wersji 3 B?

tymtam
źródło
Och, nie przeczytałem całego pytania przed udzieleniem odpowiedzi. Czy możesz po prostu przepakować metapakiet?
int_ua
2
@int_ua Nie rozumiem, co zrobiłoby przepakowywanie metapakietu.
tymtam
@belacqua - jestem z tobą, ale potrzebujemy rzetelnej odpowiedzi, która obejmuje to, co dzieje się, gdy występują odwrócenia i zerwane zależności itp.
RobotHumans
Czy plik kontrolny twojego metapakietu zawiera jawną wersję liczby pakietów zależnych, takich jak (a=2), (b=2)?
Anwar

Odpowiedzi:

11

Musisz wybrać poszczególne wersje do zainstalowania i zainstalować je wszystkie w tym samym czasie, gdy instalujesz metapakiet.

sudo apt-get install meta-package package1=2 package2=2 package3=2

Jak mówi odpowiedź int_ua , możesz znaleźć odwrotne zależności za pomocą tego:

apt-cache rdepends package

Jeśli chcesz dowiedzieć się więcej informacji o dowolnym z tych pakietów ( dostępne wersje, zależności i wiele więcej ), skorzystaj z tego:

apt-cache show package

Po zakończeniu ich instalowania i chęci utrzymania ich w tych wersjach podczas aktualizacji systemu, będziesz musiał użyć apt-pinning zgodnie z sugestią belacqua .

Przypinanie APT

Funkcja przypinania APT pozwala administratorom zmusić APT do wybrania określonych wersji pakietów, które mogą być dostępne w różnych wersjach z różnych repozytoriów. Pozwala to administratorom upewnić się, że pakiety nie zostaną uaktualnione do wersji, które mogą powodować konflikty z innymi pakietami w systemie lub nie zostały wystarczająco przetestowane pod kątem niepożądanych zmian. W tym celu należy zmodyfikować piny w pliku preferencji APT (/ etc / apt / preferences).

Sepero
źródło
Myślę, że to poprawna odpowiedź, wstawienie =, a następnie nazwy pakietu w wersji
LnxSlck
1
Jestem kolegą Tymka i to rozwiązuje problem. Szkoda, że ​​musimy odtworzyć metapakiet, aby tak się stało. Niektóre kreatywne Python jest w porządku. Dzięki stosy za odpowiedź.
Igor Zevaka,
1
Zastanawiam się, czy od czasu upłynęło jakieś lepsze rozwiązanie?
ygrek
1

Możesz najpierw spróbować zainstalować zależności

sudo apt-get install package=2 gdzie 2 to wersja

Możesz dowiedzieć się, które pakiety zależą od pakietu

apt-cache rdepends package

int_ua
źródło
1
rdepends nie dostarcza szczegółowych informacji o wersjach, prawda?
tymtam
2
Zainstalowanie zależności w pierwszej kolejności sprzeciwiłoby się posiadaniu metapakietu. To rozwiązanie, ale nie to, którego szukam.
tymtam
1
Pamiętaj, że aby to działało, repozytoria muszą mieć dostępną wersję tej wersji, którą określiłeś, jeśli nie, spowoduje to błąd.
Thomas Ward