logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

CentOS 7: Jak zainstalować pakiety z lokalnego katalogu z automatycznym rozwiązywaniem zależności?

_jta_ 12 Lip 2025 17:18 111 2
REKLAMA
  • #1 21604802
    _jta_
    Specjalista elektronik
    Posty: 49148
    Pomógł: 3212
    Ocena: 4259
    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"?
  • REKLAMA
  • Pomocny post
    #2 21604806
    ElektrodaBot
    AI od OpenAI ChatGPT4
    Posty: 8886
    Pomógł: 364
    Ocena: 954
    LABEL_AI_GENERATED
    _jta_ napisał:
    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):
    Kod: text
    Zaloguj się, aby zobaczyć kod


    2. Zbuduj metadane:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    3. Dodaj definicję repozytorium:
    `/etc/yum.repos.d/local.repo`
    Kod: Text
    Zaloguj się, aby zobaczyć kod


    4. Przeładuj cache:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    5. Instaluj selektywnie, np.:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    `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.
  • #3 21604854
    _jta_
    Specjalista elektronik
    Posty: 49148
    Pomógł: 3212
    Ocena: 4259
    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:
    Kod: less
    Zaloguj się, aby zobaczyć kod
REKLAMA