Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
rvsn
5 лет назад

Установка программ в FreeBSD. Пакетный менеджер pkg.


Способов установки одних и тех же программ в FreeBSD, как и в любом юниксе, немало. Начиная от компиляции из исходников почти вручную программами типа make с последующей инсталляцией через make install и заканчивая более продвинутыми и удобными способами установки, в которых в основном в большинстве случаев достаточно указать только название устанавливаемого пакета, а всё остальное (приём из интернета последней версии пакета (в виде исходников или в виде готового скомпилированного пакета), компиляцию и сборку - при необходимости) установщик сделает самостоятельно.

У разных способов установки программ есть разные преимущества и недостатки друг перед другом. О них мы поговорим в отдельной статье, если читатели намекнут на то, что им это могло бы быть интересным.

А в этой статье поговорим о пакетном менеджере pkg.

Как и многие другие средства работы программами в системе, pkg - это не просто установщик. Это именно менеджер пакетов. С его помощью можно пакеты искать в репозитариях, устанавливать, удалять, обновлять, смотреть краткую информацию о пакете ещё до его установки и даже получения из интернета и информацию полную уже после установки в системе в любое время - полное описание пакета, зависимости его и от него, список установленных файлов пакета и т.п.

Давайте рассмотрим пример установки какой-нибудь нужной в хозяйстве программы, например для работы с почтой и даже попутно ещё и с новостями (присядьте!) NNTP. :-) О таких новостях (USENET), да и о других (более специализированных для работы с ними) программах типа tin расскажем тоже когда-нибудь в отдельной статье - "оставайтесь с нами и не переключайтесь на другие каналы" (т.е., говоря совсем уж современным языком, "ставьте лайк и подписывайтесь на мой канал" :-) )

В нашем примере мы установим почтовую программу pine.

Основные приёмы работы в этой программе - тема отдельной статьи.
А сейчас вернёмся непосредственно к теме статьи этой.

Обычно для установки программы мы её сперва ищем в репозитарии (если не знаем точного названия этой программы в нём). Для этого запустим pkg с аргументами search pine (в нашем примере установки программы pine). В ответ получим кучу программ, содержащих искомое слово "pine" в названии:

pine search pine

alpine-2.21.9999 Mail and news client descended from Pine
cacti88-spine-0.8.8h Multithreaded poller for Cacti written in C
ez-pine-gpg-0.4.h_2 Set of scripts to use gpg with Pine
pico-alpine-2.21.9999 [Al]PIne's message COmposition editor and Pilot file manager
pine-pgp-filters-1.8_2 Simple sh-based filters to use GnuPG with Alpine
pinentry-1.1.0_1 Collection of simple PIN or passphrase entry dialogs
pinentry-curses-1.1.0 Curses version of the GnuPG password dialog
pinentry-fltk-1.1.0 FLTK version of the GnuPG password dialog
pinentry-gnome3-1.1.0 GNOME 3 version of the GnuPG password dialog
pinentry-gtk2-1.1.0 GTK+ 2.0 version of the GnuPG password dialog
pinentry-qt4-1.1.0 Qt 4 version of the GnuPG password dialog
pinentry-qt5-1.1.0 Qt 5 version of the GnuPG password dialog
pinentry-tty-1.1.0 Console version of the GnuPG password dialog
spine-1.1.35 Multithreaded poller for Cacti written in C
u-boot-pine64-2018.09_3 Cross-build das u-boot for model pine64
u-boot-pinebook-2018.09_3 Cross-build das u-boot for model pinebook
u-boot-sopine-2018.09_3 Cross-build das u-boot for model sopine

В нашем случае мы просто знаем, что нужной нам программе pine соответствует первая строка этого списка. Для тех, кто в этом пока ещё не очень силён, просто поверьте, что это именно так:

alpine-2.21.9999 Mail and news client descended from Pine

В этой строке мы видим название пакета (alpine) с его версией (2.21.9999) и краткое описание.

Версия - последняя из откомпилированных для репозитария. Т.е. на самом деле может существовать и более новая версия программы, но в репозитарий размещают откомпилированный и собранный вариант наиболее близкой к последней версии программы - в большинстве случаев именно самую последнюю версию и собирают для репозитария его составители.

Менеджер pkg имеет набор команд. Команды указываются ему первым аргументом. Одну из таких команд (команду поиска пакета в репозитарии - search) мы сейчас только что уже расммотрели.

Полный набор команд менеджера pkg сообщает нам его команда help. Полным выводом этой команды (синтаксисом да всевозможными ключами) утомлять читателя не будем, а отобразим только список доступных команд:

pkg help

...

Commands supported:
add Compatibility interface to install a package
alias List the command line aliases
annotate Add, modify or delete tag-value style annotations on packages
audit Reports vulnerable packages
autoremove Removes orphan packages
backup Backs-up and restores the local package database
check Checks for missing dependencies and database consistency
clean Cleans old packages from the cache
config Display the value of the configuration options
convert Convert database from/to pkgng
create Creates software package distributions
delete Deletes packages from the database and the system
fetch Fetches packages from a remote repository
fetch Fetches packages from a remote repository
help Displays help information
info Displays information about installed packages
install Installs packages from remote package repositories and local archives
lock Locks package against modifications or deletion
plugins Manages plugins and displays information about plugins
query Queries information about installed packages
register Registers a package into the local database
remove Deletes packages from the database and the system
repo Creates a package repository catalogue
rquery Queries information in repository catalogues
search Performs a search of package repository catalogues
set Modifies information about packages in the local database
ssh Package server (to be used via ssh)
shell Opens a debug shell
shlib Displays which packages link against a specific shared library
stats Displays package database statistics
unlock Unlocks a package, allowing modification or deletion
update Updates package repository catalogues
updating Displays UPDATING information for a package
upgrade Performs upgrades of packaged software distributions
version Displays the versions of installed packages
which Displays which package installed a specific file

For more information on the different commands see 'pkg help command'

Из всего этого набора команд нам сейчас для установки пакета нужна команда install.

Когда пользователю юникса не у кого спросить (нет рядом интернета или более опытного товарища) о том, как работает программа, то он обычно спрашивает об этом у программы man. Ну менеджер pkg своей командой help сам открывает в любимом просмотрщике пользователя (о выборе и настройке которого речь пойдёт в отдельной статье) нужную man-страницу справочного руководства.

Рассмотрим начало такой страницы для команды install менеджера pkg:

pkg help install | head

PKG-INSTALL(8) FreeBSD System Manager's Manual PKG-INSTALL(8)

NAME
pkg install -- install packages from remote package repositories or local
archives

SYNOPSIS
pkg install [-AfIMnFqRUy] [-r reponame] [-Cgix]
<pkg-origin|pkg-name|pkg-name-version> ...

Выбрав из этого описания только самое нужное для нашей статьи, получим вариант:

pkg install pkg-name

Фактически это означает, что для нашего примера требуется отдать команду:
pkg install alpine

Можно и с указанием версии:
pkg install alpine-2.21.9999

Версию указывать бывает нужно, например, тогда, когда в репозитарий натолкали несколько версий, а нужна какая-то конкретная.

Итак, отдаём команду установки пакета alpine:

pkg install alpine

Updating FreeBSD repository catalogue...
Fetching meta.txz: 100% 944 B 0.9kB/s 00:01
Fetching packagesite.txz: 100% 6 MiB 825.5kB/s 00:08
Processing entries: 100%
FreeBSD repository update completed. 31625 packages processed.
All repositories are up to date.
The following 1 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
alpine: 2.21.9999

Number of packages to be installed: 1

The process will require 8 MiB more space.
2 MiB to be downloaded.

Proceed with this action? [y/N]:

