<?xml version="1.0" encoding="iso-8859-2"?>
<!--
     The FreeBSD Polish Documentation Project

     $FreeBSD$
     Original revision: 1.260
-->

<chapter id="ports">
  <chapterinfo>
    <authorgroup>
      <author>
        <firstname>Cezary</firstname>
        <surname>Morga</surname>
        <contrib>Tłumaczył </contrib>
      </author>
    </authorgroup>
  </chapterinfo>

  <title>Instalacja programów: pakiety i porty</title>

  <sect1 id="ports-synopsis">
    <title>Streszczenie</title>

    <indexterm><primary>porty</primary></indexterm>
    <indexterm><primary>pakiety</primary></indexterm>
    <para>System FreeBSD rozprowadzany jest wraz z bogatą kolekcją
      narzędzi systemowych. Tym nie mniej, stanowi to absolutne minimum.
      Szybko pojawia się bowiem potrzeba zainstalowania dodatkowego
      oprogramowania, by móc rozpocząć prawdziwą pracę z systemem.
      FreeBSD dostarcza dwóch dopełniających się metod instalacji
      oprogramowania: kolekcję portów FreeBSD (kompilacja programów
      ze źródeł) i system pakietów (instalacja z gotowych binariów).
      Każda z tych metod może zostać wykorzystana do instalacji najnowszych
      wersji ulubionego oprogramowania z lokalnych nośników bądź
      bezpośrednio z sieci.</para>

    <para>Przeczytawszy ten rozdział dowiemy się:</para>

    <itemizedlist>
      <listitem>
        <para>Jak instalować oprogramowanie innych producentów
          dostarczane w postaci binarnej.</para>
      </listitem>
      <listitem>
        <para>Jak kompilować oprogramowanie innych producentów
          z wykorzystaniem kolekcji portów.</para>
      </listitem>
      <listitem>
        <para>Jak usunąć poprzednio zainstalowane pakiety bądź
          porty.</para>
      </listitem>
      <listitem>
        <para>Jak zmienić domyślne wartości wykorzystywane
          przy kompilacji portów.</para>
      </listitem>
      <listitem>
	<para>Jak odnaleźć właściwe oprogramowanie.</para>
      </listitem>
      <listitem>
        <para>Jak zaktualizować wykorzystywane aplikacje.</para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1 id="ports-overview">
    <title>Omówienie instalacji oprogramowania</title>

    <para>Osoby, które już wcześniej pracowały z systemami &unix;
      wiedzą, że typowy proces instalacji oprogramowania sprowadza
      się mniej więcej do następujących punktów:</para>

    <procedure>
      <step>
        <para>Pobranie programu, który może być rozprowadzany
          w postaci kodu źródłowego bądź binarnej.</para>
      </step>

      <step>
        <para>Rozpakowania programu z formatu w jakim jest
          rozprowadzany (najczęściej jest to plik tar skompresowany
          za pomocą &man.compress.1;, &man.gzip.1; lub
          &man.bzip2.1;).</para>
      </step>

      <step>
        <para>Odnalezienie dokumentacji (najczęściej plik
          <filename>INSTALL</filename> lub <filename>README</filename>
          bądź pliki w podkatalogu <filename>doc/</filename>)
          i zapoznanie się z instrukcjami instalacji programu.</para>
      </step>

      <step>
        <para>Kompilacja programu, jeśli rozprowadzany jest w postaci
          źródłowej. Może to wymagać również wykonania dodatkowych
          czynności, jak np. edycji pliku <filename>Makefile</filename>
          bądź uruchomienia skryptu <command>configure</command>.</para>
      </step>

      <step>
        <para>Weryfikacja i instalacja aplikacji.</para>
      </step>
    </procedure>

    <para>Wszystko to przy założeniu, że w między czasie nie pojawiły
      się żadne trudności. Instalacja oprogramowania, które nie było
      przygotowywane z myślą o FreeBSD może wymagać nawet modyfikacji
      kodu źródłowego nim zacznie poprawnie funkcjonować.</para>

    <para>Oczywiście, we FreeBSD można instalować oprogramowanie
      <quote>tradycyjnym</quote> sposobem. Jednakże system ten
      posiada dwa rozwiązania, które potrafią zaoszczędzić mnóstwo
      czasu i trudu: pakiety i porty. W chwili pisania tego tekstu,
      dostępnych za pomocą tych systemów jest przeszło &os.numports;
      aplikacji.</para>

    <para>Dla każdego programu dostępny jest do pobrania pojedynczy
      pakiet, który zawiera skompilowane kopie plików aplikacji,
      zarówno plików uruchomieniowych jak i konfiguracyjnych czy
      dokumentacji. Pobranym plikiem można manipulować za pomocą
      poleceń &man.pkg.add.1;, &man.pkg.delete.1;, &man.pkg.info.1;,
      itp. Nowe programy można instalować za pomocą zaledwie
      jednego polecenia.</para>

    <para>Port natomiast, jest zbiorem plików mających za zadanie
      zautomatyzować proces kompilacji danego programu z kodu
      źródłowego.</para>

    <para>O ile typowa kompilacja programu składa się z wielu czynności
      wykonywanych przez użytkownika, o tyle pliki składające się na
      port zawierają dostateczną ilość informacji aby pozwolić
      systemowi zrobić to za nas. Wystarczy wprowadzić kilka prostych
      poleceń a system automatycznie pobierze kod źródłowy programu,
      rozpakuje, nałoży łatki, skompiluje i zainstaluje za nas.</para>

    <para>Ponadto system portów może również posłużyć do przygotowania
      pakietów, którymi następnie można manipulować za pomocą
      <command>pkg_add</command> i innymi poleceniami
      zarządzających pakietami.</para>

    <para>Obydwa systemy potrafią analizować <emphasis>zależności</emphasis>
      występujące pomiędzy aplikacjami. Załóżmy, że chcemy zainstalować
      program, który zależy od pewnej biblioteki. Zarówno program jak
      i biblioteka dostępne są w systemach portów i pakietów FreeBSD.
      Niezależnie od tego czy wykorzystamy polecenie <command>pkg_add</command>
      czy porty, by zainstalować program, to obydwa systemy spostrzegą,
      że biblioteka nie została zainstalowana i automatycznie zainstalują
      najpierw bibliotekę.</para>

    <para>Można by się zastanawiać dlaczego FreeBSD wykorzystuje obydwa
      systemy, skoro ich działanie jest tak bardzo podobne. Tak pakiety
      jak i porty posiadają pewne zalety. Który system wykorzystamy zależy
      od naszych własnych upodobań.</para>

    <itemizedlist>
      <title>Zalety pakietów</title>

      <listitem>
        <para>Skompresowany plik pakietu zajmuje z reguły mniej miejsca
          niż skompresowany plik zawierający kod źródłowy.</para>
      </listitem>

      <listitem>
        <para>Instalacja pakietów nie wymaga dodatkowej kompilacji.
          W przypadku dużych aplikacji, jak np. <application>Mozilla</application>,
          <application>KDE</application> czy <application>GNOME</application>
          może to być istotne. Szczególnie gdy pracuje się na dość wolnej
          maszynie.</para>
      </listitem>

      <listitem>
        <para>Stosowanie pakietów nie wymaga żadnej wiedzy o procesie
          kompilowania oprogramowania w systemie FreeBSD.</para>
      </listitem>
    </itemizedlist>

    <itemizedlist>
      <title>Zalety portów</title>

      <listitem>
        <para>Pakiety są z reguły kompilowane z dość typowymi opcjami,
          ponieważ powinny być przydatne do wykorzystania na maksymalnej
          liczbie komputerów. Instalując programy z portów mamy możliwość
          <quote>podkręcenia</quote> opcji kompilacji, by (przykładowo)
          skompilować program zoptymalizowany dla procesorów Pentium IV
          lub Athlon.</para>
      </listitem>

      <listitem>
        <para>Niektóre aplikacje posiadają pewne opcje kompilacji
          związane z zadaniami, które maja realizować. Przykładowo
          <application>Apache</application> może zostać skompilowany
          z wieloma różnorodnymi opcjami. Kompilując go z portów nie
          musimy zgadzać się na domyślne opcje mogąc samemu dokonać
          wyboru.</para>

        <para>W niektórych przypadkach dostępnych jest kilka pakietów
          tej samej aplikacji skompilowanych z różnymi parametrami.
          Na przykład program <application>Ghostscript</application>
          dostępny jest jako pakiet <filename>ghostscript</filename>
          oraz <filename>ghostscript-nox11</filename>, zależnie od
          tego czy mamy zainstalowany serwer X11. O ile tego typu
          rozwiązania są teoretycznie możliwe do zrealizowania w
          systemie pakietów, o tyle staje się to praktycznie niemożliwe
          gdy aplikacja posiada więcej niż kilka różnych opcji
          kompilacji.</para>
      </listitem>

      <listitem>
        <para>Warunki licencji niektórych aplikacji zabraniają
          rozprowadzania w postaci binarnej. Muszą być zatem rozprowadzane
          jako kod źródłowy.</para>
      </listitem>

      <listitem>
        <para>Niektórzy nie ufają pakietom binarnym. W przypadku
          kodu źródłowego można (przynajmniej w teorii) przejrzeć
          go i samemu poszukać potencjalnych luk.</para>
      </listitem>

      <listitem>
        <para>Jeśli posiadamy własne łaty będziemy potrzebowali
          kodu źródłowego aby je nanieść do programu.</para>
      </listitem>

      <listitem>
        <para>Jeszcze inni po prostu lubią mieć pod ręką kod źródłowy,
          by móc go poczytać gdy się nudzą, zmodyfikować czy zapożyczyć
          pewne rozwiązania (o ile pozwala na to licencja), itd.</para>
      </listitem>
    </itemizedlist>

    <para>Najlepszym sposobem śledzenia zmian dokonywanych w systemie
      portów jest zapisanie się na &a.pl.ports.b; oraz
      &a.pl.ports-bugs.b;.</para>

    <warning>
      <para> Przed instalacją jakiejkolwiek aplikacji należy sprawdzić
        na stronie <ulink url="http://vuxml.freebsd.org/"></ulink>
        czy w danym programie istnieją luki związane bezpieczeństwem.</para>

      <para>Alternatywnie możemy zainstalować <filename
	role="package">security/portaudit</filename>, który automatycznie
        sprawdza wszystkie instalowane programy pod względem znanych
        luk bezpieczeństwa; weryfikowane są również porty przed kompilacją.
        W między czasie można wykorzystać polecenie <command>portaudit
	-F -a</command>, by sprawdzić zainstalowane już pakiety.</para>
    </warning>

    <para>Pozostała część niniejszego rozdziału ma za zadanie wyjaśnić
      jak z wykorzystaniem systemu pakietów i portów instalować w systemie
      FreeBSD oprogramowanie innych producentów.</para>
  </sect1>

  <sect1 id="ports-finding-applications">
    <title>Odnalezienie programu dla siebie</title>

    <para>Nim przystąpimy do instalacji programów musimy wiedzieć
      co chcemy zainstalować i jak się nazywa.</para>

    <para>Lista dostępnych we FreeBSD programów rośnie cały czas.
      Na szczęście jest wiele sposobów na odnalezienie tego czego
      szukamy:</para>

    <itemizedlist>
      <listitem>
        <para>Na stronie internetowej FreeBSD pod adresem <ulink
	  url="&url.base;/ports/index.html">http://www.FreeBSD.org/ports/</ulink>
          znajduje jest aktualna lista dostępnych programów. Listę można
          dowolnie przeszukiwać według kilku kryteriów, np. nazwy (jeśli
          ją znamy). Możliwe jest również przejrzenie spisu wszystkich
          aplikacji znajdujących się w danej kategorii.</para>
      </listitem>

      <listitem>
	<indexterm><primary>FreshPorts</primary></indexterm>

        <para>Dzięki stronie FreshPorts (<ulink
	  url="http://www.FreshPorts.org/"></ulink>) prowadzonej
          przez Dana Langille'a możliwe jest bieżące śledzenie zmian
          aplikacji w drzewie portów. Witryna umożliwia otrzymywanie
          informacji drogą emailową o zmianach w wybranych
          portach.</para>
      </listitem>

      <listitem>
	<indexterm><primary>FreshMeat</primary></indexterm>

        <para>Jeśli nie znamy nazwy programu, który chcemy zainstalować,
          warto poszukać go na stronach pokroju FreshMeat (<ulink
	  url="http://www.freshmeat.net/"></ulink>) a następnie
          sprawdzić na stronie FreeBSD czy został przygotowany
          odpowiedni port.</para>
      </listitem>

      <listitem>
        <para>Jeśli znamy dokładną nazwę portu a chcemy sprawdzić
          z jakiej pochodzi kategorii, można skorzystać z polecenia
          &man.whereis.1;. Wystarczy wpisać <command>whereis
          <replaceable>plik</replaceable></command>, gdzie
          <replaceable>plik</replaceable> jest nazwą programu, którego
          poszukujemy. Otrzymany wynik będzie postaci:</para>

      <screen>&prompt.root; <userinput>whereis lsof</userinput>
lsof: /usr/ports/sysutils/lsof</screen>

      <para>Przykład ten informuje nas, że program <command>lsof</command>
        (narzędzie systemowe) znajduje się w katalogu
	<filename>/usr/ports/sysutils/lsof</filename>.</para></listitem>

      <listitem>
        <para>Jeszcze innym sposobem na odnalezienie danego portu jest
          wykorzystanie mechanizmu przeszukiwania kolekcji portów.
          By skorzystać z tej funkcji należy przejść do katalogu
          <filename>/usr/ports</filename>. Następnie wpisać
          <command>make search
            name=<replaceable>nazwa-programu</replaceable></command>,
          gdzie <replaceable>program-name</replaceable> jest nazwą
          poszukiwanej aplikacji. Przykładowo, szukając
          <command>lsof</command>:</para>

      <screen>&prompt.root; <userinput>cd /usr/ports</userinput>
&prompt.root; <userinput>make search name=lsof</userinput>
Port:   lsof-4.56.4
Path:   /usr/ports/sysutils/lsof
Info:   Lists information about open files (similar to fstat(1))
Maint:  obrien@FreeBSD.org
Index:  sysutils
B-deps:
R-deps: </screen>

      <para>Część wyniku, która nas interesuje to wiersz zaczynający
        się od <quote>Path:</quote>, a określający lokalizację portu.
        Pozostałe z uzyskanych w ten sposób informacji nie zostaną
        tutaj opisane, gdyż nie są potrzebne do instalacji
        programu.</para>

      <para>Szersze przeszukanie kolekcji portów możliwe jest
        wykorzystując <command>make
        search key=<replaceable>zwrot</replaceable></command>,
        gdzie <replaceable>zwrot</replaceable> jest dowolnym wyrazem.
        Opcja ta przeszukuje nazwy portów, komentarze, opisy i listy
        zależności. Może być wykorzystana do odnalezienia portów
        związanych z danym zagadnieniem gdy nie znamy nazwy
        poszukiwanego programu.</para>

      <para>W obydwu przypadkach nie są rozróżniane małe i duże
        litery w poszukiwanym ciągu. Szukając zatem <quote>LSOF</quote>
        oraz <quote>lsof</quote> otrzymamy takie same wyniki.</para>
      </listitem>

    </itemizedlist>
  </sect1>

  <sect1 id="packages-using">
    <sect1info>
      <authorgroup>
        <author>
          <firstname>Chern</firstname>
	  <surname>Lee</surname>
	  <contrib>Napisał </contrib>
        </author>
      </authorgroup>
    <!-- 30 Mar 2001 -->
      <authorgroup>
        <author>
          <firstname>Aleksander</firstname>
          <surname>Fafuła</surname>
          <contrib>Tłumaczył </contrib>
        </author>
      </authorgroup>
      <authorgroup>
        <author>
          <firstname>Cezary</firstname>
          <surname>Morga</surname>
          <contrib>Przekład uzupełnił </contrib>
        </author>
      </authorgroup>
    </sect1info>

    <title>Korzystanie z systemu pakietów</title>

    <sect2>
      <title>Instalacja pakietów</title>
      <indexterm>
        <primary>pakiety</primary>
        <secondary>instalacja</secondary>
      </indexterm>

      <indexterm>
        <primary><command>pkg_add</command></primary>
      </indexterm>
      <para>Programu &man.pkg.add.1; można użyć do instalacji
        programów zarówno z dysku lokalnego, jak i z sieci.</para>

      <example>
        <title>Ręczne pobranie pakietu i instalacja lokalna</title>

        <screen>&prompt.root; <userinput>ftp -a <replaceable>ftp2.FreeBSD.org</replaceable></userinput>
