Hlavní navigace

FreeBSD porty - Ako na to

Daniel Geržo 3. 1. 2005

Už ste sa niekedy stretli so situáciou, že sa v strome FreeBSD portov nenachádzala váša obľúbená aplikácia? Alebo, že sa tam nachádzala, ale bola už stará? Čo tak portnúť niečo do FBSD?

FreeBSD spravovací systém balíčkov – portov – sa považuje za jeden z najlepších medzi unix-like systémami. Je to systém mnohých adresárov v /usr/ports, ktoré obsahujú presne upravené Makefily, podľa ktorých sa budú kompilovať zdrojáky jednotlivých aplikácií. Okrem portov FreeBSD samozrejme prichádza aj s predkompilovanými packagemi. Snáď všetky významné aplikácie, ktoré ľudia používajú, sú portovanie do FreeBSD systému, no občas sa stane, že sa v ňom niečo nenájde. Možno sa už niekto z vás zaujímal, či je možné nejako prispieť k vývoju portov. To, samozrejme vo FreeBSD, možné je. Každý môže prispieť do tohto systému novým portom, alebo sa uchytiť takého, ktorý bol bývalým maintainerom zabudnutý. Na to netreba žiadne špeciálne práva k prístupu k cvs.

Takže ak sa naozaj zaujímate o portovanie balíčkov do FreeBSD, ste na správnom mieste :). Nebude to tu nič extra detailné, čiže ak sa chcete dozvedieť viac, preklikajte sa z freebsd.org na porter's handbook, kde je presnejší popis spôsobu portovania.

Najzákladnejším a najdôležitejším faktom úspešného vytvorenia nového portu je tvorba tzv. Makefile. Tento súbor je hlavným riadiacim činiteľom pri kompilácii a inštalácii portu. V podstate to je súbor jazyka používaného utilitou make(1) a má podobnú syntax ako shell skript, ktorý obsahuje mnoho premenných.

Minimálny Makefile vyzerá približne takto:

# New ports collection makefile for:   test
# Date created:        20 December 2004
# Whom:                somebody
#
# $FreeBSD$
#

PORTNAME=      test
PORTVERSION=   1.1a
CATEGORIES=    games
MASTER_SITES=  ftp://somewhere.org/files/test

MAINTAINER=    somebody@somewhere.org
COMMENT=       Testing port

MAN1=          test.1
MANCOMPRESSED= yes
USE_IMAKE=     yes

.include <bsd.port.mk>

riadok $FreeBSD$ sa upraví v čase, kedy bude váš port commitnutý do cvs, čiže o tento riadok sa vôbec nemusíte starať.

Každý port by mal obsahovať súbor s názvom „pkg-descr“. Tento súbor v sebe obsahuje dlhší popis toho, čo konkrétny balíček robí. Nie je to však manuál čiže z neho nerobte siahodlhý zoznam funkcií. Mal by v sebe tiež obsahovať link na homepage projektu, ktorý býva spomenutý takmer na konci a má mať prefix „WWW:“, aby všetky automatické veci fungovali tak, ako majú. A na samotnom konci maintainerov e-mail.

This is a port of test, in which a cat chases
a poor mouse all over the screen.
 :
(etc.)

WWW: http://www.oneko.org/

- Somebody
somebody@somewhere.org

Ďalším dôležitým súborom, ktorý by mal byt obsiahnutý v porte, je „pkg-plist“. Je to zoznam všetkých filov, ktoré port nainštaluje. Niekedy sa nazýva aj „packing list“. Cesty v ňom sú relatívne k inštalačnej ceste, obyčajne /usr/local alebo /usr/X11R6. Ak používate MANn premenné, tieto by tam nemali byť obsiahnuté. Ak port vytvára nejaké adresáre, tie by mali byt listované za spojením „@dirrm“, aby pri odinštalovaní boli správne odstránené. Tiež sa osvedčuje uchovávať tento súbor abecedne usporiadaný, pretože to môže celkom dopomôcť pri upgradovaní samotného portu. Je dôležité, aby tento súbor neobsahoval veci, ktoré port nenainštaluje, a naopak, aby obsahoval všetko, čo port nainštaluje.

