---
title: "Бүлэг 5. Програм суулгах: Багцууд болон портууд"
part: хэсэг I. Эхлэл
prev: books/handbook/basics
next: books/handbook/x11
showBookMenu: true
weight: 7
params:
  path: "/books/handbook/ports/"
---

[[ports]]
= Програм суулгах: Багцууд болон портууд
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 5
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/ports/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[ports-synopsis]]
== Ерөнхий агуулга

Маш олон системийн хэрэгслүүд FreeBSD-н үндсэн системтэй нь хамт суугддаг. Гэхдээ зарим хүмүүст ажлаа гүйцээхийн тулд маш олон гуравдагчдын бэлтгэсэн програмыг суулгах шаардлага гардаг билээ. Таны систем дээр гуравдагчийн бүтээсэн програмуудыг суулгах хоёр үндсэн маш сайн аргыг FreeBSD хангаж өгдөг нь: FreeBSD-н портын цуглуулга (эх бичлэгээс нь суулгахад зориулагдсан), ба багцууд (урьдчилан хөрвүүлсэн хоёртын хэлбэрийн файлаас суулгахад зориулагдсан) юм. Энэ хоёр арга нь хоёулаа таны суулгахыг хүссэн програмын хамгийн сүүлийн хувилбарыг сүлжээ юм уу дотоод төхөөрөмжөөс суулгахад хэрэглэгдэнэ.

Энэ бүлгийг уншсаны дараа, та дараах зүйлсийг мэдэх болно:

* Гуравдагчдын бүтээсэн програмын багцыг хэрхэн суулгах.
* Портын цуглуулга ашиглаж гуравдагчдын програмыг эх бичлэгээс нь хэрхэн бүтээх.
* Өмнө суугдсан багц юм уу эсвэл портуудыг хэрхэн устгах.
* Портын цуглуулгын хэрэглэдэг анхдагч утгуудыг хэрхэн дарж бичих.
* Шаардлагатай програмын багцаа хэрхэн хайж олох.
* Програмаа хэрхэн шинэчилсэн түвшинд авчрах.

[[ports-overview]]
== Програм суулгацын ерөнхий ойлголт

Хэрэв та урьд нь UNIX(R) системийг хэрэглэж байсан бол, гуравдагчдын бүтээсэн програмыг суулгах явц дараах маягаар явагддаг билээ:

