4.5. Използване на портс колекцията

Следващата част дава основни иструкции относно използването на портс колекцията за инсталиране или премахване на програми във вашата система.

4.5.1. Сдобиване с портс колекцията

Преди да инсталирате портове, трябва да се снабдите с портс колекцията, която представлява набор от Makefiles, пачове и файлове с описания, събрани в /usr/ports.

Когато инсталирахте своята FreeBSD система, Sysinstall попита, дали искате да инсталирате портс колекцията. Ако сте избрали да не я инсталирате, можете да използвате следните инструкции, за да се сдобиете с нея:

Метода Sysinstall

Този метод използва sysinstall, за да инсталира портс колекцията.

  1. Като root, изпълнете командата /stand/sysinstall, както е показано по-долу:

    # /stand/sysinstall
    
  2. Превъртете надолу и маркирайте Configure, натиснете Enter.

  3. Превъртете надолу и изберете Distributions, натиснете Enter.

  4. Превъртете надолу до ports, натиснете Space.

  5. Превъртете нагоре до Exit, натиснете Enter.

  6. Изберете желаната инсталационна медия, например CDROM, FTP, или някоя друга.

  7. Превъртете нагоре до Exit и натиснете Enter.

  8. Натиснете X, за да напуснете sysinstall.

Алтернативен метод да се сдобиете и да държите портс колекцията си актуална, е да използвате CVSup. Разгледайте портс CVSup файла, /usr/share/examples/cvsup/ports-supfile. Вижте Using CVSup (Section A.5) за повече информация относно използването на CVSup и този файл.

Метода CVSup

Това е бърз метод за сдобиване с портс колекцията, използвайки CVSup. Ако искате да обновявате портс колекцията или да научите повече за CVSup, прочетете гореспоменатата част.

  1. Инсталирайте порта net/cvsup. Вижте частта CVSup Installation (Section A.5.2) за повете подробности.

  2. Като root копирайте /usr/share/examples/cvsup/ports-supfile на ново място, като например /root или вашата потребителска директория.

  3. Редактирайте ports-supfile.

  4. Заместете CHANGE_THIS.FreeBSD.org със CVSup сървър близо до вас. Вижте страницата с CVSup огледални сървъри (Section A.5.7) за пълен списък с огледални сайтове близо до вас.

  5. Стартирайте cvsup:

    # cvsup -g -L 2 /root/ports-supfile
    
  6. Изпълнението на тази команда ще предизвиква свалянето и прилагането на последните промени към вашата портс колекция, но няма да прекомпилиране портовете във вашата система.

4.5.2. Инсталиране на портове

Първото нещо, което трябва да бъде изяснено, щом става дума за портс колекцията е, какво се има в предвид под ``скелет''. Накратко, скелетът на един порт е минималния набор от файлове, които казват на вашата FreeBSD система как да компилира и инсталира програмата. Всеки един скелет на порт включва:

Някои портове съдържат други файлове, например pkg-message. Портс системата ги използва, за да се справя със специални ситуации. За повече подробности относно тези файлове и въобще за портс, се обърнете към FreeBSD Porter's Handbook.

След като вече имате представа за това, какво може да се прави с портс колекцията, можете да инсталирате своя първи порт. Съществуват два начина да направите това, както и двата са обяснени по-долу.

Преди да започнем е нужно да изберем кой порт ще инсталираме. Има няколко начина да се направи това, като най-лесно става чрез списъка от портове на уеб страницата на FreeBSD. Можете да прелиствате из списъка с портове или да използвате функцията за търсене. Всеки порт съдържа и описание, така че можете да прочетете кратко резюме, преди да решите да го инсталирате.

Друг метод, който можете да използвате е командата whereis(1). Просто напишете whereis file, където file е програмата, която искате да инсталирате. Ако бъде намерена на системата, ще ви бъде казано къде се намира:

# whereis lsof
lsof: /usr/ports/sysutils/lsof

Това ще ни съобщи, че lsof (системна програма) може да бъде намерена в директория /usr/ports/sysutils/lsof.

Друг начин да откриете определен порт е чрез използване на вградения в портс колекцията механизъм за търсене. За да го използвате, трябва да сте в директория /usr/ports. След като сте в директорията, изпълнете командата make search name=име-на-програма , като име-на-програма е името на програмата, която се опитвате да откриете. Например, ако търсите lsof:

# 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:'', защото той ви казва къде се намира откриете порта. Другата информация не е нужна, за да инсталирате порта, така че тук няма да й бъде обърнато внимание.

За по-специализирано търсене можете да използвате make search key=string, като string е текстът, който търсите. Това предизвиква търсене в имената на портовете, коментарите, описанията и зависимостите, и може да бъде използвано за намиране на портове имащи нещо общо с дадена тема, ако не знаете точното им име.

И в двата случая, главни и малки букви в търсеното име нямат значение. Търсене за ``LSOF'' ще изведе същите резултати, както и търсене за ``lsof''.

Note: Трябва да сте root, за да инсталирате портове.

