Poniższy podrozdział dostarcza podstawowych informacji
z zakresu używania kolekcji portów, w stopniu umożliwiającym
instalowanie lub odinstalowywanie programów z własnego systemu.
Szczegółowy opis parametrów polecenia make
i zmiennych środowiskowych dostępny jest w podręczniku
systemowym ports(7).
Zanim zainstalujemy jakikolwiek port, musimy pobrać
kolekcję portów, która w zasadzie jest zestawem plików
Makefiles
, łat i opisowych. Kolekcja
znajduje się w katalogu /usr/ports
.
W trakcie instalacji FreeBSD, sysinstall zapytał czy chcemy zainstalować kolekcję portów. Jeśli wybraliśmy nie, poniższe instrukcje pomogą nam własnoręcznie zainstalować kolekcję portów:
Jest to prosta i szybka metoda pobrania kolekcji portów wykorzystująca system CVSup. Więcej informacji o CVSup dostępnych jest w podrozdziale Korzystanie z CVSup.
Bardzo ważnym jest, aby upewnić się, że katalog
/usr/ports
jest pusty
nim po raz pierwszy uruchomimy CVSup!
Jeśli posiadamy już kolekcję portów pozyskaną z innego źródła
CVSup nie usunie nieużywanych
plików łat.
Zainstaluj pakiet net/cvsup-without-gui:
#
pkg_add -r cvsup-without-gui
Więcej informacji w podrozdziale Instalacja CVSup (Sekcja A.5.2, "Installation").
Uruchom cvsup
:
#
cvsup -L 2 -h cvsup.FreeBSD.org /usr/share/examples/cvsup/ports-supfile
Warto zastąpić cvsup.FreeBSD.org
adresem serwera CVSup zlokalizowanego bliżej nas. Kompletna lista
serwerów lustrzanych dostępna jest w podrozdziale
Serwery lustrzane CVSup
(Sekcja A.5.7, "CVSup Sites").
Można wykorzystać własny plik ports-supfile
,
by np. uniknąć konieczności podawania adresu serwera
CVSup z linii poleceń.
W takim wypadku, jako użytkownik root
,
skopiuj plik
/usr/share/examples/cvsup/ports-supfile
do innego katalogu, np. /root
bądź własnego
katalogu domowego.
Zmodyfikuj plik ports-supfile
.
Zmień wpis
CHANGE_THIS.FreeBSD.org
na adres
wybranego serwera lustrzanego CVSup.
Kompletna lista serwerów lustrzanych dostępna jest w podrozdziale
Serwery lustrzane
CVSup (Sekcja A.5.7, "CVSup Sites").
Teraz uruchom cvsup
używając
polecenia::
#
cvsup -L 2 /root/ports-supfile
Późniejsze wpisanie polecenia cvsup(1) spowoduje sprawdzenie zmian dokonanych w kolekcji portów i aktualizację lokalnej wersji. Nie spowoduje to natomiast automatycznie ponownego skompilowania wykorzystywanych przez nas portów.
Portsnap jest alternatywnym systemem dystrybucji kolekcji portów. Po raz pierwszy został dołączony do FreeBSD 6.0. W starszych wersjach może zostać zainstalowany z pakietu sysutils/portsnap:
#
pkg_add -r portsnap
Szczegółowe informacje o możliwościach programu dostępne są w podrozdziale Korzystanie z Portsnap.
Ten punkt możemy pominąć jeśli posiadamy FreeBSD 6.1-RELEASE
bądź najnowszą wersję programu Portsnap.
Przy pierwszym uruchomieniu programu portsnap(8) zostanie
automatycznie utworzony katalog /usr/ports
. W starszych wersjach programu
wymagane jest własnoręczne utworzenie katalogu:
#
mkdir /usr/ports
Pobierz skompresowaną migawkę kolekcji portów do katalogu
/var/db/portsnap
. Można następnie
zakończyć połączenie z Internetem, jeśli jest taka potrzeba.
#
portsnap fetch
Jeśli uruchamiany Portsnap po raz
pierwszy należy rozpakować migawkę do katalogu
/usr/ports
:
#
portsnap extract
Jeśli posiadamy już kolekcję portów w /usr/ports
i jedynie ją aktualizujemy,
wpisujemy polecenie:
#
portsnap update
Metoda ta instaluje kolekcję portów z lokalnego nośnika posługując się programem sysinstall. Zainstalowana zostanie kopia kolekcji z dnia, w którym przygotowana została dana wersja FreeBSD. Jeśli dysponujemy połączeniem z Internetem powinniśmy zawsze stosować jedną z metod opisanych powyżej.
Uruchom sysinstall
jako użytkownik
root
(/stand/sysinstall
w wersjach FreeBSD starszych niż 5.2):
#
sysinstall
Przejdź w dół, wybierz Enter.
, i naciśnijPrzejdź w dół, wybierz Enter.
i naciśnijPrzejdź w dół do opcji Spację.
i naciśnijPrzejdź do góry do opcji Enter.
i naciśnijUstaw wybrany przez siebie typ medium instalacji, jak np. płytę CDROM, serwer FTP, itd.
Przejdź do góry do opcji Enter.
i naciśnijNaciśni X by wyjść z programu sysinstall.
Pierwsza rzecz o jakiej należy wspomnieć omawiając kolekcję portów, jest "szkielet". Mówiąc w skrócie, szkielet portu jest minimalnym zestawem plików, które informują FreeBSD, jak poprawnie skompilować i zainstalować program. Każdy szkielet portu zawiera:
Plik Makefile
. Plik ten zawiera
różne dane określające jak skompilować aplikację oraz gdzie
ją zainstalować w systemie.
Plik distinfo
Plik ten zawiera informacje
dotyczące plików, które muszą zostać pobrane, by skompilować
port. Ponadto zawiera sumy kontrolne, na podstawie których
md5(1) potrafi sprawdzić, czy pliki nie uległy uszkodzeniu
w trakcie pobierania z sieci.
Katalog files
, który zawiera łaty
pozwalające skompilować i zainstalować program w naszym
systemie FreeBSD. Łaty są małymi plikami, w których określone
są zmiany dotyczące konkretnych plików. Są to pliki tekstowe i po
prostu mówią "Usuń linię 10" lub "Zmień linię
26 na to: ...". Łatki są także znane jako "diffs"
(ang. skrót od różnice) ponieważ są generowane przez program
diff(1).
Ten katalog może zawierać także inne pliki używane do kompilacji portu.
Plik opisu pkg-descr
. Jest to bardziej
szczegółowy, nierzadko wieloliniowy opis programu.
Plik listy pkg-plist
. Jest to lista wszystkich
plików, które zostaną zainstalowane przez port. Jest to także lista plików,
które należy usunąć w przypadku odinstalowywania.
Niekiedy porty zawierają również inne pliki, jak na przykład
pkg-message
(message-wiadomość).
System portów używa tych plików w specjalnych sytuacjach. Jeśli potrzebujesz
więcej informacji na temat tych plików i portów w ogóle, zajrzyj do podręcznika
FreeBSD
Porter's Handbook.
Jak już raz powiedziano, porty zawierają instrukcje odnośnie kompilacji programów z kodu źródłowego. Jednakże nie zawierają one samego kodu. Kod pobrać można z płyty CD bądź z Internetu. Rozprowadzany może być w dowolnej postaci jaką wybierze sobie jego producent, przy czym najczęściej jest to spakowany plik tar skompresowany dodatkowo gzipem. Kod źródłowy programu nazywany jest "distfile". Poniżej przedstawione zostały dwie metody instalacji portów we FreeBSD.
By móc zainstalować port musimy być zalogowania jako
użytkownik root
.
Przed instalacją jakiegokolwiek portu należy upewnić się,
że dysponujemy aktualną kolekcją portów oraz sprawdzić potencjalne
luki bezpieczeństwa związane z danym portem na stronie http://vuxml.freebsd.org/
.
Istnieje możliwość zautomatyzowania procesu weryfikacji
potencjalnych luk bezpieczeństwa przed instalacją portu. Do tego
celu można wykorzystać program portaudit,
dostępny również w kolekcji portów (security/portaudit). Wydanie polecenia
portaudit -F
przed instalacją nowego portu
spowoduje pobranie aktualnej bazy luk bezpieczeństwa. Możliwe jest
również wykonywanie regularnych aktualizacji bazy i rewizji
zainstalowanego oprogramowania w trakcie codziennego przeglądu
bezpieczeństwa systemu. Więcej informacji dostępnych jest na stronach
podręcznika systemowego portaudit(1) i periodic(8).
Sposób funkcjonowania kolekcji portów wiąże się z założeniem,
że posiadamy połączenie z Internetem. Jeśli nie, będziemy musieli
ręcznie pobierać kod źródłowy "distfile" i umieszczać
w katalogu /usr/ports/distfiles
dla każdego
instalowanego portu.
By rozpocząć instalację należy przejść do katalogu wybranego portu:
#
cd /usr/ports/sysutils/lsof
Wewnątrz katalogu lsof
znajduje się
szkielet portu. Następnym krokiem jest kompilacja programu, co
sprowadza się do wpisania polecenia make
.
Efekt działania polecenia powinien być zbliżony do:
#
make
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/. >> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/. ===> Extracting for lsof-4.57 ... [extraction output snipped] ... >> Checksum OK for lsof_4.57D.freebsd.tar.gz. ===> Patching for lsof-4.57 ===> Applying FreeBSD patches for lsof-4.57 ===> Configuring for lsof-4.57 ... [configure output snipped] ... ===> Building for lsof-4.57 ... [compilation output snipped] ...#
Po skończeniu kompilacji powracamy do linii poleceń.
Kolejnym krokiem jest instalacja portu poprzez wpisanie polecenia
make
wraz ze słowem
install
:
#
make install
===> Installing for lsof-4.57 ... [installation output snipped] ... ===> Generating temporary packing list ===> Compressing manual pages for lsof-4.57 ===> Registering installation for lsof-4.57 ===> SECURITY NOTE: This port has installed the following binaries which execute with increased privileges.#
Gdy ponownie powrócimy do linii poleceń, powinniśmy być już w stanie uruchomić właśnie zainstalowaną aplikację. Ostrzeżenie jakie pojawi się na ekranie związane jest z faktem, że lsof jest programem pracującym ze zwiększonymi przywilejami. W trakcie kompilacji i instalacji portów powinniśmy zwracać uwagę na wszystkie pojawiające się ostrzeżenia.
Dobrym pomysłem, jest również usunięcie podkatalogu zawierającego wszystkie tymczasowe pliki wykorzystywane w trakcie kompilacji. Nie tylko dlatego, że niepotrzebnie zajmuje miejsce na dysku, ale również dlatego, że może być przyczyną problemów podczas aktualizacji programu do nowszej wersji.
#
make clean
===> Cleaning for lsof-4.57#
Można sobie oszczędzić dwóch naddatkowych kroków wpisując
od razu make install clean
zamiast trzech
osobnych poleceń make
,
make install
oraz
make clean
.
Niektóre powłoki utrzymują bufor listy poleceń
z katalogów znajdujących się w zmiennej środowiskowej
PATH
. Ma to za zadanie przyśpieszyć
wyszukiwanie plików binarnych tychże poleceń.
Jeśli korzystamy z jednej z takich właśnie powłok
może okazać się niezbędnym wydać polecenie
rehash
po instalacji portu,
nim będziemy mogli wykorzystać nowo zainstalowany
program. Polecenie to dostępne jest przy wykorzystaniu
powłoki typu tcsh
. Natomiast
dla powłoki typu sh
odpowiednikiem
jest hash -r
. Więcej informacji
dostępnych jest w dokumentacji powłoki.
Niektóre wydawnictwa na płytach DVD-ROM, jak np. FreeBSD
Toolkit z FreeBSD
Mall, zawierają źródła distfile. Mogą być one
wykorzystane z kolekcją portów. Wystarczy zamontować płytę
DVD w /cdrom
. Jeśli natomiast używamy
innego punktu montowania dla płyt musimy zmodyfikować zmienną
CD_MOUNTPTS
by wskazywała na właściwe
miejsce. Niezbędne źródła distfile zostaną automatycznie
wykorzystane jeśli znajdują się na płycie.
Mimo wszystko należy mieć w pamięci, że licencje nielicznych portów nie zezwalają na załączenie ich na płycie CD-ROM. Może to być np. z powodu konieczności wcześniejszej rejestracji przed pobraniem źródeł bądź ich redystrybucja nie jest dozwolona. Jeśli chcemy zainstalować port, który nie znajduje się na płycie CD musimy mieć połączenie z Internetem.
System portów do pobierania plików wykorzystuje
program fetch(1), który z kolei potrafi korzystać
z wielu zmiennych środowiskowych, m.in.
FTP_PASSIVE_MODE
, FTP_PROXY
czy FTP_PASSWORD
. Jeśli znajdujemy się
za zaporą ogniową, bądź musimy korzystać z serwera
pośredniczącego FTP/HTTP proxy, może się okazać,
że będziemy musieli ustawić niektóre z tych zmiennych.
Kompletna lista wykorzystywanych zmiennych dostępna
jest w podręczniku systemowym fetch(3).
Dla użytkowników nie mogących być cały czas połączonych
z Internetem dostępne jest polecenie
make fetch
.
Wystarczy wpisać to polecenie znajdując się w głównym
katalogu drzewa portów (/usr/ports
)
a wymagane pliki zostaną automatycznie pobrane. Polecenie
to będzie również funkcjonować w podkatalogach, np.
/usr/ports/net
. Jednakże, w takiej
sytuacji nie zostaną automatycznie
pobrane źródła bibliotek, od których zależy dany port.
Zamieniając parametr fetch
na
fetch-recursive
spowodujemy
pobranie również źródeł wszystkich portów, od których
zależy instalowany program.
Możliwe jest kompilowanie każdego portu z osobna
w danej kategorii, bądź wszystkich na raz poprzez polecenie
make
wykonane, analogicznie do
make fetch
,
w głównym katalogu kategorii. Jednakże jest to niebezpieczna
metoda, gdyż niektóre porty nie mogą jednocześnie funkcjonować
w systemie, bądź mogą zainstalować różne pliki o tej samej
nazwie.
W naprawdę żadkich przypadkach, użytkownicy mogą pozyskać
pliki distfile z innego źródła niż MASTER_SITES
(miejsce skąd je pobiera system portów). Opcję
MASTER_SITES
można zastąpić za
pomocą następującego polecenia:
#
cd /usr/ports/directory
#
make MASTER_SITE_OVERRIDE= \ ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch
W tym przykładzie zastąpiliśmy opcję
MASTER_SITES
adresem ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/
.
Niektóre porty umożliwiają (a nawet wymagają) podanie pewnych opcji kompilacji, które mogą włączyć bądź wyłączyć nie potrzebne części aplikacji, pewne opcje bezpieczeństwa i inne parametry. Z przychodzących na myśl tego typu programów to www/mozilla, security/gpgme oraz mail/sylpheed-claws. Za każdym razem gdy dostępne będą tego typu opcje wyświetlony zostanie komunikat.
Czasami okazuje się być przydatne (a nawet wymagane)
by skorzystać z innych katalogów tymczasowych i docelowych.
Domyślne katalogi można zastąpić wykorzystując zmienne
WRKDIRPREFIX
i PREFIX
.
Na przykład:
#
make WRKDIRPREFIX=/usr/home/example/ports install
spowoduje skompilowanie portu w katalogu
/usr/home/example/ports
i instalację
w podkatalogach /usr/local
.
#
make PREFIX=/usr/home/example/local install
spowoduje natomiast kompilację w katalogu
/usr/ports
oraz instalację
w podkatalogach
/usr/home/example/local
.
I oczywiście,
#
make WRKDIRPREFIX=../ports PREFIX=../local install
spowoduje połącznie obydwu powyższych ustawień (jest to za długie by całkowicie zmieściło się na stronie, ale powinno dać ogólne wyobrażenie).
Alternatywnie, obydwie zmienne mogą być również określone jako zmienne środowiskowe. Informacje o definiowaniu zmiennych środowiskowych dostępne są w podręczniku systemowym naszej powłoki.
Niektóre porty wykorzystujące imake
(część Systemu okien X) nie współpracują ze zmienną
PREFIX
i mimo wszystko będą
instalowały programy w /usr/X11R6
.
Podobnie niektóre z portów napisanych w języku Perl
ignorują zmienną PREFIX
i instalują programy w głównym drzewie Perla.
Zmuszenie tych portów do współpracy ze zmienną
PREFIX
jest niezmiernie trudne,
albo wręcz niemożliwe.
Teraz, gdy wiesz już jak instalować porty,
zastanawiasz się prawdopodobnie jak je usuwać,
na przykład w wypadku, gdy zainstalowaliśmy port,
ale okazało się jednak, że to nie był ten którego
szukaliśmy. W ramach przykładu usuniemy port,
który instalowaliśmy poprzednio (dla tych którzy
nie uważają, był to lsof
).
Podobnie jak w przypadku pakietów (szerzej opisane
w podrozdziale traktującym o pakietach),
również porty usuwane są za pomocą polecenia
pkg_delete(1):
#
pkg_delete lsof-4.57
Na wstępie musimy wyświetlić zdezaktualizowane porty w kolekcji. Wykorzystamy do tego polecenie pkg_version(1):
#
pkg_version -v
Po zaktualizowaniu kolekcji, a przed próbą aktualizacji
jakichkolwiek portów, należy zapoznać się z zawartością pliku
/usr/ports/UPDATING
. Plik ten opisuje
różne zagadnienia i dodatkowe kroki, na które można natknąć
się i będzie trzeba wykonać podczas aktualizacji, np.
zmiany formatu plików czy zmiany w lokalizacji plików
konfiguracyjnych.
Jeśli opis w pliku UPDATING
mówi coś innego
niż ten tekst, należy zastosować się do opisu.
Program portupgrade został
zaprojektowany by ułatwić aktualizację zainstalowanych w
systemie portów. Dostępny jest z portu sysutils/portupgrade.
Jego instalacja przebiega dokładnie tak samo, jak każdego
innego portu, wykorzystując polecenie
make install
clean
command:
#
cd /usr/ports/sysutils/portupgrade
#
make install clean
Przeskanujmy następnie listę zainstalowanych portów
za pomocą polecenia pkgdb -F
i usuńmy
wszystkie niezgodności jakie nam zwróci skanowanie.
Regularne skanowanie przed każdą aktualizacją jest
zdecydowanie dobrym pomysłem.
Wydanie polecenia portupgrade -a
spowoduje, że program portupgrade
rozpocznie aktualizację wszystkich przedawnionych portów
zainstalowanych w naszym systemie. Parametr -i
pozwoli przejść w tryb interaktywny, gdzie będziemy musieli
potwierdzić aktualizację każdego portu.
#
portupgrade -ai
By zaktualizować jedynie wybraną aplikację zamiast wszystkich
portów należy wykorzystać polecenie portupgrade
nazwa_programu
.
Opcja -R
oznacza, że portupgrade powinien
najpierw zaktualizować wszystkie porty, od których
zależy dany program.
#
portupgrade -R firefox
By do instalacji wykorzystać pakiety zamiast portów
należy dodać parametr -P
. Wówczas
portupgrade przeszuka katalogi
zawarte w zmiennej PKG_PATH
. Jeśli pakiet
nie zostanie odnaleziony lokalnie zostanie pobrany z Internetu.
Jeśli nie będzie możliwe żadne z powyższych, wówczas
portupgrade wykorzysta do
aktualizacji porty. By temu zapobiec należy zastosować
parametr -PP
.
#
portupgrade -PR gnome2
Aby pobrać jedynie pliki źródłowe distfiles
(bądź pakiety, gdy wykorzystamy opcję -P
)
bez kompilacji czy instalacji czegokolwiek należy użyć
parametru -F
. Więcej informacji
dostępnych jest w portupgrade(1).
Kolejnym narzędziem ułatwiającym aktualizację zainstalowanych portów jest Portmanager, dostępny z portu sysutils/portmanager:
#
cd /usr/ports/sysutils/portmanager
#
make install clean
Wszystkie zainstalowane porty mogą zostać zaktualizowane za pomocą polecenia:
#
portmanager -u
Wykorzystując parametr -ui
przechodzimy w tryb
interaktywny, gdzie będziemy pytani o potwierdzenie każdej operacji
wykonywanej przez Portmanager.
Program ten może być z równym powodzeniem wykorzystywany do instalacji
nowych portów w systemie. W przeciwieństwie do polecenia
make install clean
program
Portmanager zaktualizuje wszystkie
zależności nim skompiluje i zainstaluje wybrany port.
#
portmanager x11/gnome2
Gdy wystąpią problemy z zależnościami wybranego portu można wykorzystać Portmanagera, by ponownie skompilował je we właściwej kolejności. Na koniec zostanie również ponownie skompilowany port stwarzający problemy.
#
portmanager graphics/gimp -f
Więcej informacji dostępnych jest na stronach podręcznika systemowego Portmanagera.
Korzystanie z kolekcji portów z czasem odbije się na
wolnym miejscu na dysku. Dlatego też zawsze po skompilowaniu
i zainstalowaniu programu z portu powinniśmy pamiętać
o usunięciu tymczasowych katalogów roboczych (ang.
work
directories)
wykorzystując do tego polecenie make
clean
. Całą kolekcję natomiast
można oczyścić wpisujące polecenie:
#
portsclean -C
Z czasem uzbiera nam się wiele katalogów
distfiles
, które
będą jedynie zajmować przestrzeń na dysku. Możemy je ręcznie
usuwać bądź posłużyć się następującym poleceniem, by usunąć
wszystkie katalogi distfiles nie powiązane aktualnie z
żadnym portem:
#
portsclean -D
Badź, by usunąć wszystkie katalogi disftiles, do których nie odnosi się żaden z aktualnie zainstalowanych portów w naszym systemie:
#
portsclean -DD
Program portsclean
jest częścią pakietu
portupgrade.
Pamiętajmy również o usuwaniu instalowanych portów gdy już ich nie potrzebujemy. Przydatne narzędzie pozwalające zautomatyzować te czynności znajduje się w sysutils/pkg_cutleaves.
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.