Anketa

Ktorý návod by ste cheli ako ďalší?:

Partenské projekty

FreeBSD - Používanie sytému portov

Verzia pre tlačSend by emailPDF verzia

Nasledujúce časti poskytujú základné inštrukcie o používaní kolekcie portov – ako nainštalovať a odstrániť programy zo systému. Podrobný popis dostupných cieľov pre make a dostupných premenných prostredia sa nachádza na man stránke ports(7).

Získanie kolekcie portov

Pred inštalovaním portov najskôr musíme získa kolekciu portov, ktorá pozostáva zo sady Makefiles, záplaty a popisy súborov umiestnených v adresári /usr/ports.

Pri inštalovaní systému FreeBSD, sa program sysinstall opýta, či chceme nainštalovať kolekciu portov (Ports Collection). Ak sme zvolili Nie, môžeme kolekciu portov získať nasledovne:

Metóda CVSup

Toto je rýchla metóda na získanie a udržanie aktuálnej kolekcie portov prostredníctvom protokolu CVSup. Ak sa chceme o CVSup dozvedieť viac, môžeme navštíviť stránku Using CVSup.

Poznámka: Implementácia protokolu CVSup je zahrnutá do FreeBSD systému s názvom csup.

Uistíme sa, že adresár /usr/ports je pred prvým spustením csup prázdny! Ak už máme kolekciu portov, ktorú sme získali z iného zdroja, csup sa nebude vedieť zbaviť odstránených súborov záplat.

  1. Spustíme csup:

    # csup -L 2 -h cvsup.FreeBSD.org /usr/share/examples/cvsup/ports-supfile
    

    Adresu cvsup.FreeBSD.org zmeníme na adresu CVSup servera, ktorý je blízko nás. Úplný zoznam zrkadiel sa nachádza na stránke CVSup Mirrors (Section A.6.7).

    Poznámka: Niekto používa vlastný súbor ports-supfile, napríklad preto, aby sa vyhol potrebe zadávania adresy CVSup servera do príkazového riadka.

    1. V takom prípade ako používateľ root, skopírujeme súbor /usr/share/examples/cvsup/ports-supfile na nové miesto, napríklad do adresára /root alebo do domovského priečinka.

    2. Upravíme ports-supfile.

    3. Zmeníme adresu CHANGE_THIS.FreeBSD.org na adresu CVSup servera blízko nás. Úplný zoznam zrkadiel sa nachádza na stránke CVSup Mirrors (Section A.6.7).

    4. A teraz spustíme csup nasledovne:

      # csup -L 2 /root/ports-supfile
      
  2. Ďalšie spustenia príkazu csup(1) stiahnu a aplikujú posledné zmeny do kolekcie portov, okrem skutočného opätovného zostavenia portov pre náš systéme.

Metóda Portsnap

Portsnap je alternatívny systém pre distribuovanie kolekcie portov. Viac podrobností o funkciách nástroja Portsnap sa nachádza na stránke Using Portsnap.

  1. Stiahneme si komprimovanú snímku kolekcie portov do adresára /var/db/portsnap. Po tomto kroku môžeme odpojiť internet.

    # portsnap fetch
    
  2. Ak spúšťame Portsnap prvý krát, rozbalíme snímku do adresára /usr/ports:

    # portsnap extract
    

    Ak už máme adresár /usr/ports naplnený a chceme ho iba aktualizovať, spustíme nasledujúci príkaz:

    # portsnap update
    

Metóda Sysinstall

Táto metóda umožňuje pomocou nástroja sysinstall nainštalovať kolekciu portov z inštalačného nosiča. V takomto prípad bude nainštalovaná stará kópia kolekcie portov zo dňa vydania distribúcie. Ak máme prístup na internet, mali by sme použiť niektorú z predchádzajúcich metód.

  1. Ako používateľ root spustíme sysinstall nasledujúcim spôsobom:
    # sysinstall
    
  2. Posunieme sa dole, zvolíme Configure a stlačíme Enter.
  3. Posunieme sa dole, zvolíme Distributions a stlačíme Enter.
  4. Posunieme sa dole na porty a stlačíme medzeru.
  5. Posunieme sa hore na Exit a stlačíme Enter.
  6. Zvolíme si príslušný inštalačný nosič, ako napríklad CDROM, FTP, a pod.
  7. Posunieme sa hore na Exit a stlačíme Enter.
  8. Stlačením X ukončíme nástroj sysinstall.

Inštalovanie portov

Prvá vec, ktorú je potrebné objasniť, pri práci s kolekciou portov je, čo to znamená “kostra”. Kostra portu je v podstate minimálna množina súborov, ktorá povie nášmu systému FreeBSD, ako bez problémov preložiť program do binárnej podoby a ako ho nainštalovať. Každá kostra portu obsahuje:

  • Makefile. Súbor Makefile obsahuje rôzne príkazy, ktoré určujú, ako by mala byť aplikácia preložená a kam v systéme by mala byť nainštalovaná.

  • Súbor distinfo. Tento súbor obsahuje informáciu o súboroch, ktoré musia byť stiahnuté kvôli zostaveniu portu, a ich kontrolné súčty (vytvorené pomocou sha256(1)), aby bolo možné overiť, či súbory neboli počas sťahovania poškodené.

  • Adresár files. Tento adresár obsahuje záplaty, ktoré umožnia program preložiť a nainštalovať do systému FreeBSD. Záplaty sú jednoducho malé súbory, ktoré určujú zmeny v jednotlivých súboroch. Pozostávajú z bežného textu, ktorý hovorí “Odstrániť riadok 10” alebo “Zmeniť riadok 26 na toto ...”. Záplaty sú tiež známe ako “rozdiely” pretože sú vytvorené pomocou programu diff(1).

    Tento adresár môže obsahovať aj ďalšie súbory potrebné na zostavenie portu.

  • Súbor pkg-descr. Toto je podrobnejší, často viacriadkový popis programu.

  • Súbor pkg-plist. Toto je zoznam všetkých súborov, ktoré budú nainštalované portom. Hovoria tiež systému portov, ktoré súbory majú byť odstránené pri odinštalovaní.

Niektoré porty majú ďalšie súbory ako napríklad pkg-message. Systém portov používa tieto súbory na spracovanie špeciálnych situácií. Viac informácií o týchto súboroch a o portoch vo všeobecnosti, sa nachádza na stránke FreeBSD Porter's Handbook.

Port obsahuje inštrukcie o tom, ako zostaviť zdrojový kód, no neobsahuje aktuálny zdrojový kód. Zdrojový kód môžeme získať z CD disku alebo z internetu. Je distribuovaný spôsobom, pre ktorý sa rozhodne jeho autor. Najčastejšie je to súbor komprimovaný do formátu tar a gzipp, no môže byť komprimovaný aj inými nástrojmi alebo sa môže dodávať v nekomprimovanej podobe. Zdrojový kód programu, v ľubovoľnej podobe, sa nazýva distribučný súbor alebo “distfile”. Nižšie popíšeme dve možnosti akými sa dá FreeBSD nainštalovať.

Poznámka: Keď chceme inštalovať porty, musíme byť prihlásení ako používateľ root.

Upozornenie: Pred inštalovaním akéhokoľvek portu, by sme sa mali uistiť, či máme aktuálnu kolekciu portov a skontrolovať problémy súvisiace s bezpečnosťou daného portu na adrese http://vuxml.freebsd.org/.

Kontrola zraniteľnosti môže byť pred každou novou inštaláciou aplikácie automaticky vykonaná pomocou nástroja portaudit. Tento nástroj môžeme nájsť v kolekcii portov (ports-mgmt/portaudit). Pred inštaláciou nového portu je vhodné spustiť príkaz portaudit -F, ktorý získa aktuálnu databázu o zraniteľnostiach. Audit bezpečnosti a aktualizácia databázy sa vykonajú pri každodennej kontrole zabezpečenia systému. Viac informácii sa nachádza na man stránkach nástrojov portaudit(1) a periodic(8).

Kolekcia portov predpokladá, že máme funkčné pripojenie na internet. Ak to tak nie je, je potrebné distribučný súbor nahrať do adresára /usr/ports/distfiles ručne.

Začneme tým, že vojdeme do adresára, do ktorého chceme port inštalovať:

# cd /usr/ports/sysutils/lsof

Keď sme v adresáre lsof, uvidíme kostru portu. Ďalší krok je preloženie alebo “zostavenie” portu. Toto urobíme tak, že do príkazového riadka zadáme make. Keď sme hotoví, mali by sme vidieť niečo takéto:

# 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]
...
#

Keď je preklad do binárneho tvaru hotový, opäť uvidíme výzvu príkazového riadku (#). Ďalším krokom je inštalácia portu. Aby sa port nainštaloval, použijeme znova príkaz make, no tentoraz spolu so slovom 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.
#

Keď sa opäť zobrazí výzva príkazového riadka, aplikácia, ktorú sme nainštalovali, by sa mala dať spustiť. Kvôli tomu, že lsof je program, ktorý je potrebné spustiť s vyššími oprávneniami, zobrazí sa varovanie týkajúce sa zabezpečenia. Mali by sme tiež sledovať všetky varovania vypísané počas zostavovania a inštalácie portov.

Je tiež vhodné vymazať pracovný podadresár, ktorý obsahuje všetky dočasné súbory použité počas prekladu. Nie je to len kvôli šetreniu diskového priestoru, ale aj kvôli tomu, že to môže spôsobiť problémy pri prechode na novšiu verziu portu.

# make clean
===>  Cleaning for lsof-4.57
#

Poznámka: Môžeme ušetriť dva kroky, ak použijeme príkaz make install clean namiesto použitia príkazov make, make installmake clean v troch krokoch.

Poznámka: Niektoré prostredia shell uchovávajú vo vyrovnávacej pamäti  príkazy, ktoré sú dostupné v adresároch uvedených v premennej prostredia PATH, aby urýchlili vyhľadávanie spustiteľných súborov týchto príkazov. Ak jeden z týchto prostredí shell používame, mali by sme po inštalácii portu použiť príkaz rehash, pred tým ako novo inštalovaný príkaz použijeme. Tento príkaz bude pracovať v prostrediach ako napríklad tcsh. Príkaz hash -r je zasa potrebné použiť v prostrediach ako sh. Viac informácii sa nachádza v dokumentácii ku konkrétnym prostrediam shell.

Niektoré DVD-ROM produkty od tretích strán ako napríklad FreeBSD Toolkit od  FreeBSD Mall, môžu byť tiež použité kolekciou portov. Pripojíme DVD-ROM do adresára /cdrom. Ak použijeme iný bod pripojenia, nastavíme premennú CD_MOUNTPTS. Potrebné distribučné súbory sa automaticky použijú, keď je disk v mechanike.

Poznámka: Pri niektorých portoch je potrebné dať pozor na licenciu, ktorá neumožňuje začlenenie diskov CD-ROM. Je to kvôli tomu, že niektoré programy vyžadujú registráciu, ktorú je potrebné vyplniť pred stiahnutím alebo ak nie je povolená ďalšie, alebo z iných dôvodov. Ak chceme inštalovať port, ktorý nie je obsiahnutý na disku CD-ROM, aj tak musíme byť pripojení do siete.

Systém portov používa na sťahovanie súborov nástroj fetch(1), ktorý rešpektuje rôzne premenné prostredia, vrátane premenných FTP_PASSIVE_MODE, FTP_PROXYFTP_PASSWORD. Ak sa nachádzame za firewallom, môže byť potrebné niektoré z nich nastaviť alebo nastaviť adresu sprostredkujúcej (proxy) FTP/HTTP stanice. Úplný zoznam sa nachádza na stránke fetch(3).

Pre používateľov, ktorý nemôžu byť stále pripojený, sa poskytuje možnosť make fetch. Stačí tento príkaz spustiť v adresári najvyššej úrovne (/usr/ports) a potrebné súbory sa stiahnu. Tento príkaz funguje aj v nižších adresároch, ako napríklad: /usr/ports/net. Tu však platí, že ak port závisí na knižniciach alebo iných portoch, tieto sa nestiahnu. Ak chceme stiahnuť aj závislosti portu, je potrebné príkaz fetch nahradiť príkazom fetch-recursive.

Poznámka: Môžeme zostaviť všetky porty z kategórie alebo ako celok pomocou príkazu make v adresári najvyššej úrovne, pomocou vyššie uvedenej metódy make fetch. Toto je však nebezpečné, pretože niektoré porty nemôžu spolu fungovať. V iných prípadoch zasa niektoré porty môžu inštalovať dva rozdielne súbory s rovnakým názvom.

V niektorých ojedinelých prípadoch je potrebné, aby používatelia prevzali tar balík z inej stránky ako je MASTER_SITES (miesto odkiaľ sa sťahujú súbory). Voľbu MASTER_SITES je možné prevážiť nasledujúcim príkazom:

# cd /usr/ports/adresár
# make MASTER_SITE_OVERRIDE= \
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch

V tomto príklade zmeníme voľbu MASTER_SITES na ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.

Poznámka: Niektoré porty umožňujú (alebo priamo vyžadujú) poskytnutie volieb, ktoré povolia/zakážu časti aplikácie, ktoré sú nepotrebné, zmenia nastavenia bezpečnosti a inak prispôsobia aplikáciu. Medzi takéto porty patria napríklad www/firefox, security/gpgmemail/sylpheed-claws. Ak sú k dispozícii voľby, zobrazí sa o tom správa.

Nahradenie predvolených adresárov portov

Niekedy je užitočné (alebo potrebné) použiť iný pracovný a cieľový adresár. Pomocou premenných WRKDIRPREFIXPREFIX môžeme predvolené adresáre prevážiť. Napríklad:

# make WRKDIRPREFIX=/usr/home/example/ports install

preloží port v /usr/home/example/ports a nainštaluje všetko do /usr/local.

# make PREFIX=/usr/home/example/local install

preloží port v /usr/ports a nainštaluje ho do /usr/home/example/local.

A samozrejme,

# make WRKDIRPREFIX=../ports PREFIX=../local install

Skombinuje obe premenné (kvôli úspore miesta sme sme to nerozpisovali, no pre základnú predstavu to stačí).

Tieto premenné tiež môžeme nastaviť ako súčasť prostredia. Ako sa to robí, sa môžeme dozvedieť na man stránkach príslušného shellu.

Práca s imake

Niektoré porty, ktoré používajú imake (súčasť systémeu X Window) nerešpektujú  PREFIX a inštalujú sa do /usr/X11R6. Podobne niektoré porty Perlu PREFIX ignorujú a inštalujú sa do stromu Perl. Dosiahnutie toho, aby tieto porty rešpektovali  PREFIX je obtiažna a niekedy až nemožná úloha.

Prekonfigurovanie portov

Pri zostavovaní určitých portov sa môžeme stretnúť s ponukou na báze ncurses, z ktorej si môžeme vybrať určité voľby pre zostavenie. Nie je neobvyklé, že používatelia chcú po zostavení portu túto ponuku znova navštíviť a niektoré voľby pridať, odobrať alebo zmeniť. Existuje mnoho spôsobov, ako sa to dá urobiť. Jednou z možností je prejsť do adresára, ktorý obsahuje port a zadať make config, čím sa znova vyvolá ponuka s rovnakými voľbami. Druhý spôsob je použitie príkazu make showconfig, ktorý zobrazí konfiguračné voľby portu. Ďalšou možnosťou je spustenie make rmconfig, ktorý odstráni všetky označené voľby a umožní začať odznova. Všetky tieto možnosti spolu s ďalšími sa nachádzajú na manuálovej stránke ports(7).

Odstránenie nainštalovaných portov

Teraz, keď vieme, ako sa porty inštalujú, zrejme nás bude zaujímať, ako porty odstrániť, pre prípad, že nainštalujeme port a neskôr zistíme, že sme nainštalovali zlý port. Odstránime predchádzajúci príklad (ktorým bol lsof). Porty sa odstraňujú presne tým istým spôsobom ako balíky (o ktorom sme hovorili v časti Používanie systému balíčkov), pomocou príkazu pkg_delete(1):

# pkg_delete lsof-4.57

Aktualizovanie portov

Najskôr vypíšeme neaktuálne porty, ktoré majú dostupné novšie verzie v kolekcii portov, pomocou príkazu pkg_version(1):

# pkg_version -v

/usr/ports/UPDATING

Keď máme aktualizovanú kolekciu portov, pred spustením aktualizácie portu skontrolujeme  /usr/ports/UPDATING. Tento súbor popisuje rôzne problémy a hovorí o krokoch, ktoré je potrebné ešte vykonať pri aktualizovaní portu. Napríklad môže obsahovať také veci, ako zmenu súborového formátu, zmeny v umiestnení konfiguračných súborov a informácie o ďalších nekompatibilnostiach s predchádzajúcimi verziami.

Ak UPDATING obsahuje niečo čo odporuje tomuto textu, tak je potrebné riadiť sa pokynmi z UPDATING.

Aktualizovanie portov pomocou nástroja Portupgrade

Nástroj portupgrade je navrhnutý pre jednoduché aktualizovanie nainštalovaných portov. Je dostupný z portu ports-mgmt/portupgrade. Inštalácia prebieha rovnako ako  pri ktoromkoľvek inom porte, pomocou príkazu make install clean:

# cd /usr/ports/ports-mgmt/portupgrade
# make install clean

Prehľadáme zoznam nainštalovaných portov pomocou príkazu pkgdb -F a opravíme všetky nekonzistencie, ktoré príkaz oznámi. Je to vhodné urobiť pred každou aktualizáciou.

Keď spustíme portupgrade -a, portupgrade začne aktualizovať všetky neaktuálne porty nainštalované do systému. Ak chceme aktualizáciu jednotlivých portov potvrdzovať, pridáme prepínač -i.

# portupgrade -ai

Ak chceme aktualizovať iba konkrétne aplikácie a nie všetky dostupné porty, použijeme príkaz portupgrade názovbalíka. Ak chceme aktualizovať aj porty, ktoré sú danou aplikáciou požadované, pridáme prepínač -R.

# portupgrade -R firefox

Ak chceme pri inštalácii použiť balíky namiesto portov, použijeme prepínač-P. S touto voľbou portupgrade vyhľadá miestne adresáre uvedené v PKG_PATH, alebo prevezme balíky zo vzdialenej stránky ak ich nenájde v počítači. Ak sa balíky nenachádzajú v počítači a nedajú sa prevziať, portupgrade použije porty. Ak chceme zabrániť, aby sa použili porty, zadáme -PP.

# portupgrade -PP gnome2

Ak chceme získať distribučné súbory (alebo balíky, ak je použité -P) bez zostavovania a inštalovania čohokoľvek, použijeme -F. Viac informácií sa nachádza portupgrade(1).

Aktualizovanie portov pomocou nástroja Portmanager

Portmanager je ďalší nástroj na jednoduché aktualizovanie nainštalovaných portov. Je dostupný ako port ports-mgmt/portmanager:

# cd /usr/ports/ports-mgmt/portmanager
# make install clean

Všetky nainštalované porty sa dajú aktualizovať pomocou jednoduchého príkazu:

# portmanager -u

Ak chceme potvrdzovať každý krok, ktorý  Portmanager  vykonáva, pridáme voľbu -ui. Portmanager sa dá použiť aj na inštalovanie nových portov do systému. Namiesto príkazu make install clean aktualizuje všetky závislosti potrebné na zostavenia a nainštalovanie vybraného portu.

# portmanager x11/gnome2

Ak sú nejaké problémy pri riešení závislostí pre vybraný port, môžeme použiť Portmanager na opätovné zostavenie všetkých portov v správnom poradí. Po skončení sa zostaví aj problematický port.

# portmanager graphics/gimp -f

Viac informácií sa nachádza na stránke portmanager(1).

Aktualizovanie portov pomocou nástroja Portmaster

Portmaster je ďalší nástroj na aktualizovanie nainštalovaných portov. Portmaster bol navrhnutý tak, aby využíval nástroje, ktoré nájde v “základnom” systéme (nezávisí na iných portoch) a na zistenie, ktoré porty má aktualizovať, používa informácie v /var/db/pkg/. Je dostupný ako port ports-mgmt/portmaster:

# cd /usr/ports/ports-mgmt/portmaster
# make install clean

Portmaster zoskupuje porty do štyroch kategórií:

  • Kmeňové – root porty (nezávisia na iných portoch, ani iné porty nezávisi na danom porte)
  • Oporné – trunk porty (nezávisia na iných portoch, ale iné porty závisia na nich)
  • Vetviace – branch porty (závisia od iných portov aj iné porty závisia na nich)
  • Koncové – leaf porty (závisia od iných portov, no iné porty od nich nezávisia)

Zoznam všetkých nainštalovaných portov a ich aktualizácií môžeme nájsť pomocou voľby -L:

# portmaster -L
===>>> Root ports (No dependencies, not depended on)
===>>> ispell-3.2.06_18
===>>> screen-4.0.3
        ===>>> New version available: screen-4.0.3_1
===>>> tcpflow-0.21_1
===>>> 7 root ports
...
===>>> Branch ports (Have dependencies, are depended on)
===>>> apache-2.2.3
        ===>>> New version available: apache-2.2.8
...
===>>> Leaf ports (Have dependencies, not depended on)
===>>> automake-1.9.6_2
===>>> bash-3.1.17
        ===>>> New version available: bash-3.2.33
...
===>>> 32 leaf ports

===>>> 137 total installed ports
        ===>>> 83 have new versions available

Všetky nainštalované porty sa dajú aktualizovať pomocou jednoduchého príkazu:

# portmaster -a

Poznámka: Portmaster štandardne vytvorí záložný balík pred odstránením existujúceho portu. Ak je inštalácia novej verzie úspešná, Portmaster zálohu zmaže. Ak nechceme aby Portmaster zálohu zmazal, môžeme použiť voľbu -b. Pridaním voľby -i dosiahneme, aby sa Portmaster spustil v interaktívnom režime, ktorý bude vyžadovať potvrdenie aktualizácie každého portu.

Ak program narazí na chybu, môžeme použiť voľbu -f na aktualizáciu alebo znovu zostavenie všetkých portov:

# portmaster -af

Portmaster môžeme použiť aj na inštalovanie nových portov do systému, aktualizovanie všetkých závislostí pred zostavením a inštaláciu nového portu:

# portmaster shells/bash

Viac informácií sa nachádza na stránke portmaster(8).

Porty a diskový priestor

Používanie kolekcie portov zvyšuje využitie disku. Po zostavení a nainštalovaní softvéru z portov by sme nemali zabudnúť vyčistiť dočasné adresáre work pomocou príkazu make clean. Celú kolekciu portov môžeme upratať pomocou nasledujúceho príkazu:

# portsclean -C

Časom sa môže v adresári distfiles nahromadiť veľké množstvo starých distribučných súborov. Môžeme ich odstrániť ručne, alebo pomocou nasledujúceho príkazu na zmazanie všetkých distribučných súborov, na ktoré už neodkazujú žiadne porty:

# portsclean -D

Alebo môžeme odstrániť všetky distribučné súbory, na ktoré neodkazuje žiadny aktuálne nainštalovaný port:

# portsclean -DD

Poznámka: Nástroj portsclean je súčasťou sady portupgrade.

Porty ktoré nepotrebujeme je vhodné odstrániť. Pekným nástrojom na zautomatizovanie tejto úlohy je dostupný ako port ports-mgmt/pkg_cutleaves.