Категорії
FreeBSD

Работаем с портами

Опишу несколько стандартных команд для работы с портами. На первый взгляд покажеться это ненужным, но в то же время и нужное. Сможете ли вы навскидку сказать, от каких пакетов зависит данный порт? Или пора лим обновить или подождать? На все эти и другие вопросы ответы найдёте ниже.

1) Поиск нужного порта.

Поиск можно осуществлять как по имени, так и по описанию.

– по имени (ключевое слово name):

# cd /usr/ports
# make search name=opera
Port: opera-7.21.20031013
Path: /usr/ports/www/opera
Info: A blazingly fast, full-featured, ↵
standards-compliant browser
Maint: avleeuwen@piwebs.com
Index: www
B-deps: ...
R-deps: ...
...

– по описанию (ключевое слово key):

# make search key=dvd
Port: dvdrip-0.48.8
Path: /usr/ports/multimedia/dvdrip
Info: This is dvd::rip, a Perl Gtk+ based dvd-ripper
Maint: michaelnottebrock@gmx.net
Index: multimedia
B-deps: ...
R-deps: ...
...

2) От какие пакетов зависит данный порт?

Это позволит узнать команда make с параметром pretty-print-build-depends-list:

[root@srv-test /etc]# cd /usr/ports/www/opera
[root@srv-test /usr/ports/www/opera]# make pretty-print-build-depends-list
This port requires package(s) "aspell-0.60.6_2 cups-client-1.3.10_2 damageproto-1.1.0_2 dri2proto-2.0 expat-2.0.1 fixesproto-4.0 fontconfig-2.6.0,1 freetype2-2.3.9_1 gettext-0.17_1 gnutls-2.6.5 inputproto-1.5.0 jpeg-6b_7 kbproto-1.0.3 lcms-1.18a,1 libGL-7.4.4 libGLU-7.4.4 libICE-1.0.4_1,1 libSM-1.1.0_1,1 libX11-1.2.1_1,1 libXau-1.0.4 libXaw-1.0.5_1,1 libXdamage-1.1.1 libXdmcp-1.0.2_1 libXext-1.0.5,1 libXfixes-4.0.3_1 libXft-2.1.13 libXi-1.2.1,1 libXinerama-1.0.3,1 libXmu-1.0.4,1 libXp-1.0.0,1 libXpm-3.5.7 libXrender-0.9.4_1 libXt-1.0.5_1 libXxf86vm-1.0.2 libdrm-2.4.11 libgcrypt-1.4.4 libgpg-error-1.7 libiconv-1.13.1 libmng-1.0.10 libpthread-stubs-0.1 libxcb-1.3 nas-1.9.1_3 pkg-config-0.23_1 png-1.2.35 printproto-1.0.4 python26-2.6.2 qt-3.3.8_9 renderproto-0.9.3 xcb-proto-1.5 xextproto-7.0.5 xf86vidmodeproto-2.2.2 xineramaproto-1.1.2 xproto-7.0.15" to build.

Что бы посмотреть пакеты, необходимые для запуска порта используем параметр pretty-print-run-depends-list (вместо слова build слово run):

[root@srv-test /usr/ports/www/opera]# make pretty-print-run-depends-list
This port requires package(s) "aspell-0.60.6_2 cups-client-1.3.10_2 damageproto-1.1.0_2 dri2proto-2.0 expat-2.0.1 fixesproto-4.0 fontconfig-2.6.0,1 freetype2-2.3.9_1 gettext-0.17_1 gnutls-2.6.5 inputproto-1.5.0 jpeg-6b_7 kbproto-1.0.3 lcms-1.18a,1 libGL-7.4.4 libGLU-7.4.4 libICE-1.0.4_1,1 libSM-1.1.0_1,1 libX11-1.2.1_1,1 libXau-1.0.4 libXaw-1.0.5_1,1 libXdamage-1.1.1 libXdmcp-1.0.2_1 libXext-1.0.5,1 libXfixes-4.0.3_1 libXft-2.1.13 libXi-1.2.1,1 libXinerama-1.0.3,1 libXmu-1.0.4,1 libXp-1.0.0,1 libXpm-3.5.7 libXrender-0.9.4_1 libXt-1.0.5_1 libXxf86vm-1.0.2 libdrm-2.4.11 libgcrypt-1.4.4 libgpg-error-1.7 libiconv-1.13.1 libmng-1.0.10 libpthread-stubs-0.1 libxcb-1.3 nas-1.9.1_3 pkg-config-0.23_1 png-1.2.35 printproto-1.0.4 python26-2.6.2 qt-3.3.8_9 renderproto-0.9.3 xcb-proto-1.5 xextproto-7.0.5 xf86vidmodeproto-2.2.2 xineramaproto-1.1.2 xproto-7.0.15" to run.

Для установленного порта список зависимостей можно посмотреть через pkg_info:

# pkg_info -r portupgrade-2.4.10.3,2
Information for portupgrade-2.4.10.3,2:
Depends on:
Dependency: ruby-1.8.7.371,1
Dependency: db41-4.1.25_4
Dependency: ruby18-bdb-0.6.6

А ещё есть утилита pkg_tree (но она работает только для установленных пакетов), которая покажет визуальнее зависимости:

# pkg_tree -v portupgrade
portupgrade-2.4.10.3,2
|\__ ruby-1.8.7.371,1
|\__ db41-4.1.25_4
 \__ ruby18-bdb-0.6.6
      |\__ ruby-1.8.7.371,1
       \__ db41-4.1.25_4

3) Как принудительно вызвать окно конфигурации (такое синенькое) при сборке порта?

Если вы ставите порт впервые и он предусматривает (некоторые порты этого не предусматривают, но это не значит, что они не имеют параметров. Ярким примером служат mysql, exim. Для них параметры указываются либо в консоли при установке, либо в файле /etc/make.conf) вызов окна конфигурации. А что делать, если вы не впервые ставите порт или предыдущая установка была прервана? При последующей установке окно не будет выводиться. Что бы принудительно его вызвать используем такую команду:

#make config

Эта команда вызывает только окно. Больше ничего она не делает. Если вам нужно принудительно вызвать окно, а затем установить порт, можно использовать следующую команду:

#make config install clean

4) Просмотр установленных пакетов:

#pkg_info

5) Какие порты зависят от данного?

# pkg_info -R ORBit2-2.6.2
Information for ORBit2-2.6.2:
Required by:
libgnome-2.2.0.1
nautilus2-2.2.4
gnome2-2.2.1_1
...

6) Список установленных файлов данного порта.

[root@srv-test /usr/ports/www/opera]# pkg_info -xL nmap
Information for nmap-4.90.r1:
Files:
/usr/local/man/man1/nmap.1.gz
/usr/local/man/man1/ncat.1.gz
/usr/local/bin/nmap
/usr/local/bin/ncat
/usr/local/share/nmap/scripts/script.db
/usr/local/share/nmap/scripts/whois.nse
/usr/local/share/nmap/scripts/upnp-info.nse
/usr/local/share/nmap/scripts/telnet-brute.nse
/usr/local/share/nmap/scripts/sslv2.nse
/usr/local/share/nmap/scripts/sshv1.nse
...

7) Актуальность версий портов.

Что бы посмотреть версии портов, используем команду pkg_version:

[skeletor@test ~]$ pkg_version -v
ImageMagick-nox11-6.3.6.9           <   needs updating (port has 6.5.2.10)
ZendOptimizer-3.0.1                 <   needs updating (port has 3.3.0.a)
ZendOptimizer-3.3.0.a               =   up-to-date with port
aaccli-1.0                          =   up-to-date with port
apache+mod_ssl-1.3.36+2.8.27        <   needs updating (port has 1.3.41+2.8.31)
apcupsd-3.12.4                      <   needs updating (port has 3.14.5_1)
arc-5.21o_1                         =   up-to-date with port
...

Здесь видим какие порты нуждаются в обновлении, а какие нет.

8) Обновление портов (portupgrade и portdowngrade).

Для обновления служит утилите portupgrade. У неё много параметров, но нам интересны лишь такие:

-f: указывает, что нужно обновить ещё и базу данных портов (база индексов, версий)
-r: указывает, что нужно обновить ещё порты, от которых зависит данный порт
-R: указывает, что нужно обновить порты, которые зависят от данного.

Обновим порт:

#portupgrade -rf opera

Представим себе ситуацию. Вы обновили порт до новой версии. А он у вас отказался работать. Или новая версия не совместима с установленными другими портами. Для этих целей используется утилита portdowngrade:

[root@star /usr/ports/ports-mgmt/portdowngrade]# portdowngrade nmap

portdowngrade 0.6 by Heiner Eichmann
Please note, that nothing is changed in the ports tree
unless it is explicitly permitted in step 6!

Seeking port nmap ...

Found several matches:
1: astro/openmap
2: chinese/p5-Encode-CNMap
3: net/pear-Net_Nmap
4: net-mgmt/lanmap
5: security/nmap
6: security/nmap-i18n-man
7: security/p5-Nmap-Parser
8: security/p5-Nmap-Scanner
9: security/rubygem-nmap-parser
10: security/zenmap

Please choose one: 5

Downgrading port: security/nmap

Step 1: Checking out port from CVS repository
CVS root directory: anoncvs@anoncvs1.FreeBSD.org:/home/ncvs
The authenticity of host 'anoncvs1.freebsd.org (216.87.78.137)' can't be established.
DSA key fingerprint is 53:1f:15:a3:72:5c:43:f6:44:0e:6a:e9:bb:f8:01:62.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'anoncvs1.freebsd.org' (DSA) to the list of known hosts.

Step 2: Reading the port history from the CVS repository

Step 3: Analyzing the port history from the CVS repository

Step 4: Load port version numbers and present results
Keys: : next page                      d : details
p : previous page
: leave presentation and downdgrade if wanted
=============================================================================================================================================================
number         date         portversion  comment
1  2009/07/05 22:24:15  unknown      - Update to 4.90RC1
2  2009/04/22 16:25:53  unknown      - Replace previous patch with a better one.
3  2009/04/21 15:36:55  unknown      - Add patch to work around versions of FreeBSD with broken
4  2009/04/13 09:53:53  unknown      - Update to 4.85.b7

9) Очистка портов.

Когда порт устанавливается в систему на локальный компьютер, в директорию /usr/ports/distfiles закачиваются необходимые исходные тексты, после чего порт компилируется и инсталлируется. При обновлении порта уже закачиваются новые версии исходников (старые остаются). При удалении порта исходные тексты также остаются в distfiles. Через какое-то время мы получаем, что distfiles содержит очень мало «нужного». Конечно, вместо «make install clean» можно использовать «make install clean distclean», т.е. после загрузки, сборки и установки исходники будут удалены, но необходимо, чтобы в distfiles сохранялись только свежие исходники – это позволяет сэкономить трафик и время при медленном канале, а значит, и ваши деньги. Для очистки диска нам понадобится набор утилит «portupgrade», который нужно обязательно иметь, если вы так или иначе собираетесь использовать порты.

Теперь можно начать с удаления каталогов work, в которых находятся уже распакованные исходные тексты, которые мы забыли удалить при помощи цели«clean», которую мы добавляем к «make».

# portsclean -C
Cleaning out /usr/ports/*/*/work...
Delete /usr/ports/news/gnus-emacs20/work
...

Утилита имеет еще одну возможность, которая нас интересует больше всего: удаление неактуальных файлов из distfiles

# portsclean -DD
Detecting unreferenced distfiles...
Delete /usr/ports/distfiles/KDE/qt-x11-free-3.1.2.tar.bz2
...

А вообще, что бы всё гамбузом ненужное удалить, можно использовать все параметры вместе:

# portsclean -CDDP

Тогда всё ненужно сотрёться.

10) Какому порту принадлежит определённый файл?

Вариант №1

pkg_info -W абсолютное_имя_файла

Вариант №2

pkg_which (из пакета pkgdb) используется для определения, какому приложению принадлежит файл. Вот простой пример, иллюстрирующий различие между встроенной командой which и pkg_which:

$ which pkgdb
/usr/local/sbin/pkgdb

– which используется для того, чтобы показать путь к приложению.
– pkg_which скажет мне какому приложению принадлежит файл:

$ pkg_which pkgdb
portupgrade-20030723

11) Приводим БД установленных портов/пакетов в порядок.

Иногда бывают ситуации, когда в системе накапливается несколько одинаковых по названию установленных портов, но разных версий. Почему так случается? Когда вы ставите какой-то порт, он по зависимостям вытягивает нужный ему порт. со временем, появляются новые версии портов. Чаще всего при установке вылазит сообщение, о том, что нужно обновить данный порт. А иногда не вылазит. В любом случае, время от времени (при установке или удалении портов/пакетов) нужно приводить БД в порядок. Делается это с помощью команды:

#pkgdb -F

Если вы делаете это в первый раз или давно не делали, может вылезти сообщение:

[Updating the pkgdb in /var/db/pkg ... - 148 packages found (-1 +0) (...) done]
[Updating the portsdb in /usr/ports ... - 21215 port entries found ** Stale lock file was found. Removed.
.........1000.........2000.........3000.........4000.........5000.........6000.........7000.........8000
.........9000.........10000.........11000.........12000.........13000.........14000.........15000.........
16000.........17000.........18000.........19000.........20000.........21000.. ..... done]

Если всё в порядке, то выведется такое сообщение:

[Updating the pkgdbin /var/db/pkg ... - 148 packages found (-1 +0) (...) done]
[Updating the portsdbin /usr/ports ... - 21215 port entries found ** Stale lock file was found. Removed.
.........1000.........2000.........3000.........4000.........5000.........6000.........7000.........8000
.........9000.........10000.........11000.........12000.........13000.........14000.........15000.........
16000.........17000.........18000.........19000.........20000.........21000.. ..... done]
--->  Checking the package registry database
** Stale lock file was found. Removed.

ну а если нет, то такое:

Duplicated origin: graphics/jpeg - jpeg-6b_4 jpeg-7
Unregister any of them? [no] yes
Unregister jpeg-6b_4 keeping the installed files intact? [no] yes
Unregister jpeg-7 keeping the installed files intact? [no] no
--> Saving the jpeg-6b_4's +CONTENTS file as /var/db/pkg/jpeg-7/+CONTENTS.jpeg-6b_4
--> Unregistering jpeg-6b_4
--> Done.

Здесь показано, что в системе стоит два одинаковых пакета, но разных версий. Система предлагает удалить их. Мы, естественно, удаляем старый, а новый – оставляем. После квадратных скобок указаны нужные ответы.

[Updating the pkgdbin /var/db/pkg ... - 148 packages found (-1 +0) (...) done]
[Updating the portsdbin /usr/ports ... - 21215 port entries found ** Stale lock file was found. Removed..........1000.........2000.........3000.........4000.........5000.........6000.........7000.........8000
.........9000.........10000.........11000.........12000.........13000.........14000.........15000.........16000
.........17000.........18000.........19000.........20000.........21000.. ..... done]

12) Удаление “лишних” пакетов

Часто бывают ситуации, когда ставили пакеты с зависимостями, а потом их удаляли. Зависимости же – не удаляются. Но что делать, если надо “почистить” систему? Для этого существует pkg_cutleaves.  pkg_cutleaves работает с так называемыми листовыми пакетами, т.е. с такими, которые не являются зависимостями для других, установленных в системе.

– список кандидатов на удаление:

#pkg_cutleaves -lc

– удаление в ручном режиме (выводится запрос на удаление)

#pkg_cutleaves -x

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff