Potrzebuję zrobić instalację CentOS-a 7. Zainstalowałem bardzo podstawowy system (na to miałem receptę), chcę doinstalować dodatkowe pakiety (ściągnąłem wszystkie, jakie są dostępne, ale nie chcę instalować wszystkiego hurtem, tylko to, co będzie potrzebne) - do tego są programy "rpm" i "yum". Przy próbie zainstalowania pakietu "rpm" protestuje, że nie są zainstalowane pakiety, od których nowo instalowany pakiet jest zależny, natomiast "yum" ma problem ze znalezieniem repozytorium z pakietami.
Który z tych programów może automatycznie wziąć pakiety wymagane przez zależności z katalogu, w którym umieściłem wszystkie pakiety, i jak mu powiedzieć, żeby to zrobił?
@ElektrodaBot: Czy program "rpm" do instalowania pakietów w Linux-ach pochodnych od RedHat-a może automatycznie instalować pakiety wymagane przez zależności, biorąc je z katalogu na lokalnym dysku? A jeśli nie, to czy może to robić "yum"?
Potrzebuję zrobić instalację CentOS-a 7. Zainstalowałem bardzo podstawowy system (na to miałem receptę), chcę doinstalować dodatkowe pakiety (ściągnąłem wszystkie, jakie są dostępne, ale nie chcę inst...
Krótka odpowiedź
• `rpm` – nie, samo nie zainstaluje zależności; potrafi jedynie zgłosić ich brak. • `yum` – tak, rozwiąże zależności automatycznie, ale musi widzieć pakiety w repozytorium. Aby `yum` brał wszystko z katalogu na dysku, zamieniasz ten katalog w lokalne repozytorium narzędziem `createrepo` i dodajesz wpis w `/etc/yum.repos.d/*.repo`.
---
Szczegółowa analiza i procedura „krok po kroku”
1. Dlaczego `rpm` nie wystarczy? `rpm` jest menedżerem niskiego poziomu. Podczas instalacji:
Kod: Text
Zaloguj się, aby zobaczyć kod
• sprawdza zależności, • przerwie instalację, jeśli którejś brakuje, • nie przeszukuje katalogów ani repozytoriów, żeby je doinstalować.
Opcja `--aid` (obecna w bardzo starych wersjach rpm) potrafiła doszukać się zależności jedynie wśród *pakietów podanych w tym samym wierszu poleceń*, a nie na dysku – w praktyce jest bezużyteczna w 2025 r.
2. Co potrafi `yum`? `yum` to nakładka wysokiego poziomu na rpm: • rozwiązuje i pobiera zależności, • potrafi instalować plik `.rpm` przekazany z pełną ścieżką (`yum install /ścieżka/pakiet.rpm`) – o ile zależności znajdzie w *aktywnych repozytoriach*.
Gdy instalujesz offline, musisz sprawić, by Twoje pliki były „repozytorium YUM”. Są dwa sposoby:
2.1. Najprostszy – „hurtowa” instalacja z katalogu Jeśli naprawdę masz wszystkie pakiety potrzebne systemowi w jednym miejscu:
Kod: text
Zaloguj się, aby zobaczyć kod
`yum` wczyta *wszystkie* pliki na raz, układa je we własną, tymczasową kolejność i rozwiąże zależności. Wadą jest brak selekcji – instalujesz cały zestaw.
2.2. Elegancki – lokalne repozytorium Pozwala instalować tylko potrzebne pakiety, zachowując pełną funkcjonalność `yum`.
1. Zainstaluj narzędzie do budowy repozytoriów (o ile brak):
`yum` sam pobierze z katalogu brakujące biblioteki, moduły jądra itp.
---
3. Przydatne warianty i narzędzia
1. `yum groupinstall "<Nazwa grupy>"` – instalacja całych grup (np. *"Development Tools"*). 2. `yum deplist pakiet` – wypisuje zależności bez instalacji (ułatwia planowanie). 3. `yum localinstall pakiet.rpm` – skrót identyczny z `yum install /pełna/ścieżka/pakiet.rpm`; różnica czysto kosmetyczna. 4. `dnf` – następca `yum`; w CentOS 7 dostępny w EPEL jako opcja. Konfiguracja repozytorium jest analogiczna (`createrepo`, plik `.repo`).
---
4. Kontekst bezpieczeństwa (lipiec 2025)
• Wsparcie dla CentOS 7 zakończyło się 30 VI 2024. • System nie dostaje łatek bezpieczeństwa – stosować wyłącznie w środowiskach odciętych od sieci lub jako „legacy”. • Do nowych projektów warto rozważyć migrację na AlmaLinux 8/9, Rocky Linux 8/9 lub RHEL-compatible 9.x. Procedura budowy lokalnego repozytorium jest identyczna, lecz narzędziem domyślnym jest już `dnf`.
---
5. Typowe pułapki
1. `createrepo` po dodaniu *każdego* nowego pliku .rpm trzeba ponowić (`createrepo --update /mnt/rpms`), inaczej yum nie zobaczy zmian. 2. `baseurl=file:///…` – trzy ukośniki; brak któregoś skutkuje błędem 404. 3. Ścieżka w pliku `.repo` musi być absolutna i identyczna z tą, w której generowano metadane. 4. Jeśli pozostawisz włączone repozytoria internetowe, yum przy braku sieci będzie zwlekał z timeout-em; możesz globalnie dodać `timeout=3` lub użyć `yum --disablerepo="*" --enablerepo="local" install …`.
---
6. Co dalej?
• Jeżeli natrafisz na konkretny komunikat błędu `yum` lub `rpm`, wklej go – przyspieszy diagnozę. • Gdy repozytorium ma być przenoszone na wiele maszyn, zamiast katalogu lokalnego można wystawić go przez HTTP/HTTPS lub NFS; konfiguracja w pliku `.repo` różni się jedynie protokołem (`baseurl=http://server/repo/`). • Do pobierania kompletnych zestawów pakietów z działającej maszyny online przydaje się `reposync` lub `repotrack` (EPEL).
Powodzenia – po zbudowaniu repozytorium instalacja i aktualizacja pakietów na offline’owych hostach CentOS 7 stanie się tak samo wygodna, jak z sieci.
Możesz mnie wywołać w każdym temacie pisząc @ElektrodaBot. Zastrzeżenie: Niektóre odpowiedzi udzielone przez ElektrodaBota mogą być niedokładne. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi ElektrodaBota powinny być zweryfikowane przez użytkownika. OpenAI może monitorować i zapisywać informacje wprowadzane po wywołaniu ElektrodaBota.
1. Instalacja "createrepo" wymagała wcześniejszego zainstalowania "deltarpm", "libxml2-python", "python-deltarpm".
2. Wpisałem "baseurl=file://<ścieżka do katalogu z RPM-ami, zaczynająca się od '/'>".
3. Wykonałem "yum clean all" i potem "yum makecache fast"; "yum repolist" pokazał "local".
4. Po poleceniu "yum install xterm" zainstalowało "xterm" z zależnościami i "xterm" działa.
Kolejna próba - teraz bez "createrepo" - udana, pod Singularity:
Kod: less
Zaloguj się, aby zobaczyć kod
i teraz edytuję plik CentOS-Vault.repo - wybieram z niego to, co dotyczy CentOS-a 7.8.2003 (to jest pod koniec tego pliku, od linii "# C7.8.2003"), zapisuję na inny plik, i podmieniam napis "8.2003" na "9.2009", oraz "http" zamieniam na "https"; oprócz tego edytuję plik CentOS-Base.repo i do wszyskich grup, w których tego nie ma, wpisuję "enable=0" (grupy: [base], [updates], [extras], [centosplus]); potem:
Kod: less
Zaloguj się, aby zobaczyć kod
i już można wyjść i wywołać jako zwykły użytkownik: