| ||||||||||||||||
| ||||||||||||||||
| ||||||||||||||||
Очистка портов во FreeBSD Несмотря на то, что все хвалят систему портов FreeBSD, в ней есть ограничения. Одно из ограничений действительно уменьшает другие сильные стороны FreeBSD - это система апгрейда. Взаимодействие с которой использует очень неуклюжий путь. Процесс инсталляции портов записывает каждый файл порта, включая все зависимости. Например, много портов требуют графическую библиотеку PNG. Записи порта указывают на точную версию библиотеки PNG, которая требуется, например версия 1.0.11. В общем, это та же версия, которая находится в вашем дереве портов. Процесс модернизации (апгрейда) во FreeBSD может обновить только версии программ, что есть в дереве портов. Например, библиотека PNG была недавно обновлена до версии 1.0.12. Номер основной версии не увеличился, но в новой библиотеки (промежуточной версии) были сделаны некоторые исправления ошибок. Мне хочется обновить свою версию. Если я это сделаю - более тридцати портов, в которых указана ТОЧНАЯ версия PNG-библиотеки, будут иметь неправильные записи (ссылки на библиотеку). В моем ноутбуке установлено 187 пакетов. В основном я обновляю
свое дерево портов еженедельно, так как порты загрязняются очень
быстро и вскоре их становится невозможным использовать. К счастью
Akinori MUSHA шагнул вперед, создав инструмент позволяющий
разобраться в этом мусоре: Инструменты, включенные в Это ускоряет поиск и манипуляцию этой информацией. Эти
инструменты также перезаписывают различные Перед тем как вы начнете использовать $ tar -czvf dbpkg.tgz /var/db/pkg Запустите $ pkgdb -F Checking the origin of Hermes-1.3.2 Checking the origin of Mesa-3.4.1 Checking the origin of Mesa-3.4.2_1 Checking the origin of ORBit-0.5.10_5 Checking the origin of XFree86-aoutlibs-3.3.6.9 ... Проходя по всем пакетам с измененными (неправильными)
зависимостями, Stale dependency(устаревшая зависимость): esound-0.2.22 -> libaudiofile-0.2.2: \ libaudiofile-0.2.1_1 ? \ ([y]es/[n]o/[a]ll) [yes] Итак, Если я напечатаю В предыдущем примере Что случится когда в списке портов будет зависимость от
Stale dependency: Xaw3d-1.5 - imake-4.1.0: New dependency? (? to help): ? Здесь у меня есть выбор. Я могу назначить новую зависимость или я могу сообщить пакету, что это не зависимость. [Enter] to skip, [Ctrl]+[D] to delete, \ [.][Enter] to abort, \ [Tab] to complete New dependency? (? to help): Control-D it is. Delete this? ([y]es/[n]o/[a]ll) [yes] Deleted. Если я выберу Смотрим дальше: Stale dependency: xneko-4.4 - XFree86-libraries-4.1.0: Delete this? ([y]es/[n]o/[a]ll) [yes] Deleted. Другой случай, это действительно зависимость, которую
Stale dependency: plugger-3.3_1 - timidity++-esound-2.10.4: New dependency? (? to help): ? [Enter] to skip, [Ctrl]+[D] to delete, \ [.][Enter] to abort, [Tab] to complete New dependency? (? to help): timidity++-2.10.4 Завершение табом делает это выполнимым. Я знаю, что
Duplicated origin: graphics/Mesa3 - Mesa-3.4.1 Mesa-3.4.2_1 Remove any of them? [no] Здесь у меня проблема. Нередко случается ситуация, когда вы устанавливаете программу из пакета и он требует для установки другой пакет. У вас могут быть одновременно установлены разные версии пакетов. Если вы устанавливаете из пакетов, это автоматически устанавливает требуемые пакеты, даже если в системе уже установлены немного другие версии этих пакетов. Что то похожее произошло и в моей системе. Мой ноутбук имеет две разные версии Mesa, но одна версия перезаписана другой. Очевидно это не может быть очень плохо, так как моя система нормально работает (в конце концов мне следует полностью удалить Mesa и установить свежую версию). Итак мне нужно очистить базу данных портов. Я спокойно удалил более старую версию. Итак теперь у вас есть база данных информации об установленных
пакетах в Теперь, когда мы установили необходимые инструменты, давайте
посмотрим, что мы можем сделать. Чтобы увидеть какие программы в
системе устарели, используйте $ portversion Hermes = Mesa = ORBit < XFree86-aoutlibs < Xaw3d = aalib = Символ $ pkg_deinstall apache ---< Deinstalling 'apache-1.3.20' [Updating the pkgdb in /var/db/pkg ... - 182 packages found (-1 +0) (...) done] Здесь есть интересная особенность, мне не нужно больше указывать
полностью номер версии! (Это утомляло меня некоторое время в
стандартных утилитах FreeBSD Утилиты Предположим я хочу обновить некоторые порты. К тому же, я хочу
обновить сохраняя синхронизацию с базой данных, внося походу
корректировки в записи в $ portupgrade gd ===> Cleaning for gettext-0.10.35 ===> Cleaning for gmake-3.79.1 ===> Cleaning for libtool-1.3.4_2 ===> Cleaning for jpeg-6b ===> Cleaning for png-1.2.0 ===> Cleaning for freetype2-2.0.5 ===> Cleaning for gd-1.8.4_4 If you want to compile in X support use 'make -DWITH_X11' instead ===> Extracting for gd-1.8.4_4 .... Вы увидите такой же вывод как от ... ---> Deinstalling 'gd-1.8.4_3' pkg_delete: package 'gd-1.8.4_3' is required by these other packages and may not be deinstalled (but I'll delete it anyway): scr2png-1.1 [Updating the pkgdb in /var/db/pkg ... - 180 packages found (-1 +0) (...) done] ===> Installing for gd-1.8.4_4 ... После окончания установки, утилита снова обновит базу данных пакетов. Теперь всё опять синхронизированно. Теперь давайте рассмотрим некоторые возможные трудности. Мой порт
Если я хочу сохранить массу времени, мне следует использовать
$ portupgrade -R docproj This port will try to ensure that the tools used by the FreeBSD Documentation Project are installed on your system so you can convert documentation from SGML to other formats. Один из таких компонентов это Если вы не хотите создавать PostScript и PDF форматы из
документации, вам не нужен Например: make JADETEX=no make JADETEX=yes *** Error code 1 Stop. ** Command failed: make clean build ** Fix the problem and try again. ** The following packages were not installed or upgraded (-:skipped / !:failed) ! textproc/docproj (docproj-1.4) (unknown build error) Ой! Этот порт требует настройки. Вы можете отредактировать
Когда вы закончите, мы можете проверить как установились новые
версии портов. Возможно вы обнаружите, что в других портах
изменились зависимости, например, порт А ссылается на порт В
(зависит от порта В) и порт С также ссылается на порт В, запустите
Если вы хотите чтобы система занималась этим процессом
самостоятельно, вы можете использовать Возможно вы захотите переустанавливать один порт несколько раз из
одного И наконец я хочу сказать что этот инструмент довольно надежный. К тому времени как я закончил эту статью, я запустил эти программы, чтобы проверить мои примеры. Я нашел один устаревший пакет и дал команду обновить и его: $ portupgrade -R portupgrade Да, это работает. Хочу сказать - этот инструмент безусловный победитель. |
|
| ||||||||||||||||
|