Czy jest jakiś sposób na odzyskanie drzewa zależności z yum?

Aby zmniejszyć ryzyko problemu z XY, próbuję zainstalować PostGIS na czystej, wirtualnej instalacji RHEL5 z dużymi ograniczeniami. Nie wiem, czy my (jako firma) mamy abonament RH.

# yum install postgis
Loaded plugins: product-id, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Setting up Install Process
No package postgis available.
Nothing to do.

Wyświetla ten sam błąd, gdy próbuję zainstalować emacs, więc jestem stosunkowo pewien, że nie ma znaczenia, który pakiet próbuję zainstalować.

Maszyna wirtualna ma dostęp do Internetu.

Wszystko, co chcę zrobić, to pobrać kompletny wykres zależności dla oprogramowania I sprecyzować (oczywiście, tj. postgis). yum musi już obliczyć ten wykres zależności (lub mieć jeden dostępny do pobrania), aby wykonać swoje zadanie, więc jak mogę wykorzystać ten zasób?

Author: Sean Allred, 2013-05-30

4 answers

Na stronach podręcznika RHEL5: "repoquery jest programem do odpytywania informacji z repozytoriów YUM, podobnie jak zapytania rpm."

Dla Twojego konkretnego przypadku postgis:

# repoquery --requires --recursive --resolve  postgis
postgresql-libs-0:8.1.23-6.el5_8.i386
geos-0:2.2.3-3.el5.i386
glibc-0:2.5-107.el5_9.5.i686
proj-0:4.5.0-3.el5.i386

Możesz rzucić ".i386 "i".i686 " poza nazwami pakietów, Jeśli Twój system jest 64-bitowy.

Wyjście z repoquery nie jest idealne, ponieważ na przykład nie wyświetla listy glibc-common na powyższej liście. Ale twój system nie byłby uruchomiony, gdyby nie miał zarówno glibc i glibc-common już zainstalowany.

EDIT : chociaż nie powoduje błędu, znacznik --recursive wydaje się nie robić nic w RHEL5.11 i można go pominąć. Użyj również znacznika --pkgnarrow=all, aby upewnić się, że wszystkie pakiety (zainstalowane, dostępne itp.) są brane pod uwagę dla zapytania. Na koniec, aby na jednym kroku rekurencji uzyskać więcej drzewa zależności, w powłoce bash przekaż wyjście polecenia repoquery do drugiego polecenia repoquery używając tee i xargs w następujący sposób:

# repoquery --requires  --resolve --pkgnarrow=all postgis.i386 | tee >(xargs -r -n 1 -- repoquery --requires  --resolve --pkgnarrow=all) | sort | uniq
basesystem-0:8.0-5.1.1.noarch
geos-0:2.2.3-3.el5.i386
glibc-0:2.5-123.el5_11.3.i686
glibc-common-0:2.5-123.el5_11.3.i386
krb5-libs-0:1.6.1-80.el5_11.i386
libgcc-0:4.1.2-55.el5.i386
libstdc++-0:4.1.2-55.el5.i386
openssl-0:0.9.8e-40.el5_11.i686
postgresql-libs-0:8.1.23-10.el5_10.i386
proj-0:4.5.0-3.el5.i386
 23
Author: ZaSter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-23 04:31:11

Dodaję tylko poprawkę do tej odpowiedzi, której żałuję, że nie było tu, kiedy miałem do czynienia z tym.

Dodanie --recursive nie robi nic podczas używania --tree-requires

Najlepszą opcją jest opcja --tree-requires. Jest to jedyny sposób, jaki znalazłem, aby uzyskać repoquery, aby zapewnić 100% pełne drzewo zależności, w tym zależności zależności.

From MAN: -- recursive, Gdy używane z --whatrequires , zapytanie Pakiety rekurencyjnie.

Z tego co wiem, dla --requires zwróci ten sam wynik, zarówno z opcją --recursive, jak i bez niej.

Jeśli chcesz uzyskać listę wszystkich zależności, musisz wykonać repoquery --tree-requires <My-Package>. W przeciwnym razie nie będziesz mieć wszystkich wymaganych zależności.

Jeśli chcesz mieć je na łatwej do odczytania liście, możesz uruchomić następujące polecenie:

sort <(sed -e 's/ [| \\\_]\+\|-[[:digit:]]\+..*\|[[:digit:]]\://g' <(repoquery --tree-requires **YOUR-PACKAGE-HERE**)) | uniq

Wygeneruje czytelną, posortowaną listę tylko nazw pakietów. Zobacz ten przykład z libxcb paczka. Ta lista jest wszystkie zależności i zawiera zależności zależności.

Przykład z libxcb

Nie znalazłem różnicy w wynikach z --recursive lub --resolve, gdy nie używasz --whatrequires. --whatrequires służy innemu celowi niż standardowe drzewo zależności lub lista zależności. Nie znalazłem żadnej odpowiedzi na stack overflow, która poprawnie to wyjaśnia (są pewne komentarze).

Obecnie istnieje Prośba o dodanie polecenia "Format drzewa" do repoquery, ale w tej chwili to nie wchodzi w grę. Mam nadzieję, że to pomoże wypełnić lukę.

 6
Author: njfife,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 18:42:47

Wszystko, co chcę zrobić, to pobrać kompletny wykres zależności dla określonego przeze mnie oprogramowania (oczywiście, np. postgis).

W tym celu możesz wypróbować rpmreaper narzędzie zalecane z tego artykułu: Jak sprawdzić zależności pakietów RPM na Fedorze, CentOS lub RHEL

Zapewnia interfejs oparty na przekleństwach, który pozwala selektywnie zagłębić się w wymagania pakietu lub "wywiercić" i zobaczyć, co zależy od danego pakietu.

The typowe wyjście repoquery --tree-requires oparte na ASCII jest bardzo trudne do naśladowania, gdy ma kilka poziomów głębokości i tysiące linii. Wyświetlacz rpmreaper jest znacznie łatwiejszy do odczytania i przejechania.

Oto krótki przykład użycia "drill up" (aka "Required by"), aby znaleźć cykl w rpm Samby dla odniesienia:

samba-client-cycle

 2
Author: Mark Edington,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-22 15:09:24

To pomoże wyczyścić --tree-requires dla (x86_64):

for i in `repoquery --tree-requires --recursive --resolve postgis \
  | perl -nle '/([a-z]+-\d+\.\d+((\.|\-)?\d+)?.*x86_64)/;print "$1"'`; \
  do yumdownloader $i; \
  done
 1
Author: John Doe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-14 02:48:14