首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FreeBSD端口:要重新编译所有程序,少数软件包会失败,因为“卸载错误”/“已安装”

FreeBSD端口:要重新编译所有程序,少数软件包会失败,因为“卸载错误”/“已安装”
EN

Unix & Linux用户
提问于 2020-10-11 10:00:00
回答 1查看 992关注 0票数 4

很长一段时间以来,只通过pkg install使用二进制包。然后必须从源代码编译一个包,因为必须激活其他选项。由于进展顺利,我想在这台机器上完全切换到/usr/ports

清理(从某个地方得到的):

代码语言:javascript
复制
pkg autoremove
portsclean -C -D -DD
portsnap auto
portsclean -C -D -DD

然后做portupgrade -af --batch。该命令的结果是:

代码语言:javascript
复制
** Listing the failed packages (-:ignored / *:skipped / !:failed)
        ! multimedia/libvpx (libvpx-1.9.0)      (uninstall error)
        ! databases/db5 (db5-5.3.28_7)  (uninstall error)
        * databases/ruby-bdb (ruby26-bdb-0.6.6_8)
        * ports-mgmt/portupgrade (portupgrade-2.4.16,2)
        * devel/apr1 (apr-1.7.0.1.6.1_1)
        [...]

..。还有更多的跳过的包裹。

代码语言:javascript
复制
root:/usr/ports/multimedia/libvpx # make install
===>  Installing for libvpx-1.9.0
===>  Checking if libvpx is already installed
===>   libvpx-1.9.0 is already installed
      You may wish to ``make deinstall'' and install this port again
      by ``make reinstall'' to upgrade it properly.
      If you really wish to overwrite the old port of libvpx
      without deleting it first, set the variable "FORCE_PKG_REGISTER"
      in your environment or the "make install" command line.
*** Error code 1

Stop.
make: stopped in /usr/ports/multimedia/libvpx

类似于databases/db5。因此,我在两个目录中执行make deinstallmake reinstall操作,然后再次启动portupgrade -af --batch。但它以类似的信息结尾,这似乎更糟糕;这里只列出了!的代码:

代码语言:javascript
复制
        ! multimedia/libvpx (libvpx-1.9.0)      (uninstall error)
        ! databases/db5 (db5-5.3.28_7)  (uninstall error)
        ! devel/boost-libs (boost-libs-1.72.0_2)        (uninstall error)
        ! devel/cmake (cmake-3.18.3)    (uninstall error)

因此,这再次是“卸载错误”。

处理这件事的正确方法是什么?

最新消息:看来葡萄牙是罪魁祸首。它对Portmaster来说确实很好。即:

代码语言:javascript
复制
env BATCH=yes portmaster -afGyd --no-confirm

我花了一段时间才弄明白如何说服这个工具不要让我忙着每隔一分钟按一次"y“和"Enter”键,但是它在我所有的软件包中工作,要么是“安装”,要么是“重新安装”,或者是“升级”。没有错误。

然后我又一次尝试了portupgrade -af --batch,这再次导致了“卸载错误”。

我会把这写下来,作为一个答案,一旦我确认了它的另一个运行。

更新2:与Portmaster一起运行的另一次运行产生了一些软件包的“卸载错误”。在portsnap auto之后的另一天再试一次,Portmaster对我所有的包都做得很好。所以问题来来去去。我现在就要放弃了。由于最后一次完整的Portmaster运行是成功的,我将留在这里。我安装了一个每天的cron作业:

代码语言:javascript
复制
#!/bin/sh
set -e
portsnap auto
env BATCH=yes portmaster -aGyd --no-confirm
env BATCH=yes portmaster -ys --no-confirm
service -R
echo "All done!"

希望这会是好事。

更新3:我手动将上面的脚本与几个env BATCH=yes portmaster -afGyd --no-confirm交织在一起,这没有产生任何错误,但实际上重新安装了我的所有包。

一般备注:从现在起,我将始终在我的FreeBSD安装上使用端口。通过pkg预编译的包可以正常工作,但是总有一天,您需要在一个小包中配置一个与预编译版本不同的小配置。那你就需要港口。此外,在那一天,您可能没有时间重新学习如何使用操作系统基础结构的关键部分。所以我建议一路使用端口。如果有多台机器,也许可以查看Poudriere (我从未试过,但也许有一天会这样做)。

EN

回答 1

Unix & Linux用户

发布于 2020-10-11 13:15:42

pkg autoremove不做你认为它做的事情。

pkg自动删除用于删除孤立包,这些包是在解决依赖关系时安装的,不再需要。

您应该做的是对要卸载的内容进行pkg delete <pkg>。如果要使用make,则安装端口需要执行许多步骤。

/usr/ports/<pkg>中的第一步:

代码语言:javascript
复制
make config fetch checksum depends extract patch configure build

然后是make install,然后是make clean删除工作文件,或者make distclean移除工作文件和下载的程序。

所有这些都是假设您已经保持了您的端口树和包的最新。

你应该遵循优秀的FreeBSD手册

票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/613940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档