Пакет не стал устанавливаться сразу.
Менеджер pkg если давно ничего не устанавливал из репозитария, то подключается к нему, сверяет с ним свою местную базу. Если обнаруживает в нём новую версию самого себя, то предлагает себя в системе обновить. Затем сообщает - какие для установки заказанного ему пакета пакеты он удалит, какие обновит (если это нужно для заказанного пакета), а какие пакеты для его работы установит ещё и дополнительно, если такие окажутся нужны.

В нашем примере менеджеру пакетов pkg ничего удалять, обновлять и дополнительно устанавливать не потребовалось и он сообщил нам о том, что только установит непосредственно пакет alpine и запросил подтверждение на выполнение этих действий с указанием списка устанавливаемых пакетов, их количества (1), какой объём трафика для этого он прокачает и сколько места на диске потом после установки всё это хозяйство займёт - 2 мегабайта скачает и в 8 мегабайтов развернётся:

The following 1 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
alpine: 2.21.9999

Number of packages to be installed: 1

The process will require 8 MiB more space.
2 MiB to be downloaded.

Если Вы согласны с предложенными действиями (вопрос кажется немного странным для желающего установить программу пользователя, но это не совсем так), то нажмите "y" и Enter. Не просто Enter (иначе выберется умолчательный ответ N), а именно ручное указание "y" (yes), а затем Enter:

Proceed with this action? [y/N]: y

[1/1] Fetching alpine-2.21.9999.txz: 100% 2 MiB 216.6kB/s 00:08
Checking integrity... done (0 conflicting)
[1/1] Installing alpine-2.21.9999...
[1/1] Extracting alpine-2.21.9999: 100%
Message from alpine-2.21.9999:


*** To use GnuPG with Alpine, take a look at the mail/pine-pgp-filters port ***


Всё. Pine (ну или как его много лет назад начали называть разработчики - Alpine) установлен. Можно его запускать и работать в нём.

Что конкретно сделала последняя команда:

  1. Выкачала из репозитария все нужные для установки пакеты. В нашем случае он всего один. Иначе было бы много таких строк:

[1/1] Fetching alpine-2.21.9999.txz: 100% 2 MiB 216.6kB/s 00:08

[1/1] - простой индикатор процесса по всем пакетам. В нашем примере он оказался не сильно полезен. Но когда счёт пакетов идёт на десятки (как при установке таких больших пакетов, как KDE), то очень удобно по такому индикатору прикинуть - не пойти ли наваять себе кружечку кофе или даже другую и третью. :-)

Объём - 2 мегабайта. Средняя скорость составила примерно 200 KBps и заняла выкачка этого пакета 8 секунд.

  1. Проверила целостность пакета (Checking integrity... done) и увидела, что это хорошо (0 conflicting).

  2. Установила все выкачанные пакеты:

[1/1] Installing alpine-2.21.9999...
[1/1] Extracting alpine-2.21.9999: 100%

Пакет-то тут устанавливался всего один. Но если бы их было много, то такие строки были бы для каждого устанавливаемого пакета.

  1. Вывела сообщение пакета, предназначанное для чтения информации о нём после установки.

Такое сообщение в пакете может находиться, а может его в нём и не быть. Это необязательная его часть - зависит от того, как решат авторы программы или сборщики пакета. Часто в таком сообщении пишут рекомендации по работе с пакетом, советы - что можно доустановить ещё, чтобы пакет работал как-то по другому или включились какие-нибудь его дополнительные возможности или, бывает, проходит информация о том, какие модули ядра надо подгружать, чтобы пакет работал более стабильно, если вылетает во время работы или ведёт себя не очень хорошо.

В нашем примере разработчики Pine посоветовали - что надо доустановить в систему (пакет mail/pine-pgp-filters) для использования GnuPG вместе с Pine:

Message from alpine-2.21.9999:


*** To use GnuPG with Alpine, take a look at the mail/pine-pgp-filters port ***


Выше мы рассмотрели пример установки программы в систему FreeBSD пакетным менджером pkg.

Из наиболее используемых задач, решаемых этим менеджером, осталось кратко упомянуть команды просмотра информации об установленном пакете и команду удаления пакета.

Информация об установленном пакете.

Если в системе пакет установлено, то полную информацию о нём даёт команда:
pkg info имя_пакета
Например:
pkg info alpine

Краткую информацию о пакете (только название и версия) даёт команда:
pkg info -E имя_пакета

Если точно не помните название пакета, то команда типа
pkg info pine
информацию о пакете alpine не предоставит.
Но можно указать, что слово pine - это шаблон названия пакета (например, часть названия, но шаблоны могут быть и сложнее - как обычно в grep).
Например:
pkg info -x pine

Если забыли послеустановочное сообщение, его всегда можно вспомнить командой
pkg info -D имя_пакета

Полный список установленных файлов пакета можно отобразить командой
pkg info -l имя_пакета

Если точное название пакета не помните, то не забывайте к таким ключам команды info приставлять ключом -x указатель на то, что пишете шаблон названия пакета, а не его точное название:

pkg info -xD pine
pkg info -xl pine

Но не забывайте о том, что в этом случае pkg найдёт все пакеты, соответствующие указанному шаблону.

Удаление пакета

Если какой-либо пакет в системе не нужен, удалить его можно командой:
pkg delete имя_пакета

Перед удалением менеджер pkg так же сообщит информацию о том, что именно он удалит и сколько места освободит на накопителе.

Наш пример:

pkg delete alpine

Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):

Installed packages to be REMOVED:
alpine-2.21.9999

Number of packages to be removed: 1

The operation will free 8 MiB.

Proceed with deinstalling packages? [y/N]:

Дальше - всё как обычно: если согласны, то "y" и Enter.

Выше было упомянуто о том, что во время установки пакета дополнительный вопрос такого типа (устаналивать или, может, не надо?) может выглядеть странным для пользователей, намеревающихся пакет в систему именно установить. Однако, вопросы такие полезны. Бывают ситуации, когда установка одного пакета заставляет установщика pkg удалить пакеты другие, которые пользователь удалять не желает и в таком случае пользователь будет вынужден сделать выбор: что ему важнее - новый пакет, который удалит некоторые пакеты старые, или пакеты старые, которые требуется удалить для установки пакета нового.

Краткий обзор основных приёмов работы с установщиком пакетов pkg в FreeBSD завершён.

Среди других способов установки программ в FreeBSD можно отметить следующие:

  1. Скачивание исходных кодов программы, их компиляция и установка программой make.

  2. Установка порта из системы портов.
    Это похоже на обычную компиляцию и установку программой make, за исключением того, что исходые коды программа make выкачивает самостоятельно по информации из Makefile порта ну или берёт предварительно выкачанные любым способом (хоть руками) архивы портов из каталога /usr/ports/distfiles.

  3. Установка тоже из портов, но программами portinstall, portmaster. Это в основном та же самая установка порта из системы портов, но только (самое первое, бросающееся в глаза отличие, кроме прочих, конечно) не надо вручную заходить предварительно в каталог устанавливаемого порта.

Вообще для работы с портами в портах FreeBSD заведена даже целая ветвь программ - ports-mgmt. Однако всё это - темы отдельных статей. А эту статью о пакетном менеджере pkg пора уже и завершать. Если у читателей остались какие-либо вопросы или замечания и дополнения по этой теме, их можно указать в обсуждении статьи. Если автор не забудет про эту статью и система хорошо уведомит его о появляющихся под статьёй вопросах, то он обязательно почитает их, чтобы постараться ответить на них!

Примечание:
Некоторые фразы жирным выделены не автором статьи, а сайтом golos.io. Также сайт некоторе фразы выделил цветом, а последовательности знаков * преобразовал в линии.
Автор быстро не нашёл, как этому неправильному форматированию текста шею скрутить и просит читателей не обращать внимание на такую работу сайта, самостоятельно форматирующим то, что автором форматировать не предусмотрено.

7
0.482 GOLOS
На Golos с April 2019
Комментарии (4)
Сортировать по:
Сначала старые