FREEBSD软件包的更新管理

2009-05-13 10:41:27来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折


[FreeBSD] portupgrade 可能出现的问题和解决方法
第一个问题是:当执行 portupgrade 时出现 /var/db/pkg/pkgdb.db: unexpected file type or format — Invalid argument 的讯息时,该怎么办?
这个问题常常出现,通常是发生在你很久没执行 portupgrade,而 port tree 当中可能有其中一项软件需要某个版本的相依组件,但是这个组件 portupgrade 却把它摆在升级清单的后头,还没轮到它。这时候如果该软件的 make file 没写好时,portupgrade 可能会被中断,此时 /var/db/pkg/pkgdb.db 会不正常关闭,因此档案会毁损。
因此,如果你此时下达 portupgrade 指令时,就会出现:/var/db/pkg/pkgdb.db: unexpected file type or format — Invalid argument 的讯息,而且好像 portupgrade 从此就无法正常工作。情况并没有如此糟糕,这时你只需先把 /var/db/pkg/pkgdb.db 砍掉,然后重新建立一个让 portupgrade 使用即可:
home/your-id> rm /var/db/pkg/pkgdb.db
home/your-id> pkgdb -fu
千万要记得,这件工作和执行 portupgrade 一样,需要有 root 的权限才能执行。这时候你可以开始重新执行一次 portupgrade -a (使用-a 参数,就是把所有的软件全部升级一次),虽然一开始会出现一些错误讯息,但是它立刻会将你的 /var/db/pkg/pkgdb.db 修正成新而正确的版本,然后就一切 ok。
第二个问题是:有时你执行 portupgrade -a 时,会遇到程序自动 skip 掉一些软件这时候该怎么办?这时候你不用太过担心,当你看到升级结果有些程序的升级被 skip 掉,那么只要记得重新再执行 portupgrade -a 一次,如果还是有软件被跳过,再执行一次,如此一直到所有软件全部被升级完成为止。会碰到这种状况和前面的情况其实是类似的,也是因为相依组件尚未执行升级而跳过,只是 make file 有写好,暂时跳过。
再补充一件事。portupgrade 有一个 -l 的参数,请你一定要善用它。使用的方法是在 -l 参数后加上一个档名,比如说你下达这个指令时:
home/your-id> portupgrade -a -l ~/aaa
这时候,portupgrade 会将你的所有已安装的套件有新版本的全部升级,然后把结果列一个清单存在你的家目录中的 aaa 这个档案中。这个档案里会有你所有已安装套件的清单,清单会列出目前升级后的版本,此外还会在清单中每项套件前列有 +/-/! 这三种符号之一。「+」号代表该套件在这次升级中被升级了;「-」号代表此次保持原版本,并没有新版本可供升级;「!」则是代表该套件在这次执行 portupgrade 时跳过了,这时你最好如我上一段所说的,再次执行 portupgrade -a 一次。
最后,也是最重要的。虽然 Unix 高手们喜欢用 cron 和 at 来把工作自动化,但是执行 portupgrade 最好还是手动。原因就是因为 portupgrade 常因 make file 没写好而出现一些例外状况,如果你放心地交给 cron 去完成,很有可能很长一段时间你的套件都不会更新,直到你惊觉为止。
查看当前包的壮态。
安装
ports-mgmt/portaudit
,它能够自动地检查已经安装的应用程序的漏洞; 此外,在您安装程序之前它也会首先检查是否存在已知的漏洞。 另外, 您也可以使用 portaudit -F -a 这个命令在安装了某个软件包之后作出检查。

  要删除先前安装的软件package,只要使用
pkg_delete(1)
工具。
# pkg_delete xchat-1.7.1
  需要注意的是,
pkg_delete(1)
需要提供完整的包名; 如果您只是指定了类似 xchat 而不是 xchat-1.7.1 这样的名字, 则它将拒绝执行操作。不过, 您可以使用

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:[FreeBSD] 一直出现 ssh/tcp: bind: Address already in u

下一篇:execute the php-cgi in the thttpd