免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1357 | 回复: 0
打印 上一主题 下一主题

FREEBSD软件包的更新管理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-16 09:54 |只看该作者 |倒序浏览

[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 这样的名字, 则它将拒绝执行操作。不过, 您可以使用
pkg_version(1)
来了解安装的 package 的版本。 除此之外, 也可以使用通配符:
# pkg_delete xchat\*
  这时, 所有名字以 xchat 开头的 package 都会被删掉。


软件包的管理
  
pkg_info(1)
是用于列出已安装的所有软件包列表和描述的程序。
# pkg_info
cvsup-16.1          A general network file distribution system optimized for CV
docbook-1.2         Meta-port for the different versions of the DocBook DTD
...
  
pkg_version(1)
是一个用来统计所有安装的软件包版本的工具。它可以用来比较本地 package 的版本与 ports 目录中的当前版本是否一致。
# pkg_version
cvsup                       =
docbook                     =
...
  在第二列的符号指出了安装版本的相关时间和本地ports目录树中可用的版本。
符号
含义
=
在本地ports树中与已安装的软件包版本相匹配。
已安装的版本要比在ports树中的版本旧。
>
已安装的版本要比在ports树中的版本新 (本地的port树可能没有更新)。
?
已安装的软件包无法在ports索引中找到。 (可能发生这种事情,举个例子, 您早先安装的一个 port 从 port 树中移出或改名了)
*
软件包有很多版本。
所有已安装的 package 信息都保存在 /var/db/pkg 目录下。安装文件的列表和每个 package 的内容和描述都能在这个目录的相关文件中找到。



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/34399/showart_423667.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP