pkg: sqlite error while executing DROP INDEX deps_unique

Ошибка в полном виде:

pkg: sqlite error while executing DROP INDEX deps_unique;CREATE UNIQUE INDEX deps_unique ON deps(name, version, package_id); in file pkgdb.c:2262: UNIQUE constraint failed: deps.name, deps.version, deps.package_id

Означает, что где-то в базе есть дублирующие строки, причём не полностью 1 в 1, а совпадают 3 поля: name, version, package_id. Придётся править базу пакетов. Что бы понять, какие именно, выполним такую команду (на всякий случай сделайте резервную копию файла базы/var/db/pkg/local.sqlite)


# sqlite3 /var/db/pkg/local.sqlite "SELECT name, version, package_id FROM deps ORDER BY name;" | uniq -c | awk '$1 != 1 { print }'
2 gio-fam-backend|2.34.3|411
2 gio-fam-backend|2.34.3|417

А теперь посмотрим на них полностью:

# sqlite3 /var/db/pkg/local.sqlite "SELECT * FROM deps WHERE name='gio-fam-backend' AND version='2.34.3' AND package_id='411'"
devel/glib20|gio-fam-backend|2.34.3|411
devel/gio-fam-backend|gio-fam-backend|2.34.3|411
# sqlite3 /var/db/pkg/local.sqlite "SELECT * FROM deps WHERE name='gio-fam-backend' AND version='2.34.3' AND package_id='417'"
devel/glib20|gio-fam-backend|2.34.3|417
devel/gio-fam-backend|gio-fam-backend|2.34.3|417

А вот и проблемный пакет — gio-fam-backend (об этом написано в /usr/port/UPDATING).

20130731:
AFFECTS: users of glib20
AUTHOR: kwm@FreeBSD.org

The devel/gio-fam-backend port was removed in the glib 2.36 update.
Since the gio-fam-backend port was used in USE_GNOME=glib20, all
dependencies need to be rebuilt. The removal of gio-fam-backend isn’t
critical, glib20 using programs should work just fine if the port is still
installed. It is not clear however, if glib20 will use the new kqueue
backend or the old fam backend.

Note that users of pkg packages can just run the pkg delete command after
their next update.

# portmaster -r gio-fam-backend
# pkg_delete gio-fam-backend-\* (for pkgng: pkg delete gio-fam-backend)
# portmaster -a

or

# portupgrade -rf gio-fam-backend
# pkg_delete gio-fam-backend-\* (for pkgng: pkg delete gio-fam-backend)
# portupgrade -a

Хотя в каждой конкретной ситуации вы сами должны будете решить, что именно удалять. И так, приступим у удалению:

# sqlite3 /var/db/pkg/local.sqlite "DELETE FROM deps WHERE name='gio-fam-backend' AND version='2.34.3' AND package_id='411' AND origin='devel/gio-fam-backend';"
# sqlite3 /var/db/pkg/local.sqlite "SELECT * FROM deps WHERE name='gio-fam-backend' AND version='2.34.3' AND package_id='411';"
devel/glib20|gio-fam-backend|2.34.3|411
# sqlite3 /var/db/pkg/local.sqlite "DELETE FROM deps WHERE name='gio-fam-backend' AND version='2.34.3' AND package_id='417' AND origin='devel/gio-fam-backend';"
# sqlite3 /var/db/pkg/local.sqlite "SELECT * FROM deps WHERE name='gio-fam-backend' AND version='2.34.3' AND package_id='417';"
devel/glib20|gio-fam-backend|2.34.3|417

После этого желательно пересобрать проблемные пакеты.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *