diff --git a/fr_FR.ISO8859-1/books/developers-handbook/locking/chapter.xml b/fr_FR.ISO8859-1/books/developers-handbook/locking/chapter.xml
index ca308534df..7456d3317d 100644
--- a/fr_FR.ISO8859-1/books/developers-handbook/locking/chapter.xml
+++ b/fr_FR.ISO8859-1/books/developers-handbook/locking/chapter.xml
@@ -1,335 +1,336 @@
Notes sur le verrouillageCe chapître est maintenu par The FreeBSD SMP Next
Generation Project. Envoyez leur directement les commentaires et
les suggestions à &a.smp;.Ce document souligne le verrouillage utilisé dans le noyau FreeBSD
pour permettre d'utiliser du vrai multi-processeur à l'intérieur du noyau.
Le verrouillage peut être réalisé par différents moyens.
Les structures de données puvent être protégées par des mutex ou &man.lockmgr.9; verrous.
Quelques variables sont protégées simplement par l'utilisation continuelle d'opérations
atomiques pour y accéder.
Les mutexUn mutex est simplement un verrou utilisé pour garantir exclusion mutuelle.
Spécifiquement, un mutex ne peut appartenir qu'à une entité à la fois.
Si une autre entité désire obtenir un mutex déjà pris
, elle doit attendre jusqu'à ce que le mutex soit relaché. Dans le noyau
FreeBSD, les mutex appartiennent aux processus.Les mutex peuvent être acquis récursivement, mais ils sont conçus
pour n'être pris que pendant une courte période. Spécifiquement, le détenteur
ne doit pas se suspendre pendant qu'il retient un mutex. Si vous avez besoin de
maintenir un verrouillage pendant une suspension, utilisez un &man.lockmgr.9; verrou ("lock").Chaque mutex a plusieurs intérêts :Nom de la variableNom de la variable struct mtx dans
le code source du noyau.Nom logiqueLe nom du mutex lui est assigné par
mtx_init. Ce nom est affiché dans
les messages de trace KTR, témoigne des erreurs et avertissements et est
utilisé pour distinguer les mutex dans les traces.TypeLe type du mutex en termes de constantes nommées
MTX_*. La signification de chaque
constante nommée est documentée dans &man.mutex.9;.MTX_DEFUn mutex endormiMTX_SPINUn mutex tournantMTX_COLDCe mutex est initialisé très tard. Toutefois, il
doit être déclaré via
MUTEX_DECLARE, et la constante nommée
MTX_COLD doit être passée à
mtx_init.MTX_TOPHALFCe mutex tournant ne désactive pas les
interruptions.MTX_NORECURSECe mutex n'a pas la permission d'être recursif.ProtégésUne liste de structures de données ou des membres de structure de données
que cette entrée protège. Pour les membres de structures de données,
le nom sera de la forme structure name.member name.Fonctions dépendantesLes fonctions qui peuvent seulement être appelées si ce mutex est
pris.
Les verrous du gestionnaire de verrous (Lock Manager)Les verrous qui sont fournis par l'interface &man.lockmgr.9;
sont les verrous du gestionnaire de verrous. Ces verrous sont des verrous
lecture-écriture et peuvent être retenus par un process suspendu.
&man.lockmgr.9; List de verrou
-
+ Nom de la variableProtégés
+ allproc_lockallproczombprocpidhashtblproc.p_listproc.p_hashnextpidproctree_lockproc.p_childrenproc.p_sibling
Variables protégées atomiquementUne variable protégée atomiquement est une variable spéciale qui
n'est pas protégé par un verrou explicite. Toutefois, tous les accès de
données aux variables utilisent des opérations atomiques spéciales
comme décrit dans &man.atomic.9;. Très peu de variables sont traitées
de cette façon, bien que les autres primitives de synchronisation comme
les mutex soient implémentées avec des variables protégées atomiquement.astpendingmtx.mtx_lock
diff --git a/nl_NL.ISO8859-1/books/handbook/firewalls/chapter.xml b/nl_NL.ISO8859-1/books/handbook/firewalls/chapter.xml
index 1d1b784671..dda7452695 100644
--- a/nl_NL.ISO8859-1/books/handbook/firewalls/chapter.xml
+++ b/nl_NL.ISO8859-1/books/handbook/firewalls/chapter.xml
@@ -1,3568 +1,3582 @@
Joseph J.BarbishBijgedragen door BradDavisOmgezet naar SGML en bijgewerkt door SiebrandMazelandVertaald door RenéLadanFirewallsfirewallbeveiligingfirewallsInleidingFirewalls bieden de mogelijkheid om inkomend en uitgaand
verkeer op een systeem te filteren. Een firewall gebruikt
daarvoor een of meer groepen regels (rules) om
netwerkpakketten te inspecteren als ze binnenkomen of weggaan
door netwerkverbindingen en staat dat verkeer dan toe of
blokkeert het. De regels van een firewall kunnen
één of meerdere eigenschappen van pakketten
onderzoeken waaronder, maar niet uitsluitend, het protocol, het
bron- of bestemmingsadres en de bron- en bestemmingspoort.Firewalls kunnen de veiligheid van een host of netwerk enorm
vergroten. Ze kunnen één of meer van de volgende
dingen doen:Applicaties, diensten en machines op een intern
netwerk te beschermen tegen ongewild verkeer van het
Internet.Toegang tot Internet voor interne hosts te limiteren
of uitschakelen.Ondersteuning bieden voor netwerkadres vertaling
(network address translation of
NAT), waarmee er vanaf een intern
netwerk met private IP adressen een
Internetverbinding gedeeld kan worden met één
IP adres of met een groep van publieke
adressen die automatisch wordt toegewezen.Na het lezen van dit hoofdstuk weet de lezer:Hoe pakketfilteringsregels op de juiste wijze
samengesteld kunnen worden;De verschillen tussen de firewalls die bij &os;
worden geleverd;Hoe de OpenBSD firewall PF te
gebruiken en in te stellen;Hoe IPFILTER te gebruiken en
in te stellen;Hoe IPFW te gebruiken en in te
stellen.Er wordt aangenomen dat de lezer van dit hoofdstuk:Basisbegrip heeft van &os; en Internetconcepten.Firewallconceptenfirewallsets regelsEr zijn twee basismogelijkheden om sets met regels te maken
voor firewalls: inclusief of
exclusief. Een exclusieve firewall staat al het
verkeer door behalve het verkeer dat past bij de set met regels.
Een inclusieve firewall doet het tegenovergestelde. Die staat
alleen verkeer toe dat past bij de regels en blokkeert al het
overige verkeer.Een inclusieve firewall biedt veel betere controle over het
uitgaande verkeer, waardoor het een betere keuze is voor systemen
die diensten op het publieke Internet aanbieden. Het beheert ook
het type verkeer dat van het publieke Internet afkomt en toegang
heeft tot uw privé-netwerk. Al het verkeer dat niet aan
de regels voldoet wordt geblokkeerd en gelogd, dat is zo
ontworpen. Inclusieve firewalls zijn over het algemeen veiliger
dan exclusieve firewalls omdat ze het risico dat ongewenst verkeer
door ze heen gaat aanzienlijk verminderen.Tenzij anders aangegeven, creëeren alle configuraties
en voorbeelden van regelverzamelingen in dit hoofdstuk inclusieve
firewalls.De beveiliging kan nog verder vergroot worden met een
stateful firewall. Dit type firewall houdt
bij welke connecties er door de firewall tot stand zijn gekomen
en laat alleen verkeer door dat bij een bestaande connectie hoort
of onderdeel is van een connectie in opbouw. Het nadeel van een
stateful firewall is dat die kwetsbaar kan zijn voor Ontzegging
van Dienst (DoS) aanvallen als er een groot aantal nieuwe
verbindingen binnen korte tijd wordt opgezet. Met de meeste
firewalls is het mogelijk een combinatie te maken van stateful en
niet stateful gedrag om een optimale firewall voor een site te
maken.Firewallsoftware&os; heeft drie soorten firewallsoftware in de
basisinstallatie. Dat zijn: IPFILTER (ook bekend als IPF),
IPFIREWALL (ook bekend als IPFW) en de pakketfilter van
OpenBSD (ook bekend als PF). &os; heeft ook twee ingebouwde
pakketten voor het regelen van verkeer (in de basis het
beheersen van bandbreedtegebruik): &man.altq.4; en
&man.dummynet.4;. Dummynet is traditioneel sterk verbonden met
IPFW en ALTQ met
PF. Het vormgeven van verkeer voor IPFILTER kan
momenteel gedaan worden met IPFILTER voor NAT en filtering en
IPFW met &man.dummynet.4;
of door PF met
ALTQ te gebruiken. IPFW en PF
gebruiken allemaal regels om de toegang van pakketten tot een
systeem te regelen, hoewel ze dat op andere manieren doen en ze
een andere regelsyntaxis hebben.De reden dat er meerdere firewallpakketten in &os; zitten is
dat verschillende mensen verschillende eisen en voorkeuren
hebben. Geen enkel firewallpakket is het beste.De schrijver van dit artikel geeft de voorkeur aan IPFILTER
omdat daarmee stateful regels minder complex zijn toe te passen
in een omgeving waar NAT wordt gebruikt en
IPF heeft een ingebouwde FTP proxy waardoor de regels voor het
veilig gebruiken van FTP eenvoudiger worden.Omdat alle firewalls gebaseerd zijn op het inspecteren van
aangegeven controlevelden in pakketten, moet iemand die sets van
firewallregels opstelt begrijpen hoe TCP/IP
werkt, welke waarde de controlevelden kunnen hebben en hoe die
waarden gebruikt worden in normaal verkeer. Op de volgende
webpagina wordt een prima uitleg gegeven: .JohnFerrellHerzien en bijgewerkt door De OpenBSD Packet Filter (PF) en ALTQfirewallPFVanaf juli 2003 is de OpenBSD firewalltoepassing
PF geporteerd naar &os; en beschikbaar gekomen
in de &os; Portscollectie. In 2004 was &os; 5.3 de
eerste release die PF bevatte is integraal
onderdeel van het basissysteem. PF is een
complete en volledige firewall die optioneel
ALTQ bevat (Alternate Queuing).
ALTQ biedt Quality of Service
(QoS) functionaliteit.het OpenBSD Project levert een uitstekend werk wat betreft het
onderhouden van de PF FAQ. Zodoende
zal deze sectie van het handboek zich richten op
PF met betrekking tot &os; terwijl het ook wat
algemene informatie over het gebruik zal geven. Voor
gedetailleerde gebruikersinformatie wordt naar de PF FAQ verwezen.Meer informatie over PF voor &os; staat op
.De laadbare kernelmodules voor PF gebruikenVoeg de volgende regel toe aan /etc/rc.conf om
de kernelmodule PF te laden:pf_enable="YES"Draai vervolgens het opstartscript om de module te laden:&prompt.root; service pf startMerk op dat de PF module niet laadt als het het instellingenbestand
met de regelverzameling niet kan vinden. De standaardlocatie is
/etc/pf.conf. Als de regelverzameling voor PF zich
elders bevindt, kan PF worden verteld om daar te kijken een regel
analoog aan de volgende aan /etc/rc.conf toe te
voegen:pf_rules="/pad/naar/pf.conf"Het voorbeeld pf.conf bestand
kan gevonden worden in /usr/share/examples/pfDe module PF kan ook handmatig vanaf de
opdrachtregel geladen worden:&prompt.root; kldload pf.koLogondersteuning voor PF wordt geleverd door
pflog.ko en kan worden geladen door de volgende regel
aan /etc/rc.conf toe te voegen:pflog_enable="YES"Draai vervolgens het opstartscript om de module te laden:&prompt.root; service pflog startAls u andere mogelijkheden van PF nodig heeft
dient u ondersteuning voor PF in de kernel te
compileren.Kernelopties voor PFkerneloptiesdevice pfkerneloptiesdevice pflogkerneloptiesdevice pfsyncHoewel het niet nodig is om ondersteuning voor
PF in de kernel te compileren, biedt dit wel
de mogelijkheid om van een van PF's geavanceerde mogelijkheden
gebruik te maken die niet in de laadbare module zitten, namelijk
&man.pfsync.4;, dat een pseudo-apparaat is dat zekere
veranderingen aan de toestandstabel die door
PF wordt gebruikt prijsgeeft. Het kan worden
gecombineerd met &man.carp.4; om failover firewalls aan te maken
die gebruik maken van PF. Meer informatie
over CARP kan gevonden worden in van het Handboek.De kernelopties voor PF kunnen gevonden
worden in /usr/src/sys/conf/NOTES en zijn
hieronder gereproduceerd:device pf
device pflog
device pfsyncDe optie device pf schakelt ondersteuning
voor de Packet Filter firewall (&man.pf.4;) in.De optie device pflog schakelt het
optionele &man.pflog.4; pseudo-netwerkapparaat in dat gebruikt
kan worden om verkeer te loggen naar een &man.bpf.4;
descriptor. De &man.pflogd.8; daemon kan gebruikt worden om
de logboekinformatie naar schijf te schrijven.De optie device pfsync schakelt het
optionele &man.pfsync.4; pseudo netwerkapparaat in waarmee de
toestandswijzigingen gemonitord kunnen worden.Beschikbare opties voor rc.confDe volgende &man.rc.conf.5; statements stellen
PF en &man.pflog.4; in tijdens het opstarten:pf_enable="YES" # Schakel PF in (laad module als nodig)
pf_rules="/etc/pf.conf" # bestand met regels voor pf
pf_flags="" # aanvullende vragen voor opstarten pfctl
pflog_enable="YES" # start pflogd(8)
pflog_logfile="/var/log/pflog" # waar pflogd het logboekbestand moet opslaan
pflog_flags="" # aanvullende vlaggen voor opstarten pflogdAls er een LAN achter de firewall staat en er pakketten
doorgestuurd moeten worden naar computers op het LAN of als
NAT actief is, dan is de volgende optie ook nodig:gateway_enable="YES" # Schakel in als LAN gatewayFilterregels aanmakenPF leest de instelregels van
&man.pf.conf.5; (standaard /etc/pf.conf) en
het verandert, verwijdert, of geeft pakketten door aan de hand
van de regels of definities die daar zijn gespecificeerd. De
&os;-installatie bevat een aantal voorbeeldbestanden in
/usr/share/examples/pf/. In de PF FAQ staat een
complete behandeling van de PF regels.Houd tijdens het doornemen van de PF FAQ in de gaten dat
verschillende versies van &os; verschillende versies van PF kunnen
bevatten. Momenteel gebruikt &os; 8.X
dezelfde versie van PF als OpenBSD 4.1.
&os; 9.X en hoger gebruiken dezelfde
versie van PF als OpenBSD 4.5.De &a.pf; is een goede plaats om vragen over het instellen
en draaien van de PF firewall te stellen.
Vergeet niet de mailinglijstarchieven te controleren alvorens
vragen te stellen!Werken met PFGebruik &man.pfctl.8; om PF te beheren.
Hieronder staan wat nuttige commando's (bekijk de hulppagina
&man.pfctl.8; voor alle beschikbare opties):
-
+ CommandoDoel
+
+ pfctl PF aanzetten
+
+
+
+ pfctl PF uitzetten
+
+
+
+ pfctl all /etc/pf.confSpoel alle regels door (nat, filter, toestand,
tabel, etc.) en herlaad vanuit het bestand
/etc/pf.confpfctl [ rules | nat | state ]Rapporteer over de filterregels, NAT-regels, of
toestandstabelpfctl /etc/pf.confControleer /etc/pf.conf op
fouten, maar laad de regelverzameling niet
+
+
+
+ ALTQ inschakelenALTQ is alleen beschikbaar ondersteuning
ervoor in de &os; Kernel te compileren. ALTQ
wordt niet door alle netwerkkaartstuurprogramma's ondersteund.
In &man.altq.4; staat een lijst met ondersteunde
stuurprogramma's voor de betreffende versie.Met de volgende opties wordt ALTQ
ingeschakeld en additionele functionaliteit toegevoegd:options ALTQ
options ALTQ_CBQ # Class Bases Queuing (CBQ)
options ALTQ_RED # Random Early Detection (RED)
options ALTQ_RIO # RED In/Out
options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC)
options ALTQ_PRIQ # Priority Queuing (PRIQ)
options ALTQ_NOPCC # Required for SMP buildoptions ALTQ schakelt het
ALTQ raamwerk in.options ALTQ_CBQ schakelt Class Based
Queuing (CBQ) in. Met
CBQ kan de bandbreedte van een verbinding
worden opgedeeld in verschillende klassen of wachtrijen om
verkeer te prioriteren op basis van filterregels.options ALTQ_RED schakelt Random Early
Detection (RED) in.
RED wordt gebruikt om netwerkverstopping te
voorkomen. RED doet dit door de lengte van de
wachtrij te meten en die te vergelijken met de minimale en maximale
drempelwaarden voor de wachtrij. Als de wachtrij groter is
dan de maximale waarde worden alle nieuwe pakketten genegeerd.
Het werkt naar zijn naam, dus RED negeert
willekeurig pakketten van verschillende verbindingen.options ALTQ_RIO schakelt Random Early
Detection In and Out in.options ALTQ_HFSC schakelt de
Hierarchical Fair Service Curve Packet Scheduler
in. Meer informatie over HFSC staat op .options ALTQ_PRIQ schakelt Priority
Queuing (PRIQ) in.
PRIQ laat verkeer dat in een hogere wachtrij staat
altijd eerder door.options ALTQ_NOPCC schakelt
SMP ondersteuning voor
ALTQ in. Deze optie is verplicht op
SMP systemen.De IPFILTER (IPF) firewallfirewallIPFILTERDarren Reed is de auteur van IPFILTER, dat niet afhankelijk
is van één besturingssysteem. Het is een open
source applicatie die is geporteerd naar &os;, NetBSD, OpenBSD,
SunOS, HP/UX en Solaris besturingssystemen. IPFILTER wordt
actief ondersteund en onderhouden en er worden regelmatig nieuwe
versies uigebracht.IPFILTER is gebaseerd op een firewall aan de kernelkant en
een NAT mechanisme dat gecontroleerd en
gemonitord kan worden door programma's in userland. De
firewallregels kunnen ingesteld of verwijderd worden met het
hulpprogramma &man.ipf.8;. De NAT regels
kunnen ingesteld of verwijderd worden met &man.ipnat.8;. Het
programma &man.ipfstat.8; kan actuele statistieken leveren voor
de kernelonderdelen van IPFILTER. &man.ipmon.8; kan acties van
IPFILTER wegschrijven naar logboekbestanden van het
systeem.IPF is oorspronkelijk geschreven met logica die regels
verwerkte volgens het principe de laatst passende regel
wint en gebruikte toen alleen staatloze regels. In de
loop der tijd is IPF verbeterd en zijn de opties
quick en keep state
toegevoegd waarmee de logica van het verwerken van regels
drastisch is gemoderniseerd. In de officiële documentatie
van IPF worden alleen de regels en verwerkingslogica
behandeld. De moderne functies worden alleen behandeld als
opties, waardoor hun nut dat er een veel betere en veiligere firewall mee
te maken volledig onderbelicht blijft.De instructies in dit hoofdstuk zijn gebaseerd op regels die
gebruik maken van de optie quick en de
stateful optie keep state. Dit is het
raamwerk waarmee een set van inclusieve firewallregels wordt
samengesteld.Voor een gedetailleerde uitleg over de verwerking van de
verouderde regels zie
en .De IPF FAQ is te vinden op .Een doorzoekbaar archief van de open-source IPFilter mailing
lijst is beschikbaar op .IPF inschakelenIPFILTERinschakelenIPF zit in de basisinstallatie van &os; als een aparte
run time laadbare module. Een systeem laadt de
IPF kernel laadbare module dynamisch als
ipfilter_enable="YES" in
rc.conf staat. Voor de laadbare module
zijn de opties logging en default
pass all ingeschakeld. IPF hoeft niet in de
kernel gecompileerd te worden om het standaardgedrag te
wijzigen naar block all. Dat is mogelijk
door op het einde van de regelverzameling een regel block
all toe te voegen die al het verkeer blokkeert.KerneloptieskerneloptiesIPFILTERkerneloptiesIPFILTER_LOGkerneloptiesIPFILTER_DEFAULT_BLOCKIPFILTERkerneloptiesHet is niet verplicht om IPF in te schakelen door de
volgende opties in de &os; kernel te compileren. Dit wordt
alleen beschreven als achtergrondinformatie. Door IPF in de
kernel te compileren wordt de laadbare module niet
gebruikt.Voorbeeld kernelinstellingen voor IPF staan beschreven in
de /usr/src/sys/i386/conf/LINTin de
kernelbroncode en worden hier beschreven:options IPFILTER
options IPFILTER_LOG
options IPFILTER_DEFAULT_BLOCKoptions IPFILTER schakelt ondersteuning
voor de IPFILTER firewall in.options IPFILTER_LOG schakelt de
optie in waarmee IPF verkeer kan loggen door het naar het
ipl pakketloggende
pseudo-apparaat te schrijven voor iedere regel met het
sleutelwoord log erin.options IPFILTER_DEFAULT_BLOCK
wijzigt het standaardgedrag zodat ieder pakket waarop geen
enkele pass regel van toepassing is
wordt geblokkeerd.Deze instelling worden pas actief nadat een kernel
waarvoor deze instellingen zijn gemaakt is gebouwd en
geïnstalleerd.Beschikbare opties voor rc.confDe volgende instellingen moeten in /etc/rc.conf
staan om IPF bij het opstarten te activeren:ipfilter_enable="YES" # Start ipf firewall
ipfilter_rules="/etc/ipf.rules" # laad regels uit het doelbestand
ipmon_enable="YES" # Start IP monitor log
ipmon_flags="-Ds" # D = start als daemon
# s = log naar syslog
# v = log tcp window, ack, seq
# n = vertaal IP & poort naar namenAls er een LAN achter de firewall staat dat gebruik maakt
van IP-adressen uit de private reeks, dan
moet de volgende optie ook ingesteld worden om
NAT-functionaliteit in te schakelen:gateway_enable="YES" # Schakel in als LAN gateway
ipnat_enable="YES" # Start ipnat functie
ipnat_rules="/etc/ipnat.rules" # bestand met regels voor ipnatIPFipfHet commando &man.ipf.8; wordt gebruikt om het bestand met
firewallregels te laden. Gewoonlijk wordt er een bestand
aangemaakt waarin de situatieafhankelijke regels staan
waarmee in één keer de bestaande regels kunnen
worden vervangen:&prompt.root; ipf -Fa -f /etc/ipf.rules: verwijder alle interne tabellen
met regels.: laad het aangegeven
bestand met regels.Hiermee wordt het mogelijk wijzigingen te maken aan het
bestand met eigen regels en met &man.ipf.8; de firewall aan
te passen met verse regels zonder het systeem te booten.
Deze methode is erg handig om nieuwe regels te testen omdat
dit zo vaak als nodig gedaan kan worden.In &man.ipf.8; worden alle opties die beschikbaar zijn
toegelicht.&man.ipf.8; verwacht dat het bestand met regels een
standaard tekstbestand is. Het accepteert geen bestand met
regels dat is opgesteld als een script dat gebruik maakt van
substitutie.Er is wel een mogelijkheid om IPF regels op te stellen
en gebruik te maken van substitutie. Meer informatie staat
in .IPFSTATipfstatIPFILTERstatistieken&man.ipfstat.8; haalt de totalen van de statistieken op
die horen bij de firewall sinds die is gestart en toont deze.
Het kan ook zijn dat de tellers in tussentijd op nul zijn
gesteld met ipf -Z.In &man.ipfstat.8; worden alle details behandeld.Standaard ziet &man.ipfstat.8; uitvoer er ongeveer als
volgt uit:input packets: blocked 99286 passed 1255609 nomatch 14686 counted 0
output packets: blocked 4200 passed 1284345 nomatch 14687 counted 0
input packets logged: blocked 99286 passed 0
output packets logged: blocked 0 passed 0
packets logged: input 0 output 0
log failures: input 3898 output 0
fragment state(in): kept 0 lost 0
fragment state(out): kept 0 lost 0
packet state(in): kept 169364 lost 0
packet state(out): kept 431395 lost 0
ICMP replies: 0 TCP RSTs sent: 0
Result cache hits(in): 1215208 (out): 1098963
IN Pullups succeeded: 2 failed: 0
OUT Pullups succeeded: 0 failed: 0
Fastroute successes: 0 failures: 0
TCP cksum fails(in): 0 (out): 0
Packet log flags set: (0)Als er als optie voor inkomend of
voor uitgaand wordt meegegeven, dan zal het
commando de juiste lijst met regels die de kernel op dat moment gebruikt
wordt weergeven.ipfstat -in toont de tabel met
regels voor inkomend verkeer met regelnummersipfstat -on toont de tabel met
regels voor uitgaand verkeer met regelnummersDe uitvoer ziet er ongeveer als volgt uit:@1 pass out on xl0 from any to any
@2 block out on dc0 from any to any
@3 pass out quick on dc0 proto tcp/udp from any to any keep stateipfstat -ih toont de tabel met
regels voor inkomend verkeer, waarbij voor iedere regel staat
hoe vaak die van toepassing was.ipfstat -oh toont de tabel met
regels voor uitgaand verkeer, waarbij voor iedere regel staat
hoe vaak die van toepassing was.De uitvoer ziet er ongeveer als volgt uit:2451423 pass out on xl0 from any to any
354727 block out on dc0 from any to any
430918 pass out quick on dc0 proto tcp/udp from any to any keep stateEen van de belangrijkste functies van
ipfstat is de vlag
waarmee de staat-tabel wordt getoond op een wijze die
vergelijkbaar is met de wijze waarop &man.top.1; de draaiende
&os; procestabel toont. Als een firewall wordt aangevallen, dan
geeft deze functie de mogelijkheid om de pakketten van de
aanvaller te identificeren en nader te onderzoeken. De
optionele subvlaggen bieden de mogelijkheid om een bron of
bestemmings IP adres, poort of protocol aan
te geven dat gemonitord moet worden. Details zijn na te lezen
in &man.ipfstat.8;.IPMONipmonIPFILTERloggenOm &man.ipmon.8; te laten werken zoals bedoeld, moet de
kerneloptie IPFILTER_LOG aan staan. Dit
commando kan op twee verschillende wijzen gebruikt worden.
De standaard is van toepassing als het commando op de
commandoregel wordt ingegeven zonder de optie
.De daemon wordt gebruikt als continu een systeemlogboek
bijgewerkt moet worden zodat het mogelijk is om
gebeurtenissen in het verleden te bekijken. Zo zijn &os; en
IPFILTER ingesteld om samen te werken. &os; heeft ingebouwde
mogelijkheden om automatisch syslogs te roteren. Daarom is
het beter om de uitvoer naar &man.syslogd.8; te schrijven
dan naar een gewoon bestand. In de standaardversie van
rc.conf is te zien dat de instelling
ipmon_flags de waarde
heeft:ipmon_flags="-Ds" # D = start als daemon
# s = log naar syslog
# v = log tcp window, ack, seq
# n = vertaal IP & poort naar namenDe voordelen van loggen zijn duidelijk. Het biedt de
mogelijkheid om na het feit informatie na te zien als: welke
pakketten heeft de firewall laten vallen, waar kwamen ze
vandaan en waar gingen ze heen? Dit zijn allemaal voordelen
als het gaat om uitvinden waar een aanvaller vandaan komt en
wat deze heeft geprobeerd.Zelfs als loggen is ingeschakeld, logt IPF nog niets uit
zichzelf. De beheerder van de firewall beslist welke regels in de
regelverzameling iets weg moeten schrijven door het sleutelwoord
log aan die regels toe te voegen.
Gewoonlijk worden alleen deny regels
gelogd.Het is heel normaal om als laatste regel een
deny regel aan de set met regels toe te
voegen waar het sleutelwoord log in staat.
Zo krijgt een beheerder alle pakketten te zien waarop geen
enkele regel van toepassing was.Loggen met IPMONSyslogd heeft een eigen methode
om logboekgegevens te scheiden. Het maakt gebruik van speciale
groepen die facility en level
heten. &man.ipmon.8; in mode gebruikt
local0
als facilitynaam. Alle door &man.ipmon.8; gelogde
gegevens gaan standaard naar de naam security.
De nu volgende levels
kunnen gebruikt worden om de gelogde gegevens nog verder uit
elkaar te trekken als dat gewenst is.LOG_INFO – pakketten gelogd met het sleutelwoord "log" als actie in plaats van pass of block.
LOG_NOTICE – gelogde pakketten die ook zijn doorgelaten
LOG_WARNING – gelogde pakketten die ook geblokkeerd zijn
LOG_ERR – gelogde pakketten die een verkeerde opbouw hebben, "short"Om IPFILTER alle gelogde gegevens naar
/var/log/ipfilter.log te laten schrijven,
dient dat bestand vooraf te bestaan. Dat kan met het volgende
commando:&prompt.root; touch /var/log/ipfilter.logDe functionaliteit van &man.syslogd.8; wordt beheerd met
instellingen in /etc/syslog.conf.
Dit bestand biedt aanzienlijke
flexibiliteit in hoe syslog omgaat met
systeemberichten die door softwaretoepassingen als IPF worden
gegeven.Zo kan de volgende instelling toegevoegd worden aan
/etc/syslog.conf:local0.* /var/log/ipfilter.logHet deel local0.*
betekent dat alle logberichten naar de aangegeven plaats
geschreven moeten worden.Om de wijzigingen in
/etc/syslog.conf actief te maken kan er opnieuw
opgestart worden of is het mogelijk de daemon &man.syslogd.8; een schop
te geven zodat /etc/syslog.conf opnieuw
wordt ingelezen met /etc/rc.d/syslogd
reload. Het PID (procesnummer) is te achterhalen
door een overzicht van taken te tonen met
ps -ax. Het PID is het nummer in de
linker kolom voor de regel waarop syslog
staat.Vaak wordt vergeten
/etc/newsyslog.conf te wijzigen om het
nieuw aangemaakte logboekbestand te laten roteren.De opmaak van gelogde berichtenBerichten die door ipmon wordt gezonden
bestaan uit velden die gescheiden worden door een spatie.
Velden die in alle berichten zitten zijn:De datum waarop het pakket is ontvangen.De tijd waarop het pakket is ontvangen weergegeven
als HH:MM:SS.F voor uren, minuten, seconden en fracties
van een seconde. De fractie kan meerdere cijfers lang
zijn.De naam van de interface waarop het pakket is
ontvangen, bijvoorbeeld
dc0.De groep en regelnummer van de regel, bijvoorbeeld
@0:17.Deze kunnen ingezien worden met
ipfstat -in.De acties: p voor doorgelaten
(passed), b voor
geblokkeerd (blocked),
S voor een verkeerd pakket
(short packet), n voor
dat er geen enkele regel van toepassing was,
L voor een logboekregel. De volgorde
waarin deze acties getoond worden is: S, p, b, n, L. Een
hoofdletter P of B
betekent dat het pakket gelogd is vanwege een globale
instelling, niet vanwege één regel in het
bijzonder.De adressen. Dit zijn eigenlijk drie velden: het
bronadres en poort gescheiden door een komma, het symbool
-> en het bestemmingsadres en poort, bijvoorbeeld:
209.53.17.22,80 -> 198.73.220.17,1722.Achter PR staat de naam van het
protocol of het nummer, bijvoorbeeld PR
tcp.Achter len staan de lengte van de
pakketkop en de totale lengte van het pakket,
bijvoorbeeld len 20 40.Als het pakket een TCP pakket is, dan
is er nog een veld dat begint met een verbindingsstreepje
met daarachter letters die overeenkomen met vlaggen die
ingeschakeld waren. In &man.ipf.5; is een lijst met
letters en bijbehorende vlaggen te vinden.Als het pakket een ICMP pakket is, dan worden aan het
einde twee velden toegevoegd. Het eerste is altijd
ICMP en het volgende het ICMP bericht en
subbericht type, gescheiden door een slash, bijvoorbeeld
ICMP 3/3 voor een poort niet
bereikbaar bericht.Script met regels met substitutie bouwenGeoefende gebruikers van IPF maken een bestand dat de
regels bevat en stellen dat op zo'n manier op dat het
uitgevoerd kan worden als een script met substitutie. Het
grote voordeel van deze werkwijze is dat er dan alleen de
waarde geassocieerd met een symbolische naam gewijzigd hoeft te worden
en dat als het script opnieuw wordt uitgevoerd, op alle plaatsen
waar de variabele wordt gebruikt, de nieuwe waarde in de
regels wordt opgenomen. Omdat het een script is, kan
substitutie gebruik worden om vaak voorkomende waarden
de definiëren zodat ze in meerdere regels vervangen
kunnen worden. Dit wordt geïllustreerd in het
onderstaande voorbeeld.De syntaxis die in het script wordt gebruikt is
compatibel met de shells &man.sh.1;, &man.csh.1; en &man.tcsh.1;.Velden waarvoor substitutie van toepassing is worden
vooraf gegaan door het dollarteken
$.Definities worden niet vooraf gegaan door het voorvoegsel
$.De waarden van een definitie moet omsloten worden door
dubbele aanhalingstekens (").Een set regels begint wellicht als volgt:############## Begin IPF regels script #########################
oif="dc0" # naam van de uitgaande interface
odns="192.0.2.11" # IP adres van DNS server ISP
myip="192.0.2.7" # statische IP adres gekregen van ISP
ks="keep state"
fks="flags S keep state"
# Er kan gekozen worden om dit script te gebruiken om een eigen
# /etc/ipf.rules script te maken of dit script kan gebruikt worden
# "as is"
#
# Haal bij één van deze regels het commentaarteken weg
# en plaats hem bij de ander.
#
# 1) Deze kan gebruikt worden om /etc/ipf.rules te maken:
#cat > /etc/ipf.rules << EOF
# 2) Deze kan gebruikt worden om het script "as is" te starten:
# Let op: er moet een lege regel zijn na het EOF teken.
/sbin/ipf -Fa -f - << EOF
# Verleen toegang tot de DNS van de ISP.
pass out quick on $oif proto tcp from any to $odns port = 53 $fks
pass out quick on $oif proto udp from any to $odns port = 53 $ks
# Sta uitgaand verkeer voor niet beveiligd www verkeer toe
pass out quick on $oif proto tcp from $myip to any port = 80 $fks
# Sta uitgaand verkeer voor beveiligd www verkeer toe (https over TLS SSL)
pass out quick on $oif proto tcp from $myip to any port = 443 $fks
EOF
################## Einde IPF regels script ########################Dat is alles. De regels zijn niet van belang in dit
voorbeeld, maar tonen hoe substitutievelden worden
gedefinieerd en hoe ze worden gebruikt. Als het bovenstaande
voorbeeld de inhoud van
/etc/ipf.rules.script was, dan konden deze regels
herladen worden door het vanaf de commandoregel aan te roepen:&prompt.root; sh /etc/ipf.rules.scriptEr is wel een probleem met het gebruik van regels in
combinatie met substitutie. IPF snapt het niet en kan deze
scripts niet direct lezen.Dit script kan gebruikt worden op één van de
volgende twee manieren:Haal het commentaarteken weg bij de regel die begint met
cat en zet het commentaarteken bij de
regel die begint met /sbin/ipf. Plaats
ipfilter_enable="YES" in
/etc/rc.conf zoals gewoonlijk en start
het script eenmalig na elke wijziging om
/etc/ipf.rules te maken of bij te
werken.Schakel IPFILTER uit in de systeem opstart scripts door
ipfilter_enable="NO" toe te voegen aan
/etc/rc.conf (dit is de
standaardwaarde).Voeg een script zoals de volgende toe aan de opstartmap
/usr/local/etc/rc.d. Het
script zou een duidelijke naam moeten hebben zoals
ipf.loadrules.sh. De uitbreiding
.sh is noodzakelijk.#!/bin/sh
sh /etc/ipf.rules.scriptDe permissies op dit script moeten zijn: lezen,schrijven
en uitvoeren voor de gebruiker root.&prompt.root; chmod 700 /usr/local/etc/rc.d/ipf.loadrules.shAls het systeem nu herstart, worden de regels via het
script gestart.Sets van IPF regelsEen set regels is een groep IPF-regels
die is gemaakt om pakketten toe te staan of te blokkeren op
basis van de eigenschappen van dat pakket. De
bi-directionele uitwisseling van pakketten tussen hosts
bestaat uit een gesprek dat een sessie heet. De set van
firewallregels verwerkt zowel de pakketten die arriveren van het
publieke Internet, als de pakketten die door het systeem zijn
geproduceerd als een antwoord erop. Elke
TCP/IP-dienst (telnet, www, mail, enzovoorts) is
vooraf gedefinieerd door een protocol en bevoorrechte (luister)poort.
Pakketten bedoeld voor een speciale dienst beginnen bij het bronadres
gebruik makend van een onbevoorrechte (hogere orde) poort en komen aan
bij de specifieke dienstpoort op het bestemmingsadres. Alle
bovengenoemde parameters (poorten en adressen) kunnen gebruikt worden
als selectiecriteria om regels aan te maken die diensten zullen toestaan
of blokkeren.IPFILTERvolgorde regelverwerkingIPF is oorspronkelijk geschreven met logica die regels
verwerkte volgens het principe de laatst passende
regel wint en gebruikte toen alleen staatloze regels.
In de loop der tijd is IPF verbeterd en zijn de opties
quick en keep state toegevoegd
waarmee de logica van het verwerken van regels drastisch is
gemoderniseerd.De instructies in dit hoofdstuk zijn gebaseerd op regels
die gebruik maken van de optie quick
en de stateful optie keep state. Dit
is het raamwerk waarmee een set van inclusieve firewallregels
wordt samengesteld.Werk bij het wijzigen van firewallregels zeer
voorzichtig. Met sommige instellingen is een
server niet meer bereikbaar. Om het
veilig te spelen is het aan te raden de eerste instellingen
vanaf het console te maken, in plaats van via
ssh.RegelsyntaxisIPFILTERregelsyntaxisDe regelsyntaxis die hier wordt besproken is versimpeld
door alleen de moderne stateful regels en de eerste
van toepassing zijnde regel wint te belichten. De
complete regelsyntaxis is na te lezen in &man.ipf.8;.Het karakter # wordt gebruikt om het
begin van een opmerking te markeren en zowel op een eigen
regel als achter een firewallregel staan. Lege regels worden
genegeerd.Regels bevatten sleutelwoorden die in een bepaalde
volgorde van links naar rechts op een regel horen te staan.
Sleutelwoorden worden vet weergegeven. Sommige
sleutelwoorden hebben subopties die zelf ook weer
sleutelwoorden hebben die ook weer subopties kunnen hebben.
Alle opties die hier direct onder staan, worden daaronder
uitgebreid weergegeven en verderop in dit hoofdstuk in een
aparte paragraaf behandeld.ACTIE IN/UIT OPTIES SELECTIE STATEFUL
PROTO BRON_ADR,BEST_ADR OBJECT POORT_NUM TCP_VLAG
STATEFULACTIE = block | passIN/UIT = in | outOPTIES = log | quick | on
interfacenaamSELECTIE = protowaarde |
bron/bestemming IP | poort = nummer | flags
flag-valuePROTO = tcp/udp | udp | tcp |
icmpBRON_ADR,BEST_ADR = all | from
object to objectOBJECT = IP adres | anyPOORT_NUM = poortnummerTCP_VLAG = SSTATEFUL = keep stateACTIEDe actie geeft aan wat er met het pakket gedaan moet
worden als het van toepassing is op de rest van de
filterregel. Iedere regel moet een
actie hebben. De volgende acties zijn mogelijk:block geeft aan dat het pakket
moet verdwijnen als de parameters van toepassing zijn op
het pakket.pass geeft aan dat het pakket
doorgelaten moet worden als de parameters van toepassing
zijn op het pakket.IN/UITEen verplicht onderdeel voor iedere filterregel waarin
expliciet wordt aangegeven op welke zijde van de in/uit
deze van toepassing is. Het volgende sleutelwoord moet
in of out
zijn en één van de twee moet gecodeerd worden, anders
is de regel syntactisch onjuist.in betekent dat de regel van
toepassing is op inkomende pakketten.out betekent dat de regel van
toepassing is op inkomende pakketten.OPTIESDeze opties moeten in de volgorde waarin ze hier
beschreven staan gebruikt worden.log geeft aan dat het pakket naar het
ipl logboekbestand geschreven moeten
worden (zoals verderop beschreven staat in de paragraaf
Loggen) als de regel van toepassing is op
het pakket.quick geeft aan dat als een regel van
toepassing is, dat de laatste regel moet zijn die wordt
gecontroleerd, waardoor er een pad wordt
kortgesloten waardoor de volgende regels voor
dat pakket niet meer gecontroleerd worden. Deze optie is
voor de moderne regels eigenlijk verplicht.on geeft de interface aan die in de
parameters meegenomen moet worden. De namen van interfaces
kunnen getoond worden met &man.ifconfig.8;. Als deze optie
wordt gebruikt, kan een regel alleen van toepassing zijn als
het pakket door de aangegeven interface gaat in de richting
die is aangegeven
(in/out). Ook deze
optie is verplicht voor de moderne regels.Als een pakket wordt gelogd, dan worden de koppen van het
pakket weggeschreven naar het ipl
pakketloggende pseudo-apparaat. Direct na het
sleutelwoord log mogen de volgende opties
gebruikt worden (in de aangegeven volgorde):body geeft aan dat de eerste 128 bytes
van de inhoud van het pakket worden opgeslagen na de
kop.first; als het sleutelwoord
log samen met een optie keep
state wordt gebruikt, wordt het aangeraden om
deze optie ook te gebruiken zodat alleen het pakket dat als
eerste in de sessie van toepassing was en niet ook alle
pakketten die daarna in de sessie volgens
keep state van toepassing
zijn.SELECTIEDe sleutelwoorden in deze paragraaf worden gebruikt om
attributen van het pakket dat wordt geïnspecteerd te
beschrijven om te bepalen of een regel wel of niet van
toepassing is. Er is een sleutelwoord
en er zijn subopties waarvan er
één of meer gekozen moeten worden. De
volgende attributen zijn beschikbaar voor het proces en
moeten in de aangegeven volgorde worden gebruikt:PROTOproto is het
sleutelwoord dat moet worden aangegeven samen met een van de
sleutelwoorden uit de subopties. De waarde geeft een bepaald
protocol aan dat van toepassing moet zijn. Ook deze optie is
verplicht voor de moderne regels.tcp/udp, tcp,
udp, icmp of ieder
ander protocol dat in /etc/protocols
staat wordt herkend en kan gebruikt worden. Het bijzondere
protocolsleutelwoord tcp/udp kan gebruikt
worden om zowel voor TCP- als
UDP-pakketten van toepassing te laten zijn. Het is
toegevoegd voor het gemak om vrijwel gelijke regels te
voorkomen.BRON_ADR/BEST_ADRHet sleutelwoord all is in feite
hetzelfde als from any to any zonder
overige parameters.from bron to bestemming; de
sleutelwoorden from en
to worden gebruikt om te testen op
IP-adressen. In regels moet
zowel een bron- als
bestemmings-IP-adres
aangegeven worden. any is een
bijzonder sleutelwoord dat van toepassing is op ieder
IP-adres. Voorbeelden van gebruik: from
any to any of from 0.0.0.0/0 to any of
from any to 0.0.0.0/0 of from 0.0.0.0 to
any of from any to 0.0.0.0.Het is vaak lastig om te komen tot een reeks IP-adressen die zich
niet gemakkelijk laten uitdrukken met de gepunte numerieke vorm/
maskerlengte notatie. De port net-mgmt/ipcalc kan gebruikt worden om de
berekeningen te vereenvoudigen. Aanvullende informatie is beschikbaar
op de webpagina van het gereedschap: .POORTAls in een regel op een poort wordt gecontroleerd, voor
bron- of bestemmingspoort of beiden, dan is dat alleen van
toepassing op TCP- en
UDP-pakketten. Bij het maken van
poortvergelijkingen kunnen zowel de dienstnamen uit
/etc/services als een uit een
natuurlijk getal bestaand poortnummer ingesteld worden. Als
de poort onderdeel is van het from object
dan wordt het vergeleken met het poortnummer van de bron en
als het onderdeel is van het to object,
dan wordt het vergeleken met het poortnummer van de
bestemming. Het gebruik van het to object
is in de moderne regels verplicht en neemt de vorm aan van
from any to any port = 80.Enkelvoudige poortvergelijkingen kunnen op verschillende manieren
gedaan worden met een aantal verschillende operatoren.
Er kunnen ook reeksen van poorten ingesteld worden.poort "=" | "!=" | "<" | ">" | "<=" | ">=" |
"eq" | "ne" | "lt" | "gt" | "le" | "ge"Reeksen van poorten worden met de volgende optie
aangegeven: poort <> | ><De volgende twee parameters die betrekking hebben op
bron en bestemming, zijn verplicht in de moderne
regels.TCP_VLAGVlaggen zijn alleen beschikbaar voor het filteren
van TCP. De letters staan voor
de mogelijke vlaggen die bekeken kunnen worden in de
kop van een TCP-pakket.In de moderne regels wordt de optie flags
S gebruikt om het verzoek tot het starten van
een TCP sessie.STATEFULkeep state geeft aan dat in een regel
met pass voor alle pakketten die van
toepassing zijn stateful gefilterd moet worden.Deze optie is voor moderne regels verplicht.Stateful filterenIPFILTERstateful filterenMet stateful filteren wordt verkeer benaderd als een
uitwisseling van pakketten tussen twee kanten die een sessie
zijn. Als het is ingeschakeld, dan maakt het
mechanisme dynamisch interne
regels voor pakketten die in de sessie horen te volgen. Het
kan bekijken of de karakteristieken van de sessie tussen
verzender en ontvanger de juiste procedure volgen. Alle
pakketten die niet passen in de sessie, worden automatisch
geblokkeerd.keep state staat ook
ICMP-pakketten toe die gerelateerd zijn aan een
TCP- of UDP-sessie. Dus als er
een ICMP-type 3 code 4 komt in antwoord op
websurfen, dat wordt toegestaan van binnen naar buiten door een
keep state regel, dan wordt dat toegelaten.
Pakketten waarvan IPF zeker is dat ze onderdeel zijn van de
sessie worden toegelaten, zelfs als ze van een ander protocol
zijn.Wat er gebeurt: pakketten die naar buiten gaan op de
interface die met Internet is verbonden worden eerst
vergeleken met de dynamische staattabel. Als een pakket
voldoet aan de verwachting van het volgende pakket in de
sessie, dan mag het de firewall verlaten en wordt de
toestand van de sessie in de dynamische toestandstabel bijgewerkt.
Pakketten die niet bij een reeds actieve sessie horen, worden tegen de
uitgaande regelverzameling gecontroleerd.Pakketten die binnenkomen op de interface die met
Internet is verbonden worden eerst vergeleken met de
dynamische staattabel. Als een pakket voldoet aan de
verwachting van het volgende pakket in de sessie, dan mag het
de firewall verlaten en wordt de toestand van de sessie in de dynamische
toestandstabel bijgewerkt. Pakketten die niet bij een reeds actieve
sessie horen, worden vergeleken met de regelverzameling voor
binnenkomend verkeer.Als de sessie wordt beëindigd wordt het uit de
dynamische staattabel verwijderd.Met stateful filteren is het mogelijk om de focus te
leggen op het blokkeren of toestaan van nieuwe sessies.
Als een nieuwe sessie tot stand mag komen, dan worden alle
volgende pakketten automatisch doorgelaten en al het
vervalste verkeer wordt automatisch tegengehouden. Als een
nieuwe sessie wordt geweigerd, dan wordt geen enkel pakket
doorgelaten. Met stateful filteren zijn er uitgebreide
mogelijkheden voor onderzoek om bescherming te bieden tegen
de veelheid aan aanvallen die tegenwoordig door aanvallers
worden uitgevoerd.Voorbeeld van inclusieve regelsDe onderstaande regels zijn een voorbeeld van hoe een
erg veilige inclusieve firewall opgezet kan worden. Een
inclusieve firewall staat alleen diensten toe die passen bij
de pass-regels en blokkeert al het
overige verkeer. Firewalls die bedoeld zijn om andere machines te
beschermen, ook wel netwerk-firewalls genoemd, dienen
tenminste twee interfaces te hebben, die over het algemeen zijn
ingesteld om de ene kant te vertrouwen (het LAN) maar
niet de andere (het publieke Internet). Ook kan een firewall worden
ingesteld om alleen het systeem te beschermen waarop het
draait—dit wordt een host-gebaseerde firewall
genoemd, en is in het bijzonder geschikt voor servers op een onvertrouwd
netwerk.Alle &unix; systemen en dus ook &os; zijn zo ontworpen
dat ze voor interne communicatie de interface
lo0 en IP adres
127.0.0.1 gebruiken. De
firewall moet dit interne verkeer gewoon doorgang laten
vinden.Voor de interface die is verbonden met het publieke
Internet worden regels gemaakt waarmee de toegang voor uitgaande en
binnenkomende verbindingen worden geautoriseerd en beheerst.
Dit kan de PPP-interface tun0 zijn of de
netwerkkaart die is verbonden met een xDSL- of kabelmodem.In gevallen dat er één of meer netwerkkaarten
zijn aangesloten op private netwerksegmenten kunnen er regels
op de firewall nodig zijn om pakketten die van die LAN-interfaces
afkomen vrije doorgang te geven naar elkaar en/of naar buiten
(het Internet).De regels worden opgedeeld in drie onderdelen: eerst de vertrouwde
interfaces, dan het publieke uitgaande interface en als laatste het
onvertrouwde publieke binnenkomende interfaces.In iedere sectie moeten zo staan dat de regels die het
meest gebruikt worden vóór de regels die minder
vaak gebruikt worden staan. De laatste regel van een onderdeel
geeft aan dat al het overige verkeer op die interface in die
richting geblokkeerd en gelogd moet worden.In het onderdeel Uitgaand staan alleen regels met
pass die parameters bevatten om
uniek individuele diensten identificeren die het publieke Internet mogen
benaderen. Bij al die regels staan de opties
quick, on,
proto, port en
keep state aan. De regels met
proto tcp maken ook gebruik van de optie
flag om te bekijken of het een pakket
betreft voor het opzetten van een sessie om de stateful
functionaliteit aan te sturen.In het onderdeel Inkomend staan eerst alle regels voor het
blokkeren van ongewenste pakketten, om twee redenen.
Als eerste kan het zo zijn dat kwaadaardige pakketten gedeeltelijk
overeenkomen met legitiem verkeer. Deze pakketten moeten worden
weggegooid in plaats van binnengelaten te worden, gebaseerd op hun
gedeeltelijke match met de allow-regels. De tweede
reden is dat bekende en oninteressante verwerpingen stil geblokkeerd
kunnen worden in plaats van gevangen en gelogd te worden door de
laatste regels in de sectie. De laatste regel in elke sectie blokkeert
en logt alle pakketten en kan worden gebruikt voor het wettelijke bewijs
nodig om degenen die uw systeem aanvallen aan te klagen.Waar ook gezorgd voor moet worden is dat al het verkeer dat wordt
geweigerd geen antwoord verstuurd. Ongeldige pakketten dienen gewoon te
verdwijnen. Zo weet een aanvaller niet of een pakket het doelsysteem
wel heeft bereikt. Zo kan een aanvaller geen informatie verzamelen
over een systeem: hoe minder informatie er over een systeem
beschikbaar is, hoe meer tijd iemand erin moet steken voordat
er iets slechts gedaan kan worden. Regels die een optie log
first bevatten, zullen alleen de eerste keer dat de
gebeurtenis voorkomt de gebeurtenis loggen. Deze optie is opgenomen in
de voorbeeldregel nmap OS fingerpint. Het
gereedschap security/nmap wordt vaak
door aanvallers gebruikt om het besturingssysteem van uw server
proberen te achterhalen.We raden aan om telkens als er logmeldingen van een regel
met de optie log first komen,
ipfstat -hio uit te voeren om te
bekijken hoe vaak de regel van toepassing is geweest. Een groot aantal
overeenkomsten geeft gewoonlijk aan dat de firewall overspoeld wordt,
met andere woorden aangevallen wordt.Het bestand /etc/services kan gebruikt worden
om onbekende poortnummers op te zoeken. Ook kan
worden bezocht en het poortnummer worden opgezocht om het doel van een
bepaalde poort uit te vinden.Op de volgende link worden poortnummers van Trojans
beschreven: .De onderstaande set regels is een complete en erg veilige
inclusieve set met regels voor een firewall die is
getest op productiesystemen. Deze set met regels is eenvoudig aan te
passen voor uw eigen systeem. Maak gewoon commentaar van elke
pass-regel voor een dienst die niet gewenst
is.Logberichten die niet gewenst zijn, zijn uit te sluiten door een
block-regel toe te voegen in het begin van het
onderdeel Inkomend.Voor de onderstaande regels dient de
dc0 interfacenaam in iedere regel
vervangen te worden door de echte interfacenaam van de netwerkkaart
in het systeem die met het publieke Internet is verbonden.
Voor gebruikers van PPP zou dat tun0
zijn.Dit zou de inhoud van /etc/ipf.rules
kunnen zijn:#################################################################
# Geen beperkingen op de interface aan de LAN kant.
# Niet nodig als er geen LAN is.
################################################################
#pass out quick on xl0 all
#pass in quick on xl0 all
#################################################################
# Geen beperkingen op de loopback interface
#################################################################
pass in quick on lo0 all
pass out quick on lo0 all
#################################################################
# Interface aan het publieke Internet (onderdeel Uitgaand).
# Inspecteer verzoeken om een sessie te starten van achter de
# firewall op het private netwerk of vanaf deze gateway-server
# naar het publieke Internet.
#################################################################
# Geef toegang tot de DNS server van de ISP.
# xxx moet het IP adres van de DNS van de ISP zijn.
# Dupliceer deze regels als een ISP meerdere DNS servers heeft.
# Haal het IP adres evt. uit /etc/resolv.conf.
pass out quick on dc0 proto tcp from any to xxx port = 53 flags S keep state
pass out quick on dc0 proto udp from any to xxx port = 53 keep state
# Geef toegang tot de DHCP server van de ISP voor kabel- en
# xDSL-netwerken. Deze regel is niet nodig als gebruik gemaakt worden
# van PPP naar het publieke Internet. In dat geval kan de hele groep
# verwijderd worden. Gebruik de volgende regel en controleer het
# logboek voor het IP adres. Wijzig dan het IP adres in de regel
# commentaar hieronder en verwijder de eerste regel.
pass out log quick on dc0 proto udp from any to any port = 67 keep state
#pass out quick on dc0 proto udp from any to z.z.z.z port = 67 keep state
# Sta niet beveiligd www verkeer toe.
pass out quick on dc0 proto tcp from any to any port = 80 flags S keep state
# Sta beveiligd www verkeer over TLS SSL toe.
pass out quick on dc0 proto tcp from any to any port = 443 flags S keep state
# Sta het verzenden en ontvangen van e-mail toe.
pass out quick on dc0 proto tcp from any to any port = 110 flags S keep state
pass out quick on dc0 proto tcp from any to any port = 25 flags S keep state
# Sta Time toe.
pass out quick on dc0 proto tcp from any to any port = 37 flags S keep state
# Sta uitgaand NNTP nieuws toe.
pass out quick on dc0 proto tcp from any to any port = 119 flags S keep state
# Sta uitgaande lokale niet beveiligde FTP (ook van LAN-gebruikers) toe
# (zowel passieve als actieve modes). Deze functie maakt gebruik van
# de in IP-NAT ingebouwde FTP-proxy die in het bestand met NAT-regels
# staat om dit in één regel te laten werken. Als er met
# pkg_add pakketten toegevoegd moeten kunnen worden op een systeem, dan
# is deze regel nodig.
pass out quick on dc0 proto tcp from any to any port = 21 flags S keep state
# Sta uitgaande SSH/SFTP/SCP toe (vervangingen van telnet/rlogin/FTP)
# Deze functie maakt gebruik van SSH (secure shell)
pass out quick on dc0 proto tcp from any to any port = 22 flags S keep state
# Sta uitgaande niet beveiligde telnet toe.
pass out quick on dc0 proto tcp from any to any port = 23 flags S keep state
# Sta de &os; CVSUP-functie toe.
pass out quick on dc0 proto tcp from any to any port = 5999 flags S keep state
# Sta ping toe naar het publieke Internet.
pass out quick on dc0 proto icmp from any to any icmp-type 8 keep state
# Sta whois toe vanaf het LAN naar het publieke Internet.
pass out quick on dc0 proto tcp from any to any port = 43 flags S keep state
# Blokkeer en log het eerste voorkomen van al het andere dat probeert
# buiten te komen. Deze regel implementeert de standaard-blokkade.
block out log first quick on dc0 all
#################################################################
# Interface aan het publieke Internet (onderdeel Inkomend).
# Inspecteert pakketten die van het publieke Internet komen
# met als bestemming deze gateway-server of het private netwerk.
#################################################################
# Blokkeer al het verkeer voor niet-routeerbare of gereserveerde
# adresreeksen.
block in quick on dc0 from 192.168.0.0/16 to any #RFC 1918 privaat IP
block in quick on dc0 from 172.16.0.0/12 to any #RFC 1918 privaat IP
block in quick on dc0 from 10.0.0.0/8 to any #RFC 1918 privaat IP
block in quick on dc0 from 127.0.0.0/8 to any #loopback
block in quick on dc0 from 0.0.0.0/8 to any #loopback
block in quick on dc0 from 169.254.0.0/16 to any #DHCP auto-config
block in quick on dc0 from 192.0.2.0/24 to any #gereserveerd voor documentatie
block in quick on dc0 from 204.152.64.0/23 to any #Sun cluster interconnect
block in quick on dc0 from 224.0.0.0/3 to any #Klasse D & E multicast
##### Blokkeer wat vervelende dingen ############
# die niet in de logboeken moeten komen.
# Blokkeer fragmenten.
block in quick on dc0 all with frags
# Block korte TCP pakketten.
block in quick on dc0 proto tcp all with short
# Blokkeer source gerouteerde pakketten.
block in quick on dc0 all with opt lsrr
block in quick on dc0 all with opt ssrr
# Blokkeer pogingen voor nmap OS fingerprint.
# Blokkeer het eerste voorkomen ervan voor de IP-adressen
block in log first quick on dc0 proto tcp from any to any flags FUP
# Blokkeer alles met speciale opties.
block in quick on dc0 all with ipopts
# Blokkeer publieke pings.
block in quick on dc0 proto icmp all icmp-type 8
# Blokkeer ident.
block in quick on dc0 proto tcp from any to any port = 113
# Blokkeer alle Netbios diensten. 137=naam, 138=datagram, 139=sessie.
# Netbios is de &windows; bestandsdeeldienst.
# Blokkeer &windows; hosts2 name server verzoeken 81.
block in log first quick on dc0 proto tcp/udp from any to any port = 137
block in log first quick on dc0 proto tcp/udp from any to any port = 138
block in log first quick on dc0 proto tcp/udp from any to any port = 139
block in log first quick on dc0 proto tcp/udp from any to any port = 81
# Sta inkomend verkeer toe van de DHCP server van de ISP. Deze regel
# moet het IP adres van de DHCP server van de ISP bevatten omdat die
# de enige toegestane bron van dit type pakketten moet zijn. Alleen
# van belang voor kabel en xDSL instellingen. Deze regel is niet nodig
# voor PPP verbindingen naar het publieke Internet. Dit is hetzelfde
# IP adres dat in het Uitgaande onderdeel is opgezocht.
pass in quick on dc0 proto udp from z.z.z.z to any port = 68 keep state
# Sta inkomend webverkeer toe omdat er een Apache server draait.
pass in quick on dc0 proto tcp from any to any port = 80 flags S keep state
# Sta niet beveiligde telnet sessie toe vanaf het publieke Internet.
# Dit heeft het label niet veilig omdat gebruikersnaam en
# wachtwoord als platte tekst over Internet gaan. Als er geen telnet
# server draait, hoeft deze regel niet actief te zijn.
#pass in quick on dc0 proto tcp from any to any port = 23 flags S keep state
# Sta beveiligde FTP, telnet en SCP toe vanaf Internet.
# Deze functie gebruikt SSH (secure shell).
pass in quick on dc0 proto tcp from any to any port = 22 flags S keep state
# Blokkeer en log het eerste voorkomen van al het andere dat probeert
# binnen te komen. Het loggen van alleen het eerste voorkomen stopt
# een ontzegging van dienst aanval die gericht is op het laten
# vollopen van de partitie waarop de logboeken staan. Deze regel implementeert
# de standaard blokkade.
block in log first quick on dc0 all
################### Einde van de regels ###################################NATNATIP masqueradingNATnetwork address translationNATnetwerkadres vertalingNATNAT staat voor Network Address
Translation (netwerkadres vertaling). In &linux; heet dit
IP Masquerading. Een van de vele mogelijkheden die IPF
NAT kan bieden is het delen van
één IP adres op het publieke
Internet met een LAN achter een firewall.De vraag zou kunnen rijzen waarom iemand dat zou willen.
ISP's wijzen normaliter namelijk dynamisch een
IP adres toe aan hun niet-commerciële
gebruikers. Dynamisch betekent hier dat het
IP-adres iedere dat er wordt ingebeld of
dat het kabel- of xDSL-modem uit- en aangeschakeld wordt
anders kan zijn. Dit dynamische IP-adres wordt
gebruikt om uw systeem op het publieke Internet te identificeren.Stel dat er vijf PC's in een huis staan en iedere
computer in dat huis heeft toegang tot Internet nodig. Dan
zouden er bij een ISP vijf individuele accounts moeten zijn
en vijf telefoonlijnen om dat te realiseren.Met NAT is er maar één
account bij een ISP nodig. De andere vier PC's moeten met kabels
op een switch worden aangesloten waarop ook een &os; systeem is
aangesloten dat binnen uw LAN als gateway gaat opereren.
NAT zal automatisch de private LAN
IP adressen van alle PC's vertalen naar
een enkel publiek IP-adres als de
pakketten de firewall naar het Internet verlaten.Er is een speciale reeks van IP-adressen
gereserveerd voor NAT op private LANs.
Volgens RFC 1918 kunnen de volgende reeksen
IP-adressen gebruikt worden op private
netwerken die nooit direct op het publieke Internet
gerouteerd worden.Eerste IP–Laatste IP10.0.0.0–10.255.255.255172.16.0.0–172.31.255.255192.168.0.0–192.168.255.255IPNATNATen IPFILTERipnatNAT regels worden geladen met
ipnat. De NAT regels worden vaak
opgeslagen in /etc/ipnat.rules. Meer details
staan in &man.ipnat.8;.Bij het maken van wijzigingen aan de
NAT-regels nadat NAT
gestart is, wordt aangeraden de wijziging aan het bestand met
regels te maken en daarna ipnat
te gebruiken om alle actieve
NAT-regels te wissen. Daarna kunnen de regels uit
het bestand weer als volgt geladen worden:&prompt.root; ipnat -CF -f /etc/ipnat.rulesGebruiksgegevens over NAT kunnen
getoond worden met:&prompt.root; ipnat -sDe huidige inhoud van de NAT tabellen
kan getoond worden met:&prompt.root; ipnat -lMet het volgende commando kan de uitgebreide rapportage
worden ingeschakeld en dan wordt informatie over het
verwerken van verkeer en de actieve regels getoond:&prompt.root; ipnat -vIPNAT regelsNAT regels zijn erg flexibel en er
kunnen veel dingen mee gedaan worden om behoeften van
bedrijven en thuisgebruikers in te vullen.De syntaxis van de regels die hier wordt toegelicht is
vereenvoudigd om te passen bij een niet-commerciële
omgeving. De complete syntaxis is na te lezen in
&man.ipnat.5;.De syntaxis voor een NAT regel ziet er
ongeveer als volgt uit:map IFLAN_IP_REEKS -> PUBLIEK_ADRESDe regel begint met het sleutelwoord
map.IF dient vervangen te worden
door de aanduiding van de externe interface.LAN_IP_REEKS is de reeks die
clients op een LAN gebruiken, meestal iets van 192.168.1.0/24.PUBLIEK_ADRES kan het publieke
IP adres zijn of een speciaal sleutelwoord
0.32, wat betekent dat het
IP adres van IF
gebruikt moet worden.Hoe NAT werktEen pakket komt vanaf het LAN aan bij de firewall en
heeft een publieke bestemming. Het wordt verwerkt door de
filterregels voor inkomend verkeer en daarna krijgt
NAT de kans zijn regels op het pakket toe
te passen. De regels worden van boven naar beneden toegepast
en de eerste regel die van toepassing is wint.
NAT controleert voor alle regels het
pakket op interfacenaam en bron IP adres.
Als de interfacenaam van een pakket past bij een
NAT regel dan wordt het bron
IP adres van dat pakket gecontroleerd, dat
is dus een IP adres op het private LAN,
om te bekijken of het valt in de reeks die is opgegeven aan
de linkerkant van een NAT regel. Als ook
dat klopt, dan wordt het bron IP adres van
het pakket vervangen (rewritten) door een
publiek IP adres dat verkregen kan zijn
met het sleutelwoord 0.32.
NAT werkt dan zijn interne
NAT tabel bij, zodat als er een pakket uit
die sessie terugkomt van het publieke Internet, dat pakket
weer gepast kan worden bij het originele private
IP adres en door de firewallregels
gefilterd kan worden om daarna, als dat mag, naar een client
gestuurd te worden.IPNAT inschakelenVoor IPNAT zijn de onderstaande
instellingen in /etc/rc.conf
beschikbaar.Om verkeer tussen interfaces te kunnen routeren:gateway_enable="YES"Om IPNAT automatisch te starten:ipnat_enable="YES"Om aan te geven waar de IPNAT regels
staan:ipnat_rules="/etc/ipnat.rules"NAT voor een groot LANVoor netwerken met grote aantallen PC's of netwerken
met meerdere LAN's kan het een probleem worden om al die
private IP adressen met één
enkel publiek IP adres te vervangen,
omdat vaak dezelfde poortnummers gebruikt worden. Er zijn
twee manieren om dit probleem op te lossen.Aangeven welke poorten te gebruikenEen normale regel voor NAT ziet er als volgt uit:map dc0 192.168.1.0/24 -> 0.32Met de bovenstaande regel blijft de bronpoort
ongewijzigd als het pakket door IPNAT
gaat. Door gebruik te maken van het sleutelwoord
portmap kan IPNAT
ingesteld worden om alleen bronpoorten in de aangegeven reeks
te gebruiken. Zo stelt de onderstaande regel in dat
IPNAT de bronpoort aanpast naar een
poortnummer dat in de aangegeven reeks valt:map dc0 192.168.1.0/24 -> 0.32 portmap tcp/udp 20000:60000Het kan nog eenvoudiger door gebruik te maken van het
sleutelwoord auto zodat
IPNAT zelf bepaalt welke poorten gebruikt
kunnen worden:map dc0 192.168.1.0/24 -> 0.32 portmap tcp/udp autoMeerdere publieke adressen gebruikenIn grote netwerken komt er een moment waarop er gewoon
te veel adressen zijn om te bedienen met één
IP adres. Als er een blok van publiekelijke
IP adressen beschikbaar is, dan kunnen deze adressen
gebruikt worden in een poel, welke door
IPNAT gebruikt kan worden om
één van de adressen te gebruiken als uitgaand
adres.Bijvoorbeeld om alle pakketten te verstoppen achter
één een enkel IP adres:map dc0 192.168.1.0/24 -> 204.134.75.1Een reeks van publiekelijke IP adressen kan gespecificeerd
worden met een netwerkmasker:map dc0 192.168.1.0/24 -> 204.134.75.1-10of door gebruik van de CIDR notatie:map dc0 192.168.1.0/24 -> 204.134.75.0/24Poorten omleidenHet is erg gebruikelijk om een webserver, mailserver,
database server en DNS server op verschillende computers
op een LAN te draaien. Het uitgaande verkeer van die
servers kan dan met NAT afgehandeld
worden, maar er moet ook ingesteld worden dat inkomend
verkeer bij de juiste computer terecht komt.
IPNAT gebruikt daarvoor de opties in
NAT waarmee verkeer omgeleid kan worden.
Als bijvoorbeeld een webserver op het LAN-adres 10.0.10.25 draait en het enkele publieke
IP adres zou 20.20.20.5 zijn, dan zou de regel er als volgt
uit zien:rdr dc0 20.20.20.5/32 port 80 -> 10.0.10.25 port 80of:rdr dc0 0.0.0.0/32 port 80 -> 10.0.10.25 port 80Voor een DNS server op een LAN die ook vanuit Internet
bereikbaar met zijn en die draait op 10.0.10.33 zou de regel er als
volgt uit zien:rdr dc0 20.20.20.5/32 port 53 -> 10.0.10.33 port 53 udpFTP en NATFTP is dinosaurus uit het tijdperk van voor Internet was
zoals het nu is, toen onderzoeksinstellingen met elkaar
verbonden waren via huurlijnen en FTP de aangewezen methode
was om bestanden met elkaar uit te wisselen. Maar bij het
gebruik van FTP worden gebruikersnaam en wachtwoord als
platte tekst verzonden en het protocol is nooit aangepast.
FTP is er in twee smaken: actief en passief. Het verschil
zit 'm in hoe het datakanaal wordt opgezet. De passieve
variant is veiliger voor een gebruiker omdat bij deze variant
beide communicatiekanalen door de cliënt zelf worden opgezet.
Op de volgende pagina zijn details over FTP na te lezen: .IPNAT-regelsIPNAT heeft een speciale FTP-proxy
ingebouwd die kan worden ingeschakeld met een
NAT-map-regel. Die kan
al het uitgaande verkeer monitoren wat betreft
opstartverzoeken voor sessies voor actieve en passieve FTP en
dynamisch tijdelijke filterregels maken die alleen het
poortnummer dat echt in gebruik is voor het datakanaal
doorlaten. Hiermee wordt een veiligheidsrisico dat normaal
gepaard gaat met FTP, namelijk het toestaan van grote reeksen
hoge poortnummers, weggenomen.De volgende regel handelt al het FTP verkeer van het
LAN af:map dc0 10.0.10.0/29 -> 0/32 proxy port 21 ftp/tcpDe regel hieronder handelt het FTP verkeer van de
gateway zelf af:map dc0 0.0.0.0/0 -> 0/32 proxy port 21 ftp/tcpDeze laatste regel handelt al het niet-FTP
verkeer voor het LAN af:map dc0 10.0.10.0/29 -> 0/32De FTP-afbeeldregel hoort voor de
normale regels te staan. Alle pakketten worden als eerste
vergeleken met de eerste regel en zo verder. Eerst wordt
gekeken over de interfacenaam overeenkomt, daarna het
bron IP adres van het LAN en dan of het
een FTP pakket is. Als dat allemaal klopt, dan maakt de
speciale FTP proxy een tijdelijke filterregel die de
pakketten uit de FTP sessie naar binnen en buiten doorlaat
en ook NAT toepast op de FTP pakketten. Alle pakketten
van het LAN die niet van het protocoltype FTP zijn en dus
niet bij de eerste regel passen, worden tegen de derde
regel gehouden die van toepassing is vanwege de interface
en bron IP adres, zodat er dan
NAT op toegepast wordt.IPNAT FTP filterregelsAls de NAT-FTP-proxy wordt gebruikt
is er maar één filterregel voor FTP
nodig. Zonder de FTP-proxy zouden er drie regels nodig
zijn:# Sta LAN client toe te FTP-en naar Internet
# Actieve en passieve modes
pass out quick on rl0 proto tcp from any to any port = 21 flags S keep state
# Sta opzetten van het datakanaal voor passieve mode toe voor hoge poorten
pass out quick on rl0 proto tcp from any to any port > 1024 flags S keep state
# Laat het datakanaal van de FTP server binnen voor actieve mode
pass in quick on rl0 proto tcp from any to any port = 20 flags S keep stateIPFWfirewallIPFWIPFIREWALL (IPFW) is een firewall die binnen &os;
wordt ontwikkeld en onderhouden door vrijwillige leden van de
staf. Het maakt gebruik van verouderde staatloze regels en een
verouderde techniek om te realiseren wat eenvoudige stateful
logica zou kunnen heten.De verzameling voorbeeldregels van IPFW (die in
/etc/rc.firewall en
/etc/rc.firewall6 staan) uit de standaard
&os;-installatie is redelijk eenvoudig en niet voorbereid om
zonder wijzigingen gebruikt te worden. Het voorbeeld maakt geen
gebruik van stateful filteren, wat een voordeel is in de meeste
situaties. Daarom worden deze regels niet als basis gebruikt in
dit onderdeel.De staatloze syntaxis van IPFW is krachtig door de
technisch geavanceerde mogelijkheden van de regelsyntaxis die
de kennis van de gemiddelde gebruiker van firewalls ver
overstijgt. IPFW is gericht op de professionele gebruiker
of de gevorderde thuisgebruiker die hoge eisen stelt aan de
wijze waarop er met pakketten wordt omgegaan. Voordat de
kracht van de IPFW regels echt ingezet kan worden, moet de
gebruiker veel weten over de verschillende protocollen en
de wijze waarop pakketten in elkaar zitten. Het tot op dat
niveau behandelen van stof valt buiten de doelstellingen van
dit Handboek.IPFW bestaat uit zeven componenten: de verwerkingseenheid
voor de firewallregels, verantwoording, loggen, regels met
divert (omleiden) waarmee
NAT gebruikt kan worden en de speciale
gevorderde mogelijkheden voor bandbreedtebeheer met DUMMYNET, de
fwd rule forward-mogelijkheid, de bridge-mogelijkheden
en de ipstealth-mogelijkheden. IPFW ondersteunt zowel IPv4 als
IPv6.IPFW inschakelenIPFWinschakelenIPFW zit bij de basisinstallatie van &os; als een losse
tijdens runtime laadbare module. Het systeem laadt de kernelmodule
dynamisch als in rc.conf de regel
firewall_enable="YES" staat. IPFW hoeft
niet in de &os; kernel gecompileerd te worden.Na het rebooten van een systeem met
firewall_enable="YES" in
rc.conf is het volgende bericht op het
scherm te zien tijdens het booten:ipfw2 initialized, divert disabled, rule-based forwarding disabled, default to deny, logging disabledIn de laadbare module zit de mogelijkheid om te loggen
gecompileerd. Er is een knop in /etc/sysctl.conf
om loggen aan te zetten en de uitgebreide loglimiet in te stellen. Door
deze regels toe te voegen, staat loggen aan bij toekomstige
herstarts:net.inet.ip.fw.verbose=1
net.inet.ip.fw.verbose_limit=5KerneloptieskerneloptiesIPFIREWALLkerneloptiesIPFIREWALL_VERBOSEkerneloptiesIPFIREWALL_VERBOSE_LIMITIPFWkerneloptiesHet is niet verplicht om IPFW in te schakelen door het
mee te compileren in de &os; kernel. Dit wordt alleen beschreven als
achtergrondinformatie.options IPFIREWALLMet IPFIREWALL wordt IPFW ingeschakeld
als deel van de kernel.options IPFIREWALL_VERBOSEMet IPFIREWALL_VERBOSE wordt het
loggen van pakketten die worden verwerkt met IPFW mogelijk
die het sleutelwoord log in een regel hebben
staan.options IPFIREWALL_VERBOSE_LIMIT=5Limiteert het aantal pakketten dat per regel wordt gelogd
via &man.syslogd.8;. Deze optie kan gebruikt worden in
vijandige omgevingen waar de activiteit van een firewall gelogd
moet worden. Hierdoor kan een mogelijke ontzegging van dienst
aanval door het vol laten lopen van syslog voorkomen worden.kerneloptiesIPFIREWALL_DEFAULT_TO_ACCEPToptions IPFIREWALL_DEFAULT_TO_ACCEPTMet IPFIREWALL_DEFAULT_TO_ACCEPT wordt
standaard alles door de firewall doorgelaten. Dit wordt
aangeraden als iemand voor het eerst een firewall
opzet.kerneloptiesIPDIVERToptions IPDIVERTMet IPDIVERT wordt de
NAT functionaliteit ingeschakeld.De firewall zal alle binnenkomende en uitgaande pakketten
blokkeren als de kerneloptie
IPFIREWALL_DEFAULT_TO_ACCEPT of een regel om deze
verbindingen expliciet toe te staan ontbreekt./etc/rc.conf optiesStart de firewall:firewall_enable="YES"Om één van de standaard firewall types die geleverd wordt
door &os; te selecteren, lees
/etc/rc.firewall, maak een selectie en
plaats het in de volgende regel:firewall_type="open"Beschikbare waardes voor deze instelling zijn:open — laat al het verkeer door.client — beschermt alleen deze
machine.simple — beschermt het hele
netwerk.closed — blokkeert alle IP-verkeer,
behalve voor lokaal verkeer.UNKNOWN — voorkomt het laden
de firewall-regels.bestandsnaam
— absoluut pad naar een bestand dat firewall-regels
bevat.Het is mogelijk om twee verschillende manieren te gebruiken
voor speciaal gemaakte regels voor de
ipfw firewall. één
daarvan is door het zetten van de
firewall_type variabele naar een absoluut
pad van een bestand, welke firewall-regels
bevat, zonder enige specifieke opties voor &man.ipfw.8;. Het volgende
is een eenvoudig voorbeeld van een bestand met regelverzamelingen dat
al het inkomend en uitgaand verkeer blokkeert:add deny in
add deny outAan de andere kant is het mogelijk om de variabele
firewall_script in te stellen op een
absoluut pad van een uitvoerbaar script, welke inclusief
ipfw commando's uitgevoerd wordt tijdens het
opstarten van het systeem. Een geldig script met regels dat
gelijkwaardig is aan het bestand met regels hierboven, zou het
volgende zijn:#!/bin/sh
ipfw -q flush
ipfw add deny in
ipfw add deny outAls firewall_type is gezet naar
client of simple moeten
de standaard regels die gevonden kunnen worden in
/etc/rc.firewall gecontroleerd worden om
te zien of deze configuratie voldoet voor de machine. Let
ook op dat alle voorbeelden die gebruikt zijn in dit hoofdstuk
ervan uitgaan dat de firewall_script
variabele gezet is naar /etc/ipfw.rules.Om loggen in te schakelen:firewall_logging="YES"Het enige dat de variabele
firewall_logging doet is de sysctl
variabele net.inet.ip.fw.verbose op de
waarde 1 zetten (zie ). Er is geen variabele in
rc.conf om logboeklimieten in te
stellen, maar dat kan ingesteld worden via een sysctl
variabele, handmatig of via
/etc/sysctl.conf:net.inet.ip.fw.verbose_limit=5Als de machine in kwestie een gateway is, dus Network
Address Translation (NAT) diensten levert via &man.natd.8;, dan
staat in meer informatie over de
benodigde instellingen voor
/etc/rc.conf.Het commando IPFWipfwGewoonlijk wordt ipfw gebruikt om met de hand
enkelvoudige regels toe te voegen of te verwijderen als IPFW actief is.
Het probleem met deze methode is dat, als het systeem wordt uitgezet
alle regels die gewijzigd of verwijderd zijn
verloren gaan. Door alle regels in een bestand op te nemen
dat bij het booten wordt geladen of door het bestand waarin
de wijzigingen zijn gemaakt als een machine draait te laden
bestaat die probleem niet.Met ipfw kunnen de actieve regels van
de firewall op het scherm getoond worden. De
verantwoordingsmogelijkeden van &man.ipfw.8; maken
dynamisch tellers aan voor iedere regel en houden die bij
voor alle pakketten die van toepassing zijn op die regel. Tijdens het
testen van een regel is het afbeelden van de regel met zijn teller
een van de manieren om te bepalen of de regel werkt.Om alle regels in volgorde te tonen:&prompt.root; ipfw listOm alle regels te tonen met de tijd waarop deze voor het
laatst van toepassing was:&prompt.root; ipfw -t listHet volgende commando kan gebruikt worden om de
verantwoordingsinformatie, pakkettellers en de regel zelf te
tonen. De eerste kolom is het regelnummer met daarachter
het aantal keren dat de regel van toepassing was voor
inkomend verkeer, gevolgd door het aantal keren dat de regel
van toepassing was voor uitgaand verkeer. Als laatste wordt
de regel zelf getoond:&prompt.root; ipfw -a listOok kunnen onder de statische regels de dynamische regels
getoond worden:&prompt.root; ipfw -d listEn de dynamische regels die verlopen zijn:&prompt.root; ipfw -d -e listDe tellers op nul gesteld worden:&prompt.root; ipfw zeroAlleen de tellers voor regel met nummer
NUM op nul stellen:&prompt.root; ipfw zero NUMSets van IPFW regelsEen verzameling regels is een groep IPFW-regels die is
gemaakt om pakketten toe te staan of te blokkeren op basis
van de inhoud van dat pakket. De bi-directionele
uitwisseling van pakketten tussen hosts bestaat uit een
gesprek dat een sessie heet. De verzameling van firewallregels
beoordeelt zowel de pakketten die aankomen van de host
op het publieke Internet als de pakketten die op het systeem ontstaan
als antwoord daarop. Iedere TCP/IP-dienst als
telnet, www, mail, etc, heeft zijn eigen protocol en bevoorrechte
(luister)poort. Pakketten bestemd voor een specifieke poort verlaten
het bronadres via een onbevoorrechte (hogere) poort en doelen op de
specifieke dienstpoort op het bestemmingsadres. Alle bovenstaande
parameters (poorten en adressen) kunnen gebruikt worden als
selectiecriteria om regels aan te maken die diensten doorlaten of
blokkeren.IPFWvolgorde regelverwerkingAls een pakket de firewall binnenkomt wordt het
vergeleken met de eerste regel in de set regels en zo gaat
dat voor iedere regel vanaf boven tot beneden. Als een
regel van toepassing is op een pakket, dan wordt het
actieveld van de regel uitgevoerd. Dit wordt de
de eerst passende regel wint zoekmethode
genoemd. Als een pakket bij geen enkele regel past, dan
wordt de verplichte standaardregel 65535 van IPFW toegepast, die alle
pakketten weigert zonder een antwoord terug te sturen naar de
verzender.Het zoeken gaat door na regels met
count, skipto en
tee.De instructies in dit onderdeel zijn gebaseerd op regels
die gebruik maken van de stateful opties keep
state, limit,
in, out en
via. Dit is het raamwerk waarmee een
set van inclusieve firewallregels wordt samengesteld.Wees voorzichtig tijdens het werken met firewall-regels, het is
gemakkelijk om uzelf uit te sluiten.RegelsyntaxisIPFWregelsyntaxisDe regelsyntaxis zoals hier toegelicht is vereenvoudigd
door alleen te tonen wat nodig is om een standaard
inclusieve set met firewallregels te maken. De complete
beschrijving van alle mogelijkheden staat in
&man.ipfw.8;.Regels bevatten sleutelwoorden die in een bepaalde
volgorde van links naar rechts op een regel horen te staan.
Sleutelwoorden worden vet weergegeven. Sommige
sleutelwoorden hebben subopties die zelf ook weer
sleutelwoorden hebben die ook weer subopties kunnen
hebben.Het karakter # wordt gebruikt om
het begin van een opmerking te markeren en kan zowel op een
eigen regel als achter een firewallregel staan. Lege
regels worden genegeerd.CMD REGEL_NUMMER ACTIE LOGGEN SELECTIE
STATEFULCMDIedere regel moet beginnen met
add om hem toe te voegen aan de
tabel met regels.REGEL_NUMMERElke regel is geassocieerd met een regel_nummer van 1 tot en
met 65535.ACTIEBij een regel kunnen één of meer acties
horen die worden uitgevoerd als een regel geldt voor een
pakket.allow | accept | pass |
permitDeze opties betekenen allemaal hetzelfde: als de
regel geldt voor een pakket, laat dat pakket dan door en
stop met het zoeken naar geldende regels.check-stateVergelijkt het pakket met de tabel met dynamische
regels. Als het erin staat, dan wordt de actie van
de dynamisch door deze regel gemaakte regel uitgevoerd.
Anders wordt er verder gezocht door de regels. Een regel met
check-state heeft geen selectiecriteria. Als er geen regel
met check-state in de set met regels staat, dan wordt de
tabel met dynamische regels bij het eerste voorkomen van
keep-state of limit gecontroleerd.deny | dropDeze opties betekenen hetzelfde: als de regel geldt
voor een pakket, blokkeer dat pakket dan en stop met het
zoeken naar geldende regels.Loggenlog of
logamountAls een regel met het sleutelwoord
log van toepassing is op een
pakket, dan wordt er een bericht naar &man.syslogd.8;
geschreven met de faciliteitsnaam SECURITY. Er wordt alleen
een bericht geschreven als het aantal voor die regel
gelogde pakketten niet groter is dan de instelling van de parameter
logamount. Als er geen logamount is ingesteld,
dan wordt de limiet uit de &man.sysctl.8; variabele
net.inet.ip.fw.verbose_limit gehaald. In beide
gevallen bestaat er in het geval de waarde nul is geen limiet.
Als de limiet is bereikt, dan kan het loggen weer
ingeschakeld worden door de teller voor het loggen weer
op nul te zetten voor die regel met
ipfw reset log.Er wordt gelogd als een pakket zeker past bij een
regel, maar voordat de actie (bijvoorbeeld
accept of
deny) op een pakket wordt
toegepast. Uiteindelijk bepaalt de gebruiker zelf voor
welke regels loggen wordt ingeschakeld.SelectieDe sleutelwoorden in deze paragraaf beschrijven de
attributen van een pakket die gecontroleerd worden bij het
bepalen of een regel wel of niet op een pakket van
toepassing is. De attributen waarop gecontroleerd kan
worden moeten in de beschreven volgorde gebruikt
worden.udp | tcp | icmpNaast de hierboven aangegeven protocollen kunnen alle
in /etc/protocols beschreven
protocollen gebruikt worden. De waarde die wordt
opgegeven is het protocol dat van toepassing moet zijn.
Dit attribuut is verpicht.from bron to bestDe sleutelwoorden from en
to worden gebruikt om te bekijken
of een regel van toepassing is op IP-adressen.
Een regel moet zowel bron- als
bestemmingsadressen bevatten. any is
een bijzonder sleutelwoord dat van toepassing is op alle
IP-adressen. me is
een bijzonder sleutelwoord dat van toepassing is op alle
IP-adressen die ingesteld zijn op
interfaces van een &os; systeem om de PC waarop de firewall draait
te vertegenwoordigen (deze machine). Zo kan dit onderdeel
bijvoorbeeld de volgende vormen aannemen:
from me to any,
from any to me,
from 0.0.0.0/0 to any,
from any to 0.0.0.0/0,
from 0.0.0.0 to any,
from any to 0.0.0.0 of
from me to 0.0.0.0.
IP-adressen mogen ingevoerd worden
in de vorm numeriek, door punten gescheiden
adres/maskerlengte (CIDR-notatie) of als een enkelvoudig
IP-adres in de vorm numeriek, door
punten gescheiden. De port net-mgmt/ipcalc kan gebruikt worden om
de berekeningen e vereenvoudigen. Aanvullende informatie is
beschikbaar op de webpagina van het programma: .poortnummerWordt gebruikt voor protocollen die poortnummers
ondersteunen (als TCP en UDP).
Het gebruik van een poortnummer is verplicht. Er mogen ook
dienstnamen uit /etc/services
gebruikt worden in plaats van nummers.in | outIs op respectievelijk inkomende of uitgaande
pakketten van toepassing. De sleutelwoorden
in of out
zijn verplicht in een regel.via IFDeze parameter geeft aan op welke interface de regel
van toepassing is, waarbij IF de
exacte naam van de bedoelde interface is.setupDit is een verplicht sleutelwoord waarmee wordt
aangegeven dat er gezocht wordt naar een pakket met het
verzoek tot het opstarten van een TCP
sessie.keep-stateDit is een verplicht sleutelwoord. Als er een pakket
op een regel met keep-state
van toepassing is, dan wordt er door de firewall een
dynamische regel gemaakt die bi-directioneel
verkeer zal toestaan tussen bron en bestemming en de
bijbehorende poorten voor hetzelfde protocol.limit {bron-adr | bron-poort |
best-adr | best-poort}De firewall staat maar N
verbindingen toe met dezelfde groep parameters uit een
regel. Er kunnen één of meer van de
parameters bron- of bestemmingsadres en bron- en
bestemmingspoort gebruikt worden.
limit en
keep-state kunnen niet in
dezelfde regel gebruikt worden. De optie
limit geeft dezelfde mogelijkheden
als keep-state en voegt daar
zijn eigen mogelijkheden aan toe.Regeloptie statefulIPFWstateful filterenBij stateful filteren wordt verkeer bekeken als
bi-directioneel verkeer dat samen een sessie vormt.
Het heeft de mogelijkheid om te bepalen of de sessie
tussen de zender en de ontvanger op de juiste wijze
voortgaat. Alle pakketten die niet precies in de
verwachting van een sessie passen worden automatisch als
fout geblokkeerd.De optie check-state wordt gebruikt
om aan te geven waar IPFW-regels tegen de mogelijkheden
voor dynamische regels gehouden moeten worden. Als er
een passende regel bij een pakket wordt gevonden, dan kan
dat pakket de firewall verlaten en wordt een nieuwe regel
gemaakt voor het volgende pakket dat wordt verwacht in de
sessie. Als er geen regel van toepassing is op het pakket,
dan wordt de volgende regel in de groep regels
getest.De mogelijkheden voor dynamische regels zijn kwetsbaar
voor een aanval die SYN-flood heet, waarmee wordt
geprobeerd een zeer groot aantal regels aan te laten maken.
Om deze aanval tegen te gaan, is de optie
limit beschikbaar. Met deze
optie kan het maximaal aantal simultane sessies geregeld
worden op basis van bron en bestemmingsvelden. Als het
aantal sessies gelijk aan het maximale aantal sessies is,
wordt een pakket voor een nieuwe sessie geweigerd.Firewallberichten loggenIPFWloggenDe voordelen van loggen zijn duidelijk. Het biedt de
mogelijkheid om na het feit informatie na te zien als:
welke pakketten heeft de firewall laten vallen, waar kwamen
ze vandaan en waar gingen ze heen. Dit zijn allemaal
voordelen als het gaat om uitvinden waar een aanvaller
vandaan komt en wat hij heeft geprobeerd.Zelfs als logging is ingeschakeld logt IPFW nog niets
uit zichzelf. De beheerder van de firewall beslist welke
actieve regels iets weg moeten schrijven door het
sleutelwoord log aan die regels toe
te voegen. Gewoonlijk worden alleen
deny-regels gelogd. Dit geldt
bijvoorbeeld voor de deny-regel
voor inkomende ICMP pings. Het is
gebruikelijk om de standaardregel ipfw default deny
everything te dupliceren, daar log in op
te nemen, en deze als laatste in de verzameling met regels te
plaatsen. Zo zijn alle pakketten te zien die niet voldeden
aan ook maar één regel.Loggen heeft ook mogelijke nadelen. Het is mogelijk om
te veel te loggen en dan om te komen in logboekgegevens
die uiteindelijk een schijf kunnen vullen. Een DoS aanval
om een schijf met logs te vullen is een van de oudst bekende
typen DoS aanvallen. Logberichten van de firewall worden
niet alleen naar syslogd geschreven, maar
ook op het root console getoond waar ze snel
erg vervelend kunnen worden.De kerneloptie
IPFIREWALL_VERBOSE_LIMIT=5 beperkt het
aantal opeenvolgende berichten dat naar &man.syslogd.8;
wordt geschreven voor één specifieke regel.
Als deze optie is ingeschakeld, worden in dit geval
maximaal vijf berichten voor dezelfde regel gemeld. Als er
meer berichten op dezelfde regel zouden zijn, zou dat als
volgt aan syslogd gemeld worden:last message repeated 45 timesStandaard worden alle gelogde pakketten weggeschreven
naar /var/log/security, wat is
ingesteld in /etc/syslog.conf.Regelscript bouwenDe meeste ervaren gebruikers van IPFW maken een bestand
waarin de regels staan en stellen dat zo op dat het als
script uitgevoerd kan worden. Het grootste voordeel van
deze methode is dat de firewallregels allemaal vervangen
kunnen worden zonder dat het systeem opnieuw gestart moet worden.
Deze methode is ook erg geschikt voor het testen van regels
omdat de procedure zo vaak als nodig uitgevoerd kan worden.
Omdat het een script is, kan er gebruik gemaakt worden van
substitutie zodat veel gebruikte waarden verduidelijkt
en in meerdere regels toegepast kunnen worden. In het volgende
voorbeeld wordt hier gebruik van gemaakt.De syntaxis die in het script wordt gebruikt is
compatibel met de shells &man.sh.1;, &man.csh.1; en &man.tcsh.1;.
Velden waarvoor substitutie van toepassing is worden vooraf gegaan
door het dollarteken $. Definities worden niet
vooraf gegaan door het voorvoegsel $. De waarden
van een substitutie moet omsloten worden door "dubbele
aanhalingstekens".Een bestand met regels kan als volgt beginnen:############### begin voorbeeldscript ipfw regels ##############
#
ipfw -q -f flush # Verwijder alle bestaande regels.
# Stel standaarden in.
oif="tun0" # uitgaande interface.
odns="192.0.2.11" # IP adres DNS server ISP.
cmd="ipfw -q add " # Voorvoegsel voor regel.
ks="keep-state" # Te lui om iedere keer in te typen.
$cmd 00500 check-state
$cmd 00502 deny all from any to any frag
$cmd 00501 deny tcp from any to any established
$cmd 00600 allow tcp from any to any 80 out via $oif setup $ks
$cmd 00610 allow tcp from any to $odns 53 out via $oif setup $ks
$cmd 00611 allow udp from any to $odns 53 out via $oif $ks
################### einde voorbeeldscript ipfw regels ###########Dat is alles. De feitelijke functie van de regels is
in dit voorbeeld van ondergeschikt belang. Dit was slechts
een voorbeeld om het gebruik van substitutie te
illustreren.Als het bovenstaande voorbeeld de inhoud van
/etc/ipfw.rules was, dan kon het
herladen worden met het volgende commando:&prompt.root; sh /etc/ipfw.rules/etc/ipfw.rules zou overal kunnen
staan met iedere gewenste naam.Wat in het bovenstaande voorbeeld met een bestand is
gerealiseerd, kan ook met de hand:&prompt.root; ipfw -q -f flush
&prompt.root; ipfw -q add 00500 check-state
&prompt.root; ipfw -q add 00502 deny all from any to any frag
&prompt.root; ipfw -q add 00501 deny tcp from any to any established
&prompt.root; ipfw -q add 00600 allow tcp from any to any 80 out via tun0 setup keep-state
&prompt.root; ipfw -q add 00610 allow tcp from any to 192.0.2.11 53 out via tun0 setup keep-state
&prompt.root; ipfw -q add 00611 allow udp from any to 192.0.2.11 53 out via tun0 keep-stateVerzameling van stateful regelsDe volgende verzameling van regels, waarin geen gebruik gemaakt
wordt van NAT, is een voorbeeld van hoe
een erg veilige inclusieve firewall kan worden opgezet.
Een inclusieve firewall laat alleen diensten toe waarvoor
pass regels van toepassing zijn en
blokkeert al het andere verkeer. Firewalls die ontworpen zijn om
hele netwerksegmenten te beschermen hebben tenminste twee interfaces
waarvoor regels moeten zijn die de firewall in staat stellen zijn
werk te doen.Alle &unix; systemen en dus ook &os; zijn zo ontworpen
dat ze voor interne communicatie de interface
lo0 en IP adres
127.0.0.1 gebruiken. De
firewall moet dit interne verkeer gewoon doorgang laten
vinden.Voor de interface die is verbonden met het publieke
Internet worden regels gemaakt waarmee sessies naar het
Internet mogelijk gemaakt worden en toegang wordt gegeven
voor pakketten die uit die sessies terug komen. Dit kan
de gebruikers-PPP-interface
tun0 zijn of de
netwerkkaart die is verbonden met een xDSL of
kabelmodem.In gevallen dat er meer dan één
netwerkkaart is aangesloten op het private netwerk achter
de firewall, moeten er op de firewall-regels zijn om het
verkeer tussen die interfaces vrije doorgang te
geven.De regels worden opgedeeld in drie onderdelen: alle
interfaces met vrije doorgang, uitgaand op publieke
interfaces en inkomend op publieke interfaces.De volgorde van de regels in iedere sectie voor
publieke interfaces moet zo zijn dat de regels die het
meest gebruikt worden vóór de regels staan
die minder vaak gebruikt worden. De laatste regel van een
onderdeel geeft aan dat al het overige verkeer op die
interface in die richting geblokkeerd en gelogd moet
worden.In het onderdeel Uitgaand van de volgende verzameling regels staan
alleen regels met allow die parameters bevatten om
individuele diensten beschikbaar te maken die publieke toegang
tot Internet mogen hebben Al die regels moeten gebruik maken van de
opties proto, port,
in/out, via
en keep-state. De regels met
proto tcp maken ook gebruik van
setup om te bekijken of het een
pakket betreft voor het opzetten van een sessie om de
stateful functionaliteit aan te sturen.In het onderdeel Inkomend staan als eerste alle regels voor het
blokkeren van ongewenste pakketten, om twee redenen.
Als eerste kan het zo zijn dat kwaadaardige pakketten gedeeltelijk
overeenkomen met legitiem verkeer. Deze regels moeten worden
geblokkeerd in plaats van te worden binnengelaten, gebaseerd op hun
gedeeltelijke overeenkomst met allow-regels.
De tweede reden is dat nu ongewenste pakketten
die vaak voorkomen en die bij voorkeur niet in de logboeken
voorkomen niet meer van toepassing zijn op de laatste regel
van het onderdeel waarin ze zouden worden gelogd. Met de
laatste regel van dit onderdeel worden alle overige
pakketten geblokkeerd en gelogd en ze kunnen
bewijsmateriaal zijn in een zaak tegen iemand die heeft
geprobeerd een systeem aan te vallen.Iets waarop u ook moet letten is dat voor al het verkeer dat wordt
geweigerd geen antwoord wordt gestuurd. Die pakketten verdwijnen
gewoon. Zo weet een aanvaller niet of een pakket het doelsysteem wel
heeft bereikt. Zo kan een aanvaller geen informatie
verzamelen over een systeem: hoe minder informatie er over
een systeem beschikbaar is, hoe veiliger het is. Als er
pakketten gelogd worden met een onbekend poortnummer, dan is de
functie van dat poortnummer na te zoeken in
/etc/services of op .
Op de volgende link worden poortnummers van Trojans
beschreven: .Voorbeeld van een set inclusieve regelsHet volgende voorbeeld is een complete inclusieve verzameling van
regels die geen gebruik maakt van NAT.
Deze verzameling van regels is veilig om deze regels op uw eigen
systemen te gebruiken. Dit kan door commentaar te maken van een
pass-regel voor een dienst die niet gewenst is.
Logberichten die niet gewenst zijn, zijn uit te sluiten door een
deny-regel toe te voegen aan het onderdeel
Inkomend. Voor de onderstaande regels dient de interfacenaam
dc0 in iedere regel vervangen te worden door
de interfacenaam van de netwerkkaart in het systeem die met
het publieke Internet is verbonden. Voor gebruikers van
PPP zou dat tun0
zijn.Er zit een merkbare structuur in het gebruik van deze
regels:Alle regels die een verzoek zijn voor het opzetten van een
sessie gebruiken keep-state.Alle diensten die vanaf Internet bereikbaar zijn gebruiken de
optie limit om flooding te
voorkomen.Alle regels gebruiken in of
out om de richting aan te geven.Alle regels gebruiken viainterfacenaam om aan te geven op welke
interface de regel van toepassing is.De volgende regels zouden in
/etc/ipfw.rules kunnen staan:################ Begin bestand met IPFW regels ###############################
# Verwijder eerst de bestaande regels.
ipfw -q -f flush
# Stel commando voorvoegsel in.
cmd="ipfw -q add"
pif="dc0" # Interfacenaam van NIC die verbinding
# met het publieke Internet heeft.
#################################################################
# Geen beperkingen op de interface aan de LAN kant. Alleen nodig
# als er een LAN is. Wijzig xl0 naar de gebruikte interfacenaam.
#################################################################
#$cmd 00005 allow all from any to any via xl0
#################################################################
# Geen beperkingen op de loopback interface.
#################################################################
$cmd 00010 allow all from any to any via lo0
#################################################################
# Sta het pakket toe als het aan de tabel met dynamische regels
# was toegevoegd met een 'allow keep-state' commando.
#################################################################
$cmd 00015 check-state
#################################################################
# Interface aan het publieke Internet (onderdeel Uitgaand).
# Inspecteer verzoeken om een sessie te starten van achter de
# firewall op het private netwerk of vanaf de server zelf naar
# het publieke Internet.
#################################################################
# Geef toegang tot de DNS server van de ISP.
# x.x.x.x moet het IP adres van de DNS van de ISP zijn.
# Dupliceer deze regels als een ISP meerdere DNS servers heeft.
# Haal het IP adres evt. uit /etc/resolv.conf
$cmd 00110 allow tcp from any to x.x.x.x 53 out via $pif setup keep-state
$cmd 00111 allow udp from any to x.x.x.x 53 out via $pif keep-state
# Geef toegang tot de DHCP server van de ISP voor kabel- en
# xDSL-netwerken. Deze regel is niet nodig als gebruik gemaakt worden
# van PPP naar het publieke Internet. In dat geval kan de hele groep
# verwijderd worden. Gebruik de volgende regel en controleer het
# logboek voor het IP adres. Wijzig dan het IP adres in de regel
# commentaar hieronder en verwijder de eerste regel.
$cmd 00120 allow log udp from any to any 67 out via $pif keep-state
#$cmd 00120 allow udp from any to x.x.x.x 67 out via $pif keep-state
# Sta niet beveiligd www verkeer toe.
$cmd 00200 allow tcp from any to any 80 out via $pif setup keep-state
# Sta beveiligd www verkeer over TLS SSL toe.
$cmd 00220 allow tcp from any to any 443 out via $pif setup keep-state
# Sta het verzenden en ontvangen van e-mail toe.
$cmd 00230 allow tcp from any to any 25 out via $pif setup keep-state
$cmd 00231 allow tcp from any to any 110 out via $pif setup keep-state
# Sta de FreeBSD CVSUP functie toe voor uid root.
$cmd 00240 allow tcp from me to any out via $pif setup keep-state uid root
# Sta ping toe.
$cmd 00250 allow icmp from any to any out via $pif keep-state
# Sta Time toe naar buiten.
$cmd 00260 allow tcp from any to any 37 out via $pif setup keep-state
# Sta NNTP nieuws toe naar buiten.
$cmd 00270 allow tcp from any to any 119 out via $pif setup keep-state
# Sta beveiligde FTP, Telnet en SCP toe naar buiten.
# Deze functie maakt gebruik van SSH (secure shell).
$cmd 00280 allow tcp from any to any 22 out via $pif setup keep-state
# Sta whois toe naar buiten.
$cmd 00290 allow tcp from any to any 43 out via $pif setup keep-state
# Blokkeer en log al het andere dat probeert buiten te komen.
# Deze regel dwingt de 'block all' logica af.
$cmd 00299 deny log all from any to any out via $pif
#################################################################
# Interface aan het publieke Internet (onderdeel Inkomend).
# Inspecteert pakketten die van het publieke Internet komen
# met als bestemming de host zelf of het private netwerk.
#################################################################
# Blokkeer al het verkeer voor niet-routeerbare of gereserveerde
# adresreeksen.
$cmd 00300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 privaat IP
$cmd 00301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 privaat IP
$cmd 00302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 privaat IP
$cmd 00303 deny all from 127.0.0.0/8 to any in via $pif #loopback
$cmd 00304 deny all from 0.0.0.0/8 to any in via $pif #loopback
$cmd 00305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config
$cmd 00306 deny all from 192.0.2.0/24 to any in via $pif #gereserveerd voor documentatie
$cmd 00307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster interconnect
$cmd 00308 deny all from 224.0.0.0/3 to any in via $pif #Klasse D & E multicast
# Blokkeer publieke pings.
$cmd 00310 deny icmp from any to any in via $pif
# Blokkeer ident.
$cmd 00315 deny tcp from any to any 113 in via $pif
# Blokkeer alle Netbios diensten. 137=naam, 138=datagram, 139=sessie.
# Netbios is de Windows® bestandsdeeldienst.
# Blokkeer Windows hosts2 name server verzoeken 81.
$cmd 00320 deny tcp from any to any 137 in via $pif
$cmd 00321 deny tcp from any to any 138 in via $pif
$cmd 00322 deny tcp from any to any 139 in via $pif
$cmd 00323 deny tcp from any to any 81 in via $pif
# Blokkeer gefragmenteerde pakketten.
$cmd 00330 deny all from any to any frag in via $pif
# Blokkeer ACK pakketten die niet in de tabel met dynamische regels
# staan.
$cmd 00332 deny tcp from any to any established in via $pif
# Geef toegang tot de DHCP server van de ISP voor kabel- en
# xDSL-netwerken. Deze regel is niet nodig als gebruik gemaakt worden
# van PPP naar het publieke Internet. In dat geval kan de hele groep
# verwijderd worden. Hier wordt hetzelfde IP adres gebruikt als in de
# sectie voor Uitgaand verkeer.
#$cmd 00360 allow udp from any to x.x.x.x 67 in via $pif keep-state
# Sta inkomend webverkeer toe omdat er een Apache server draait.
$cmd 00400 allow tcp from any to me 80 in via $pif setup limit src-addr 2
# Sta beveiligde FTP, telnet en SCP toe vanaf Internet.
$cmd 00410 allow tcp from any to me 22 in via $pif setup limit src-addr 2
# Sta niet beveiligde telnet sessie toe vanaf het publieke Internet.
# Dit heeft het label ``niet veilig'' omdat gebruikersnaam en
# wachtwoord als platte tekst over Internet gaan. Als er geen telnet
# server draait, hoeft deze regel niet actief te zijn.
$cmd 00420 allow tcp from any to me 23 in via $pif setup limit src-addr 2
# Weiger en log alle niet toegestane inkomende verbindingen van buiten.
$cmd 00499 deny log all from any to any in via $pif
# Al het andere verkeer wordt standaard geblokkeerd. Weiger en log alle
# pakketten die tot hier zijn gekomen om te bekijken welke het waren.
$cmd 00999 deny log all from any to any
################ Einde bestand met IPFW regels ########################Voorbeeld NAT en stateful
regelsNATen IPFWOm NAT met IPFW te gebruiken moeten
een extra aantal instellingen gemaakt worden. In het
instellingenbestand voor de kernel moet option
IPDIVERT toegevoegd worden aan de andere opties van
IPFIREWALL.Naast de normale IPFW opties in
/etc/rc.conf zijn de volgende
nodig:natd_enable="YES" # Schakel NATD in
natd_interface="rl0" # interfacenaam voor de publieke Internet NIC
natd_flags="-dynamic -m" # -m = behoud poortnummers als mogelijkStateful regels samen met de regel
divert natd (Network Address Translation) gebruiken
maakt het schrijven van regels veel gecompliceerder. De plaats
van de regels met check-state
en divert natd zijn van kritiek
belang. De logica bestaat niet langer uit het eenvoudigweg
van boven naar beneden doorwerken van de regels. Er wordt
dan ook een nieuw type actie gebruik:
skipto. Bij het gebruik van
skipto is het verplicht iedere regel
te nummeren zodat duidelijk is waar een
skipto precies heen springt.Hieronder staat een groep regels zonder commentaar
waarin een manier om pakketten door de groep regels te
leiden wordt aangegeven.De verwerking begint met de eerste regel en er wordt
steeds een volgende regel gecontroleerd tot het einde
wordt bereikt of totdat een regel op het gecontroleerde
pakket van toepassing is, en het pakket uit de firewall wordt
vrijgelaten. In het voorbeeld zijn de regels 100, 101, 450, 500, en
510 van belang. Die regels regelen de vertaling van inkomende en
uitgaande pakketten zodat er in de tabel met de
dynamische keep-state-regels
altijd het private IP-adres staat.
Daarnaast is het van belang op te merken dat er in alle
allow- en deny-regels de
richting van het pakket wordt gecontroleerd (inkomend of uitgaand) en
over welke interface het pakket gaat. Merk ook op dat alle
uitgaande verzoeken voor het starten van een sessie met
een skipto naar regel 500 gaan voor
NAT.Stel dat een gebruiker zijn webbrowser gebruikt om een
webpagina op te halen. Webpagina's worden over poort 80 verzonden.
Er komt een pakket de firewall binnen dat niet past bij regel 100
omdat het naar buiten gaat en niet naar binnen. Het komt voorbij
regel 101 omdat dit het eerste pakket is en er dus nog niets over in
de dynamische keep-state tabel staat. Als het pakket bij 125 aankomt
blijkt het te passen bij die regel. Het gaat naar buiten
door de interface aan het publieke Internet. Het pakket
heeft dan nog steeds het bron-IP-adres
van het private LAN. Als blijkt dat deze regel geldt, dan
gebeuren er twee dingen: door
keep-state wordt er een regel
in de dynamische keep-state tabel gezet en wordt de
aangegeven actie uitgevoerd. De actie is onderdeel van de
informatie uit de dynamische tabel. In dit geval is het
skipto rule 500. In regel 500 wordt
NAT op het IP-adres
van het pakket toegepast en dan kan het weg. Dit
is van groot belang. Dit pakket komt aan op zijn
bestemming en als er een pakket als antwoord terug komt, dan begint de
verwerking van het antwoordpakket weer van voor af aan. Nu voldoet
het aan regel 100 en dus wordt het bestemmingsadres
vertaald naar het bijbehorende IP-adres
op het LAN. Daarna past het bij de
check-state-regel en wordt een
vermelding in de tabel gevonden wat betekent dat er een
bestaande sessie is en wordt het doorgelaten naar het LAN.
Het gaat dan naar de PC op het LAN die als eerste een
pakket heeft verzonden en die verstuurt een nieuw pakket
met de vraag om een volgend segment met gegevens naar de
server. Nu blijkt bij controle van de
check-state-regel dat die op
het pakket van toepassing moet zijn en er staat een
vermelding in de tabel voor uitgaand verkeer. Daarom wordt
de bijbehorende actie skipto rule 500
uitgevoerd. Het pakket springt naar regel 500, er wordt
NAT op toegepast en het kan zijn weg
vervolgen.Wat betreft binnenkomende pakketten wordt alles dat
onderdeel is van een bestaande sessie automatisch
afgehandeld door de
check-state-regel en de correct
geplaatste divert natd-regels. Nu hoeven
alleen de foute pakketten nog geweigerd te worden en moeten
de inkomende geauthoriseerde diensten doorgelaten worden. In
dit geval draait er een Apache server op de firewall-machine
die vanaf Internet bereikbaar moet zijn. Het nieuwe
inkomende pakket past bij regel 100 en het
IP-adres wordt aangepast aan het interne
IP-adres van de firewall-machine. Dat
pakket wordt dan gecontroleerd op alle ongewenste
eigenschappen en komt uiteindelijk aan bij regel 425 die
van toepassing blijkt te zijn. In dat geval kunnen er twee
dingen gebeuren: de pakketregel wordt in de dynamische
keep-state tabel gezet, maar nu wordt het aantal nieuwe
sessies dat van het bron IP-adres komt
gelimiteerd tot twee. Dit is een bescherming tegen DoS-aanvallen
op de dienst die op dat poortnummer wordt aangeboden. De actie is
allow, dus het pakket wordt tot het LAN toegelaten.
Voor het pakket dat als antwoord wordt verstuurd herkent de
check-state regel dat het
pakket bij een bestaande sessie hoort. Het stuurt het naar regel
500 voor NAT en stuurt het via de
uitgaande interface weg.Voorbeeld Set Regels #1:#!/bin/sh
cmd="ipfw -q add"
skip="skipto 500"
pif=rl0
ks="keep-state"
good_tcpo="22,25,37,43,53,80,443,110,119"
ipfw -q -f flush
$cmd 002 allow all from any to any via xl0 # exclude LAN traffic
$cmd 003 allow all from any to any via lo0 # exclude loopback traffic
$cmd 100 divert natd ip from any to any in via $pif
$cmd 101 check-state
# Toegestaan uitgaand verkeer.
$cmd 120 $skip udp from any to xx.168.240.2 53 out via $pif $ks
$cmd 121 $skip udp from any to xx.168.240.5 53 out via $pif $ks
$cmd 125 $skip tcp from any to any $good_tcpo out via $pif setup $ks
$cmd 130 $skip icmp from any to any out via $pif $ks
$cmd 135 $skip udp from any to any 123 out via $pif $ks
# Blokkeer al het verkeer voor niet-routeerbare of gereserveerde
# adresreeksen.
$cmd 300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 privaat IP
$cmd 301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 privaat IP
$cmd 302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 privaat IP
$cmd 303 deny all from 127.0.0.0/8 to any in via $pif #loopback
$cmd 304 deny all from 0.0.0.0/8 to any in via $pif #loopback
$cmd 305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config
$cmd 306 deny all from 192.0.2.0/24 to any in via $pif #gereserveerd voor documentatie
$cmd 307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster
$cmd 308 deny all from 224.0.0.0/3 to any in via $pif #Klasse D & E multicast
# Toegestaan inkomend verkeer.
$cmd 400 allow udp from xx.70.207.54 to any 68 in $ks
$cmd 420 allow tcp from any to me 80 in via $pif setup limit src-addr 1
$cmd 450 deny log ip from any to any
# Dit is de 'skipto' locatie voor de uitgaande stateful regels.
$cmd 500 divert natd ip from any to any out via $pif
$cmd 510 allow ip from any to any
######################## Einde regels ##################Het volgende voorbeeld doet vrijwel hetzelfde als het
bovenstaande, maar volgt een zelfdocumenterende stijl voor
het opstellen van regels en commentaar waardoor minder
ervaren gebruikers beter kunnen begrijpen wat de regels
doen.Voorbeeld Set Regels #2:#!/bin/sh
################ Begin bestand met IPFW regels ###############################
# Verwijder eerst de bestaande regels.
ipfw -q -f flush
# Stel commando voorvoegsel in.
cmd="ipfw -q add"
skip="skipto 800"
pif="rl0" # Interfacenaam van NIC die verbinding
# met het publieke Internet heeft.
#################################################################
# Geen beperkingen op de interface aan de LAN kant.
# Wijzig xl0 naar de gebruikte interfacenaam.
#################################################################
$cmd 005 allow all from any to any via xl0
#################################################################
# Geen beperkingen op de loopback interface.
#################################################################
$cmd 010 allow all from any to any via lo0
#################################################################
# Controleer of pakket inkomend is. NAT in dat geval.
#################################################################
$cmd 014 divert natd ip from any to any in via $pif
#################################################################
# Sta het pakket toe als het aan de tabel met dynamische regels
# was toegevoegd met een 'allow keep-state' commando.
#################################################################
$cmd 015 check-state
#################################################################
# Interface aan het publieke Internet (onderdeel Uitgaand).
# Inspecteer verzoeken om een sessie te starten van achter de
# firewall op het private netwerk of vanaf de server zelf naar
# het publieke Internet.
#################################################################
# Geef toegang tot de DNS server van de ISP.
# x.x.x.x moet het IP adres van de DNS van de ISP zijn.
# Dupliceer deze regels als een ISP meerdere DNS servers heeft.
# Haal het IP adres evt. uit /etc/resolv.conf
$cmd 020 $skip tcp from any to x.x.x.x 53 out via $pif setup keep-state
# Geef toegang tot de DHCP server van de ISP voor kabel en xDSL.
$cmd 030 $skip udp from any to x.x.x.x 67 out via $pif keep-state
# Sta niet beveiligd www verkeer toe.
$cmd 040 $skip tcp from any to any 80 out via $pif setup keep-state
# Sta beveiligd www verkeer over TLS SSL toe.
$cmd 050 $skip tcp from any to any 443 out via $pif setup keep-state
# Sta het verzenden en ontvangen van e-mail toe.
$cmd 060 $skip tcp from any to any 25 out via $pif setup keep-state
$cmd 061 $skip tcp from any to any 110 out via $pif setup keep-state
# Sta de FreeBSD CVSUP functie toe voor uid root.
$cmd 070 $skip tcp from me to any out via $pif setup keep-state uid root
# Sta ping toe naar het publieke Internet.
$cmd 080 $skip icmp from any to any out via $pif keep-state
# Sta Time toe.
$cmd 090 $skip tcp from any to any 37 out via $pif setup keep-state
# Sta NNTP nieuws toe.
$cmd 100 $skip tcp from any to any 119 out via $pif setup keep-state
# Sta beveiligde FTP, Telnet en SCP toe.
# Deze functie maakt gebruik van SSH (secure shell).
$cmd 110 $skip tcp from any to any 22 out via $pif setup keep-state
# Sta whois toe.
$cmd 120 $skip tcp from any to any 43 out via $pif setup keep-state
# Sta NPT tijdserver toe.
$cmd 130 $skip udp from any to any 123 out via $pif keep-state
#################################################################
# Interface aan het publieke Internet (onderdeel Inkomend).
# Inspecteert pakketten die van het publieke Internet komen met
# als bestemming deze gateway-server zelf of het private netwerk.
#################################################################
# Blokkeer al het verkeer voor niet-routeerbare of gereserveerde
# adresreeksen.
$cmd 300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 privaat IP
$cmd 301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 privaat IP
$cmd 302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 privaat IP
$cmd 303 deny all from 127.0.0.0/8 to any in via $pif #loopback
$cmd 304 deny all from 0.0.0.0/8 to any in via $pif #loopback
$cmd 305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config
$cmd 306 deny all from 192.0.2.0/24 to any in via $pif #gereserveerd voor documentatie
$cmd 307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster
$cmd 308 deny all from 224.0.0.0/3 to any in via $pif #Klasse D & E multicast
# Blokkeer ident.
$cmd 315 deny tcp from any to any 113 in via $pif
# Blokkeer alle Netbios diensten. 137=naam, 138=datagram, 139=sessie.
# Netbios is de Windows® bestandsdeeldienst.
# Blokkeer Windows hosts2 name server verzoeken 81.
$cmd 320 deny tcp from any to any 137 in via $pif
$cmd 321 deny tcp from any to any 138 in via $pif
$cmd 322 deny tcp from any to any 139 in via $pif
$cmd 323 deny tcp from any to any 81 in via $pif
# Blokkeer gefragmenteerde pakketten.
$cmd 330 deny all from any to any frag in via $pif
# Blokkeer ACK pakketten die niet in de tabel met dynamische regels
# staan.
$cmd 332 deny tcp from any to any established in via $pif
# Geef toegang tot de DHCP server van de ISP voor kabel- en
# xDSL-netwerken. Deze regel is niet nodig als gebruik gemaakt worden
# van PPP naar het publieke Internet. In dat geval kan de hele groep
# verwijderd worden. Hier wordt hetzelfde IP adres gebruikt als in de
# sectie voor Uitgaand verkeer.
$cmd 360 allow udp from x.x.x.x to any 68 in via $pif keep-state
# Sta inkomend webverkeer toe omdat er een Apache server draait.
$cmd 370 allow tcp from any to me 80 in via $pif setup limit src-addr 2
# Sta beveiligde FTP, telnet en SCP toe vanaf Internet.
$cmd 380 allow tcp from any to me 22 in via $pif setup limit src-addr 2
# Sta niet beveiligde telnet sessie toe vanaf het publieke Internet.
# Dit heeft het label ``niet veilig'' omdat gebruikersnaam en
# wachtwoord als platte tekst over Internet gaan. Als er geen telnet
# server draait, hoeft deze regel niet actief te zijn.
#$cmd 390 allow tcp from any to me 23 in via $pif setup limit src-addr 2
# Weiger en log alle niet toegestane inkomende verbindingen vanaf het
# publieke Internet.
$cmd 400 deny log all from any to any in via $pif
# Weiger en log alle niet toegestane uitgaande verbindingen naar
# Internet.
$cmd 450 deny log all from any to any out via $pif
# Dit is de 'skipto' locatie voor de uitgaande stateful regels
$cmd 800 divert natd ip from any to any out via $pif
$cmd 801 allow ip from any to any
# Al het andere verkeer wordt standaard geblokkeerd. Weiger en log alle
# pakketten die tot hier zijn gekomen om te bekijken welke het waren.
$cmd 999 deny log all from any to any
################ Einde bestand met IPFW regels ########################
diff --git a/ru_RU.KOI8-R/books/porters-handbook/book.xml b/ru_RU.KOI8-R/books/porters-handbook/book.xml
index a97cb079ec..43500136bd 100644
--- a/ru_RU.KOI8-R/books/porters-handbook/book.xml
+++ b/ru_RU.KOI8-R/books/porters-handbook/book.xml
@@ -1,16167 +1,16165 @@
òÕËÏ×ÏÄÓÔ×Ï FreeBSD ÐÏ ÓÏÚÄÁÎÉÀ ÐÏÒÔÏ×The FreeBSD Documentation ProjectáÐÒÅÌØ 20002000200120022003200420052006200720082009201020112012
The FreeBSD Documentation Project
&trademarks;
&legalnotice;
$FreeBSD$÷×ÅÄÅÎÉÅëÏÌÌÅËÃÉÑ ÐÏÒÔÏ× FreeBSD Ñ×ÌÑÅÔÓÑ ÓÐÏÓÏÂÏÍ, ÉÓÐÏÌØÚÕÅÍÙÍ
ÐÒÁËÔÉÞÅÓËÉ ËÁÖÄÙÍ ÄÌÑ ÕÓÔÁÎÏ×ËÉ ÐÒÉÌÏÖÅÎÉÊ ("ÐÏÒÔÏ×") ÎÁ FreeBSD.
ëÁË É ÐÏÞÔÉ ×Ó£ ÏÓÔÁÌØÎÏÅ ×Ï FreeBSD, ÜÔÁ ÓÉÓÔÅÍÁ × ÏÓÎÏ×ÎÏÍ Ñ×ÌÑÅÔÓÑ
ÄÏÂÒÏ×ÏÌØÎÏ ÐÏÄÄÅÒÖÉ×ÁÅÍÙÍ ÎÁÞÉÎÁÎÉÅÍ. ÷ÁÖÎÏ ÉÍÅÔØ ÜÔÏ × ×ÉÄÕ ÐÒÉ
ÞÔÅÎÉÉ ÄÁÎÎÏÇÏ ÄÏËÕÍÅÎÔÁ.÷Ï FreeBSD ÌÀÂÏÊ ÍÏÖÅÔ ÐÒÉÓÌÁÔØ ÎÏ×ÙÊ ÐÏÒÔ ÌÉÂÏ ÉÚßÑ×ÉÔØ ÖÅÌÁÎÉÅ
ÐÏÄÄÅÒÖÉ×ÁÔØ ÓÕÝÅÓÔ×ÕÀÝÉÊ ÐÏÒÔ, ÅÓÌÉ ÅÇÏ ÎÉËÔÏ ÅÝ£ ÎÉËÔÏ ÎÅ
ÐÏÄÄÅÒÖÉ×ÁÅÔ—×ÁÍ ÎÅ ÎÕÖÎÏ ÉÍÅÔØ ÎÉËÁËÉÈ ÏÓÏÂÙÈ ÐÒÉ×ÉÌÅÇÉÊ ÎÁ
×ÎÅÓÅÎÉÅ ÉÚÍÅÎÅÎÉÊ, ÞÔÏÂÙ ÜÔÏ ÄÅÌÁÔØ.ëÁË ÓÁÍÏÍÕ ÓÄÅÌÁÔØ ÎÏ×ÙÊ ÐÏÒÔéÔÁË, ×Ù ÉÎÔÅÒÅÓÕÅÔÅÓØ, ËÁË ÓÏÚÄÁÔØ ÓÏÂÓÔ×ÅÎÎÙÊ ÐÏÒÔ ÉÌÉ
ÏÂÎÏ×ÉÔØ ÓÕÝÅÓÔ×ÕÀÝÉÊ? ÷ÅÌÉËÏÌÅÐÎÏ!îÉÖÅ ÎÁÈÏÄÑÔÓÑ ÎÅËÏÔÏÒÙÅ ÕËÁÚÁÎÉÑ ÐÏ ÓÏÚÄÁÎÉÀ ÎÏ×ÏÇÏ ÐÏÒÔÁ ÄÌÑ
FreeBSD. åÓÌÉ ×Ù ÈÏÔÉÔÅ ÏÂÎÏ×ÉÔØ ÓÕÝÅÓÔ×ÕÀÝÉÊ ÐÏÒÔ, ×Ù ÄÏÌÖÎÙ
ÐÒÏÞÅÓÔØ ÉÈ, Á ÚÁÔÅÍ .åÓÌÉ ÜÔÏÔ ÄÏËÕÍÅÎÔ ÎÅÄÏÓÔÁÔÏÞÎÏ ÐÏÄÒÏÂÅÎ, ×Ù ÄÏÌÖÎÙ ÏÂÒÁÔÉÔØÓÑ Ë
ÆÁÊÌÕ /usr/ports/Mk/bsd.port.mk, ËÏÔÏÒÙÊ
×ËÌÀÞÁÅÔÓÑ × make-ÆÁÊÌ ËÁÖÄÏÇÏ ÐÏÒÔÁ. ïÎ ÈÏÒÏÛÏ ÐÒÏËÏÍÍÅÎÔÉÒÏ×ÁÎ, É
ÄÁÖÅ ÅÓÌÉ ×Ù ÎÅ ÚÁÎÉÍÁÅÔÅÓØ ÈÁËÉÎÇÏÍ make-ÆÁÊÌÏ× ËÁÖÄÏÄÎÅ×ÎÏ, ÉÚ ÎÅÇÏ
×Ù ÓÍÏÖÅÔÅ ÕÚÎÁÔØ ÍÎÏÇÏ ÎÏ×ÏÇÏ. ëÒÏÍÅ ÔÏÇÏ, ËÏÎËÒÅÔÎÙÅ ×ÏÐÒÏÓÙ ÍÏÖÎÏ
ÚÁÄÁÔØ, ÐÏÓÌÁ× ÐÉÓØÍÏ ÎÁ ÁÄÒÅÓ &a.ports;.ôÏÌØËÏ ÞÁÓÔØ ÐÅÒÅÍÅÎÎÙÈ
(VAR), ËÏÔÏÒÙÅ ÍÏÇÕÔ ÂÙÔØ
ÐÅÒÅÏÐÒÅÄÅÌÅÎÙ, ÏÐÉÓÁÎÙ × ÜÔÏÍ ÄÏËÕÍÅÎÔÅ. âÏÌØÛÉÎÓÔ×Ï (ÅÓÌÉ ÎÅ ×ÓÅ)
ÏÐÉÓÁÎÙ × ÎÁÞÁÌÅ ÆÁÊÌÁ /usr/ports/Mk/bsd.port.mk;
ÏÓÔÁÌØÎÙÅ, ÓËÏÒÅÅ ×ÓÅÇÏ, ÔÏÖÅ ÔÁÍ ÏÐÉÓÁÎÙ. úÁÍÅÔØÔÅ, ÞÔÏ
× ÜÔÏÍ ÆÁÊÌÅ ÉÓÐÏÌØÚÕÅÔÓÑ ÎÅÓÔÁÎÄÁÒÔÎÁÑ ÎÁÓÔÒÏÊËÁ ÛÁÇÁ ÔÁÂÕÌÑÃÉÉ:
Emacs É Vim
ÄÏÌÖÎÙ ÒÁÓÐÏÚÎÁÔØ ÜÔÏ ÐÒÉ ÚÁÇÒÕÚËÅ ÆÁÊÌÁ. ëÁË &man.vi.1;,
ÔÁË É &man.ex.1; ÍÏÇÕÔ ÂÙÔØ ÎÁÓÔÒÏÅÎÙ ÎÁ ÉÓÐÏÌØÚÏ×ÁÎÉÅ
ÐÒÁ×ÉÌØÎÏÇÏ ÚÎÁÞÅÎÉÑ ×ÙÄÁÞÅÊ ËÏÍÁÎÄÙ :set tabstop=4
ÐÏÓÌÅ ÚÁÇÒÕÚËÉ ÆÁÊÌÁ.
éÝÅÔÅ, Ó ÞÅÇÏ ÂÙ ÎÁÞÁÔØ ÐÏÐÒÏÝÅ? ðÏÓÍÏÔÒÉÔÅ ÎÁ ÐÅÒÅÞÅÎØ ÚÁÐÒÏÛÅÎÎÙÈ
ÐÏÒÔÏ×, ÅÓÔØ ÌÉ ÔÁÍ ÔÁËÉÅ, ÎÁÄ ËÏÔÏÒÙÍÉ ×Ù ÍÏÖÅÔÅ ÒÁÂÏÔÁÔØ.
âÙÓÔÒÏÅ ÐÏÒÔÉÒÏ×ÁÎÉÅ÷ ÜÔÏÍ ÒÁÚÄÅÌÅ ÏÐÉÓÁÎÏ, ËÁË ÓÏÚÄÁÔØ ÎÏ×ÙÊ ÐÏÒÔ ÎÁ ÓËÏÒÕÀ ÒÕËÕ.
÷Ï ÍÎÏÇÉÈ ÓÌÕÞÁÑÈ ÜÔÏÇÏ ÂÙ×ÁÅÔ ÎÅ ÄÏÓÔÁÔÏÞÎÏ, ÔÁË ÞÔÏ ×ÁÍ ÎÕÖÎÏ ÂÕÄÅÔ
ÐÒÏÞÉÔÁÔØ ÄÏËÕÍÅÎÔ ÄÁÌØÛÅ.÷Ï-ÐÅÒ×ÙÈ, ÓËÁÞÁÊÔÅ ÏÒÉÇÉÎÁÌØÎÙÊ tar-ÆÁÊÌ É ÐÏÍÅÓÔÉÔÅ ÅÇÏ × ËÁÔÁÌÏÇ
DISTDIR, ËÏÔÏÒÙÊ ÐÏ ÕÍÏÌÞÁÎÉÀ ÅÓÔØ ÎÅ ÞÔÏ ÉÎÏÅ, ËÁË
/usr/ports/distfiles.úÄÅÓØ ÐÒÅÄÐÏÌÁÇÁÅÔÓÑ, ÞÔÏ ÐÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ ËÏÍÐÉÌÉÒÕÅÔÓÑ
ÂÅÚ ÐÒÏÂÌÅÍ ËÁË ÅÓÔØ, ÔÏ ÅÓÔØ ÄÌÑ ÒÁÂÏÔÙ ÐÒÉÌÏÖÅÎÉÑ ÎÁ ×ÁÛÅÊ ÓÉÓÔÅÍÅ
FreeBSD ÎÅ ÐÏÔÒÅÂÏ×ÁÌÏÓØ ÁÂÓÏÌÀÔÎÏ ÎÉËÁËÉÈ ÉÚÍÅÎÅÎÉÊ. åÓÌÉ
ÔÒÅÂÏ×ÁÌÏÓØ ÞÔÏ-ÔÏ ÉÚÍÅÎÉÔØ, ÔÏ ×ÁÍ ÐÒÉÄÅÔÓÑ ÏÂÒÁÔÉÔØÓÑ ÔÁËÖÅ É Ë
ÓÌÅÄÕÀÝÅÍÕ ÒÁÚÄÅÌÕ.óÏÚÄÁÎÉÅ ÆÁÊÌÁ MakefileíÉÎÉÍÁÌØÎÙÊ Makefile ÂÕÄÅÔ ×ÙÇÌÑÄÅÔØ
ÐÒÉÍÅÒÎÏ ÔÁË:# New ports collection makefile for: oneko
# Date created: 5 December 1994
# Whom: asami
#
# $FreeBSD$
#
PORTNAME= oneko
PORTVERSION= 1.1b
CATEGORIES= games
MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
MAINTAINER= asami@FreeBSD.org
MAN1= oneko.1
MANCOMPRESSED= yes
USE_IMAKE= yes
.include <bsd.port.mk>ðÏÓÍÏÔÒÉÍ, ÓÍÏÖÅÔÅ ÌÉ ×Ù ÅÇÏ ÐÏÎÑÔØ. îÅ ÏÂÒÁÝÁÊÔÅ ×ÎÉÍÁÎÉÅ ÎÁ
ÓÏÄÅÒÖÉÍÏÅ ÓÔÒÏÞËÉ $FreeBSD$, ÏÎÁ
ÂÕÄÅÔ ÚÁÐÏÌÎÅÎÁ Á×ÔÏÍÁÔÉÞÅÓËÉ ÓÉÓÔÅÍÏÊ SVN, ËÏÇÄÁ ÐÏÒÔ ÂÕÄÅÔ
ÉÍÐÏÒÔÉÒÏ×ÁÎ × ÎÁÛÅ ÄÅÒÅ×Ï ÐÏÒÔÏ×. ÷Ù ÍÏÖÅÔÅ ÎÁÊÔÉ ÂÏÌÅÅ ÐÏÄÒÏÂÎÙÊ
ÐÒÉÍÅÒ × ÒÁÚÄÅÌÅ ÐÒÉÍÅÒ
Makefile.óÏÚÄÁÎÉÅ ÉÎÆÏÒÍÁÃÉÏÎÎÙÈ ÆÁÊÌÏ×éÍÅÅÔÓÑ Ä×Á ÉÎÆÏÒÍÁÃÉÏÎÎÙÈ ÆÁÊÌÁ, ËÏÔÏÒÙÅ ÔÒÅÂÕÀÔÓÑ ÄÌÑ ÌÀÂÏÇÏ
ÐÏÒÔÁ, ×ÎÅ ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ÔÏÇÏ, Ñ×ÌÑÅÔÓÑ ÌÉ ÏÎ ÐÁËÅÔÏÍ ÉÌÉ ÎÅÔ. üÔÏ
pkg-descr É pkg-plist.
ðÒÅÆÉËÓ pkg- ÏÔÌÉÞÁÅÔ ÉÈ ÏÔ ÄÒÕÇÉÈ ÆÁÊÌÏ×.pkg-descrüÔÏ ÂÏÌÅÅ ÐÏÄÒÏÂÎÏÅ ËÒÁÔËÏÅ ÏÐÉÓÁÎÉÅ ÐÏÒÔÁ. ïÔ ÏÄÎÏÇÏ ÄÏ
ÎÅÓËÏÌØËÉÈ ÁÂÚÁÃÅ×, ËÒÁÔËÏ ÏÐÉÓÙ×ÁÀÝÉÈ, ÞÔÏ ÐÒÅÄÓÔÁ×ÌÑÅÔ ÓÏÂÏÊ
ÐÏÒÔ, ÂÕÄÅÔ ÄÏÓÔÁÔÏÞÎÏ.üÔÏ ÎÅ ÒÕËÏ×ÏÄÓÔ×Ï É ÎÅ ÐÏÄÒÏÂÎÅÊÛÅÅ
ÏÐÉÓÁÎÉÅ ÔÏÇÏ, ËÁË ÉÓÐÏÌØÚÏ×ÁÔØ ÉÌÉ ËÏÍÐÉÌÉÒÏ×ÁÔØ ÐÏÒÔ!
ðÏÖÁÌÕÊÓÔÁ, ÂÕÄØÔÅ ×ÎÉÍÁÔÅÌØÎÙ ÐÒÉ ËÏÐÉÒÏ×ÁÎÉÉ ÔÅËÓÔÁ
ÉÚ README ÉÌÉ ÓÔÒÁÎÉÃ
ÓÐÒÁ×ÏÞÎÉËÁ; ÓÌÉÛËÏÍ ÞÁÓÔÏ ÏÎÉ ÎÅ Ñ×ÌÑÀÔÓÑ ËÒÁÔËÉÍ
ÏÐÉÓÁÎÉÅÍ ÐÏÒÔÁ ÉÌÉ ÉÍÅÀÔ ÎÅÕÄÏÂÎÙÊ ÆÏÒÍÁÔ (ÎÁÐÒÉÍÅÒ, ÓÔÒÁÎÉÃÙ
ÓÐÒÁ×ÏÞÎÉËÁ ×ÙÒÏ×ÎÅÎÙ ÐÒÏÂÅÌÁÍÉ). åÓÌÉ ÐÏÒÔÉÒÕÅÍÏÅ ÐÒÉÌÏÖÅÎÉÅ
ÉÍÅÅÔ ÏÆÉÃÉÁÌØÎÕÀ ÓÔÒÁÎÉÞËÕ éÎÔÅÒÎÅÔ, ÕËÁÖÉÔÅ ÅÅ ÚÄÅÓØ.
ðÅÒÅÄ ÏÄÎÉÍ ÉÚ ÓÁÊÔÏ× ÄÏÂÁרÔÅ ÓÌÏ×Ï
WWW: ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ×ÓÐÏÍÏÇÁÔÅÌØÎÙÅ ÕÔÉÌÉÔÙ
ÒÁÂÏÔÁÌÉ ÐÒÁ×ÉÌØÎÏ.óÌÅÄÕÀÝÉÊ ÐÒÉÍÅÒ ÐÏËÁÚÙ×ÁÅÔ, ËÁË ÄÏÌÖÅÎ ×ÙÇÌÑÄÅÔØ ×ÁÛ
pkg-descr:This is a port of oneko, in which a cat chases a poor mouse all over
the screen.
:
(etc.)
WWW: http://www.oneko.org/pkg-plistúÄÅÓØ ÐÅÒÅÞÉÓÌÑÀÔÓÑ ×ÓÅ ÆÁÊÌÙ, ÕÓÔÁÎÁ×ÌÉ×ÁÅÍÙÅ ÐÏÒÔÏÍ. åÇÏ
ÔÁËÖÅ ÎÁÚÙ×ÁÀÔ ÓÐÉÓËÏÍ ÄÌÑ ÕÐÁËÏ×ËÉ, ÐÏÔÏÍÕ ÞÔÏ
ÐÁËÅÔ ÇÅÎÅÒÉÒÕÅÔÓÑ ÕÐÁËÏ×ËÏÊ ÆÁÊÌÏ×, ËÏÔÏÒÙÅ ÚÄÅÓØ ÕËÁÚÁÎÙ.
éÍÅÎÁ ÐÕÔÅÊ ÕËÁÚÙ×ÁÀÔÓÑ ÏÔÎÏÓÉÔÅÌØÎÏ ÕÓÔÁÎÏ×ÏÞÎÏÇÏ ÐÒÅÆÉËÓÁ
(ÏÂÙÞÎÏ /usr/local).
åÓÌÉ ×Ù ÉÓÐÏÌØÚÕÅÔÅ ÐÅÒÅÍÅÎÎÙÅ
MANn (Á ×Ù ÄÏÌÖÎÙ
ÜÔÏ ÄÅÌÁÔØ), ÔÏ ÕËÁÚÙ×ÁÔØ ÓÔÒÁÎÉÃÙ ÓÐÒÁ×ÏÞÎÉËÁ ÚÄÅÓØ ÎÅ
ÎÕÖÎÏ. åÓÌÉ ÐÏÒÔ ×Ï ×ÒÅÍÑ ÕÓÔÁÎÏ×ËÉ ÓÏÚÄÁÅÔ ËÁÔÁÌÏÇÉ, ÕÂÅÄÉÔÅÓØ,
ÞÔÏ ÄÏÂÁ×ÉÌÉ ÓÔÒÏËÕ @dirrm ÄÌÑ ÕÄÁÌÅÎÉÑ
ËÁÔÁÌÏÇÏ× ÐÒÉ ÕÄÁÌÅÎÉÉ ÐÁËÅÔÁ.÷ÏÔ ÍÁÌÅÎØËÉÊ ÐÒÉÍÅÒ:bin/oneko
lib/X11/app-defaults/Oneko
lib/X11/oneko/cat1.xpm
lib/X11/oneko/cat2.xpm
lib/X11/oneko/mouse.xpm
@dirrm lib/X11/onekoïÂÒÁÔÉÔÅÓØ Ë ÓÔÒÁÎÉÃÅ ÓÐÒÁ×ÏÞÎÏÊ ÓÉÓÔÅÍÙ ÐÏ ËÏÍÁÎÄÅ
&man.pkg.create.1; Ó ÐÏÄÒÏÂÎÙÍ ÏÐÉÓÁÎÉÅÍ ÆÏÒÍÁÔÁ ÓÐÉÓËÁ
ÕÐÁËÏ×ËÉ.òÅËÏÍÅÎÄÕÅÔÓÑ, ÞÔÏÂÙ ÉÍÅÎÁ ÆÁÊÌÏ× × ÜÔÏÍ ÓÐÉÓËÅ ÂÙÌÉ
ÏÔÓÏÒÔÉÒÏ×ÁÎÙ × ÁÌÆÁ×ÉÔÎÏÍ ÐÏÒÑÄËÅ. üÔÏ ÐÏÚ×ÏÌÉÔ ÚÎÁÞÉÔÅÌØÎÏ
ÏÂÌÅÇÞÉÔØ Ó×ÅÒËÕ ÉÚÍÅÎÅÎÉÊ ÐÒÉ ÏÂÎÏ×ÌÅÎÉÉ ÐÏÒÔÁ.óÏÚÄÁÎÉÅ ÓÐÉÓËÁ ÕÐÁËÏ×ËÉ ×ÒÕÞÎÕÀ ÍÏÖÅÔ ÏËÁÚÁÔØÓÑ ×ÅÓØÍÁ
ÔÒÕÄÏ£ÍËÏÊ ÚÁÄÁÞÅÊ. åÓÌÉ ÐÏÒÔ ÕÓÔÁÎÁ×ÌÉ×ÁÅÔ ÂÏÌØÛÏÅ ËÏÌÉÞÅÓÔ×Ï
ÆÁÊÌÏ×, ÒÁÚÄÅÌ Ï Á×ÔÏÍÁÔÉÞÅÓËÏÍ ÐÏÓÔÒÏÅÎÉÉ ÓÐÉÓËÁ
ÕÐÁËÏ×ËÉ ÍÏÖÅÔ ÐÏÍÏÞØ ÓÜËÏÎÏÍÉÔØ ×ÒÅÍÑ.óÕÝÅÓÔ×ÕÅÔ ÔÏÌØËÏ ÏÄÎÏ ÉÓËÌÀÞÅÎÉÅ, ËÏÇÄÁ Õ ÐÏÒÔÁ ÍÏÖÅÔ
ÏÔÓÕÔÓÔ×Ï×ÁÔØ pkg-plist. åÓÌÉ ÐÏÒÔ
ÕÓÔÁÎÁ×ÌÉ×ÁÅÔ ÌÉÛØ ÎÅÓËÏÌØËÏ ÆÁÊÌÏ×, Á ×ÏÚÍÏÖÎÏ, É ËÁÔÁÌÏÇÏ×, ÔÏ
ÏÎÉ ÍÏÇÕÔ ÂÙÔØ ÐÅÒÅÞÉÓÌÅÎÙ × ÐÅÒÅÍÅÎÎÙÈ
PLIST_FILES É PLIST_DIRS,
ÓÏÏÔ×ÅÔÓÔ×ÅÎÎÏ, ×ÎÕÔÒÉ ÆÁÊÌÁ Makefile ÐÏÒÔÁ.
ë ÐÒÉÍÅÒÕ, ÍÙ ÍÏÖÅÍ ÏÂÏÊÔÉÓØ ÂÅÚ ÆÁÊÌÁ
pkg-plist Õ ÐÒÉ×ÅÄ£ÎÎÏÇÏ ×ÙÛÅ ÐÏÒÔÁ
oneko, ÄÏÂÁ×É× ÓÌÅÄÕÀÝÉÅ ÓÔÒÏËÉ ×
Makefile:PLIST_FILES= bin/oneko \
lib/X11/app-defaults/Oneko \
lib/X11/oneko/cat1.xpm \
lib/X11/oneko/cat2.xpm \
lib/X11/oneko/mouse.xpm
PLIST_DIRS= lib/X11/onekoëÏÎÅÞÎÏ, ÐÅÒÅÍÅÎÎÁÑ PLIST_DIRS ÎÅ ÄÏÌÖÎÁ
ÚÁÄÁ×ÁÔØÓÑ, ÅÓÌÉ ÐÏÒÔ ÎÅ ÕÓÔÁÎÁ×ÌÉ×ÁÅÔ ÎÉËÁËÉÈ ËÁÔÁÌÏÇÏ×.ïÂÒÁÔÎÏÊ ÓÔÏÒÏÎÏÊ ÔÁËÏÇÏ ÓÐÏÓÏÂÁ ÐÅÒÅÞÉÓÌÅÎÉÑ ÆÁÊÌÏ× É
ËÁÔÁÌÏÇÏ× ÐÏÒÔÁ Ñ×ÌÑÅÔÓÑ ÎÅ×ÏÚÍÏÖÎÏÓÔØ ÉÓÐÏÌØÚÏ×ÁÎÉÑ
ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÅÊ ËÏÍÁÎÄ, ÏÐÉÓÁÎÎÙÈ × &man.pkg.create.1;.
ðÏÜÔÏÍÕ ÏÎ ÐÏÄÈÏÄÉÔ ÄÌÑ ÐÒÏÓÔÙÈ ÐÏÒÔÏ×, ÞÔÏ ÄÅÌÁÅÔ ÉÈ ÅÝ£ ÂÏÌÅÅ
ÐÒÏÓÔÙÍÉ. ïÄÎÏ×ÒÅÍÅÎÎÏ Ó ÜÔÉÍ ÐÏÌÏÖÉÔÅÌØÎÙÍ ÍÏÍÅÎÔÏÍ Ñ×ÌÑÅÔÓÑ
ÕÍÅÎØÛÅÎÉÅ ËÏÌÉÞÅÓÔ×Á ÆÁÊÌÏ× × ËÏÌÌÅËÃÉÉ ÐÏÒÔÏ×. ðÏÖÁÌÕÊÓÔÁ,
ÐÏÄÕÍÁÊÔÅ ÎÁÄ ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÜÔÏÊ ÔÅÈÎÉËÉ, ÐÒÅÖÄÅ ÞÅÍ ÓÏÚÄÁ×ÁÔØ
pkg-plist.äÁÌÅÅ ÍÙ Õ×ÉÄÉÍ, ËÁË ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÆÁÊÌÙ
pkg-plist É PLIST_FILES
×ÙÐÏÌÎÅÎÉÑ ÂÏÌÅÅ ÓÌÏÖÎÙÈ
ÚÁÄÁÞ.óÏÚÄÁÎÉÅ ÆÁÊÌÁ Ó ËÏÎÔÒÏÌØÎÏÊ ÓÕÍÍÏÊðÒÏÓÔÏ ××ÅÄÉÔÅ ËÏÍÁÎÄÕ make makesum.
ðÒÁ×ÉÌÁ ÕÔÉÌÉÔÙ make Á×ÔÏÍÁÔÉÞÅÓËÉ ÓÇÅÎÅÒÉÒÕÀÔ ÆÁÊÌ
distinfo.åÓÌÉ Õ ÉÚ×ÌÅËÁÅÍÏÇÏ ÆÁÊÌÁ ÒÅÇÕÌÑÒÎÏ ÍÅÎÑÅÔÓÑ ËÏÎÔÒÏÌØÎÁÑ
ÓÕÍÍÁ É ×Ù ÎÅ ÓÏÍÎÅ×ÁÅÔÅÓØ × ÎÁÄÅÖÎÏÓÔÉ ÉÓÔÏÞÎÉËÁ (Ô.Å. ÏÎ ÐÏÌÕÞÅÎ
ÉÚ CD ÐÒÏÉÚ×ÏÄÉÔÅÌÑ, ÌÉÂÏ ÅÖÅÄÎÅ×ÎÏ ÏÂÎÏ×ÌÑÅÔÓÑ ÄÏËÕÍÅÎÔÁÃÉÑ), ÔÏ ×Ù
ÄÏÌÖÎÙ ÕËÁÚÁÔØ ÜÔÉ ÆÁÊÌÙ × ÐÅÒÅÍÅÎÎÏÊ IGNOREFILES.
ôÏÇÄÁ ËÏÎÔÒÏÌØÎÁÑ ÓÕÍÍÁ ÐÒÉ ×ÙÐÏÌÎÅÎÉÉ make makesum
ÄÌÑ ÜÔÏÇÏ ÆÁÊÌÁ ÓÏÚÄÁ×ÁÔØÓÑ ÎÅ ÂÕÄÅÔ, Á ×ÍÅÓÔÏ ÜÔÏÇÏ ÄÌÑ ÎÅÇÏ ÂÕÄÅÔ
ÕÓÔÁÎÏ×ÌÅÎÏ ÚÎÁÞÅÎÉÅ IGNORE.ôÅÓÔÉÒÏ×ÁÎÉÅ ÐÏÒÔÁ÷Ù ÄÏÌÖÎÙ ÕÄÏÓÔÏ×ÅÒÉÔØÓÑ, ÞÔÏ ÐÒÁ×ÉÌÁ ÐÏÓÔÒÏÅÎÉÑ ÐÏÒÔÁ ×ÙÐÏÌÎÑÀÔ
ÉÍÅÎÎÏ ÔÏ, ÞÔÏ ×Ù ÈÏÔÉÔÅ, ×ËÌÀÞÁÑ ÓÏÚÄÁÎÉÅ ÐÁËÅÔÁ ÄÌÑ ÐÏÒÔÁ. ÷ÏÔ
ÔÅ ×ÁÖÎÙÅ ×ÅÝÉ, ËÏÔÏÒÙÅ ×Ù ÄÏÌÖÎÙ ÐÒÏ×ÅÒÉÔØ.pkg-plist ÎÅ ÓÏÄÅÒÖÉÔ ÎÉÞÅÇÏ Ó×ÅÒÈ ÔÏÇÏ,
ÞÔÏ ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ ×ÁÛÉÍ ÐÏÒÔÏÍpkg-plist ÓÏÄÅÒÖÉÔ ÁÂÓÏÌÀÔÎÏ ×ÓÅ, ÞÔÏ
ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ ×ÁÛÉÍ ÐÏÒÔÏÍ÷ÁÛ ÐÏÒÔ ÍÏÖÅÔ ÂÙÔØ ÐÅÒÅÕÓÔÁÎÏ×ÌÅÎ ÍÎÏÖÅÓÔ×Ï ÒÁÚ Ó ÐÏÍÏÝØÀ
ÕËÁÚÁÎÉÑ ÃÅÌÉ reinstall÷ÁÛ ÐÏÒÔ ÐÏÄÞÉÝÁÅÔ
ÚÁ ÓÏÂÏÊ ÐÏÓÌÅ Ó×ÏÅÇÏ ÕÄÁÌÅÎÉÑòÅËÏÍÅÎÄÕÅÍÙÊ ÐÏÒÑÄÏË ÐÒÏ×ÅÒËÉmake installmake packagemake deinstallpkg_add package-namemake deinstallmake reinstallmake packagemake readmeðÒÏ×ÅÒØÔÅ, ÞÔÏ ÎÉ ÎÁ ÛÁÇÅ package, ÎÉ ÎÁ
ÛÁÇÅ deinstall ÎÅ ×ÙÄÁÅÔÓÑ ÎÉËÁËÉÈ
ÐÒÅÄÕÐÒÅÖÄÅÎÉÊ. ðÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ ÛÁÇÁ 3 ÐÒÏ×ÅÒØÔÅ, ÞÔÏ ×ÓÅ ÎÏ×ÙÅ
ËÁÔÁÌÏÇÉ ÂÙÌÉ ÕÓÐÅÛÎÏ ÕÄÁÌÅÎÙ. ôÁËÖÅ ÐÏÐÒÏÂÕÊÔÅ ÚÁÐÕÓÔÉÔØ
ÐÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ ÛÁÇÁ 4, ÞÔÏÂÙ ÕÂÅÄÉÔØÓÑ, ÞÔÏ
ÏÎÏ ÒÁÂÏÔÁÅÔ ÐÒÁ×ÉÌØÎÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÉÚ ÐÁËÅÔÁ.îÁÉÂÏÌÅÅ ÏÓÎÏ×ÁÔÅÌØÎÙÍ ÓÐÏÓÏÂÏÍ Á×ÔÏÍÁÔÉÚÁÃÉÉ ÜÔÉÈ ÛÁÇÏ× Ñ×ÌÑÅÔÓÑ
ÕÓÔÁÎÏ×ËÁ ports tinderbox. üÔÏ
ÏÂÅÓÐÅÞÉ×ÁÅÔ jails, × ËÏÔÏÒÙÈ ×Ù ÍÏÖÅÔÅ ÐÒÏ×ÅÒÑÔØ
×ÓÅ ×ÙÛÅÕËÁÚÁÎÎÙÅ ÛÁÇÉ ÂÅÚ ÉÚÍÅÎÅÎÉÑ ÓÏÓÔÏÑÎÉÑ × ×ÁÛÅÊ ÏÓÎÏ×ÎÏÊ
ÓÉÓÔÅÍÅ. äÌÑ ÐÏÌÕÞÅÎÉÑ ÄÏÐÏÌÎÉÔÅÌØÎÏÊ ÉÎÆÏÒÍÁÃÉÉ ÓÍÏÔÒÉÔÅ
ports/ports-mgmt/tinderbox.ðÒÏ×ÅÒËÁ ×ÁÛÅÇÏ ÐÏÒÔÁ ÕÔÉÌÉÔÏÊ
portlintâÕÄØÔÅ ÄÏÂÒÙ, ÐÏÌØÚÕÊÔÅÓØ ÕÔÉÌÉÔÏÊ portlint
ÄÌÑ ÐÒÏ×ÅÒËÉ ÔÏÇÏ, ÞÔÏ ×ÁÛ ÐÏÒÔ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÎÁÛÉÍ ÒÅËÏÍÅÎÄÁÃÉÑÍ.
ðÒÏÇÒÁÍÍÁ ports-mgmt/portlint
Ñ×ÌÑÅÔÓÑ ÞÁÓÔØÀ ëÏÌÌÅËÃÉÉ
ðÏÒÔÏ×. ÷ ÞÁÓÔÎÏÓÔÉ, ×Ù ÍÏÖÅÔÅ ÚÁÈÏÔÅÔØ ÐÒÏ×ÅÒÉÔØ, ÐÒÁ×ÉÌØÎÏ ÌÉ
ÓÆÏÒÍÉÒÏ×ÁÎ ÆÁÊÌ Makefile É
ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÍ ÌÉ ÏÂÒÁÚÏÍ ÉÍÅÎÏ×ÁÎ ÐÁËÅÔ.ðÏÓÙÌËÁ ÎÏ×ÏÇÏ ÐÏÒÔÁðÅÒÅÄ ÐÏÓÙÌËÏÊ ÎÏ×ÏÇÏ ÐÏÒÔÁ ÕÄÏÓÔÏ×ÅÒØÔÅÓØ, ÞÔÏ ×Ù ÐÒÏÞÉÔÁÌÉ
ÒÁÚÄÅÌ Ï ÔÏÍ, ÞÔÏ ÍÏÖÎÏ É ÎÅÌØÚÑ ÄÅÌÁÔØ.ôÅÐÅÒØ, ËÏÇÄÁ ×Ù ÓÞÁÓÔÌÉ×Ù ÏÔ Ó×ÏÅÇÏ ÐÅÒ×ÏÇÏ ÐÏÒÔÁ, ÅÄÉÎÓÔ×ÅÎÎÏÅ,
ÞÔÏ ÏÓÔÁÌÏÓØ ÓÄÅÌÁÔØ, ÜÔÏ ×ËÌÀÞÉÔØ ÅÇÏ × ÏÓÎÏ×ÎÏÅ ÄÅÒÅ×Ï ÐÏÒÔÏ×
&os; É ÏÓÞÁÓÔÌÉ×ÉÔØ ÜÔÉÍ ×ÓÅÈ ÏÓÔÁÌØÎÙÈ. îÁÍ ÎÅ ÎÕÖÅÎ ÎÉ ×ÁÛ
ËÁÔÁÌÏÇ work, ÎÉ ÐÁËÅÔ
pkgname.tgz, ÔÁË ÞÔÏ ÕÄÁÌÉÔÅ ÉÈ ÐÒÑÍÏ ÓÅÊÞÁÓ.
úÁÔÅÍ (ÐÒÅÄÐÏÌÏÖÉÍ, ÞÔÏ ×ÁÛ ÐÏÒÔ ÚÏ×ÕÔ oneko) ÐÅÒÅÊÄÉÔÅ × ËÁÔÁÌÏÇ
×ÙÛÅ, ÔÁÍ, ÇÄÅ ÎÁÈÏÄÉÔÓÑ ËÁÔÁÌÏÇ oneko, É ÎÁÂÅÒÉÔÅ
ÓÌÅÄÕÀÝÅÅ: shar `find oneko` > oneko.shar÷ËÌÀÞÉÔÅ ×ÁÛ ÆÁÊÌ oneko.shar
× ÓÏÏÂÝÅÎÉÅ ÏÂ ÏÛÉÂËÅ É ÐÏÛÌÉÔÅ
ÅÇÏ Ó ÐÏÍÏÝØÀ ÐÒÏÇÒÁÍÍÙ &man.send-pr.1; (ÏÂÒÁÔÉÔÅÓØ Ë ÒÁÚÄÅÌÕ
óÏÏÂÝÅÎÉÑ ÏÂ ÏÛÉÂËÁÈ É ÏÂÝÉÅ ÚÁÍÅÞÁÎÉÑ ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÐÏÄÒÏÂÎÏÊ
ÉÎÆÏÒÍÁÃÉÉ Ï ÐÒÏÇÒÁÍÍÅ &man.send-pr.1;). îÅ ÚÁÂÕÄØÔÅ
ÕËÁÚÁÔØ × ÓÏÏÂÝÅÎÉÉ ËÁÔÅÇÏÒÉÀ ports É ËÌÁÓÓ
change-request (îÅ ÕËÁÚÙ×ÁÊÔÅ, ÞÔÏ ÓÏÏÂÝÅÎÉÅ
ÉÍÅÅÔ ÓÔÁÔÕÓ confidential!). äÏÂÁרÔÅ ÔÁËÖÅ
ËÒÁÔËÏÅ ÏÐÉÓÁÎÉÅ ÐÒÏÇÒÁÍÍÙ, ÐÏÒÔ ËÏÔÏÒÏÊ ×Ù ÓÏÚÄÁÌÉ, × ÒÁÚÄÅÌ
Description ÏÔÐÒÁ×ÌÑÅÍÏÇÏ PR (ÎÁÐÒÉÍÅÒ, ÓÏÄÅÒÖÉÍÏÅ
COMMENT × ÓÏËÒÁÝÅÎÎÏÍ ×ÉÄÅ) É ÓÁÍ ÆÁÊÌ × ×ÉÄÅ ÁÒÈÉ×Á
shar, ÐÏÍÅÓÔÉ× ÅÇÏ × ÒÁÚÄÅÌ Fix.÷Ù ÍÏÖÅÔÅ ÚÎÁÞÉÔÅÌØÎÏ ÏÂÌÅÇÞÉÔØ ÎÁÛÕ ÒÁÂÏÔÕ, ÅÓÌÉ × ÔÅÍÕ
ÓÏÏÂÝÅÎÉÑ Ï ÐÒÏÂÌÅÍÅ ÐÏÍÅÓÔÉÔÅ ÈÏÒÏÛÅÅ ÏÐÉÓÁÎÉÅ. íÙ ÒÅËÏÍÅÎÄÕÅÍ
ÎÅÞÔÏ ×ÒÏÄÅ New port: <ËÁÔÅÇÏÒÉÑ>/<ÎÁÚ×ÁÎÉÅ
ÐÏÒÔÁ> <ËÒÁÔËÏÅ ÏÐÉÓÁÎÉÅ ÐÏÒÔÁ> ÄÌÑ ÎÏ×ÙÈ ÐÏÒÔÏ×.
åÓÌÉ ×Ù ÓÌÅÄÕÅÔÅ ÜÔÏÊ ÓÈÅÍÅ, ÔÏ ÛÁÎÓÙ ÎÁ ÔÏ, ÞÔÏ ÎÁ ×ÁÛÅ PR ×ÓËÏÒÅ
ËÔÏ-ÔÏ ×ÚÇÌÑÎÅÔ, ÇÏÒÁÚÄÏ ×ÙÛÅ.ðÏ×ÔÏÒÉÍ ÅÝ£ ÒÁÚ, ÞÔÏ ÎÅ ÎÕÖÎÏ ×ËÌÀÞÁÔØ ÎÉ ÏÒÉÇÉÎÁÌØÎÙÊ
ÆÁÊÌ Ó ÄÉÓÔÒÉÂÕÔÉ×ÏÍ, ÎÉ ËÁÔÁÌÏÇ work,
ÎÉ ÐÁËÅÔ, ÐÏÓÔÒÏÅÎÎÙÊ ×ÁÍÉ ËÏÍÁÎÄÏÊ
make package; ÄÌÑ ÎÏ×ÙÈ ÐÏÒÔÏ×
ÉÓÐÏÌØÚÕÊÔÅ &man.shar.1;, ÎÏ ÎÅ &man.diff.1;.ðÏÓÌÅ ÔÏÇÏ ËÁË ×Ù ÐÏÓÌÁÌÉ ÐÏÒÔ, ÐÏÖÁÌÕÊÓÔÁ, ÐÏÔÅÒÐÉÔÅ.
éÎÏÇÄÁ ×ËÌÀÞÅÎÉÅ ÎÏ×ÏÇÏ ÐÏÒÔÁ ×Ï &os; ÍÏÖÅÔ ÚÁÎÑÔØ ÄÏ ÎÅÓËÏÌØËÉÈ
ÍÅÓÑÃÅ×, Á ÉÎÏÇÄÁ ×ÓÅÇÏ ÎÅÓËÏÌØËÏ ÄÎÅÊ.
úÄÅÓØ ×Ù ÍÏÖÅÔÅ ÎÁÊÔÉ ÓÐÉÓÏË PR ÄÌÑ ÐÏÒÔÏ× ÏÖÉÄÁÀÝÉÈ Ó×ÏÅÊ
ÏÞÅÒÅÄÉ ÄÌÑ ×ËÌÀÞÅÎÉÑ ×Ï &os;.íÙ ÒÁÓÓÍÏÔÒÉÍ ×ÁÛ ÐÏÒÔ, ÐÒÉ ÎÅÏÂÈÏÄÉÍÏÓÔÉ ×ÅÒÎ£Í ÅÇÏ ÏÂÒÁÔÎÏ, Á
ÚÁÔÅÍ ×ËÌÀÞÉÍ ÐÏÒÔ × ÎÁÛÅ ÄÅÒÅ×Ï. ÷ÁÛÅ ÉÍÑ ÔÁËÖÅ ÐÏÑ×ÉÔÓÑ × ÓÐÉÓËÅ
äÏÐÏÌÎÉÔÅÌØÎÙÈ ËÏÎÔÒÉÂÕÔÏÒÏ× ÐÒÏÅËÔÁ FreeBSD É ÄÒÕÇÉÈ
ÆÁÊÌÁÈ. òÁÚ×Å ÜÔÏ ÎÅ ×ÅÌÉËÏÌÅÐÎÏ?!? :-)íÅÄÌÅÎÎÏÅ ÐÏÒÔÉÒÏ×ÁÎÉÅéÔÁË, ×ÓÅ ÏËÁÚÁÌÏÓØ ÎÅ ÔÁË ÕÖ É ÐÒÏÓÔÏ, É ÐÏÒÔ ÐÏÔÒÅÂÏ×ÁÌ
ÎÅËÏÔÏÒÙÈ ÍÏÄÉÆÉËÁÃÉÊ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÚÁÓÔÁ×ÉÔØ ÅÇÏ ÒÁÂÏÔÁÔØ. ÷ ÜÔÏÍ
ÒÁÚÄÅÌÅ ÍÙ ÒÁÓÓËÁÖÅÍ, ÛÁÇ ÚÁ ÛÁÇÏÍ, ËÁË ÅÇÏ ÍÏÄÉÆÉÃÉÒÏ×ÁÔØ, ÞÔÏÂÙ ÏÎ
ÒÁÂÏÔÁÌ Ó ÎÁÛÅÊ ÓÉÓÔÅÍÏÊ ÐÏÒÔÏ×.ëÁË ×Ó£ ÜÔÏ ÒÁÂÏÔÁÅÔ÷Ï-ÐÅÒ×ÙÈ, ËÏÇÄÁ ÐÏÌØÚÏ×ÁÔÅÌØ ÄÁÅÔ × Ó×ÏÅÍ ËÁÔÁÌÏÇÅ Ó ÐÏÒÔÏÍ
ËÏÍÁÎÄÕ make, ÐÒÏÉÓÈÏÄÉÔ ÃÅÌÁÑ ÞÅÒÅÄÁ ÓÏÂÙÔÉÊ.
÷Ï ×ÒÅÍÑ ÞÔÅÎÉÑ ÜÔÏÇÏ ÔÅËÓÔÁ ÍÏÖÅÔ ÏËÁÚÁÔØÓÑ ÐÏÌÅÚÎÙÍ ÉÍÅÔØ ÆÁÊÌ
bsd.port.mk ÏÔËÒÙÔÙÍ × ÄÒÕÇÏÍ ÏËÎÅ, ÞÔÏ ÓÉÌØÎÏ
ÐÏÍÏÖÅÔ × ÉÈ ÐÏÎÉÍÁÎÉÉ.îÏ ÎÅ ×ÏÌÎÕÊÔÅÓØ ÓÉÌØÎÏ, ÅÓÌÉ ×Ù ÎÅ ÄÏ ËÏÎÃÁ ÐÏÎÉÍÁÅÔÅ, ÞÔÏ
ÄÅÌÁÅÔÓÑ × bsd.port.mk, ÎÅ ÔÁË ÕÖ ÍÎÏÇÏ ÌÀÄÅÊ
ÅÇÏ ÐÏÎÉÍÁÅÔ... :->úÁÐÕÓËÁÅÔÓÑ ÃÅÌØ fetch. ãÅÌØ
fetch ÏÔ×ÅÞÁÅÔ ÚÁ ÔÏ, ÞÔÏ ÁÒÈÉ× ÉÓÈÏÄÎÙÈ
ÔÅËÓÔÏ× ÉÍÅÅÔÓÑ × ÎÁÌÉÞÉÉ ÌÏËÁÌØÎÏ × ËÁÔÁÌÏÇÅ
DISTDIR. åÓÌÉ ÃÅÌØ
fetch ÎÅ ÍÏÖÅÔ ÎÁÊÔÉ ÔÒÅÂÕÅÍÙÅ ÆÁÊÌÙ ×
ËÁÔÁÌÏÇÅ DISTDIR, ÔÏ ÏÎ ÂÕÄÅÔ ÉÓËÁÔØÓÑ ÐÏ
ÕËÁÚÁÔÅÌÀ URL MASTER_SITES, ËÏÔÏÒÙÊ
ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ × Makefile, Á ÔÁËÖÅ ÎÁ ÎÁÛÅÍ ÏÓÎÏ×ÎÏÍ FTP-ÓÅÒ×ÅÒÅ
ÐÏ ÁÄÒÅÓÕ ,
ËÕÄÁ ÍÙ ÐÏ ×ÏÚÍÏÖÎÏÓÔÉ ÐÏÍÅÝÁÅÍ ÄÉÓÔÒÉÂÕÔÉ×ÎÙÅ ÆÁÊÌÙ ÄÌÑ ÁÒÈÉ×Á.
úÁÔÅÍ ÏÎÁ ÐÏÐÙÔÁÅÔÓÑ ÓÇÒÕÚÉÔØ ÕËÁÚÁÎÎÙÊ ÆÁÊÌ Ó ÐÏÍÏÝØÀ
FETCH, ÐÏÌÁÇÁÑ, ÞÔÏ ÚÁÐÒÁÛÉ×ÁÀÝÁÑ ÍÁÛÉÎÁ ÉÍÅÅÔ
ÐÒÑÍÏÅ ÐÏÄËÌÀÞÅÎÉÅ Ë éÎÔÅÒÎÅÔ. åÓÌÉ ÆÁÊÌ ÓËÁÞÁÅÔÓÑ ÕÄÁÞÎÏ, ÔÏ
ÏÎ ÂÕÄÅÔ ÐÏÍÅÝÅÎ × ËÁÔÁÌÏÇ DISTDIR ÄÌÑ
ÐÏÓÌÅÄÕÀÝÅÇÏ ÉÓÐÏÌØÚÏ×ÁÎÉÑ É ÏÂÒÁÂÏÔËÉ.÷ÙÐÏÌÎÑÅÔÓÑ ÃÅÌØ extract. ïÎÁ ÉÝÅÔ
ÄÉÓÔÒÉÂÕÔÉ×ÎÙÊ ÆÁÊÌ ÐÏÒÔÁ (ËÁË ÐÒÁ×ÉÌÏ, tar-ÁÒÈÉ×
gzip) ×
ËÁÔÁÌÏÇÅ DISTDIR É ÒÁÓÐÁËÏ×Ù×ÁÅÔ ÅÇÏ ×Ï
×ÒÅÍÅÎÎÙÊ ËÁÔÁÌÏÇ, ÚÁÄÁ×ÁÅÍÙÊ ÐÅÒÅÍÅÎÎÏÊ
WRKDIR (ÐÏ ÕÍÏÌÞÁÎÉÀ
work).÷ÙÐÏÌÎÑÅÔÓÑ ÃÅÌØ patch. ÷Ï-ÐÅÒ×ÙÈ,
ÐÒÉÍÅÎÑÀÔÓÑ ×ÓÅ ÐÁÔÞÉ, ÚÁÄÁÎÎÙÅ ÐÅÒÅÍÅÎÎÏÊ
PATCHFILES. ÷Ï-×ÔÏÒÙÈ, ÅÓÌÉ ËÁËÉÅ-ÌÉÂÏ ÆÁÊÌÙ Ó
ÐÁÔÞÁÍÉ, ÎÏÓÑÝÉÅ ÉÍÅÎÁ
patch-*, ÉÍÅÀÔÓÑ ×
ÐÏÄËÁÔÁÌÏÇÅ PATCHDIR (ÐÏ ÕÍÏÌÞÁÎÉÀ ÜÔÏ ËÁÔÁÌÏÇ
files), ÔÏ ÏÎÉ ÐÒÉÍÅÎÑÀÔÓÑ × ÜÔÏÔ ÍÏÍÅÎÔ ×
ÁÌÆÁ×ÉÔÎÏÍ ÐÏÒÑÄËÅ.úÁÐÕÓËÁÅÔÓÑ ÃÅÌØ configure. úÄÅÓØ
ÍÏÖÅÔ ×ÙÐÏÌÎÑÔØÓÑ ÌÀÂÁÑ ÉÚ ÍÎÏÇÉÈ ÒÁÚÌÉÞÎÙÈ ×ÅÝÅÊ.åÓÌÉ ÓÕÝÅÓÔ×ÕÅÔ ÓËÒÉÐÔ
scripts/configure, ÔÏ ÏÎ ÚÁÐÕÓËÁÅÔÓÑ.
åÓÌÉ ÚÁÄÁÎÁ ÐÅÒÅÍÅÎÎÁÑ HAS_CONFIGURE
ÉÌÉ GNU_CONFIGURE, ÔÏ ÚÁÐÕÓËÁÅÔÓÑ ÓËÒÉÐÔ
WRKSRC/configure.
åÓÌÉ ÚÁÄÁÎÁ ÐÅÒÅÍÅÎÎÁÑ USE_IMAKE,
ÔÏ ÚÁÐÕÓËÁÅÔÓÑ ËÏÍÁÎÄÁ XMKMF (ÐÏ ÕÍÏÌÞÁÎÉÀ
ÜÔÏ xmkmf -a).÷ÙÐÏÌÎÑÅÔÓÑ ÃÅÌØ build. ïÎÁ
ÏÔ×ÅÞÁÅÔ ÚÁ ÐÅÒÅÈÏÄ × ÓÏÂÓÔ×ÅÎÎÙÊ ÒÁÂÏÞÉÊ ËÁÔÁÌÏÇ ÐÏÒÔÁ
(WRKSRC) É ÅÇÏ ÐÏÓÔÒÏÅÎÉÅ. åÓÌÉ ÚÁÄÁÎÁ
ÐÅÒÅÍÅÎÎÁÑ USE_GMAKE, ÂÕÄÅÔ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ
GNU-×ÅÒÓÉÑ ÕÔÉÌÉÔÙ make, × ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ
ÂÕÄÅÔ ÉÓÐÏÌØÚÏ×ÁÎÁ ÓÉÓÔÅÍÎÁÑ ÕÔÉÌÉÔÁ
make.÷ÙÛÅ ÐÅÒÅÞÉÓÌÅÎÙ ÓÔÁÎÄÁÒÔÎÙÅ ÄÅÊÓÔ×ÉÑ. ëÒÏÍÅ ÔÏÇÏ, ×Ù ÓÁÍÉ
ÍÏÖÅÔÅ ÏÐÒÅÄÅÌÉÔØ ÃÅÌÉ
pre-ÞÔÏ-ÔÏ ÉÌÉ
post-ÞÔÏ-ÔÏ,
ÉÌÉ ÓÏÚÄÁÔØ ÓËÒÉÐÔÙ Ó ÔÁËÉÍÉ ÉÍÅÎÁÍÉ × ÐÏÄËÁÔÁÌÏÇÅ
scripts, É ÏÎÉ ÂÕÄÕÔ ÚÁÐÕÝÅÎÙ ÄÏ ÉÌÉ ÐÏÓÌÅ
×ÙÐÏÌÎÅÎÉÑ ÄÅÊÓÔ×ÉÊ ÐÏ ÕÍÏÌÞÁÎÉÀ.îÁÐÒÉÍÅÒ, ÅÓÌÉ Õ ×ÁÓ ÅÓÔØ ÃÅÌØ
post-extract, ÏÐÒÅÄÅÌ£ÎÎÁÑ × ×ÁÛÅÍ ÆÁÊÌÅ
Makefile É ÆÁÊÌ pre-build ×
ÐÏÄËÁÔÁÌÏÇÅ
scripts, ÔÏ ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ ÏÂÙÞÎÙÈ ÄÅÊÓÔ×ÉÊ ÐÏ
ÒÁÓÐÁËÏ×ËÅ, ÂÕÄÅÔ ×ÙÚ×ÁÎÁ ÃÅÌØ post-extract
Á ÓËÒÉÐÔ pre-build ÂÕÄÅÔ ×ÙÐÏÌÎÅÎ ÐÅÒÅÄ
ÚÁÐÕÓËÏÍ ÓÔÁÎÄÁÒÔÎÙÈ ÐÒÁ×ÉÌ ÐÏÓÔÒÏÅÎÉÑ. òÅËÏÍÅÎÄÕÅÔÓÑ ÉÓÐÏÌØÚÏ×ÁÔØ
ÃÅÌÉ ÉÚ Makefile, ÅÓÌÉ ÄÅÊÓÔ×ÉÑ ÄÏÓÔÁÔÏÞÎÏ
ÐÒÏÓÔÙ, ÐÏÔÏÍÕ ÞÔÏ × ÄÁÌØÎÅÊÛÅÍ ÂÕÄÅÔ ÐÒÏÝÅ ÏÐÒÅÄÅÌÉÔØ, ËÁËÉÅ
ÎÅÓÔÁÎÄÁÒÔÎÙÅ ÄÅÊÓÔ×ÉÑ ÔÒÅÂÕÅÔ ÐÏÒÔ.äÅÊÓÔ×ÉÑ ÐÏ ÕÍÏÌÞÁÎÉÀ ×ÙÐÏÌÎÑÀÔÓÑ ÃÅÌÑÍÉ
do-ÞÔÏ-ÔÏ ÉÚ
bsd.port.mk. îÁÐÒÉÍÅÒ, ËÏÍÁÎÄÙ ÄÌÑ
ÒÁÓÐÁËÏ×ËÉ ÐÏÒÔÁ ÎÁÈÏÄÑÔÓÑ × ÃÅÌÉ
do-extract. åÓÌÉ ×ÁÍ ÎÅ È×ÁÔÁÅÔ ÃÅÌÉ ÐÏ
ÕÍÏÌÞÁÎÉÀ, ×Ù ÍÏÖÅÔÅ ÅÅ ÉÓÐÒÁ×ÉÔØ, ÐÅÒÅÏÐÒÅÄÅÌÉ× ÃÅÌØ
do-something
× ×ÁÛÅÍ ÆÁÊÌÅ Makefile.ïÓÎÏ×ÎÙÅ ÃÅÌÉ (Ë ÐÒÉÍÅÒÕ,
extract, configure
É ÔÁË ÄÁÌÅÅ) ÎÅ ÄÅÌÁÀÔ ÎÉÞÅÇÏ ÂÏÌØÛÅ,
ÞÅÍ ÐÒÏ×ÅÒÑÀÔ ÕÓÐÅÛÎÏÓÔØ ÚÁ×ÅÒÛÅÎÉÑ ×ÓÅÈ ÐÒÅÄÙÄÕÝÉÈ ÛÁÇÏ× É
×ÙÚÙ×ÁÀÔ ÎÁÓÔÏÑÝÉÅ ÃÅÌÉ ÉÌÉ ÓËÒÉÐÔÙ, É ÉÈ ÎÅ ÎÕÖÎÏ ÍÅÎÑÔØ. åÓÌÉ
×ÁÍ ÎÕÖÎÏ ÉÚÍÅÎÉÔØ ÒÁÓÐÁËÏ×ËÕ, ÉÓÐÒÁ×ÌÑÊÔÅ
do-extract, ÎÏ ÎÉËÏÇÄÁ ÎÅ ÍÅÎÑÊÔÅ ÓÐÏÓÏÂ
ÒÁÂÏÔÙ extract! ëÒÏÍÅ ÔÏÇÏ, ÃÅÌØ
post-deinstall Ñ×ÌÑÅÔÓÑ ÎÅÄÅÊÓÔ×ÉÔÅÌØÎÏÊ
É ÎÅ ×ÙÐÏÌÎÑÅÔÓÑ ÉÎÆÒÁÓÔÒÕËÔÕÒÏÊ ÐÏÒÔÏ×.ôÅÐÅÒØ ×Ù ÐÒÅÄÓÔÁ×ÌÑÅÔÅ, ÞÔÏ ÐÒÏÉÓÈÏÄÉÔ, ËÏÇÄÁ ÐÏÌØÚÏ×ÁÔÅÌØ
ÎÁÂÉÒÁÅÔ ËÏÍÁÎÄÕ make, ÔÅÐÅÒØ ÄÁ×ÁÊÔÅ ÐÒÏÊÄÅÍÓÑ
ÞÅÒÅÚ ÛÁÇÉ, ÒÅËÏÍÅÎÄÕÅÍÙÅ ÄÌÑ ÓÏÚÄÁÎÉÑ ÎÁÓÔÏÑÝÅÇÏ ÐÏÒÔÁ.ðÏÌÕÞÅÎÉÅ ÉÓÈÏÄÎÏÇÏ ËÏÄÁðÏÌÕÞÉÔÅ ÏÒÉÇÉÎÁÌØÎÙÅ ÉÓÈÏÄÎÙÅ ÔÅËÓÔÙ (ÏÂÙÞÎÏ) × ×ÉÄÅ
ÕÐÁËÏ×ÁÎÎÏÇÏ tar-ÁÒÈÉ×Á
(foo.tar.gz ÉÌÉ
foo.tar.bz2)
É ÓËÏÐÉÒÕÊÔÅ ÅÇÏ × ËÁÔÁÌÏÇ DISTDIR. ÷ÓÅÇÄÁ
ÉÓÐÏÌØÚÕÊÔÅ ÉÓÈÏÄÎÙÅ ÔÅËÓÔÙ ÏÓÎÏ×ÎÏÊ ×ÅÔËÉ
ÒÁÚÒÁÂÏÔËÉ ×ÅÚÄÅ, ÇÄÅ ÜÔÏ ×ÏÚÍÏÖÎÏ.÷ÁÍ ÐÏÔÒÅÂÕÅÔÓÑ ÚÁÄÁÔØ ÚÎÁÞÅÎÉÅ ÐÅÒÅÍÅÎÎÏÊ
MASTER_SITES ÔÁË, ÞÔÏÂÙ ÏÎÏ ÕËÁÚÙ×ÁÌÏ ÎÁ
ÍÅÓÔÏÐÏÌÏÖÅÎÉÅ ÏÒÉÇÉÎÁÌØÎÏÇÏ tar-ÁÒÈÉ×Á. ÷ ÆÁÊÌÅ
bsd.sites.mk ×Ù ÎÁÊÄ£ÔÅ ËÒÁÔËÉÅ ÏÂÏÚÎÁÞÅÎÉÑ
ÄÌÑ ÂÏÌØÛÉÎÓÔ×Á ÐÏÐÕÌÑÒÎÙÈ ÓÁÊÔÏ×. ðÏÖÁÌÕÊÓÔÁ, ÉÓÐÏÌØÚÕÊÔÅ ÜÔÉ
ÓÁÊÔÙ—É ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÅ ÏÐÒÅÄÅÌÅÎÉÑ—×ÅÚÄÅ, ÇÄÅ ÜÔÏ
×ÏÚÍÏÖÎÏ, ÞÔÏÂÙ ÉÚÂÅÖÁÔØ ÐÒÏÂÌÅÍ ÐÏ×ÔÏÒÅÎÉÑ ÏÄÎÏÊ É ÔÏÊ ÖÅ ÉÎÆÏÒÍÁÃÉÉ
× ÂÁÚÅ ÉÓÔÏÞÎÉËÏ×. ôÁË ËÁË ÜÔÉ ÓÁÊÔÙ ÓÏ ×ÒÅÍÅÎÅÍ ÍÅÎÑÀÔÓÑ, ÄÌÑ
×ÓÅÈ ÐÒÉÞÁÓÔÎÙÈ ÐÏÄÄÅÒÖËÁ ÓÔÁÎÏ×ÉÔÓÑ ÎÁÓÔÏÑÝÉÍ ËÏÛÍÁÒÏÍ.åÓÌÉ ×Ù ÎÅ ÍÏÖÅÔÅ ÎÁÊÔÉ FTP/HTTP ÓÁÊÔ Ó ÈÏÒÏÛÉÍ ÐÏÄËÌÀÞÅÎÉÅÍ Ë
ÓÅÔÉ, ÉÌÉ ÎÁÈÏÄÉÔÅ ÔÏÌØËÏ ÓÁÊÔÙ, ËÏÔÏÒÙÅ ÉÍÅÀÔ ÒÁÚÄÒÁÖÁÀÝÅ
ÎÅÓÔÁÎÄÁÒÔÎÙÅ ÆÏÒÍÁÔÙ, ÔÏ ÍÏÖÅÔÅ ÚÁÈÏÔÅÔØ ÐÏÍÅÓÔÉÔØ ËÏÐÉÀ ÎÁ ÎÁÄÅÖÎÙÊ
ÓÅÒ×ÅÒ FTP ÉÌÉ HTTP, ËÏÔÏÒÙÊ ×ÁÍ ÄÏÓÔÕÐÅÎ (ÎÁÐÒÉÍÅÒ, ×ÁÛÁ ÄÏÍÁÛÎÑÑ
ÓÔÒÁÎÉÃÁ).åÓÌÉ ×Ù ÎÅ ÍÏÖÅÔÅ ÎÁÊÔÉ ÄÏÓÔÕÐÎÏÇÏ É ÎÁÄ£ÖÎÏÇÏ ÍÅÓÔÁ ÄÌÑ
ÐÏÍÅÝÅÎÉÑ ÄÉÓÔÒÉÂÕÔÉ×ÎÏÇÏ ÆÁÊÌÁ, ÔÏ ÍÙ ÓÁÍÉ ÓÍÏÖÅÍ ÒÁÚÍÅÓÔÉÔØ ÅÇÏ ÎÁ
ÓÅÒ×ÅÒÅ ftp.FreeBSD.org; ÏÄÎÁËÏ ÜÔÏ ÎÁÉÍÅÎÅÅ
ÒÅËÏÍÅÎÄÕÅÍÏÅ ÒÅÛÅÎÉÅ. äÉÓÔÒÉÂÕÔÉ×ÎÙÊ ÆÁÊÌ ÄÏÌÖÅÎ
ÂÙÔØ ÐÏÍÅÝ£Î × ËÁÔÁÌÏÇ ~/public_distfiles/
ÏÄÎÏÇÏ ÉÚ ÐÏÌØÚÏ×ÁÔÅÌÅÊ ÍÁÛÉÎÙ freefall. ðÏÐÒÏÓÉÔÅ
ÔÏÇÏ, ËÔÏ ËÏÍÍÉÔÔÉÌ ×ÁÛ ÐÏÒÔ, ÓÄÅÌÁÔØ ÜÔÏ. üÔÏÔ ÞÅÌÏ×ÅË ÔÁËÖÅ ÚÁÄÁÓÔ
ÐÅÒÅÍÅÎÎÏÊ MASTER_SITES ÚÎÁÞÅÎÉÅ
MASTER_SITE_LOCAL, Á × ÐÅÒÅÍÅÎÎÏÊ
MASTER_SITE_SUBDIR ÕËÁÖÅÔ Ó×Ï£ ÉÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ
Ó ÍÁÛÉÎÙ freefall.åÓÌÉ ÄÉÓÔÒÉÂÕÔÉ×ÎÙÅ ÆÁÊÌÙ ×ÁÛÅÇÏ ÐÏÒÔÁ ÐÏÓÔÏÑÎÎÏ ÍÅÎÑÀÔÓÑ ÐÏ
ÎÅÉÚ×ÅÓÔÎÙÍ ÐÒÉÞÉÎÁÍ ÂÅÚ ÉÚÍÅÎÅÎÉÑ ×ÅÒÓÉÊ ÓÏ ÓÔÏÒÏÎÙ Á×ÔÏÒÁ, ÏÓÔÁ£ÔÓÑ
ÔÏÌØËÏ ÐÏÍÅÓÔÉÔØ ÄÉÓÔÒÉÂÕÔÉ× ÎÁ ×ÁÛÕ ÄÏÍÁÛÎÀÀ Web-ÓÔÒÁÎÉÃÕ É ÕËÁÚÁÔØ
Å£ ÐÅÒ×ÏÊ × ÓÐÉÓËÅ MASTER_SITES. åÓÌÉ ÍÏÖÅÔÅ,
ÐÏÐÙÔÁÊÔÅÓØ ÄÏÇÏ×ÏÒÉÔØÓÑ Ó Á×ÔÏÒÏÍ ÐÏÒÔÁ Ï ÜÔÏÍ; ÜÔÏ ÄÅÊÓÔ×ÉÔÅÌØÎÏ
ÐÏÍÏÇÁÅÔ × ÄÏÓÔÉÖÅÎÉÉ ÎÅËÏÔÏÒÏÇÏ ÕÐÒÁ×ÌÅÎÉÑ ÉÓÈÏÄÎÙÍ ËÏÄÏÍ.
òÁÚÍÅÝÅÎÉÅ ÓÏÂÓÔ×ÅÎÎÏÊ ×ÅÒÓÉÉ ÐÏÍÏÖÅÔ ÉÚÂÅÖÁÔØ ÐÏÑ×ÌÅÎÉÑ ÏÛÉÂÏË Õ
ÐÏÌØÚÏ×ÁÔÅÌÅÊ ÔÉÐÁ checksum mismatch, Á
ÔÁËÖÅ ÕÍÅÎØÛÉÔ ÎÁÇÒÕÚËÕ ÎÁ ÌÀÄÅÊ, ÓÏÐÒÏ×ÏÖÄÁÀÝÉÈ ÎÁÛ FTP-ÓÅÒ×ÅÒ.
ôÁËÖÅ, ÅÓÌÉ Õ ÐÏÒÔÁ ÉÍÅÅÔÓÑ ÔÏÌØËÏ ÏÄÉÎ ÏÓÎÏ×ÎÏÊ ÓÅÒ×ÅÒ, ÔÏ
ÒÅËÏÍÅÎÄÕÅÔÓÑ ÐÏÍÅÓÔÉÔØ ÁÒÈÉ×ÎÕÀ ËÏÐÉÀ ÎÁ Ó×ÏÊ ÓÁÊÔ É ÕËÁÚÁÔØ ÅÇÏ ×
ÓÐÉÓËÅ MASTER_SITES ×ÔÏÒÙÍ.åÓÌÉ ×ÁÛÅÍÕ ÐÏÒÔÕ ÔÒÅÂÕÀÔÓÑ ÄÏÐÏÌÎÉÔÅÌØÎÙÅ `ÐÁÔÞÉ', ÄÏÓÔÕÐÎÙÅ
× éÎÔÅÒÎÅÔ, ÓËÁÞÁÊÔÅ ÔÁËÖÅ É ÉÈ, ÐÏÍÅÓÔÉ× × ËÁÔÁÌÏÇ
DISTDIR. îÅ ×ÏÌÎÕÊÔÅÓØ, ÅÓÌÉ ÏÎÉ ÎÁÈÏÄÑÔÓÑ ÎÅ
ÎÁ ÔÏÍ ÖÅ ÓÁÊÔÅ, ÏÔËÕÄÁ ×ÚÑÔ ÄÉÓÔÒÉÂÕÔÉ×ÎÙÊ ÁÒÈÉ×, ÍÙ ÕÍÅÅÍ
ÏÂÒÁÂÁÔÙ×ÁÔØ ÔÁËÉÅ ÓÉÔÕÁÃÉÉ (ÓÍÏÔÒÉÔÅ ÏÐÉÓÁÎÉÅ PATCHFILES ÎÉÖÅ).íÏÄÉÆÉËÁÃÉÑ ÐÏÒÔÁòÁÓÐÁËÕÊÔÅ ËÏÐÉÀ ÄÉÓÔÒÉÂÕÔÉ×ÎÏÇÏ ÆÁÊÌÁ × ÏÔÄÅÌØÎÙÊ ËÁÔÁÌÏÇ É
×ÎÅÓÉÔÅ ÉÚÍÅÎÅÎÉÑ, ËÏÔÏÒÙÅ ÎÅÏÂÈÏÄÉÍÙ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÐÏÒÔ
ËÏÍÐÉÌÉÒÏ×ÁÌÓÑ ÎÏÒÍÁÌØÎÏ × ÔÅËÕÝÅÊ ×ÅÒÓÉÉ &os;.
ôÝÁÔÅÌØÎÏ ÏÔÓÌÅÖÉ×ÁÊÔÅ ×ÓÅ, ÞÔÏ ×Ù ÄÅÌÁÅÔÅ,
ÜÔÏÔ ÐÒÏÃÅÓÓ ×ÁÍ ÐÒÅÄÓÔÏÉÔ Á×ÔÏÍÁÔÉÚÉÒÏ×ÁÔØ. ÷ÓÅ, ×ËÌÀÞÁÑ ÕÄÁÌÅÎÉÅ,
ÄÏÂÁ×ÌÅÎÉÅ ÉÌÉ ÍÏÄÉÆÉËÁÃÉÀ × ÆÁÊÌÁÈ ÄÏÌÖÎÙ ÂÕÄÕÔ ×ÙÐÏÌÎÑÔØÓÑ
Á×ÔÏÍÁÔÉÞÅÓËÉ Ó ÐÏÍÏÝØÀ ÓËÒÉÐÔÏ× ÉÌÉ ÆÁÊÌÏ× ÐÁÔÞÅÊ, ËÏÇÄÁ ×Ù
ÚÁ×ÅÒÛÉÔÅ ÒÁÂÏÔÕ ÎÁÄ ÐÏÒÔÏÍ.åÓÌÉ ×ÁÛÅÍÕ ÐÏÒÔÕ ×Ï ×ÒÅÍÑ ËÏÍÐÉÌÑÃÉÉ, ÕÓÔÁÎÏ×ËÉ É ÎÁÓÔÒÏÊËÉ
ÔÒÅÂÕÅÔÓÑ ÄÏ×ÏÌØÎÏ ÍÎÏÇÏ ×ÚÁÉÍÏÄÅÊÓÔ×Ï×ÁÔØ Ó ÐÏÌØÚÏ×ÁÔÅÌÅÍ, ÔÏ
ÐÏÓÍÏÔÒÉÔÅ ÎÁ ÏÄÉÎ ÉÚ ËÌÁÓÓÉÞÅÓËÉÈ ÓËÒÉÐÔÏ×
Configure ìÜÒÒÉ õÏÌÌÁ (Larry Wall) É
ÓÄÅÌÁÊÔÅ ÓÁÍÉ ÞÔÏ-ÌÉÂÏ ÐÏÄÏÂÎÏÅ. ðÒÅÄÎÁÚÎÁÞÅÎÉÅ ÎÏ×ÏÊ ËÏÌÌÅËÃÉÉ
ÐÏÒÔÏ× - ÜÔÏ ÓÄÅÌÁÔØ ËÁÖÄÏÅ ÐÒÉÌÏÖÅÎÉÅ × ÓÔÉÌÅ
plug-and-play ÎÁÓÔÏÌØËÏ, ÎÁÓËÏÌØËÏ ÜÔÏ ×ÏÏÂÝÅ ×ÏÚÍÏÖÎÏ
ÄÌÑ ËÏÎÅÞÎÏÇÏ ÐÏÌØÚÏ×ÁÔÅÌÑ ÐÒÉ ÍÉÎÉÍÁÌØÎÏÍ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ÄÉÓËÏ×ÏÇÏ
ÐÒÏÓÔÒÁÎÓÔ×Á.åÓÌÉ Ñ×ÎÏ ÎÅ ÕËÁÚÁÎÏ ÏÂÒÁÔÎÏÅ, ÔÏ ÐÁÔÞÉ, ÓËÒÉÐÔÙ É ÄÒÕÇÉÅ
ÆÁÊÌÙ, ËÏÔÏÒÙÅ ×Ù ÓÏÚÄÁÌÉ É ÐÒÅÄÏÓÔÁ×ÉÌÉ ÄÌÑ ëÏÌÌÅËÃÉÉ ðÏÒÔÏ×
&os;, ÎÅÑ×ÎÏ ÐÏÄÐÁÄÁÀÔ ÐÏÄ ÓÔÁÎÄÁÒÔÎÙÅ ÕÓÌÏ×ÉÑ ÌÉÃÅÎÚÉÉ
BSD.óÏÚÄÁÎÉÅ ÐÁÔÞÅÊæÁÊÌÙ, ËÏÔÏÒÙÅ ÄÏÂÁ×ÌÑÌÉÓØ ÉÌÉ ÉÚÍÅÎÑÌÉÓØ × ÐÒÏÃÅÓÓÅ ÓÏÚÄÁÎÉÑ
ÐÏÒÔÁ, ÍÏÇÕÔ ÂÙÔØ ×ÙÑ×ÌÅÎÙ ×ÙÚÏ×ÏÍ ÐÒÏÇÒÁÍÍÙ &man.diff.1;,
Á ÒÅÚÕÌØÔÁÔ ÒÁÂÏÔÙ ÜÔÏÊ ÐÒÏÇÒÁÍÍÙ ÍÏÖÅÔ ÂÙÔØ × ÄÁÌØÎÅÊÛÅÍ ÐÅÒÅÄÁÎ
ÐÒÏÇÒÁÍÍÅ &man.patch.1;. ëÁÖÄÙÊ ÐÁÔÞ, ËÏÔÏÒÙÊ ×Ù ÓÏÂÉÒÁÅÔÅÓØ
ÐÒÉÍÅÎÉÔØ, ÄÏÌÖÅÎ ÂÙÔØ ÓÏÈÒÁÎÅÎ × ÆÁÊÌ Ó ÉÍÅÎÅÍ
patch-*, ÇÄÅ
* ÏÂÏÚÎÁÞÁÅÔ ÐÕÔØ Ë ÆÁÊÌÕ, Ë ËÏÔÏÒÏÍÕ
ÐÒÉÍÅÎÑÅÔÓÑ ÐÁÔÞ, ÔÁËÏÊ ËÁË
patch-Imakefile ÉÌÉ
patch-src-config.h. üÔÉ ÆÁÊÌÙ ÄÏÌÖÎÙ ÎÁÈÏÄÉÔØÓÑ ×
ËÁÔÁÌÏÇÅ PATCHDIR
(ËÁË ÐÒÁ×ÉÌÏ, ÜÔÏ files/),
ÏÔËÕÄÁ ÏÎÉ ÂÕÄÕÔ ×ÚÑÔÙ Á×ÔÏÍÁÔÉÞÅÓËÉ. ÷ÓÅ ÐÁÔÞÉ ÏÂÑÚÁÎÙ ÂÙÔØ ÓÄÅÌÁÎÙ
ÏÔÎÏÓÉÔÅÌØÎÏ ËÁÔÁÌÏÇÁ WRKSRC (ËÁË ÐÒÁ×ÉÌÏ,
ÜÔÏ ËÁÔÁÌÏÇ, × ËÏÔÏÒÙÊ ÒÁÓÐÁËÏ×Ù×ÁÅÔÓÑ ÉÓÈÏÄÎÙÊ ÁÒÈÉ× É ÇÄÅ ÂÕÄÅÔ
×ÙÐÏÌÎÑÔØÓÑ ÐÏÓÔÒÏÅÎÉÅ). äÌÑ ÕÐÒÏÝÅÎÉÑ ×ÎÅÓÅÎÉÑ ÉÚÍÅÎÅÎÉÊ É
ÏÂÎÏ×ÌÅÎÉÊ ×Ù ÄÏÌÖÎÙ ÉÚÂÅÇÁÔØ ÎÁÌÉÞÉÑ ÂÏÌÅÅ ÞÅÍ ÏÄÎÏÇÏ ÐÁÔÞÁ ÄÌÑ
ÏÄÎÏÇÏ É ÔÏÇÏ ÖÅ ÆÁÊÌÁ (ÎÁÐÒÉÍÅÒ, ÐÁÔÞÅÊ
patch-file É patch-file2,
ÏÂÁ ÍÅÎÑÀÝÉÈ ÆÁÊÌ WRKSRC/foobar.c).
ïÂÒÁÔÉÔÅ ×ÎÉÍÁÎÉÅ, ÞÔÏ ÅÓÌÉ ÐÕÔØ Ë ÉÚÍÅÎÑÅÍÏÍÕ ÆÁÊÌÕ ÓÏÄÅÒÖÉÔ ÓÉÍ×ÏÌ
ÐÏÄÞÅÒËÉ×ÁÎÉÑ (_), ÔÏ ÐÁÔÞ ÄÏÌÖÅÎ ÓÏÄÅÒÖÁÔØ × Ó×ÏÅÍ
ÉÍÅÎÉ Ä×Á ÐÏÄÞÅÒËÉ×ÁÎÉÑ ×ÍÅÓÔÏ ÏÄÎÏÇÏ. îÁÐÒÉÍÅÒ, ÄÌÑ ÐÒÉÍÅÎÅÎÉÑ ÐÁÔÞÁ
ÎÁ ÆÁÊÌ Ó ÉÍÅÎÅÍ src/freeglut_joystick.c
ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÊ ÐÁÔÞ ÓÌÅÄÕÅÔ ÎÁÚ×ÁÔØ
patch-src-freeglut__joystick.c.ðÏÖÁÌÕÊÓÔÁ, ÉÓÐÏÌØÚÕÊÔÅ ÄÌÑ ÉÍÅÎÏ×ÁÎÉÑ ×ÁÛÉÈ ÐÁÔÞÅÊ ÔÏÌØËÏ ÓÉÍ×ÏÌÙ
[-+._a-zA-Z0-9]. îÅ ÉÓÐÏÌØÚÕÊÔÅ ÌÀÂÙÅ ÄÒÕÇÉÅ
ÓÉÍ×ÏÌÙ, ËÒÏÍÅ ÜÔÉÈ. îÅ ÎÁÚÙ×ÁÊÔÅ ×ÁÛÉ ÐÁÔÞÉ ËÁË
patch-aa ÉÌÉ patch-ab É
ÔÁË ÄÁÌÅÅ, ×ÓÅÇÄÁ ÓÓÙÌÁÊÔÅÓØ ÎÁ ÐÕÔØ É ÎÁÚ×ÁÎÉÅ ÆÁÊÌÁ × ÎÁÚ×ÁÎÉÑÈ
ÐÁÔÞÅÊ.îÅ ÐÏÍÅÝÁÊÔÅ ÓÔÒÏËÉ RCS × ÐÁÔÞÉ. SVN ÂÕÄÅÔ ÉÚÍÅÎÑÔØ ÉÈ ÐÒÉ
ÐÏÍÅÝÅÎÉÉ ÆÁÊÌÏ× × ÄÅÒÅ×Ï ÐÏÒÔÏ×, É ËÏÇÄÁ ÍÙ ÂÕÄÅÍ ÉÈ ÏÔÔÕÄÁ
ÉÚ×ÌÅËÁÔØ, ÏÎÉ ÂÕÄÕÔ ÕÖÅ ÄÒÕÇÉÅ, ÐÏÜÔÏÍÕ ÐÒÉÍÅÎÅÎÉÅ ÐÁÔÞÅÊ
ÏËÏÎÞÉÔÓÑ ÎÅÕÄÁÞÅÊ. óÔÒÏÞËÉ RCS ÐÒÅÄ×ÁÒÑÀÔÓÑ ÚÎÁËÏÍ ÄÏÌÌÁÒÁ
($), É ÏÂÙÞÎÏ ÎÁÞÉÎÁÀÔÓÑ Ó
$Id ÉÌÉ
$RCS.éÓÐÏÌØÚÏ×ÁÎÉÅ ÐÁÒÁÍÅÔÒÁ ÒÅËÕÒÓÉÉ () Ó ËÏÍÁÎÄÏÊ
&man.diff.1; ÄÌÑ ÇÅÎÅÒÁÃÉÉ ÐÁÔÞÅÊ - ÜÔÏ ÈÏÒÏÛÏ, ÎÏ ×Ó£ ÖÅ,
ÐÏÖÁÌÕÊÓÔÁ, ÓÍÏÔÒÉÔÅ ÎÁ ÐÏÌÕÞÁÀÝÉÅÓÑ ÐÁÔÞÉ, ÞÔÏÂÙ ÕÂÅÄÉÔØÓÑ ×
ÏÔÓÕÔÓÔ×ÉÉ ÎÅÎÕÖÎÏÇÏ ÍÕÓÏÒÁ. ÷ ÞÁÓÔÎÏÓÔÉ, diff-ÒÁÚÎÉà ÍÅÖÄÕ Ä×ÕÍÑ
ÒÅÚÅÒ×ÎÙÍÉ ËÏÐÉÑÍÉ ÆÁÊÌÏ×, ÆÁÊÌÙ Makefile, ËÏÇÄÁ
ËÁË ÐÏÒÔ ÉÓÐÏÌØÚÕÅÔ Imake ÉÌÉ
GNU-×ÅÒÓÉÀ ÐÒÏÇÒÁÍÍÙ configure, É ÔÁË ÄÁÌÅÅ,
ÎÅ ÎÕÖÎÙ, É ÄÏÌÖÎÙ ÂÙÔØ ÕÄÁÌÅÎÙ. åÓÌÉ ×Ù ÏÔÒÅÄÁËÔÉÒÏ×ÁÌÉ ÆÁÊÌ
configure.in É ÚÁÐÕÓÔÉÌÉ
autoconf ÄÌÑ ÐÅÒÅÇÅÎÅÒÁÃÉÉ
configure, ÎÅ ÎÕÖÎÏ ×ËÌÀÞÁÔØ ÆÁÊÌÙ diff ÄÌÑ
configure (ÏÎÉ ÞÁÓÔÅÎØËÏ ×ÙÒÁÓÔÁÀÔ ÄÏ ÎÅÓËÏÌØËÉÈ
ÔÙÓÑÞ ÓÔÒÏË!); ÚÁÄÁÊÔÅ USE_AUTOTOOLS=autoconf:261 É
×ËÌÀÞÉÔÅ diff-ÆÁÊÌ ÄÌÑ configure.in.ôÁËÖÅ ÐÏÓÔÁÒÁÊÔÅÓØ ÍÉÎÉÍÉÚÉÒÏ×ÁÔØ × ×ÁÛÉÈ ÐÁÔÞÁÈ ÏÂßÅÍ
ÎÅÆÕÎËÃÉÏÎÁÌØÎÙÈ ÉÚÍÅÎÅÎÉÊ Ó ÐÕÓÔÙÍÉ ÓÉÍ×ÏÌÁÍÉ. ÷ ÍÉÒÅ ïÔËÒÙÔÏÇÏ
éÓÈÏÄÎÏÇÏ ëÏÄÁ Ñ×ÌÑÅÔÓÑ ÒÁÓÐÒÏÓÔÒÁÎÅÎÎÙÍ ÓÏ×ÍÅÓÔÎÏÅ ÉÓÐÏÌØÚÏ×ÁÎÉÅ
ÐÒÏÅËÔÁÍÉ ÂÏÌØÛÉÈ ÏÂßÅÍÏ× ËÏÄÏ×ÏÊ ÂÁÚÙ, ÎÏ Ó ÒÁÚÌÉÞÎÙÍÉ ÓÔÉÌÑÍÉ
É ÐÒÁ×ÉÌÁÍÉ ÏÔÓÔÕÐÏ×. åÓÌÉ ×Ù ÂÅÒÅÔÅ ÒÁÂÏÔÁÀÝÕÀ ÆÕÎËÃÉÏÎÁÌØÎÕÀ
ÞÁÓÔØ ÉÚ ÏÄÎÏÇÏ ÐÒÏÅËÔÁ ÄÌÑ ÉÓÐÒÁ×ÌÅÎÉÑ ÐÏÈÏÖÅÊ ÏÂÌÁÓÔÉ × ÄÒÕÇÏÍ,
ÔÏ ÂÕÄØÔÅ ÁËËÕÒÁÔÎÙ, ÐÏÖÁÌÕÊÓÔÁ: ÐÏÌÕÞÁÅÍÙÊ ÏÄÎÏÓÔÒÏÞÎÙÊ ÐÁÔÞ
ÍÏÖÅÔ ÂÙÔØ ÐÏÌÏÎ ÎÅÆÕÎËÃÉÏÎÁÌØÎÙÈ ÉÚÍÅÎÅÎÉÊ. üÔÏ ÎÅ ÔÏÌØËÏ
Õ×ÅÌÉÞÉ×ÁÅÔ ÒÁÚÍÅÒ ÒÅÐÏÚÉÔÏÒÉÑ SVN, ÎÏ ÔÁËÖÅ ÕÓÌÏÖÎÑÅÔ ÐÏÉÓË ÔÏÇÏ,
ÞÔÏ ËÏÎËÒÅÔÎÏ ×ÙÚ×ÁÌÏ ÐÒÏÂÌÅÍÕ É ÞÔÏ ×Ù ×ÏÏÂÝÅ ÉÚÍÅÎÉÌÉ.åÓÌÉ ×ÁÍ ÎÕÖÎÏ ÕÄÁÌÉÔØ ÆÁÊÌ, ÔÏ ×Ù ÍÏÖÅÔÅ ÓÄÅÌÁÔØ ÜÔÏ ÐÒÉ
×ÙÐÏÌÎÅÎÉÉ ÃÅÌÉ post-extract ×ÍÅÓÔÏ ÔÏÇÏ,
ÞÔÏÂÙ ÏÆÏÒÍÌÑÔØ ÜÔÏ ËÁË ÞÁÓÔØ ÐÁÔÞÁ.ðÒÏÓÔÙÅ ÐÅÒÅÍÅÝÅÎÉÑ ÍÏÇÕÔ ÂÙÔØ ×ÙÐÏÌÎÅÎÙ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ÉÚ
Makefile ÐÏÒÔÁ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ &man.sed.1; ×
ÒÅÖÉÍÅ in-place. üÔÏ ÏÞÅÎØ ÕÄÏÂÎÏ, ËÏÇÄÁ ×ÁÍ ÎÕÖÎÏ ÐÒÉÍÅÎÉÔØ ÐÁÔÞ
ÎÁ ÚÎÁÞÅÎÉÅ ÐÅÒÅÍÅÎÎÏÊ. ðÒÉÍÅÒ:post-patch:
@${REINPLACE_CMD} -e 's|for Linux|for FreeBSD|g' ${WRKSRC}/README
@${REINPLACE_CMD} -e 's|-pthread|${PTHREAD_LIBS}|' ${WRKSRC}/configureäÏ×ÏÌØÎÏ ÞÁÓÔÏ ÂÙ×ÁÀÔ ÓÉÔÕÁÃÉÉ, ËÏÇÄÁ ÐÏÒÔÉÒÕÅÍÏÅ ÐÒÏÇÒÁÍÍÎÏÅ
ÏÂÅÓÐÅÞÅÎÉÅ, ÏÓÏÂÅÎÎÏ ÅÓÌÉ ÏÓÎÏ×ÎÏÊ ÐÌÁÔÆÏÒÍÏÊ ÒÁÚÒÁÂÏÔËÉ Ñ×ÌÑÅÔÓÑ
&windows;, ÉÓÐÏÌØÚÕÅÔ ËÏÎ×ÅÎÃÉÀ CR/LF ÄÌÑ ÂÏÌØÛÉÎÓÔ×Á Ó×ÏÉÈ ÉÓÈÏÄÎÙÈ
ÆÁÊÌÏ×. üÔÏ ÍÏÖÅÔ ÂÙÔØ ÐÒÉÞÉÎÏÊ ÐÒÏÂÌÅÍ Ó ÄÁÌØÎÅÊÛÅÊ ÕÐÁËÏ×ËÏÊ,
ÐÒÅÄÕÐÒÅÖÄÅÎÉÑÍÉ ËÏÍÐÉÌÑÔÏÒÁ, ×ÙÐÏÌÎÅÎÉÅÍ ÓËÒÉÐÔÏ×
(/bin/sh^M not found) É ÔÁË ÄÁÌÅÅ. äÌÑ ÂÙÓÔÒÏÊ
ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ ×ÓÅÈ ÆÁÊÌÏ× ÉÚ CR/LF ÐÒÏÓÔÏ × LF ÄÏÂÁרÔÅ
USE_DOS2UNIX=yes × Makefile
ÐÏÒÔÁ. íÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎ ÐÅÒÅÞÅÎØ ÐÒÅÏÂÒÁÚÕÅÍÙÈ ÆÁÊÌÏ×:USE_DOS2UNIX= util.c util.håÓÌÉ ×Ù ÈÏÔÉÔÅ ÐÒÅÏÂÒÁÚÏ×ÁÔØ ÇÒÕÐÐÕ ÆÁÊÌÏ× × ÒÁÚÎÙÈ ÐÏÄËÁÔÁÌÏÇÁÈ,
ÔÏ ÄÌÑ ÜÔÏÇÏ ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ DOS2UNIX_REGEX.
åÇÏ ÐÁÒÁÍÅÔÒÏÍ Ñ×ÌÑÅÔÓÑ ÒÅÇÕÌÑÒÎÏÅ ×ÙÒÁÖÅÎÉÅ, ÓÏ×ÍÅÓÔÉÍÏÅ Ó
find. ðÏÄÒÏÂÎÅÅ Ï ÆÏÒÍÁÔÅ × &man.re.format.7;.
üÔÁ ÏÐÃÉÑ ÉÓÐÏÌØÚÕÅÔÓÑ ÄÌÑ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ ×ÓÅÈ ÆÁÊÌÏ× ÚÁÄÁÎÎÏÇÏ
ÒÁÓÛÉÒÅÎÉÑ, Ë ÐÒÉÍÅÒÕ ×ÓÅÈ ÉÓÈÏÄÎÙÈ ÆÁÊÌÏ×, ÎÅ ÚÁÔÒÁÇÉ×ÁÑ Ä×ÏÉÞÎÙÅ
ÆÁÊÌÙ:USE_DOS2UNIX= yes
DOS2UNIX_REGEX= .*\.(c|cpp|h)åÓÌÉ ×Ù ÈÏÔÉÔÅ ÓÏÚÄÁÔØ ÐÁÔÞ ÎÁ ÏÓÎÏ×Å ÓÕÝÅÓÔ×ÕÀÝÅÇÏ ÆÁÊÌÁ, ÔÏ ×Ù
ÍÏÖÅÔÅ ÅÇÏ ÓËÏÐÉÒÏ×ÁÔØ Ó ÒÁÓÛÉÒÅÎÉÅÍ .orig, Á
ÚÁÔÅÍ ÉÚÍÅÎÉÔØ ÉÓÈÏÄÎÙÊ. ãÅÌØmakepatch
ÚÁÐÉÛÅÔ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÊ ÆÁÊÌ Ó ÐÁÔÞÅÍ × ËÁÔÁÌÏÇ
files ÄÁÎÎÏÇÏ ÐÏÒÔÁ.ëÏÎÆÉÇÕÒÉÒÏ×ÁÎÉÅðÏÍÅÓÔÉÔÅ ×ÓÅ ÄÏÐÏÌÎÉÔÅÌØÎÙÅ ËÏÍÁÎÄÙ, ÔÒÅÂÕÅÍÙÅ ÄÌÑ ÎÁÓÔÒÏÊËÉ,
× ×ÁÛ ÓËÒÉÐÔ configure É ÓÏÈÒÁÎÉÔÅ ÅÇÏ ×
ÐÏÄËÁÔÁÌÏÇÅ scripts. ëÁË ÏÔÍÅÞÅÎÏ ×ÙÛÅ, ×Ù
ÍÏÖÅÔÅ ÓÄÅÌÁÔØ ÜÔÏ ÃÅÌÑÍÉ × ÆÁÊÌÅ Makefile
É/ÉÌÉ ÓËÒÉÐÔÁÍÉ Ó ÉÍÅÎÁÍÉ pre-configure ÉÌÉ
post-configure.ïÂÒÁÂÏÔËÁ ÐÏÌØÚÏ×ÁÔÅÌØÓËÏÇÏ ××ÏÄÁåÓÌÉ ÄÌÑ ÐÏÓÔÒÏÅÎÉÑ, ËÏÎÆÉÇÕÒÁÃÉÉ ÉÌÉ ÕÓÔÁÎÏ×ËÉ ×ÁÛÅÇÏ ÐÏÒÔÁ
ÔÒÅÂÕÅÔÓÑ ÎÅËÏÔÏÒÙÊ ××ÏÄ ÓÏ ÓÔÏÒÏÎÙ ÐÏÌØÚÏ×ÁÔÅÌÑ, ÔÏ ×Ù ÄÏÌÖÎÙ ÚÁÄÁÔØ
ÐÅÒÅÍÅÎÎÕÀ IS_INTERACTIVE × ×ÁÛÅÍ ÆÁÊÌÅ
Makefile. ÷ ÓÌÕÞÁÅ ÎÏÞÎÏÇÏ
ÐÏÓÔÒÏÅÎÉÑ ÜÔÏ ÐÏÚ×ÏÌÉÔ ÐÒÏÐÕÓÔÉÔØ
×ÁÛ ÐÏÒÔ, ÅÓÌÉ ÐÏÌØÚÏ×ÁÔÅÌØ × Ó×ÏÅÍ ÏËÒÕÖÅÎÉÉ ÚÁÄÁÌ ÐÅÒÅÍÅÎÎÕÀ
BATCH (É ÅÓÌÉ ÐÏÌØÚÏ×ÁÔÅÌØ ÕÓÔÁÎÏ×ÉÌ ÐÅÒÅÍÅÎÎÕÀ
INTERACTIVE, ÔÏ ÂÕÄÕÔ ÓÔÒÏÉÔØÓÑ
ÔÏÌØËÏ ÐÏÒÔÙ, ËÏÔÏÒÙÅ ÔÒÅÂÕÀÔ ×ÚÁÉÍÏÄÅÊÓÔ×ÉÑ
Ó ÐÏÌØÚÏ×ÁÔÅÌÅÍ. üÔÏ ÓÜËÏÎÏÍÉÔ ÚÎÁÞÉÔÅÌØÎÏÅ ËÏÌÉÞÅÓÔ×Ï ×ÒÅÍÅÎÉ ÎÁ
ÞÁÓÔÉ ÍÁÛÉÎ, ËÏÔÏÒÙÅ ÐÏÓÔÏÑÎÎÏ ÓÔÒÏÑÔ ÐÏÒÔÙ (ÓÍÏÔÒÉÔÅ ÎÉÖÅ).ðÒÉ ÎÁÌÉÞÉÉ ÒÁÚÕÍÎÙÈ ÏÔ×ÅÔÏ× ÎÁ ÚÁÄÁ×ÁÅÍÙÅ ×ÏÐÒÏÓÙ, ÐÏÄÈÏÄÑÝÉÈ ÐÏ
ÕÍÏÌÞÁÎÉÀ, ÔÁËÖÅ ÒÅËÏÍÅÎÄÕÅÔÓÑ ÐÒÏ×ÅÒÑÔØ ÐÅÒÅÍÅÎÎÕÀ
PACKAGE_BUILDING É ×ÙËÌÀÞÁÔØ ÉÎÔÅÒÁËÔÉ×ÎÙÊ ÓËÒÉÐÔ,
ÅÓÌÉ ÏÎ ÅÓÔØ. üÔÏ ÐÏÚ×ÏÌÉÔ ÎÁÍ ÓÔÒÏÉÔØ ÐÁËÅÔÙ ÄÌÑ ÐÏÍÅÝÅÎÉÑ ÎÁ
ËÏÍÐÁËÔ-ÄÉÓËÉ É FTP-ÓÅÒ×ÅÒÙ.îÁÓÔÒÏÊËÁ ÆÁÊÌÁ MakefileîÁÓÔÒÏÊËÁ ÆÁÊÌÁ Makefile ÄÏÓÔÁÔÏÞÎÏ ÐÒÏÓÔÁ, É
ÍÙ ÓÎÏ×Á ÐÒÅÄÐÏÌÁÇÁÅÍ, ÞÔÏ ÐÅÒÅÄ ÔÅÍ, ËÁË ÎÁÞÁÔØ, ×Ù ÐÏÓÍÏÔÒÉÔÅ ÎÁ
ÓÕÝÅÓÔ×ÕÀÝÉÅ ÐÒÉÍÅÒÙ. ë ÔÏÍÕ ÖÅ × ÜÔÏÍ ÒÕËÏ×ÏÄÓÔ×Å ÉÍÅÅÔÓÑ ÐÒÉÍÅÒÎÙÊ Makefile, ÔÁË ÞÔÏ ×ÚÇÌÑÎÉÔÅ
ÎÁ ÎÅÇÏ É, ÐÏÖÁÌÕÊÓÔÁ, ÓÌÅÄÕÊÔÅ ÐÏÒÑÄËÕ ÐÅÒÅÍÅÎÎÙÈ É ÒÁÚÄÅÌÏ× × ÜÔÏÍ
ÏÂÒÁÚÃÅ, ÞÔÏÂÙ ÏÂÌÅÇÞÉÔØ ÞÔÅÎÉÅ ×ÁÛÅÇÏ ÐÏÒÔÁ ÄÒÕÇÉÍÉ ÌÀÄØÍÉ.éÔÁË, ÒÁÓÐÏÌÏÖÉÍ ÒÅÛÁÅÍÙÅ ÚÁÄÁÞÉ × ÐÏÒÑÄËÅ ÉÈ ×ÏÚÎÉËÎÏ×ÅÎÉÑ ÐÒÉ
ÓÏÚÄÁÎÉÉ ×ÁÛÅÇÏ ÎÏ×ÏÇÏ ÆÁÊÌÁ Makefile:ïÒÉÇÉÎÁÌØÎÙÅ ÉÓÈÏÄÎÙÊ ËÏÄîÁÈÏÄÉÔÓÑ ÌÉ ÏÎ × ËÁÔÁÌÏÇÅ DISTDIR × ×ÉÄÅ
ÓÔÁÎÄÁÒÔÎÏÇÏ ÕÐÁËÏ×ÁÎÎÏÇÏ ÁÒÈÉ×ÁÔÏÒÏÍ gzip
tar-ÁÒÈÉ×Á Ó ÉÍÅÎÅÍ ÔÉÐÁ
foozolix-1.2.tar.gz? åÓÌÉ ÜÔÏ ÔÁË,
ÍÏÖÎÏ ÐÅÒÅÊÔÉ Ë ÓÌÅÄÕÀÝÅÍÕ ÛÁÇÕ. åÓÌÉ ÎÅÔ, ÔÏ ×Ù ÄÏÌÖÎÙ ÐÏÐÙÔÁÔØÓÑ
ÐÅÒÅÏÐÒÅÄÅÌÉÔØ ÎÅËÏÔÏÒÙÅ ÉÚ ÐÅÒÅÍÅÎÎÙÈ
DISTVERSION, DISTNAME,
EXTRACT_CMD,
EXTRACT_BEFORE_ARGS,
EXTRACT_AFTER_ARGS,
EXTRACT_SUFX ÉÌÉ DISTFILES ×
ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ÔÏÇÏ, ÎÁÓËÏÌØËÏ ÎÅÏÂÙÞÅÎ ÆÏÒÍÁÔ ÄÉÓÔÒÉÂÕÔÉ×ÎÏÇÏ
ÆÁÊÌÁ.÷ ÈÕÄÛÅÍ ÓÌÕÞÁÅ ×Ù ÍÏÖÅÔÅ ÐÒÏÓÔÏ ÏÐÒÅÄÅÌÉÔØ Ó×ÏÀ ÓÏÂÓÔ×ÅÎÎÕÀ ÃÅÌØ
do-extract ÄÌÑ ÐÅÒÅÏÐÒÅÄÅÌÅÎÉÑ ÄÅÊÓÔ×ÉÊ ÐÏ
ÕÍÏÌÞÁÎÉÀ, ÈÏÔÑ Ë ÜÔÏÍÕ ÎÕÖÎÏ ÂÕÄÅÔ ÐÒÉÂÅÇÁÔØ × ÏÞÅÎØ ÒÅÄËÉÈ ÓÌÕÞÁÑÈ,
ÅÓÌÉ ×ÏÏÂÝÅ ÐÒÉÄ£ÔÓÑ.éÍÅÎÏ×ÁÎÉÅ÷ ÐÅÒ×ÏÊ ÞÁÓÔÉ Makefile ÐÏÒÔÁ ÅÍÕ ÄÁ£ÔÓÑ
ÎÁÚ×ÁÎÉÅ, ÕËÁÚÙ×ÁÅÔÓÑ ÅÇÏ ÎÏÍÅÒ ×ÅÒÓÉÉ É ÐÒÉÎÁÄÌÅÖÎÏÓÔØ Ë ÐÒÁ×ÉÌØÎÏÊ
ËÁÔÅÇÏÒÉÉ.PORTNAME É
PORTVERSION÷ ÐÅÒÅÍÅÎÎÏÊ PORTNAME ×Ù ÄÏÌÖÎÙ ÕËÁÚÁÔØ
ÏÓÎÏ×ÎÕÀ ÞÁÓÔØ ÉÍÅÎÉ ×ÁÛÅÇÏ ÐÏÒÔÁ, Á × ÐÅÒÅÍÅÎÎÏÊ
PORTVERSION - ÎÏÍÅÒ ×ÅÒÓÉÉ.PORTREVISION É
PORTEPOCHPORTREVISIONðÅÒÅÍÅÎÎÁÑ PORTREVISION ÐÒÅÄÓÔÁ×ÌÑÅÔ ÓÏÂÏÊ
ÍÏÎÏÔÏÎÎÏ Õ×ÅÌÉÞÉ×ÁÀÝÅÅÓÑ ÞÉÓÌÏ, ËÏÔÏÒÏÅ ÏÂÎÕÌÑÅÔÓÑ ÐÒÉ ËÁÖÄÏÍ
Õ×ÅÌÉÞÅÎÉÉ ÚÎÁÞÅÎÉÑ ÐÅÒÅÍÅÎÎÏÊ PORTVERSION (ÔÏ
ÅÓÔØ ËÁÖÄÙÊ ÒÁÚ, ËÏÇÄÁ ÓÏÚÄÁÔÅÌÑÍÉ ×ÙÐÕÓËÁÅÔÓÑ ÎÏ×ÙÊ ÏÆÉÃÉÁÌØÎÙÊ
ÒÅÌÉÚ), É ÄÏÂÁ×ÌÑÅÔÓÑ Ë ÉÍÅÎÉ ÐÁËÅÔÁ, ÅÓÌÉ ÏÎÏ ÎÅ ÒÁ×ÎÏ ÎÕÌÀ.
éÚÍÅÎÅÎÉÑ × PORTREVISION ÉÓÐÏÌØÚÕÀÔÓÑ
Á×ÔÏÍÁÔÉÚÉÒÏ×ÁÎÎÙÍÉ ÉÎÓÔÒÕÍÅÎÔÁÍÉ (ÎÁÐÒÉÍÅÒ, &man.pkg.version.1;)
ÄÌÑ ÏÐÒÅÄÅÌÅÎÉÑ ÆÁËÔÁ ÐÏÑ×ÌÅÎÉÑ ÎÏ×ÏÇÏ ÐÁËÅÔÁ.úÎÁÞÅÎÉÅ PORTREVISION ÄÏÌÖÎÏ Õ×ÅÌÉÞÉ×ÁÔØÓÑ
ËÁÖÄÙÊ ÒÁÚ, ËÏÇÄÁ × ÐÏÒÔÅ FreeBSD ÄÅÌÁÀÔÓÑ ÉÚÍÅÎÅÎÉÑ, ËÏÔÏÒÙÅ
ÄÏÓÔÁÔÏÞÎÏ ÓÉÌØÎÏ ÚÁÔÒÁÇÉ×ÁÀÔ ÓÏÄÅÒÖÉÍÏÅ ÉÌÉ ÓÔÒÕËÔÕÒÕ
ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÇÏ ÐÁËÅÔÁ.ðÒÉÍÅÒÙ ÓÌÕÞÁÅ×, ËÏÇÄÁ ÚÎÁÞÅÎÉÅ PORTREVISION
ÄÏÌÖÎÏ ÂÙÔØ Õ×ÅÌÉÞÅÎÏ:äÏÂÁ×ÌÅÎÉÅ ÐÁÔÞÅÊ ÄÌÑ ÉÓÐÒÁ×ÌÅÎÉÑ ÕÑÚ×ÉÍÏÓÔÅÊ,
ÏÛÉÂÏË, ÉÌÉ ÄÏÂÁ×ÌÅÎÉÑ ÎÏ×ÏÊ ÆÕÎËÃÉÏÎÁÌØÎÏÓÔÉ × ÐÏÒÔ.éÚÍÅÎÅÎÉÑ × ÆÁÊÌÅ Makefile ÐÏÒÔÁ ÄÌÑ
×ËÌÀÞÅÎÉÑ É ×ÙËÌÀÞÅÎÉÑ ÐÁÒÁÍÅÔÒÏ×, ÏÐÒÅÄÅÌÑÅÍÙÈ ÐÒÉ ËÏÍÐÉÌÑÃÉÉ
ÐÁËÅÔÁ.éÚÍÅÎÅÎÉÑ × ÓÐÉÓËÅ ÕÐÁËÏ×ËÉ ÉÌÉ × ÐÏ×ÅÄÅÎÉÉ ÐÁËÅÔÁ ×Ï
×ÒÅÍÑ ÅÇÏ ÕÓÔÁÎÏ×ËÉ (ÎÁÐÒÉÍÅÒ, ÉÚÍÅÎÅÎÉÅ ÓËÒÉÐÔÁ, ÇÅÎÅÒÉÒÕÀÝÅÇÏ
ÎÁÞÁÌØÎÙÅ ÄÁÎÎÙÅ ÄÌÑ ÐÁËÅÔÁ, ÔÁËÉÅ, ËÁË ssh-ËÌÀÞÉ ÄÌÑ
ÈÏÓÔÁ).õ×ÅÌÉÞÅÎÉÅ ×ÅÒÓÉÉ ÄÉÎÁÍÉÞÅÓËÏÊ ÂÉÂÌÉÏÔÅËÉ, ÏÔ ËÏÔÏÒÏÊ
ÚÁ×ÉÓÉÔ ÐÏÒÔ (× ÜÔÏÍ ÓÌÕÞÁÅ ÔÏÔ, ËÔÏ ÐÏÐÙÔÁÅÔÓÑ ÕÓÔÁÎÏ×ÉÔØ
ÓÔÁÒÙÊ ÐÁËÅÔ ÐÏÓÌÅ ÕÓÔÁÎÏ×ËÉ ÂÏÌÅÅ ÎÏ×ÏÊ ×ÅÒÓÉÉ ÂÉÂÌÉÏÔÅËÉ,
ÎÅ ÓÍÏÖÅÔ ÜÔÏÇÏ ÓÄÅÌÁÔØ, ÐÏÔÏÍÕ ÞÔÏ ÐÒÉ ÜÔÏÍ ÂÕÄÅÔ ÄÅÌÁÔØÓÑ
ÐÏÉÓË ÓÔÁÒÏÊ ÂÉÂÌÉÏÔÅËÉ libfoo.x, Á ÎÅ libfoo.(x+1)).âÏÌØÛÉÅ ÆÕÎËÃÉÏÎÁÌØÎÙÅ ÉÚÍÅÎÅÎÉÑ × ÄÉÓÔÒÉÂÕÔÉ×ÎÏÍ ÆÁÊÌÅ
ÐÏÒÔÁ, ÐÒÏÉÓÈÏÄÑÝÉÅ ÂÅÚ ÏÂßÑ×ÌÅÎÉÊ, É ÐÒÉ×ÏÄÑÝÉÅ Ë ÂÏÌØÛÉÍ
ÉÚÍÅÎÅÎÉÑÍ, ÔÏ ÅÓÔØ ÉÚÍÅÎÅÎÉÑ × ÄÉÓÔÒÉÂÕÔÉ×Å ÔÒÅÂÕÀÔ
ËÏÒÒÅËÔÉÒÏ×ËÉ ÆÁÊÌÁ distinfo ÂÅÚ
ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÇÏ ÉÚÍÅÎÅÎÉÑ PORTVERSION,
ËÏÇÄÁ ËÁË ËÏÍÁÎÄÁ diff -ru ÍÅÖÄÕ ÎÏ×ÏÊ
É ÓÔÁÒÏÊ ×ÅÒÓÉÑÍÉ ÐÏËÁÚÙ×ÁÅÔ ÎÅÔÒÉ×ÉÁÌØÎÙÅ ÉÚÍÅÎÅÎÉÑ ×
ËÏÄÅ.ðÒÉÍÅÒÙ ÉÚÍÅÎÅÎÉÊ, ËÏÔÏÒÙÅ ÎÅ ÔÒÅÂÕÀÔ Õ×ÅÌÉÞÅÎÉÑ ÐÅÒÅÍÅÎÎÏÊ
PORTREVISION:éÚÍÅÎÅÎÉÑ ÓÔÉÌÑ × ÓËÅÌÅÔÅ ÐÏÒÔÁ ÂÅÚ ÆÕÎËÃÉÏÎÁÌØÎÙÈ ÉÚÍÅÎÅÎÉÊ
× ÐÁËÅÔÅ.éÚÍÅÎÅÎÉÑ × ÐÅÒÅÍÅÎÎÏÊ MASTER_SITES ÉÌÉ
ÄÒÕÇÉÅ ÆÕÎËÃÉÏÎÁÌØÎÙÅ ÉÚÍÅÎÅÎÉÑ ÐÏÒÔÁ, ËÏÔÏÒÙÅ ÎÅ ÚÁÔÒÁÇÉ×ÁÀÔ
ÐÏÌÕÞÁÀÝÅÇÏÓÑ ÐÁËÅÔÁ.ôÒÉ×ÉÁÌØÎÙÅ ÐÁÔÞÉ Ë ÄÉÓÔÒÉÂÕÔÉ×ÎÏÍÕ ÆÁÊÌÕ, ÔÁËÉÅ, ËÁË
ÉÓÐÒÁ×ÌÅÎÉÑ ÏÐÅÞÁÔÏË, ËÏÔÏÒÙÅ ÎÅ ÔÁË ÕÖ ×ÁÖÎÙ, ÞÔÏ ÐÏÌØÚÏ×ÁÔÅÌÉ
ÐÁËÅÔÁ ÄÏÌÖÎÙ ÏÚÁÂÏÔÉÔØÓÑ ÏÂÎÏ×ÌÅÎÉÅÍ.éÓÐÒÁ×ÌÅÎÉÑ, ËÁÓÁÀÝÉÅÓÑ ÜÔÁÐÁ ÐÏÓÔÒÏÅÎÉÑ, ËÏÔÏÒÙÅ ÄÅÌÁÀÔ
×ÏÚÍÏÖÎÙÍ ÐÏÓÔÒÏÅÎÉÅ ÐÁËÅÔÁ, ÅÓÌÉ ÒÁÎÅÅ ÜÔÏ ÂÙÌÏ ÎÅ×ÏÚÍÏÖÎÏ
ÓÄÅÌÁÔØ (ÐÏËÁ ÉÚÍÅÎÅÎÉÑ ÎÅ ÐÒÉ×ÏÄÑÔ Ë ÉÚÍÅÎÅÎÉÀ ÒÁÂÏÔÙ ÎÁ ÌÀÂÙÈ
ÄÒÕÇÉÈ ÐÌÁÔÆÏÒÍÁÈ, ÎÁ ËÏÔÏÒÙÈ ÐÏÒÔ ÒÁÎÅÅ ÓÔÒÏÉÌÓÑ). ôÁË ËÁË
PORTREVISION ÏÔÒÁÖÁÅÔ ÓÏÄÅÒÖÉÍÏÅ ÐÁËÅÔÁ,
ÔÏ, ÅÓÌÉ ÒÁÎÅÅ ÐÁËÅÔ ÎÅ ÓÔÒÏÉÌÓÑ, ÔÏ ÎÅÔ ÎÕÖÄÙ Õ×ÅÌÉÞÉ×ÁÔØ
PORTREVISION ÄÌÑ ÏÔÍÅÔËÉ ÉÚÍÅÎÅÎÉÑ.ðÒÁ×ÉÌÏ, ËÏÔÏÒÏÍÕ ÎÕÖÎÏ ÐÒÉÂÌÉÚÉÔÅÌØÎÏ ÓÌÅÄÏ×ÁÔØ, ÚÁËÌÀÞÁÅÔÓÑ ×
ÔÏÍ, ÞÔÏ ÎÕÖÎÏ ÓÐÒÁÛÉ×ÁÔØ ÓÅÂÑ, Ñ×ÌÑÅÔÓÑ ÌÉ ×ÎÏÓÉÍÏÅ × ÐÏÒÔ
ÉÚÍÅÎÅÎÉÅ ÔÁËÉÍ, ÞÔÏ ÏÔ ÎÅÇÏ ×ÙÉÇÒÁÀÔ ×ÓÅ (× ×ÉÄÅ
ÕÓÏ×ÅÒÛÅÎÓÔ×Ï×ÁÎÉÑ, ÉÓÐÒÁ×ÌÅÎÉÑ ÉÌÉ ÂÌÁÇÏÄÁÒÑ ÔÏÍÕ, ÞÔÏ ÎÏ×ÙÊ
ÐÁËÅÔ ÂÕÄÅÔ ×ÏÏÂÝÅ ÒÁÂÏÔÏÓÐÏÓÏÂÎÙÍ), É ÐÒÉÍÉÔÅ ×Ï ×ÎÉÍÁÎÉÅ ÔÏÔ
ÆÁËÔ, ÞÔÏ ÐÒÉ ÜÔÏÍ ×ÓÅ, ËÔÏ ÒÅÇÕÌÑÒÎÏ ÏÂÎÏ×ÌÑÀÔ Ó×Ï£ ÄÅÒÅ×Ï ÐÏÒÔÏ×,
ÂÕÄÕÔ ÏÂÑÚÁÎÙ ÜÔÏ ÓÄÅÌÁÔØ. åÓÌÉ ÜÔÏ ÔÁË, ÔÏ ÐÅÒÅÍÅÎÎÁÑ
PORTREVISION ÄÏÌÖÎÁ ÂÙÔØ Õ×ÅÌÉÞÅÎÁ.PORTEPOCH÷ÒÅÍÑ ÏÔ ×ÒÅÍÅÎÉ ÒÁÚÒÁÂÏÔÞÉË ÐÒÏÇÒÁÍÍÎÏÇÏ ÏÂÅÓÐÅÞÅÎÉÑ ÉÌÉ
ÓÏÚÄÁÔÅÌØ ÐÏÒÔÁ FreeBSD ÄÅÌÁÀÔ ÞÔÏ-ÔÏ ÎÅ ÔÁË É ×ÙÐÕÓËÁÀÔ ×ÅÒÓÉÀ
ÐÒÏÇÒÁÍÍÙ, ÎÏÍÅÒ ËÏÔÏÒÏÊ ÍÅÎØÛÅ ÐÒÅÄÙÄÕÝÅÊ ×ÅÒÓÉÉ. ðÒÉÍÅÒÏÍ ÜÔÏÇÏ
Ñ×ÌÑÅÔÓÑ ÐÏÒÔ, ÎÁÚ×ÁÎÉÅ ËÏÔÏÒÏÇÏ ÍÅÎÑÅÔÓÑ Ó foo-20000801 ÎÁ foo-1.0
(ÉÚÎÁÞÁÌØÎÏ ÜÔÏ ÎÅ ÓÞÉÔÁÌÏÓØ ÂÙ ÂÏÌÅÅ ÎÏ×ÏÊ ×ÅÒÓÉÅÊ, ÔÁË ËÁË
20000801 ÞÉÓÌÅÎÎÏ ÂÏÌØÛÅ, ÞÅÍ 1).÷ ÓÉÔÕÁÃÉÑÈ, ÐÏÄÏÂÎÙÈ ÜÔÏÊ, ÄÏÌÖÎÏ ÂÙÔØ Õ×ÅÌÉÞÅÎÏ ÚÎÁÞÅÎÉÅ
PORTEPOCH. åÓÌÉ ÚÎÁÞÅÎÉÅ
PORTEPOCH ÎÅ ÒÁ×ÎÏ ÎÕÌÀ, ÔÏ ÏÎÏ ÄÏÂÁ×ÌÑÅÔÓÑ Ë
ÉÍÅÎÉ ÐÁËÅÔÁ, ËÁË ÏÐÉÓÁÎÏ × ÒÁÚÄÅÌÅ ×ÙÛÅ. úÎÁÞÅÎÉÅ
PORTEPOCH ÎÉËÏÇÄÁ ÎÅ ÄÏÌÖÎÏ ÕÍÅÎØÛÁÔØÓÑ ÉÌÉ
ÓÂÒÁÓÙ×ÁÔØÓÑ × ÎÏÌØ, ÐÏÔÏÍÕ ÞÔÏ ÜÔÏ ÐÒÉ×ÅÄ£Ô Ë ÏÛÉÂËÅ ÓÒÁ×ÎÅÎÉÑ Ó
ÐÁËÅÔÏÍ Ó ÍÅÎØÛÉÍ ÎÏÍÅÒÏÍ ÜÐÏÈÉ (ÔÏ ÅÓÔØ ÔÏ, ÞÔÏ ÐÁËÅÔ ÕÓÔÁÒÅÌ,
ÏÂÎÁÒÕÖÅÎÏ ÎÅ ÂÕÄÅÔ): ÎÏÍÅÒ ÎÏ×ÏÊ ×ÅÒÓÉÉ (ÎÁÐÒÉÍÅÒ,
1.0,1 × ÐÒÉÍÅÒÅ ×ÙÛÅ) ÏÓÔÁÎÅÔÓÑ ÍÅÎØÛÅ, ÞÅÍ
ÎÏÍÅÒ ÐÒÅÄÙÄÕÝÅÊ ×ÅÒÓÉÉ (20000801), ÏÄÎÁËÏ ÓÕÆÆÉËÓ
,1 ÉÎÔÅÒÐÒÅÔÉÒÕÅÔÓÑ ÒÁÚÌÉÞÎÙÍÉ
Á×ÔÏÍÁÔÉÚÉÒÏ×ÁÎÎÙÍÉ ÕÔÉÌÉÔÁÍÉ ÏÓÏÂÙÍ ÏÂÒÁÚÏÍ, É ÏËÁÖÅÔÓÑ ÂÏÌØÛÅ,
ÞÅÍ ÐÒÅÄÐÏÌÁÇÁÅÍÙÊ ÓÕÆÆÉËÓ ,0 ÂÏÌÅÅ ÒÁÎÎÅÇÏ
ÐÁËÅÔÁ).îÅËÏÒÒÅËÔÎÏÅ ÕÍÅÎØÛÅÎÉÅ ÉÌÉ ÓÂÒÏÓ PORTEPOCH
ÐÒÉ×ÏÄÉÔ Ë ÐÅÞÁÌØÎÙÍ ÐÏÓÌÅÄÓÔ×ÉÑÍ; ÅÓÌÉ ×Ù ÎÅ ÐÏÎÑÌÉ, Ï Þ£Í ÛÌÁ
ÒÅÞØ ÒÁÎÅÅ, ÐÏÖÁÌÕÊÓÔÁ, ×Ó£ ÖÅ ÒÁÚÂÅÒÉÔÅÓØ Ó ÜÔÉÍ, ÌÉÂÏ ÓÐÒÏÓÉÔÅ
× ÓÐÉÓËÁÈ ÒÁÓÓÙÌËÉ.ðÒÅÄÐÏÌÁÇÁÅÔÓÑ, ÞÔÏ × ÂÏÌØÛÉÎÓÔ×Å ÐÏÒÔÏ× ÐÅÒÅÍÅÎÎÁÑ
PORTEPOCH ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÎÅ ÂÕÄÅÔ, ÎÏ ÐÒÉ
ËÏÒÒÅËÔÎÏÍ ÉÓÐÏÌØÚÏ×ÁÎÉÉ PORTVERSION ÍÏÖÅÔ
ÐÏÑ×ÉÔØÓÑ ÎÅÏÂÈÏÄÉÍÏÓÔØ Å£ ÉÍÅÔØ, ÅÓÌÉ × ÂÕÄÕÝÉÈ ÒÅÌÉÚÁÈ
ÐÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ ÄÏÌÖÎÏ ÉÚÍÅÎÉÔØ ÓÔÒÕËÔÕÒÕ ÎÏÍÅÒÁ ×ÅÒÓÉÉ.
ïÄÎÁËÏ ÓÏÚÄÁÔÅÌÑÍ ÐÏÒÔÏ× ÎÕÖÎÏ ÂÙÔØ ×ÎÉÍÁÔÅÌØÎÙÍÉ, ËÏÇÄÁ
ÒÁÚÒÁÂÏÔÞÉË ×ÙÐÕÓËÁÅÔ ÒÅÌÉÚ ÂÅÚ ÏÆÉÃÉÁÌØÎÏÇÏ ÎÏÍÅÒÁ ×ÅÒÓÉÉ —
ÜÄÁËÉÅ ÐÒÏÍÅÖÕÔÏÞÎÙÅ ÒÅÌÉÚÙ. éÍÅÅÔÓÑ ÓÏÂÌÁÚÎ
ÐÏÍÅÔÉÔØ ÒÅÌÉÚ ÄÁÔÏÊ ÅÇÏ ×ÙÈÏÄÁ, ÞÔÏ ÍÏÖÅÔ ×ÙÚ×ÁÔØ ÐÒÏÂÌÅÍÙ, ËÁË É
× ÐÒÉÍÅÒÅ ×ÙÛÅ, ËÏÇÄÁ ÂÕÄÅÔ ×ÙÐÕÝÅÎ ÎÏ×ÙÊ
ÏÆÉÃÉÁÌØÎÙÊ ÒÅÌÉÚ.îÁÐÒÉÍÅÒ, ÅÓÌÉ ÐÒÏÍÅÖÕÔÏÞÎÙÊ ÒÅÌÉÚ ÐÏÍÅÞÅÎ ÄÁÔÏÊ 20000917, Á
ÐÒÅÄÙÄÕÝÁÑ ×ÅÒÓÉÑ ÐÒÏÇÒÁÍÍÎÏÇÏ ÏÂÅÓÐÅÞÅÎÉÑ ÉÍÅÌÁ ÎÏÍÅÒ 1.2, ÔÏ
ÐÒÏÍÅÖÕÔÏÞÎÏÍÕ ÒÅÌÉÚÕ ÄÏÌÖÎÏ ÂÙÔØ ÐÏÓÔÁ×ÌÅÎÏ × ÓÏÏÔ×ÅÔÓÔ×ÉÅ
ÚÎÁÞÅÎÉÅ PORTVERSION, ÒÁ×ÎÏÅ 1.2.20000917 ÉÌÉ
ÞÔÏ-ÔÏ ÐÏÈÏÖÅÅ, ÎÏ ÎÅ 20000917, ÔÁË ËÁË ÐÏÓÌÅÄÕÀÝÉÊ ÒÅÌÉÚ, ÓËÁÖÅÍ,
1.3, ÄÏÌÖÅÎ ÉÍÅÔØ ÞÉÓÌÅÎÎÏ ÂÏÌØÛÅÅ ÚÎÁÞÅÎÉÅ.ðÒÉÍÅÒ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÐÅÒÅÍÅÎÎÙÈ
PORTREVISION É
PORTEPOCH÷ÙÐÏÌÎÅÎ ËÏÍÍÉÔ ÐÏÒÔÁ gtkmumble, ×ÅÒÓÉÉ
0.10, × ËÏÌÌÅËÃÉÀ ÐÏÒÔÏ×.PORTNAME= gtkmumble
PORTVERSION= 0.10úÎÁÞÅÎÉÅ PKGNAME ÓÔÁÎÅÔ ÒÁ×ÎÙÍ
gtkmumble-0.10.ïÂÎÁÒÕÖÅÎÁ ÂÒÅÛØ × ÂÅÚÏÐÁÓÎÏÓÔÉ, ÉÓÐÒÁ×ÌÅÎÉÅ ËÏÔÏÒÏÊ
ÐÏÔÒÅÂÏ×ÁÌÏ ÓÏÚÄÁÎÉÑ
ÌÏËÁÌØÎÏÇÏ ÐÁÔÞÁ ÄÌÑ FreeBSD. óÏÏÔ×ÅÔÓÔ×ÅÎÎÏ ÂÙÌÏ Õ×ÅÌÉÞÅÎÏ
ÚÎÁÞÅÎÉÅ ÐÅÒÅÍÅÎÎÏÊ PORTREVISION.PORTNAME= gtkmumble
PORTVERSION= 0.10
PORTREVISION= 1PKGNAME ÐÒÉÎÉÍÁÅÔ ÚÎÁÞÅÎÉÅ
gtkmumble-0.10_1òÁÚÒÁÂÏÔÞÉËÏÍ ×ÙÐÕÝÅÎÁ ÎÏ×ÁÑ ×ÅÒÓÉÑ Ó ÎÏÍÅÒÏÍ
0.2 (ÏËÁÚÁÌÏÓØ, ÞÔÏ ÐÏÄ ÎÏÍÅÒÏÍ
0.10 Á×ÔÏÒ ÉÍÅÌ × ×ÉÄÕ
0.1.0, Á ÎÅ ÔÏ, ÞÔÏ ÂÕÄÅÔ ×ÙÐÕÝÅÎÏ ÐÏÓÌÅ
×ÅÒÓÉÉ 0.9 - ÉÚ×ÉÎÉÔÅ, ÔÅÐÅÒØ ÕÖÅ ÐÏÚÄÎÏ). ôÁË ËÁË ÎÏ×ÙÊ
ÍÌÁÄÛÉÊ ÎÏÍÅÒ ×ÅÒÓÉÉ 2 ÐÏ ÚÎÁÞÅÎÉÀ ÍÅÎØÛÅ, ÞÅÍ
ÎÏÍÅÒ ÐÒÅÄÙÄÕÝÅÊ ×ÅÒÓÉÉ 10, ÔÏ ÄÏÌÖÎÏ ÂÙÔØ
Õ×ÅÌÉÞÅÎÏ ÚÎÁÞÅÎÉÅ PORTEPOCH ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ
ÚÁÓÔÁ×ÉÔØ ÒÁÓÐÏÚÎÁ×ÁÔØ ×ÎÏר ÓÏÚÄÁ×ÁÅÍÙÊ ÐÁËÅÔ ËÁË ÂÏÌÅÅ
ÎÏ×ÙÊ. ôÁË ËÁË ÜÔÏ ÎÏ×ÙÊ ÒÅÌÉÚ ÐÒÏÇÒÁÍÍÙ, ÔÏ
PORTREVISION ÏÂÎÕÌÑÅÔÓÑ (ÉÌÉ ÕÄÁÌÑÅÔÓÑ ÉÚ
ÆÁÊÌÁ Makefile).PORTNAME= gtkmumble
PORTVERSION= 0.2
PORTEPOCH= 1PKGNAME ÐÒÉÎÉÍÁÅÔ ÚÎÁÞÅÎÉÅ
gtkmumble-0.2,1óÌÅÄÕÀÝÉÊ ÒÅÌÉÚ ÉÍÅÅÔ ÎÏÍÅÒ ×ÅÒÓÉÉ 0.3. ôÁË ËÁË ÚÎÁÞÅÎÉÅ
ÐÅÒÅÍÅÎÎÏÊ PORTEPOCH ÎÉËÏÇÄÁ ÎÅ ÕÍÅÎØÛÁÅÔÓÑ, ÞÔÏ
ÐÅÒÅÍÅÎÎÙÅ, ÏÐÒÅÄÅÌÑÀÝÉÅ ×ÅÒÓÉÉ, ÔÅÐÅÒØ ×ÙÇÌÑÄÑÔ ÔÁË:PORTNAME= gtkmumble
PORTVERSION= 0.3
PORTEPOCH= 1PKGNAME ÐÒÉÎÉÍÁÅÔ ÚÎÁÞÅÎÉÅ
gtkmumble-0.3,1åÓÌÉ ÚÎÁÞÅÎÉÅ PORTEPOCH ÜÔÉÍ ÏÂÎÏ×ÌÅÎÉÅÍ
ÂÙÌÏ ÂÙ ÓÂÒÏÛÅÎÏ × 0, ÔÏ ËÔÏ-ÎÉÂÕÄØ, ÉÍÅÀÝÉÊ
ÕÓÔÁÎÏ×ÌÅÎÎÙÊ ÐÁËÅÔ gtkmumble-0.10_1, ÎÅ
ÓÍÏÇ ÂÙ ÏÐÏÚÎÁÔØ ÐÁËÅÔ gtkmumble-0.3 ËÁË
ÂÏÌÅÅ ÎÏ×ÙÊ, ÔÁË ËÁË 3 ÂÙÌÏ ÂÙ ÍÅÎØÛÅ, ÞÅÍ
10. ðÏÍÎÉÔÅ, ÞÔÏ × ÐÅÒ×ÕÀ ÏÞÅÒÅÄØ ÜÔÏ
ËÁÓÁÅÔÓÑ PORTEPOCH.ðÅÒÅÍÅÎÎÙÅ PKGNAMEPREFIX
É PKGNAMESUFFIXä×Å ÎÅÏÂÑÚÁÔÅÌØÎÙÅ ÐÅÒÅÍÅÎÎÙÅ, PKGNAMEPREFIX É
PKGNAMESUFFIX, ÏÂßÅÄÉÎÑÀÔÓÑ ÓÏ ÚÎÁÞÅÎÉÑÍÉ
PORTNAME É
PORTVERSION ÄÌÑ ÆÏÒÍÉÒÏ×ÁÎÉÑ
PKGNAME × ÆÏÒÍÅ
${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}.
äÏÂÅÊÔÅÓØ ÔÏÇÏ, ÞÔÏÂÙ ÜÔÏ ÓÏÏÔ×ÅÔÓÔ×Ï×ÁÌÏ ÎÁÛÉÍ ÒÅËÏÍÅÎÄÁÃÉÑÍ ÐÏ ÐÒÁ×ÉÌØÎÏÍÕ ×ÙÂÏÒÕ
ÎÁÚ×ÁÎÉÊ ÄÌÑ ÐÁËÅÔÏ×. ÷ ÞÁÓÔÎÏÓÔÉ, × ÐÅÒÅÍÅÎÎÏÊ
PORTVERSIONÎÅ ÒÁÚÒÅÛÁÅÔÓÑ
ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÄÅÆÉÓÁ (-). ëÒÏÍÅ ÔÏÇÏ, ÅÓÌÉ ×
ÉÍÅÎÉ ÐÁËÅÔÁ ÐÒÉÓÕÔÓÔ×ÕÅÔ ÞÁÓÔØ language-
ÉÌÉ -compiled.specifics (ÓÍÏÔÒÉÔÅ ÎÉÖÅ),
ÔÏ ÉÓÐÏÌØÚÕÊÔÅ ÐÅÒÅÍÅÎÎÙÅ PKGNAMEPREFIX É
PKGNAMESUFFIX, ÓÏÏÔ×ÅÔÓÔ×ÅÎÎÏ. îÅ ÄÅÌÁÊÔÅ ÉÈ
ÞÁÓÔØÀ ÚÎÁÞÅÎÉÑ ÐÅÒÅÍÅÎÎÏÊ PORTNAME.LATEST_LINKLATEST_LINK ÚÁÄÁÅÔ × ÐÒÏÃÅÓÓÅ ÐÏÓÔÒÏÅÎÉÑ
ÐÁËÅÔÁ ËÏÒÏÔËÏÅ ÉÍÑ ÓÓÙÌËÉ, ËÏÔÏÒÙÅ ÍÏÇÕÔ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÐÒÉ
×ÙÐÏÌÎÅÎÉÉ ËÏÍÁÎÄÙ pkg_add -r. üÔÏ ÐÏÚ×ÏÌÑÅÔ,
Ë ÐÒÉÍÅÒÕ, ÕÓÔÁÎÏ×ÉÔØ ÐÏÓÌÅÄÎÀÀ ×ÅÒÓÉÀ perl, ÉÓÐÏÌØÚÕÑ
pkg_add -r perl, ÂÅÚ ÚÎÁÎÉÑ ÔÏÞÎÏÇÏ ÎÏÍÅÒÁ
×ÅÒÓÉÉ. ôÁËÏÅ ÉÍÑ ÄÏÌÖÎÏ ÂÙÔØ ÕÎÉËÁÌØÎÙÍ É ÏÞÅ×ÉÄÎÙÍ ÄÌÑ
ÐÏÌØÚÏ×ÁÔÅÌÅÊ.÷ ÎÅËÏÔÏÒÙÈ ÓÌÕÞÁÑÈ × ËÏÌÌÅËÃÉÉ ÐÏÒÔÏ× ÍÏÖÅÔ ÐÒÉÓÕÔÓÔ×Ï×ÁÔØ
ÎÅÓËÏÌØËÏ ×ÅÒÓÉÊ ÐÒÏÇÒÁÍÍÙ ÏÄÎÏ×ÒÅÍÅÎÎÏ. ïÂÅ ÓÉÓÔÅÍÙ, ÐÏÓÔÒÏÅÎÉÑ
ÉÎÄÅËÓÏ× É ÐÏÓÔÒÏÅÎÉÑ ÐÁËÅÔÏ×, ÎÕÖÄÁÀÔÓÑ × ÓÐÏÓÏÂÎÏÓÔÉ ÉÈ ×ÉÄÅÔØ
ËÁË ÒÁÚÎÙÅ, ÎÅÚÁ×ÉÓÉÍÙÅ ÐÏÒÔÙ, ÈÏÔÑ ×ÓÅ ÏÎÉ ÍÏÇÕÔ ÉÍÅÔØ ÓÈÏÖÅÅ
ÚÎÁÞÅÎÉÅ ÄÌÑ PORTNAME,
PKGNAMEPREFIX É ÄÁÖÅ
PKGNAMESUFFIX. ÷ ÜÔÉÈ ÓÌÕÞÁÑÈ ÄÌÑ ×ÓÅÈ ÐÏÒÔÏ×
ËÒÏÍÅ ÇÌÁ×ÎÏÇÏ ÓÌÅÄÕÅÔ ÐÒÉÓ×ÏÉÔØ ÒÁÚÌÉÞÎÙÅ ÚÎÁÞÅÎÉÑ ÄÌÑ
ÎÅÏÂÑÚÁÔÅÌØÎÏÊ ÐÅÒÅÍÅÎÎÏÊ LATEST_LINK —
ÞÔÏÂÙ ÐÏÌÕÞÉÔØ ÐÒÉÍÅÒ ÅÅ ÉÓÐÏÌØÚÏ×ÁÎÉÑ, ÓÍÏÔÒÉÔÅ ÐÏÒÔÙ
lang/gcc46 É lang/gcc,
Á ÔÁËÖÅ ÓÅÍÅÊÓÔ×Ï www/apache*. ðÒÉ ÕÓÔÁÎÏ×ËÅ
NO_LATEST_LINK ÓÓÙÌËÉ ÎÅ ÓÏÚÄÁÀÔÓÑ; ÜÔÁ
ÎÅÏÂÑÚÁÔÅÌØÎÁÑ ÐÅÒÅÍÅÎÎÁÑ ÍÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎÁ ×Ï ×ÓÅÈ ×ÅÒÓÉÑÈ,
ËÒÏÍÅ ÇÌÁ×ÎÏÊ. ïÂÒÁÔÉÔÅ
×ÎÉÍÁÎÉÅ, ËÁË ×ÙÂÉÒÁÔØ ÇÌÁ×ÎÕÀ ×ÅÒÓÉÀ —
ÓÁÍÕÀ ÐÏÐÕÌÑÒÎÕÀ, ÓÁÍÕÀ ÐÏÄÄÅÒÖÉ×ÁÅÍÕÀ,
Ó ÎÁÉÍÅÎØÛÉÍÉ ÉÚÍÅÎÅÎÉÑÍÉ É ÔÁË ÄÁÌÅÅ — ÜÔÏ
×ÙÈÏÄÉÔ ÚÁ ÒÁÍËÉ ÒÅËÏÍÅÎÄÁÃÉÊ ÜÔÏÇÏ ÒÕËÏ×ÏÄÓÔ×Á; ÍÙ ×ÓÅÇÏ ÌÉÛØ
ÓÏÏÂÝÁÅÍ ×ÁÍ, ËÁË ÕËÁÚÙ×ÁÔØ ×ÅÒÓÉÉ ÄÒÕÇÉÈ ÐÏÒÔÏ× ÐÏÓÌÅ ÔÏÇÏ, ËÁË
×Ù ×ÙÂÒÁÌÉ ÇÌÁ×ÎÙÊ.óÏÇÌÁÛÅÎÉÑ ÐÏ ÉÍÅÎÏ×ÁÎÉÀ ÐÁËÅÔÏ×äÁÌÅÅ ÏÐÉÓÁÎÙ ÎÅËÏÔÏÒÙÅ ÓÏÇÌÁÛÅÎÉÑ, ËÏÔÏÒÙÍ ×Ù ÄÏÌÖÎÙ ÓÌÅÄÏ×ÁÔØ
× ÉÍÅÎÏ×ÁÎÉÉ ×ÁÛÉÈ ÐÁËÅÔÏ×. ïÎÉ ÂÙÌÉ ÒÁÚÒÁÂÏÔÁÎÙ ÄÌÑ ÏÂÌÅÇÞÅÎÉÑ
ÐÒÏÓÍÏÔÒÁ ËÁÔÁÌÏÇÁ, ÔÁË ËÁË ÉÍÅÅÔÓÑ ÕÖÅ ÔÙÓÑÞÉ ÐÁËÅÔÏ×, Á
ÐÏÌØÚÏ×ÁÔÅÌÉ ÏÔ×ÅÒÎÕÔÓÑ ÏÔ ÎÁÓ, ÅÓÌÉ ÓÐÉÓÏË ÎÅ ÐÏÎÒÁ×ÉÔÓÑ ÉÈ
×ÚÏÒÕ!éÍÑ ÐÁËÅÔÁ ÄÏÌÖÎÏ ÉÍÅÔØ ×ÉÄ
language_region-name-compiled.specifics-version.numbers.éÍÑ ÐÁËÅÔÁ ÏÐÒÅÄÅÌÑÅÔÓÑ ËÁË
${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}.
÷Ù ÄÏÌÖÎÙ ÚÁÄÁ×ÁÔØ ÚÎÁÞÅÎÉÑ ÐÅÒÅÍÅÎÎÙÈ × ÓÏÏÔ×ÅÔÓÔ×ÉÉ Ó ÜÔÉÍ
ÆÏÒÍÁÔÏÍ.FreeBSD ÐÙÔÁÅÔÓÑ ÐÏÄÄÅÒÖÉ×ÁÔØ ÑÚÙËÉ, ÎÁ ËÏÔÏÒÙÈ ÒÁÚÇÏ×ÁÒÉ×ÁÀÔ
Å£ ÐÏÌØÚÏ×ÁÔÅÌÉ. þÁÓÔØ language-
ÄÏÌÖÎÁ ÂÙÔØ Ä×ÕÈÓÉÍ×ÏÌØÎÙÍ ÓÏËÒÁÝÅÎÉÅÍ ÏÔ ÎÁÚ×ÁÎÉÑ ÑÚÙËÁ ÐÏ
ÓÔÁÎÄÁÒÔÕ ISO-639, ÅÓÌÉ ÐÏÒÔ ÓÐÅÃÉÆÉÞÅÎ ÄÌÑ ËÏÎËÒÅÔÎÏÇÏ ÑÚÙËÁ.
ðÒÉÍÅÒÁÍÉ Ñ×ÌÑÀÔÓÑ ja ÄÌÑ ÑÐÏÎÓËÏÇÏ,
ru ÄÌÑ ÒÕÓÓËÏÇÏ, vi ÄÌÑ
רÅÔÎÁÍÓËÏÇÏ, zh ÄÌÑ ËÉÔÁÊÓËÏÇÏ,
ko ÄÌÑ ËÏÒÅÊÓËÏÇÏ É de ÄÌÑ
ÎÅÍÅÃËÏÇÏ ÑÚÙËÏ×.åÓÌÉ ×ÁÛ ÐÏÒÔ ÓÐÅÃÉÆÉÞÅÎ ÄÌÑ ËÏÎËÒÅÔÎÏÇÏ ÒÅÇÉÏÎÁ ×ÎÕÔÒÉ
ÏÂÌÁÓÔÉ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÑÚÙËÁ, ÄÏÂÁרÔÅ ÔÁËÖÅ Ä×ÕÈÓÉÍ×ÏÌØÎÙÊ ËÏÄ
ÓÔÒÁÎÙ. ðÒÉÍÅÒÁÍÉ Ñ×ÌÑÀÔÓÑ en_US ÄÌÑ US
English É fr_CH ÄÌÑ Swiss French.þÁÓÔØ language- ÄÏÌÖÎÁ ÚÁÄÁ×ÁÔØÓÑ
× ÐÅÒÅÍÅÎÎÏÊ PKGNAMEPREFIX.ðÅÒ×ÁÑ ÂÕË×Á ÞÁÓÔÉ name ÄÏÌÖÎÁ ÂÙÔØ ×
ÎÉÖÎÅÍ ÒÅÇÉÓÔÒÅ. (ïÓÔÁ×ÛÁÑÓÑ ÞÁÓÔØ ÎÁÚ×ÁÎÉÑ ÍÏÖÅÔ ÓÏÄÅÒÖÁÔØ
ÂÕË×Ù × ×ÅÒÈÎÅÍ ÒÅÇÉÓÔÒÅ, ÔÁË ÞÔÏ ÐÒÉÎÉÍÁÊÔÅ ÒÅÛÅÎÉÅ ÓÁÍÉ, ËÏÇÄÁ
ÐÒÅÏÂÒÁÚÕÅÔÅ ÉÍÑ ÐÒÏÇÒÁÍÍÎÏÇÏ ÐÁËÅÔÁ, ÓÏÄÅÒÖÁÝÅÇÏ × ÉÍÅÎÉ
ÎÅËÏÔÏÒÏÅ ËÏÌÉÞÅÓÔ×Ï ÚÁÇÌÁ×ÎÙÈ ÂÕË×.) óÕÝÅÓÔ×ÕÅÔ ÔÒÁÄÉÃÉÑ
ÉÍÅÎÏ×ÁÔØ ÍÏÄÕÌÉ ÄÌÑ Perl 5, ÄÏÂÁ×ÌÑÑ ×ÐÅÒÅÄÉ
p5- É ÐÒÅÏÂÒÁÚÕÑ ÐÁÒÕ Ä×ÏÅÔÏÞÉÊ ×
ÄÅÆÉÓ; ÎÁÐÒÉÍÅÒ, ÍÏÄÕÌØ Data::Dumper ÂÕÄÅÔ
ÉÍÅÎÏ×ÁÔØÓÑ p5-Data-Dumper.õÂÅÄÉÔÅÓØ, ÞÔÏ ÉÍÑ ÐÏÒÔÁ É ×ÅÒÓÉÑ ÞÅÔËÏ ÏÔÄÅÌÅÎÙ É
ÒÁÚÍÅÝÁÀÔÓÑ × ÐÅÒÅÍÅÎÎÙÈ PORTNAME É
PORTVERSION. åÄÉÎÓÔ×ÅÎÎÁÑ ÐÒÉÞÉÎÁ, ÐÏ
ËÏÔÏÒÏÊ PORTNAME ÓÏÄÅÒÖÉÔ ×ÅÒÓÉÏÎÎÕÀ ÞÁÓÔØ,
ÜÔÏ ÅÓÌÉ ÐÏÌÕÞÅÎÎÙÊ ÄÉÓÔÒÉÂÕÔÉ× ÓÁÍ ÎÁÚ×ÁÎ ÔÁËÉÍ ÏÂÒÁÚÏÍ, ËÁË
ÜÔÏ ÓÄÅÌÁÎÏ ÄÌÑ ÐÏÒÔÏ× textproc/libxml2
ÉÌÉ japanese/kinput2-freewnn. ÷ ÐÒÏÔÉ×ÎÏÍ
ÓÌÕÞÁÅ PORTNAME ÎÅ ÄÏÌÖÅÎ ÓÏÄÅÒÖÁÔØ ÎÉËÁËÏÊ
ÉÎÆÏÒÍÁÃÉÉ, ÕËÁÚÙ×ÁÀÝÅÊ ÎÁ ×ÅÒÓÉÀ. ôÏ, ÞÔÏ ÎÅËÏÔÏÒÙÅ ÐÏÒÔÙ
ÉÍÅÀÔ ÏÄÉÎÁËÏ×ÙÊ PORTNAME, Ñ×ÌÑÅÔÓÑ ×ÐÏÌÎÅ
ÎÏÒÍÁÌØÎÙÍ, ËÁË ÄÌÑ ÐÏÒÔÏ× www/apache*;
× ÜÔÏÍ ÓÌÕÞÁÅ ÒÁÚÌÉÞÎÙÅ ×ÅÒÓÉÉ (É ÒÁÚÌÉÞÎÙÅ ÚÁÐÉÓÉ × ÉÎÄÅËÓÅ)
ÏÔÌÉÞÁÀÔÓÑ ÐÏ ÚÎÁÞÅÎÉÑÍ PKGNAMEPREFIX,
PKGNAMESUFFIX É
LATEST_LINK.åÓÌÉ ÐÏÒÔ ÍÏÖÅÔ ÂÙÔØ ÐÏÓÔÒÏÅÎ Ó ÒÁÚÌÉÞÎÙÍÉ ÓÔÁÔÉÞÅÓËÉ ÚÁÄÁÎÎÙÍÉ ÚÎÁÞÅÎÉÑÍÉ ÐÏ
ÕÍÏÌÞÁÎÉÀ (ÏÂÙÞÎÏ ÜÔÏ ÞÁÓÔØ ÉÍÅÎÉ ËÁÔÁÌÏÇÁ × ÓÅÍÅÊÓÔ×Å
ÐÏÒÔÏ×), ÔÏ ÞÁÓÔØ -compiled.specifics
ÄÏÌÖÎÁ ÏÐÒÅÄÅÌÑÔØ ×ËÏÍÐÉÌÉÒÏ×ÁÎÎÙÅ ÚÎÁÞÅÎÉÑ ÐÏ ÕÍÏÌÞÁÎÉÀ (ÄÅÆÉÓ
ÎÅ ÏÂÑÚÁÔÅÌÅÎ). ðÒÉÍÅÒÁÍÉ Ñ×ÌÑÀÔÓÑ ÒÁÚÍÅÒÙ ÂÕÍÁÇÉ É
ÛÒÉÆÔÏ×.þÁÓÔØ -compiled.specifics ÄÏÌÖÎÁ
ÚÁÄÁ×ÁÔØÓÑ × ÐÅÒÅÍÅÎÎÏÊ PKGNAMESUFFIX.óÔÒÏËÁ Ó ÎÏÍÅÒÏÍ ×ÅÒÓÉÉ ÄÏÌÖÎÁ ÓÌÅÄÏ×ÁÔØ ÚÁ ÄÅÆÉÓÏÍ
(-) É Ñ×ÌÑÔØÓÑ ÓÐÉÓËÏÍ ÒÁÚÄÅÌÅÎÎÙÈ Ä×ÏÅÔÏÞÉÅÍ
ÞÉÓÅÌ É ÂÕË× × ÎÉÖÎÅÍ ÒÅÇÉÓÔÒÅ. ÷ ÞÁÓÔÎÏÓÔÉ, ÎÅ ÒÁÚÒÅÛÁÅÔÓÑ
ÉÍÅÔØ ÅÝÅ ÏÄÉÎ ÄÅÆÉÓ ×ÎÕÔÒÉ ÓÔÒÏËÉ Ó ÏÂÏÚÎÁÞÅÎÉÅÍ ÎÏÍÅÒÁ ×ÅÒÓÉÉ.
åÄÉÎÓÔ×ÅÎÎÙÍ ÉÓËÌÀÞÅÎÉÅÍ Ñ×ÌÑÅÔÓÑ ÓÔÒÏÞËÁ pl
(ÏÚÎÁÞÁÀÝÁÑ patchlevel), ËÏÔÏÒÁÑ ÍÏÖÅÔ
ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÔÏÌØËÏ ÔÏÇÄÁ, ËÏÇÄÁ Õ
ÐÒÏÇÒÁÍÍÎÏÇÏ ÏÂÅÓÐÅÞÅÎÉÑ ÎÅÔ ÓÔÁÒÛÅÇÏ É ÍÌÁÄÛÅÇÏ ÎÏÍÅÒÁ ×ÅÒÓÉÉ.
åÓÌÉ × ÎÏÍÅÒ ×ÅÒÓÉÉ ÐÒÏÇÒÁÍÍÎÏÇÏ ÏÂÅÓÐÅÞÅÎÉÑ ×ËÌÀÞÅÎÁ ÓÔÒÏÞËÁ
ÔÉÐÁ alpha, beta,
rc ÉÌÉ pre, ×ÏÚØÍÉÔÅ ÉÚ ÎÅ£ ÐÅÒ×ÕÀ
ÂÕË×Õ É ÐÏÓÔÁרÔŠţ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ÐÏÓÌÅ ÔÏÞËÉ. åÓÌÉ ÐÏÓÌÅ
ÔÁËÉÈ ÓÔÒÏË ÎÏÍÅÒ ×ÅÒÓÉÉ ÅÝ£ ÐÒÏÄÏÌÖÁÅÔÓÑ, ÔÏ ÐÏÓÌÅ ÂÕË×Ù ÄÏÌÖÎÏ
ÓÌÅÄÏ×ÁÔØ ÞÉÓÌÏ ÂÅÚ ÄÏÐÏÌÎÉÔÅÌØÎÏÊ ÒÁÚÄÅÌÑÀÝÅÊ ÔÏÞËÉ.óÍÙÓÌ ÔÁËÏÇÏ ÆÏÒÍÁÔÁ ÚÁËÌÀÞÁÅÔÓÑ × ÕÄÏÂÓÔ×Å ÓÏÒÔÉÒÏ×ËÉ ÐÏÒÔÏ×
ÐÏ ÎÏÍÅÒÕ ×ÅÒÓÉÉ. ÷ ÞÁÓÔÎÏÓÔÉ, ÓÌÅÄÉÔÅ ÚÁ ÔÅÍ, ÞÔÏÂÙ ËÏÍÐÏÎÅÎÔÙ
ÎÏÍÅÒÁ ×ÅÒÓÉÉ ÒÁÚÄÅÌÑÌÉÓØ ÔÏÞËÏÊ, É ÅÓÌÉ ÔÁÍ ÐÒÉÓÕÔÓÔ×ÕÅÔ ÄÁÔÁ,
ÔÏ ÉÓÐÏÌØÚÕÊÔÅ ÆÏÒÍÁÔ
0.0.yyyy.mm.dd, ÎÏ ÎÅ
dd.mm.yyyy
ÉÌÉ ÎÅ ÓÏ×ÍÅÓÔÉÍÙÊ Ó ÐÒÏÂÌÅÍÏÊ Y2K
yy.mm.dd.
äÏÂÁ×ÌÅÎÉÅ Ë ×ÅÒÓÉÉ ÐÒÅÆÉËÓÁ 0.0. Ñ×ÌÑÅÔÓÑ
×ÁÖÎÙÍ, × ÓÌÕÞÁÅ ÅÓÌÉ ×ÙÐÕÝÅÎ ÒÅÌÉÚ Ó ÐÒÉÓ×ÏÅÎÉÅÍ ÎÁÓÔÏÑÝÅÊ
×ÅÒÓÉÉ, ËÏÔÏÒÁÑ × ÞÉÓÌÏ×ÏÍ ÐÒÅÄÓÔÁ×ÌÅÎÉÉ, ËÏÎÅÞÎÏ ÖÅ, ÂÕÄÅÔ
ÎÉÖÅ, ÞÅÍ
yyyy.÷ÏÔ ÎÅÓËÏÌØËÏ (ÒÅÁÌØÎÙÈ) ÐÒÉÍÅÒÏ× ÔÏÇÏ, ËÁË ÐÒÅÏÂÒÁÚÏ×ÁÔØ ÉÍÑ ÉÚ
ÏÒÉÇÉÎÁÌØÎÏÇÏ, ÐÒÉÄÕÍÁÎÎÏÇÏ Á×ÔÏÒÁÍÉ, Ë ÐÏÄÈÏÄÑÝÅÍÕ ÄÌÑ ÉÍÅÎÉ
ÐÁËÅÔÁ:éÍÑ ÄÉÓÔÒÉÂÕÔÉ×ÁPKGNAMEPREFIXPORTNAMEPKGNAMESUFFIXPORTVERSIONïÂÏÓÎÏ×ÁÎÉÅmule-2.2.2(ÐÕÓÔÏ)mule(ÐÕÓÔÏ)2.2.2éÚÍÅÎÅÎÉÊ ÎÅ ÐÏÔÒÅÂÏ×ÁÌÏÓØEmiClock-1.0.2(ÐÕÓÔÏ)emiclock(ÐÕÓÔÏ)1.0.2äÌÑ ÏÔÄÅÌØÎÙÈ ÐÒÏÇÒÁÍÍ ÉÍÅÎÁ Ó ÚÁÇÌÁ×ÎÙÍÉ ÂÕË×ÁÍÉ
ÚÁÐÒÅÝÅÎÙrdist-1.3alpha(ÐÕÓÔÏ)rdist(ÐÕÓÔÏ)1.3.aóÔÒÏÞËÉ ÔÉÐÁ alpha ÚÁÐÒÅÝÅÎÙes-0.9-beta1(ÐÕÓÔÏ)es(ÐÕÓÔÏ)0.9.b1óÔÒÏÞËÉ ÔÉÐÁ beta ÚÁÐÒÅÝÅÎÙmailman-2.0rc3(ÐÕÓÔÏ)mailman(ÐÕÓÔÏ)2.0.r3óÔÒÏÞËÉ ÔÉÐÁ rc ÚÁÐÒÅÝÅÎÙv3.3beta021.src(ÐÕÓÔÏ)tiff(ÐÕÓÔÏ)3.3þÔÏ ÜÔÏ ÔÁËÏÅ ÂÙÌÏ ×ÏÏÂÝÅ?tvtwm(ÐÕÓÔÏ)tvtwm(ÐÕÓÔÏ)pl11÷ÓÅÇÄÁ ÔÒÅÂÕÅÔÓÑ ÕËÁÚÁÎÉÅ ÎÏÍÅÒÁ ×ÅÒÓÉÉpiewm(ÐÕÓÔÏ)piewm(ÐÕÓÔÏ)1.0÷ÓÅÇÄÁ ÔÒÅÂÕÅÔÓÑ ÕËÁÚÁÎÉÅ ÎÏÍÅÒÁ ×ÅÒÓÉÉxvgr-2.10pl1(ÐÕÓÔÏ)xvgr(ÐÕÓÔÏ)2.10.1pl ÒÁÚÒÅÛÅÎÏ ÔÏÌØËÏ ÐÒÉ ÏÔÓÕÔÓÔ×ÉÉ
ÓÔÁÒÛÅÇÏ/ÍÌÁÄÛÅÇÏ ÎÏÍÅÒÁ ×ÅÒÓÉÉgawk-2.15.6ja-gawk(ÐÕÓÔÏ)2.15.6÷ÅÒÓÉÑ ÎÁ ÑÐÏÎÓËÏÍ ÑÚÙËÅpsutils-1.13(ÐÕÓÔÏ)psutils-letter1.13òÁÚÍÅÒ ÂÕÍÁÇÉ ÚÁÄÁÅÔÓÑ ÓÔÁÔÉÞÅÓËÉ ×Ï ×ÒÅÍÑ ÐÏÓÔÒÏÅÎÉÑ
ÐÁËÅÔÁpkfonts(ÐÕÓÔÏ)pkfonts3001.0ÐÁËÅÔ ÄÌÑ ÛÒÉÆÔÏ× 300dpiåÓÌÉ × ÉÓÈÏÄÎÏÍ ËÏÄÅ ÁÂÓÏÌÀÔÎÏ ÎÅÔ ÉÎÆÏÒÍÁÃÉÉ Ï ÎÏÍÅÒÅ ×ÅÒÓÉÉ É
ÎÅ ÐÏÈÏÖÅ, ÞÔÏ Á×ÔÏÒ ÓÏÂÉÒÁÅÔÓÑ ×ÙÐÕÓËÁÔØ ÄÒÕÇÕÀ ×ÅÒÓÉÀ, ÔÏ ×
ËÁÞÅÓÔ×Å ÎÏÍÅÒÁ ×ÅÒÓÉÉ ÚÁÄÁÊÔÅ ÐÒÏÓÔÏ 1.0 (ËÁË ×
ÐÒÉÍÅÒÅ Ó piewm ×ÙÛÅ). ÷ ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ
ÓÐÒÏÓÉÔÅ Á×ÔÏÒÁ ÐÒÏÇÒÁÍÍÙ ÉÌÉ ÉÓÐÏÌØÚÕÊÔÅ ÄÁÔÕ
(0.0.yyyy.mm.dd)
× ËÁÞÅÓÔ×Å ÎÏÍÅÒÁ ×ÅÒÓÉÉ.òÁÚÄÅÌÅÎÉÅ ÐÏ ËÁÔÅÇÏÒÉÑÍCATEGORIES÷ ÐÒÏÃÅÓÓÅ ÓÏÚÄÁÎÉÑ ÐÁËÅÔÁ ÏÎ ÐÏÍÅÝÁÅÔÓÑ × ËÁÔÁÌÏÇ
/usr/ports/packages/All, Á × ÏÄÎÏÍ ÉÌÉ ÂÏÌÅÅ
ÐÏÄËÁÔÁÌÏÇÏ× ÉÚ /usr/ports/packages
ÓÏÚÄÁÀÔÓÑ ÎÁ ÎÅÇÏ ÓÓÙÌËÉ. éÍÅÎÁ ÜÔÉÈ ÐÏÄËÁÔÁÌÏÇÏ× ÏÐÒÅÄÅÌÑÀÔÓÑ
ÐÅÒÅÍÅÎÎÏÊ CATEGORIES. ôÁËÁÑ ÓÈÅÍÁ ÎÕÖÎÁ ÄÌÑ
ÏÂÌÅÇÞÅÎÉÑ ÖÉÚÎÉ ÐÏÌØÚÏ×ÁÔÅÌÑ, ËÏÇÄÁ ÏÎ ÓÔÁÌËÉ×ÁÅÔÓÑ Ó ÍÁÓÓÏÊ
ÐÁËÅÔÏ× ÎÁ FTP-ÓÅÒ×ÅÒÅ ÉÌÉ ËÏÍÐÁËÔ-ÄÉÓËÅ. ðÏÖÁÌÕÊÓÔÁ, ÐÏÓÍÏÔÒÉÔÅ ÎÁ
ÔÅËÕÝÉÊ ÓÐÉÓÏË ËÁÔÅÇÏÒÉÊ
É ×ÙÂÅÒÉÔÅ ÔÅ ÉÚ ÎÉÈ,
ËÏÔÏÒÙÅ ÂÏÌÅÅ ×ÓÅÇÏ ÐÏÄÈÏÄÑÔ Ë ×ÁÛÅÍÕ ÐÏÒÔÕ.üÔÏÔ ÓÐÉÓÏË ÔÁËÖÅ ÏÐÒÅÄÅÌÑÅÔ, ËÕÄÁ × ÄÅÒÅ×Å ÐÏÒÔÏ× ÂÕÄÅÔ ÐÏÍÅÝÅÎ
ÐÏÒÔ. åÓÌÉ ×Ù ÕËÁÖÅÔÅ ÚÄÅÓØ ÂÏÌÅÅ ÏÄÎÏÊ ËÁÔÅÇÏÒÉÉ, ÔÏ
ÐÒÅÄÐÏÌÁÇÁÅÔÓÑ, ÞÔÏ ÆÁÊÌÙ ÐÏÒÔÁ ÂÕÄÕÔ ÐÏÍÅÝÅÎÙ × ÐÏÄËÁÔÁÌÏÇ Ó ÉÍÅÎÅÍ
ÐÅÒ×ÏÊ ËÁÔÅÇÏÒÉÉ. ðÏÓÍÏÔÒÉÔÅ ÎÉÖÅ ÄÌÑ ÐÏÌÕÞÅÎÉÑ
ÐÏÄÒÏÂÎÏÊ ÉÎÆÏÒÍÁÃÉÉ Ï ÔÏÍ, ËÁË ÐÒÁ×ÉÌØÎÏ ×ÙÂÒÁÔØ ËÁÔÅÇÏÒÉÉ.ôÅËÕÝÉÊ ÓÐÉÓÏË ËÁÔÅÇÏÒÉÊ÷ÏÔ ÔÅËÕÝÉÊ ÓÐÉÓÏË ËÁÔÅÇÏÒÉÊ. ôÅ, ËÏÔÏÒÙÅ ÏÔÍÅÞÅÎÙ
Ú×£ÚÄÏÞËÏÊ (*), Ñ×ÌÑÀÔÓÑ
×ÉÒÔÕÁÌØÎÙÍÉ ËÁÔÅÇÏÒÉÑÍÉ—ÏÎÉ ÎÅ ÉÍÅÀÔ
ÓÏÂÓÔ×ÅÎÎÏÇÏ ÐÏÄËÁÔÁÌÏÇÁ × ÄÅÒÅ×Å ÐÏÒÔÏ×. ïÎÉ ÉÓÐÏÌØÚÕÀÔÓÑ ÔÏÌØËÏ ×
ËÁÞÅÓÔ×Å ×ÔÏÒÉÞÎÙÈ ËÁÔÅÇÏÒÉÊ, É ÔÏÌØËÏ ÄÌÑ ÐÏÉÓËÁ.äÌÑ ÎÅ×ÉÒÔÕÁÌØÎÙÈ ËÁÔÅÇÏÒÉÊ ÉÍÅÅÔÓÑ ÏÄÎÏÓÔÒÏÞÎÏÅ ÏÐÉÓÁÎÉÅ
× COMMENT × Makefile
ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÇÏ ÐÏÄËÁÔÁÌÏÇÁ.ëÁÔÅÇÏÒÉÑïÐÉÓÁÎÉÅðÒÉÍÅÞÁÎÉÑaccessibilityðÏÒÔÙ ÄÌÑ ÐÏÍÏÝÉ ÐÏÌØÚÏ×ÁÔÅÌÑÍ Ó ÏÇÒÁÎÉÞÅÎÎÙÍÉ
×ÏÚÍÏÖÎÏÓÔÑÍÉ.afterstep*ðÏÒÔÙ, ÐÏÄÄÅÒÖÉ×ÁÀÝÉÅ ÍÅÎÅÄÖÅÒ ÏËÏÎ AfterStep.arabicðÏÄÄÅÒÖËÁ ÁÒÁÂÓËÏÇÏ ÑÚÙËÁ.archiverséÎÓÔÒÕÍÅÎÔÙ ÄÌÑ ÒÁÂÏÔÙ Ó ÁÒÈÉ×ÁÍÉ.astroðÒÉÌÏÖÅÎÉÑ, Ó×ÑÚÁÎÎÙÅ Ó ÁÓÔÒÏÎÏÍÉÅÊ.audioðÏÄÄÅÒÖËÁ ÒÁÂÏÔÙ ÓÏ Ú×ÕËÏÍ.benchmarksõÔÉÌÉÔÙ ÄÌÑ ÉÚÍÅÒÅÎÉÑ ÐÒÏÉÚ×ÏÄÉÔÅÌØÎÏÓÔÉ ÓÉÓÔÅÍÙ.biologyðÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ, Ó×ÑÚÁÎÎÏÅ Ó ÂÉÏÌÏÇÉÅÊ.cadéÎÓÔÒÕÍÅÎÔÙ óÉÓÔÅÍ á×ÔÏÍÁÔÉÚÉÒÏ×ÁÎÎÏÇÏ
ðÒÏÅËÔÉÒÏ×ÁÎÉÑ.chineseðÏÄÄÅÒÖËÁ ËÉÔÁÊÓËÏÇÏ ÑÚÙËÁ.commsëÏÍÍÕÎÉËÁÃÉÏÎÎÏÅ ÐÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ.÷ ÏÓÎÏ×ÎÏÍ ÐÒÏÇÒÁÍÍÙ ÄÌÑ ÒÁÂÏÔÙ Ó ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÙÍ
ÐÏÒÔÏÍ.convertersõÔÉÌÉÔÙ ÄÌÑ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ ÓÉÍ×ÏÌØÎÙÈ ÆÏÒÍÁÔÏ×.databasesâÁÚÙ ÄÁÎÎÙÈ.deskutilsôÏ, ÞÔÏ ÂÙÌÏ ÎÁ ÓÔÏÌÅ ÄÏ ÉÚÏÂÒÅÔÅÎÉÑ ËÏÍÐØÀÔÅÒÏ×.develõÔÉÌÉÔÙ ÄÌÑ ÒÁÚÒÁÂÏÔËÉ ÐÒÏÇÒÁÍÍÎÏÇÏ ÏÂÅÓÐÅÞÅÎÉÑ.îÅ ÐÏÍÅÝÁÊÔÅ ÓÀÄÁ ÂÉÂÌÉÏÔÅËÉ ÐÒÏÓÔÏ ÐÏÔÏÍÕ ÞÔÏ ÜÔÏ
ÂÉÂÌÉÏÔÅËÉ—ÅÓÌÉ ÏÎÉ ÐÏÄÐÁÄÁÀÔ ÐÏÄ ËÁËÕÀ-ÔÏ ÄÒÕÇÕÀ
ËÁÔÅÇÏÒÉÀ, ÔÏ ÉÈ ÂÙÔØ ÚÄÅÓØ ÎÅ ÄÏÌÖÎÏ.dnsðÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ ÄÌÑ ÒÁÂÏÔÙ Ó DNS.docs*íÅÔÁ-ÐÏÒÔÙ ÄÌÑ ÄÏËÕÍÅÎÔÁÃÉÉ FreeBSD.editorsòÅÄÁËÔÏÒÙ ÏÂÝÅÇÏ ÎÁÚÎÁÞÅÎÉÑ.óÐÅÃÉÁÌÉÚÉÒÏ×ÁÎÎÙÅ ÒÅÄÁËÔÏÒÙ ÏÔÎÏÓÑÔ Ë ÒÁÚÄÅÌÕ ÄÌÑ
ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÈ ÉÎÓÔÒÕÍÅÎÔÏ× (ÎÁÐÒÉÍÅÒ, ÒÅÄÁËÔÏÒ
ÍÁÔÅÍÁÔÉÞÅÓËÉÈ ÆÏÒÍÕÌ ÐÏÐÁÄÁÅÔ ×
ËÁÔÅÇÏÒÉÀ math).elisp*ðÏÒÔÙ ÄÌÑ Emacs lisp.emulatorsüÍÕÌÑÔÏÒÙ ÄÒÕÇÉÈ ÏÐÅÒÁÃÉÏÎÎÙÈ ÓÉÓÔÅÍ.üÍÕÌÑÔÏÒÙ ÔÅÒÍÉÎÁÌÏ× ÓÀÄÁ ÎÅ
ÏÔÎÏÓÑÔÓÑ—ÔÅ, ËÏÔÏÒÙÅ ÒÁÚÒÁÂÏÔÁÎÙ ÄÌÑ X, ÄÏÌÖÎÙ ÂÙÔØ ×
ËÁÔÅÇÏÒÉÉ x11, Á ÔÅËÓÔÏ×ÙÅ ×
comms ÉÌÉ misc, ×
ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ËÏÎËÒÅÔÎÏÇÏ ÉÈ ÐÒÅÄÎÁÚÎÁÞÅÎÉÑ.financeðÒÉÌÏÖÅÎÉÑ ÄÌÑ ÒÁÂÏÔÙ Ó ÄÅÎØÇÁÍÉ, ÆÉÎÁÎÓÁÍÉ É ×ÓÅÍ, ÞÔÏ
Ó ÜÔÉÍ Ó×ÑÚÁÎÏ.frenchðÏÄÄÅÒÖËÁ ÆÒÁÎÃÕÚÓËÏÇÏ ÑÚÙËÁ.ftpëÌÉÅÎÔÙ É ÓÅÒ×ÅÒÙ FTP.åÓÌÉ ×ÁÛ ÐÏÒÔ ÐÏÎÉÍÁÅÔ ËÁË FTP,
ÔÁË É HTTP, ÐÏÍÅÓÔÉÔÅ ÅÇÏ × ËÁÔÅÇÏÒÉÀ
ftp É ÕËÁÖÉÔÅ ×ÔÏÒÉÞÎÕÀ ËÁÔÅÇÏÒÉÀ
www.gameséÇÒÙ.geography*ðÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ, Ó×ÑÚÁÎÎÏÅ Ó ÇÅÏÇÒÁÆÉÅÊ.germanðÏÄÄÅÒÖËÁ ÎÅÍÅÃËÏÇÏ ÑÚÙËÁ.gnome*ðÏÒÔÙ ðÒÏÅËÔÁ GNOME.gnustep*ðÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ ÄÌÑ ÏËÒÕÖÅÎÉÑ ÒÁÂÏÞÅÇÏ
ÓÔÏÌÁ GNUstep.graphicsçÒÁÆÉÞÅÓËÉÅ ÕÔÉÌÉÔÙ.hamradio*ðÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ ÄÌÑ ÌÀÂÉÔÅÌØÓËÏÇÏ ÒÁÄÉÏhaskell*ðÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ, Ó×ÑÚÁÎÎÏÅ Ó ÑÚÙËÏÍ
Haskell.hebrewðÏÄÄÅÒÖËÁ É×ÒÉÔÁ.hungarianðÏÄÄÅÒÖËÁ ×ÅÎÇÅÒÓËÏÇÏ ÑÚÙËÁ.ipv6*ðÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ, Ó×ÑÚÁÎÎÏÅ Ó IPv6.ircõÔÉÌÉÔÙ ÄÌÑ ÒÁÂÏÔÙ Ó Internet Relay Chat.japaneseðÏÄÄÅÒÖËÁ ÑÐÏÎÓËÏÇÏ ÑÚÙËÁ.javaðÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ, Ó×ÑÚÁÎÎÏÅ Ó ÑÚÙËÏÍ
Java™.ëÁÔÅÇÏÒÉÑ java ÎÉ × ËÏÅÍ ÓÌÕÞÁÅ
ÎÅ ÄÏÌÖÎÁ ÂÙÔØ ÅÄÉÎÓÔ×ÅÎÎÏÊ ÄÌÑ ÐÏÒÔÁ. ïÓÔÁרÔÅ ÄÌÑ ÐÏÒÔÏ×,
ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ÉÍÅÀÝÉÈ ÏÔÎÏÛÅÎÉÅ Ë ÑÚÙËÕ Java, ÐÏÒÔÅÒÁÍ
ÔÁËÖÅ ÒÅËÏÍÅÎÄÕÅÔÓÑ ÎÅ ÉÓÐÏÌØÚÏ×ÁÔØ
java ËÁË ÏÓÎÏ×ÎÕÀ ËÁÔÅÇÏÒÉÀ
ÐÏÒÔÁ.kde*ðÏÒÔÙ ÐÒÏÅËÔÁ
KDE.kld*úÁÇÒÕÖÁÅÍÙÅ ÍÏÄÕÌÉ ÑÄÒÁ.koreanðÏÄÄÅÒÖËÁ ËÏÒÅÊÓËÏÇÏ ÑÚÙËÁ.langñÚÙËÉ ÐÒÏÇÒÁÍÍÉÒÏ×ÁÎÉÑ.linux*Linux ÐÒÉÌÏÖÅÎÉÑ É ÕÔÉÌÉÔÙ.lisp*ðÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ, Ó×ÑÚÁÎÎÏÅ Ó ÑÚÙËÏÍ
Lisp.mailðÒÏÇÒÁÍÍÙ ÄÌÑ ÒÁÂÏÔÙ Ó ÜÌÅËÔÒÏÎÎÏÊ ÐÏÞÔÏÊ.mathðÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ ÄÌÑ ÞÉÓÌÅÎÎÙÈ ×ÙÞÉÓÌÅÎÉÊ É
ÄÒÕÇÉÅ ÕÔÉÌÉÔÙ, Ó×ÑÚÁÎÎÙÅ Ó ÍÁÔÅÍÁÔÉËÏÊ.mbone*ðÒÉÌÏÖÅÎÉÑ ÄÌÑ MBone.miscòÁÚÌÉÞÎÙÅ ÕÔÉÌÉÔÙ÷ ÏÓÎÏ×ÎÏÍ ÔÏ, ÞÔÏ ÎÅ ÐÏÐÁÄÁÅÔ ×
ÄÒÕÇÉÅ ËÁÔÅÇÏÒÉÉ. åÓÌÉ ÜÔÏ ×ÏÚÍÏÖÎÏ, ÐÏÐÒÏÂÕÊÔÅ ÎÁÊÔÉ
ÂÏÌÅÅ ÐÏÄÈÏÄÑÝÕÀ, ÞÅÍ misc, ËÁÔÅÇÏÒÉÀ ÄÌÑ
×ÁÛÅÇÏ ÐÏÒÔÁ, ÔÁË ËÁË ÚÄÅÓØ ÐÏÒÔÙ ÔÅÒÑÀÔÓÑ.multimediaðÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ ÄÌÑ ÒÁÂÏÔÙ Ó
ÍÕÌØÔÉÍÅÄÉÁ.netòÁÚÌÉÞÎÏÅ ÓÅÔÅ×ÏÅ ÐÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ.net-imðÒÏÇÒÁÍÍÙ ÍÇÎÏ×ÅÎÎÏÇÏ ÏÂÍÅÎÁ ÓÏÏÂÝÅÎÉÑÍÉ.net-mgmtðÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ ÄÌÑ ÓÅÔÅ×ÏÇÏ ÕÐÒÁ×ÌÅÎÉÑ.net-p2pðÒÉÌÏÖÅÎÉÑ ÄÌÑ ÐÉÒÉÎÇÏ×ÙÈ ÓÅÔÅÊ.newsðÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ ÄÌÑ ÒÁÂÏÔÙ Ó ËÏÎÆÅÒÅÎÃÉÑÍÉ
USENET.palmðÒÏÇÒÁÍÍÎÁÑ ÐÏÄÄÅÒÖËÁ Palm™.parallel*ðÒÉÌÏÖÅÎÉÑ, Ó×ÑÚÁÎÎÙÅ Ó ÐÁÒÁÌÌÅÌØÎÙÍÉ
×ÙÞÉÓÌÅÎÉÑÍÉ.pear*ðÏÒÔÙ, ÏÔÎÏÓÑÝÉÅÓÑ Ë ÔÅÈÎÏÌÏÇÉÉ Pear PHP.perl5*ðÏÒÔÙ, ËÏÔÏÒÙÍ ÄÌÑ ÒÁÂÏÔÙ ÔÒÅÂÕÅÔÓÑ
Perl ×ÅÒÓÉÉ 5.plan9*òÁÚÌÉÞÎÙÅ ÐÒÏÇÒÁÍÍÙ ÉÚ
Plan9.polishðÏÄÄÅÒÖËÁ ÐÏÌØÓËÏÇÏ ÑÚÙËÁ.ports-mgmtðÏÒÔÙ ÄÌÑ ÕÐÒÁ×ÌÅÎÉÑ, ÕÓÔÁÎÏ×ËÉ É ÒÁÚÒÁÂÏÔËÉ
ÐÏÒÔÏ× É ÐÁËÅÔÏ× FreeBSD.portugueseðÏÄÄÅÒÖËÁ ÐÏÒÔÕÇÁÌØÓËÏÇÏ ÑÚÙËÁ.printðÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ ÄÌÑ ÐÅÞÁÔÉ.éÎÓÔÒÕÍÅÎÔÙ ÄÌÑ ×£ÒÓÔËÉ (ÐÒÏÓÍÏÔÒÝÉËÉ É ÔÏÍÕ ÐÏÄÏÂÎÏÅ)
ÔÏÖÅ ÏÔÎÏÓÑÔÓÑ ÓÀÄÁ.
-
- python*ðÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ, Ó×ÑÚÁÎÎÏÅ Ó ÑÚÙËÏÍ Python.ruby*ðÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ, Ó×ÑÚÁÎÎÏÅ Ó ÑÚÙËÏÍ Ruby.rubygems*ðÏÒÔÙ ÄÌÑ ÐÁËÅÔÏ× RubyGems.russianðÏÄÄÅÒÖËÁ ÒÕÓÓËÏÇÏ ÑÚÙËÁ.scheme*ðÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ, Ó×ÑÚÁÎÎÏÅ Ó ÑÚÙËÏÍ
Scheme.scienceîÁÕÞÎÙÅ ÐÒÏÇÒÁÍÍÙ, ËÏÔÏÒÙÅ ÎÅ ÐÏÄÐÁÄÁÀÔ ÐÏÄ ÄÒÕÇÉÅ
ËÁÔÅÇÏÒÉÉ, ÓËÁÖÅÍ, astro,
biology ÉÌÉ
math.securityðÒÏÇÒÁÍÍÙ, ÏÂÅÓÐÅÞÉ×ÁÀÝÉÅ ÂÅÚÏÐÁÓÎÏÓÔØ ÓÉÓÔÅÍÙ.shellsòÁÚÌÉÞÎÙÅ ËÏÍÁÎÄÎÙÅ ÐÒÏÃÅÓÓÏÒÙ.sysutilsóÉÓÔÅÍÎÙÅ ÕÔÉÌÉÔÙ.spanish*ðÏÄÄÅÒÖËÁ ÉÓÐÁÎÓËÏÇÏ ÑÚÙËÁ.tcl*ðÏÒÔÙ, ÄÌÑ ÒÁÂÏÔÙ ËÏÔÏÒÙÈ ÎÕÖÅÎ Tcl.textprocõÔÉÌÉÔÙ ÄÌÑ ÏÂÒÁÂÏÔËÉ ÔÅËÓÔÏ×.éÎÓÔÒÕÍÅÎÔÙ ÄÌÑ ×£ÒÓÔËÉ ÐÏÍÅÝÁÀÔÓÑ × ËÁÔÅÇÏÒÉÀ
print, Á ÎÅ ÓÀÄÁ.tk*ðÏÒÔÙ, ÄÌÑ ÒÁÂÏÔÙ ËÏÔÏÒÙÈ ÎÕÖÅÎ Tk.ukrainianðÏÄÄÅÒÖËÁ ÕËÒÁÉÎÓËÏÇÏ ÑÚÙËÁ.vietnameseðÏÄÄÅÒÖËÁ רÅÔÎÁÍÓËÏÇÏ ÑÚÙËÁ.windowmaker*ðÏÒÔÙ, ÐÏÄÄÅÒÖÉ×ÁÀÝÉÅ ÍÅÎÅÄÖÅÒ ÏËÏÎ WindowMaker.wwwðÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ, Ó×ÑÚÁÎÎÏÅ Ó World Wide
Web.ðÏÄÄÅÒÖËÁ ÑÚÙËÁ HTML ÏÔÎÏÓÉÔÓÑ ÓÀÄÁ ÖÅ.x11X Window System É ÉÖÅ Ó ÎÉÍÉ.üÔÁ ËÁÔÅÇÏÒÉÑ
ÐÒÅÄÎÁÚÎÁÞÅÎÁ ÔÏÌØËÏ ÄÌÑ ÐÒÏÇÒÁÍÍÎÏÇÏ ÏÂÅÓÐÅÞÅÎÉÑ, ËÏÔÏÒÏÅ
ÐÏÄÄÅÒÖÉ×ÁÅÔ ÓÁÍÕ ÏËÏÎÎÕÀ ÓÉÓÔÅÍÕ. îÅ ÐÏÍÅÝÁÊÔÅ ÓÀÄÁ
ÏÂÙÞÎÙÅ ÐÒÉÌÏÖÅÎÉÑ ÄÌÑ X: ÂÏÌØÛÉÎÓÔ×Ï ÉÚ ÎÉÈ ÄÏÌÖÎÙ ÂÙÔØ
ÐÅÒÅÎÅÓÅÎÙ × ÄÒÕÇÉÅ ËÁÔÅÇÏÒÉÉ x11-*
(ÓÍÏÔÒÉÔÅ ÎÉÖÅ). åÓÌÉ ×ÁÛ ÐÏÒÔ Ñ×ÌÑÅÔÓÑ
ÐÒÉÌÏÖÅÎÉÅÍ ÄÌÑ X, ÚÁÄÁÊÔÅ USE_XLIB (ÞÔÏ
ÐÏÄÒÁÚÕÍÅ×ÁÅÔÓÑ ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ
USE_IMAKE) É ÕËÁÖÉÔÅ ÐÏÄÈÏÄÑÝÕÀ
ËÁÔÅÇÏÒÉÀ.x11-clocksþÁÓÙ ÄÌÑ X11.x11-driversäÒÁÊ×ÅÒÙ X11.x11-fmíÅÎÅÄÖÅÒÙ ÆÁÊÌÏ× ÄÌÑ X11.x11-fontsûÒÉÆÔÙ ÄÌÑ X11 É ÕÔÉÌÉÔÙ ÄÌÑ ÒÁÂÏÔÙ Ó ÎÉÍÉ.x11-serversóÅÒ×ÅÒÙ ÄÌÑ X11.x11-themesôÅÍÙ ÄÌÑ X11.x11-toolkitsðÁËÅÔÙ ÒÁÚÒÁÂÏÔÞÉËÁ ÄÌÑ X11.x11-wmïËÏÎÎÙÅ ÍÅÎÅÄÖÅÒÙ ÄÌÑ X11.xfce*ðÏÒÔÙ, Ó×ÑÚÁÎÎÙÅ Ó ÏËÒÕÖÅÎÉÅÍ ÒÁÂÏÞÅÇÏ ÓÔÏÌÁ
Xfce.zope*ðÏÄÄÅÒÖËÁ Zope.÷ÙÂÏÒ ÐÒÁ×ÉÌØÎÏÊ ËÁÔÅÇÏÒÉÉôÁË ËÁË ÍÎÏÇÉÅ ËÁÔÅÇÏÒÉÉ ÐÅÒÅËÒÙ×ÁÀÔÓÑ, ×ÁÍ ÞÁÓÔÏ ÎÅÏÂÈÏÄÉÍÏ
ÂÕÄÅÔ ×ÙÂÉÒÁÔØ, ËÁËÁÑ ÉÈ ÎÉÈ ÄÏÌÖÎÁ ÂÙÔØ ÏÓÎÏ×ÎÏÊ ÄÌÑ ×ÁÛÅÇÏ ÐÏÒÔÁ.
åÓÔØ ÎÅÓËÏÌØËÏ ÐÒÁ×ÉÌ, ÐÏ ËÏÔÏÒÙÍ ÍÏÖÎÏ ÒÅÛÉÔØ ÜÔÏÔ ×ÏÐÒÏÓ. ÷ÏÔ
ÓÐÉÓÏË ÐÒÉÏÒÉÔÅÔÏ×, × ÕÍÅÎØÛÁÀÝÅÊÓÑ ÓÔÅÐÅÎÉ ÐÒÅÄÐÏÞÔÅÎÉÑ:ðÅÒ×ÁÑ ËÁÔÅÇÏÒÉÑ ÄÏÌÖÎÁ ÂÙÔØ ÆÉÚÉÞÅÓËÏÊ ËÁÔÅÇÏÒÉÊ (ÓÍÏÔÒÉÔÅ
×ÙÛÅ). üÔÏ
ÎÅÏÂÈÏÄÉÍÏ ÄÌÑ ÓÏÚÄÁÎÉÑ ÐÁËÅÔÏ×. ðÏÓÌÅ ÜÔÏÇÏ ×ÉÒÔÕÁÌØÎÙÅ
É ÆÉÚÉÞÅÓËÉÅ ËÁÔÅÇÏÒÉÉ ÍÏÇÕÔ ÓÍÅÛÉ×ÁÔØÓÑ.óÎÁÞÁÌÁ ×ÓÅÇÄÁ ÉÄÕÔ ËÁÔÅÇÏÒÉÉ, ÓÐÅÃÉÆÉÞÎÙÅ ÄÌÑ ÑÚÙËÏ×.
îÁÐÒÉÍÅÒ, ÅÓÌÉ ×ÁÛ ÐÏÒÔ ÕÓÔÁÎÁ×ÌÉ×ÁÅÔ ÑÐÏÎÓËÉÅ ÛÒÉÆÔÙ ÄÌÑ X11,
ÔÏ ÓÔÒÏÞËÁ CATEGORIES ÄÏÌÖÎÁ ÉÍÅÔØ ×ÉÄ
japanese x11-fonts.âÏÌÅÅ ËÏÎËÒÅÔÎÙÅ ËÁÔÅÇÏÒÉÉ ÉÄÕÔ ÐÅÒ×ÙÍÉ ÐÅÒÅÄ ÂÏÌÅÅ
ÏÂÝÉÍÉ. ÷ ÞÁÓÔÎÏÓÔÉ, ÒÅÄÁËÔÏÒ HTML ÄÏÌÖÅÎ ÂÙÔØ ÏÐÉÓÁÎ ËÁË
www editors, Á ÎÅ ÎÁÏÂÏÒÏÔ. ëÒÏÍÅ ÔÏÇÏ, ×Ù
ÎÅ ÄÏÌÖÎÙ ÕËÁÚÙ×ÁÔØ ËÁÔÅÇÏÒÉÀ net, ÅÓÌÉ ÐÏÒÔ
ÏÔÎÏÓÉÔÓÑ Ë ÏÄÎÏÊ ÉÚ ËÁÔÅÇÏÒÉÊ irc,
mail,
news, security ÉÌÉ
www, ÔÁË ËÁË net
×ËÌÀÞÁÅÔÓÑ Á×ÔÏÍÁÔÉÞÅÓËÉ.x11 ÉÓÐÏÌØÚÕÅÔÓÑ ËÁË ×ÔÏÒÉÞÎÁÑ ËÁÔÅÇÏÒÉÑ
ÔÏÌØËÏ × ÓÌÕÞÁÅ, ÅÓÌÉ × ËÁÞÅÓÔ×Å ÏÓÎÏ×ÎÏÊ ËÁÔÅÇÏÒÉÉ ÕËÁÚÁÎ
ÅÓÔÅÓÔ×ÅÎÎÙÊ ÑÚÙË. ÷ ÞÁÓÔÎÏÓÔÉ, ×ÁÍ ÎÅ ÎÕÖÎÏ ÕËÁÚÙ×ÁÔØ
x11 × ËÁÞÅÓÔ×Å ËÁÔÅÇÏÒÉÉ ÄÌÑ
ÐÒÉÌÏÖÅÎÉÊ X.òÅÖÉÍÙ ÄÌÑ ÒÅÄÁËÔÏÒÁ Emacs ÄÏÌÖÎÙ
ÐÏÍÅÝÁÔØÓÑ × ÔÕ ÖÅ ËÁÔÅÇÏÒÉÀ, ÞÔÏ É ÐÒÉÌÏÖÅÎÉÅ, ËÏÔÏÒÏÅ
ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÜÔÉÍ ÒÅÖÉÍÏÍ, Á ÎÅ × editors.
îÁÐÒÉÍÅÒ, ÒÅÖÉÍ Emacs ÄÌÑ
ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÉÓÈÏÄÎÏÇÏ ËÏÄÁ ÎÅËÏÔÏÒÏÇÏ ÑÚÙËÁ ÐÒÏÇÒÁÍÍÉÒÏ×ÁÎÉÑ
ÄÏÌÖÅÎ ÂÙÔØ ÐÏÍÅÝÅÎ × ËÁÔÅÇÏÒÉÀ lang.ðÏÒÔÙ, ÕÓÔÁÎÁ×ÌÉ×ÁÀÝÉÅ ÚÁÇÒÕÖÁÅÍÙÅ ÍÏÄÕÌÉ ÑÄÒÁ, ÄÏÌÖÎÙ
ÓÏÄÅÒÖÁÔØ ×ÉÒÔÕÁÌØÎÕÀ ËÁÔÅÇÏÒÉÀ kld ×
ÓÔÒÏËÅ CATEGORIES.
misc
ÎÅ ÄÏÌÖÎÁ ÕËÁÚÙ×ÁÔØÓÑ ×ÍÅÓÔÅ Ó ÌÀÂÏÊ ÄÒÕÇÏÊ ÎÅ×ÉÒÔÕÁÌØÎÏÊ
ËÁÔÅÇÏÒÉÅÊ. åÓÌÉ ×Ù ÕËÁÚÙ×ÁÅÔÅ misc
×ÍÅÓÔÅ Ó ÞÅÍ-ÔÏ ÅÝ£ × ÓÔÒÏËÅ CATEGORIES,
ÜÔÏ ÚÎÁÞÉÔ, ÞÔÏ ×Ù ÍÏÖÅÔÅ ÓÐÏËÏÊÎÏ ÕÄÁÌÉÔØ
misc É ÐÒÏÓÔÏ ÐÏÍÅÓÔÉÔØ ÐÏÒÔ × ÜÔÏÔ
ÄÒÕÇÏÊ ÐÏÄËÁÔÁÌÏÇ!åÓÌÉ ×ÁÛ ÐÏÒÔ ÒÅÛÉÔÅÌØÎÙÍ ÏÂÒÁÚÏÍ ÎÅ ÐÏÄÐÁÄÁÅÔ ÎÉ ÐÏÄ ËÁËÕÀ
ËÁÔÅÇÏÒÉÀ, ÐÏÍÅÓÔÉÔÅ ÅÇÏ × misc.åÓÌÉ ×Ù ÎÅ Õ×ÅÒÅÎÙ × ÐÒÁ×ÉÌØÎÏÓÔÉ ×ÙÂÏÒÁ ËÁÔÅÇÏÒÉÉ, ÐÏÖÁÌÕÊÓÔÁ,
ÏÔÍÅÔØÔÅ ÜÔÏ × ×ÁÛÅÍ ÓÏÏÂÝÅÎÉÉ ÞÅÒÅÚ &man.send-pr.1;, ÞÔÏÂÙ ÍÙ
ÍÏÇÌÉ ÏÂÓÕÄÉÔØ ÜÔÏ ÄÏ ÔÏÇÏ, ËÁË ×ËÌÀÞÉÔØ ÐÏÒÔ × ëÏÌÌÅËÃÉÀ. åÓÌÉ ×Ù
Ñ×ÌÑÅÔÅÓØ ËÏÍÍÉÔÔÅÒÏÍ, ÐÏÛÌÉÔÅ ÚÁÍÅÞÁÎÉÅ ÎÁ ÁÄÒÅÓ &a.ports;, ÞÔÏÂÙ ÍÙ
ÍÏÇÌÉ ÏÂÓÕÄÉÔØ ÜÔÏ. úÁÞÁÓÔÕÀ ÎÏ×ÙÅ ÐÏÒÔÙ ÐÏÍÅÝÁÀÔÓÑ ÎÅ × ÔÕ
ËÁÔÅÇÏÒÉÀ ÔÏÌØËÏ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÉÈ ÏÔÔÕÄÁ ÓÒÁÚÕ ÖÅ ÕÄÁÌÉÌÉ.
üÔÏ ÐÒÉ×ÏÄÉÔ Ë ÉÚÌÉÛÎÅÍÕ É ÎÅÎÕÖÎÏÍÕ ÒÏÓÔÕ ÏÓÎÏ×ÎÏÇÏ ÈÒÁÎÉÌÉÝÁ
ÉÓÈÏÄÎÙÈ ÔÅËÓÔÏ×.ðÒÅÄÌÏÖÅÎÉÅ ÎÏ×ÏÊ ËÁÔÅÇÏÒÉÉðÏÓËÏÌØËÕ ÓÏ ×ÒÅÍÅÎÅÍ ëÏÌÌÅËÃÉÑ ðÏÒÔÏ× Õ×ÅÌÉÞÉÌÁÓØ, ÔÏ × Ó×ÑÚÉ
Ó ÜÔÉÍ ÂÙÌÉ ÄÏÂÁ×ÌÅÎÙ ÒÁÚÌÉÞÎÙÅ ÎÏ×ÙÅ ËÁÔÅÇÏÒÉÉ. îÏ×ÙÅ ËÁÔÅÇÏÒÉÉ
ÍÏÇÕÔ ÂÙÔØ ÉÌÉ ×ÉÒÔÕÁÌØÎÙÍÉ ËÁÔÅÇÏÒÉÑÍÉ—
ËÏÔÏÒÙÅ ÎÅ ÉÍÅÀÔ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÇÏ ÐÏÄËÁÔÁÌÏÇÁ × ÄÅÒÅ×Å ÐÏÒÔÏ×—
ÉÌÉ ÆÉÚÉÞÅÓËÉÍÉ ËÁÔÅÇÏÒÉÑÍÉ—Õ ËÏÔÏÒÙÈ
ÏÎ ÅÓÔØ. óÌÅÄÕÀÝÉÊ ÔÅËÓÔ ÓÏÄÅÒÖÉÔ ÏÂÓÕÖÄÅÎÉÅ ×ÏÐÒÏÓÏ×, ×ÏÚÎÉËÁÀÝÉÈ
ÐÒÉ ÓÏÚÄÁÎÉÉ ÎÏ×ÏÊ ÆÉÚÉÞÅÓËÏÊ ËÁÔÅÇÏÒÉÉ, ÞÔÏÂÙ ×Ù ÍÏÇÌÉ ÐÏÎÉÍÁÔØ
ÉÈ, ËÏÇÄÁ ÐÒÅÄÌÏÖÉÔÅ ÎÏ×ÕÀ ËÁÔÅÇÏÒÉÀ.÷ ÓÏÏÔ×ÅÔÓÔ×ÉÅ Ó ÓÕÝÅÓÔ×ÕÀÝÅÊ ÐÒÁËÔÉËÏÊ ÍÙ ÉÚÂÅÇÁÅÍ ÓÏÚÄÁÎÉÑ
ÎÏ×ÏÊ ÆÉÚÉÞÅÓËÏÊ ËÁÔÅÇÏÒÉÉ, ÐÏËÁ ÄÏÓÔÁÔÏÞÎÏ ÂÏÌØÛÏÅ ÞÉÓÌÏ ÐÏÒÔÏ×
ÌÏÇÉÞÅÓËÉ ÅÊ ÎÅ ÐÒÉÎÁÄÌÅÖÉÔ ÉÌÉ ÖÅ ÐÏÒÔÙ, ËÏÔÏÒÙÅ ÍÏÇÌÉ ÂÙ ÅÊ
ÐÒÉÎÁÄÌÅÖÁÔØ, ÎÅ Ñ×ÌÑÀÔÓÑ ÌÏÇÉÞÅÓËÉ ÏÂÏÓÏÂÌÅÎÎÏÊ ÇÒÕÐÐÏÊ,
ÐÒÅÄÓÔÁ×ÌÑÀÝÅÊ ÄÌÑ ×ÓÅÈ ÏÇÒÁÎÉÞÅÎÎÙÊ ÉÎÔÅÒÅÓ (× ÞÁÓÔÎÏÓÔÉ,
ËÁÔÅÇÏÒÉÉ, ÏÔÎÏÓÑÝÉÅÓÑ Ë ÅÓÔÅÓÔ×ÅÎÎÙÍ ÑÚÙËÁÍ); ÐÒÅÄÐÏÞÔÉÔÅÌØÎÏ
×ÙÐÏÌÎÅÎÉÅ ÏÂÏÉÈ ÕÓÌÏ×ÉÊ.ïÓÎÏ×ÎÏÊ ÐÒÉÞÉÎÏÊ ÄÌÑ ÜÔÏÇÏ Ñ×ÌÑÅÔÓÑ ÔÏ, ÞÔÏ ÔÁËÏÅ ÉÚÍÅÎÅÎÉÅ
ÓÏÚÄÁÅÔ ÉÚÒÑÄÎÏÅ
ËÏÌÉÞÅÓÔ×Ï ÒÁÂÏÔÙ É ÄÌÑ ËÏÍÍÉÔÔÅÒÏ×, É ÄÌÑ ×ÓÅÈ ÔÅÈ
ÐÏÌØÚÏ×ÁÔÅÌÅÊ, ËÏÔÏÒÙÅ ÏÔÓÌÅÖÉ×ÁÀÔ ÉÚÍÅÎÅÎÉÑ × ëÏÌÌÅËÃÉÉ ðÏÒÔÏ×.
÷ ÄÏÐÏÌÎÅÎÉÅ, ÐÒÅÄÌÏÖÅÎÎÁÑ ËÁÔÅÇÏÒÉÑ ÓÏÚÄÁÅÔ ÅÓÔÅÓÔ×ÅÎÎÏÅ
ÒÁÚÎÏÇÌÁÓÉÅ. (ðÏÖÁÌÕÊ, ÐÏÔÏÍÕ ÞÔÏ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ ÞÅÔËÏÇÏ ÓÏÇÌÁÛÅÎÉÑ,
Ñ×ÌÑÅÔÓÑ ÌÉ ËÁÔÅÇÏÒÉÑ ÓÌÉÛËÏÍ ÂÏÌØÛÏÊ, ÉÌÉ ÄÏÌÖÎÙ
ÌÉ ËÁÔÅÇÏÒÉÉ ÐÒÅÄÏÓÔÁ×ÌÑÔØ ÓÅÂÑ ÄÌÑ ÐÒÏÓÍÏÔÒÁ (É, ÔÁËÉÍ ÏÂÒÁÚÏÍ,
ËÁËÏÅ ËÏÌÉÞÅÓÔ×Ï ËÁÔÅÇÏÒÉÊ ÂÙÌÏ ÂÙ ÉÄÅÁÌØÎÙÍ ÚÎÁÞÅÎÉÅÍ), É ÔÁË
ÄÁÌÅÅ.)ðÒÏÃÅÄÕÒÁ:ðÒÅÄÌÏÖÉÔÅ ÎÏ×ÕÀ ËÁÔÅÇÏÒÉÀ ÎÁ &a.ports;. ÷ÁÍ ÓÌÅÄÕÅÔ
×ËÌÀÞÉÔØ ÄÌÑ ÎÏ×ÏÊ ËÁÔÅÇÏÒÉÉ ÄÅÔÁÌØÎÏÅ ÏÂÏÓÎÏ×ÁÎÉÅ, × ÔÏÍ ÞÉÓÌÅ
ÐÏÞÅÍÕ ×Ù ÓÞÉÔÁÅÔÅ, ÞÔÏ ÓÕÝÅÓÔ×ÕÀÝÉÅ ËÁÔÅÇÏÒÉÉ ÎÅ Ñ×ÌÑÀÔÓÑ
ÄÏÓÔÁÔÏÞÎÙÍÉ, É ÓÐÉÓÏË ÓÕÝÅÓÔ×ÕÀÝÉÈ ÐÏÒÔÏ×, ÐÒÅÄÌÏÖÅÎÎÙÈ ÄÌÑ
ÐÅÒÅÍÅÝÅÎÉÑ. (åÓÌÉ ÅÓÔØ ÎÏ×ÙÅ ÐÏÒÔÙ, ÏÖÉÄÁÀÝÉÅ ×
GNATS É ÐÏÐÁÄÁÀÝÉÅ × ÜÔÕ ËÁÔÅÇÏÒÉÀ,
ÔÏ ÕËÁÖÉÔÅ ÉÈ ÔÏÖÅ.) åÓÌÉ ×Ù Ñ×ÌÑÅÔÅÓØ ÓÏÐÒÏ×ÏÖÄÁÀÝÉÍ É/ÉÌÉ
ÏÔÐÒÁ×ÉÔÅÌÅÍ, ÔÏ ÕËÁÖÉÔÅ ÜÔÏ ÓÏÏÔ×ÅÔÓÔ×ÅÎÎÏ, ÔÁË ËÁË ÜÔÏ ÍÏÖÅÔ
ÐÏÍÏÞØ ×ÁÍ × ×ÁÛÅÍ ÄÅÌÅ.ðÒÉÎÉÍÁÊÔÅ ÕÞÁÓÔÉÅ × ÏÂÓÕÖÄÅÎÉÉ.åÓÌÉ ËÁÖÅÔÓÑ, ÞÔÏ ÄÌÑ ×ÁÛÅÊ ÉÄÅÉ ÐÏÑ×ÉÌÁÓØ ÐÏÄÄÅÒÖËÁ,
ÏÔÐÒÁרÔÅ PR, ËÏÔÏÒÙÊ ÂÕÄÅÔ ×ËÌÀÞÁÔØ ÏÂÏÓÎÏ×ÁÎÉÅ É ÓÐÉÓÏË
ÓÕÝÅÓÔ×ÕÀÝÉÈ ÐÏÒÔÏ×, ËÏÔÏÒÙÅ ÎÁÄÏ ÐÅÒÅÍÅÓÔÉÔØ. ÷ ÉÄÅÁÌÅ
ÜÔÏÔ PR ÄÏÌÖÅÎ ÔÁËÖÅ ×ËÌÀÞÁÔØ ÐÁÔÞÉ ÄÌÑ ÓÌÅÄÕÀÝÅÇÏ:Makefile'Ù ÄÌÑ ÎÏ×ÙÈ ÐÏÒÔÏ× ×
ÒÅÚÕÌØÔÁÔÅ ÒÅÐÏÚÉÔÏÒÎÏÇÏ ËÏÐÉÒÏ×ÁÎÉÑMakefile ÄÌÑ ËÁÔÅÇÏÒÉÊ ÓÔÁÒÙÈ
ÐÏÒÔÏ×Makefile'Ù ÄÌÑ ÐÏÒÔÏ×, ÚÁ×ÉÓÑÝÉÈ
ÏÔ ÓÔÁÒÙÈ ÐÏÒÔÏ×(× ÄÏÐÏÌÎÅÎÉÅ, ×Ù ÍÏÖÅÔÅ ×ËÌÀÞÉÔØ ÄÒÕÇÉÅ ÆÁÊÌÙ,
ÔÒÅÂÕÀÝÉÅ ÉÚÍÅÎÅÎÉÊ, ÓÏÇÌÁÓÎÏ ÐÒÏÃÅÄÕÒÅ ÉÚ òÕËÏ×ÏÄÓÔ×Á
ëÏÍÍÉÔÔÅÒÁ.)ðÏÓËÏÌØËÕ ÜÔÏ ÚÁÔÒÁÇÉ×ÁÅÔ ÉÎÆÒÁÓÔÒÕËÔÕÒÕ ÐÏÒÔÏ× É
ÏÈ×ÁÔÙ×ÁÅÔ ÎÅ ÔÏÌØËÏ ×ÙÐÏÌÎÅÎÉÅ ÒÅÐÏÚÉÔÏÒÎÏÇÏ ËÏÐÉÒÏ×ÁÎÉÑ, ÎÏ
ÔÁËÖÅ, ×ÏÚÍÏÖÎÏ, É ×ÙÐÏÌÎÅÎÉÅ ÒÅÇÒÅÓÓÉ×ÎÙÈ ÔÅÓÔÏ× ÎÁ ËÌÁÓÔÅÒÅ
ÐÏÓÔÒÏÅÎÉÑ, ÔÏ PR ÄÏÌÖÎÁ ÎÁÚÎÁÞÁÔØ ÓÅÂÅ &a.portmgr;.åÓÌÉ ÜÔÏÔ PR ÏÄÏÂÒÅÎ, ÔÏ ËÏÍÍÉÔÔÅÒÕ ÎÕÖÎÏ ÐÒÏÄÏÌÖÉÔØ
ÏÓÔÁÌØÎÕÀ ÞÁÓÔØ ÐÒÏÃÅÄÕÒÙ, ËÏÔÏÒÁÑ
ÉÚÌÏÖÅÎÁ × òÕËÏ×ÏÄÓÔ×Å ëÏÍÍÉÔÔÅÒÁ.ðÒÅÄÌÏÖÅÎÉÅ ÎÏ×ÏÊ ×ÉÒÔÕÁÌØÎÏÊ ËÁÔÅÇÏÒÉÉ ÄÏÌÖÎÏ ÂÙÔØ ÓÈÏÖÉÍ
Ó ×ÙÛÅÉÚÌÏÖÅÎÎÙÍ, ÎÏ ÐÒÉ ÜÔÏÍ ÚÁÔÒÁÇÉ×ÁÔØ ÎÁÍÎÏÇÏ ÍÅÎØÛÅ,
ÐÏÓËÏÌØËÕ ÎÉ ÏÄÉÎ ÉÚ ÐÏÒÔÏ× ÎÅ ÂÕÄÅÔ ÐÅÒÅÍÅÝÅÎ × ÄÅÊÓÔ×ÉÔÅÌØÎÏÓÔÉ.
÷ ÜÔÏÍ ÓÌÕÞÁÅ ÅÄÉÎÓÔ×ÅÎÎÙÍÉ ÐÁÔÞÁÍÉ, ×ËÌÀÞÅÎÎÙÍÉ × PR, ÂÕÄÕÔ
ÔÅ, ÞÔÏ ÄÏÂÁ×ÌÑÀÔ ÎÏ×ÕÀ ËÁÔÅÇÏÒÉÀ × CATEGORIES
ËÁÖÄÏÇÏ ÉÚ ÚÁÔÒÁÇÉ×ÁÅÍÙÈ ÐÏÒÔÏ×.ðÒÅÄÌÏÖÅÎÉÅ ÒÅÏÒÇÁÎÉÚÁÃÉÉ ×ÓÅÈ ËÁÔÅÇÏÒÉÊ÷ÒÅÍÑ ÏÔ ×ÒÅÍÅÎÉ ËÔÏ-ÎÉÂÕÄØ ÐÒÅÄÌÁÇÁÅÔ ÐÒÏÉÚ×ÅÓÔÉ ÒÅÏÒÇÁÎÉÚÁÃÉÀ
ËÁÔÅÇÏÒÉÊ ÌÉÂÏ ÄÏ Ä×ÕÈÕÒÏ×ÎÅ×ÏÊ, ÌÉÂÏ ÄÒÕÇÏÇÏ ÔÉÐÁ ÎÁ ÏÓÎÏ×Å
ËÌÀÞÅ×ÙÈ ÓÌÏ×. îÁ ÄÁÎÎÙÊ ÍÏÍÅÎÔ ÉÚ ÜÔÉÈ ÐÒÅÄÌÏÖÅÎÉÊ ÎÉÞÅÇÏ ÎÅ
ÐÏÌÕÞÉÌÏÓØ, ÐÏÔÏÍÕ ÞÔÏ, ÈÏÔÑ ÏÎÉ ÐÒÏÓÔÙ × ÒÅÁÌÉÚÁÃÉÉ, ÎÏ
ÐÒÅÄÐÏÌÁÇÁÅÍÁÑ ÐÅÒÅÄÅÌËÁ ×ÓÅÊ ËÏÌÌÅËÃÉÉ ÐÏÒÔÏ× ÐÏ ÍÅÎØÛÅÊ ÍÅÒÅ
ÐÒÉ×ÏÄÉÔ × ÕÎÙÎÉÅ. ðÏÖÁÌÕÊÓÔÁ, ÐÒÏÞÔÉÔÅ ÉÓÔÏÒÉÀ ÜÔÉÈ ÐÒÅÄÌÏÖÅÎÉÊ
× ÁÒÈÉ×ÁÈ ÒÁÓÓÙÌÏË ÐÅÒÅÄ ÔÅÍ, ËÁË ÐÒÉÓÙÌÁÔØ Ó×ÏÉ ÓÏÏÂÒÁÖÅÎÉÑ;
ÂÏÌÅÅ ÔÏÇÏ, ×Ù ÄÏÌÖÎÙ ÂÙÔØ ÇÏÔÏ×Ù ÐÒÅÄÓÔÁ×ÉÔØ ÒÁÂÏÔÁÀÝÉÊ
ÐÒÏÔÏÔÉÐ.äÉÓÔÒÉÂÕÔÉ×ÎÙÅ ÆÁÊÌÙ÷Ï ×ÔÏÒÏÊ ÞÁÓÔÉ Makefile ÚÁÄÁ£ÔÓÑ, ËÁËÉÅ
ÆÁÊÌÙ É ÏÔËÕÄÁ ÄÏÌÖÎÙ ÂÙÔØ ÓÇÒÕÖÅÎÙ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÐÏÓÔÒÏÉÔØ
ÐÏÒÔ.DISTVERSION/DISTNAME÷ ÐÅÒÅÍÅÎÎÏÊ DISTNAME ÕËÁÚÙ×ÁÅÔÓÑ ÉÍÑ ÐÏÒÔÁ
ÔÁË, ËÁË ÎÁÚ×ÁÌÉ ÅÇÏ ÓÏÚÄÁÔÅÌÉ ÐÒÏÇÒÁÍÍÎÏÇÏ ÏÂÅÓÐÅÞÅÎÉÑ. úÎÁÞÅÎÉÅ
DISTNAME ÐÏ ÕÍÏÌÞÁÎÉÀ ÓÏ×ÐÁÄÁÅÔ Ó
${PORTNAME}-${PORTVERSION}, ÔÁË ÞÔÏ
ÐÅÒÅÏÐÒÅÄÅÌÑÅÔŠţ ÚÎÁÞÅÎÉÅ ÔÏÌØËÏ × ÓÌÕÞÁÅ ÎÅÏÂÈÏÄÉÍÏÓÔÉ.
DISTNAME ÉÓÐÏÌØÚÕÅÔÓÑ ÔÏÌØËÏ × Ä×ÕÈ ÍÅÓÔÁÈ.
÷Ï-ÐÅÒ×ÙÈ, ÓÐÉÓÏË ÄÉÓÔÒÉÂÕÔÉ×ÎÙÈ ÆÁÊÌÏ×
(DISTFILES) ÐÏ ÕÍÏÌÞÁÎÉÀ ÓÏÓÔÏÉÔ ÉÚ
${DISTNAME}${EXTRACT_SUFX}. é
×Ï-×ÔÏÒÙÈ, ÐÒÅÄÐÏÌÁÇÁÅÔÓÑ, ÞÔÏ ÄÉÓÔÒÉÂÕÔÉ×ÎÙÊ ÆÁÊÌ ÂÕÄÅÔ ÒÁÓÐÁËÏ×ÁÎ ×
ÐÏÄËÁÔÁÌÏÇ Ó ÉÍÅÎÅÍ WRKSRC, ÚÎÁÞÅÎÉÅ ËÏÔÏÒÏÇÏ ÐÏ
ÕÍÏÌÞÁÎÉÀ ÅÓÔØ ÎÅ ÞÔÏ ÉÎÏÅ, ËÁË
work/${DISTNAME}.îÁÚ×ÁÎÉÑ ÎÅËÏÔÏÒÙÈ ÄÉÓÔÒÉÂÕÔÉ×Ï×, ËÏÔÏÒÙÅ ÎÅ ÕËÌÁÄÙ×ÁÀÔÓÑ ×
${PORTNAME}-${PORTVERSION}-ÓÈÅÍÕ, ÍÏÇÕÔ ÂÙÔØ
Á×ÔÏÍÁÔÉÞÅÓËÉ ÏÂÒÁÂÏÔÁÎÙ ÐÏÓÒÅÄÓÔ×ÏÍ ÕÓÔÁÎÏ×ËÉ ÐÅÒÅÍÅÎÎÏÊ
DISTVERSION. PORTVERSION É
DISTNAME ÂÕÄÕÔ ÕÎÁÓÌÅÄÏ×ÁÎÙ Á×ÔÏÍÁÔÉÞÅÓËÉ, ÎÏ
ËÏÎÅÞÎÏ ÖÅ ÍÏÇÕÔ ÂÙÔØ ÐÅÒÅÏÐÒÅÄÅÌÅÎÙ. óÌÅÄÕÀÝÁÑ ÔÁÂÌÉÃÁ
ÄÅÍÏÎÓÔÒÉÒÕÅÔ ÎÅËÏÔÏÒÙÅ ÐÒÉÍÅÒÙ:DISTVERSIONPORTVERSION0.7.1d0.7.1.d10Alpha310.a33Beta7-pre23.b7.p28:f_178f.17úÎÁÞÅÎÉÑ ÐÅÒÅÍÅÎÎÙÈ PKGNAMEPREFIX
É PKGNAMESUFFIX ÎÅ ×ÌÉÑÀÔ ÎÁ ÚÎÁÞÅÎÉÅ
DISTNAME. úÁÍÅÔØÔÅ ÔÁËÖÅ, ÞÔÏ ÅÓÌÉ ÚÎÁÞÅÎÉÅ
WRKSRC ÒÁ×ÎÏ
work/${PORTNAME}-${PORTVERSION},
É × ÓÌÕÞÁÅ, ËÏÇÄÁ ÏÒÉÇÉÎÁÌØÎÙÊ ÁÒÈÉ× ÎÁÚÙ×ÁÅÔÓÑ ÐÏ ÉÍÅÎÉ, ÏÔÌÉÞÎÏÍ
ÏÔ ${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX},
ÓËÏÒÅÅ ×ÓÅÇÏ, ×Ù ÄÏÌÖÎÙ ÏÓÔÁ×ÉÔØ DISTNAME
ËÁË ÅÓÔØ— ÌÕÞÛÅ ÐÅÒÅÏÐÒÅÄÅÌÉÔØ DISTFILES,
ÞÅÍ ÚÁÄÁ×ÁÔØ ÚÎÁÞÅÎÉÑ ËÁË
DISTNAME, ÔÁË É WRKSRC
(É, ×ÏÚÍÏÖÎÏ, ÅÝ£ É EXTRACT_SUFX).MASTER_SITESóÏÄÅÒÖÉÔ ÞÁÓÔØ Ó ËÁÔÁÌÏÇÏÍ FTP/HTTP-URL, ËÏÔÏÒÁÑ ÕËÁÚÙ×ÁÅÔ ÎÁ
ÏÒÉÇÉÎÁÌØÎÙÊ ÁÒÈÉ× ÎÁ ÓÅÒ×ÅÒÅ MASTER_SITES. îÅ
ÚÁÂÕÄØÔÅ ÌÉÄÉÒÕÀÝÉÊ ÓÌÜÛ (/)!íÁËÒÏÓ ËÏÍÁÎÄÙ make ÂÕÄÅÔ ÐÙÔÁÔØÓÑ
×ÏÓÐÏÌØÚÏ×ÁÔØÓÑ ÜÔÏÊ ÐÅÒÅÍÅÎÎÏÊ ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÄÉÓÔÒÉÂÕÔÉ×ÎÏÇÏ ÆÁÊÌÁ
Ó ÐÏÍÏÝØÀ ÐÒÏÇÒÁÍÍÙ FETCH, ÅÓÌÉ ÏÎ ÎÅ ÂÕÄÅÔ ÎÁÊÄÅÎ
× ÓÉÓÔÅÍÅ.òÅËÏÍÅÎÄÕÅÔÓÑ ÐÏÍÅÝÁÔØ × ÓÐÉÓÏË ÍÎÏÇÏ ÓÁÊÔÏ×, ÐÒÅÄÐÏÞÔÉÔÅÌØÎÏ Ó
ÒÁÚÎÙÈ ËÏÎÔÉÎÅÎÔÏ×. üÔÏ ÐÏÍÏÖÅÔ ÐÒÉ ÎÁÌÉÞÉÉ ÐÒÏÂÌÅÍ Ó ÍÉÒÏ×ÏÊ ÓÅÔØÀ.
íÙ ÄÁÖÅ ÐÌÁÎÉÒÕÅÍ ÄÏÂÁ×ÉÔØ ÐÏÄÄÅÒÖËÕ Á×ÔÏÍÁÔÉÞÅÓËÏÇÏ ÏÐÒÅÄÅÌÅÎÉÑ
ÂÌÉÖÁÊÛÅÇÏ ÓÁÊÔÁ É ÓÇÒÕÚËÉ ÆÁÊÌÏ× ÏÔÔÕÄÁ; ÎÁÌÉÞÉÅ ÎÅÓËÏÌØËÉÈ ÓÁÊÔÏ×
ÂÕÄÅÔ ÓÐÏÓÏÂÓÔ×Ï×ÁÔØ ÜÔÏÍÕ ÎÁÞÉÎÁÎÉÀ.åÓÌÉ ÏÒÉÇÉÎÁÌØÎÙÊ ÁÒÈÉ× ÎÁÈÏÄÉÔÓÑ ÎÁ ÏÄÎÏÍ ÉÚ ÔÁËÉÈ ÐÏÐÕÌÑÒÎÙÈ
ÓÅÒ×ÅÒÏ×, ËÁË SourceForge, GNU ÉÌÉ Perl CPAN, ÔÏ ÕËÁÚÙ×ÁÊÔÅ ÜÔÉ
ÓÁÊÔÙ × ÐÒÏÓÔÏÊ ÆÏÒÍÅ ÐÒÉ ÐÏÍÏÝÉ
MASTER_SITE_*
(Ë ÐÒÉÍÅÒÕ, MASTER_SITE_SOURCEFORGE,
MASTER_SITE_GNU ÉÌÉ
MASTER_SITE_PERL_CPAN. ðÒÏÓÔÏ ÕËÁÖÉÔÅ × ÐÅÒÅÍÅÎÎÏÊ
MASTER_SITES ÏÄÎÏ ÉÚ ÜÔÉÈ ÚÎÁÞÅÎÉÊ, Á ×
ÐÅÒÅÍÅÎÎÏÊ MASTER_SITE_SUBDIR ÚÁÄÁÊÔÅ ÐÕÔØ Ë
ÁÒÈÉ×Õ. ÷ÏÔ ÐÒÉÍÅÒ:MASTER_SITES= ${MASTER_SITE_GNU}
MASTER_SITE_SUBDIR= makeéÌÉ ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÓÏËÒÁÝÅÎÎÙÊ ÆÏÒÍÁÔ:MASTER_SITES= GNU/makeüÔÉ ÐÅÒÅÍÅÎÎÙÅ ÏÐÒÅÄÅÌÅÎÙ × ÆÁÊÌÅ
/usr/ports/Mk/bsd.sites.mk. ÷Ó£ ×ÒÅÍÑ
ÄÏÂÁ×ÌÑÀÔÓÑ ÎÏ×ÙÅ ÚÁÐÉÓÉ, ÔÁË ÞÔÏ ÏÂÒÁÝÁÊÔÅÓØ Ë ÐÏÓÌÅÄÎÅÊ ×ÅÒÓÉÉ
ÜÔÏÇÏ ÆÁÊÌÁ ÐÅÒÅÄ ÔÅÍ, ËÁË ÐÏÓÌÁÔØ ÎÁÍ Ó×ÏÊ ÐÏÒÔ.äÌÑ ÐÏÐÕÌÑÒÎÙÈ ÓÁÊÔÏ× ÓÕÝÅÓÔ×ÕÅÔ ÎÅÓËÏÌØËÏ
ÍÁÇÉÞÅÓËÉÈ ÍÁËÒÏÓÏ× Ó ÚÁÒÁÎÅÅ ÉÚ×ÅÓÔÎÏÊ
ÓÔÒÕËÔÕÒÏÊ ËÁÔÁÌÏÇÏ×. éÓÐÏÌØÚÕÊÔÅ ÄÌÑ ÎÉÈ ÓÏËÒÁÝÅÎÉÑ, É ÓÉÓÔÅÍÁ
ÐÏÐÙÔÁÅÔÓÑ ÕÇÁÄÁÔØ ÄÌÑ ×ÁÓ ÐÒÁ×ÉÌØÎÙÊ ÐÏÄËÁÔÁÌÏÇ.MASTER_SITES= SFåÓÌÉ ÐÏÐÙÔËÁ ÕÇÁÄÁÔØ ÎÅ ÕÄÁÌÁÓØ, ÔÏ ÜÔÏ ÍÏÖÅÔ ÂÙÔØ ÐÅÒÅÐÉÓÁÎÏ
ÓÌÅÄÕÀÝÉÍ ÏÂÒÁÚÏÍ.MASTER_SITES= SF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}þÔÏ ÔÁËÖÅ ÍÏÖÎÏ ÚÁÐÉÓÁÔØ × ÔÁËÏÍ ×ÉÄÅ:MASTER_SITES= SF
MASTER_SITE_SUBDIR= stardict/WyabdcRealPeopleTTS/${PORTVERSION}
ÓÃÓÚʹÓà KDE 3.x µÄ port µÄ±äÁ¿USE_KDELIBS_VER±íʾ port Óõ½ÁË KDE ¿â¡£
Õâ¸ö±äÁ¿¿ÉÒÔÖ¸¶¨Ï£ÍûʹÓÃµÄ KDE Ö÷°æ±¾ºÅ£¬
Èç¹ûÉèÖÃÁËÕâ¸ö±äÁ¿£¬ ÔòϵͳҲ»á½«
USE_QT_VER ÉèΪÊʵ±µÄ°æ±¾¡£
¸Ã±äÁ¿Ä¿Ç°Î¨Ò»ÓÐЧµÄÖµÊÇ
3¡£USE_KDEBASE_VER±íʾ port Óõ½ÁË KDE µÄ»ù±¾ÏµÍ³¡£
Õâ¸ö±äÁ¿¿ÉÒÔÖ¸¶¨Ï£ÍûʹÓÃµÄ KDE Ö÷°æ±¾ºÅ£¬
Èç¹ûÉèÖÃÁËÕâ¸ö±äÁ¿£¬ ÔòϵͳҲ»á½«
USE_QT_VER ÉèΪÊʵ±µÄ°æ±¾¡£
¸Ã±äÁ¿Ä¿Ç°Î¨Ò»ÓÐЧµÄÖµÊÇ 3¡£
¿ÉÓÃµÄ KDE4 ×é¼þÃû³ÆËµÃ÷akonadi¸öÈËÐÅÏ¢¹ÜÀí (PIM)´æ´¢·þÎñautomoc4Áî port ʹÓà automoc4 Áª±à¹¤¾ß¼¯kdebase»ù±¾µÄ KDE Ó¦ÓóÌÐò (Konqueror¡¢ Dolphin¡¢ Konsole)kdeexpÊÔÑéÐ﵀ KDE ¿â (°üº¬ÉÐδÍêȫȷ¶¨²»±äµÄ API)kdehier³£ÓÃµÄ KDE Ŀ¼²ã´Î½á¹¹kdelibs»ù±¾ KDE ¿âkdeprefixÈç¹ûÉèÖÃÁËÕâ¸öÑ¡Ï Ôò port ½«°²×°µ½
${KDE4_PREFIX}
¶ø²»ÊÇ ${LOCALBASE}pimlibsPIM º¯Êý¿âworkspaceÓÃÓÚ×é³É×ÀÃæµÄÓ¦ÓóÌÐòºÍº¯Êý¿â (Plasma¡¢ KWin)
Äú¿ÉÒÔʹÓà java-debug make target
ÒÔ»ñÈ¡ÓÃÓÚµ÷ÊÔ port µÄÐÅÏ¢¡£ ´ó¶àÊýǰÊö±äÁ¿µÄÖµ½Ô»áÓèÒÔ³ÊÏÖ¡£´ËÍ⣬ »¹»á¶¨ÒåÏÂÊö³£Á¿£¬ ÒÔÈ·±£ËùÓеÄ
Java port ¾ùÒÔÒ»ÖÂÖ®·½Ê½°²×°£º
ΪʹÓà Java µÄ port ¶¨ÒåµÄ³£Á¿³£Á¿ÖµJAVASHAREDIRËùÓÐ Java Ïà¹Ø×ÊÁϵݲװ¸ùĿ¼¡£
ĬÈÏÖµ£º ${PREFIX}/share/java.
JAVAJARDIRÓÃÒÔ°²×° JAR ÎļþµÄĿ¼¡£ ĬÈÏÖµ£º
${JAVASHAREDIR}/classes¡£JAVALIBDIRÆäËü port °²×°µÄ JAR ÎļþËùÔÚµÄĿ¼¡£ ĬÈÏÖµ£º
${LOCALBASE}/share/java/classes¡£
ʹÓà Ruby µÄ port ¿ÉÒÔʹÓõıäÁ¿±äÁ¿ËµÃ÷USE_RUBY´Ë port ÐèÒª Ruby¡£USE_RUBY_EXTCONF´Ë port ʹÓà extconf.rb
À´Íê³ÉÅäÖá£USE_RUBY_SETUP´Ë port ʹÓà setup.rb
À´Íê³ÉÅäÖá£RUBY_SETUP½«´Ë±äÁ¿ÃûÉèÖÃΪËùÓõÄ
setup.rb µÄÎļþÃû¡£ ͨ³£»áÊÇ
install.rb¡£