Porty FreeBSD
Porty FreeBSD – mechanizm instalacji i pakietowania oprogramowania opracowany dla systemu FreeBSD[1].
Jest to stale rozwijane rozwiązanie pozwalające na wygodną instalację i zarządzanie oprogramowaniem spoza podstawowego systemu w oparciu o kompilację źródeł, tj. w tradycyjny dla systemów uniksowych sposób – z uwzględnieniem rekursywnych zależności pomiędzy poszczególnymi programami. Nazwa pochodzi od używanego w żargonie informatycznym określenia na adaptację oprogramowania napisanego dla jednego systemu do innego, tj. portowania (por. transport, import itp).
Historia
Porty zostały stworzone w 1994 przez jednego z założycieli FreeBSD, Jordana Hubbarda (jkh). Początkowo stanowiły jego własne rozwiązanie służące do automatyzacji instalacji oprogramowania. 21 sierpnia 1994 wczytał on źródła szkieletu do repozytorium projektu[2]. Niemal rok wcześniej (26 sierpnia) upublicznił on już źródła programu pkg_install
[3].
Przez kilka lat strukturą portów zajmował się sam twórca wraz z japońskim programistą Satoshi Asami. Później powstał osobny zespół nazwany Ports Team, któremu przewodzą programiści pełniący stanowisko określane jako Port Master (początkowo portmeister). Pierwszym wówczas jeszcze portmeisterem był wspomniany Satoshi. Ports Team opiekuje się strukturą drzewa i jego rozwojem przy wykorzystaniu Git[4] (wcześniej Subversion i CVS) i bazy zgłoszeń bugzilla (dawniej GNATS).
Konstrukcja
Porty tworzą hierarchiczną strukturę katalogów i plików podzieloną na funkcjonalne kategorie. Szkielet portu powstaje na bazie pliku Makefile BSD make. W założeniu każdy port posiada swego opiekuna, którym mogą być zarówno pojedynczy programiści, jak i całe zespoły odpowiedzialne w ramach FreeBSD za nadzór np. dużych środowisk GNOME i KDE. Obowiązkiem opiekuna jest aktualizacja swoich portów oraz udzielanie wsparcia użytkownikom programu.
Repozytorium portów zawiera ponad 33 tysiące[5][a] programów przystosowanych do działania na FreeBSD. Użytkownicy mogą aktualizować swoje lokalne kopie drzewa za pomocą klienta Git, mniejszego narzędzia gitup
oraz opartego na binarnych łatkach skryptu portsnap
stworzonego przez Colina Percivala, dawnego oficera bezpieczeństwa FreeBSD.
Na bazie portów dla tzw. warstwy tier 1[b] projekt udostępnia prekompilowane pakiety powstające z domyślnymi opcjami – co pozwala instalować oprogramowanie bez czasochłonnego kompilowania. Pakiety rozprowadzane są poprzez Internet oraz na nośnikach optycznych, ich funkcjonalność jest bardzo zbliżona do tych znanych z dystrybucji linuksowych.
Programy zainstalowane przy pomocy portów i pakietów przechowywane są w przestrzeni odseparowanej od właściwego systemu (w hierarchii poniżej /usr/local
), co pozwala na zachowanie integralności obu warstw oprogramowania.
W systemie do zarządzania zainstalowanymi pakietami używa się obecnie zarządcy pakietów pkg
, który w wersji 10[6] zastąpił oryginalne: pkg_add
czy pkg_delete
.
Zalety
- elastyczność kompilacji ze źródeł[1]
- spójność instalowanego oprogramowania
- możliwość optymalizacji kompilacji dla lokalnej architektury i zapotrzebowań, np. poprzez zmianę flag kompilatora[1]
- możliwość dalszej samodzielnej adaptacji instalowanych programów poprzez własne łatki bez rezygnacji z zalet zarządzania oprogramowaniem[1]
- dostępność programów, których licencje zabraniają dystrybucji w prekompilowanej postaci[1]
Wady
- dłuższy czas oczekiwania na skompilowanie dużych programów[1]
- względna powolność działania
make
[7] - nieelastyczność pakietów binarnych[1]
- brak wsparcia dla wyboru domyślnego tłumaczenia instalowanego programu, wgrywane są wszystkie wersje językowe
Przebieg instalacji
- wybór opcji instalacyjnych przez użytkownika (może być dokonany ręcznie lub automatycznie)
- sprowadzenie źródeł z Internetu (jeśli są niedostępne lokalnie),
- sprawdzenie ich integralności w oparciu o sumę kontrolną SHA256,
- wprowadzenie niezbędnych poprawek wymaganych przez FreeBSD (patch),
- konfiguracja i zapis preferencji użytkownika,
- ewentualna instalacja innych portów niezbędnych do skompilowania danego programu np. bibliotek (rekursywne wykonanie procedury),
- kompilacja,
- ewentualna instalacja portów niezbędnych do uruchomienia programu (rekursywne wykonanie procedury),
- instalacja w systemie,
- rejestracja plików należących do programu z ich sumami kontrolnymi,
- przypisanie do portu bibliotek i innych programów, które są niezbędne do jego działania,
- opcjonalnie usunięcie plików roboczych zbędnych po instalacji[8]
Pochodne
Porty FreeBSD stały się bazą lub inspiracją dla zbliżonych rozwiązań wykorzystywanych w systemach:
- Arch Linux (ABS – Arch Build System)[9],
- DragonFly BSD (DeltaPorts)[10],
- Gentoo Linux (portage)[11],
- NetBSD (pkgsrc)[12][13],
- OpenBSD pod identyczną nazwą[12][13],
- macOS (MacPorts)[12].
Linki zewnętrzne
- Oficjalna strona portów (ang.)
- Ports Management Team (ang.)
- Podręcznik FreeBSD: rozdział poświęcony zarządzaniu zainstalowanym oprogramowaniem (ang.) (pl)
- Porter's handbook – podręcznik dla opiekunów poszczególnych portów (ang.)
- Wywiad z Jordanem Hubbardem z okazji powstania pkgsrc (ang.)
- FreshPorts – serwis ułatwiający wyszukiwanie oprogramowania oraz śledzenie jego aktualizacji (ang.)
Uwagi
- ↑ Liczba portów jest zmienna w czasie, bowiem zmienia się wraz z dodawaniem nowych oraz usuwaniem przestarzałych. Projekt nie publikuje obecnie (wrzesień 2021) aktualnych danych, które można jednak pozyskać samodzielnie w zainstalowanym systemie poleceniem:
$ wc -l /usr/ports/INDEX
- ↑ Tier 1 oznacza architektury sprzętowe uznawane przez projekt FreeBSD za zdatne dla środowisk produkcyjnych. Zbiór ten może różnić się między poszczególnymi wydaniami, np. w wersji 12.2 były to amd64 oraz i386, z kolei w 13.0: amd64 i aarch64
Przypisy
- ↑ a b c d e f g Chapter 4. Installing Applications: Packages and Ports. The FreeBSD Project. [dostęp 2021-09-27]. (ang.).
- ↑ CVS log for ports/Mk/bsd.port.mk archived April 15, 2013. [dostęp 2020-01-05].
- ↑ CVS log for src/usr.sbin/pkg_install/Makefile archived April 14, 2013. [dostęp 2018-05-26].
- ↑ GitTransition - FreeBSD Wiki. [dostęp 2021-06-07].
- ↑ About FreeBSD Ports. [dostęp 2021-09-28]. [zarchiwizowane z tego adresu (2020-12-26)].
- ↑ FreeBSD 10.0-RELEASE Release Notes | The FreeBSD Project. 2014-01-20. [dostęp 2021-10-19]. (ang.).
- ↑ Michel Talon: The FreeBSD ports system.. 2007-05-15. [dostęp 2022-09-19]. (ang.).
- ↑ bsd.port.mk Mk — ports - FreeBSD ports tree. 2021-09-27. [dostęp 2021-09-27]. (ang.).
- ↑ Arch Build System - ArchWiki. [dostęp 2021-09-28]. [zarchiwizowane z tego adresu (2013-01-17)]. Cytat: What is a ports-like system? (ang.).
- ↑ An early DPorts education – DragonFly BSD Digest. [dostęp 2021-09-28]. (ang.).
- ↑ Gentoo Linux Documentation -- Making the distribution, Part 3. [dostęp 2021-09-28]. [zarchiwizowane z tego adresu (2014-12-22)]. (ang.).
- ↑ a b c 10 years of pkgsrc - pkgsrc and the concepts of package management 1997-2007 (part 1). [dostęp 2021-09-28].
- ↑ a b Andrew Pantyukhin , Third-party software management under BSD, 2006 [dostęp 2022-09-20] (ang.).