Podręcznik FreeBSD
Poprzedni | Rozdział 4. Instalacja programów: pakiety i porty | Następny

# 4.5. Korzystanie z kolekcji portów

Tłumaczył Aleksander Fafuła. Przekład uzupełnił Cezary Morga.

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).

## 4.5.1. Pozyskanie kolekcji portów

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:

Metoda CVSup

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.

1. Zainstaluj pakiet `net/cvsup-without-gui`:

       # pkg_add -r cvsup-without-gui

   Więcej informacji w podrozdziale Instalacja CVSup (Sekcja A.5.2).

2. 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).

   > Notatka: Można wykorzystać własny plik `ports-supfile`, by np. uniknąć konieczności podawania adresu serwera CVSup z linii poleceń.

   > 1. 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.

   > 2. Zmodyfikuj plik `ports-supfile`.

   > 3. 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).

   > 4. Teraz uruchom `cvsup` używając polecenia::

   >        # cvsup -L 2 /root/ports-supfile

3. 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.

Metoda Portsnap

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.

1. 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

2. 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

3. 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 sysinstall

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.

1. Uruchom `sysinstall` jako użytkownik `root` (`/stand/sysinstall` w wersjach FreeBSD starszych niż 5.2):

       # sysinstall

2. Przejdź w dół, wybierz Configure, i naciśnij Enter.

3. Przejdź w dół, wybierz Distributions i naciśnij Enter.

4. Przejdź w dół do opcji ports i naciśnij Spację.

5. Przejdź do góry do opcji Exit i naciśnij Enter.

6. Ustaw wybrany przez siebie typ medium instalacji, jak np. płytę CDROM, serwer FTP, itd.

7. Przejdź do góry do opcji Exit i naciśnij Enter.

8. Naciśni X by wyjść z programu sysinstall.

## 4.5.2. Instalacja Portów

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.

> Notatka: By móc zainstalować port musimy być zalogowania jako użytkownik `root`.

> Ostrzeżenie 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
    #

> Notatka: 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`.

> Notatka: 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.

> Notatka: 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.

> Notatka: 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/`.

> Notatka: 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.

### 4.5.2.1. Ignorowanie domyślnych katalogów portów

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.

### 4.5.2.2. Jak poradzić sobie z `imake`

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.

## 4.5.3. Usuwanie zainstalowanych portów

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

## 4.5.4. Aktualizacja portów

Na wstępie musimy wyświetlić zdezaktualizowane porty w kolekcji. Wykorzystamy do tego polecenie pkg_version(1):

    # pkg_version -v

### 4.5.4.1. `/usr/ports/UPDATING`

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.

### 4.5.4.2. Aktualizacja portów z wykorzystaniem programu Portupgrade

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).

### 4.5.4.3. Aktualizacja portów z wykorzystaniem programu Portmanager

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.

## 4.5.5. Porty i przestrzeń na dysku

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

> Notatka: 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`.

Poprzedni | Spis treści | Następny
Korzystanie z systemu pakietów | Początek rozdziału | Czynności po-instalacyjne

Ten i inne dokumenty można pobrać z ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

W przypadku pytań o FreeBSD prosimy przeczytać dostępną dokumentację przed kontaktem z <questions@FreeBSD.org>.
W sprawie zapytań o tę dokumentację prosimy o kontakt z <doc@FreeBSD.org>.