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?
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
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.
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ę.
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:
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
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