FreeBSD oferuje dwa główne sposoby instalowania oprogramowania: budowanie ze źródeł poprzez kolekcję Ports oraz instalowanie wstępnie skompilowanych pakietów binarnych przez narzędzie pkg. pkg jest szybsze i wygodniejsze dla większości użytkowników, ponieważ instaluje gotowe paczki i samodzielnie rozwiązuje zależności.
pkg jest domyślnym menedżerem pakietów w FreeBSD od wersji 10.x. Zastąpił starsze narzędzia pkg_* i zapewnia nowoczesny, wydajny sposób zarządzania pakietami. Jego kluczowe cechy to: Binary Package Management (instalacja prekompilowanych pakietów), Dependency Resolution (automatyczne instalowanie zależności), Repository Support (obsługa repozytoriów).
Jeśli po instalacji systemu nie masz dostępu do sieci (np. aby doinstalować „handy little software to get my phone to connect to my computer”), to typowy problem brzmi: „skąd wziąć pakiety?”. W praktyce najczęściej trzeba przejść na instalację z nośnika lub lokalnego repozytorium, ponieważ pkg install w trybie online pobiera metadane i paczki z repozytoriów.
W dyskusjach często pojawia się podejście offline: najpierw uruchom system po instalacji z DVD, z którego „I've been looking to this too, there are some packages on dvd”. Następnie realizujesz pobranie pakietów w środowisku z internetem albo budujesz lokalną kopię repozytorium.
Jednocześnie trzeba pamiętać, że płyta instalacyjna zwykle nie zawiera „wszystkiego” - „The DVD image contains quite a few packages but only has a selection of packages” i „many of desired packages were missing”. To normalne: repozytorium paczek jest oddzielne od zawartości ISO.