[.procedure]
====
. Програмыг татаж авах. Энэ нь голдуу эх бичлэг хэлбэрээрээ юм уу эсвэл хөрвүүлэгдсэн хоёрт файлын хэлбэрээр байдаг.
. Авсан програмаа задлах (ихэнх нь man:compress[1], man:gzip[1], эсвэл man:bzip2[1] нараар шахагдсан байдаг).
. Бичиг баримт нь хаана байгааг олоод (голдуу [.filename]#INSTALL# юм уу [.filename]#README# файлууд байдаг ба, эсвэл [.filename]#doc/# гэсэн дэд санд буй бичиг баримтууд) хэрхэн суулгах зааврыг нь унших.
. Хэрэв програм нь эх бичлэг хэлбэрээрээ байгаа бол, түүнийг хөрвүүлэх. Ингэхийн тулд магадгүй [.filename]#Makefile# файлыг засварлах, эсвэл `configure` скриптийг ажиллуулах зэрэг ажлууд байдаг.
. Програмыг шалгаад, дараа нь суулгах.
====

Хэрэв бүх зүйл сайхан бүтсэн үед л ийм явц үйлдэгддэг. Хэрэв та тусад нь FreeBSD-д зориулж порт болгоогүй програмыг суулгахыг хүсвэл, магадгүй та уг програмыг ажиллуулахын тулд тухайн програмын эх кодыг засварлах хэрэг гарна.

Хэрэв та хүсэж байгаа бол, иймэрхүү "уламжлалт" аргаар програмыг FreeBSD дээр суулгаж болно. Гэхдээ FreeBSD дээр таны нөр их хөдөлмөрийг хөнгөлөх хоёр арга байдаг нь: багцууд болон портууд юм. Энэ баримтжуулалтыг бэлтгэж байх үед {numports} гаран гуравдагчийн бэлтгэсэн програмууд ийм аргаар бэлэн болсон байгаа.

Ямар ч програм байсан, FreeBSD дээрх уг програмын багц гэж ердөө нэг л файлыг та татаж авах ёстой байдаг. Уг багц дотор тухайн програмын урьдчилан хөрвүүлсэн хувилбар, бичиг баримт болон тохируулга хийх скриптүүд зэрэг нь багтсан байгаа. Татаж авагдсан багц файлыг man:pkg_add[1], man:pkg_delete[1], man:pkg_info[1] зэрэг FreeBSD-н багц зохицуулагч програмаар өөрчилж болдог. Шинэ програм суулгах явцыг нэг л тушаалаар гүйцэтгэхийг эрмэлзсэн байдаг билээ. 

Програмуудын FreeBSD порт гэдэг нь, тухайн програмуудыг эх бичлэгээс хөрвүүлж автоматаар суулгах зориулалттай бүлэглэгдсэн файлуудыг хэлдэг.

Програмыг эх бичлэгээс нь хөрвүүлж суулгахад хэд хэдэн үйлдэл (татаж авах, задлах, нөхөх, хөрвүүлэх, суулгах) хийдгийг та санаж байгаа байх. Портын агуулж буй файлууд нь яг энэ явцыг танд зориулж автоматжуулахад зориулагдсан мэдээлэл агуулсан байдаг. Та энгийн хэдэн тушаалыг гарнаас оруулахад л, уг програм татагдаж авагдаад, задлагдан, нөхөгдөж, хөрвүүлэгдээд суугдах болно.

Яг үнэн хэрэгтээ, портлох арга нь тухайн програмыг дараа нь `pkg_add` болон бусад багц зохицуулагч програмуудад хэрэглэгдэж болохоор багц үүсгэж хэрэглэгдэж бас болдог.

Багц болон портлох энэ хоёр арга нь хоёулаа, тухайн програмын _dependencies буюу хамаатан_ програмуудыг мэдэж байдаг. Та нэг програм суулгах шаардлагатай байгаа бөгөөд уг програм нь бас нэг програмын сан файлыг суугдсан байхыг шаарддаг байна хэмээн авч үзье. Уг хоёр програм хоёулаа FreeBSD-н порт ба багц хэлбэрээр танд байгаа гэж бодъё. Хэрэв та `pkg_add` тушаалыг хэрэглэх юм уу эсвэл портын аргыг хэрэглэж уг програмыг суулганэ гэвэл, энэ хоёр арга нь хоёулаа уг програмыг суулгахад шаардагдах сан файл суугдаагүй байвал суугдаагүй байна гэж мэдээлээд, тэр сан файлыг эхлээд суулгадаг. 

Энэ хоёр аргыг харах юм бол хоорондоо тун ижилхэн үйлдэл хийдгийг та ажиглаж магадгүй юм. Тэгээд яагаад FreeBSD гуай энэ хоёр аргатай хоёулантай нь зууралдаад байгаа юм бол гэж гайхаж мададгүй. Багц болон порт хоёр нь таны суулгах нөхцлөөс шалтгаалан өөрсдийн гэсэн хүчирхэг давуу талтай. 

.Багцын давуу тал
* Програмын шахсан багц файл нь уг програмын эх бичлэгийг агуулдаггүй болохоор хэмжээний хувьд бага байдаг.
* Багцууд нэмэлт хөрвүүлэх үйлдэл шаарддаггүй. Mozilla, KDE, эсвэл GNOME зэрэг том програмуудыг удаавтар систем дээр суулгахаар бол, энэ арга нь тун их давуу талтай юм.
* Багцууд нь FreeBSD дээрх ямар нэгэн хөрвүүлэх явцын тухай мэдээлэл шаарддаггүй.

.Портын давуу талууд
* Багцыг аль болох олон систем дээр тохирогдон суулгах гэж хичээсэн болохоор, ийм багц нь маш өргөн дэлгэр сонголттойгоор хөрвүүлэгдэж бэлтгэгдсэн байдаг. Порт хэрэглэн програм суулгахаар бол, (жишээ нь) Pentium 4 эсвэл Athlon процессордоо зориулж програмын тохируулгыг өөрчилж болдог.
* Зарим програмууд өөрийнхөө чадах болон чадахгүй зэрэг нөхцлөөсөө хамаараад хөрвүүлэгдэх явцад өөрчлөлт хийгдэх тохиолдлууд байдаг. Жишээ нь, Apache програм нь маш олон төрлийн өөртөө агуулсан тохиргоотой ирдэг. Ийм програмыг та портоос бүтээх үедээ анхдагч тохиргоонуудыг нь өөрчилж өөртөө тохируулж болно.
+ 
Заримдаа, ижил төрлийн програмууд өөрсдийнхөө онцгой тохиргооноос хамаараад хэдэн хэдэн янзаар хөрвүүлэгдэж багцлагдсан байдаг. Жишээ нь, Х11 сервер суусан эсэхээс хамаараад Ghostscript програм нь [.filename]#ghostscript# гэсэн нэртэй багцлагдсан байдаг ба бас [.filename]#ghostscript-nox11# гэсэн нэрээр мөн багц хэлбэртэй байдаг. Багцлах аргад иймэрхүү явцуу тохируулгаас хамаарсан арга байдаг боловч, хэрэв хөрвүүлэх үеийн тохиргоо нь ихсэх болбол энэ арга нь тун явуургүй болдог билээ. 
* Зарим програмын лицензэнд, уг програмыг хөрвүүлэгдсэн хэлбэрээр түгээхийг хорьсон байдаг. Тийм програмуудыг эх бичлэг хэлбэрээр нь түгээх ёстой болдог билээ. 
* Зарим хүмүүс хөрвүүлэгдсэн хоёртын файлын түгээлтэнд дургүй байдаг. Ядаж эх бичлэг нь байвал, та (онолын хувьд) эх бичлэгийг уншиж болзошгүй аюулыг илрүүлж болох юм.
* Хэрэв танд нөхөлт бичлэг (засвар) байгаа бол, та уг нөхөлтийг зөвхөн эх бичлэг дээр л хийж чадна.
* Зарим хүмүүс эх бичлэгээр наадах дуртай байдаг. Тэд нар эх бичлэгийг уншаад залхуу нь хүрээд ирэхээрээ уг бичлэгийг өөрчилж эвдэх, эсвэл зээлдэж өөрчлөх ( мэдээж лицензийн дагуу ) гэх мэтээр оролддог.

Портын шинэчлэлийн тухай мэдээлэл авч байхыг хүсвэл {freebsd-ports} болон {freebsd-ports-bugs} зэрэг захианы жагсаалтад бүртгүүлэх хэрэгтэй.

[WARNING]
====

Ямар нэгэн програм суулгахаасаа өмнө http://vuxml.freebsd.org/[http://vuxml.freebsd.org/]-с програмын нууцлалын тухай мэдээллийг харах нь зүйтэй. 

Та мөн package:ports-mgmt/portaudit[]-г суулгаж болох бөгөөд энэ нь, програмыг суулгахын өмнө уг програмын хуучралт болон аюулгүй байдалтай хамаатай шаардлагатай шалгалтуудыг хийж өгдөг. Иймэрхүү шалгалтыг зарим багц суулгасны дараа та `portaudit -F -a` гэсэн тушаал хэрэглэн үйлдэж болно.
====

Энэ бүлгийн үлдсэн хэсэгт FreeBSD дээр порт юм уу багц ашиглан хэрхэн програм суулгах талаар өгүүлэх болно.

[[ports-finding-applications]]
== Програмаа олох нь

Ямар нэгэн програм суулгахаасаа өмнө та ямар програм суулгахыг хүсэж байгаа болон ямар нэртэй гэдгийг нь мэдсэн байх хэрэгтэй. 

FreeBSD-н програмын жагсаалт нь цаг тутамд нэмэгдэж байдаг. Аз болж таны хүссэн програмыг олох хэд хэдэн арга бий:

* FreeBSD-н вэб хуудас нь link:https://www.FreeBSD.org/ports/[http://www.FreeBSD.org/ports/] хаяг дээр бүх байгаа програмын шинэчлэгдсэн хувилбаруудыг нь хайж болох хэлбэрээр арчилж байдаг. Портууд нь төрөлжиж хуваагдсан байдаг бөгөөд та хүссэн програмаа хайж олох (хэрэв та нэрийг нь мэдэж байвал) эсвэл тухайн төрөлд байгаа бүх програмуудын нэрсийн жагсаалтыг харж болно.
*
+ 
Dan Langille гэгч нь FreshPorts хуудсыг http://www.FreshPorts.org/[http://www.FreshPorts.org/] хаяг дээр арчлан эрхэлдэг. FreshPorts нь порт дээр гарсан өөрчлөлтүүдийг хянаж байдаг бөгөөд хэрэв таныг хүсвэл таны сонгосон хэд хэдэн портуудыг "ажиглаж" байгаад өөрчлөлт гарангуут танд захиагаар мэдэгддэг.
*
+ 
Хэрэв та програмынхаа нэрийг нь мэдэхгүй байгаа бол Freecode (http://www.freecode.com/[http://www.freecode.com/]) хуудсан дээр хайж үзэх хэрэгтэй. Хэрэв уг хуудсан дээр шинэ програм олдсон бол буцаад FreeBSD хуудсанд очиж уг хуудсыг порт болсон эсэхийг магадлах нь зүйтэй.
* Хэрэв та портынхоо нэрийг яг мэддэг боловч ямар төрөлд багтдагийг нь мэдэх хэрэгтэй бол man:whereis[1] тушаалыг ашиглаарай. Ердөө л `whereis файлын_нэр` гэж бичих бөгөөд _файлын_нэр_ нь суулгахыг хүссэн програмын нэр билээ. Хэрэв уг програм нь олдвол, танд хаана байгааг нь дараах маягаар харуулна:
+
[source,shell]
....
# whereis lsof
lsof: /usr/ports/sysutils/lsof
....
+ 
Энэ нь бидэнд `lsof` (системийн нэгэн хэрэгсэл) програмыг [.filename]#/usr/ports/sysutils/lsof# санд буй гэж мэдэгдэж байна.
* Мөн портын модонд тухайн порт хаана байгааг олохын тулд ердийн man:echo[1] тушаалыг ашиглаж болно. Жишээ нь:
+
[source,shell]
....
# echo /usr/ports/*/*lsof*
/usr/ports/sysutils/lsof
....
+ 
Энэ нь [.filename]#/usr/ports/distfiles# сан уруу татаж авагдсан таарсан файлуудыг харуулах болно гэдгийг анхаараарай.
* Хүссэн портоо олох бас нэг арга бол портын цуглуулга дотор нь байдаг өөрийнх нь хайгчийг нь ашиглах билээ. Уг хайгчийг нь хэрэглэхийн тулд та [.filename]#/usr/ports# сан дотор байх шаардлагатай. Уг сан дотроос `make search name=програмын-нэр` гэж бичих бөгөөд _програмын-нэр_ нь таны олохыг хүссэн програмын нэр байх ёстой. Жишээлбэл `lsof` програмыг олохын тулд:
+
[source,shell]
....
# cd /usr/ports
# make search name=lsof
Port:   lsof-4.56.4
Path:   /usr/ports/sysutils/lsof
Info:   Lists information about open files (similar to fstat(1))
Maint:  obrien@FreeBSD.org
Index:  sysutils
B-deps:
R-deps: 
....
+ 
Уг хайлтын үр дүнд та "Path:" гэсэн мөрөнд анхаарлаа хандуулах хэрэгтэй бөгөөд энэ нь хаана байгааг илэрхийлж байдаг. Бусад харуулж байгаа мэдээллүүд нь програм суулгахад хэрэглэгддэггүй болохоор энд дэлгэн ярихгүй. 
+ 
Мөн портын өөр нэг хайлт хийх арга нь `quicksearch` боломж юм. Энэ боломж нь `search`-н нэгэн адил параметрийг авдаг. Жишээ нь `lsof`-г хайхад дараах үр дүнг харуулна:
+
[source,shell]
....
# cd /usr/ports
# make quicksearch name=lsof
Port:   lsof-4.87.a,7
Path:   /usr/ports/sysutils/lsof
Info:   Lists information about open files (similar to fstat(1))
....
+ 
Бүр нарийвчилан хайхыг хүсвэл `make search key=хайх-мөр` юм уу эсвэл `make quicksearch key=хайх-мөр` гэх бөгөөд _хайх-мөр_ нь тухайн програмтай холбоотой мөр байдаг. Энэ нь портын нэр, тайлбар, тодорхойлолт болон хамааралтай програм зэргүүдэд хайлт хийдэг болохоор тухайн програмынхаа талаар дэлгэрэнгүй мэдээлэл байхгүй хүнд хайхад тун тохиромжтой.
+ 
Дээрх хоёр тохиолдолд (`search` ба `quicksearch`) хайх мөр тань жижиг болон том бичсэнээс хамаардаггүй. "LSOF" гэж хайх нь "lsof" гэж хайсантай ижилхэн үр дүнд хүргэнэ.

[[packages-using]]
== Багцалсан системийг хэрэглэх нь

FreeBSD дээр багцуудыг удирдах хэд хэдэн төрлийн хэрэгслүүд байдаг:

* Ажиллаж байгаа систем дээр боломжтой байгаа болон суулгагдсан багцуудыг харах, устгах, суулгахын тулд `sysinstall`-ийг ажиллуулж болно. Дэлгэрэнгүй мэдээллийг crossref:install[packages,Програмын багц суулгах]-с үзнэ үү.
* Багцын удирдлагын тушаалын мөрийн хэрэгслүүдийг энэ хэсгийн үлдсэн хэсэгт хэлэлцэх болно.

=== Багц суулгах

Та man:pkg_add[1] хэрэгслийг ашиглан өөртөө хадгалагдсан юм уу эсвэл сүлжээнд буй серверээс FreeBSD-н програмын багц суулгаж болдог. 

.Багц татаж аваад суулгах явц
[example]
====

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

====

Хэрэв танд багц суулгах дотоод эх үүсвэр ( FreeBSD CD-ROM гэх мэт) байхгүй бол man:pkg_add[1] хэрэгслийг `-r` сонголттой хамт хэрэглэх нь зүйтэй. Энэ нь тухайн програмыг төрөл болон хувилбар зэрэг мэдээллийг нь автоматаар таньж мэдээд FTP хуудаснаас татан авч суулгадаг. 

[source,shell]
....
# pkg_add -r lsof
....

Дээрх жишээн дээр уг хэрэгсэл нь хэрэглэгчийн оролцоогүйгээр татаж аваад суулгаж буйг харуулж байна. Хэрэв та татаж авах алс хаягийг нь адилхан толин тусгал болох өөр нэг FreeBSD багцын хаягаар солихыг хүсвэл `PACKAGESITE` орчны хувьсагчийн утгад анхных нь утгыг нь дарж өөр хаяг өгөх хэрэгтэй. man:pkg_add[1] нь man:fetch[3]-г ашиглаж файл татаж авдаг бөгөөд янз бүрийн орчны хувьсагчийн утга хэрэглэдэг. Тэд нар нь `FTP_PASSIVE_MODE`, `FTP_PROXY`, мөн `FTP_PASSWORD` гэх мэт хувьсагчид байдаг. Хэрэв та галт хананы цаана байгаа юм уу эсвэл FTP/HTTP прокси хэрэглэж байгаа бол уг хувьсагчдыг өөрчлөх ёстой. Хувьсагчдын бүрэн жагсаалтыг man:fetch[3] хуудаснаас харна уу. Дээрх жишээн дээр `lsof` нь `lsof-4.56.4` оронд хэрэглэгдэв. Хэрэв та алсаас автоматаар татаж авах үйлдэл хийж байгаа бол багцны хувилбарын дугаарыг оруулалгүй бичих хэрэгтэй. man:pkg_add[1] нь тухайн програмын сүүлийн хувилбарыг автоматаар таньж суулгадаг. 

[NOTE]
====
Хэрэв та FreeBSD-CURRENT эсвэл FreeBSD-STABLE хувилбарыг хэрэглэж байгаа бол man:pkg_add[1] нь програмын хамгийн сүүлийн хувилбарыг татаж авч суулгадаг. Хэрэв та -RELEASE хувилбар хэрэглэж байгаа бол таны хэрэглэж байгаа тухайн хувилбарт тохирсон хувилбарыг нь татаж авч суулгадаг. Гэхдээ иймэрхүү үйлдлийг нь өөрчлөхийг хүсвэл `PACKAGESITE`-г өөрчлөөрэй. Жишээлбэл та FreeBSD 8.1-RELEASE систем дээр man:pkg_add[1] хэрэгслийг ажиллуулбал анхдагч хаяг нь `ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.1-release/Latest/` байх болно. Хэрэв та man:pkg_add[1]-г FreeBSD 8-STABLE багц суулгахаар тохируулахыг хүсвэл `PACKAGESITE` хувьсагчийг `ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8-stable/Latest/` гэж зааж өгөх хэрэгтэй. 
====

Багц файлууд нь [.filename]#.tgz# болон [.filename]#.tbz# гэсэн хэлбэртэй байдаг. Та тэдгээрийг link:ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/[ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/] хаягнаас олж болох бөгөөд эсвэл FreeBSD CD-ROM дээр бас буй. FreeBSD-н 4 ширхэг CD тус бүрийн [.filename]#/packages# сан дотор багц байрлаж байгаа. Багц байрлуулалт нь [.filename]#/usr/ports#-н загвартай ижил модлог байдаг. Төрөл болгон өөрийн гэсэн сантай ба багц болгон бас [.filename]#All буюу бүгд# гэсэн сангаас олддог. 

Багцны сангийн бүтэц нь портын бүтэцтэй таарч багц портын системийг бүрэлдүүлдэг юм. 

=== Багц зохицуулалт

man:pkg_info[1] хэрэгсэл нь суугдсан багцтай холбоотой мэдээллүүдийг харуулдаг. 

[source,shell]
....
# pkg_info
colordiff-1.0.13    A tool to colorize diff output
docbook-1.2         Meta-port for the different versions of the DocBook DTD
...
....

man:pkg_version[1] хэрэгсэл нь суугдсан бүх багцны ерөнхий мэдээллийг харуулж байдаг. Энэ нь багцны хувилбарыг портын санд буй програмын хувилбартай жишиж харьцуулдаг. 

[source,shell]
....
# pkg_version
colordiff                   =
docbook                     =
...
....

Хоёр дахь баганад буй тэмдэгт нь порт доторх програмын хувилбартай харьцуулсан харьцуулалт юм.

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Тэмдэг
| Утга

|=
|Суугдсан багцны хувилбар нь портын хувилбартай адилхан байна.

|<
|Суугдсан хувилбар нь портын хувилбараас хуучин байна.

|>
|Суугдсан хувилбар нь портын хувилбараас шинэ байна. (Дотоод порт тань хуучирсан байж болзошгүй)

|?
|Суугдсан багц нь портын жагсаалтад олдсонгүй. (Энэ тохиолдож болох юм. Жишээлбэл суугдсан порт нь устгагдах юм уу нэр нь өөрчлөгдсөн байж болзошгүй.)

|*
|Багц олон хувилбартай байна.

|!
|Суулгагдсан багц жагсаалтад байгаа боловч ямар нэг шалтгааны улмаас `pkg_version` тушаал нь суулгагдсан багцын хувилбарын дугаарыг жагсаалт дахь харгалзах оруулгатай харьцуулж чадахгүй байна.
|===

=== Багц устгах

Өмнө суугдсан байгаа багцыг устгахдаа man:pkg_delete[1] хэрэгслийг ашиглана. 

[source,shell]
....
# pkg_delete xchat-1.7.1
....

man:pkg_delete[1] нь багцын бүрэн нэр болон дугаарыг шаарддагийг тэмдэглэе; _xchat-1.7.1_-ийн оронд _xchat_ өгөгдсөн бол дээр дурдсан тушаал ажиллахгүй. Гэхдээ суулгагдсан багцын хувилбарыг олохын тулд man:pkg_version[1]-ийг ашиглах хялбар байдаг. Ингэхийн оронд та бүгдийг орлуулах тэмдэгт ашиглаж болох юм:

[source,shell]
....
# pkg_delete xchat\*
....

Энэ тохиолдолд `xchat`-аар эхэлсэн нэртэй бүх багцуудыг устгах болно.

=== Бусад мэдүүштэй зүйлс

Бүх багцтай холбоотой мэдээллүүд [.filename]#/var/db/pkg# сан дотор хадгалагдаж байдаг. Суугдсан багцны жагсаалт болон холбогдох тодорхойлолтууд нь уг санд буй файл дотроос уншигдах боломжтой. 

[[pkgng-intro]]
== pkgng-г бинар багцыг удирдахад ашиглах нь

pkgng нь FreeBSD-н уламжлалт багц удирдах хэрэгсэл болох pkg_install-г сайжруулж сольсон хувилбар юм. Энэ нь бинар багцтай хурдан бөгөөд хялбараар ажиллах боломжийг олгодог олон боломжуудтай юм. pkgng-н эхний хувилбар нь 2012 оны 8 сард байсан.

pkgng нь package:ports-mgmt/portmaster[] эсвэл package:ports-mgmt/portupgrade[] гэх мэт порт удирдах хэрэгслүүдийг солихоор хийгдээгүй. package:ports-mgmt/portmaster[] ба package:ports-mgmt/portupgrade[] нь гуравдагч талын програм хангамжийг бинар багц болон портын цуглуулгаас суулгаж чаддаг бол pkgng нь зөвхөн бинар багцуудыг суулгадаг.

[[pkgng-initial-setup]]
=== pkgng ашиглаж эхлэх

FreeBSD 9.1 ба түүнээс хойшхи хувилбарууд pkgng-д зориулсан "bootstrap" хэрэгсэлтэй байдаг. bootstrap хэрэгсэл нь pkgng-г татаж аваад суулгана.

Системийг эхлүүлэхийн тулд:

[source,shell]
....
# /usr/sbin/pkg
....

FreeBSD-н өмнөх хувилбаруудын хувьд pkgng-г портын цуглуулга эсвэл бинар багц хэлбэрээр суулгах ёстой.

pkgng портыг суулгахын тулд дараахийг ажиллуулна:

[source,shell]
....
# cd /usr/ports/ports-mgmt/pkg
# make
# make install clean
....

Бинар багцыг суулгахын тулд дараахийг ажиллуулна:

[source,shell]
....
# pkg_add -r pkg
....

[NOTE]
====
pkgng багц удирдах хэрэгсэл нь FreeBSD 7._X_ эсвэл FreeBSD 8.0 хувилбарууд дээр дэмжигдээгүй.
====

FreeBSD-г өмнөх суулгацын хувьд pkg_install багцын өгөгдлийн санг шинэ формат руу хувиргах шаардлагатай. Багцын өгөгдлийн санг хувиргахын тулд дараахийг ажиллуулна:

[source,shell]
....
# pkg2ng
....

Энэ алхам нь гуравдагч талын програм хангамж суугаагүй шинэ суулгацуудын хувьд шаардлагагүй.

[IMPORTANT]
====
Энэ алхмыг буцааж болохгүй. Багцын өгөгдлийн санг pkgng формат руу хөрвүүлсний дараа pkg_install хэрэгслүүдийг ашиглах ёсгүй.
====

[NOTE]
====
Багцын өгөгдлийн санг шинэ хувилбар руу хувиргалт хийх явцад алдаа гарч болох юм. Ерөнхийдөө эдгээр алдааг хаях нь аюулгүй боловч амжилттай хөрвөгдөөгүй гуравдагч талын програм хангамжийн жагсаалт `pkg2ng` ажиллаж дууссаны дараа харагддаг. Эдгээрийг гараар засах ёстой.
====

FreeBSD портын цуглуулга нь pkg_install биш pkgng ашиглан шинэ програмыг бүртгэж байгаа эсэхийг шалгахын тулд 10._X_ хувилбараас өмнөх FreeBSD хувилбарууд доорх мөрийг [.filename]#/etc/make.conf# файлд байхыг шаарддаг:

[.programlisting]
....
WITH_PKGNG=	yes
....

[[pkgng-pkg-conf]]
=== pkgng орчныг тохируулах

pkgng багц удирдах систем нь ихэнх үйлдэлдээ багцын репозиторыг ашигладаг. Багцын анхдагч репозиторын байрлал [.filename]#/usr/local/etc/pkg.conf# юм уу эсвэл тохиргооны файл дахь утгыг дарж бичдэг `PACKAGESITE` орчны хувьсагчид тодорхойлогддог.

pkgng-н нэмэлт тохиргооны боломжуудыг pkg.conf(5)-д тайлбарласан байгаа.

[[pkgng-basic-usage]]
=== pkgng-н үндсэн үйлдлүүд

pkgng-г хэрэглэх мэдээллийг pkg(8) гарын авлагын хуудаснаас эсвэл `pkg`-г нэмэлт өгөгдөлгүйгээр ажиллуулж харж болно.

pkgng тушаалын аргумент бүрийг тухайн тушаалын гарын авлагын хуудсанд тайлбарласан байдаг. Жишээ нь `pkg install`-н гарын авлагыг уншихын тулд дараахийн аль нэгийг ажиллуулж болно:

[source,shell]
....
# pkg help install
....

[source,shell]
....
# man pkg-install
....

[[pkgng-pkg-info]]
==== pkgng ашиглан суулгасан багцуудын талаарх мэдээллийг олж авах

Систем дээр суусан багцуудын мэдээллийг `pkg info` тушаал ашиглан харж болно. man:pkg_info[1]-н нэгэн адил багцын хувилбар болон бүх багцын тайлбарыг харуулах болно.

Тухайн багцын мэдээллийг ингэж харж болно:

[source,shell]
....
# pkg info packagename
....

Жишээ нь систем дээр pkgng-н ямар хувилбар суулгасан байгааг харахын тулд дараахийг ажиллуулна:

[source,shell]
....
# pkg info pkg
pkg-1.0.2			New generation package manager
....

[[pkgng-installing-deinstalling]]
==== pkgng ашиглан багц суулгах ба устгах

Ерөнхийдөө FreeBSD-н ихэнх хэрэглэгчид бинар багцыг дараахийг ажиллуулж суулгана:

[source,shell]
....
# pkg install packagename
....

`pkg install` нь <<pkgng-pkg-conf>>-д дурдсанаар репозиторын өгөгдлийг ашигладаг. Эсрэгээр pkg-add(8) нь репозиторын өгөгдөл эсвэл `PACKAGESITE`-д заасныг ашигладаггүй учир хамаарлуудыг зөв хянадаггүй бөгөөд дутуу байгаа хамаарлуудыг алсын эхээс татаж авдаггүй. Энэ хэсэг нь `pkg install`-г хэрхэн ашиглах талаар харуулна. `pkg add`-г хэрэглэх талаарх мэдээллийг pkg-add(8)-с үзнэ үү.

`pkg install` ашиглан нэмэлт бинар багцуудыг суулгаж болно. Жишээ нь curl-г суулгахын тулд:

[source,shell]
....
# pkg install curl
Updating repository catalogue
Repository catalogue is up-to-date, no need to fetch fresh copy
The following packages will be installed:

	Installing ca_root_nss: 3.13.5
	Installing curl: 7.24.0

The installation will require 4 MB more space

1 MB to be downloaded

Proceed with installing packages [y/N]: y
ca_root_nss-3.13.5.txz		100%	255KB 	255.1KB/s 255.1KB/s	00:00
curl-7.24.0.txz			100%	1108KB	1.1MB/s	1.1MB/s		00:00
Checking integrity... done
Installing ca_root_nss-3.13.5... done
Installing curl-7.24.0... done
....

Шинэ багц болон хамаарлууд хэлбэрээр суусан нэмэлт багцуудыг суулгасан багцуудын жагсаалтаас харж болно:

[source,shell]
....
# pkg info
ca_root_nss-3.13.5	The root certificate bundle from the Mozilla Project
curl-7.24.0	Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers
pkg-1.0.2	New generation package manager
....

Хэрэгцээгүй болсон багцуудыг `pkg delete` тушаалаар устгаж болно. Жишээ нь curl хэрэггүй бол:

[source,shell]
....
# pkg delete curl
The following packages will be deleted:

	curl-7.24.0_1

The deletion will free 3 MB

Proceed with deleting packages [y/N]: y
Deleting curl-7.24.0_1... done
....

[[pkgng-upgrading]]
==== pkgng ашиглан суулгасан багцуудыг шинэчлэх

Хуучирсан багцуудыг `pkg version` тушаалаар олж болно. Хэрэв локал портын мод байхгүй бол pkg-version(8) нь алсад байрлах репозиторын каталогийг ашиглах бөгөөд хэрэв байгаа бол багцын хувилбарыг танихын тулд локал портын модыг ашиглагддаг.

Багцыг шинэ хувилбар руу pkgng ашиглан шинэчилж болно. curl-н шинэ хувилбар гарсан гэж бодъё. Локал багцыг шинэ хувилбар руу шинэчилж болно:

[source,shell]
....
# pkg upgrade
Updating repository catalogue
repo.txz		100%	297KB 296.5KB/s 296.5KB/s	00:00
The following packages will be upgraded:

	Upgrading curl: 7.24.0 -> 7.24.0_1

1 MB to be downloaded

Proceed with upgrading packages [y/N]: y
curl-7.24.0_1.txz	100% 1108KB	1.1MB/s	1.1MB/s		00:00
Checking integrity... done
Upgrading curl from 7.24.0 to 7.24.0_1... done
....

[[pkgng-auditing]]
==== pkgng ашиглан суулгасан багцуудыг аудит хийх

Заримдаа портын цуглуулга дахь програм хангамжид цоорхой илэрч болно. pkgng нь өөртөө package:ports-mgmt/portaudit[] багцтай төстэй аудит хийх боломжийг агуулдаг. Систем дээр суусан програм хангамжийг аудит хийхийн тулд дараахийг ажиллуулна:

[source,shell]
....
# pkg audit -F
....

[[pkgng-advanced-usage]]
=== pkgng-н дэвшилтэй үйлдлүүд

[[pkgng-autoremove]]
==== pkgng ашиглан автоматаар салбар хамаарлуудыг арилгах

Багцыг устгаснаар дээрх жишээн дээрх package:security/ca_root_nss[] шиг хэрэггүй хамаарлуудыг үлдээж болох юм. Тийм багцууд нь суусан хэвээр байх боловч юу ч тэднээс хамааралгүй байдаг. Хамаарал болон суусан хэрэггүй багцуудыг автоматаар илрүүлж устгаж болно:

[source,shell]
....
# pkg autoremove
Packages to be autoremoved:
	ca_root_nss-3.13.5

The autoremoval will free 723 kB

Proceed with autoremoval of packages [y/N]: y
Deinstalling ca_root_nss-3.13.5... done
....

[[pkgng-backup]]
==== pkgng багцын өгөгдлийн санг нөөцлөх нь

pkg_install багц удирдах системээс ялгаатай нь pkgng өөрийн гэсэн өгөгдлийн санг нөөцлөх аргатай байдаг. Багцын өгөгдлийн сангийн агуулгыг гараар нөөцлөхийн тулд дараахийг ажиллуулна:

[source,shell]
....
# pkg backup -d pkgng.db
....

[NOTE]
====
_pkgng.db_ файлын нэрийг тохирсон файлын нэрээр солих хэрэгтэй.
====

Мөн нэмэлтээр pkgng нь багцын өгөгдлийн санг өдөр тутам автоматаар нөөцөлж байх man:periodic[8] скрипттэй байдаг. Гэхдээ энэ нь man:periodic.conf[5] файлд `daily_backup_pkgng_enable` хувьсагчийг `YES` гэж тохируулж өгсөн тохиолдолд ажилладаг.

[TIP]
====

pkg_install-н давтамжтайгаар ажиллах скрипт багцын өгөгдлийн санг нөөцлөхөөс сэргийлэхийн тулд man:periodic.conf[5] файлд `daily_backup_pkgdb_enable` хувьсагчийг `NO` болгож тохируулна.
====

Өмнөх багцын өгөгдлийн сангийн нөөцийн агуулгыг сэргээхийн тулд дараахийг ажиллуулна:

[source,shell]
....
# pkg backup -r /path/to/pkgng.db
....

[[pkgng-clean]]
==== pkgng багцуудыг устгах нь

Анхдагчаар pkgng нь бинар багцуудыг pkg.conf(5)-н `PKG_CACHEDIR`-д заасан кэш санд хадгалдаг. `pkg upgrade` ашиглан багцуудыг шинэчлэх үед шинэчилсэн багцуудын хуучин хувилбарууд автоматаар устдаггүй.

Хуучирсан бинар багцуудыг устгахын тулд:

[source,shell]
....
# pkg clean
....

[[pkgng-set]]
==== pkgng багцын мета өгөгдлийг өөрчлөх

FreeBSD-н портын цуглуулга дахь програм хангамжууд уламжлалаар бол хувилбарын гол өөрчлөлтөд өртөх магадлалтай байдаг. pkg_install-с ялгаатай нь pkgng багцын эхийг шинэчлэх тушаалтай байдаг. Жишээ нь хэрэв package:lang/php5[] анхдагчаар `5.3` хувилбар дор байж байгаад `5.4`-г оруулах зорилгоор package:lang/php53[] руу өөрчлөгдсөн бол pkg_install нь багцын өгөгдлийн санг шинэчлэхийн тулд аль портоос эхэлж суусныг мэдэх package:ports-mgmt/portmaster[] гэх мэт нэмэлт програм хэрэглэхийг шаарддаг.

package:ports-mgmt/portmaster[] ба package:ports-mgmt/portupgrade[] портуудаас ялгаатай нь шинэ болон хуучин хувилбарууд ямар дарааллаар жагссанаас хамаарч өөр байдаг. pkgng-н хувьд синтакс нь:

[source,shell]
....
# pkg set -o category/oldport:category/newport
....

Жишээ нь дээрх жишээний багцын эхийг өөрчлөхийн тулд дараахийг ажиллуулна:

[source,shell]
....
# pkg set -o lang/php5:lang/php53
....

Бас нэг өөр жишээ нь package:lang/ruby18[]-г package:lang/ruby19[] руу шинэчлэхийн тулд дараахийг ажиллуулна:

[source,shell]
....
# pkg set -o lang/ruby18:lang/ruby19
....

Төгсгөлийн жишээ нь [.filename]#libglut# хуваалцсан сангийн эхийг package:graphics/libglut[]-с package:graphics/freeglut[] руу өөрчлөхийн тулд дараахийг ажиллуулна:

[source,shell]
....
# pkg set -o graphics/libglut:graphics/freeglut
....

[NOTE]
====
Багцын эхийг солих үед ихэнх тохиолдолд өөрчлөгдсөн эхийн багцаас хамаарсан багцуудыг дахин суулгах нь чухал байдаг. Хамаарсан багцуудыг дахин суулгахын тулд дараахийг ажиллуулна:

[source,shell]
....
# pkg install -Rf graphics/freeglut
....

====

[[ports-using]]
== Портын цуглуулгыг хэрэглэх нь

Дараах хэсэгт системдээ портын цуглуулгыг ашиглан хэрхэн програм суулгах болон устгах талаар өгүүлэх болно. `make` хөрвүүлэгчийн байршил болон орчны хувьсагчийн тухай нэмэлт тодорхой мэдээллийг man:ports[7] хуудаснаас харна уу.

[WARNING]
====

2012 оны дундаас эхлээд FreeBSD портын төсөл хувилбар удирдах системийн CVS-с Subversion рүү шилжсэн. Ерөнхийдөө портыг ашиглах арга бол Portsnap-г ашиглах явдал юм. Портын локал өөрчлөлт шаардлагатай (нэмэлт локал нөхөөс арчилдаг) хэрэглэгчид магадгүй Subversion-г ашиглахыг илүүд үзэж болох юм. CVSup үйлчилгээ 2013 оны 2 сарын 28-с эхлээд ашиглагдахаа болих тул цаашид ашиглахыг зөвлөхгүй.
====

[[ports-tree]]
=== Портын цуглуулгыг суулгах нь

Портын цуглуулга нь [.filename]#/usr/ports# сан дотор [.filename]#Makefiles#, patches буюу нөхөгч файл, мөн тайлбар файлуудын цуглуулга юм. Эдгээр файлууд нь FreeBSD дээр програмуудыг бүтээж суулгахад хэрэглэгддэг. Доор байгаа зааврууд нь FreeBSD суулгах явцад портын цуглуулга суугаагүй бол түүнийг авах хэд хэдэн аргуудыг харуулж байна.

[.procedure]
====
*Procedure: Portsnap арга*

Portsnap нь портын цуглуулгыг татаж аван шинэчлэхэд зориулагдсан бөгөөд ихэнх хэрэглэгчдийн хувьд сонголт болсон хурдан, хэрэглэхэд хялбар хэрэгсэл юм. Portsnap-н нэмэлт тайлбарын талаар crossref:cutting-edge[updating-upgrading-portsnap,Portsnap-г хэрэглэх нь] хэсгээс үзнэ үү.

. Шахсан хэлбэртэй портын цуглуулгыг [.filename]#/var/db/portsnap# сан дотор татаж авах хэрэгтэй. Хэрэв та хүсвэл энэ алхмын дараа интернэтээс салгаатай ажиллаж болдог. 
+
[source,shell]
....
# portsnap fetch
....
+
. Хэрэв та Portsnap-г анх удаагаа ажиллуулж байгаа бол шахагдсан уг цуглуулгыг [.filename]#/usr/ports# сан дотор задална: 
+
[source,shell]
....
# portsnap extract
....
+ 
Portsnap-г эхний удаа дээрх маягаар ашиглаж эхэлсний дараа [.filename]#/usr/ports# санг доорх тушаалаар шинэчилнэ:
+
[source,shell]
....
# portsnap update
....
====

[.procedure]
====
*Procedure: Subversion арга*

Хэрэв портын цуглуулгыг илүү хянах шаардлагатай бол (жишээ нь локал өөрчлөлтийг арчлах бол) Subversion-г портын цуглуулгыг татахдаа ашиглаж болно. Subversion-ий талаар дэлгэрэнгүйг extref:{committers-guide}[the Subversion Primer, subversion-primer] хуудаснаас үзнэ үү.

. Subversion-г портын модыг татахаасаа өмнө суулгасан байх шаардлагатай. Хэрэв портын мод аль хэдийн байгаа бол Subversion-г иймэрхүү маягаар суулгаарай:
+
[source,shell]
....
# cd /usr/ports/devel/subversion
# make install clean
....
+ 
Хэрэв портын мод байхгүй бол Subversion-г багц хэлбэрээр суулгаж болно:
+
[source,shell]
....
# pkg_add -r subversion
....
+ 
Хэрэв pkgng нь багцыг удирдахад хэрэглэгдэж байгаа бол Subversion-г ингэж суулгаж болно:
+
[source,shell]
....
# pkg install subversion
....
+
. Портын модыг татаж авна. Илүү ажиллагааг хурдан болгохын тулд доорх тушаалын _svn.FreeBSD.org_ гэдгийн оронд танд газар зүйн байрлалын хувьд ойр байрлалыг crossref:mirrors[mirrors-svn,Subversion толин тусгал] хэсгээс харан сонгоорой. Итгэмжлэн нийлүүлэгчид зөв протокол сонгож ажиллахын тулд эхлээд extref:{committers-guide}[Subversion Primer, subversion-primer] тусламжийг унших ёстой.
+
[source,shell]
....
# svn checkout svn://svn.FreeBSD.org/ports/head /usr/ports
....
+
. Subversion-ий эхний удаагийн таталтын дараа [.filename]#/usr/ports#-г шинэчлэхийн тулд дараах тушаалыг ажиллуулна:
+
[source,shell]
....
# svn update /usr/ports
....
====

[.procedure]
====
*Procedure: Sysinstall арга*

Энэ арга нь суулгацын төхөөрөмжөөс sysinstall-г ашиглан портын цуглуулгыг суулгах арга юм. Гэхдээ тухайн төхөөрөмж дээр байгаа цуглуулга нь тухайн хувилбарыг гаргасан өдрийн хувилбартай байдгийг анзаарах хэрэгтэй. Хэрэв танд интернэт холболт байдаг бол дээр өгүүлсэн хоёр аргыг урьтал болгох нь зүйтэй. 

. `root` эрхээр ороод `sysinstall` гэсэн тушаал өгөх хэрэгтэй:
+
[source,shell]
....
# sysinstall
....
+
. [.guimenuitem]#Configure# гэдгийг сонгоод kbd:[Enter] товч дарна.
. [.guimenuitem]#Distributions# цэсийг сонгоод kbd:[Enter] дээр дарна.
. [.guimenuitem]#ports# гэж сонгон kbd:[Space] товч дээр дарах хэрэгтэй.
. Дээр буй [.guimenuitem]#Exit# гэдгийг олж сонгон kbd:[Enter] дээр дарна.
. CDROM юм уу FTP гэх мэт суулгах төхөөрөмжөө сонгоно.
. Дээр буй [.guimenuitem]#Exit# цэсийг сонгоод kbd:[Enter] дээр дарна.
. kbd:[X] дээр дарж sysinstall-с гарах болно.
====

[[cvsup-migration]]
=== CVSup/csup-с portsnap рүү шилжих нь

[WARNING]
====

2013 оны 2 сарын 28-аас эхлэн портын мод CVS рүү экспорт хийгдэхгүй учраас CVSup болон csup нь портын модны шинэчлэлийг хийхгүй.
====

[.procedure]
====
*Procedure: Portsnap руу шилжүүлэх нь*

Шилжүүлэлт нь 1 GB орчим дискний хэмжээ [.filename]#/usr# дээр байхыг шаардах бөгөөд дээрээс нь Portsnap нь [.filename]#/var# санд 150 MB дискний хэмжээ шаардана.

. man:cron[8] дотор чинь автоматаар CVSup эсвэл csup-г дуудсан ажлууд байвал хааж болиулах хэрэгтэй.
. Байгаа портын модоо өөр түр зуурын байр руу зөөнө:
+
[source,shell]
....
# mv /usr/ports /usr/ports.old
....
+
. Шинэ портын модыг Portsnap-р татаж [.filename]#/usr/ports#-д задална:
+
[source,shell]
....
# portsnap fetch extract
....
+
. distfile-ууд болон хадгалсан багцуудыг шинэ портын мод руугаа зөөнө:
+
[source,shell]
....
# mv /usr/ports.old/distfiles /usr/ports
# mv /usr/ports.old/packages /usr/ports
....
+
. Хуучин портын модыг устгана:
+
[source,shell]
....
# rm -rf /usr/ports.old
....
+
. Хэрэв CVSup өмнө нь ашиглагдаж байсан бол одоо устгаж болно:
+
[source,shell]
....
# pkg_delete -r -v cvsup-without-gui-\*
....
+ 
pkgng хэрэглэгчид дараах тушаалыг ашиглаж болно:
+
[source,shell]
....
# pkg delete cvsup-without-gui
....
====

Portsnap ашиглан портын модыг шинэчлэх болон Portsnap-н талаар дэлгэрэнгүйг crossref:cutting-edge[updating-upgrading-portsnap,Portsnap хэрэглэх нь] хэсгээс үзнэ үү.

[[ports-skeleton]]
=== Порт суулгах нь

Портын цуглуулгын талаар яриа хийхийн өмнө портын "skeleton буюу араг яс"ны талаар ойлголт авах хэрэгтэй. Хамгийн энгийн ойлголтоор бол энэ нь FreeBSD системд програмыг цэвэрхэн хөрвүүлээд суулгахыг зааварласан товч заавар байдаг. Порт болгоны араг яс дараах зүйлсийг агуулж байдаг:

* [.filename]#Makefile#. [.filename]#Makefile# нь янз бүрийн заавар бичлэгүүд агуулж байдаг бөгөөд энэ нь програм хэрхэн хөрвүүлэгдэх, бас хаана суугдах зэрэг үйлдлүүдийг тодорхойлсон байгаа. 
* [.filename]#distinfo# файл. Энэ файл нь хөрвүүлж бүтээгдэх ёстой файлуудын татаж авалт болон тэдгээрийн алдаагүй татагдсан эсэхийг (man:sha256[1] ашиглан) шалгах зэрэг мэдээллүүдийг агуулж байдаг. 
* [.filename]#files# нэртэй сан. Энэ санд таны FreeBSD систем дээр суугдах програмуудын хөрвүүлэгдэхэд хэрэглэгддэг patches буюу нөхөөс файлуудыг агуулна. Нөхөөс файлууд нь жижигхэн хэмжээний файл бөгөөд тодорхой зарим файлд гарсан өөрчлөлтүүдийг агуулдаг. Нөхөөсүүд текст хэлбэрээр оршдог ба голдуу "10 дугаар мөрийг устга" эсвэл "26 дугаар мөрийг үүгээр соль ..." гэсэн зааврууд байдаг. Нөхөөсүүдийг мөн "diffs буюу ялгааны" төрлийн файл гэж ярьцгаадаг. Ийм ялгааг нь илэрхийлсэн файлыг үүсгэхдээ man:diff[1] програмыг хэрэглэдэг юм.
+ 
Энэ санд портыг бүтээхэд шаардагдах өөр төрлийн файлууд бас байж болох юм.
* [.filename]#pkg-descr# файл. Энэ файл дотор тухайн програмын тухай нэлээн дэлгэрэнгүй тодорхойлолт агуулагдаж байдаг. 
* [.filename]#pkg-plist# файл. Энэ файл дотор порт суугдах явцад хуулагдаж суугдах файлуудын жагсаалт байдаг. Энэ нь мөн портыг устгах үед портын системд мэдэгдэх файлуудын жагсаалт билээ.

Зарим портууд [.filename]#pkg-message# гэх мэтийн өөр файлууд агуулж байдаг. Портын систем нь онцгой тохиолдолд уг файлуудтай хандаж тухайн портод харгалзах үйлдлүүдийг хийх болно. Хэрэв та ийм файлуудын тухай дэлгэрэнгүй мэдээлэл мөн портын тухай үндсэн ойлголт авахыг хүсвэл extref:{porters-handbook}[FreeBSD порт бүтээгчийн гарын авлага] хуудаснаас харна уу.

Порт дотор програмын эх бичлэгийг хэрхэн хөрвүүлж бүтээх тухай заавар байдаг болохоос уг програмын эх бичлэг нь байдаггүй. Та уг програмын эх бичлэгийг CD-ROM эсвэл интернэтээс уг зохиогчийнх нь гаргасан хэлбэрээр татаж авч болно. Голдуу эх бичлэгүүд нь tar болон gzip шахалтаар шахаж бэлдсэн байдаг боловч заримдаа өөр төрлийн хэрэгсэл ашиглан шахсан тохиолдол тулгарч магадгүй. Ямар ч хэлбэрээр програмын эх бичлэгийг авсан байг, түүнийг "distfile" гэж нэрийддэг. Доор FreeBSD порт суулгах хоёр аргыг танилцуулж байна.

[NOTE]
====
Порт суулгахын тулд та `root` эрхэнд сэлгэсэн байх ёстой.
====

[WARNING]
====

Ямар нэгэн портыг суулгахаасаа өмнө портынхоо цуглуулгыг та шинэчилсэн байх хэрэгтэй бөгөөд http://vuxml.freebsd.org/[http://vuxml.freebsd.org/] хуудсанд тухайн порттой холбоотой аюул нууцлалын тухай сэдэв хөндөгдсөн эсэхийг шалгах хэрэгтэй.

Ямар ч порт суулгахаасаа өмнө аюулгүйн нууцлалын хувьд сул тал буй эсэхийг portaudit-р автоматаар шалгаж болно. Энэ хэрэгслийг портын цуглуулга дотор олох боломжтой (package:ports-mgmt/portaudit[]). Шинэ портыг суулгахаасаа өмнө `portaudit -F` гэж ажиллуулснаар аюулгүйн нууцлалд гарсан сул тал нүхнүүдийн тухай мэдээллийн өгөгдлийн баазаас мэдээллүүдийг авч нөхөлт хийдэг. Аюулгүйн нууцлалын мэдээллийн өгөгдлийн баазын шинэчлэх явц өдөр болгон давтагдаж хийгдэх болно. Нэмэлт дэлгэрэнгүй мэдээллийг man:portaudit[1] болон man:periodic[8] хуудаснаас харна уу.
====

Портын цуглуулга таныг интернэт холболттой гэж авч үздэг. Хэрэв танд интернэт холболт байхгүй бол distfile файлуудыг [.filename]#/usr/ports/distfiles# санд хуулах хэрэгтэй.

Эхлэхийн өмнө суулгах гэж буй портын санд орох хэрэгтэй:

[source,shell]
....
# cd /usr/ports/sysutils/lsof
....

Тэгээд [.filename]#lsof# санд орсон хойноо уг сан дотор та тухайн портын араг ясыг харах болно. Дараагийн алхам бол портыг хөрвүүлэх буюу "бүтээх" билээ. Ингэхийн тулд тушаал бичих мөрөнд `make` гэж бичнэ. Ингэж гүйцэтгэсний дараа дараах маягийн явцын мэдээллийг та харах болно:

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

Хөрвүүлэлт дуусаад та буцаад тушаал бичих мөрөнд ирэнгүүт хийх ёстой дараагийн алхам бол портыг суулгах билээ. Ингэхийн тулд таны хийх ёстой зүйл бол `make` тушаалыг өөр нэг үгтэй хамт бичих ёстой бөгөөд тэр үг нь `install` юм:

[source,shell]
....
# make install
===>  Installing for lsof-4.57
...
[installation output snipped]
...
===>   Generating temporary packing list
===>   Compressing manual pages for lsof-4.57
===>   Registering installation for lsof-4.57
===>  SECURITY NOTE:
      This port has installed the following binaries which execute with
      increased privileges.
#
....

Ингээд тушаал бичих мөр боломжтой болонгуут суулгасан портоо ажиллуулах боломжтой болдог. Бид нарын жишээ авч суулгасан `lsof` програм нь нууцлалын давуу эрх шаарддаг болохоор аюулгүйн нууцлалын анхааруулга харуулагддаг. Порт суулгах үед хэрэв анхааруулга харуулагдваас түүнийг тун анхааралтай уншиж ойлгох хэрэгтэй.

Програмыг хөрвүүлж бүтээхэд хэрэглэгдсэн түр файлуудыг хадгалсан дэд сангуудыг устгах нь зүйтэй. Энэ нь дискний зайг хэмнэхээс гадна тухайн портыг шинэчлэх үед алдаа гаргуулахгүй маш сайн зуршил юм.

[source,shell]
....
# make clean
===>  Cleaning for lsof-4.57
#
....

[NOTE]
====
Та `make`, `make install` мөн `make clean` гэсэн дамжлагуудыг `make install clean` гэж товчилж бичиж болно.
====

[NOTE]
====
Зөвхөн `make install` тушаал ашиглан порт суулгахад заримдаа хэрэглэгчээс сонголт оруулахыг хүлээж удах тохиолдлууд байж болдог. Учир нь зарим тохиолдолд анхдагчаар хэрэглэгчээс сонголт хийхийг асуухаар хийгдсэн байдаг. Иймээс олон хамааралтай үед заримдаа нэг портыг бүтээж эмхэтгэхэд төвөгтэй болгодог. Үүнээс гарахын тулд `make config-recursive` тушаал ашиглан тохиргоог нэг удаагаар хийх хэрэгтэй. Дараа нь `make install [clean]` тушаалыг ажиллуулах хэрэгтэй.
====

[TIP]
====

`config-recursive` гэдгийг ашиглахад тохиргоо хийгдэх портуудын жагсаалт `all-depends-list` гэсэн man:make[1]-н нэмэлт боломжоор нэгтгэгддэг. Хамааралтай бүх портуудын тохиргоонууд тодорхой болтол буюу man:dialog[1] дэлгэц гарч ирэхгүй болж бүх портуудын тохиргоо зөвөөр хийгдтэл `make config-recursive` тушаалыг ажиллуулахыг ихэвчлэн зөвлөдөг.
====

[NOTE]
====
Зарим бүрхүүлийн орчнууд нь `PATH` орчны хувьсагч дотор буй сангууд доторх ачаалагдаж болдог програмуудын тушаалын хайлтыг түргэвчлэх зорилгоор түр хадгалагчид хадгалсан байдаг. Та хэрэв ийм төрлийн бүрхүүлийн орчин ашиглаж байгаа бол порт суулгасны дараа `rehash` тушаалыг хэрэглэн портын ачаалагдах файлыг бүрхүүлийн таних сан дотор нэмдэг. Энэ тушаал нь `tcsh` маягийн бүрхүүлд ажилладаг. `sh` төрлийн бүрхүүлд `hash -r` гэж ашигладаг. Тухайн бүрхүүлд хамаатай нэмэлт мэдээллийг нь харна уу.
====

http://www.freebsdmall.com/[FreeBSD Mall] зэрэг зарим гуравдагчдын гаргасан DVD-ROM дээр distfiles файлууд агуулагдсан байдаг. Тэдгээрийг портын цуглуулганд хэрэглэж болно. DVD-ROM-г [.filename]#/cdrom# санд таниулж холбоно. Хэрэв та өөр санд холбосон бол уг сангийн нэрийг `CD_MOUNTPTS` орчны хувьсагчид зааж өгөөрэй. Шаардлагатай distfiles файлууд нь дискнээс автоматаар хэрэглэгддэг. 

[NOTE]
====
Зарим нэг цөөн тооны портуудын лицензийг нь анхаарах хэрэгтэй. Ийм төрлийн портуудын эх бичлэг нь CD-ROM дээр байдаггүй. Тэдгээрийг татаж авах юм уу цааш нь түгээхийн тулд ямар нэгэн гэрээ бөглөх илгээх ёстой болдог. Хэрэв таны суулгах порт CD-ROM дээр байхгүй байгаа бол интернэт рүү орон хэлсний дагуу гүйцэтгэх хэрэгтэй.
====

Портын систем нь man:fetch[1] хэрэгслийг ашиглан файлуудыг татаж авдаг. Уг хэрэгсэл нь `FTP_PASSIVE_MODE`, `FTP_PROXY`, мөн `FTP_PASSWORD` гэх мэтчилэн төрөл бүрийн орчны хувьсагчдыг ашиглаж ажилладаг. Хэрэв та галт хана юм уу FTP/HTTP прокси хэрэглэдэг бол эдгээр хувьсагчдад тохирох утгыг нь зааж өгөх хэрэгтэй. man:fetch[3] хуудаснаас хувьсагчдын бүрэн жагсаалтыг харна уу.

Интернэтэд байнга холбогддоггүй хэрэглэгчдэд зориулж `make fetch` тушаал байдаг. Уг тушаалыг портын дээд сан ([.filename]#/usr/ports#) дотор гүйцэтгэхэд шаардагдах бүх файлуудыг татаж авдаг. Уг тушаалыг мөн [.filename]#/usr/ports/net# гэх зэргийн дэд сан дотор гүйцэтгэж болно. Хэрэв тухайн порт өөр сан юм уу портоос хамаардаг бол fetch гүйцэтгэл нь тэдгээр хамаарлыг нь __нөхөж татдаггүй__г анхаараарай. Харин `fetch` гэдгийг `fetch-recursive` гэж орлуулснаар тухайн портын хамааралтай порт болон сангуудыг давхар татаж авдаг.

[NOTE]
====
Та бүх портуудыг хөрвүүлж бүтээнэ гэвэл `make` тушаалыг `make fetch` тушаалыг тайлбарласан шиг дээд санд гүйцэтгэж болдог. Гэвч зарим порт байхгүй тохиолдолд ийм үйлдэл бол аюултай. Мөн зарим портууд хоёр өөр файлыг нэг нэрээр суулгах хүндрэл гаргаж болзошгүй.
====

Мөш цөөхөн тохиолдолд хэрэглэгчид `MASTER_SITES` (татаж авах файлуудын байршил) хаягнаас өөр байршил ашиглан эх файлуудыг татаж авах шаардлага гарч болох юм. Ийм үед `MASTER_SITES` хувьсагчийн утгыг дараах тушаалаар өөрчилдөг:

[source,shell]
....
# cd /usr/ports/directory
# make MASTER_SITE_OVERRIDE= \
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch
....

Энэ жишээн дээр бид `MASTER_SITES`-н утгыг `ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/` гэж өөрчиллөө.

[NOTE]
====
Зарим порт нь өөрийнхөө зарим хэсгийг шаардлагагүй гэж үзэх тохиолдолд, эсвэл аюулгүйн нууцлалын шалтгаанаар ч юм уу өөрчлөлт хийх боломж (эсвэл шаарддаг) өгдөг. package:www/firefox[], package:security/gpgme[], мөн package:mail/sylpheed-claws[] зэргүүдийг жишээ болгож болох юм. Иймэрхүү мэдэгдлүүд байвал тухайн үед танд харуулагдах болно.
====

==== Портын анхдагч санг дарж бичих

Заримдаа портыг хөрвүүлэх болон суулгах өөр санг хэрэглэх нь хэрэгтэй (онц шаардлагатай) байдаг. `WRKDIRPREFIX` болон `PREFIX` хувьсагчдын утгыг өөрчилж анхдагч сангийн байршлыг сольдог. Жишээ нь:

[source,shell]
....
# make WRKDIRPREFIX=/usr/home/example/ports install
....

гэсэн тушаал нь портыг [.filename]#/usr/home/example/ports# сан дотор хөрвүүлээд хөрвүүлэгдэж бүтээгдсэн файлуудыг [.filename]#/usr/local# санд суулгадаг.

[source,shell]
....
# make PREFIX=/usr/home/example/local install
....

гэсэн тушаал нь портыг [.filename]#/usr/ports# санд хөрвүүлж бэлдээд [.filename]#/usr/home/example/local# санд суулгана.

Мэдээж 

[source,shell]
....
# make WRKDIRPREFIX=../ports PREFIX=../local install
....

гэж хоёр хувьсагчийг хослуулан хэрэглэж бас болно (танд зөвхөн ерөнхий ойлголт өгөх зорилгоор урт мөрийг товчилж харуулсан билээ).

Мөн та уг хувьсагчдыг өөрийнхөө орчны хувьсагч болгож зарлаж болно. Тухайн бүрхүүлийнхээ орчны тухай зааврыг эхлээд уншиж танилцах нь зүйтэй.

==== `imake`-г хэрэглэх

Зарим порт `imake`-г хэрэглэдэг ( X цонхот системийн хэсэг) бөгөөд `PREFIX` хувьсагч ашиглалгүй [.filename]#/usr/X11R6# санд суулгадаг. Үүнтэй ижил зарим Perl портууд `PREFIX` хувьсагч хэрэглэлгүй Perl-н санд суулгадаг. Эдгээр портуудыг `PREFIX` хувьсагчтай хамтран ажиллуулж энэ хувьсагчийг ойлгож хүндэтгэдэг болгоно гэдэг бол тун хэцүү бөгөөд бараг боломжгүй ажил юм.

==== Портуудыг дахин тохируулах нь

Тухайн портуудыг бүтээж байхад чинь танд бүтээх тохируулгуудаас сонгож болох ncurses дээр тулгуурласан цэс харуулагддаг. Портыг нэгэнт бүтээсний дараа тэдгээр тохируулгуудыг нэмэх, хасах, эсвэл өөрчлөхийн тулд энэ цэсэнд дахин орохыг хүсэх нь хэрэглэгчдийн хувьд тийм ч нийтлэг биш юм. Үүнийг хийх олон аргууд байдаг. Нэг арга нь портыг агуулж байгаа сан уруу ороод урьдын адил тохируулгуудыг сонгосон хэвээр байгаа цэсийг дахин харуулах `make config` гэж тушаалыг ажиллуулах явдал юм. Өөр нэг арга нь портын хувьд бүх тохиргооны сонголтуудыг харуулах `make showconfig` тушаалыг ашиглах явдал юм. Бас нэг өөр арга нь бүх сонгогдсон тохируулгуудыг арилгаад танд дахин эхлэх боломж олгох `make rmconfig` тушаалыг ажиллуулах явдал юм. Эдгээр бүх аргууд болон бусдын талаар man:ports[7] гарын авлагын хуудсанд илүү дэлгэрэнгүй тайлбарласан байгаа.

[[ports-removing]]
=== Суугдсан портыг устгах нь

Та одоо портыг хэрхэн суулгах талаар мэдсэн юм чинь хэрэв буруу портоо суулгасан бол түүнийг хэрхэн утсгадаг талаар мэдэхийг хүсэж байгаа байх. Өмнөх жишээнд суулгасан портоо бид устгацгаая (анхааралгүй уншсан нэгэнд нь `lsof` програм гэж сануулъя). Портууд багцтай ижилхэн man:pkg_delete[1] тушаалаар устгагдаж болно ( <<packages-using,Багц сонголт>> хэсэгт тайлбарласан буй):

[source,shell]
....
# pkg_delete lsof-4.57
....

[[ports-upgrading]]
=== Порт шинэчлэх

Хамгийн түрүүнд man:pkg_version[1] тушаал ашиглан портын цуглуулгаас шинэ хувилбар агуулсан портуудыг жагсаах хэрэгтэй:

[source,shell]
....
# pkg_version -v
....

[[ports-file-updating]]
==== [.filename]#/usr/ports/UPDATING#-г унших

Портыг шинэчлэхээсээ өмнө портын цуглуулгаа шинэчлээд [.filename]#/usr/ports/UPDATING# файлыг шалгана. Энэ файл дотор портыг шинэчлэхэд шаардагдах үйлдлүүд болох өөрчлөгдсөн төрөл, тохируулгын өөрчлөлт, эсвэл өмнөх хувилбартайгаа зөрчилдөх хэсгүүд гэх мэтийн чухал мэдээллүүд агуулагдаж байдаг. 

Хэрэв [.filename]#UPDATING# файлд саяны таны уншсан зүйлүүдээс өөр юм агуулагдаж байвал уг файлд буй зааврыг дагах нь зүйтэй.

[[portupgrade]]
==== Portupgrade ашиглан порт шинэчлэх нь

portupgrade хэрэгсэл нь портыг амархан шинэчлэхэд зориулагдсан. Үүнийг package:ports-mgmt/portupgrade[] портоос суулгаж болно. Бусад портын нэгэн адил порт суулгадаг журмаар `make install clean` гэсэн тушаалаар суулгадаг:

[source,shell]
....
# cd /usr/ports/ports-mgmt/portupgrade
# make install clean
....

Суугдсан портын жагсаалтыг `pkgdb -F` тушаал ашиглан шалгаад үр дүнгийн мэдээлэлд байгаа зөрчлүүдийг нь залруулж засах хэрэгтэй. Шинэчлэл хийхээсээ өмнө ингэж зөрчлүүдийг арилгах нь тун сайн санаа билээ.

Хэрэв та `portupgrade -a` гэж ажиллуулбал таны системд суугдсан бүх хуучирсан портуудыг portupgrade шинэчилж эхэлдэг. Хэрэв та суугдах шинэчлэл болгонд лавлаж асуух үйлдэл хийлгэхийг хүсвэл `-i` сонголт нэмээрэй.

[source,shell]
....
# portupgrade -ai
....

Хэрэв та бүх шинэчлэгдэх порт биш харин зөвхөн тодорхой нэгэн портыг шинэчлэх хүсэлтэй бол `portupgrade багцны-нэр` гэж бичнэ. `-R` сонголт нэмснээр тухайн програмд шаардагдах портуудыг portupgrade эхлээд нь шинэчлэдэг. 

[source,shell]
....
# portupgrade -R firefox
....

Портын оронд багц хэрэглэж суулгахыг хүсвэл `-P` сонголт хэрэглэнэ. Энэ сонголттой үед portupgrade нь `PKG_PATH` хувьсагчид зааж өгсөн жагсаалтад буй сан дотроос багцуудыг хайх ба хэрэв уг санд байхгүй байгаа бол сүлжээнээс татаж нөхдөг. Хэрэв дотоод сан болон сүлжээнээс багц олдоогүй тохиолдолд portupgrade нь портоор суулгахыг оролдох болно. Порт хэлбэрээр суулгах үйлдлийг зогсоохын тулд `-PP` сонголтыг нэмж өгдөг.

[source,shell]
....
# portupgrade -PP gnome2
....

Хэрэв хөрвүүлж суулгалгүйгээр зөвхөн distfiles файлыг татаж авах (хэрэв `-P` сонголттой бол багц файлыг ) шаардлагатай бол `-F` сонголтыг ашиглаарай. Дэлгэрэнгүй мэдээллийг man:portupgrade[1] хэсэгт харна уу.

[[portmaster]]
==== Portmaster ашиглан портыг шинэчлэх нь

Portmaster нь "үндсэн" системд байдаг (бусад портуудаас хамаардаггүй) хэрэгслүүдийг ашиглахаар хийгдсэн бөгөөд аль портыг шинэчлэхээ тогтоохын тулд [.filename]#/var/db/pkg/# сан доторхийг ашигладаг. Тэрээр package:ports-mgmt/portmaster[] порт хэлбэрээр байдаг:

[source,shell]
....
# cd /usr/ports/ports-mgmt/portmaster
# make install clean
....

Portmaster нь портуудыг дөрвөн төрөлд бүлэглэдэг:

* Root буюу язгуур портууд (хамаарсан портууд байхгүй, бусдаас хамаардаггүй)
* Trunk буюу гол портууд (хамаарсан портууд байхгүй, бусдууд хамаардаг)
* Салбар портууд (хамаарсан портуудтай, бусдууд хамаардаг)
* Навч портууд (хамаарсан портуудтай, бусдаас хамаардаггүй)

Та суулгагдсан бүх портуудыг жагсааж болох бөгөөд `-L` тохируулга ашиглан шинэчлэлт байгаа эсэхийг хайж болно:

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

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

Бүх суулгагдсан портуудыг энэ хялбар тушаал ашиглан шинэчилж болно:

[source,shell]
....
# portmaster -a
....

[NOTE]
====
Анхдагчаар Portmaster нь байгаа портыг устгахаасаа өмнө нөөц багц үүсгэдэг. Хэрэв шинэ хувилбар суулгалт амжилттай болсон бол Portmaster нөөц багцыг устгана. `-b` сонголтыг ашиглаж Portmaster-т нөөцийг автоматаар устгахгүй байхыг тушаана. `-i` сонголтыг ашигласнаар порт бүрийг шинэчлэхээс өмнө асууж лавлан Portmaster-ийг интерактив горимд эхлүүлнэ.
====

Хэрэв шинэчлэх процессийн явцад алдаа гарвал та бүх портыг шинэчлэх буюу дахин бүтээхийн тулд `-f`-г ашиглаж болно:

[source,shell]
....
# portmaster -af
....

Шинэ порт бүтээж суулгахаасаа өмнө бүх хамааралтай портуудыг шинэчилж Portmaster-ийг системд шинэ порт суулгахдаа та бас ашиглаж болно:

[source,shell]
....
# portmaster shells/bash
....

Дэлгэрэнгүй мэдээллийг man:portmaster[8]-с үзнэ үү.

[[ports-disk-space]]
=== Порт ба дискний хэмжээ

Портын цуглуулга нь дискний хэмжээг байнга идэж байдаг. Портоос програмыг хөрвүүлж суулгасны дараа бэлдэж байсан [.filename]#work# санг `make clean` тушаалаар цэвэрлэхээ үргэлж санах хэрэгтэй. Та портын цуглуулгыг бүхлээр нь дараах тушаалаар цэвэрлэж болно:

[source,shell]
....
# portsclean -C
....

Маш олон эх файлууд [.filename]#distfiles# санд явцын үр дүнд хадгалагдаж байдаг. Та тэдгээрийг гар аргаар устгаж болох ба дараах тушаал хэрэглэн ямар нэгэн порттой холбоогүй болсон бүх distfiles устгаж болно:

[source,shell]
....
# portsclean -D
....

Эсвэл таны системд одоо суугдсан байгаа порттой хамаагүй бүх distfiles-уудыг дараах тушаалаар устгана:

[source,shell]
....
# portsclean -DD
....

[NOTE]
====
`portsclean` хэрэгсэл нь portupgrade програмын нэг бүрдэл хэсэг.
====

Суулгасан портоо хэрэглэхгүй болсон үедээ устгахаа мартаж болохгүй. Иймэрхүү автоматжуулалтыг гүйцэтгэдэг эвтэйхэн програм бол package:ports-mgmt/pkg_cutleaves[] порт билээ.

[[ports-nextsteps]]
== Порт суулгасны дараах үйлдлүүд

Ердийн програмыг суулгасны дараа тухайн програмтай холбоотой бичиг баримтыг унших, ямар нэгэн тохиргооны файл засварлах, эсвэл уг програм компьютер ачаалагдах үед эхлэх (хэрэв энэ нь далд чөтгөр бол) эсэхийг нь шалгах шаардлага гарч болзошгүй.

Суулгасан програм болгоныг тохируулах зарчим өөр өөр. Гэхдээ та шинэ програм суулгачихаад "Одоо яах вэ?" гэсэн асуулттай тулгарах үед дараах зүйлс тусалж магадгүй:

* man:pkg_info[1] тушаалыг ашиглан ямар файл хаана яаж суугдсаныг харна. Жишээ нь та саяхан FooPackage version 1.0.0, програмыг суулгасан бол 
+
[source,shell]
....
# pkg_info -L foopackage-1.0.0 | less
....
+ 
гэсэн тушаал нь уг програмыг суулгах явцад хуулсан бүх файлуудыг харуулдаг. [.filename]#man/# санд хуулсан файл байвал тун анхааралтай харах хэрэгтэй. Энэ нь гарын авлага файлууд байдаг. Мөн [.filename]#etc/# санд хуулсан файлууд нь тохируулгын файлууд байдаг бөгөөд [.filename]#doc/# санд бол дэлгэрэнгүй бичиг баримтуудыг хадгалсан байдаг.
+ 
Хэрэв та програмынхаа хувилбарын талаар сайн мэдэхгүй байгаа бол 
+
[source,shell]
....
# pkg_info | grep -i foopackage
....
+ 
гэсэн тушаал нь бүх суугдсан програм дотор _foopackage_ гэсэн нэртэй програм байвал харуулдаг. _foopackage_-н оронд хүссэн програмынхаа нэрийг бичээрэй.
* Програмын гарын авлага хаана суугдсаныг мэдсэн үедээ man:man[1]-г ашиглан харах хэрэгтэй. Мөн түүнчлэн ийм аргаар тохируулга болон нэмэлт мэдээллийн файлуудыг нь тухай бүрд нь харах хэрэгтэй.
* Хэрэв уг програм өөрийн гэсэн вэб хуудастай бол түүнд нь зорчин нэмэлт мэдээлэл авах, байнгын асуулт хариултыг нь үзэх гэх мэтчилэн оролдоорой. Уг програмын вэб хуудасны хаяг нь 
+
[source,shell]
....
# pkg_info foopackage-1.0.0
....
+ 
тушаалын гаралт дээр `WWW:` гэсэн хэсэгт байдаг. 
* Эхлэн ачаалагдах үед эхлэх ёстой портууд (Интернэт сервер гэх мэт) голдуу [.filename]#/usr/local/etc/rc.d# сан дотор эхлүүлэх файлаа хуулдаг. Та уг файлыг шаардлагатай бол засварлах юм уу өөрчилж болно. crossref:config[configtuning-starting-services,Үйлчилгээг эхлүүлэх] хэсгээс дэлгэрэнгүй мэдэээллийг харна уу.

[[ports-broken]]
== Эвдрэлтэй портыг засах нь

Хэрэв та портыг ажиллуулж чадаагүй тохиолдолд хийж болох хэд хэдэн алхам бий:

. link:https://www.FreeBSD.org/support/#gnats[Problem Report database] хуудсанд уг портын засварлах заавар бий эсэхийг шалгах. Хэрэв байвал уг зааврын дагуу засварлах хэрэгтэй.
. Уг портыг арчилж сайжруулдаг хүнээс тусламж авах. `make maintainer` тушаал ашиглаад юм уу эсвэл [.filename]#Makefile# файл дотроос тухайн арчлагчийн захианы хаягийг нь олох хэрэгтэй. Захиандаа портынхоо нэр болон хувилбарыг оруулан ([.filename]#Makefile# файлд буй `$FreeBSD:` мөрийг илгээх хэрэгтэй ) хэрэв боломжтой бол алдаа заасан явцын мэдээллүүдийг явуулах хэрэгтэй.
+
[NOTE]
====
Зарим порт нь хувь хүнээр биш харин extref:{mailing-list-faq}[захианы жагсаалтаар] арчлагдаж байдаг. Энэ жагсаалтад бүгд биш ч гэсэн ихэнх хүмүүс нь mailto:freebsd-listname@FreeBSD.org[freebsd-listname@FreeBSD.org] маягийн захианы хаягтай байдаг. Ийм хүмүүс рүү захиагаа явуулах хэрэгтэй.

Голдуу mailto:ports@FreeBSD.org[ports@FreeBSD.org]-р арчлагдаж байгаа гэсэн портууд нэг тодорхой хүнээр арчлагдаагүй байдаг. Завсарлалт болон тусламж зэргүүд нь ихэнхдээ захианы жагсаалтад буй хүмүүсээс ирдэг. Туслан дэмжих хүмүүс бидэнд үргэлж хэрэгтэй байгаа!
====

+ 
Хэрэв та ямар нэгэн хариулт аваагүй бол man:send-pr[1]-г ашиглан алдааны мэдэгдэл ( extref:{problem-reports}[FreeBSD-н алдааг мэдээлэх] хэсгийг харна уу) хийж болно.
. Өөрөө засаад үз! extref:{porters-handbook}[Порт хийгчдийн гарын авлага] дотор "портын" ажиллах зарчим болон бүтэц заавар, засах дараалал, тэр байтугай өөрөө порт зохиох талаар дурдсан байгаа!
. Ойрхон байгаа FTP хуудаснаас багцыг татаж авах хэрэгтэй. "Үндсэн" багцны цуглуулга `ftp.FreeBSD.org` хуудасны link:ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/[багцны санд] байдаг бөгөөд crossref:mirrors[mirrors-ftp,толин тусгал сайтууд]уудыг _эхлээд_ турш! Ингэсэн нь эх бичлэгийг хөрвүүлэхээс түргэн бэлэн болсон багцыг татаж аван цаг хэмнэж байдаг. man:pkg_add[1] програмыг ашиглан өөртөө хадгалсан багцаа систем дээрээ суулгана. 
