>>[оверквотинг удален]
> Охх прочитал инфу о переходе на pkg2ng
> сделал все как написано в less /usr/ports/UPDATING
> pkg2ng переделал базу пакетов 1. В системе FreeBSD существуют понятия:
- порты - это дерево с Makefile'ами, описательной частью - pkg-descr,
со списком того что будет установлено - pkg-plist, патчами в директории files
Каждый порт в отдельности, представляет собой проект СБОРКИ объекта из исходных
текстов (sources).
Сборка осуществляется командой make. Порт может зависеть от другого ПО, те от
других портов и тд и тп рекурсивно. Это означает для сборки какого-то порта, прежде
будут собраны и установлены зависимости, которые нужны для СБОРКИ или РАБОТЫ
требуемого порта.
- пакеты - это уже СОБРАННЫЕ порты, могут иметь зависимости необходимые для
работы требуемого пакеты, понятно что если существуют зависимости, они должны
быть установлены
2. Система пакетов во FreeBSD старая и в настоящее время не соответствует
современным требованиям, предъявляемым к системам пакетов, общее название
pkg_install (СТАРАЯ СИСТЕМА ПАКЕТОВ):
- состоит из утилит pkg_info, pkg_add, pkg_delete, pkg_create, pkg_version,
pkg_update
- НОВАЯ СИСТЕМА пакетов, общее название pkgng (package new generation),
утилита pkg:
Commands supported:
add Registers a package and installs it on the system
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
create Creates software package distributions
delete Deletes packages from the database and the system
fetch Fetches packages from a remote repository
help Displays help information
info Displays information about installed packages
install Installs packages from remote package repositories
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
shell Opens a debug shell
shlib Displays which packages link against a specific shared library
stats Displays package database statistics
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
Старая и новая системы пакетов НЕСОВМЕСТИМЫ, необходимо пользоваться какой-то одной
и соответствующими командами, ибо формат базы пакетов разный и тд и тп
Итого, общее представление теперь есть.
Далее необходимо решить:
- либо вы будете пользоваться старой системой пакетов и соответствующими
утилитами: pkg_add, pkg_info и тд и тп
- либо новой системой пакетов и утилитой pkg
# pkg info
# pkg search
# pkg rquery
# pkg query
# pkg install/add
# pkg delete
...
Если мы переходим на новую систему пакетов, нам необходимо преобразовать старый
формат (дерево установленных портов и паетов) - /var/db/pkg/name
в новый, который будет хранится в базе sqlite:
# ls -la /var/db/pkg/*.sqlite
-rw-r--r-- 1 root wheel 2825216 Oct 11 13:04 /var/db/pkg/local.sqlite
-rw-r--r-- 1 root wheel 82740224 Sep 10 13:03 /var/db/pkg/repo.sqlite
#
где local.sqlite - база установленных пакетов и портов в новом формате (pkgng)
repo.sqlite - данные с удаленного репозитория
Что мы делаем если у нас все в старом формате, а мы решили перейти на новый PKGNG,
1) делаем копию старого формата, вручную, на всякий случай (своя копия всегда надежна и
понятна):
# cd /var/db/pkg
# tar zcvf /var/tmp/oldpkg_db.tgz .
прим: мы всегда сможем вернуть ее назад, навсегда или на время чтобы разрешить какую-либо
проблему (а их быть не должно)
2) переводим старый формат /var/db/pkg/name в новый, используя утилиту pkg2ng
# pkg2ng
которая создаст архив старой базы (мы ранее создали вручную) и переведет все
в новый формат.
Теперь, мы не можем использовать pkg_info!!!
Вместо этого мы будем использовать pkg:
# pkg info
# pkg install
# pkg delete
> далее вот что вылезло куча пакетов
> pkg_info: the package info for package 'GeoIP-1.4.8_3' is corrupt
> pkg_info: the package info for package 'apache22-2.2.22_8' is corrupt
...
> ...
> и т.д.
вы перешли на НОВУЮ систему пакетов, а использовали утилиту pkg_info от
старого пакетного менеджера, вместо:
# pkg info
# pkg info | grep bash (например)
Но и это не все, как уже было сказано, есть:
- система ПАКЕТОВ
- система ПОРТОВ
Утилита для работы с пакетами: pkg
а утилиты для работы с портами:
- portmaster
- portupgrade
- и другие утилиты для работы с портами из портов (по написанию масло масляное, но
по сути верно)
Так вот утилиты portmaster, portupgrade - либо нужно патчить для того чтобы они
регистрировали установленные порты в базе пакетов в НОВОМ формате, либо установить
более свежие, которые уже включают эти патчи:
# less /usr/ports/UPDATING
...
20121015:
AFFECTS: users of ports-mgmt/portmaster
AUTHOR: bdrewery@FreeBSD.org
Portmaster now support pkgng. To use pkgng, enable the patch in the port,
enable pkgng in your make.conf, and convert your existing /var/db/pkg
database. Also see UPDATING entry 20121010 if you are on a recent CURRENT
and do not want to use pkg.
# make -C /usr/ports/ports-mgmt/portmaster config build deinstall install clean
# echo 'WITH_PKGNG=yes' >> /etc/make.conf
# pkg2ng
20121015:
AFFECTS: users of ports-mgmt/portupgrade
AUTHOR: bdrewery@FreeBSD.org
Portupgrade now support pkgng. To use pkgng, enable it in your make.conf,
and convert your databases.
# echo 'WITH_PKGNG=yes' >> /etc/make.conf
# pkg2ng
# pkgdb -fu
...
После того как мы проапгрейдим portmaster или portupgrade для использования новой
системы пакетов, как указано выше, мы должны в файл /etc/make.conf внести запись:
/etc/make.conf
...
WITH_PKGNG=yes
...
для portupgrade после выполнения pkg2ng, выполнить: pkgdb -fu
И это не все, потому как если вы давно не пользовались портами и регулярно НЕ ЧИТАЕТЕ
списки рассылки freebsd, форум freebsd и UPDATING, то вероятно НЕ ЗНАЕТЕ что
летом, порты перевели на использование нового фреймворка OPTIONSNG:
http://wiki.freebsd.org/Ports/Options/OptionsNG
что это? Старые опции в портах: WITH_NAME, WITHOUT_NAME - неудобны в использовании
и были заменены, стало очень удобно использовать новые опции для использовании
с порт-менеджерами и просто для сборки портов, например в /etc/make.conf:
...
#-- global ports options
#-- batch /dialog - noninteractive mode for make ports
#BATCH=yes
#NO_DIALOG=yes
#-- don't install port docs, examples
#NOPORTDOCS=yes
#NOPORTEXAMPLES=yes
#-- make without debug info/flags
#WITHOUT_DEBUG=yes
#-- Intel KMS driver with new xorg 1.10...
#WITH_KMS=yes
#WITH_NEW_XORG=yes
#-- use PKGNG
WITH_PKGNG=yes
#-- global optionsng for all
#OPTIONS_UNSET=NLS IPV6 VDPAU
#OPTIONS_UNSET=DOCS DEBUG DEBUGGING
#-- individual ports optionsng
arj_UNSET+=DOCS
p7zip_SET+=MODULES
p7zip_UNSET+=MINIMAL
unrar_SET+=OPENSSL_AES
unrar-iconv_SET+=OPENSSL_AES
perl5.14_SET+=USE_PERL PERL_64BITINT PTHREAD
perl5.14_UNSET+=DEBUGGING GDBM PERL_MALLOC THREADS MULTIPLICITY SITECUSTOMIZE
python27_SET+=NLS PYMALLOC THREADS UCS4
python27_UNSET+=IPV6 EXAMPLES FPECTL PTH SEM UCS2
m4_UNSET+=LIBSIGSEGV
bison_SET+=NLS
libcheck_UNSET+=DOCS EXAMPLES
libiconv_SET+=EXTRA_ENCODINGS
pcre_SET+=JIT
...
Важное, если мы ранее собирали что-то из портов со СВОИМИ опциями, они должны
были сохранится в /var/db/ports/name/options
Для работы со свежими портами, необходимо старые опции сконвертировать в новый
формат:
# /usr/ports/Tools/scripts/options2ng.sh -p
Можно считать что в целом, почти все, за исключением важных моментов:
pkg-config был заменен на pkgconf и тд и тп - читайте что необходимо было
сделать и тому подобное...
# less /usr/ports/UPDATING
примечание: лучше выбрать какой-то один менеджер портов:
- либо portmaster
- либо portupgrade
- либо другой из портов с поддержкой pkgng
чтобы не запутаться и лучше хорошо знать и иметь опыт с одним, чем получить кашу
работая сразу с несколькими.
Для работы с portmaster, нужно в его конфиге задать сохранение shared libraries,
тогда с обновлениями проблем не будет.
> Подскажите что можно сделать, а начинающий в этом деле так что сильно
> не ругайтесь :)
никто и не ругает, но если хотите заниматься Unix'ами, нужно регулярно и много
читать, учиться пользоваться man'ами и главное - думать.
Все понятно расписано?