FreeBSD: /usr/local/lib/libpkg.so.4: Undefined symbol “utimensat”

最近用Freebsd 10.2版本,升级一个bind包,没注意,先让我升级了一个PKG包,直接点YES,然后升级BIND99的时候,提示错误

/usr/local/lib/libpkg.so.4: Undefined symbol “utimensat”

网上找到了解决方法,就是降低PKG包的版本,目前升级了以后,是10.10.3,找到

https://pkg.freebsd.org/FreeBSD:10:amd64/release_4/Latest/pkg.txz ,这个版本是1.6.2 。放在/var/cache/pkg/目录中,

用如下命令替换

# pkg delete -f pkg

# pkg-static install -f /var/cache/pkg/pkg.txz 这里会报错

# pkg info sqlite3 pkg: warning: database version 35 is newer than libpkg(3) version 33, but still compatible pkg: sqlite error while executing INSERT OR ROLLBACK INTO pkg_search(id, name, origin) VALUES (?1, ?2 || ‘-‘ || ?3, ?4); in file pkgdb.c:1544: no such table: pkg_search

解决方法

# pkg shell

> CREATE VIRTUAL TABLE pkg_search USING fts4(id, name, origin);

> pragma user_version=33;

> .quit

降级后就可以使用pkg升级软件了。

如何避免以后再次出现这个问题呢?其实只要锁定pkg版本即可

# pkg lock pkg