Jeżeli próbujesz pobierać/podstawiać pakiety dla wersji systemu, które nie odpowiadają aktualnie wykrytej wersji przez pkg(8), możesz dostać komunikat w stylu: „pkg: Warning: Major OS version upgrade detected. Running "pkg bootstrap -f" recommended”. W takiej sytuacji „no download ever happens”, bo pkg odmawia mieszania pakietów między niezgodnymi seriami głównych wersji systemu, gdy nie wykonano poprawnego bootstrappingu.
W praktyce oznacza to, że dla nieobsługiwanej wersji OS „packages for unsupported OS verions is absent. And you ought to build all from ports.” Jeśli w danym czasie wsparcie wygasło (np. dla 12.x) i port został usunięty, to nie znajdziesz gotowych paczek i musisz przejść na kompilację.
Jeśli budujesz pakiety samodzielnie (np. z Ports), bardzo pomaga zgodność czasu z wydaniem systemu. „For appropriate verion of package tree, as for my, best to select branch or tag correlating with time of OS release: branch 2022Q1, or tag (I prefer tag, it's obvious for this situation) release/12.2.0.”
Możesz próbować użyć późniejszej gałęzi, ale „in my experiments it's was failied”. Dla starszych wydań „it looks like there some changes was in makefiles, so all builds fails”.
W opisywanym scenariuszu „And it should be build in jail.” Warto potraktować jail jako powtarzalne środowisko, które odpowiada wersji systemu, dla której budujesz paczki. Dodatkowo „it seems unavoidable to set jail os version, becase some makefiles rely on it.”
Jeśli chcesz zainstalować nowszą wersję jaila, np. FreeBSD-14, na hoście z FreeBSD-13, pojawia się naturalne pytanie, czy da się uruchomić: „Is it possible to install a 14.0 jail on a 13.0 host?” Odpowiedź wprost w rozmowie: „they don't, actually. A 14-RELEASE jail is not guaranteed to work on a 13-RELEASE host (incl kernel).”
Warto też pamiętać o prostym rozróżnieniu: jail nie dostaje własnego kernela. „Jails do not have a kernel. They run on the host’s kernel.” To tłumaczy, czemu nie ma pełnej gwarancji działania jaila nowszej wersji na starszym hoście - hostowy kernel pozostaje kluczowy.

W praktyce, gdy pkg wykrywa „Major OS version upgrade detected”, to najczęściej oznacza, że repozytorium paczek, pliki metadanych lub bootstrap są niezgodne z tym, co uważa obecny system. Pojawia się wtedy komunikat: „Proceed with fetching packages?” - jednak przy złej konfiguracji możesz widzieć, że pobieranie nie startuje lub nie kończy się poprawnie.
Jeżeli sytuacja dotyczy też instalacji w offline, a masz tylko częściowe paczki z DVD, to rozwiązanie polega na zapewnieniu spójnego źródła paczek: albo lokalnego repozytorium kompatybilnego z wersją OS, albo budowania brakujących rzeczy z Ports (w jail).
Jedno z rozwiązań, które pojawia się w opisie problemu, to: „Fetching packages for another platform or version than the pkg(8) detected one”. Drugim elementem było „build a local repository from fetched packages”.
Dla osób, które chcą „save them unlinked with original package name (as they are linked in /var/cache/pkg), use the pkg-fetch(8) -o option.” To umożliwia kontrolę miejsca zapisu pobranych paczek.
Dodatkowo doprecyzowano ważną obserwację: „I see no reason why downloading the packages should be done as root, so this whole process'd better be run as an unprivileged user.” Inaczej pkg może zgłaszać błąd.
W innym teście pojawia się jednak problem: „pkg-fetch(8) will work from a user account if -o points to a directory the user can write to. Unfortunately, it doesn't work. That is, it does, but only the first time.”
Opis dotyka mechanizmu indeksów w bazie pakietów: „I suspect that pkg-fetch not only copies the package to the -o dir, but also updates some index files in PKG_DBDIR. And it's those index files that must be owned by root.” Z tego powodu na drugim przebiegu w testowym scenariuszu „fails”.
Jednocześnie sugerowano obejście przez zmienną: „INSTALL_AS_USER seems to suppress that check, allowing pkg-fetch to proceed on the second and subsequent invocations.”
W rozmowie zwrócono uwagę na zmianę formatu plików. „The extension for FreeBSD packages changed from .txz to .pkg recently.” To bezpośrednio wpływa na to, jak podajesz plik do instalacji i co w ogóle pkg potrafi rozpoznać.
Padło też praktyczne doprecyzowanie: „If you specify the exact filename, as you must when using a different repo, then it will only use that.” Natomiast „If you do something like pkg install nano the pkg system will try both file types. Edit: Same with "pkg install . "”
Wątpliwości pojawiły się po lekturze dokumentacji: „Jails do not have a kernel. They run on the host’s kernel.” Użytkownik próbował też interpretować zawartość base.txz i kernel.txz, sprawdzając katalog /boot/kernel w jail.
W opisie jest ważna korekta własnego rozumienia: „Yeah, that's a brain fart on my part.” Dalsza obserwacja: „Even for thin jails, you have to download a base.txz, which is the kernel itself ?” oraz rozstrzygnięcie wprost: „base.txz contains the base userland. base.txz contains the base userland. kernel.txz contains the kernel. You don't need that for a jail.”

Jeżeli potrzebujesz paczek dla nowszej wersji niż aktualna (np. na hoście z 13.x), bez internetu pozostaje zwykle jedna z dróg: zapewnić kompatybilne repozytorium albo „build all from ports.” W opisie wskazano też, że paczki dla nieobsługiwanych wersji „is absent”, więc kompilacja jest nieunikniona.
Przy tym podkreślono, że budowanie „should be build in jail”, a dodatkowo „set jail os version” bo „some makefiles rely on it.”
Jeżeli rozważasz uruchamianie FreeBSD-14 jail na FreeBSD-13 hoście, to w rozmowie zaznaczono: „A brand-new, patched kernel is downloaded.” Ale kluczowe pozostaje: „they don't, actually. A 14-RELEASE jail is not guaranteed to work on a 13-RELEASE host (incl kernel).”
W innej części materiału przewija się podejście awaryjne: wykorzystanie telefonu jako hotspotu. „Incidentally, any recent iPhone or Android phone can act as a WiFi hotspot and you can connect your FreeBSD machine to your phone when you install FreeBSD.”
Przy tym pojawia się ważne ograniczenie: „But you cannot do that when you’re inside an isolated network that has no connection to the internet”. Wtedy pozostaje przenoszenie danych innymi ścieżkami (np. przez dedykowany serwer pobierania).

Podstawy zarządzania pakietami z pkg są proste i uniwersalne, także gdy finalnie przechodzisz na repo lokalne.
pkg update pobiera metadane o dostępnych pakietach z skonfigurowanych repozytoriów.
„The primary command for installing packages is pkg install.” Przykładowo: „To install a package, use the pkg install command followed by the package name.” Po uruchomieniu „The pkg tool will display a list of packages to be installed, including dependencies, and prompt for confirmation. Type y and press Enter to proceed.”
Po zakończeniu instalacji możesz sprawdzić szczegóły uruchamiając polecenie pokazujące metadane zainstalowanego pakietu, w stylu: „This command displays detailed information about the installed package, including its version, description, and installation date.”
Gdy nie znasz dokładnej nazwy, używasz: „pkg search” - „This command lists all packages whose names or descriptions match the search term.”
„Keeping software up-to-date is crucial for security and performance.” Aktualizację katalogu wykonuje się przez „Updating the Package Catalog”, a uaktualnianie wszystkich zainstalowanych paczek przez „Upgrading Installed Packages”.
Usuwanie realizuje się przez „pkg delete”. Przykład: „To remove the nginx package, run:” oraz analogicznie usuwanie nieużywanych zależności.
Jeśli paczki binarne są nieosiągalne (bo wsparcie dla wersji wygasło albo porty zostały usunięte), „therefore build all from ports.” Wtedy pojawiają się narzędzia do budowania i testowania.
poudriere jest narzędziem do budowania i testowania portów w czystych jailach, co jest „ideal for maintaining custom repositories.” Dzięki temu tworzysz spójny zestaw paczek, które potem możesz dostarczyć do systemu bez internetu.
| Objaw | Co to zwykle oznacza | Jakie podejście pasuje |
|---|---|---|
| „pkg: Warning: Major OS version upgrade detected” | Niezgodność wersji głównej między systemem a pobieranymi paczkami/indeksami | Użyj kompatybilnego repo/odpowiedniej wersji albo buduj z Ports |
| Pobieranie nie startuje („no download ever happens”) | pkg nie dopuszcza niepasujących metadanych/paczek | Przygotuj repo lokalne spójne z wersją OS |
| Brak paczek dla wersji („packages … is absent”) | Wygasłe wsparcie lub usunięte elementy repo/portów | „build all from ports” w jail |
| Jail 14 nie działa na hoście 13 | „Jails do not have a kernel. They run on the host’s kernel.” + niezgodność kernela | Buduj w odpowiedniej wersji jaila/hosta zgodnie z wymaganiami |
| pkg-fetch działa tylko za pierwszym razem | Indeksy w PKG_DBDIR wymagają właściciela/root, a user-only zapis powoduje rozjazd | Ustal poprawne uprawnienia lub użyj ustawień tłumiących check |
| Zawartość DVD nie pokrywa potrzeb | ISO zawiera jedynie część paczek („only has a selection of packages”) | Repozytorium lokalne albo pobranie kompletnego zestawu paczek |
tags: #freebsd #instalacja #pkg
About the author