Connected to ftp2.FreeBSD.org.
220 ftp2.FreeBSD.org FTP server (Version 6.00LS) ready.
331 Guest login ok, send your email address as password.
230-
230-     This machine is in Vienna, VA, USA, hosted by Verio.
230-         Questions? E-mail freebsd@vienna.verio.net.
230-
230-
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
<prompt>ftp></prompt> <userinput>cd /pub/FreeBSD/ports/packages/sysutils/</userinput>
250 CWD command successful.
<prompt>ftp></prompt> <userinput>get lsof-4.56.4.tgz</userinput>
local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz
200 PORT command successful.
150 Opening BINARY mode data connection for 'lsof-4.56.4.tgz' (92375 bytes).
100% |**************************************************| 92375       00:00 ETA
226 Transfer complete.
92375 bytes received in 5.60 seconds (16.11 KB/s)
<prompt>ftp></prompt> <userinput>exit</userinput>
&prompt.root; <userinput>pkg_add <replaceable>lsof-4.56.4.tgz</replaceable></userinput></screen>
      </example>

      <para>Jeśli nie posiadamy lokalnego źródła programów (np na
        płytach CD FreeBSD), będzie Ci prawdopodobnie łatwiej użyć komendy
        &man.pkg.add.1; z opcją <option>-r</option>. Spowoduje to,
        że program samodzielnie określi odpowiednią wersję oprogramowania
        dla naszej wersji systemu. Następnie pobierze odpowiedni plik
        z sieci oraz go zainstaluje.</para>

      <indexterm>
        <primary><command>pkg_add</command></primary></indexterm>
      <screen>&prompt.root; <userinput>pkg_add -r <replaceable>lsof</replaceable></userinput></screen>

      <para>W powyższym przykładzie program pobierze właściwy pakiet
        i zainstaluje go bez jakiejkolwiek dalszej ingerencji użytkownika.
        Jeśli chcemy wskazać programowi alternatywny serwer lustrzany,
        należy odpowiednio zdefiniować zmienną środowiskową
        <envar>PACKAGESITE</envar>. Program  &man.pkg.add.1; do pobierania
        plików z serwerów wykorzystuje &man.fetch.3;, który z kolei
        wykorzystuje różnorodne zmienne środowiskowe, m.in.
        <envar>FTP_PASSIVE_MODE</envar>, <envar>FTP_PROXY</envar> oraz
	<envar>FTP_PASSWORD</envar>. Może się okazać, że będziemy musieli
        zdefiniować niektóre z nich jeśli nasz komputer znajduje się za
        zaporą ogniową, bądź musi korzystać z serwera pośredniczącego
        FTP/HTTP proxy. Więcej informacji znaleźć można w podręczniku
        systemowym programu &man.fetch.3;. Warto zauważyć, iż w
        powyższym przykładzie jako nazwę pakietu podano jedynie
        <literal>lsof</literal> zamiast <literal>lsof-4.56.4</literal>.
        Przy zdalnym pobieraniu pakietów nie należy podawać numeru wersji
        pakietu. Program &man.pkg.add.1; automatycznie pobierze najnowszą
        wersję aplikacji.</para>

      <note>
        <para>Program &man.pkg.add.1; pobierze najnowszą wersję aplikacji
          jedynie, gdy wykorzystujemy &os.current; albo &os.stable;. W przypadku
          -RELEASE pobrana zostanie wersja pakietu zbudowana dla danego wydania.
          Ograniczenie to można obejść modyfikując zmienną środowiskową
          <envar>PACKAGESITE</envar>. Na przykład, jeśli korzystamy z
          &os;&nbsp;5.4-RELEASE domyślnie &man.pkg.add.1; będzie pobierał
          pakiety z
          <literal>ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-5.4-release/Latest/</literal>.
          By zmusić go do pobierania pakietów zbudowanych dla
          &os;&nbsp;5-STABLE należy zmodyfikować zmienną <envar>PACKAGESITE</envar>
          by wskazywała na
          <literal>ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-5-stable/Latest/</literal>.</para>
      </note>

      <para>Pakiety rozpowszechniane są w formacie <filename>.tgz</filename>
        oraz <filename>.tbz</filename>. Możemy je pobrać z
        <ulink url="ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/"></ulink>,
        w Polsce z <ulink
          url="ftp://ftp.pl.FreeBSD.org/pub/FreeBSD/ports/packages/"></ulink>,
        bądź odnaleźć na płytach CDROM FreeBSD. Każda płyta z cztero płytowej
        dystrybucji (także PowerPak'a itp) zawiera pakiety w katalogu
        <filename>/packages</filename>. Struktura katalogu podobna jest
        do drzewa portów <filename>/usr/ports</filename>. Każda kategoria ma
        swój własny katalog, ponadto każdy pakiet może zostać odnaleziony
        w katalogu <filename>All</filename> (Wszystkie).</para>

      <para>Struktura katalogów pakietów jest identyczna względem
        struktury katalogów portów. Porty i pakiety kooperują za sobą,
        tworząc wspólnie cały system pakietów/portów.</para>

    </sect2>

    <sect2>
      <title>Zarządzanie pakietami</title>

      <indexterm>
        <primary>pakiety</primary>
        <secondary>zarządzanie</secondary>
      </indexterm>
      <para>Narzędziem służącym do przedstawienia informacji
        o zainstalowanych pakietach oraz wyświetlającym ich krótki
        opis jest &man.pkg.info.1;.</para>

      <indexterm>
        <primary><command>pkg_info</command></primary>
      </indexterm>
      <screen>&prompt.root; <userinput>pkg_info</userinput>
cvsup-16.1          A general network file distribution system optimized for CV
docbook-1.2         Meta-port for the different versions of the DocBook DTD
...</screen>
      <para>Program &man.pkg.version.1; jest natomiast narzędziem,
        które podsumowuje wersje wszystkich zainstalowanych pakietów.
        Porównuje je następnie z tymi które znajdują się w drzewie portów.</para>
      <indexterm>
        <primary><command>pkg_version</command></primary>
      </indexterm>
        <screen>&prompt.root; <userinput>pkg_version</userinput>
cvsup                       =
docbook                     =
...</screen>

      <para>Symbol w drugiej kolumnie określa wiek zainstalowanej wersji
        oprogramowania względem wersji odnalezionej w portach.</para>

      <informaltable frame="none" pgwide="1">
        <tgroup cols="2">
	  <thead>
            <row>
              <entry>Symbol</entry>
              <entry>Znaczenie</entry>
            </row>
          </thead>

 	  <tbody>
  	    <row>
	    <entry>=</entry> <entry>Wersja odnaleziona w portach jest
              identyczna.</entry>
  	    </row>

        <row><entry>&lt;</entry>
	<entry>Wersja jest starsza, niż ta odnaleziona w portach.</entry>
	</row>

        <row><entry>&gt;</entry><entry>Zainstalowana wersja jest nowsza,
            niż znaleziona w portach. (Prawdopodobnie lokalne drzewo portów
            nie zostało zaktualizowane.)</entry></row>

        <row><entry>?</entry><entry>Zainstalowany pakiet nie może zostać
            odnaleziony w drzewie portów. (Może to mieć miejsce np. w sytuacji
            gdy zainstalowany port został usunięty z kolekcji portów, bądź
            zmienił nazwę.)</entry></row>

        <row><entry>*</entry><entry>Istnieje wiele wersji tego programu.</entry></row>

	</tbody>
	</tgroup>
    </informaltable>
    </sect2>

    <sect2>
      <title>Usuwanie pakietów</title>
      <indexterm>
        <primary><command>pkg_delete</command></primary>
      </indexterm>
      <indexterm>
        <primary>pakiety</primary>
        <secondary>usuwanie</secondary>
      </indexterm>
      <para>Aby usunąć uprzednio zainstalowane oprogramowanie użyj &man.pkg.delete.1;.</para>

      <screen>&prompt.root; <userinput>pkg_delete <replaceable>xchat-1.7.1</replaceable></userinput></screen>
    </sect2>

    <sect2>
      <title>Dodatkowe informacje</title>
      <para>Wszystkie informacje o pakietach znajdują się w katalogu
        <filename>/var/db/pkg</filename>. Lista zainstalowanych plików,
        a także opis każdej paczki można odnaleźć właśnie w tym katalogu.
      </para>
    </sect2>
  </sect1>

  <sect1 id="ports-using">
    <sect1info>
      <authorgroup>
        <author>
          <firstname>Aleksander</firstname>
          <surname>Fafuła</surname>
          <contrib>Tłumaczył </contrib>
        </author>
      </authorgroup>
      <authorgroup>
        <author>
          <firstname>Cezary</firstname>
          <surname>Morga</surname>
          <contrib>Przekład uzupełnił </contrib>
        </author>
      </authorgroup>
    </sect1info>

    <title>Korzystanie z kolekcji portów</title>

    <para>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 <command>make</command>
      i zmiennych środowiskowych dostępny jest w podręczniku
      systemowym &man.ports.7;.</para>

    <sect2 id="ports-tree">
      <title>Pozyskanie kolekcji portów</title>

      <para>Zanim zainstalujemy jakikolwiek port, musimy pobrać
        kolekcję portów, która w zasadzie jest zestawem plików
        <filename>Makefiles</filename>, łat i opisowych. Kolekcja
        znajduje się w katalogu <filename>/usr/ports</filename>.</para>

      <para>W trakcie instalacji FreeBSD, <application>sysinstall</application>
        zapytał czy chcemy zainstalować kolekcję portów. Jeśli wybraliśmy
        nie, poniższe instrukcje pomogą nam własnoręcznie zainstalować
        kolekcję portów:</para>

      <procedure>
        <title>Metoda CVSup</title>

        <para>Jest to prosta i szybka metoda pobrania kolekcji portów
          wykorzystująca system <application>CVSup</application>.
          Więcej informacji o <application>CVSup</application> dostępnych
          jest w podrozdziale <link linkend="cvsup">Korzystanie z
          CVSup</link>.</para>

	<para>Bardzo ważnym jest, aby upewnić się, że katalog
          <filename class="directory">/usr/ports</filename> jest pusty
          nim po raz pierwszy uruchomimy <application>CVSup</application>!
          Jeśli posiadamy już kolekcję portów pozyskaną z innego źródła
          <application>CVSup</application> nie usunie nieużywanych
          plików łat.</para>

	<step>
          <para>Zainstaluj pakiet <filename
	    role="package">net/cvsup-without-gui</filename>:</para>

	  <screen>&prompt.root; <userinput>pkg_add -r cvsup-without-gui</userinput></screen>

          <para>Więcej informacji w podrozdziale <link
	      linkend="cvsup-install">Instalacja CVSup</link> (<xref
	      linkend="cvsup-install"/>).</para>
	</step>

	<step>
          <para>Uruchom <command>cvsup</command>:</para>

	  <screen>&prompt.root; <userinput>cvsup -L 2 -h <replaceable>cvsup.FreeBSD.org</replaceable> /usr/share/examples/cvsup/ports-supfile</userinput></screen>

	  <para>Warto zastąpić <replaceable>cvsup.FreeBSD.org</replaceable>
		  adresem serwera CVSup zlokalizowanego bliżej nas. Kompletna lista
		  serwerów lustrzanych dostępna jest w podrozdziale
		  <link linkend="cvsup-mirrors">Serwery lustrzane CVSup</link>
		  (<xref linkend="cvsup-mirrors"/>).</para>

	  <note>
		  <para>Można wykorzystać własny plik  <filename>ports-supfile</filename>,
			  by np. uniknąć konieczności podawania adresu serwera
			  <application>CVSup</application> z linii poleceń.</para>

	    <procedure>
	      <step>
                <para>W takim wypadku, jako użytkownik <username>root</username>,
                  skopiuj plik
                  <filename>/usr/share/examples/cvsup/ports-supfile</filename>
                  do innego katalogu, np. <filename>/root</filename> bądź własnego
                  katalogu domowego.</para>
	      </step>

	      <step>
                <para>Zmodyfikuj plik <filename>ports-supfile</filename>.</para>
	      </step>

	      <step>
                <para>Zmień wpis
                  <replaceable>CHANGE_THIS.FreeBSD.org</replaceable>na adres
                  wybranego serwera lustrzanego <application>CVSup</application>.
                  Kompletna lista serwerów lustrzanych dostępna jest w podrozdziale
                  <link linkend="cvsup-mirrors">Serwery lustrzane
                    CVSup</link> (<xref linkend="cvsup-mirrors"/>).</para>
	      </step>

	      <step>
                <para>Teraz uruchom <command>cvsup</command> używając
                  polecenia::</para>

		<screen>&prompt.root; <userinput>cvsup -L 2 <replaceable>/root/ports-supfile</replaceable></userinput></screen>
	      </step>
	    </procedure>
	  </note>
	</step>

	<step>
          <para>Późniejsze wpisanie polecenia &man.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.</para>
	</step>
      </procedure>

      <procedure>
        <title>Metoda Portsnap</title>

        <para><application>Portsnap</application> jest alternatywnym
          systemem dystrybucji kolekcji portów. Po raz pierwszy został
            dołączony do FreeBSD&nbsp;6.0. W starszych wersjach może zostać
            zainstalowany z pakietu <filename
	  role="package">sysutils/portsnap</filename>:</para>

	<screen>&prompt.root; <userinput>pkg_add -r portsnap</userinput></screen>

        <para>Szczegółowe informacje o możliwościach programu dostępne
          są w podrozdziale <link linkend="portsnap">Korzystanie z
            Portsnap</link>.</para>

	<step>
          <para>Ten punkt możemy pominąć jeśli posiadamy &os;&nbsp;6.1-RELEASE
            bądź najnowszą wersję programu <application>Portsnap</application>.
            Przy pierwszym uruchomieniu programu &man.portsnap.8;  zostanie
            automatycznie utworzony katalog <filename
	    class="directory">/usr/ports</filename>. W starszych wersjach programu
            wymagane jest własnoręczne utworzenie katalogu:</para>

	  <screen>&prompt.root; <userinput>mkdir /usr/ports</userinput></screen>
	</step>

	<step>
          <para>Pobierz skompresowaną migawkę kolekcji portów do katalogu
            <filename class="directory">/var/db/portsnap</filename>. Można następnie
            zakończyć połączenie z Internetem, jeśli jest taka potrzeba.</para>

	  <screen>&prompt.root; <userinput>portsnap fetch</userinput></screen>
	</step>

	<step>
          <para>Jeśli uruchamiany <application>Portsnap</application> po raz
            pierwszy należy rozpakować migawkę do katalogu
            <filename class="directory">/usr/ports</filename>:
	  </para>

	  <screen>&prompt.root; <userinput>portsnap extract</userinput></screen>

          <para>Jeśli posiadamy już kolekcję portów w <filename
	    class="directory">/usr/ports</filename> i jedynie ją aktualizujemy,
            wpisujemy polecenie:</para>

	  <screen>&prompt.root; <userinput>portsnap update</userinput></screen>
	</step>

      </procedure>

      <procedure>
        <title>Metoda sysinstall</title>

        <para>Metoda ta instaluje kolekcję portów z lokalnego nośnika posługując
          się programem <application>sysinstall</application>. 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.</para>

	<step>
          <para>Uruchom  <command>sysinstall</command> jako użytkownik
            <username>root</username> (<command>/stand/sysinstall</command>
            w wersjach &os; starszych niż 5.2):</para>

	  <screen>&prompt.root; <userinput>sysinstall</userinput></screen>
	</step>

	<step>
          <para>Przejdź w dół, wybierz <guimenuitem>Configure</guimenuitem>,
            i naciśnij <keycap>Enter</keycap>.</para>
	</step>

	<step>
          <para>Przejdź w dół, wybierz
            <guimenuitem>Distributions</guimenuitem> i naciśnij
	    <keycap>Enter</keycap>.</para>
	</step>

	<step>
          <para>Przejdź w dół do opcji <guimenuitem>ports</guimenuitem> i naciśnij
	    <keycap>Spację</keycap>.</para>
	</step>

	<step>
          <para>Przejdź do góry do opcji <guimenuitem>Exit</guimenuitem> i naciśnij
	    <keycap>Enter</keycap>.</para>
	</step>

	<step>
          <para>Ustaw wybrany przez siebie typ medium instalacji, jak np. płytę CDROM,
            serwer FTP, itd.</para>
	</step>

	<step>
          <para>Przejdź do góry do opcji <guimenuitem>Exit</guimenuitem> i naciśnij
	    <keycap>Enter</keycap>.</para>
	</step>

	<step>
          <para>Naciśni <keycap>X</keycap> by wyjść z programu
	    <application>sysinstall</application>.</para>
	</step>
      </procedure>
    </sect2>

    <sect2 id="ports-skeleton">
      <title>Instalacja Portów</title>

      <indexterm>
        <primary>porty</primary>
        <secondary>instalacja</secondary>
      </indexterm>
      <para>Pierwsza rzecz o jakiej należy wspomnieć omawiając
        kolekcję portów, jest <quote>szkielet</quote>. 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:</para>

      <itemizedlist>
	<listitem>
          <para>Plik <filename>Makefile</filename>.  Plik ten zawiera
            różne dane określające jak skompilować aplikację oraz gdzie
            ją zainstalować w systemie.</para>
	</listitem>

	<listitem>
          <para>Plik <filename>distinfo</filename> Plik ten zawiera informacje
            dotyczące plików, które muszą zostać pobrane, by skompilować
            port. Ponadto zawiera sumy kontrolne, na podstawie których
            &man.md5.1; potrafi sprawdzić, czy pliki nie uległy uszkodzeniu
            w trakcie pobierania z sieci.</para>
	</listitem>

	<listitem>
          <para>Katalog <filename>files</filename>, 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ą <quote>Usuń linię 10</quote> lub <quote>Zmień linię
              26 na to: ...</quote>. Łatki są także znane jako <quote>diffs</quote>
            (ang. skrót od różnice) ponieważ są generowane przez program
            &man.diff.1;.</para>

          <para>Ten katalog może zawierać także inne pliki używane do
            kompilacji portu.</para>
	</listitem>

	<listitem>
          <para>Plik opisu <filename>pkg-descr</filename>. Jest to bardziej
            szczegółowy, nierzadko wieloliniowy opis programu.</para>
	</listitem>

	<listitem>
          <para>Plik listy <filename>pkg-plist</filename>.  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.</para>
	</listitem>
      </itemizedlist>

      <para>Niekiedy porty zawierają również inne pliki, jak na przykład
        <filename>pkg-message</filename> (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
        <ulink url="&url.books.porters-handbook;/index.html">FreeBSD
          Porter's Handbook</ulink>.</para>

      <para>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 <quote>distfile</quote>. Poniżej przedstawione zostały dwie
        metody instalacji portów we &os;.</para>

      <note>
        <para> By móc zainstalować port musimy być zalogowania jako
          użytkownik <username>root</username>.</para>
      </note>

      <warning>
        <para> 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 <ulink
	  url="http://vuxml.freebsd.org/"></ulink>.</para>

        <para>Istnieje możliwość zautomatyzowania procesu weryfikacji
          potencjalnych luk bezpieczeństwa przed instalacją portu. Do tego
          celu można wykorzystać program <application>portaudit</application>,
          dostępny również w kolekcji portów (<filename
	  role="package">security/portaudit</filename>). Wydanie polecenia
          <command>portaudit -F</command> 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 &man.portaudit.1; i &man.periodic.8;.</para>
      </warning>

      <para>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 <quote>distfile</quote> i umieszczać
        w katalogu <filename>/usr/ports/distfiles</filename> dla każdego
        instalowanego portu.</para>

	<para>By rozpocząć instalację należy przejść do katalogu
          wybranego portu:</para>

        <screen>&prompt.root; <userinput>cd /usr/ports/sysutils/lsof</userinput></screen>

        <para>Wewnątrz katalogu <filename>lsof</filename> znajduje się
          szkielet portu. Następnym krokiem jest kompilacja programu, co
          sprowadza się do wpisania polecenia <command>make</command>.
          Efekt działania polecenia powinien być zbliżony do:</para>

        <screen>&prompt.root; <userinput>make</userinput>
&gt;&gt; lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
&gt;&gt; Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/.
===&gt;  Extracting for lsof-4.57
...
[extraction output snipped]
...
&gt;&gt; Checksum OK for lsof_4.57D.freebsd.tar.gz.
===&gt;  Patching for lsof-4.57
===&gt;  Applying FreeBSD patches for lsof-4.57
===&gt;  Configuring for lsof-4.57
...
[configure output snipped]
...
===&gt;  Building for lsof-4.57
...
[compilation output snipped]
...
&prompt.root;</screen>

        <para>Po skończeniu kompilacji powracamy do linii poleceń.
          Kolejnym krokiem jest instalacja portu poprzez wpisanie polecenia
          <command>make</command> wraz ze słowem
          <command>install</command>:</para>

        <screen>&prompt.root; <userinput>make install</userinput>
===&gt;  Installing for lsof-4.57
...
[installation output snipped]
...
===&gt;   Generating temporary packing list
===&gt;   Compressing manual pages for lsof-4.57
===&gt;   Registering installation for lsof-4.57
===&gt;  SECURITY NOTE:
      This port has installed the following binaries which execute with
      increased privileges.
&prompt.root;</screen>

        <para>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.</para>

        <para>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.</para>

	<screen>&prompt.root; <userinput>make clean</userinput>
===&gt;  Cleaning for lsof-4.57
&prompt.root;</screen>

        <note>
          <para>Można sobie oszczędzić dwóch naddatkowych kroków wpisując
            od razu <command>make install clean</command> zamiast trzech
            osobnych poleceń <command>make</command>,
	    <command>make install</command> oraz
            <command>make clean</command>.</para>
	</note>

	<note>
          <para>Niektóre powłoki utrzymują bufor listy poleceń
            z katalogów znajdujących się w zmiennej środowiskowej
            <envar>PATH</envar>. 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
            <command>rehash</command> po instalacji portu,
            nim będziemy mogli wykorzystać nowo zainstalowany
            program. Polecenie to dostępne jest przy wykorzystaniu
            powłoki typu <command>tcsh</command>. Natomiast
            dla powłoki typu <command>sh</command> odpowiednikiem
            jest <command>hash -r</command>. Więcej informacji
            dostępnych jest w dokumentacji powłoki.</para>
	</note>

        <para>Niektóre wydawnictwa na płytach DVD-ROM, jak np. FreeBSD
          Toolkit z <ulink url="http://www.freebsdmall.com/">FreeBSD
	  Mall</ulink>, zawierają źródła distfile. Mogą być one
          wykorzystane z kolekcją portów. Wystarczy zamontować płytę
          DVD w <filename>/cdrom</filename>. Jeśli natomiast używamy
          innego punktu montowania dla płyt musimy zmodyfikować zmienną
          <makevar>CD_MOUNTPTS</makevar> by wskazywała na właściwe
          miejsce. Niezbędne źródła distfile zostaną automatycznie
          wykorzystane jeśli znajdują się na płycie.</para>

	<note>
          <para>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.</para>
	</note>

        <para>System portów do pobierania plików wykorzystuje
          program &man.fetch.1;, który z kolei potrafi korzystać
          z wielu zmiennych środowiskowych, m.in.
          <envar>FTP_PASSIVE_MODE</envar>, <envar>FTP_PROXY</envar>
	  czy <envar>FTP_PASSWORD</envar>. 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 &man.fetch.3;.</para>

        <para>Dla użytkowników nie mogących być cały czas połączonych
          z Internetem dostępne jest polecenie
          <command>make <maketarget>fetch</maketarget></command>.
          Wystarczy wpisać to polecenie znajdując się w głównym
          katalogu drzewa portów (<filename>/usr/ports</filename>)
          a wymagane pliki zostaną automatycznie pobrane. Polecenie
          to będzie również funkcjonować w podkatalogach, np.
          <filename>/usr/ports/net</filename>. Jednakże, w takiej
          sytuacji <emphasis>nie</emphasis> zostaną automatycznie
          pobrane źródła bibliotek, od których zależy dany port.
          Zamieniając parametr <maketarget>fetch</maketarget> na
          <maketarget>fetch-recursive</maketarget> spowodujemy
          pobranie również źródeł wszystkich portów, od których
          zależy instalowany program.</para>

        <note><para>Możliwe jest kompilowanie każdego portu z osobna
          w danej kategorii, bądź wszystkich na raz poprzez polecenie
          <command>make</command> wykonane, analogicznie do
          <command>make <makevar>fetch</makevar></command>,
          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.</para></note>

	<para>W naprawdę żadkich przypadkach, użytkownicy mogą pozyskać
          pliki distfile z innego źródła niż <makevar>MASTER_SITES</makevar>
          (miejsce skąd je pobiera system portów). Opcję
          <makevar>MASTER_SITES</makevar> można zastąpić za
          pomocą następującego polecenia:</para>

	<screen>&prompt.root; <userinput>cd /usr/ports/<replaceable>directory</replaceable></userinput>
&prompt.root; <userinput>make MASTER_SITE_OVERRIDE= \
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch</userinput></screen>

	<para>W tym przykładzie zastąpiliśmy opcję
          <makevar>MASTER_SITES</makevar> adresem <hostid
	  role="fqdn">ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/</hostid>.</para>

        <note><para>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
          <filename role="package">www/mozilla</filename>, <filename
          role="package">security/gpgme</filename> oraz <filename
	  role="package">mail/sylpheed-claws</filename>. Za każdym
          razem gdy dostępne będą tego typu opcje wyświetlony
          zostanie komunikat.</para></note>

      <sect3>
        <title>Ignorowanie domyślnych katalogów portów</title>

        <para>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
          <makevar>WRKDIRPREFIX</makevar> i <makevar>PREFIX</makevar>.
          Na przykład:</para>

	<screen>&prompt.root; <userinput>make WRKDIRPREFIX=/usr/home/example/ports install</userinput></screen>

        <para>spowoduje skompilowanie portu w katalogu
          <filename>/usr/home/example/ports</filename> i instalację
          w podkatalogach <filename>/usr/local</filename>.</para>

	<screen>&prompt.root; <userinput>make PREFIX=/usr/home/example/local install</userinput></screen>

        <para>spowoduje natomiast kompilację w katalogu
          <filename>/usr/ports</filename> oraz instalację
          w podkatalogach
	  <filename>/usr/home/example/local</filename>.</para>

        <para>I oczywiście,</para>

	<screen>&prompt.root; <userinput>make WRKDIRPREFIX=../ports PREFIX=../local install</userinput></screen>

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

        <para>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.</para>
      </sect3>

      <sect3>
        <title>Jak poradzić sobie z <command>imake</command></title>

        <para>Niektóre porty wykorzystujące <command>imake</command>
          (część Systemu okien X) nie współpracują ze zmienną
          <makevar>PREFIX</makevar> i mimo wszystko będą
          instalowały programy w <filename>/usr/X11R6</filename>.
          Podobnie niektóre z portów napisanych w języku Perl
          ignorują zmienną <makevar>PREFIX</makevar>
          i instalują programy w głównym drzewie Perla.
          Zmuszenie tych portów do współpracy ze zmienną
          <makevar>PREFIX</makevar> jest niezmiernie trudne,
          albo wręcz niemożliwe.</para>

      </sect3>
    </sect2>

    <sect2 id="ports-removing">
      <title>Usuwanie zainstalowanych portów</title>

      <indexterm>
        <primary>porty</primary>
        <secondary>usuwanie</secondary>
      </indexterm>
      <para>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 <command>lsof</command>).
        Podobnie jak w przypadku pakietów (szerzej opisane
        w podrozdziale traktującym o <link
	linkend="packages-using">pakietach</link>),
        również porty usuwane są za pomocą polecenia
        &man.pkg.delete.1;:</para>

      <screen>&prompt.root; <userinput>pkg_delete lsof-4.57</userinput></screen>

    </sect2>

    <sect2 id="ports-upgrading">
      <title>Aktualizacja portów</title>

      <indexterm>
	<primary>porty</primary>
	<secondary>aktualizacja</secondary>
      </indexterm>
      <para>Na wstępie musimy wyświetlić zdezaktualizowane porty w kolekcji.
        Wykorzystamy do tego polecenie &man.pkg.version.1;:</para>

      <screen>&prompt.root; <userinput>pkg_version -v</userinput></screen>

      <sect3 id="ports-file-updating">
	<title><filename>/usr/ports/UPDATING</filename></title>

        <para>Po zaktualizowaniu kolekcji, a przed próbą aktualizacji
          jakichkolwiek portów, należy zapoznać się z zawartością pliku
          <filename>/usr/ports/UPDATING</filename>. 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.</para>

	<para>Jeśli opis w pliku <filename>UPDATING</filename> mówi coś innego
          niż ten tekst, należy zastosować się do opisu.</para>
      </sect3>

      <sect3 id="portupgrade">
        <title>Aktualizacja portów z wykorzystaniem programu Portupgrade</title>

	<indexterm>
	  <primary>portupgrade</primary>
	</indexterm>

        <para>Program <application>portupgrade</application> został
          zaprojektowany by ułatwić aktualizację zainstalowanych w
          systemie portów. Dostępny jest z portu <filename
	  role="package">sysutils/portupgrade</filename>.
          Jego instalacja przebiega dokładnie tak samo, jak każdego
          innego portu, wykorzystując polecenie
          <command>make <makevar>install
          clean</makevar></command> command:</para>

      <screen>&prompt.root; <userinput>cd /usr/ports/sysutils/portupgrade</userinput>
&prompt.root; <userinput>make install clean</userinput></screen>

      <para>Przeskanujmy następnie listę zainstalowanych portów
        za pomocą polecenia <command>pkgdb -F</command> i usuńmy
        wszystkie niezgodności jakie nam zwróci skanowanie.
        Regularne skanowanie przed każdą aktualizacją jest
        zdecydowanie dobrym pomysłem.</para>

      <para>Wydanie polecenia <command>portupgrade -a</command>
        spowoduje, że program <application>portupgrade</application>
        rozpocznie aktualizację wszystkich przedawnionych portów
        zainstalowanych w naszym systemie. Parametr <option>-i</option>
        pozwoli przejść w tryb interaktywny, gdzie będziemy musieli
        potwierdzić aktualizację każdego portu.</para>

      <screen>&prompt.root; <userinput>portupgrade -ai</userinput></screen>

      <para>By zaktualizować jedynie wybraną aplikację zamiast wszystkich
        portów należy wykorzystać polecenie <command>portupgrade
	<replaceable>nazwa_programu</replaceable></command>.
        Opcja <option>-R</option> oznacza, że portupgrade powinien
        najpierw zaktualizować wszystkie porty, od których
        zależy dany program.</para>

      <screen>&prompt.root; <userinput>portupgrade -R firefox</userinput></screen>

      <para>By do instalacji wykorzystać pakiety zamiast portów
        należy dodać parametr <option>-P</option>. Wówczas
        <application>portupgrade</application> przeszuka katalogi
        zawarte w zmiennej <envar>PKG_PATH</envar>. Jeśli pakiet
        nie zostanie odnaleziony lokalnie zostanie pobrany z Internetu.
        Jeśli nie będzie możliwe żadne z powyższych, wówczas
        <application>portupgrade</application> wykorzysta do
        aktualizacji porty. By temu zapobiec należy zastosować
        parametr <option>-PP</option>.</para>

      <screen>&prompt.root; <userinput>portupgrade -PR gnome2</userinput></screen>

      <para>Aby pobrać jedynie pliki źródłowe distfiles
        (bądź pakiety, gdy wykorzystamy opcję <option>-P</option>)
        bez kompilacji czy instalacji czegokolwiek należy użyć
        parametru <option>-F</option>. Więcej informacji
        dostępnych jest w &man.portupgrade.1;.</para>
      </sect3>

      <sect3 id="portmanager">
        <title>Aktualizacja portów z wykorzystaniem programu Portmanager</title>

	<indexterm>
	  <primary>portmanager</primary>
	</indexterm>

        <para>Kolejnym narzędziem ułatwiającym aktualizację zainstalowanych
          portów jest <application>Portmanager</application>, dostępny z portu
	  <filename role="package">sysutils/portmanager</filename>:</para>

	<screen>&prompt.root; <userinput>cd <filename class="directory">/usr/ports/sysutils/portmanager</filename></userinput>
&prompt.root; <userinput>make install clean</userinput></screen>

	<para>Wszystkie zainstalowane porty mogą zostać zaktualizowane
          za pomocą polecenia:</para>

	<screen>&prompt.root; <userinput>portmanager -u</userinput></screen>

        <para>Wykorzystując parametr <option>-ui</option> przechodzimy w tryb
          interaktywny, gdzie będziemy pytani o potwierdzenie każdej operacji
          wykonywanej przez <application>Portmanager</application>.
          Program ten może być z równym powodzeniem wykorzystywany do instalacji
          nowych portów w systemie. W przeciwieństwie do polecenia
          <command>make install clean</command> program
          <application>Portmanager</application> zaktualizuje wszystkie
          zależności nim skompiluje i zainstaluje wybrany port.</para>

	<screen>&prompt.root; <userinput>portmanager <replaceable>x11/gnome2</replaceable></userinput></screen>

        <para>Gdy wystąpią problemy z zależnościami wybranego portu
          można wykorzystać <application>Portmanager</application>a,
          by ponownie skompilował je we właściwej kolejności. Na
          koniec zostanie również ponownie skompilowany port
          stwarzający problemy.</para>

	<screen>&prompt.root; <userinput>portmanager <replaceable>graphics/gimp</replaceable> -f</userinput></screen>

        <para>Więcej informacji dostępnych jest na stronach podręcznika
          systemowego <application>Portmanager</application>a.</para>
      </sect3>
    </sect2>

    <sect2 id="ports-disk-space">
      <title>Porty i przestrzeń na dysku</title>

      <indexterm>
	<primary>porty</primary>
	<secondary>przestrzeń na dysku</secondary>
      </indexterm>
      <para>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.
        <filename class="directory">work</filename> directories)
        wykorzystując do tego polecenie <command>make
	<makevar>clean</makevar></command>. Całą kolekcję natomiast
        można oczyścić wpisujące polecenie:</para>

      <screen>&prompt.root; <userinput>portsclean -C</userinput></screen>

      <para>Z czasem uzbiera nam się wiele katalogów
        <filename class="directory">distfiles</filename>, 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:</para>

      <screen>&prompt.root; <userinput>portsclean -D</userinput></screen>

      <para>Badź, by usunąć wszystkie katalogi disftiles, do których nie odnosi się
        żaden z aktualnie zainstalowanych portów w naszym systemie:</para>

      <screen>&prompt.root; <userinput>portsclean -DD</userinput></screen>

      <note>
        <para>Program <command>portsclean</command> jest częścią pakietu
          <application>portupgrade</application>.</para>
      </note>

      <para>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
	<filename role="package">sysutils/pkg_cutleaves</filename>.</para>
    </sect2>

  </sect1>

  <sect1 id="ports-nextsteps">
    <title>Czynności po-instalacyjne</title>

    <para>Po zainstalowaniu nowego programu z reguły chcemy
      zapoznać się z dostarczoną z nim dokumentacją, zmodyfikować
      wymagane pliki konfiguracyjne, upewnić się, że program
      (jeśli jest to demon) będzie uruchamiany w trakcie
      ładowania systemu, itp.</para>

    <para>Oczywiście, szczegółowe kroki jakie należy podjąć
      konfigurując każdą aplikację będą różne. Tym nie mniej,
      jeśli właśnie zainstalowaliśmy nowy program i zastanawiamy
      się <quote>Co dalej?</quote> poniższe uwagi mogą
      okazać się pomocne:</para>

    <itemizedlist>
      <listitem>
        <para>Za pomocą &man.pkg.info.1; możemy sprawdzić gdzie
          i jakie pliki zostały zainstalowane. Na przykład, jeśli
          zainstalowaliśmy wersję 1.0.0 pakietu FooPackage,
          polecenie</para>

	<screen>&prompt.root; <userinput>pkg_info -L foopackage-1.0.0 | less</userinput></screen>

        <para>wyświetli nam wszystkie pliki zainstalowane
          z pakietu. Szczególną uwagę warto zwrócić na pliki
          zainstalowane w katalogach: <filename>man/</filename>
          zawierającym strony podręcznika systemowego,
          <filename>etc/</filename>  zawierającym pliki
          konfiguracyjne, oraz <filename>doc/</filename>,
          gdzie znajdować się będzie dużo obszerniejsza
          dokumentacja.</para>

        <para>Jeśli nie jesteśmy pewni, którą wersją programu
          zainstalowaliśmy, polecenie</para>

	<screen>&prompt.root; <userinput>pkg_info | grep -i <replaceable>foopackage</replaceable></userinput></screen>

        <para>wyświetli wszystkie zainstalowane pakiety
          zawierające <replaceable>foopackage</replaceable>
          w nazwie. Oczywiście <replaceable>foopackage</replaceable>
          należy zastąpić nazwą poszukiwanego pakietu.</para>
      </listitem>

      <listitem>
        <para>Gdy już udało się ustalić jakie strony podręcznika
          systemowego zostały zainstalowane przez dany pakiet,
          można je przeczytać za pomocą polecenia &man.man.1;.
          Warto również obejrzeć przykładowe pliki konfiguracyjne
          i wszelką dodatkową dokumentację.</para>
      </listitem>

      <listitem>
        <para>Jeśli dana aplikacja posiada własną witrynę internetową
          warto jest również tam poszukać dodatkowej dokumentacji
          czy odpowiedzi na często zadawane pytania (FAQ). Jeśli nie
          znamy właściwego adresu internetowego może być on podany
          w wyniku polecenia</para>

	<screen>&prompt.root; <userinput>pkg_info <replaceable>foopackage-1.0.0</replaceable></userinput></screen>

        <para>Wiersz <literal>WWW:</literal>, jeśli w ogóle jest
          podany, powinien zawierać informacje o adresie witryny.</para>
      </listitem>

      <listitem>
        <para>Programy, które powinny być uruchamiane podczas
          ładowania systemu (np. serwery internetowe) z reguły
          instalują przykładowy skrypt w
          <filename>/usr/local/etc/rc.d</filename>. Powinniśmy
          sprawdzić zawartość tego skryptu oraz w razie potrzeby
          zmodyfikować go bądź zmienić nazwę. Szczegółowe informacje
          dostępne są w podrozdziale <link
	  linkend="configtuning-starting-services">Uruchamianie
            usług</link>.</para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1 id="ports-broken">
    <title>Jak radzić sobie ze źle przygotowanymi portami</title>

    <para>Jeśli natknęliśmy się na port, który z jakichś
      powodów nie działa na naszym komputerze, możemy zrobić
      kilka następujących rzeczy:</para>

      <orderedlist>
	<listitem>
          <para>Sprawdzić w <ulink url="&url.base;/support.html#gnats">bazie
              danych zgłoszonych problemów</ulink> czy jest przygotowywana
            poprawka dla danego portu. Jeśli tak, może uda się nam
            zastosować tę poprawkę.</para>
	</listitem>

	<listitem>
          <para>Poprosić o pomoc opiekuna danego portu. Adres
            email opiekuna można znaleźć przeglądająć plik
            <filename>Makefile</filename> w katalogu portu bądź
            wpisująć polecenie <command>make maintainer</command>.
            Wysyłając wiadomość pamiętajmy o zawarciu informacji
            o nazwie i wersji portu (najlepiej jest zawrzeć cały
            wiersz z pliku <filename>Makefile</filename> zaczynający
            się od <literal>&dollar;FreeBSD:</literal>), oraz opis
            błędu i wynik działania programu w momencie
            zaistnienia błędu.</para>

	  <note>
            <para>Niektóre porty nie są przygotowywane przez pojedyncze
              osoby, ale raczej przez <ulink
	      url="&url.articles.mailing-list-faq;/article.html">grupy
                dyskusyjne</ulink>. Wiele adresów takich grup, choć nie
              wszystkie, ma postać
              <email role="nolink">freebsd-listname@FreeBSD.org</email>.
              Należy mieć również to na uwadze formułując swoje pytania.</para>

            <para>Porty przygotowywane przez
              <email role="nolink">freebsd-ports@FreeBSD.org</email>
              w rzeczywistości nie posiadają żadnego konkretnego opiekuna,
              ani grupy opiekunów. Poprawki i pomoc dla takich portów
              przygotowują osoby zapisane na tę listę dyskusyjną. Nowi
              ochotnicy są zawsze mile widziani!</para>
	  </note>

          <para>W przypadku braku odpowiedzi można również przesłać
            zgłoszenie błędu poprzez &man.send-pr.1; (szczegóły w artykule
            <ulink
	    url="&url.articles.problem-reports;/article.html">Writing
	    FreeBSD Problem Reports</ulink>).</para>
	</listitem>

        <listitem>
          <para>Naprawić błąd samemu! Podręcznik <ulink
            url="&url.books.porters-handbook;/index.html">Porter's
	    Handbook</ulink> (ang.) zawiera szczegółowe informacje
            o strukturze <quote>Portów</quote>, dzięki czemu można samemu
            naprawić błąd lub przygotować własny port!</para>
	</listitem>

	<listitem>
          <para>Pobrać pakiet z najbliższego serwera FTP.
            <quote>Główne</quote> repozytorium pakietów znajduje
            się na serwerze <hostid
	    role="fqdn">ftp.FreeBSD.org</hostid> w katalogu <ulink
	    url="ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/">packages</ulink>.
            Tym nie mniej warto jest najpierw odszukać <ulink
	    url="http://mirrorlist.FreeBSD.org/">lokalny serwer
            lustrzany</ulink>. Szanse na to, że gotowe pakiety
            będą działać poprawnie są większe niż w przypadku
            kompilowania programów. Pakiety można zainstalować
            za pomocą programu &man.pkg.add.1;.</para>
	</listitem>
      </orderedlist>
  </sect1>

</chapter>