bin/test
lib/X11/app-defaults/test
lib/X11/test/cat1.xpm
lib/X11/test/cat2.xpm
lib/X11/test/mouse.xpm
@dirrm lib/X11/test

Ak port inštaluje iba zopár filov a chcete sa vyhnúť vytváraniu pkg-plistu, je možné tieto súbory zapísať priamo do Makefile-u pomocou premenných PLIST_FILES a PLIST_DIRS. Samozrejme, že keď port nevytvorí žiadne adresáre, PLIST_DIRS môže zostať unsetnutý, resp. prázdny.

PLIST_FILES=    bin/test \
                lib/X11/app-defaults/test \
                lib/X11/test/cat1.xpm \
                lib/X11/test/cat2.xpm \
                lib/X11/test/mouse.xpm
PLIST_DIRS=     lib/X11/test

Ďalším krokom k vytvoreniu nového portu je downloadnutie samotného source balíčka a jeho umiestnenie do /usr/ports/dis­tfiles. Toto je pomerne dôležité, pretože musíme vytvoriť súbor s menom „distinfo“, ktory obsahuje md5 sumy pre kontrolu správnosti. Ak sme takto urobili, napíšeme uz len „make makesum“ a súbor distinfo sa nám sám vygeneruje.

MD5 (misc/test0.52.tar.gz) = eba528fa8613dc5bfb0615a69c11f053
SIZE (apache2/test0.52.tar.gz) = 6918995 

Pokiaľ sme všetky tieto kroky splnili, už nám len zostava odskúšanie samotného portu. Bude to spočívať v niekoľkých krokoch, ktoré proste spravíte, a ak všetko dopadne tak, ako ste predpokladali, úspešne sa vám podaril váš cieľ. Pozorujte, či náhodou nedostávate nejaké upozornenia, ak áno, je potrebné, aby ste ich eliminovali.

  1. make install
  2. make package
  3. make deinstall
  4. pkg_add package-name
  5. make deinstall
  6. make reinstall
  7. make package

Tak, a teraz ste šťastní, že sa vám podarilo portnut niečo do FreeBSD. Ale to, že sa vám to podarilo, zatiaľ žiadny iný užívateľ tohto výborného systému nemôže nijako využiť a je teda potrebné submitnut váš port do hlavného stromu portov. Toto sa robí cez send-pr(1). Pre bližšie info si pozrite porter's handbook (/usr/ports/Mk/bsd­.port.mk).

Našli jste v článku chybu?

4. 1. 2005 22:42

wicked (neregistrovaný)

no takto, tento clanok je o tom ako vytvorit sofistikovanu "kostru" vyuzivajucu urcite mechanizmy (stiahnutie src bez nutnosti vediet presne umiestnenie, ochecksumovanie src, opatchovanie) na instalovanie noveho softwaru. to, co ste popisal vy, je ako si instalujete novy software do svojho systemu. mam pocit, ze to su trosku rozdielne veci :)

4. 1. 2005 11:16

vojta (neregistrovaný)

Hmm, když myslíte... Ale já stejně prakticky všechny programy kompiluju bez nějakých úprav tím známým "config, make, make install", takže reprodukce postupu kompilace spočívá v tom, že akorát stáhnu příslušné zdrojáky. Do souboru s informacemi o balíku pak eventuelně můžu napsat, jaké jsem použil volby při configure.

Ale máte pravdu, moc sofistikované to není... :-)

Jestě dotaz: mohl byste prosím vysvětlit, proč přesně nemůžu reprodukovat instalaci? Co chybí ve výsledném balíku?





Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

120na80.cz: Bojíte se encefalitidy?

Bojíte se encefalitidy?

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Lupa.cz: Avast po spojení s AVG propustí 700 lidí

Avast po spojení s AVG propustí 700 lidí

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Podnikatel.cz: EET zvládneme, budou horší zákony

EET zvládneme, budou horší zákony

Podnikatel.cz: Na poslední chvíli šokuje vyjímkami v EET

Na poslední chvíli šokuje vyjímkami v EET

Lupa.cz: Babiš: E-shopů se EET možná nebude týkat

Babiš: E-shopů se EET možná nebude týkat

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte