Пересборка восходящих зависимостей
Программа portmaster автоматически обновляет программы, от которых зависит программа, требующая обновления, но от нее можно также потребовать пересобрать все программы, которые зависят от обновляемой программы. Это запросто может вызвать пересборку большого числа «портов», особенно когда речь заходит о критически важных библиотеках. Используйте ключ , чтобы потребовать от portmaster проверить как нисходящие, так и восходящие зависимости.
Изменение зависимостей
Бывает, что один «порт» нужно заменить другим. Предположим, мне захотелось заменить Emacs 20 на Emacs 21. Программа portmaster может выполнить это самостоятельно, если задать ей ключ . В качестве аргументов этого ключа следует указать новый «порт» и старый, установленный «порт» именно в таком порядке:
Это не совсем типичная ситуация, но после нескольких таких изменений, произошедших в течение последних лет, я рад, что эта возможность есть.
Пропуск «портов»
Иногда отказ от обновления «порта» действительно необходим, даже если при этом возникает рекурсия. Например, когда я выполняю сборку OpenOffice.org, мой ноутбук занят этим целый день. Мне бы не хотелось, чтобы обновление OpenOffice.org происходило в результате обновления другого компонента; я предпочитаю обновлять этот пакет самостоятельно.
portmaster проверяет каждый каталог в базе данных пакета на наличие файла +IGNOREME. Если этот файл присутствует, portmaster не будет обновлять такой пакет в ходе обновления других пакетов.
Теперь, даже если я начну обновлять библиотеку, от которой зависит OpenOffice.org, и прикажу программе portmaster обновить все программы, зависящие от этой библиотеки, portmaster не станет обновлять ООо. В результате подобного обновления зависимостей ООо может выйти из строя, но выбирая этот путь, я иду на риск сознательно.
Другие особенности portmaster
Настоятельно рекомендую прочитать страницу руководства portmaster(8), чтобы ознакомиться с функциями, предлагаемыми этой программой для решения ваших проблем. Вы можете возобновить прерванную сборку; посмотреть, что сделала бы программа portmaster, если бы вы предложили ей обновить систему; сохранить пакеты в вашем репозитарии пакетов и т. д. Если у вас возникли проблемы с обновлением «порта», portmaster наверняка сможет предложить решение.
Уменьшение размера дерева «портов»
С течением времени растет и дерево «портов». Отчасти это хорошо, так как в дереве появляются новые «порты». Отчасти это необходимое зло, так как в дереве сохраняются устаревшие версии программ, которые вы только что обновили. В остальном этот рост было бы желательно предотвратить, так как в системе остаются файлы, которые когда- то были необходимы, а теперь уже не нужны. Например, когда я обновил пакет до версии Fedora Core 4, файлы пакета Fedora Core 3 стали ненужными. Поиск и удаление ненужных файлов позволит сэкономить гигабайты дискового пространства, которое, между прочим, не бесконечно. Хотя portmaster предоставляет возможность удаления ставших ненужными файлов distfiles, тем не менее предварительно стоит выполнить глобальный поиск таких файлов.
Программа portmaster может отыскивать устаревшие файлы distfiles. Если запустить команду , portmaster(8) идентифицирует каждый устаревший файл distfile и предложит удалить его. Если запустить команду , portmaster(8) молча удалит устаревшие файлы distfiles.
Другая распространенная проблема — когда после установки «порта» не выполняется команда . Нередко я хотел бы иметь простой доступ к исходному коду для ознакомления с программой, поэтому не чищу свои «порты». В конечном счете я забываю об этом, а ставшие ненужными файлы продолжают занимать дисковое пространство. Работая над этим разделом, я обнаружил, что забыл удалить временные файлы после последней сборки OpenOffice.org; неудивительно, что у меня на диске так мало свободного места! «Порты» операционной системы FreeBSD легко поддаются массовой чистке; достаточно зайти в каталог /usr/ports и запустить команду . В результате будет выполнен рекурсивный обход дерева «портов» и для каждого из них будет исполнена команда , которая удалит каждый рабочий каталог.
С помощью этих инструментов вы сможете своевременно обновлять свою систему. А теперь перейдем к основам администрирования FreeBSD и посмотрим, что еще можно сделать с операционной системой FreeBSD.
4.5.5 Обновление портов
Поддержание ваших портов в актуальном состоянии может оказаться нудным занятием. К
примеру, чтобы обновить порт, вам нужно перейти в каталог с портами, построить порт,
удалить старый порт, установить новый, а затем вычистить его после построения.
Представьте, сколько действий (пять) нужно сделать! Скучно, да? Это было большой
проблемой для системных администраторов, но теперь есть утилиты, выполняющие эти действия
за нас. Например, утилита sysutils/portupgrade сделает всё за вас сама! Просто установите
её, как обычный порт, при помощи команды make install clean.
Теперь создайте базу данных командой pkgdb -F. Она выяснит
перечень установленных портов и создаст файл базы данных в каталоге /var/db/pkg. Теперь при вызове команды portupgrade -a, она будет использовать эту базу данных и файл портов
INDEX. Наконец, portupgrade сгрузит,
построит, сделает резервную копию, установит и очистит порты, которые были обновлены. portupgrade имеет массу параметров для использования в разных
ситуациях, из которых наибольшего внимания заслуживает описываемая далее.
Если вы хотите обновить только определённое приложение, но не полностью базу данных,
используйте portupgrade pkgname,
с флагом -r, если portupgrade должен
отработать все пакаджи, которые зависят от указанного, и использовать флаг -R для отработки всех пакаджей, которые требуют указанные пакаджи.
Для использования при установке пакаджей, а не портов, укажите флаг -P, а для простой сгрузки дистрибутивных файлов без построения или
установки чего бы то ни было задайте флаг -F. Дополнительную
информацию можно получить на странице справки по утилите
portupgrade(1).
Существуют и другие утилиты, которые делают подобные вещи, посмотрите в каталоге ports/sysutils и выберите то, что вам подходит.
Идентификация ненужного программного обеспечения
Часто многие из нас устанавливают программное обеспечение только на время, но, наигравшись с ним, забывают удалить его. При обновлении есть смысл удалить эти пакеты, чтобы не тратить время на их модернизацию. Это как раз тот самый момент, когда сведения о «портах» в корне и листьях дерева оказываются особенно ценными.
Список «портов», который выводит portmaster, начинается с корня дерева. Пройдите по списку и отыщите программы, которые вам больше не нужны. Если вы не уверены, что сможете отыскать пакет, запустите команду , чтобы определить, где находится «порт». Ознакомьтесь с описанием пакета, чтобы освежить память, и, если вам не удалось распознать программу или вы вспомнили, что она вам не нужна, можете деинсталлировать ее
Если это окажется что-то важное, всегда можно выполнить повторную установку. Проделайте то же самое для «портов»-листьев в конце списка
К чему обновлять то, что не нужно?
При вызове с ключом программа portmaster деинсталлирует «порт» и все его зависимости, если они не требуются другим «портам». Например, после деинсталляции OpenOffice.org у меня появится масса ненужных «портов». Команда удалит ООо и все «порты», необходимые для ООо, но не нужные другим программам.
Внешние ссылки [ править ]
- Официальная веб-страница портов FreeBSD
- FreshPorts — сайт, отслеживающий обновления портов
- Port-Tags — проект для добавления тегов в коллекцию портов.
- Установка приложений: пакеты и порты из Руководства FreeBSD (Глава 4)
vтеFreeBSD Project | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
FreeBSD |
|
||||||||||
Подсистемы |
|
||||||||||
Люди |
|
||||||||||
Производные |
|
Комментарии
Alex Snet
Спасибо, то что нужно. Как раз сервер новый ставил на фяхе. Задолбался тарболы качать и компилировать вручную.
adw0rd
Рад что пригодилось! Спасибо за каммент!
vasa_c
Ничего в этом не понимаю, но зачот
Eugen
Позволю себе пару уточнений по поводу портов:
1) make clean не удаляет скачанные файлы, это делает make distclean
2) без make config настройка будет производиться не по дефолтам, а по сохраненной при предыдущей сборке конфигурации
Neolot
Уже давно portupgrade перенесли из sysutils в ports-mgmt:
/usr/ports/ports-mgmt/portupgrade
adw0rd
Neolot, ну да, однако всеравно ссылается со старого места…
adw0rd
Спасибо за ценные поправки!
Mox
напишите, что для portupgrade зависимостью является ruby. Это многих остановит =) есть простейшая альтернатива монстру portupgrade и называается portmaster
mvalery
А вот я вам про одну вкусную вещичку расскажу.
Допустим, ты с помощью portupgrade апгрейдишь некую программу.
Программа построена, стерлась старая версия, начала ставиться новая.
А тут ап — неудача. Не удается поставить.
Оказывается, прежде чем стирать старую версию программы, portupgrade делает временный пакет
Если манипуляции с новой версией закончатся крахом, то из этого пакета будет автоматически восстановлена старая, рабочая версия.
Для меня это очень важно т.к. на наших серваках уйма софта
И серваков много. Проблем хватает. И за то что у меня одна из проблем решается автоматически, я не жалею, что немножко места на диске занимает ruby. Это совсем не страшно.
adw0rd
Mox, почитал прошлогодние отзывы по portmaster, много негатива.
И как сказал mvalery, немного памяти для руби не так страшно!
Андрей
Спасибо за хорошою статейку
Мне она очень помогла как новечку
adw0rd
Андрей, искренне рад что помогла
Дмитрий
Спасибо, щас всё чистинько поставлю )))
mario
Эд, а при обновлении портов, можно как то исключить часть портов? Ну например я совсем не пользуюсь иксами, так же порты аудио,гамес и тому подобные… Может быть их как то можно исключить?)
adw0rd
Ну а чем они тебе мешают? Я думаю ты например не пользуешся альтернативными ядрами, но и не удаляеь их ведб Они тебе не мешают почемуто… Я просто не вижу смысла, но ты можешь банально удалить каталог
mario
ну насколько я понял, то снэпшот строиться из того какие у меня порты стоят?
Да и вчера когда делал обновление портов, то основное время ушло на эти папки
adw0rd
Ты по обновления дерева портов или про обновления установленных портов? А то я тебя что-то уж не понимаю…
mario
обновления дерева портов
adw0rd
Поправил, сенк
Назар
у меня фреебсд 7.0 утанавливает ПО уже 4 часа ето нормально???
adw0rd
Смотря какое ПО, вполне может быть что нормально. А характеристики машины можете сообщить? Какое ПО ставите?
Назар
Intel core duo 2.5 i 2.5 1gb ram inet 15mb на входе 2 на выходе! вообщем обновляю в первый раз! походу все ПО которое есть ! я скачал все пакеты задал постснап чтоб установил все установленое ПО! но спустя 6 час. он так и неустановил! я ресетнул! и Хсы уже незапускаются! я что то нетак делаю?
adw0rd
Как обновляли то? Покажите последовательность инструкций.
Думаю вы прервали обновление, что очень плохо. Графическая часть системы массивна и долго обновляется, это впорядке вещей (иксы, среда рабочего стола и т.д.)…
Что такое постснап? Вы имели ввиду портснап? Он не обновляет установленое ПО, он обновляет дерево портов
Назар
portugrade -a -u и он долго все устанавливает ! перед етим portsnap fetch update! думаю мне просто нехватило терпения=)
Назар
извиняюсь portupgrate!
Andrey
Спасибо. Очень удобно изложена информация
PandraBox2007
блин раньше находил а сейчас немогу вспомнить название проги
короче альтернативный openssh сервак от германских разработчиков с высоким scalability, производительностью и пулями и уменьшеным потреблением памяти
PandraBox2007
хотя вот нашел lsh-server
PandraBox2007
хотя он дырявый .. не пойдет
Обновление установленных пакетов
Чтобы получить последние доступные версии установленных ранее пакетов, используйте команду:
sudo pkg upgrade
Эта команда сравнит установленные пакеты с версиями в каталоге репозитория и выведет список пакетов, которые можно обновить.
Updating FreeBSD repository catalogue…
FreeBSD repository is up-to-date.
All repositories are up-to-date.
Checking for upgrades (2 candidates): 100%
Processing candidates (2 candidates): 100%
The following 2 packages will be affected (of 0 checked):
Installed packages to be UPGRADED:
python27: 2.7.8_6 -> 2.7.9
perl5: 5.18.4_10 -> 5.18.4_11
The process will require 2 MB more space.
23 MB to be downloaded.
Proceed with this action? : y
Введите y, после чего пакеты, указанные в списке, будут обновлены.
Обновление портов
Основные настройки сделали. Теперь подготовим нашу систему к установке софта. обновим дерево портов с помощью утилиты portsnap. При первом запуске используем команду:
# portsnap fetch extract
Утилита скачает и распакует порты в папку /usr/ports. Последующее обновление будет производиться командой:
# portsnap fetch update
Добавим ее в cron для регулярного обновления портов раз в сутки. Для этого идем в /var/cron/tabs и создаем там файл root.
# touch /var/cron/tabs/root
Файл должен быть следующего содержания:
SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin 0 3 * * * portsnap cron
Обращаю внимание, что команда в планировщике записана не так, как мы запускали из консоли. Это сделано специально, чтобы не грузить сервера обновлений по крону в одно и то же время
Для обновления через планировщик используется специальная команда porsnap cron, которая делает небольшой случайный разброс по времени для обновления, чтобы все клиенты обновлялись в разное время, а не строго по часам.
На этом наша настройка системы закончена, переходим к следующей части, в которой займемся настройкой непосредственно компонентов web-сервера.
Что устанавливает пакет?
Теперь, когда программа установлена, как найти ее в системе? В конце концов, здесь нет меню Пуск! Беспокоиться не о чем. Для получения полного списка установленных программ обратитесь к /var/db/pkg. Подкаталоги этого каталога соответствуют всем «портам» или пакетам, установленным в системе, и содержат списки всех программных компонентов. К примеру, теперь, после установки пакета xorg 6.9, у нас появился каталог /var/db/pkg/xorg-6.9.0. В нем находятся следующие файлы:
Файл +COMMENT содержит краткое описание пакета, а файл +DESC — более подробное описание. Файл +MTREE_DIRS содержит описание пакета в формате mtree(1). Особый интерес представляет файл +CONTENTS, в котором перечислены все файлы, установленные пакетом, все пакеты зависимостей и все инструкции по удалению пакета. (Теперь, когда пакет установлен, инструкции по установке больше не нужны, но инструкции по удалению могут пригодиться, если вы вдруг решите удалить пакет.)
Первая строка — это номер версии формата (1), в котором хранится запись о пакете. Если FreeBSD изменит формат хранения пакетов, инструменты управления пакетами смогут определить по этому номеру, как обслуживать пакет. Далее следует имя пакета (2) и затем определение (3), которое указывает — к какой категории относится пакет и в каком каталоге его можно отыскать. Вслед за меткой (4) указано место, куда нужно установить файлы пакета. Все пути к файлам указываются относительно этого каталога. Комментарий (5) указывает дополнительные пакеты, от которых зависит данный пакет. В данном случае — это пакет expat-2. Здесь также указывается каталог (6) в дереве «портов», где этот дополнительный пакет находится.
Однако пакет xorg является чем-то вроде «обманки» — при установке этого пакета не устанавливаются никакие файлы! В операционной системе FreeBSD пакет xorg присутствует только для описания зависимостей, необходимых для X Window System. Единственная запись, которую можно обнаружить в файле +CONTENTS, это ссылка на другие пакеты. Давайте рассмотрим содержимое файла +CONTENTS другого пакета, который действительно включает набор файлов. Вот содержимое пакета /usr/ports/archivers/zip:
Здесь мы снова видим рабочий каталог (1), но за ним следует собственно файл (2). Объединив имя каталога и имя файла, можно определить, что при установке пакета zip был установлен файл /usr/local/man/man1/zip.1.gz. Это страница руководства, с которой стоит ознакомиться. Далее следует комментарий, содержащий контрольную сумму MD5 (3) этого файла и инструкция (4) по удалению файла на случай, если потребуется удалить пакет. Однако этот пакет содержит не только страницу руководства, в состав пакета входит также двоичный файл (5). Вы уже наверняка поняли, что утилита zip(1) была установлена в виде файла /usr/local/bin/zip. При просмотре файла +CONTENTS можно определить имена и местоположение всех установленных файлов.
Основную информацию о файлах и каталогах можно получить с помощью программы pkg_info(1), но часто гораздо проще отыскать необходимую информацию самостоятельно.
Страницы: 1
4.4.1. Установка пакета
Для установки пакетов программного обеспечения для FreeBSD из
локальных файлов или с сервера в сети вы можете использовать утилиту
pkg_add(1).
Example 4-1. Сгрузка пакета и последующая его локальная установка
# 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), то проще всего, наверное,
воспользоваться опцией -r для pkg_add(1). Это приведёт к тому,
что утилита автоматически определит правильный формат объектных файлов
и релиз, а затем сгрузит и установит пакет с сервера FTP.
# pkg_add -r lsof-4.56.4
В примере выше нужный пакет будет сгружен и установлен без всякого
дополнительного взаимодействия с пользователем.
Файлы пакетов распространяются в формате .tgz. Вы можете найти их
по адресу ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages, или взять с
дистрибутива FreeBSD на компакт-дисках. Каждый CD из комплекта
FreeBSD на 4 дисках (а также PowerPak и тому подобное) содержит
пакеты в каталоге /packages. Расположение
пакетов похоже на то, как организовано дерево
/usr/ports. Каждая категория имеет собственный
каталог, и каждый пакет помещается в каталог
All.
Обновление всех приложений и пакетов
Теперь базовая система FreeBSD полностью пропатчена и обновлена. Пора обновить и все бинарные пакеты из-за изменений ABI. Мы просто запускаем следующую команду pkg:
# pkg-static install -f pkg # pkg bootstrap -f # pkg update # pkg upgrade
Установка всех сторонних приложений: Mysql, Nginx и так далее. Нам нужно запустить команду еще раз для удаления старых общих объектных файлов. В последний раз запускаем приведенную ниже команду и мы закончили обновление FreeBSD с 12 до 13 при помощи CLI:
# freebsd-update install
Также возможно обновить систему, используя исходный метод. Вам необходимо прочитать информацию, представленную в файле /usr/src/UPDATING.
# vim /usr/src/UPDATING