След като откриете кой порт искате да инсталирате, следва да пристъпите към самата инсталация. Портът включва инструкции за това как да се компилира изходния код, но не включва самия изходен код. Трябва да вземете изходния код или от CD-ROM, или от Интернет. Изходният код се разпространява във формата, в която е решил да използва неговият автор. Често това е tar-нат и gz-ипнат файл, но може да бъде компресиран и с някаква друга програма, или дори некомпресиран. Изходният код на програмата, в каквато и форма да идва, се нарича ``distfile''. Можете да вземете този distfile от CD-ROM или от Интернет.

4.5.2.1. Инсталиране на портове от CD-ROM

Официалните CD-ROM изображения (images) на FreeBSD проекта вече не съдържат distfiles. Те заемат доста място, което бива по-добре използвано от предварително компилирани пакети. CD-ROM продукти, като например FreeBSD PowerPak съдържат distfiles и могат да бъдат поръчани от разпространители като FreeBSD Mall. Тази част предполага, че имате такъв FreeBSD CD-ROM набор.

Поставете вашия FreeBSD CD-ROM в устройството. Монтирайте го в /cdrom. (Ако използвате друга точка на монтиране, инсталацията няма да работи.) За да започнете, преминете в директорита на порта, който искате да инсталирате:

# cd /usr/ports/sysutils/lsof

След като вече сте в директория lsof, ще видите скелета на порта. Следващата стъпка е да го компилирате или ``изградите'' (build). Това става, като просто напишете make на командния промпт. След като сторите това, ще видите съобщения подобни на тези:

# make
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from file:/cdrom/ports/distfiles/.
===>  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:

# 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 изисква високи привилегии, за да върви, ще ви бъде показано предупреждение относно сигурността. По време на изграждането и инсталирането на портове трябва да внимавате за появата на всякакви предупреждения.

Note: Можете да си спестите допълнителната стъпка, като просто изпълните make install вместо make и make install като две отделни стъпки.

Note: Някои командни интерпретатори (shells) кешират командите, налични в списъка с директории от променливата на обкръжението PATH, за да ускорят операциите по намиране на изпълнимите файлове. Ако използвате някой от тези шелове може да трябва да изпълните командата rehash след инсталирането на порта, преди новоинсталираната команда да може да бъде използвана. Това е нужно за двата шела, които са част от основната система (като например tcsh), както и за шелове, които са на разположение като портове (например shells/zsh).

Note: Моля забележете, че лицензите на няколко порта не позволяват тяхното включване към CD-ROM. Това може да бъде заради нуждата от попълване на регистрационна форма, преди да бъде позволено свалянето на дистрибуцията, или ако разпространението не е позволено поради други причини. Ако искате да инсталирате порт, който не е включен на CD-ROM, ще трябва да бъдете свързани с Интернет, за да го инсталирате (вижте следващата част).

4.5.2.2. Инсталиране на портове от Интернет

Както в предната част, ще предположим, че имате работеща връзка с Интернет. Ако не е така, ще трябва да направите инсталация от CD-ROM или да копирате ръчно нужния distfile в директория /usr/ports/distfiles.

Инсталиране на порт от Интернет става по абсолютно същия начин, както и инсталирането от CD-ROM. Единствената разлика е, че нужния distfile ще бъде свален от Интернет, вместо от CD-ROM.

Нужните стъпки са същите:

# make install
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.
Receiving lsof_4.57D.freebsd.tar.gz (439860 bytes): 100%
439860 bytes transferred in 18.0 seconds (23.90 kBps)
===>  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]
...
===>  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.
#

Както виждате, единствената разлика са редовете, казващи от къде се сваля distfile на порта.

Портс системата използва за сваляне на файлове fetch(1), която се съобразява с променливи на обкръжението, включително FTP_PASSIVE_MODE, FTP_PROXY, и FTP_PASSWORD. Може да трябва да зададете някои oт тях, ако сте зад защитна стена (firewall) или се налага да ползвате FTP/HTTP прокси. Вижте помощната страница на fetch(3) за пълен списък.

Потребители, които не могат да бъдат постоянно в Интернет, имат възможност да използват командата make fetch. Просто изпълнете командата в главната директория на портс дървото (/usr/ports) и нужните файлове ще бъдат свалени. Тази команда работи и в по-долните нива на директорийната структура, например /usr/ports/net. Забележете, че ако портът зависи от библиотеки или от други портове, това няма да предизвика свалянето и на техните distfile-ове. Заменете fetch с fetch-recursive ако искате да свалите и всички зависимости на порта.

Note: Можете да изградите всички портове в дадена категория, като изпълните make в съответната директория в портс дървото, точно както бе описано за make fetch. Това обаче е опасно, защото някои портове не могат да взаимосъществуват. В други случаи, някои портове могат да инсталират два различни файла с едно и също име.

В някои редки случаи може да се наложи да се снабдите с дистрибуционните файлове от страница, различна от MASTER_SITES (мястото от където се свалят файловете по подразбиране). Можете да зададете стойност на MASTER_SITES чрез тази команда:

# 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: Някои портове позволяват (или дори изискват) да предоставите опции при изграждането им, които пускат или спират определени части от приложението, задават опции свързани със сигурността или правят други настройки. Такива приложения са www/mozilla, security/gpgme и mail/sylpheed-claws. Ако съществуват такива опции, ще ви бъде показано съобщение.

4.5.2.3. Променяне да директориите по подразбиране за портове

Понякога е удобно (или задължително) да използвате различни директории за distfiles и ports. Променливите PORTSDIR и PREFIX могат да променят техните стойности по подразбиране. Например:

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

ще компилира порта в /usr/home/example/ports и ще инсталира всичко в /usr/local.

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

ще компилира порта в /usr/ports и ще го инсталира в /usr/home/example/local.

И разбира се,

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

ще комбинира и двете (твърде дълго е, за да го напишем цялото на тази страница, но би трябвало да ви даде основната идея).

Алтернативно, тези променливи могат да бъдат зададени като част от обкръжението. Консултирайте се с помощната страница за вашия шел за инструкции как да сторите това.

4.5.2.4. Работа с imake

Някои портове, които използват imake (който е част от X Windows системата), не функционират добре с PREFIX и ще настояват да бъдат инсталирани под /usr/X11R6. Също така, някои Perl портове игнорират PREFIX и инсталират в дървото на Perl. Да се накара тези портове да ползват PREFIX е трудно или невъзможно.

4.5.3. Премахване на инсталирани портове

След като вече знаете как да инсталирате портове, сигурно се чудите, как да ги отстранявате, в случай че инсталирате някой, но по-късно решите, че сте инсталирали грешния порт. Ще премахнем порта, инсталиран в примера по-рано (който беше lsof, за тези, които не са внимавали). Както при инсталиране на порт, трябва да преминете в директорията на порта, /usr/ports/sysutils/lsof. След като вече сте там, можете да деинсталирате lsof. Това може да бъде направено с командата make deinstall:

# cd /usr/ports/sysutils/lsof
# make deinstall
===>  Deinstalling for lsof-4.57

Това беше наистина лесно. Премахнахте lsof от вашата система. Можете да го преинсталирате, като изпълните make reinstall от директория /usr/ports/sysutils/lsof.

Последователното изпълнение на make deinstall и make reinstall не работи след като сте изпълнители командата make clean. Ако искате да премахнете порт, след като сте почистили, използвайте pkg_delete(1) както бе обяснено в частта на Наръчника относно пакети.

4.5.4. Портове и свободно място на твърдия диск

Чрез използване на портс колекцията лесно можете да запълните свободното нясто на твърдия си диск. Поради тази причина винаги трябва да почиствате работните директории чрез командата make clean. Това ще премахне директория work след като портът е бил изграден и инсталиран. Можете да премахнете tar файловете от директория distfiles и да премахнете инсталирани портове, след като вече са изпълнили задачата си.

Някои потребители ограничават порт категориите, като поставят някои от тях в refuse файл. По този начин, когато използват програмата CVSup, тя няма да свали файловете от тази категория.

4.5.5. Обновяване на портове

Осъвременяването на портовете може да е досадна задача. Например, за да обновите някой порт трябва да отидете в неговата директория, да го изградите, да деинсталирате стария порт, да инсталирате новия и накрая да почистите. Представете си да трябва да направите това с пет порта, досадно, нали? Това беше голям проблем, с който системните администратори трябваше да се справят, но сега имаме програми, които го правят вместо нас. Например, програмата sysutils/portupgrade ще свърши всичко вместо вас! Просто я инсталирайте, както всеки друг порт чрез командата make install clean command.

Сега създайте база данни с командата pkgdb -F. Това предизвиква изчитане на списъка с инсталирани портове и създаване на файл с база данни в директория /var/db/pkg. Ако стартирате portupgrade -a, тя ще прочете базата данни и файла INDEX. Най-накрая, portupgrade ще започне да сваля, изгражда, създава резервно копие на старата версия, инсталира и почиства портовете, които биват обновявани. portupgrade разполага с много опции, като само някои от тях ще бъдат представени по-долу.

Ако искате да обновите само някое определено приложение, а не всички от базата данни, използвайте portupgrade pkgname, като включите опция -r, ако искате portupgrade да обнови също и всички пакети, които зависят от дадения, и опция -R, за да обнови всички пакети, от които зависи даденият пакет. За да използвате пакети вместо портове при инсталирането, задайте -P, а ако искате само да свалите нужните distfiles без да ги изграждате или инсталирате, използвайте опция -F. За повече информация вижте помощната страница на portupgrade(1).

Note: Важно е периодично да обновявате базата данни на пакетите чрез pkgdb -F, за да поправяте несъвместимости, особено ако portupgrade ви каже да го направите. Не прекъсвайте portupgrade докато обновява базата данни с пакети, защото това ще я повреди.

Съществуват и други програми, които правят това. Прегледайте директория ports/sysutils и вижте какво ще ви заинтригува.

Този и други документи можете да намерите в ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

За въпроси относно FreeBSD, прочетете документацията преди да попитате в <questions@FreeBSD.org>.
За въпроси относно този документ, e-mail <doc@FreeBSD.org>.